Issuance and the settlement legs
For architects and treasury teams. How tokens are issued and redeemed through the API, what the platform records, and which parts of the cash leg remain with your core banking system.
Keep the cash and token records in step
Issuance turns a booked deposit into its token representation. Redemption removes that token representation before the corresponding cash is paid back. Minting and burning are the platform's names for those two token operations.
There are two records to coordinate: the bank's cash ledger and the token ledger. The bank owns the cash postings; Quant Flow carries out the requested token movement. Agree the posting sequence and exception procedure with your treasury and accounting owners.
For issuance, set aside the cash backing before requesting tokens. For redemption, confirm the token removal before releasing the cash. If the outcome is uncertain, keep it as an exception and investigate before repeating or reversing work. The detailed sequence and evidence fields follow below.
Issuance and redemption on the platform
Two token operations change the amount of a token in issue.
| Operation | Effect on the token | Required fields |
|---|---|---|
MINT | Issues tokens to the account named by accountRef. | txType, assetId, accountRef, amount |
BURN | Redeems tokens from the account named by accountRef. | txType, assetId, accountRef, amount |
Both are submitted to POST /api/transactions and are accepted, signed and settled asynchronously. When policy is enabled for MINT and BURN, it can hold them for approval or refuse them; otherwise they start in BATCHED without a policy decision. The tokens exist, or are removed, only once the operation is CONFIRMED. See Operations and their lifecycle.
A BURN for more than the account holds is accepted and then fails during settlement.
The two legs
A tokenised deposit issuance has two sides:
| Leg | Where it happens | Who carries it out |
|---|---|---|
| Token leg | The token contract, through MINT or BURN | Quant Flow Platform, when your system submits the operation |
| Cash leg | Your core banking system: the deposit that backs the token | Your bank |
The platform carries out the token leg only. It does not post to your core banking system. Your integration runs the cash leg and sequences the two:
| First | Then | |
|---|---|---|
| Issuance | Cash leg: move the funds from the customer's deposit account to your control account for tokenised deposits. | Token leg: submit the MINT. |
| Redemption | Token leg: submit the BURN and wait for CONFIRMED. | Cash leg: pay the funds from the control account to the customer's deposit account. |
In both directions the token is backed at every point: tokens are issued only after the funds are set aside, and the funds are released only after the tokens are removed.
If evidence establishes that the token leg had no effect, your bank reverses or holds its cash posting under its own procedure. If the outcome is uncertain, hold the exception and reconcile with the operator first. A confirmed token leg cannot be rolled back; it is corrected with the opposite operation. Issue and redeem gives the steps.
- Coordinate both legs in your bank adapter and reconcile them explicitly; the public API does not supply atomic coordination with the bank's cash ledger.
- Agree the general-ledger posting rules with your bank's accounting team before enabling issuance or redemption.
Treat your core banking system as the book of record and the platform's CONFIRMED state as the evidence that the token leg completed.
Evidence the platform records
For each issuance or redemption, the operation record carries:
transactionId, assigned at submission;state, including the terminalCONFIRMED,FAILEDorCANCELLED;txHashandblockNumberonce settled, identifying the ledger transaction;failureCodeandreasonCodeif it failed;createdAtandupdatedAt.
Operations that failed or could not be found on the ledger appear on the outstanding-breaks queue until resolved. See Reconcile against your core banking.
Reserve attestation
GET /api/reserves/attestation reports, per ISO 4217 currency: the reserve held, the tokens outstanding, the reserve as a percentage of tokens outstanding, whether the latest attestation is verified, and the attestation date.
The figures are currently static. The API Reference states that they are static pending a core banking integration. Do not use them as evidence of backing. GET /api/reserves/attestation/snapshot is also static mock data. See Limitations.
The current reserve endpoints return static figures, not verified live cash-ledger evidence. Use bank-held reserve records for reconciliation.
Worked example
Issue 10.50 GBP in tokens to an active account.
POST /api/transactions HTTP/1.1
Host: api.qfp.quantnetwork.net
Authorization: Bearer <access token>
API-Version: 1.0.0
Content-Type: application/json
Idempotency-Key: 5f0c1c8e-8a0b-4d0e-9a51-2f3b7f1d9c11
{
"txType": "MINT",
"assetId": "GBP",
"accountRef": "ACC-0001",
"amount": "10.50"
}HTTP/1.1 202 Accepted
Content-Type: application/json
{
"transactionId": "3f7c1a90-5d2e-4b08-9a41-6c2b8e5d7f13",
"txType": "MINT",
"assetId": "GBP",
"accountRef": "ACC-0001",
"customerRef": "CUST-0001",
"counterpartyRef": null,
"amount": "10.50",
"params": {},
"state": "POLICY_PENDING",
"createdAt": "2026-08-06T09:29:10.285Z",
"updatedAt": "2026-08-06T09:29:10.285Z"
}The tokens are not yet issued. Read the operation with GET /api/transactions/3f7c1a90-5d2e-4b08-9a41-6c2b8e5d7f13 until state is terminal. A failed mint reads back like this:
{
"transactionId": "3f7c1a90-5d2e-4b08-9a41-6c2b8e5d7f13",
"txType": "MINT",
"assetId": "GBP",
"accountRef": "ACC-0001",
"customerRef": "CUST-0001",
"counterpartyRef": null,
"amount": "10.50",
"params": {},
"state": "FAILED",
"failureCode": "CHAIN_FAILED",
"reasonCode": "EXECUTION_REVERTED",
"txHash": "0x4a1b8c7d2e5f309a6b1c4d7e8f0a2b3c5d6e7f8091a2b3c4d5e6f7089a1b2c3d",
"blockNumber": 18446801,
"createdAt": "2026-08-06T09:29:10.285Z",
"updatedAt": "2026-08-06T09:33:12.550Z"
}View in API Reference
- Submit a token operation ·
POST- Get one token operation ·
GET
Errors and edge cases
| Situation | Response | What to do |
|---|---|---|
counterpartyRef supplied on a MINT or BURN | 400 | Remove it. |
amount finer than the currency's minor unit | 400 | Send the amount at the currency's precision. |
Account not ACTIVE, or asset has no ACTIVE contract | 400 | Resolve the account or contract first. |
BURN for more than the account holds | 202, then FAILED | Check available before submitting. Handle the failure on the operation. |
Retrying a submission with the same Idempotency-Key | 200 with the first operation as it now stands | No second operation is created. |
Follow a Recipe
Step through the code in JavaScript or Python, inspect illustrative responses, and open the connected endpoint schemas.
API Reference
Open an endpoint for request fields, response examples and the interactive API console.
Related pages
Updated 2 days ago

