Submit an outbound transfer (partner perimeter).
Creates an outbound transfer attributed to the authenticated partner. The partner identity (req.user.partnerId from PartnerHmacGuard) is recorded on bankrail.outbound_transfers.consumer_partner_id; the callback dispatcher will sign the terminal-state callback with the partner's active callback-signing credential when one exists. Returns 202 Accepted; the outbound contract is async — failure outcomes surface via state on the response body, not 4xx/5xx.
Partner-visible credential identifier issued by bank-rail at credential provisioning time. Names which credential signed the request; the corresponding signing secret never appears in any request.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://example.com/api/v1/bankrail/outbound" \ -H "Content-Type: application/json" \ -d '{ "clientReference": "partner-ref-2026-001", "beneficiaryAccountNumber": "0123456789", "beneficiaryBankCode": "999058", "beneficiaryAccountName": "string", "amountKobo": 100000, "currency": "NGN", "narration": "string" }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "clientReference": "string", "consumerId": "string", "partnerId": "bf408d53-df49-40a6-8455-a34bd4360901", "state": "pending", "provider": "providus", "brr": "string", "providerSessionId": "string", "providerResponseCode": "string", "providerResponseMessage": "string", "failureReason": {}, "rail": {}, "settlementAccountName": "string", "beneficiaryAccountNumber": "string", "beneficiaryBankCode": "string", "beneficiaryAccountName": "string", "amountKobo": 0, "currency": "string", "narration": "string", "creatorMetadata": {}, "createdAt": "2019-08-24T14:15:22Z", "stateChangedAt": "2019-08-24T14:15:22Z", "terminalAt": "2019-08-24T14:15:22Z"}Register the terminal outcome for one of your in-flight sandbox outbound transfers. POST
Sandbox-only. Your transfer resolves through the real requery -> transition -> callback pipeline; your callbackUrl receives a real, signed terminal callback (transfer.confirmed or transfer.failed) within ~30 seconds. Target must be your own transfer, in state "submitted". Registering again before resolution replaces the pending outcome. To exercise the "unknown" deadline path, register nothing and let the requery schedule exhaust.
Requery one of the partner's own outbound transfers (confirm bank status now). POST
Next Page