## Afriex SDK

### TypeScript

```
const result = await afriex.webhooks.triggerTestWebhook({
  event: "TRANSACTION.UPDATED",
  resourceId: "transaction-id",
});

console.log(result); // { success: true, message: "..." }
```

```
curl --request POST \
  --url https://sandbox.api.afriex.com/api/v1/webhooks/trigger \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "event": "TRANSACTION.UPDATED",
  "entityId": "6952826eba52c13b669fb263"
}
'
```

```
import requests

url = "https://sandbox.api.afriex.com/api/v1/webhooks/trigger"

payload = {
    "event": "TRANSACTION.UPDATED",
    "entityId": "6952826eba52c13b669fb263"
}
headers = {
    "x-api-key": "<api-key>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

```
const options = {
  method: 'POST',
  headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
  body: JSON.stringify({event: 'TRANSACTION.UPDATED', entityId: '6952826eba52c13b669fb263'})
};

fetch('https://sandbox.api.afriex.com/api/v1/webhooks/trigger', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
```

```
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://sandbox.api.afriex.com/api/v1/webhooks/trigger",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'event' => 'TRANSACTION.UPDATED',
    'entityId' => '6952826eba52c13b669fb263'
  ]),
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json",
    "x-api-key: <api-key>"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
```

```
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

url := "https://sandbox.api.afriex.com/api/v1/webhooks/trigger"

payload := strings.NewReader("{\n  \"event\": \"TRANSACTION.UPDATED\",\n  \"entityId\": \"6952826eba52c13b669fb263\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("x-api-key", "<api-key>")
	req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))
}
```

```
HttpResponse<String> response = Unirest.post("https://sandbox.api.afriex.com/api/v1/webhooks/trigger")
  .header("x-api-key", "<api-key>")
  .header("Content-Type", "application/json")
  .body("{\n  \"event\": \"TRANSACTION.UPDATED\",\n  \"entityId\": \"6952826eba52c13b669fb263\"}\n")
  .asString();
```

```
require 'uri'
require 'net/http'

url = URI("https://sandbox.api.afriex.com/api/v1/webhooks/trigger")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"event\": \"TRANSACTION.UPDATED\",\n  \"entityId\": \"6952826eba52c13b669fb263\"}\n"

response = http.request(request)
puts response.read_body
```

### Responses

Success and Error Codes:

- 200
- 400
- 401
- 403
- 500

### Response Examples

```json
{
  "data": {
    "queued": true,
    "event": "TRANSACTION.UPDATED",
    "entityId": "6952826eba52c13b669fb263",
    "deliveryUrl": "https://merchant.example.com/webhooks"
  }
}
```

```json
{
  "code": "<string>",
  "error": "<string>",
  "details": {
    "errorMessage": "<string>",
    "friendlyMessage": "<string>",
    "data": {
      "customerId": "<string>"
    }
  }
}
```

### Testing the Webhook
Fire a real signed webhook from sandbox using an existing entity as the payload. Use this to test your webhook handler without having to manufacture the underlying activity. This endpoint is only available in the **sandbox/staging** environment and returns a `403 Forbidden` response in production.
