How to set up a webhook
Pre-requisites:
- Ensure to authenticate all request using the API key.
- You need a valid and reachable URL to receive webhook notifications.
- Use secure connections (HTTPS) for webhook URLs to ensure data integrity and security.
Register your webhook
Use the following endpoints to register your URL
curl -X POST "https://staging-api.payments.ai/v1/webhook-destinations" \
     -H "Authorization: ApiKey your_api_key_here" \
     -H "Content-Type: application/json" \
     -d '{
           "url": "https://your-url-here.com/webhook",
           "auth": {
             "type": "basic",
             "username": "user",
             "password": "pass"
           }
         }'
Webhook registration response
If the registration is successful, you will receive a response with the following details:
HTTP Status code 201
{
  "type": "object",
  "data": {
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "url": "string",
    "auth": {
      "type": "basic",
      "username": "string",
      "password": "string"
    }
  }
}
Debugging registration:
- 
HTTP Status code 400- Your payload is incorrect (wrong data){
 "errorCode": "string",
 "statusCode": 400,
 "message": "Bad request",
 "details": "string"
 }
- 
HTTP Status code 401- there is a problem with your Authorization API key{
 "errorCode": "string",
 "statusCode": 401,
 "message": "Missing auth token"
 }
- 
HTTP Status code 403- forbidden access{
 "errorCode": "string",
 "statusCode": 403,
 "message": "Forbidden access"
 }
- 
HTTP Status code 500- internal server error{
 "errorCode": "string",
 "statusCode": 500,
 "message": "Internal server error"
 }You can find all webhooks endpoint in the Webhooks API Documentation. 
Validate your webhook
To validate your webhook, you send HTTP GET request.
curl -X GET "https://staging-api.payments.ai/v1/webhook-destinations/:webhookID" \
     -H "Authorization: ApiKey your_api_key_here" \
     -H "Accept: application/json"
Test your webhook
To test your webhook, you can send a HTTP POST request to create a new transaction.
curl -X POST "https://staging-api.payments.ai/v1/organizations/:organizationID/transactions" \
     -H "Authorization: ApiKey your_api_key_here" \
     -H "Content-Type: application/json" \
     -d '{
          "type": "sale",
          "customerId": "string",
          "currency": "AED",
          "amount": 0,
          "paymentInstruction": {
          "token": "string"
          }
         }'
If the webhook has been successfully registered, you will receive a webhook event response with the following details:
type Event = {
  deduplicationId: string; // unique identifier for the event, used to prevent duplicate events
  type: string;
  organizationId: string;
  metadata: {
    amount: number;
    refundAmount: number | undefined;
    refundableAmount: number;
    currency: string; // USD, EUR, etc.
    status: TransactionStatus;
    result: TransactionResult;
    combinedStatus: TransactionResultStatusCombined | undefined;
    customer: Customer;
    date: Date;
    type: TransactionType;
    paymentType: 'one-time-payment' | 'subscription-payment';
    paymentInstrument: PaymentInstrument | null;
    invoices: Invoice[];
    gatewayName: string;
    gatewaySlug: string | null;
    subscriptionId: string | undefined;
    paymentLink: string | undefined;
    approvalLink: string | undefined;
    permissionBundle: TransactionPermissionsBundle;
    isProcessedOutside: boolean;
    refundedAt: Date | undefined;
  };
};
Additional endpoints
You can find all webhook related endpoints in the Webhooks API Documentation.
Get Your webhook destinations
curl -X GET "https://staging-api.payments.ai/v1/webhook-destinations" \
     -H "Authorization: ApiKey your_api_key_here" \
     -H "Accept: application/json"
Get webhook destination by ID
curl -X GET "https://staging-api.payments.ai/v1/webhook-destinations/:webhookID" \
     -H "Authorization: ApiKey your_api_key_here" \
     -H "Accept: application/json"
Update webhook destination
curl -X PATCH "https://staging-api.payments.ai/v1/webhook-destinations/:webhookID" \
     -H "Authorization: ApiKey your_api_key_here" \
     -H "Content-Type: application/json" \
     -d '{
           "url": "https://newexample.com/webhook",
           "auth": {
             "type": "basic",
             "username": "newuser",
             "password": "newpass"
           }
         }'
Delete webhook destination
curl -X DELETE "https://staging-api.payments.ai/v1/webhook-destinations/:webhookID" \
     -H "Authorization: ApiKey your_api_key_here"
Learn more about webhooks in the Webhooks Documentation and Explore the Webhooks API Documentation.