Mint and Burn Tokens
Increase or decrease token supply by minting and burning.
After deploying a token, you can mint new tokens to any address and burn tokens from accounts you control. Force-burn lets admins burn from any account without the holder's signature.
These operations are available from the dashboard and the API.
Prerequisites
- A deployed token (status:
active) - The
tokens:writepermission (ortokens:adminfor force-burn)
Allowlist tokens
For tokens with requiresAllowlist: true that have an on-chain allowlist configured, the mint endpoints auto-add a fresh destination wallet to the on-chain allowlist (and mirror it into the DB allowlist) when needed. Older allowlist tokens deployed without an on-chain list enforce the DB allowlist only — mint rejects any destination that isn't already on the list, so you must add it via POST /allowlist first. Both POST /mint and POST /allowlist require tokens:write, so any key that can mint can implicitly grow the allowlist. If you want every destination operator-approved before minting, gate POST /mint behind your own workflow that pre-calls POST /allowlist first, rather than relying on the auto-add behavior.
For tokens with an on-chain allowlist configured, operator-revoked destinations are never auto-reactivated: minting to a revoked address returns 403 DESTINATION_REVOKED and the operator must re-add the address via POST /allowlist first. Legacy allowlist tokens without an on-chain list don't track a distinct revoked state — a removed destination simply fails with 403 NOT_ON_TOKEN_ALLOWLIST until it's re-added.
Mint tokens
Execute mode
curl -X POST https://api.solana.com/v1/issuance/tokens/tok_abc123/mint \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: mint-001" \
-d '{
"mint": {
"destination": "7xKXz...9fGh",
"amount": "1000",
"memo": "Initial distribution"
}
}'The amount field is a decimal string in UI units (human-readable token amounts). "1" mints one token; "1.5" mints one and a half. SDP converts to on-chain base units using the token's decimals.
Prepare mode
Add /prepare to simulate before signing:
curl -X POST https://api.solana.com/v1/issuance/tokens/tok_abc123/mint/prepare \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"mint": {
"destination": "7xKXz...9fGh",
"amount": "1000"
},
"options": { "simulate": true }
}'Priority fees
Control transaction priority with options.priorityFee:
Values: "none", "low", "medium", "high", or a specific number in micro-lamports.
Burn tokens
Burn tokens from an account your wallet controls:
curl -X POST https://api.solana.com/v1/issuance/tokens/tok_abc123/burn \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: burn-001" \
-d '{
"burn": {
"source": "3xYZa...2aBc",
"amount": "250",
"memo": "Redemption"
}
}'The source can be the authority wallet or its token account. Use force-burn for other holder accounts.
Force-burn (admin)
Burn tokens from any account without the holder's signature. Requires tokens:admin permission:
curl -X POST https://api.solana.com/v1/issuance/tokens/tok_abc123/force-burn \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: force-burn-001" \
-d '{
"forceBurn": {
"source": "3xYZa...2aBc",
"amount": "250",
"memo": "Compliance action"
}
}'Both burn and force-burn also support /prepare endpoints for client-side signing.
Refresh supply
After minting or burning, refresh the cached supply:
curl -X POST https://api.solana.com/v1/issuance/tokens/tok_abc123/supply/refresh \
-H "Authorization: Bearer sk_test_..."