Skip to main content
Self-managed

Mint and burn

Early access

Stablecoin issuance is in early access. It's a paid module and is available on request. Contact your Account Manager to get access.

You mint

to put new tokens into circulation and burn to take them out. Each mint or burn is an order for one network.

How an order works​

Layer1 checks each order against your approval settings for stablecoin issuance. For a mint, Layer1 also checks your velocity rules

, and you confirm the reserve: see Confirm the reserve.

Order statuses. An order is CREATED, then APPROVAL_REQUESTED if it needs approval, then APPROVED. A mint continues through VELOCITY_CHECK_REQUESTED, VELOCITY_CHECK_PASSED, RESERVE_CHECK_REQUESTED, and RESERVE_CONFIRMED, and a burn skips these checks. Both then go PROCESSING and COMPLETED, or FAILED if the on-chain step fails. An order ends as REJECTED if an approver rejects it, the approval expires after 1 day, or you reject the reserve check

The order ends as REJECTED if an approver rejects it, if the approval isn't given within 1 day, or if you reject the reserve check. It ends as FAILED if the on-chain

step fails. In both cases, failure in the order tells you why.

Every status change sends the layer1:issuance:order:status-changed webhook with the order.

Mint stablecoins​

To mint your stablecoin, do the following:

  1. In the Layer1 Portal, go to Issuance > Issuance and click Mint.

  2. Complete the fields:

    • Select the created Stablecoin.
    • Enter the Amount to create.
    • Select the Network. Destination shows the asset pool that receives the minted tokens.
    • Enter a unique Reference, or click Suggest to generate one.
    Mint form with the stablecoin Example USD, an amount of 800 EXUSD, the network Ethereum Sepolia, the destination EXUSD Issuance, and the reference MINT-2026-0005
  3. Click Continue, check the details, and confirm the mint.

If the mint needs approval, you will see the Sent for approval window. Ask users with the issuance:operator role to approve it in the Approvals section. You can't approve your own mint.

Sent for approval screen saying a second person needs to approve this mint, with Close and Open Approvals buttons

Burn stablecoins​

To burn your stablecoin, do the following:

  1. In the Layer1 Portal, go to Issuance > Issuance and click Burn.

  2. Complete the fields:

    • Select the Stablecoin and the Network.
    • Enter the Amount. Under the amount, you see the asset pool the burn is taken from and its balance. You can burn up to that balance.
    • Enter a unique Reference, or click Suggest to generate one.
    Burn form with the stablecoin Example USD, the network Ethereum Sepolia, an amount of 100 EXUSD with the pool balance of 5,000 EXUSD below it, and the reference BURN-2026-0001
  3. Click Continue, check the details, and confirm the burn.

You can't mint or burn on a network while its token contract is paused. In the Portal, Mint and Burn are disabled for that network, and the API responds with 422 and the error code layer1:issuance:0025. See Pause a token contract.

Confirm the reserve​

Every mint waits for you to confirm that your reserve covers it. Layer1 never checks your reserve itself. When a mint reaches RESERVE_CHECK_REQUESTED, Layer1 sends the layer1:issuance:order:reserve-check webhook:

Example webhook
{
"event": "layer1:issuance:order:reserve-check",
"eventId": "019a2b8a-3c61-7a95-b3e7-1d5f9c2a6e48",
"timestamp": "2026-10-26T14:52:10.701Z",
"data": {
"orderId": "019a2b7e-4d1c-7f30-b6a8-2c9e5f7d3a14",
"reference": "MINT-2026-0005",
"tokenId": "019a1f3c-7b2e-7d41-9c58-3e6f2a8b4d10",
"asset": "EXUSD",
"network": "ETHEREUM",
"type": "MINT",
"amount": "800.00",
"supply": {
"current": "26000.00",
"networks": [
{
"network": "ETHEREUM",
"contractAddress": "0x1D37a4E2b9C6f08d5E3a7B1c4F9e2D6a807B7526",
"current": "16000.00"
},
{
"network": "BASE",
"contractAddress": "0x6A9f2C4e8B1d7A3f5E0c9D2b6F4a1E8c3B4d6F81",
"current": "10000.00"
}
]
}
}
}

supply is the on-chain supply before this mint. Check that your reserve covers supply.current plus amount, then answer by sending a POST /issuance/v1/orders/{orderId}/actions request. You need the layer1:issuance:order:action scope.

Request
{
"type": "CONFIRM_RESERVE"
}

The order moves to RESERVE_CONFIRMED, and Layer1 mints on-chain.

The mint waits until you answer; there's no time limit. The webhook can be delivered more than once. Answering again is harmless: an order you already answered responds with 409.

Layer1 sends the layer1:issuance:order:status-changed webhook for RESERVE_CHECK_REQUESTED first and the reserve check right after it. If Layer1 can't read the supply on one of the token's networks, it sends neither and tries again later, so the reserve check can arrive late.

Track an order​

In the Layer1 Portal, go to Issuance > Issuance. The list shows every mint and burn with its status. Use the Waiting for approval, Processing, and Rejected tabs to filter the list.

Was this page helpful?