Zynk
Getting StartedProduct GuidesAPI ReferenceFAQ'sRecipes
Getting StartedProduct GuidesAPI ReferenceFAQ'sRecipes
  1. Webhooks
  • Transformer - Cross border transfer
    • Transformer: Entity
      • Create Entity
      • Entities
      • Entity By ID
      • Entity By Email
      • KYC Status
      • KYC Requirements
      • Submit KYC/KYB
      • Get KYC Documents
    • Transformer: Accounts
      • External Accounts
        • Generate Plaid Link Token
        • Update Plaid Link Token
        • Get External Account Payload Requirements
        • Add External Account
        • Enable External Account
        • Disable External Account
        • Delete External Account
        • Get External Account by ID
        • Get External Accounts
      • Funding Accounts
        • Create Funding Account
        • Activate Funding Account
        • Deactivate Funding Account
        • Funding Account by ID
        • All Funding Accounts
      • Entity Accounts (Deprecated)
        • Add Entity Account
        • Remove Entity Account
        • Get Entity Account
        • Get Entity Accounts
    • Transformer: Transfers
      • Simulate
      • Transfer
      • All Transfers
      • Transfers by entity
      • Transfer by execution ID
      • Transfer by partner transaction ID
      • All transfers for partner
    • Transformer: Utility
      • Partner Payments Account Balance
      • Partner Payments Deposit
      • Get Jurisdictions
    • Webhooks
      • Get Webhook Events History
        GET
      • Registered Webhook URL
        GET
      • Register or Update Webhook URL
        PUT
  • Transporter - Automated Liquidity Manager
    • ALM Market
      • Create Reserve Quote
      • Accept Reserve Frame
      • Get Active Reserves
      • Get All Reserves
    • Transaction Details by ID, Partner Transaction ID, or Transaction Hash
      GET
    • Transaction Details
      GET
    • Transaction Details by ID
      GET
    • Partner Details
      GET
    • Initiate Transaction
      POST
    • Replenish Fee Quote
      POST
    • Quote Fulfilled
      POST
    • Replenish Initiate
      POST
    • Replenish Batch Transaction
      POST
    • Replenish Fee Quote Batch
      POST
  • Teleport - Pay-In Accounts
    • Create Teleport Route
      POST
    • Update Teleport Destination
      POST
    • Toggle Teleport Status
      POST
    • Teleport Details
      GET
    • Teleport Routes by Entity
      GET
  • Continuum - Wallet Infrastructure
    • Authentication
      • Register primary authentication
    • Wallet Management
      • Prepare wallet creation challenge (Step 1)
      • Submit wallet creation activity (Step 2)
    • Account Management
      • Prepare account creation challenge (Step 1)
      • Submit account creation activity (Step 2)
    • Passkey Management
      • Prepare passkey registration (Step 1)
      • Submit passkey registration (Step 2)
      • Get passkey authenticators
      • Prepare passkey deletion (Step 1)
      • Submit passkey deletion (Step 2)
    • Wallet Information
      • Get wallet details
      • Get wallet balances
      • Get transactions for address
    • Sessions
      • Initiate OTP delivery
      • Start authentication session
  • Archive
    • KYC Documents
    • Prepaid KYC Balance
    • Prepaid KYC Deposit
Getting StartedProduct GuidesAPI ReferenceFAQ'sRecipes
Getting StartedProduct GuidesAPI ReferenceFAQ'sRecipes
  1. Webhooks

Register or Update Webhook URL

PUT
/api/v1/transformer/utility/webhook
Registering or Updating Your Webhook URL
To register or update your webhook URL, use the following endpoint:
PUT /transformer/utility/webhook

Request#

{
  "webhookUrl": "https://your-domain.com/webhook-endpoint"
}

Response#

{
  "success": true,
  "data": {
    "message": "Webhook URL updated successfully."
  }
}

Webhook Signature Verification#

For security, each webhook request includes a signature header that you should verify to ensure the webhook is sent by our system.
Headers
z-webhook-signature: timestamp:signature
Signature Verification
Use the following code to verify the signature.
Verification Process
1.
Extract the timestamp and signature from the z-webhook-signature header
2.
Recreate the signed body by adding the timestamp to your received payload
3.
Generate the expected signature using your secret
4.
Compare the received signature with the expected signature

Webhook Event Structure#

All webhook events follow a consistent structure with these fields:
eventCategory: The category of the event (e.g., "kyc")
eventType: The type of action that occurred (e.g., "transitioned")
eventStatus: The status of the event (varies by event category)
eventObject: The data object containing event-specific details
Example Event
{
  "eventCategory": "kyc",
  "eventType": "transitioned",
  "eventStatus": "approved",
  "eventObject": {
    "entityId": "entity_id",
    "routingId": "routing_id",
    "status": "approved",
    "routingEnabled": true
  }
}

Supported Event Categories and Types#

Event CategoryDescription
kycEvents related to Know Your Customer verification processes
transferEvents related to money transfers in the system
webhookEvents related to webhook configuration changes

Event Types by Category#

Each event category has specific event types:

KYC Events#

