Skip to main content
After you create an inflight transaction, you commit or void it when your business conditions are met. You can also schedule automatic commit or expiry when you record the transaction.

Update inflight transactions

When your business conditions are met, finish the inflight transaction in one of two ways:
  • Commit applies the transfer. Blnk clears the inflight balance fields and moves the reserved amount into your settled main balances. Blnk creates a child transaction with APPLIED status.
  • Void cancels the inflight transaction. Blnk releases the reserved amount without changing settled balances. Blnk creates a child transaction with VOID status.
Scenarios when inflight transactions are finished processing
1

Commit or void

To commit or void an inflight transaction, call Update inflight with the inflight transaction ID and the desired status.
Update inflight
PUT /transactions/inflight/{transaction_id}
Set "status": "commit" in the request body to commit the inflight transaction.By default, Blnk queues the action for processing. If you want to skip the queue, add "skip_queue": true to apply the commit immediately in the same request.
curl -X PUT "http://YOUR_BLNK_INSTANCE_URL/transactions/inflight/{transaction_id}" \
  -H "X-blnk-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "commit",
    "skip_queue": false
  }'
{
  "transaction_id": "txn_6164573b-6cc8-45a4-ad2e-7b4ba6a60f7d",
  "status": "INFLIGHT",
  "queued": true
}
Commit clears inflight balances and updates main balances. Continuing from earlier example, the $100 inflight transaction from balance_A to balance_B after a full commit looks like this:
balance_idMain balanceInflight balanceInflight creditInflight debit
balance_A100000
balance_B100000
2

Verify the final status with webhooks

Blnk sends transaction.applied or transaction.void once a commit or void is finalized.You can identify these events by matching the QUEUED_PARENT_TRANSACTION field in the meta_data of the child transaction with its original parent.If the commit or void skipped the queue, match their parent_transaction against the inflight transaction ID directly.
transaction.applied
{
  "event": "transaction.applied",
  "data": {
    "transaction_id": "txn_e0f5ab98-bb87-4b09-aefe-839ddb11598b",
    "parent_transaction": "txn_6164573b-6cc8-45a4-ad2e-7b4ba6a60f7d",
    "precise_amount": 20000,
    "amount": 200,
    "precision": 100,
    "source": "bln_7f91a1ae-6073-4b7a-952c-23abf94a6634",
    "destination": "bln_59b83b9c-842c-427f-91eb-43cdeaf5c01a",
    "reference": "ref_001adcfgf_q",
    "currency": "GBP",
    "description": "For vacation",
    "status": "APPLIED",
    "inflight": false,
    "skip_queue": false,
    "created_at": "2025-02-23T09:43:49.623494+01:00",
    "meta_data": {
      "QUEUED_PARENT_TRANSACTION": "txn_6164573b-6cc8-45a4-ad2e-7b4ba6a60f7d",
      "inflight": true
    }
  }
}
3

Alternatively, poll the ledger for updates

You can also poll for the results with Search.
Filter for all APPLIED or VOID children where meta_data.QUEUED_PARENT_TRANSACTION matches the original inflight transaction’s queued parent.In the queued path, Blnk creates intermediate records for each commit and void. The original inflight’s QUEUED_PARENT_TRANSACTION is copied to every child — that’s your shared filter key.Each child’s parent_transaction points to its specific intermediate record (the queued commit or void itself), which is why those IDs differ.
curl -X POST "http://YOUR_BLNK_INSTANCE_URL/transactions/filter" \
  -H "X-blnk-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": [
      {
        "field": "meta_data.QUEUED_PARENT_TRANSACTION",
        "operator": "eq",
        "value": "<inflight_queued_parent_transaction>"
      },
      {
        "field": "status",
        "operator": "in",
        "values": ["APPLIED", "VOID"]
      }
    ]
  }'
Response
{
  "data": [
    {
      "transaction_id": "txn_b2c3d4e5-f6a7-8901-bcde-f23456789012",
      "parent_transaction": "txn_d8f4a291-3e7c-41b6-a05d-9c2e71b48f6a",
      "precise_amount": 4000,
      "amount": 40,
      "precision": 100,
      "source": "bln_7f91a1ae-6073-4b7a-952c-23abf94a6634",
      "destination": "bln_59b83b9c-842c-427f-91eb-43cdeaf5c01a",
      "reference": "ref_a8c2f1d4-6b3e-4a91-9f2e-1d7c8e5b4a03_q",
      "currency": "GBP",
      "description": "For vacation",
      "status": "APPLIED",
      "inflight": false,
      "skip_queue": false,
      "created_at": "2025-02-23T09:44:12.183492+01:00",
      "meta_data": {
        "QUEUED_PARENT_TRANSACTION": "txn_6164573b-6cc8-45a4-ad2e-7b4ba6a60f7d",
        "inflight": true
      }
    },
    {
      "transaction_id": "txn_c3d4e5f6-a7b8-9012-cdef-345678901234",
      "parent_transaction": "txn_4a9c0e75-1b62-483f-8d31-7f6a25e903d4",
      "precise_amount": 6000,
      "amount": 60,
      "precision": 100,
      "source": "bln_7f91a1ae-6073-4b7a-952c-23abf94a6634",
      "destination": "bln_59b83b9c-842c-427f-91eb-43cdeaf5c01a",
      "reference": "ref_e7d61840-ecf7-45c1-a0b2-41687c7691f7_q",
      "currency": "GBP",
      "description": "For vacation",
      "status": "VOID",
      "inflight": false,
      "skip_queue": false,
      "created_at": "2025-02-23T09:45:03.332221+01:00",
      "meta_data": {
        "QUEUED_PARENT_TRANSACTION": "txn_6164573b-6cc8-45a4-ad2e-7b4ba6a60f7d",
        "inflight": true
      }
    }
  ]
}

