BridgPay Docs

Payouts

Initiate, list, inspect, and reconcile payouts across bank and UPI rails.

Integration Map

  • POST /v1/payouts initiates a new payout to an active bank or UPI beneficiary.
  • GET /v1/payouts lists recent payouts or searches across all dates.
  • GET /v1/payouts/:payoutTransactionId fetches the current state and bank reference for one payout.
  • GET /v1/payouts/:payoutTransactionId/status-events shows 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

  1. Payout record created.
  2. Wallet validation and debit reserve amount + commission + GST atomically.
  3. Payout is dispatched to the bank adapter.
  4. Intermediate bank states are stored in the status timeline.
  5. 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

HeaderRequiredDescription
Idempotency-KeyrecommendedUnique key for this payout attempt. Reuse only for exact retries.

Request body

FieldTypeRequiredDescription
beneficiaryIdUUIDyesBeneficiary must exist, be active, and belong to the authenticated business.
amountstringyesPayout amount as a decimal string, e.g. "1000.00". Must respect per-transaction and per-rail limits.
transactionTypestringyesRail. One of I (IMPS), N (NEFT), R (RTGS), S (SELF), U (UPI).
merchantReferenceIdstringnoYour 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

NameTypeDefaultDescription
limitnumber50Page size, clamped from 1 to 200.
offsetnumber0Zero-based offset.
sinceISO datetimenoneInclude payouts created at or after this time.
untilISO datetimenoneInclude payouts created before this time.
searchstringnoneServer-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

NameTypeRequiredDescription
payoutTransactionIdUUIDyesThe 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:

FieldSourceUse
payoutTransactionIdBridgPayPrimary id for GET /v1/payouts/:payoutTransactionId and status events.
transactionIdBridgPayHuman-readable BMPT transaction id for support and reports.
merchantReferenceIdYour systemOptional order id / merchant transaction id that BridgPay stores and echoes in lists, details, exports, and webhooks.
transactionReference / utrBankBank 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>'

On this page