
1. Introduction
The Mass Pay API allows you to disburse funds to multiple recipients in a single HTTP request.
Key Concepts:
Asynchronous Processing: You submit a batch and receive a 202 Accepted immediately. Processing happens in the background .
Observability: Status is tracked via polling (GET) or pushed via Webhooks.
2. Authentication & Base Setup
Authentication: Bearer Token (OAuth2 / API Key) scoped to the Issuer Account.
Transport: TLS 1.2+ Required.
Content-Type: application/json (UTF-8).
3. Creating a Batch (The API Call)
Endpoint
POST /API/v4/Fund/BatchTransfer
Request Body Schema
The request consists of a batch "envelope" containing an array of transaction items.Item Object Schema
Each object within the Items array:
Supported Send Methods & Destination Fields
You must provide the correct Destination fields based on the SendMethodId .
Example Request
JSON
{
"IssuerAccountNumber": "ACC-884920",
"SourceWalletId": "WAL-99281",
"CustomerBatchId": "BATCH-2024-10-01",
"Items": [
{
"CustomerTransactionId": "TRX-001",
"RecipientId": "USR-5510",
"SendMethodId": "XTR94500",
"Amount": "150.00",
"Destination": {
"BeneficiaryBankID": "BNK-1120"
}
},
{
"RecipientId": "USR-5511",
"SendMethodId": "XTR94505",
"Amount": "50.00",
"Destination": {
"Email": "user@example.com",
"SKU": "SKU-AMAZON-USD"
}
}
]
}
4. Responses
Success (202 Accepted)
Returned if at least one item passes synchronous validation. Valid items are enqueued; invalid items are rejected immediately .
JSON
{
"CustomerBatchId": "BATCH-2024-10-01",
"Status": "Processing",
"AcceptedCount": 1,
"ReceivedCount": 2,
"Accepted": [
{
"CustomerTransactionId": "TRX-001",
"RecipientId": "USR-5510",
"Status": "Processing"
}
],
"Rejected": [
{
"CustomerTransactionId": "ct_generated_xyz",
"ErrorCode": "INVALID_FIELD",
"Field": "Items[1].Destination.SKU",
"Message": "SKU not found"
}
]
}
Failure (422 Unprocessable Entity)
Returned if zero items pass validation or if envelope fields (e.g., SourceWalletId) are missing.
5. Status Retrieval (GET)
To check the status of a batch or specific item if you aren't using webhooks.
Batch Status
GET /API/v4/Fund/BatchTransfer/{CustomerBatchId}
Returns Status: Processing | Completed | CompletedWithFailures | Failed.
Includes a summary count of items and an item map.
Item Status
GET /API/v4/Fund/BatchTransfer/{CustomerBatchId}/Items/{CustomerTransactionId}
Returns detailed status (Success, RetainedInWallet, Failed).
Optional: Add query param ?History=true to see the full audit trail of attempts.
6. Webhook Integration
Webhooks provide real-time updates. You must verify them to ensure security.
Endpoint Registration
Action Required: Provide your HTTPS webhook receiver URL to your Account Manager or email support@xtrm.com.
Security: Signature Verification
Every request includes the X-Signature header: t=<timestamp>, v1=<signature> .
Verification Steps:
Extract t (timestamp) and v1 (signature).
Construct the base string: t + . + RawRequestBody (bytes).
Compute HMAC-SHA256 using your Secret.
Compare your hash to v1.
Event Types & Payloads
1. Batch.Item.Completed
Triggered when a transaction succeeds.
Note: Check DeliveryType. If DeliveryType: "Wallet", the external transfer failed but funds are safely stored in the user's wallet .
JSON
{
"CustomerBatchId": "BATCH-2024-10-01",
"CustomerTransactionId": "TRX-001",
"Status": "Success",
"Amount": "150.00",
"Currency": "USD",
"RecipientId": "USR-5510",
"DeliveryType": "Bank",
"AttemptNo": 1
}
2. Batch.Item.Failed
Triggered when a transaction fails permanently.
JSON
{
"CustomerBatchId": "BATCH-2024-10-01",
"CustomerTransactionId": "TRX-002",
"Status": "Failed",
"ErrorCode": "RECIPIENT_NOT_FOUND",
"AttemptNo": 1
}
3. Batch.Completed
Triggered when all items in the batch have reached a final state.
JSON
{
"CustomerBatchId": "BATCH-2024-10-01",
"BatchStatus": "CompletedWithFailures",
"Succeeded": 1,
"Failed": 1,
"CompletedAt": "2025-08-21T16:46:00Z"
}
Retry Policy
Timeout: Respond with 200 OK within 5 seconds.
Retries: If you fail to respond, the system retries with exponential backoff for ~24 hours.
Idempotency: Use X-Event-Id header to deduplicate events.
7. Common Error Codes
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article