Event TypeDescription
transitionedTriggered when a KYC verification changes status
Example KYC event:
{
  "eventCategory": "kyc",
  "eventType": "transitioned",
  "eventStatus": "[status]",
  "eventObject": {
    "entityId": "entity_id",
    "routingId": "routing_id",
    "status": "[status]",
    "routingEnabled": true
  }
}

KYC Status Values#

StatusDescription
not_startedThe KYC process has not been initiated
initiatedThe KYC process has been started but not yet completed
reviewingKYC information has been submitted and is under review
additional_info_requiredAdditional information is required to complete the KYC process
rejectedThe KYC verification has been rejected
approvedThe KYC verification has been approved

Transfer Events#

Event TypeDescription
transitionedTriggered when a transfer status changes
Example Transfer Events:
Initial Transaction Creation (Pending)
Triggered when POST /api/v1/transformer/transaction/simulate API is called.
Contains an empty stepDetails object at this stage
Signals the beginning of the transaction execution process
{
  "eventCategory": "transfer",
  "eventStatus": "pending",
  "eventType": "transitioned",
  "eventObject": {
    "entityId": "entity_7fed923d_68e3_425c_9809_8ccfc390f59d",
    "executionId": "exec_5284bb29_9f0c_4480_96af_e771b9df7585",
    "transactionId": "partner_transaction_id_26",
    "transactionStatus": "pending",
    "stepDetails": {}
  }
}
Transaction Execution Started (Processing)
{
  "eventCategory": "transfer",
  "eventStatus": "processing",
  "eventType": "transitioned",
  "eventObject": {
    "entityId": "entity_7fed923d_68e3_425c_9809_8ccfc390f59d",
    "executionId": "exec_15876c4c_e54c_4a5a_a737_5329b37c48e1",
    "transactionId": "partner_transaction_id_28",
    "transactionStatus": "processing",
    "stepDetails": {}
  }
}
Step Completion (Processing)
{
  "eventCategory": "transfer",
  "eventStatus": "processing",
  "eventType": "transitioned",
  "eventObject": {
    "entityId": "entity_7fed923d_68e3_425c_9809_8ccfc390f59d",
    "executionId": "exec_1a880a1a_01c1_4314_8f51_6f06ed51618b",
    "transactionId": "partner_transaction_id_21",
    "transactionStatus": "processing",
    "stepDetails": {
      "name": "Awaiting Fiat Deposit",
      "status": "completed",
      "currentStep": 1,
      "totalSteps": 3
    }
  }
}
Transaction Completion
{
  "eventCategory": "transfer",
  "eventStatus": "completed",
  "eventType": "transitioned",
  "eventObject": {
    "entityId": "entity_7fed923d_68e3_425c_9809_8ccfc390f59d",
    "executionId": "exec_1a880a1a_01c1_4314_8f51_6f06ed51618b",
    "transactionId": "partner_transaction_id_21",
    "transactionStatus": "completed",
    "stepDetails": {
      "name": "Making Transfer to Beneficiary",
      "status": "completed",
      "currentStep": 3,
      "totalSteps": 3
    }
  }
}

Transaction Status Values#

StatusDescription
pendingThe transaction has been created via the simulate API but not yet executed
processingThe transaction is being executed and steps are in progress
completedThe transaction has been successfully completed
failedThe transaction has failed due to an error in one of the steps

Step Status Values#

StatusDescription
completedThe step has been successfully completed
failedThe step has failed due to an error
NOTE - Originally the step has the following statuses: pending, processing, completed, and failed. However, webhooks will only be triggered for completed and failed statuses.

Webhook Events#

Event TypeDescription
updatedTriggered when your webhook URL is updated
Example webhook event:
{
  "eventCategory": "webhook",
  "eventType": "updated",
  "eventStatus": "url_updated",
  "eventObject": {
    "previous": "https://your-domain.com/webhook-endpoint",
    "updated": "https://your-domain.com/webhook-endpoint"
  }
}

Best Practices#

1.
Implement Retry Logic: Your webhook endpoint should return a 2xx status code as quickly as possible. If your server is unable to process the webhook, our system will retry with an exponential backoff.
2.
Verify Signatures: Always verify the webhook signature to ensure the request is coming from our system.
3.
Process Events Idempotently: Events may be delivered more than once in rare circumstances. Design your webhook handler to be idempotent.
4.
Handle Event Object Variations: The eventObject structure may vary according to the event category and type. Your code should be flexible enough to handle these variations.
5.
Monitor Webhook Health: Regularly check that your webhook endpoint is correctly receiving and processing events.

Request

Body Params application/json

Examples

Responses

🟢200OK
application/json
Webhook URL updated successfully
Body

🟠400Bad Request
🟠401Unauthorized
🔴500Server Error
Request Request Example
Shell
JavaScript
Java
Swift
curl --location --request PUT '/api/v1/transformer/utility/webhook' \
--header 'Content-Type: application/json' \
--data-raw '{
    "webhookUrl": "https://your-domain.com/webhook-endpoint"
}'
Response Response Example
200 - Example 1
{
    "success": true,
    "data": {
        "message": "Webhook URL updated successfully."
    }
}
Modified at 2025-11-11 17:28:24
Previous
Registered Webhook URL
Next
Create Reserve Quote
Built with