---
title: "Create a stablecoin burn operation"
method: POST
path: "/stablecoins/{stablecoinId}/burns"
tags: ["Stablecoins"]
---

# Create a stablecoin burn operation

`POST /stablecoins/{stablecoinId}/burns`

## Request

- Base URL: `https://api.lightspark.com/grid/2025-10-13`
- URL: `https://api.lightspark.com/grid/2025-10-13/stablecoins/{stablecoinId}/burns`
- Auth: HTTP basic

Create a provider-backed burn/redemption operation for a registered stablecoin. Burn sources and fiat destinations are normal Grid account objects; provider-specific Brale address ids are resolved and stored internally. External Spark wallet sources return funding instructions and remain pending until the provider reports funds received.

## Headers

- `Idempotency-Key` string, required

## Request body

- StablecoinBurnRequest
  - `amount` string, required: Amount to burn in the stablecoin's smallest unit. The amount must convert exactly to a whole fiat cent for the token decimals.
  - `source` union, required
    - StablecoinExternalAccountBurnSource: External account burn source. The issuer sends the stablecoin to the provider deposit address returned in the operation's funding instructions; it may be sent from any wallet.
      - `type` 'EXTERNAL_ACCOUNT', required: External account burn. The response carries funding instructions naming the provider deposit address to send the stablecoin to.
    - StablecoinGridInternalBurnSource: Grid internal account burn source, reserved for future Grid-controlled burn flows.
      - `type` 'GRID_INTERNAL_ACCOUNT', required: Grid internal account burn. Reserved for the Grid-controlled ledger movement flow.
      - `accountId` string, required: Grid internal source account id.
    - StablecoinProviderBalanceBurnSource: Provider internal balance burn source. No external funding is required; the provider spends existing balance.
      - `type` 'PROVIDER_INTERNAL_BALANCE', required: Provider internal balance burn. Spends stablecoin funds already held at the provider.
  - `destination` union, required
    - StablecoinExternalAccountBurnDestination
      - `type` 'EXTERNAL_ACCOUNT', required: External account burn destination.
      - `rail` 'WIRE' | 'ACH_CREDIT' | 'SAME_DAY_ACH_CREDIT' | 'RTP_CREDIT', required: Fiat payout rail for the burn destination.
      - `externalAccountId` string, required: Grid bank `ExternalAccount` receiving fiat redemption proceeds.
    - StablecoinGridInternalBurnDestination
      - `type` 'GRID_INTERNAL_ACCOUNT', required: Grid internal account burn destination.
      - `rail` 'WIRE' | 'ACH_CREDIT' | 'SAME_DAY_ACH_CREDIT' | 'RTP_CREDIT', required: Fiat payout rail for the burn destination.
      - `accountId` string, required: Grid `InternalAccount` receiving fiat redemption proceeds through its bank funding instructions.
  - `description` string: Optional platform-provided operation description.

## Response `201`

Burn operation created

