Payouts
Initiate, list, inspect, and reconcile payouts across bank and UPI rails.
Integration Map
POST /v1/payoutsinitiates a new payout to an active bank or UPI beneficiary.GET /v1/payoutslists recent payouts or searches across all dates.GET /v1/payouts/:payoutTransactionIdfetches the current state and bank reference for one payout.GET /v1/payouts/:payoutTransactionId/status-eventsshows the payout's state transition timeline.
Store the returned identifiers
Store payoutTransactionId and transactionId from every successful payout
response. Send merchantReferenceId when you have your own order or
transaction id, because it is echoed in lists, details, exports, and webhooks.
Initiate Payout
POST /v1/payouts
Initiates a payout transfer to an active beneficiary. Wallet balance is validated and debited during processing.
If your system needs to check balance before attempting a payout, call
GET /v1/wallet and compare the payout total
against spendablePaise.
Send a unique Idempotency-Key header for every merchant-side payout attempt.
If your client retries the same attempt, reuse the same key. If the same key is
reused for a different payout, the API returns the original payout associated
with that key, so do not recycle keys across payout attempts.
Processing flow
- Payout record created.
- Wallet validation and debit reserve amount + commission + GST atomically.
- Payout is dispatched to the bank adapter.
- Intermediate bank states are stored in the status timeline.
- Final status is persisted and a terminal webhook is sent if configured.
A 200 response confirms the payout was accepted for processing. Final
status arrives via webhook, or you can poll with
Get Payout Transaction.
Headers
| Header | Required | Description |
|---|---|---|
Idempotency-Key | recommended | Unique key for this payout attempt. Reuse only for exact retries. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
beneficiaryId | UUID | yes | Beneficiary must exist, be active, and belong to the authenticated business. |
amount | string | yes | Payout amount as a decimal string, e.g. "1000.00". Must respect per-transaction and per-rail limits. |
transactionType | string | yes | Rail. One of I (IMPS), N (NEFT), R (RTGS), S (SELF), U (UPI). |
merchantReferenceId | string | no | Your internal order id / transaction reference for reconciliation. Stored and returned in payout lists, details, exports, and webhooks. Max 128 characters. |
Sample request body
{
"beneficiaryId": "123e4567-e89b-12d3-a456-426614174001",
"amount": "1000.00",
"transactionType": "N",
"merchantReferenceId": "ORDER-123456"
}
Examples
Generate x-timestamp and x-signature with your signing key before sending
the request. Use a fresh Idempotency-Key for each new payout attempt.
curl --request POST 'https://api.bridg.money/v1/payouts' \
--header 'Content-Type: application/json' \
--header 'x-api-key: pub_live_xxx' \
--header 'x-timestamp: 1733740800000' \
--header 'x-signature: <hmac-signature>' \
--header 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
--data '{
"beneficiaryId": "123e4567-e89b-12d3-a456-426614174001",
"amount": "1000.00",
"transactionType": "N",
"merchantReferenceId": "ORDER-123456"
}'List Payouts
GET /v1/payouts
Returns paginated payouts for the authenticated business.
This endpoint uses query parameters, so sign it with HMAC v2. Keep the URL as
/v1/payouts; do not call /v2/payouts. See
API Keys and IP Whitelist.
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
limit | number | 50 | Page size, clamped from 1 to 200. |
offset | number | 0 | Zero-based offset. |
since | ISO datetime | none | Include payouts created at or after this time. |
until | ISO datetime | none | Include payouts created before this time. |
search | string | none | Server-side search across all dates. When present, since and until are ignored. Matches BMPT transaction id, payout UUID, merchant reference id, UTR / transactionReference, bank reference, beneficiary name, account number, VPA, and IFSC. |
Search is paginated with the same limit and offset parameters as normal
listing. Use search when you know an identifier but do not know the payout
date. If search is not present, the selected date range applies normally.
Examples
List recent payouts with query parameters. Because this request has a query
string, sign it with HMAC v2 and include the exact path and query string in
PATH_AND_QUERY.
curl --request GET 'https://api.bridg.money/v1/payouts?limit=50&offset=0' \
--header 'x-bridg-sig-version: 2' \
--header 'x-api-key: pub_live_xxx' \
--header 'x-timestamp: 1733740800000' \
--header 'x-nonce: 550e8400-e29b-41d4-a716-446655440000' \
--header 'x-signature: <hmac-v2-signature>'Search for a payout across all dates:
curl --request GET 'https://api.bridg.money/v1/payouts?limit=50&offset=0&search=ORDER-123456' \
--header 'x-bridg-sig-version: 2' \
--header 'x-api-key: pub_live_xxx' \
--header 'x-timestamp: 1733740800000' \
--header 'x-nonce: 550e8400-e29b-41d4-a716-446655440000' \
--header 'x-signature: <hmac-v2-signature>'Get Payout Transaction
GET /v1/payouts/:payoutTransactionId
Fetches the full payout record: beneficiary, bank reference, commission breakdown, response code/message, and current status.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
payoutTransactionId | UUID | yes | The internal payout id returned by POST /v1/payouts. |
Examples
curl --request GET 'https://api.bridg.money/v1/payouts/ca4bac52-2800-11f1-8a8e-0a0c26167b3f' \
--header 'x-api-key: pub_live_xxx' \
--header 'x-timestamp: 1733740800000' \
--header 'x-signature: <hmac-signature>'The data field is an array containing the payout record, preserved from
the legacy v1 contract. If no record is found, the API returns 404.
Reconciliation Guidance
Store these identifiers from every successful POST /v1/payouts response:
| Field | Source | Use |
|---|---|---|
payoutTransactionId | BridgPay | Primary id for GET /v1/payouts/:payoutTransactionId and status events. |
transactionId | BridgPay | Human-readable BMPT transaction id for support and reports. |
merchantReferenceId | Your system | Optional order id / merchant transaction id that BridgPay stores and echoes in lists, details, exports, and webhooks. |
transactionReference / utr | Bank | Bank reference once available; may be null while pending or when the bank has not supplied one. |
merchantReferenceId is not an idempotency key and is not a replacement for
payoutTransactionId. Use Idempotency-Key for safe retries of the same payout
attempt, and use merchantReferenceId to connect BridgPay reports/webhooks back
to your order or transaction table.
If your client times out before reading the POST /v1/payouts response, first
search GET /v1/payouts?search=<your-merchantReferenceId> before creating a
new payout. If you did not send a merchantReferenceId, search by the
idempotency key in your own logs and contact support with the request timestamp.
Status Events
GET /v1/payouts/:payoutTransactionId/status-events
Returns the state transition timeline for a payout. This is useful when a payout is still pending and the merchant needs to see whether the bank has acknowledged, processed, failed, or gone silent.
Examples
curl --request GET 'https://api.bridg.money/v1/payouts/ca4bac52-2800-11f1-8a8e-0a0c26167b3f/status-events' \
--header 'x-api-key: pub_live_xxx' \
--header 'x-timestamp: 1733740800000' \
--header 'x-signature: <hmac-signature>'