Commit or void inflight transactions, verify outcomes, and schedule automatic commit or expiry.
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.
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.
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}
Commit
Partial commit
Void
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.
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_id
Main balance
Inflight balance
Inflight credit
Inflight debit
balance_A
100
0
0
0
balance_B
100
0
0
0
To commit part of the inflight transaction, set precise_amount to the amount you want to commit in its smallest unit. The rest stays INFLIGHT tracked by the inflight balance fields.You can commit as many times as you like, but the total committed cannot exceed the original inflight amount.For example, with a $100 inflight transaction, you could commit $30 three times ($90 total); a fourth $30 commit would fail because $120 exceeds the original $100 inflight amount.
Continuing from the earlier example, a partial commit of $40 from the $100 inflight transaction leaves balances like this:
balance_id
Main balance
Inflight balance
Inflight credit
Inflight debit
balance_A
160
-60
0
60
balance_B
40
60
60
0
Void cancels whatever remains on the inflight transaction. If you partially committed first, void releases only the leftover — it does not take an amount field. Once voided, an inflight transaction cannot be committed again.Set "status": "void" in the request body to cancel 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 void immediately in the same request.
Void resets inflight balances without changing settled main balances. Continuing from the earlier example, a full void on the $100 inflight transaction leaves balances like this:
balance_id
Main balance
Inflight balance
Inflight credit
Inflight debit
balance_A
200
0
0
0
balance_B
0
0
0
0
On the other hand, after a partial commit of $40, voiding the remaining $60 clears the leftover inflight amounts without reversing the $40 already applied:
balance_id
Main balance
Inflight balance
Inflight credit
Inflight debit
balance_A
160
0
0
0
balance_B
40
0
0
0
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.
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.
When you skip the queue, Blnk applies commits and voids synchronously. No intermediate queued records are created.Both children share the same parent_transaction: the inflight transaction ID (txn_6164573b-…). That becomes your filter key and the direct link to the inflight transaction.No QUEUED_PARENT_TRANSACTION is present. Match outcomes on parent_transaction only.
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.
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.
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.
Code
When it happens
GEN_CONFLICT
Commit or void already queued for this inflight transaction.
TXN_COMMIT_AMOUNT_EXCEEDED
Partial commit exceeds remaining inflight amount.
TXN_ALREADY_COMMITTED
You try to void a fully committed inflight transaction.
TXN_ALREADY_VOIDED
You try to commit a voided inflight transaction.
TXN_NOT_INFLIGHT
Transaction is not INFLIGHT.
TXN_INVALID_STATUS_ACTION
status is not commit or void.
TXN_NOT_FOUND
Transaction 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:
Code
What to do
GEN_CONFLICT
Wait for the queued job to finish, or verify the outcome before sending another request.
TXN_COMMIT_AMOUNT_EXCEEDED
Lower the partial commit amount to the remaining inflight amount, or commit the full remainder.
TXN_ALREADY_COMMITTED
Treat the inflight transaction as finished; do not void unless you need a refund.
TXN_ALREADY_VOIDED
Treat the inflight transaction as cancelled; do not commit.
TXN_NOT_INFLIGHT
Confirm you are using the original inflight transaction ID, not an APPLIED or VOID child.
TXN_INVALID_STATUS_ACTION
Set status to commit or void.
TXN_NOT_FOUND
Verify the transaction ID and that the inflight transaction was created successfully.
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.