Bulk data
Bearer ds_live_ / ds_test_/api/v1/merchant/data/bulkQueues the same data plan for a list of numbers in a single order.
curl -X POST "https://finaldatasub.com/api/v1/merchant/data/bulk" \
-H "Authorization: Bearer ds_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"reference": "BULK-DATA-0007",
"product_id": 212,
"recipients": [
"08031234567",
"08123456789",
"09031234567"
]
}'Authentication
Send your secret API key in the header. Authorization: Token … and X-API-Key: … are also accepted.
| Header | Value | Required |
|---|---|---|
| Authorization | Bearer ds_live_YOUR_KEY | Yes |
| Content-Type | application/json | Yes |
| Accept | application/json | Recommended |
Authentication failures (401 UNAUTHORIZED, 403 IP_NOT_ALLOWED / ACCOUNT_SUSPENDED / API_ACCESS_NOT_APPROVED, 429 RATE_LIMITED) are listed in Authentication.
Parameters
Responses
202 Accepted — Accepted · 409 Conflict — Duplicate reference
{
"status": "pending",
"message": "Bulk data order received. 3 number(s) are being processed.",
"data": {
"id": 57,
"reference": "BULK-DATA-0007",
"category": "data",
"status": "processing",
"total_items": 3,
"successful": 0,
"pending": 3,
"failed": 0,
"total_charged": "0.00",
"created_at": "2026-10-05T10:20:00+01:00",
"completed_at": null
}
}Errors
Errors specific to this endpoint, in addition to the authentication and validation errors common to every request.
| Code | HTTP | When |
|---|---|---|
| TOO_MANY_RECIPIENTS | 400 | More numbers than allowed in one order (100 by default). |
| INVALID_RECIPIENTS | 400 | One or more phone numbers are invalid (positions are listed in the message). |
| INSUFFICIENT_BALANCE | 402 | Your wallet does not cover the full order estimate. |
| DUPLICATE | 409 | This bulk reference was already used. The existing order is returned in data. |
| PRODUCT_NOT_FOUND | 404 | Plan id / code not found, inactive or not part of this biller. |
Notes
- Each number is vended as its own transaction with reference
<reference>-1,<reference>-2, … so retries never double-charge. Look them up with GET /transactions/{reference}. - Your wallet must cover the full estimated order up front, but each number is only debited when it is vended.
- Track progress with GET /bulk/{id}.