Skip to main content
In general, when you refund a transaction, Blnk reverses the money movement from the original — funds return from the destination balance to the source balance. Blnk records the reversal as a new transaction; the original record is not modified. You can refund each original transaction only once. A second attempt is rejected.

Which transactions can be refunded

Not every transaction can be refunded. Refund eligibility depends on the transaction’s status and the type of transaction you want to refund. For inflight or split transactions, the ID you pass matters. Use the table below to understand which transaction ID to send and what Blnk does with it.
Transaction IDRefundable?Notes
APPLIEDYesThe source and destination balances are reversed.
INFLIGHTYesOnly if the inflight transaction has been committed or voided.
QUEUEDYesRefunds all child APPLIED transactions linked to the queued parent. Use the meta_data.QUEUED_PARENT_TRANSACTION to refund.
VOIDNoTo refund a voided transaction, use its parent inflight transaction ID instead.
SCHEDULED, REJECTEDNoNot refundable.

Applying refunds

1

Request a refund

Use the Refund transaction API and pass the transaction_id of the transaction you want to refund.
By default, refunds are queued with skip_queue: false.The initial response returns status: "QUEUED" and sets the refund reference to {original_txn_id}_refund.When the queue processes the refund, Blnk creates the final applied transaction with the reference {original_txn_id}_refund_q, following the same _q convention used for other queued transactions.
curl -X POST "http://YOUR_BLNK_INSTANCE_URL/refund-transaction/{transaction_id}" \
  -H "X-blnk-key: <api-key>"
201 Created (queued)
{
  "amount": 50,
  "amount_string": "50",
  "precision": 100,
  "precise_amount": 5000,
  "transaction_id": "txn_af70986c-fbdc-450a-bf81-c1af034ce840",
  "parent_transaction": "txn_b0468e80-5941-4ca8-b5d2-e44f4572926e",
  "source": "bln_f76360da-68db-410d-8a8b-1d960e2a766f",
  "destination": "bln_b1bd741e-eeb6-4dd4-a562-df35374bbaf9",
  "reference": "txn_b0468e80-5941-4ca8-b5d2-e44f4572926e_refund",
  "currency": "USD",
  "description": "Card payment on Stripe",
  "status": "QUEUED",
  "allow_overdraft": false,
  "inflight": false,
  "created_at": "2024-11-26T09:33:35.265582042Z"
}

Refunding inflight transactions

Only inflight transactions that have been committed or voided can be refunded. Active inflight holds cannot be refunded. Always pass the original INFLIGHT transaction ID to the API, not the ID of its APPLIED or VOID child.
Pass the inflight transaction ID.Blnk reverses the committed amount the same way it refunds a standard APPLIED transaction.
curl -X POST "http://YOUR_BLNK_INSTANCE_URL/refund-transaction/{inflight_transaction_id}" \
  -H "X-blnk-key: <api-key>"

Refunding split transactions

Use this flow when the original payment was a multiple sources or multiple destinations split.
1

Confirm the original used the queue

Refunding the entire split in one call only works when the original transaction request uses the queue (skip_queue: false).When you submit the split, Blnk returns a queued parent response. Each child leg is recorded separately and linked through meta_data.QUEUED_PARENT_TRANSACTION:
Split response
{
  "precise_amount": 3000000,
  "amount": 30000,
  "amount_string": "30000",
  "precision": 100,
  "transaction_id": "txn_0b59f6e-6c4a-4efa-915c-526f77ef61ab",
  "parent_transaction": "",
  "source": "bln_92e4b9b6-0b85-4ef4-87a2-682c31500d38",
  "reference": "ref_001adcfgf",
  "currency": "USD",
  "description": "Payment from Sarah",
  "status": "QUEUED",
  "skip_queue": false,
  "destinations": [
    {
      "identifier": "bln_f2073f6b-905a-4e3e-b5a2-8d1b3dc2fb7f",
      "distribution": "20%",
      "transaction_id": "txn_59347177-aa7e-d8ad-9f4f-d09628b32ec3"
    },
    {
      "identifier": "bln_64c50fb5-32d5-4f78-9f4a-e8b01aaf025d",
      "distribution": "10000",
      "transaction_id": "txn_7ddc8d4f-3b77-4b7d-a37f-240216ab074c"
    },
    {
      "identifier": "bln_7d98dfe9-5c3e-4c9b-b96a-65f6d9f7b89b",
      "distribution": "left",
      "transaction_id": "txn_5aad04dd-ed53-4f77-9f01-4916d31fac5f"
    }
  ],
  "created_at": "2025-09-18T01:26:30.648049042Z",
  "meta_data": {
    "QUEUED_PARENT_TRANSACTION": "txn_0b59f6e-6c4a-4efa-915c-526f77ef61ab"
  }
}
2

Refund using the queued parent ID

Use the value in meta_data.QUEUED_PARENT_TRANSACTION as the ID to refund.Keep skip_queue: false so all legs refund together.
curl -X POST "http://YOUR_BLNK_INSTANCE_URL/refund-transaction/{queued_parent_transaction_id}" \
  -H "X-blnk-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{"skip_queue": false}'
Blnk refunds every APPLIED child from its destination back to its source. The response matches the shape in Applying refunds.

Parent transactions

Lineage and parent-child links.

Create inflight

Hold, commit, and void flows.

Refund transaction API

Endpoint parameters and responses.

Need help?

We are very happy to help you make the most of Blnk, regardless of whether it is your first time or you are switching from another tool. To ask questions or discuss issues, please contact us or join our Discord community.