New to bulk transfer? Read the overview first — it explains statuses, reprocessing, and idempotency, all of which apply to this endpoint.
201 response means the batch was accepted, not that any money has moved. Nothing executes yet at this point.
Endpoint
Headers
Your public API key.
Your API secret. Use a
stl_test_... value in sandbox, stl_live_... in production.Your business ID.
Request body
A name for this batch, up to 255 characters. Must be unique among your business’s bulk transfers — reusing a name returns
409 Conflict instead of creating a second batch, so it’s safe to retry a timed-out create request with the same batchName.A non-empty array of transfers to execute, up to 5,000 entries. Larger batches must be split across multiple requests.
Amount to transfer, in kobo, e.g.
"100000" for ₦1,000.The destination bank account number to credit.
The bank code of the receiving bank.
A unique reference you generate for this transfer. Must be unique across your business’s entire transfer history — not just within this batch — and is also used for idempotency and reconciliation.
A description of the transfer. Optional — defaults to an empty string if omitted.
Response
true on success.Confirmation message, e.g.
"Bulk transfer created successfully".Unique ID for this batch. Use this in every other bulk transfer endpoint.
A human-readable reference for this batch, e.g.
"BULK-a1b2c3d4e5f6g7h8i9j0".The number of transfers accepted into this batch.
Always
"pending" in the create response — processing hasn’t started yet. See statuses.Code examples
Example response
Errors
This endpoint returns400 BAD_REQUEST for any of the following, with a message describing which check failed:
| Situation | Example message |
|---|---|
businessId header missing | "businessId is required in headers" |
transfers missing or empty | "transfers array is required and must not be empty" |
batchName missing or blank | "batchName is required" |
| More than 5,000 transfers | "Maximum 5000 transfers allowed per bulk transfer request. Split larger batches into multiple requests." |
| A required field missing on one transfer | "Transfer at index {i} is missing required fields" |
Two transfers in the same request share a retrievalReference | "Duplicate retrievalReference \"{ref}\" within the same request" |
A retrievalReference was already used previously | "Retrieval reference {ref} already exists" |
Next step
Process a bulk transfer
Start executing the transfers in this batch.