Transaction properties
- Immutability: Once recorded, transactions in Blnk cannot be modified or deleted. This fundamental property ensures the integrity and reliability of your transaction history, preventing any unauthorized alterations. See also: Transaction hashing
- Idempotency: Each transaction in Blnk produces the same result whether executed once or multiple times. This is crucial for maintaining data consistency, especially during network failures or system retries.
Recording a transaction
To record a transaction, call the record-transaction endpoint:Response
- Request
- Response
Verifying transactions with queue enabled
When using the default queue system, every transaction starts asQUEUED. To verify your transaction status, you have two options:
- Webhooks: Blnk sends webhook notifications when transaction states change.
-
Direct API calls: Query the transaction status using the reference or transaction ID. See below:
- By reference (direct endpoint)
- By reference (search)
- By transaction ID
Blnk appends a_qsuffix to your original reference after processing aQUEUEDtransaction. To verify the updated status, retrieve the transaction using your original reference plus the_qsuffix.Response
Verifying transactions without queue disabled
When usingskip_queue: true, transactions are processed immediately and you can verify them from the direct response. Learn more about skip queue.
Response
skip_queue: true, a successful request immediately returns an INFLIGHT or APPLIED transaction. If the source has insufficient funds, see Managing insufficient funds.
Discarded transactions
Some requests are not recorded in the ledger. Common reasons include:-
Duplicate reference: Your new transaction
referencematches an existingreferencein your ledger. Blnk requires uniquereferencevalues per transaction. Options are timestamps (e.g. UNIX timestamp), random string or UUID (e.g.ref_e55c4f33-bff7-4c30-9b9f-5d2d10a29b7a), or a business identifier like anorder_id. - Zero amount: Your transaction amount is 0. Zero amounts are not recorded in the Blnk ledger.
-
Insufficient funds with
skip_queue: true: The rejected attempt is not recorded. See Managing insufficient funds.
Managing insufficient funds
Available in version 0.11.0 and later. For versions 0.10.8 and older, see our insufficient funds guide.
balance - inflight_debit_balance on the source balance.
Inflight debit balance is the amount waiting to be deducted from the source balance from inflight transactions. Learn more: Create inflight.
If the transaction amount is more than the available balance, the outcome depends on how Blnk processes the request.
Default queue
The API first returns aQUEUED transaction. The worker then records a separate REJECTED transaction.
That record uses parent_transaction to point back to the queued transaction, and stores the reason in meta_data.blnk_rejection_reason. Blnk sends a transaction.rejected webhook for the rejected record.
With the default queue configuration, this happens on the first failure. If insufficient-fund retries are enabled, Blnk retries first and records REJECTED only after those retries are exhausted.
Skip queue
Whenskip_queue: true, Blnk processes the request immediately and returns 400 TXN_INSUFFICIENT_FUNDS.
The rejected attempt is not recorded, so the reference is not used. You can retry the same reference after the source has enough funds.
If you want a transaction to proceed even when it exceeds the available balance, you can enable overdrafts by setting
allow_overdraft: true in your transaction request. Learn more.Dive deeper
Dry-run transactions
Preview balances without writing a transaction.
Transaction lifecycle
States from creation through completion.
Understanding precision
Decimal handling for accurate amounts.
Transaction statuses
What each status means and when it applies.