- StablecoinOperation
  - `id` string, required: System-generated stablecoin issuer operation identifier.
  - `stablecoinId` string, required: Stablecoin this operation belongs to.
  - `operationType` 'MINT' | 'BURN', required: Stablecoin issuer operation type.
  - `status` 'CREATED' | 'PENDING_FUNDING' | 'PENDING_PROVIDER' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED', required: Stablecoin issuer operation lifecycle status.
  - `amount` string, required: Operation amount in the stablecoin's smallest unit.
  - `provider` 'BRALE', required: Stablecoin provider backing the linked account, stablecoin, or operation.
  - `providerEnvironment` 'SANDBOX' | 'PRODUCTION', required: Provider environment derived from the authenticated Grid platform mode.
  - `stablecoinProviderAccountId` string, required: Stablecoin provider account link used for the operation.
  - `source` StablecoinOperationSource: Source of a stablecoin operation, as reported on a `StablecoinOperation`. A single merged shape (superset of the mint funding source and burn source request variants) so the field is unambiguously deserializable regardless of operation type: `externalAccountId` is present for external-account funded mints, `accountId` for Grid internal account sources, and `sourceTokenIdentifier`/`cryptoNetwork` for provider internal balance sources.
    - `type` 'WIRE' | 'ACH_DEBIT' | 'SAME_DAY_ACH_DEBIT' | 'EXTERNAL_ACCOUNT' | 'GRID_INTERNAL_ACCOUNT' | 'PROVIDER_INTERNAL_BALANCE', required: Source variant. Mint funding uses `WIRE`, `ACH_DEBIT`, or `SAME_DAY_ACH_DEBIT`; burns use `EXTERNAL_ACCOUNT`. `GRID_INTERNAL_ACCOUNT` and `PROVIDER_INTERNAL_BALANCE` are shared across mint and burn.
    - `externalAccountId` string: Grid `ExternalAccount` funding the operation, present for ACH debit mints.
    - `accountId` string: Grid internal account id, present for Grid internal account sources.
    - `sourceTokenIdentifier` string: Provider token/value type, present for provider internal balance sources.
    - `cryptoNetwork` string: Source crypto network, present for provider internal balance sources.
  - `fundingInstructions` StablecoinFundingInstructions: Provider funding instructions safe to show publicly. Present for wire-funded mint operations and external-source burn operations when available. The common fields below are always declared; the exact set of remaining fields is rail- and provider-specific (for example, wire instructions carry bank beneficiary/account/routing details while Spark and on-chain instructions carry a deposit address), so `additionalProperties` stays open to pass those through without a spec change per rail.
    - `rail` string: Funding rail these instructions apply to (e.g. `SPARK`, `WIRE`).
    - `network` string: Network the funds should be sent on, when applicable.
    - `address` string: Deposit address the issuer sends funds to, for on-chain or Spark rails.
    - `valueType` string: Provider token/value type the deposit address expects.
  - `destination` StablecoinOperationDestination: Destination of a stablecoin operation, as reported on a `StablecoinOperation`. A single merged (flat) shape so the field is unambiguously deserializable regardless of operation type: `accountId` identifies the receiving account (its `ExternalAccount:` / `InternalAccount:` prefix disambiguates external vs Grid-managed), and `rail` is present for burn (fiat payout) destinations and absent for mint destinations.
    - `accountId` string, required: Grid account that received the funds. An `ExternalAccount:` id for external destinations or an `InternalAccount:` id for Grid-managed destinations.
    - `rail` 'WIRE' | 'ACH_CREDIT' | 'SAME_DAY_ACH_CREDIT' | 'RTP_CREDIT': Fiat payout rail, present for burn (fiat redemption) destinations.
  - `estimatedDelivery` StablecoinEstimatedDelivery: Static rail timing estimate for fiat redemption delivery. This is guidance, not a guaranteed arrival time.
    - `rail` string: Fiat payout rail the estimate applies to.
    - `amount` string: Estimated delivery amount in the smallest unit of `currency` (e.g. cents for USD).
    - `currency` string: ISO 4217 currency code of the fiat payout.
    - `timing` string: Human-readable rail timing estimate.
  - `expiresAt` string, date-time: Expiry for operations awaiting external funding.
  - `providerStatus` string: Sanitized provider status when available.
  - `failureReason` string: Stable internal failure code for terminal failed operations.
  - `description` string: Platform-provided operation description.
  - `createdAt` string, date-time, required: Creation timestamp.
  - `updatedAt` string, date-time, required: Last update timestamp.

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `404`: Stablecoin or referenced account not found
- `409`: Conflict
- `500`: Internal service error
- `503`: Provider temporarily unavailable

## Changes

> 115 revisions in range; 2 not diffed.

- **2026-10-28** `d996ddfb9d2b`: 2 info
  - added the optional property `details/missingFields` to the response with the `400` status
  - added the optional property `details/refusalReason` to the response with the `400` status
- **2026-10-26** `f11f1e76bdd7`: 1 warning
  - added the new `PURCHASE_CARD_LIMIT_REACHED` enum value to the `code` response property for the response status `409`
- **2026-10-26** `0a6dad5815c7`: 1 warning
  - added the new `INVOICE_ALREADY_USED` enum value to the `code` response property for the response status `409`
- **2026-10-24** `715332dcb111`: 1 warning
  - added the new `EXACT_AMOUNT_UNAVAILABLE` enum value to the `code` response property for the response status `400`
- **2026-10-20** `761d1d030cb5`: 2 warning
  - added the new `AGENT_CARD_EXISTS` enum value to the `code` response property for the response status `409`
  - added the new `CARDHOLDER_AGREEMENT_NOT_ACCEPTED` enum value to the `code` response property for the response status `400`

[Operation history](https://skmtc.dev/lightsparkdev/apis/grid-api/changes/stablecoins/:stablecoinId/burns/post.md)

---

[API](https://skmtc.dev/lightsparkdev/apis/grid-api.md) - [All operations](https://skmtc.dev/lightsparkdev/apis/grid-api/llms.txt) - [OpenAPI document](https://skmtc.dev/lightsparkdev/apis/grid-api/revisions/7a1db46ec552?raw)