Schedule inflight commits

Available in version 0.14.1 and later.
When you create an inflight transaction, Blnk holds the balance immediately but only finalizes it when you manually send a commit or void request. Use inflight_commit_date to schedule an automatic commit for a specific future time. This is useful when funds need to be reserved now but transferred later, e.g. holding a hotel deposit today and committing automatically on check-in day.
Prerequisite: Scheduled commits are processed through a background queue.Before using inflight_commit_date, enable BLNK_QUEUE_INFLIGHT_COMMIT in your environment or inflight_commit_queue in blnk.json. See Queue configuration.
curl -X POST "http://YOUR_BLNK_INSTANCE_URL/transactions" \
  -H "X-blnk-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "precise_amount": 10000,
    "precision": 100,
    "reference": "ref_001adcfgf",
    "currency": "USD",
    "source": "bln_28edb3e5-c168-4127-a1c4-16274e7a28d3",
    "destination": "bln_ebcd230f-6265-4d4a-a4ca-45974c47f746",
    "description": "For vacation",
    "inflight": true,
    "inflight_commit_date": "2024-12-21T01:36:46+01:00"
  }'
Format inflight_commit_date as YYYY-MM-DDTHH:MM:SS+00:00 (for example, 2024-04-22T15:28:03+00:00), where +00:00 is the timezone offset.
201 Created
{
  "transaction_id": "txn_6164573b-6cc8-45a4-ad2e-7b4ba6a60f7d",
  "status": "INFLIGHT",
  "inflight": true,
  "inflight_commit_date": "2024-12-21T01:36:46+01:00"
}

Schedule inflight expiry

A transaction will always stay inflight until you commit it, void it, or it expires. Use inflight_expiry_date to cap how long funds can remain held. If a transaction is still INFLIGHT when the expiry time passes, Blnk voids it automatically. Same outcome as a manual void. This creates a child record with VOID status and releases the held balance without affecting settled balances.
If you use both inflight_commit_date and inflight_expiry_date, set the commit time before the expiry. Otherwise Blnk will auto-void before the scheduled commit can run.
curl -X POST "http://YOUR_BLNK_INSTANCE_URL/transactions" \
  -H "X-blnk-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "precise_amount": 10000,
    "precision": 100,
    "reference": "ref_001adcfgf",
    "currency": "USD",
    "source": "bln_28edb3e5-c168-4127-a1c4-16274e7a28d3",
    "destination": "bln_ebcd230f-6265-4d4a-a4ca-45974c47f746",
    "description": "For vacation",
    "inflight": true,
    "inflight_expiry_date": "2024-12-21T01:36:46+01:00"
  }'
201 Created
{
  "transaction_id": "txn_6164573b-6cc8-45a4-ad2e-7b4ba6a60f7d",
  "status": "INFLIGHT",
  "inflight": true,
  "inflight_expiry_date": "2024-12-21T01:36:46+01:00"
}
Format inflight_expiry_date as YYYY-MM-DDTHH:MM:SS+00:00 (for example, 2024-04-22T15:28:03+00:00), where +00:00 is the timezone offset.

Error handling

Structured errors are available from Blnk Core 0.15.0 and later.
Update inflight returns 400, 404, and 409 responses when a commit or void request fails validation or conflicts with the inflight transaction’s current state. On the default queued path, Blnk rejects duplicate commit or void requests before enqueueing a second job. With skip_queue: true, Blnk validates synchronously and returns errors immediately.
CodeWhen it happens
GEN_CONFLICTCommit or void already queued for this inflight transaction.
TXN_COMMIT_AMOUNT_EXCEEDEDPartial commit exceeds remaining inflight amount.
TXN_ALREADY_COMMITTEDYou try to void a fully committed inflight transaction.
TXN_ALREADY_VOIDEDYou try to commit a voided inflight transaction.
TXN_NOT_INFLIGHTTransaction is not INFLIGHT.
TXN_INVALID_STATUS_ACTIONstatus is not commit or void.
TXN_NOT_FOUNDTransaction ID does not exist.
409 Conflict
{
  "error": "a commit or void is already queued for this transaction",
  "error_detail": {
    "code": "GEN_CONFLICT",
    "message": "a commit or void is already queued for this transaction"
  }
}
To resolve the error:
CodeWhat to do
GEN_CONFLICTWait for the queued job to finish, or verify the outcome before sending another request.
TXN_COMMIT_AMOUNT_EXCEEDEDLower the partial commit amount to the remaining inflight amount, or commit the full remainder.
TXN_ALREADY_COMMITTEDTreat the inflight transaction as finished; do not void unless you need a refund.
TXN_ALREADY_VOIDEDTreat the inflight transaction as cancelled; do not commit.
TXN_NOT_INFLIGHTConfirm you are using the original inflight transaction ID, not an APPLIED or VOID child.
TXN_INVALID_STATUS_ACTIONSet status to commit or void.
TXN_NOT_FOUNDVerify the transaction ID and that the inflight transaction was created successfully.
See API error codes for the full catalogue. Request and response field details are on Update inflight.

Create inflight

Record an inflight transaction.

Bulk commit & void

Commit or void many inflight transactions at once.

Refunding transactions

Inflight ID rules for refunds.

Transaction lifecycle

Statuses from creation through completion.

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.