> ## Documentation Index
> Fetch the complete documentation index at: https://ramps-dp-grid-p2p-quote-destinations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a stablecoin mint operation

> Create a provider-backed mint operation for a registered stablecoin. Funding and destination accounts are normal Grid `ExternalAccount` objects; any provider-specific Brale address linkage is managed internally by Grid. Wire-funded mints return funding instructions and remain pending until the provider reports funds received.




## OpenAPI

````yaml https://app.stainless.com/api/spec/documented/grid/openapi.documented.yml post /stablecoins/{stablecoinId}/mints
openapi: 3.1.0
info:
  title: Grid API
  description: >
    API for managing global payments on the open Money Grid. Built by
    Lightspark. See the full documentation at https://docs.lightspark.com/.
  version: '2025-10-13'
  contact:
    name: Lightspark Support
    email: support@lightspark.com
  license:
    name: Proprietary
    url: https://lightspark.com/terms
servers:
  - url: https://api.lightspark.com/grid/2025-10-13
    description: Production server
security:
  - BasicAuth: []
  - AgentAuth: []
tags:
  - name: Platform Configuration
    description: >-
      Platform configuration endpoints for managing global settings. You can
      also configure these settings in the Grid dashboard.
  - name: Customers
    description: >-
      Customer management endpoints for creating and updating customer
      information
  - name: Contact Verification
    description: >-
      Endpoints for verifying a customer's email and phone via one-time codes.
      Required only for customers whose payment provider mandates contact
      verification (e.g. EU customers); other providers return 409.
  - name: Strong Customer Authentication
    description: >-
      Endpoints for authorizing money-movement operations that require Strong
      Customer Authentication. Relevant only for customers in a region where SCA
      is required (e.g. EU); customers outside SCA-regulated regions never see
      an SCA challenge and these endpoints return 409.
  - name: KYC/KYB Verifications
    description: >-
      Endpoints for Know Your Customer (KYC) and Know Your Business (KYB)
      verification, including managing beneficial owners and triggering
      verification for customers.
  - name: Documents
    description: >-
      Endpoints for uploading and managing verification documents for customers
      and beneficial owners. Supports KYC and KYB document requirements.
  - name: Internal Accounts
    description: >-
      Internal account management endpoints for creating and managing internal
      accounts
  - name: External Accounts
    description: >-
      External account management endpoints for creating and managing external
      bank accounts
  - name: Same-Currency Transfers
    description: >-
      Endpoints for transferring funds between internal and external accounts
      with the same currency
  - name: Cross-Currency Transfers
    description: Endpoints for creating and confirming quotes for cross-currency transfers
  - name: Transactions
    description: Endpoints for retrieving transaction information
  - name: Webhooks
    description: Webhook endpoints and configuration for receiving notifications
  - name: Invitations
    description: Endpoints for creating, claiming and managing UMA invitations
  - name: Sandbox
    description: Endpoints to trigger test cases in sandbox
  - name: API Tokens
    description: Endpoints to programmatically manage API tokens
  - name: Exchange Rates
    description: >-
      Endpoints for retrieving cached foreign exchange rates. Rates are cached
      for approximately 5 minutes and include platform-specific fees.
  - name: Discoveries
    description: >-
      Endpoints for discovering available payment rails, banks, and providers
      for a given country and currency corridor.
  - name: Embedded Wallet Auth
    description: >-
      Endpoints for registering and verifying end-user authentication
      credentials (email OTP, OAuth, passkey) used to sign Embedded Wallet
      actions.
  - name: Agent Management
    description: >-
      Endpoints for creating and managing agents (experimental), called by the
      partner's backend using platform credentials. Covers the full agent
      lifecycle: creation, policy configuration, pausing, deletion, the device
      code installation flow, and approving or rejecting transactions initiated
      by agents.
  - name: Agent Operations
    description: >-
      Endpoints called by the agent itself using its own credentials (obtained
      via device code redemption). Scoped to the agent's associated customer —
      all requests automatically operate on behalf of that customer and are
      subject to the agent's policy. When an action requires approval, the
      resulting transaction enters a pending state and must be approved by the
      platform via `POST /transactions/{transactionId}/approve`.
  - name: Cards
    description: >-
      Card management endpoints. Issue debit cards against an internal account,
      freeze / unfreeze, close, manage card funding sources, and list card
      transactions.
  - name: Stablecoins
    description: >-
      Stablecoin issuance endpoints. Link provider accounts, register
      provider-created stablecoins, create direct mint/burn issuer operations,
      and track operation status.
paths:
  /stablecoins/{stablecoinId}/mints:
    parameters:
      - name: stablecoinId
        in: path
        description: System-generated stablecoin identifier
        required: true
        schema:
          type: string
    post:
      tags:
        - Stablecoins
      summary: Create a stablecoin mint operation
      description: >
        Create a provider-backed mint operation for a registered stablecoin.
        Funding and destination accounts are normal Grid `ExternalAccount`
        objects; any provider-specific Brale address linkage is managed
        internally by Grid. Wire-funded mints return funding instructions and
        remain pending until the provider reports funds received.
      operationId: createStablecoinMint
      parameters:
        - name: Idempotency-Key
          in: header
          description: Required idempotency key for retrying this mint request safely.
          required: true
          schema:
            type: string
            maxLength: 255
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StablecoinMintRequest'
      responses:
        '201':
          description: Mint operation created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StablecoinOperation'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error400'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '404':
          description: Stablecoin or referenced account not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error404'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error409'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
        '503':
          description: Provider temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error503'
      security:
        - BasicAuth: []
components:
  schemas:
    StablecoinMintRequest:
      type: object
      required:
        - amount
        - fundingSource
        - destination
      properties:
        amount:
          type: string
          pattern: ^[0-9]+$
          description: >-
            Amount to mint in the stablecoin's smallest unit. The amount must
            convert exactly to a whole fiat cent for the token decimals.
          example: '1000000'
        fundingSource:
          $ref: '#/components/schemas/StablecoinMintFundingSource'
        destination:
          $ref: '#/components/schemas/StablecoinMintDestination'
        description:
          type: string
          maxLength: 1024
          description: Optional platform-provided operation description.
          example: Initial program funding mint
    StablecoinOperation:
      type: object
      required:
        - id
        - stablecoinId
        - operationType
        - status
        - amount
        - provider
        - providerEnvironment
        - stablecoinProviderAccountId
        - createdAt
        - updatedAt
      properties:
        id:
          type: string
          description: System-generated stablecoin issuer operation identifier.
          example: StablecoinOperation:019542f5-b3e7-1d02-0000-000000000301
        stablecoinId:
          type: string
          description: Stablecoin this operation belongs to.
          example: Stablecoin:019542f5-b3e7-1d02-0000-000000000002
        operationType:
          $ref: '#/components/schemas/StablecoinOperationType'
        status:
          $ref: '#/components/schemas/StablecoinOperationStatus'
        amount:
          type: string
          description: Operation amount in the stablecoin's smallest unit.
          example: '1000000'
        provider:
          $ref: '#/components/schemas/StablecoinProvider'
        providerEnvironment:
          $ref: '#/components/schemas/StablecoinProviderEnvironment'
        stablecoinProviderAccountId:
          type: string
          description: Stablecoin provider account link used for the operation.
          example: StablecoinProviderAccount:019542f5-b3e7-1d02-0000-000000000001
        source:
          $ref: '#/components/schemas/StablecoinOperationSource'
        fundingInstructions:
          $ref: '#/components/schemas/StablecoinFundingInstructions'
        destination:
          $ref: '#/components/schemas/StablecoinOperationDestination'
        estimatedDelivery:
          $ref: '#/components/schemas/StablecoinEstimatedDelivery'
        expiresAt:
          type: string
          format: date-time
          description: Expiry for operations awaiting external funding.
          example: '2026-05-27T16:40:00Z'
        providerStatus:
          type: string
          description: Sanitized provider status when available.
          example: pending
        failureReason:
          type: string
          description: Stable internal failure code for terminal failed operations.
          example: PROVIDER_TRANSFER_FAILED
        description:
          type: string
          description: Platform-provided operation description.
          example: Initial program funding mint
        createdAt:
          type: string
          format: date-time
          description: Creation timestamp.
          example: '2026-05-20T16:40:00Z'
        updatedAt:
          type: string
          format: date-time
          description: Last update timestamp.
          example: '2026-05-20T17:10:00Z'
    Error400:
      type: object
      required:
        - message
        - status
        - code
      properties:
        status:
          type: integer
          enum:
            - 400
          description: HTTP status code
        code:
          type: string
          description: >
            | Error Code | Description |

            |------------|-------------|

            | INVALID_INPUT | Invalid input provided |

            | MISSING_MANDATORY_USER_INFO | Required customer information is
            missing |

            | INVITATION_ALREADY_CLAIMED | Invitation has already been claimed |

            | INVITATIONS_NOT_CONFIGURED | Invitations are not configured |

            | INVALID_UMA_ADDRESS | UMA address format is invalid |

            | INVITATION_CANCELLED | Invitation has been cancelled |

            | QUOTE_REQUEST_FAILED | An issue occurred during the quote process;
            this is retryable |

            | INVALID_PAYREQ_RESPONSE | Counterparty Payreq response was invalid
            |

            | INVALID_RECEIVER | Receiver is invalid |

            | PARSE_PAYREQ_RESPONSE_ERROR | Error parsing receiver PayReq
            response |

            | CERT_CHAIN_INVALID | Counterparty certificate chain is invalid |

            | CERT_CHAIN_EXPIRED | Counterparty certificate chain has expired |

            | INVALID_PUBKEY_FORMAT | Counterparty Public key format is invalid
            |

            | MISSING_REQUIRED_UMA_PARAMETERS | Counterparty required UMA
            parameters are missing |

            | SENDER_NOT_ACCEPTED | Sender is not accepted |

            | AMOUNT_OUT_OF_RANGE | Amount is out of range |

            | INVALID_CURRENCY | Currency is invalid |

            | INVALID_TIMESTAMP | Timestamp is invalid |

            | INVALID_NONCE | Nonce is invalid |

            | INVALID_REQUEST_FORMAT | Request format is invalid |

            | INVALID_BANK_ACCOUNT | Bank account is invalid |

            | SELF_PAYMENT | Self payment not allowed |

            | LOOKUP_REQUEST_FAILED | Lookup request failed |

            | PARSE_LNURLP_RESPONSE_ERROR | Error parsing LNURLP response |

            | INVALID_AMOUNT | Amount is invalid |

            | WEBHOOK_ENDPOINT_NOT_SET | Webhook endpoint is not set |

            | WEBHOOK_DELIVERY_ERROR | Webhook delivery error |

            | LOW_QUALITY | Document quality too low to process |

            | DATA_MISMATCH | Document details don't match provided information
            |

            | EXPIRED | Document has expired |

            | SUSPECTED_FRAUD | Document suspected of being forged or edited |

            | UNSUITABLE_DOCUMENT | Document type is not accepted or not
            supported |

            | INCOMPLETE | Document is missing pages or sides |

            | EMAIL_OTP_CREDENTIAL_ALREADY_EXISTS | An EMAIL_OTP credential is
            already registered on the target internal account; only one email
            OTP credential is supported per internal account at this time |

            | SMS_OTP_CREDENTIAL_ALREADY_EXISTS | An SMS_OTP credential is
            already registered on the target internal account; only one SMS OTP
            credential is supported per internal account at this time |

            | PASSKEY_CREDENTIAL_ALREADY_EXISTS | A PASSKEY credential with the
            same WebAuthn credentialId is already registered on the target
            internal account |

            | STABLECOIN_PROVIDER_ACCOUNT_INVALID | The stablecoin provider
            account link is not usable |

            | STABLECOIN_PROVIDER_ACCOUNT_REVOKED | The stablecoin provider
            account link has been revoked |

            | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active
            provider account links exist; pass `stablecoinProviderAccountId` to
            select one |
          enum:
            - INVALID_INPUT
            - MISSING_MANDATORY_USER_INFO
            - INVITATION_ALREADY_CLAIMED
            - INVITATIONS_NOT_CONFIGURED
            - INVALID_UMA_ADDRESS
            - INVITATION_CANCELLED
            - QUOTE_REQUEST_FAILED
            - INVALID_PAYREQ_RESPONSE
            - INVALID_RECEIVER
            - PARSE_PAYREQ_RESPONSE_ERROR
            - CERT_CHAIN_INVALID
            - CERT_CHAIN_EXPIRED
            - INVALID_PUBKEY_FORMAT
            - MISSING_REQUIRED_UMA_PARAMETERS
            - SENDER_NOT_ACCEPTED
            - AMOUNT_OUT_OF_RANGE
            - INVALID_CURRENCY
            - INVALID_TIMESTAMP
            - INVALID_NONCE
            - INVALID_REQUEST_FORMAT
            - INVALID_BANK_ACCOUNT
            - SELF_PAYMENT
            - LOOKUP_REQUEST_FAILED
            - PARSE_LNURLP_RESPONSE_ERROR
            - INVALID_AMOUNT
            - WEBHOOK_ENDPOINT_NOT_SET
            - WEBHOOK_DELIVERY_ERROR
            - LOW_QUALITY
            - DATA_MISMATCH
            - EXPIRED
            - SUSPECTED_FRAUD
            - UNSUITABLE_DOCUMENT
            - INCOMPLETE
            - EMAIL_OTP_CREDENTIAL_ALREADY_EXISTS
            - SMS_OTP_CREDENTIAL_ALREADY_EXISTS
            - PASSKEY_CREDENTIAL_ALREADY_EXISTS
            - STABLECOIN_PROVIDER_ACCOUNT_INVALID
            - STABLECOIN_PROVIDER_ACCOUNT_REVOKED
            - STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED
        message:
          type: string
          description: Error message
        details:
          type: object
          description: >-
            Additional error details. Shape varies by `code`. For
            field-validation errors on submit endpoints (e.g. `POST /customers`,
            `PATCH /customers/{id}`), `details.errors[]` enumerates every
            invalid field so platforms can render form-field-level UX for the
            entire request in a single round-trip.
          properties:
            errors:
              type: array
              description: >-
                One entry per invalid field. Present on field-validation errors
                from submit endpoints.
              items:
                $ref: '#/components/schemas/FieldError'
          additionalProperties: true
    Error401:
      type: object
      required:
        - message
        - status
        - code
      properties:
        status:
          type: integer
          enum:
            - 401
          description: HTTP status code
        code:
          type: string
          description: >
            | Error Code | Description |

            |------------|-------------|

            | UNAUTHORIZED | Issue with API credentials |

            | INVALID_SIGNATURE | Signature header is invalid |

            | WALLET_SIGNATURE_MISSING | The `Grid-Wallet-Signature` header is
            required for this Embedded Wallet action but was not supplied |

            | WALLET_SIGNATURE_MALFORMED | The `Grid-Wallet-Signature` header
            could not be parsed (bad encoding, structure, or fields) |

            | WALLET_SIGNATURE_BODY_MISMATCH | The `Grid-Wallet-Signature` was
            computed over a different request body than the one received |

            | WALLET_SIGNATURE_INVALID | The `Grid-Wallet-Signature` failed
            cryptographic verification against the registered credential |

            | REQUEST_ID_MISSING | The `Request-Id` header is required on the
            signed retry but was not supplied (paired with
            `Grid-Wallet-Signature`) |
          enum:
            - UNAUTHORIZED
            - INVALID_SIGNATURE
            - WALLET_SIGNATURE_MISSING
            - WALLET_SIGNATURE_MALFORMED
            - WALLET_SIGNATURE_BODY_MISMATCH
            - WALLET_SIGNATURE_INVALID
            - REQUEST_ID_MISSING
        message:
          type: string
          description: Error message
        details:
          type: object
          description: Additional error details
          additionalProperties: true
    Error404:
      type: object
      required:
        - message
        - status
        - code
      properties:
        status:
          type: integer
          enum:
            - 404
          description: HTTP status code
        code:
          type: string
          description: >
            | Error Code | Description |

            |------------|-------------|

            | TRANSACTION_NOT_FOUND | Transaction not found |

            | INVITATION_NOT_FOUND | Invitation not found |

            | USER_NOT_FOUND | Customer not found |

            | QUOTE_NOT_FOUND | Quote not found |

            | LOOKUP_REQUEST_NOT_FOUND | Lookup request not found |

            | TOKEN_NOT_FOUND | Token not found |

            | BULK_UPLOAD_JOB_NOT_FOUND | Bulk upload job not found |

            | REFERENCE_NOT_FOUND | Reference not found |

            | UMA_NOT_FOUND | The UMA address is well-formed but no receiver
            exists at the counterparty VASP |

            | STABLECOIN_PROVIDER_ACCOUNT_NOT_FOUND | Stablecoin provider
            account link not found |
          enum:
            - TRANSACTION_NOT_FOUND
            - INVITATION_NOT_FOUND
            - USER_NOT_FOUND
            - QUOTE_NOT_FOUND
            - LOOKUP_REQUEST_NOT_FOUND
            - TOKEN_NOT_FOUND
            - BULK_UPLOAD_JOB_NOT_FOUND
            - REFERENCE_NOT_FOUND
            - UMA_NOT_FOUND
            - STABLECOIN_PROVIDER_ACCOUNT_NOT_FOUND
        message:
          type: string
          description: Error message
        details:
          type: object
          description: Additional error details
          additionalProperties: true
    Error409:
      type: object
      required:
        - message
        - status
        - code
      properties:
        status:
          type: integer
          enum:
            - 409
          description: HTTP status code
        code:
          type: string
          description: >
            | Error Code | Description |

            |------------|-------------|

            | TRANSACTION_NOT_PENDING_PLATFORM_APPROVAL | Transaction is not
            pending platform approval |

            | TRANSACTION_NOT_CANCELLABLE | Transaction has already settled or
            is otherwise past the point where it can be cancelled |

            | UMA_ADDRESS_EXISTS | UMA address already exists |

            | EMAIL_OTP_EMAIL_ALREADY_EXISTS | Email address is already
            associated with an EMAIL_OTP credential |

            | EMAIL_OTP_CREDENTIAL_SET_CHANGED | Tied EMAIL_OTP credential set
            changed after the signed-retry challenge was issued |

            | PASSKEY_ALREADY_ENROLLED | The customer already has an enrolled
            passkey factor; only one passkey per customer is supported. Delete
            the existing one before enrolling another |

            | SCA_SESSION_REQUIRED | The customer's Strong Customer
            Authentication login session is missing or expired. Re-authenticate
            the customer, then retry the request. Distinct from a `401`, which
            means the platform's own API credentials were rejected |

            | BENEFICIARY_TRUSTED | The external account is currently a trusted
            beneficiary, so it cannot be deleted. Untrust it first via `POST
            /customers/external-accounts/{externalAccountId}/untrust` (and its
            `/confirm`), then delete |

            | CONFLICT | Generic resource-state conflict. Returned, for example,
            when `platformCustomerId` on a customer create call collides with an
            existing active customer on the same platform |
          enum:
            - TRANSACTION_NOT_PENDING_PLATFORM_APPROVAL
            - TRANSACTION_NOT_CANCELLABLE
            - UMA_ADDRESS_EXISTS
            - EMAIL_OTP_EMAIL_ALREADY_EXISTS
            - EMAIL_OTP_CREDENTIAL_SET_CHANGED
            - PASSKEY_ALREADY_ENROLLED
            - SCA_SESSION_REQUIRED
            - BENEFICIARY_TRUSTED
            - CONFLICT
        message:
          type: string
          description: Error message
        details:
          type: object
          description: Additional error details
          additionalProperties: true
    Error500:
      type: object
      required:
        - message
        - status
        - code
      properties:
        status:
          type: integer
          enum:
            - 500
          description: HTTP status code
        code:
          type: string
          description: |
            | Error Code | Description |
            |------------|-------------|
            | GRID_SWITCH_ERROR | Grid switch error |
            | INTERNAL_ERROR | Internal server or UMA error |
          enum:
            - GRID_SWITCH_ERROR
            - INTERNAL_ERROR
        message:
          type: string
          description: Error message
        details:
          type: object
          description: Additional error details
          additionalProperties: true
    Error503:
      type: object
      required:
        - message
        - status
        - code
      properties:
        status:
          type: integer
          enum:
            - 503
          description: HTTP status code
        code:
          type: string
          description: >
            | Error Code | Description |

            |------------|-------------|

            | SERVICE_UNAVAILABLE | Downstream service is temporarily
            unavailable |
          enum:
            - SERVICE_UNAVAILABLE
        message:
          type: string
          description: Error message
        details:
          type: object
          description: Additional error details
          additionalProperties: true
    StablecoinMintFundingSource:
      oneOf:
        - $ref: '#/components/schemas/StablecoinWireFundingSource'
        - $ref: '#/components/schemas/StablecoinAchDebitFundingSource'
        - $ref: '#/components/schemas/StablecoinSameDayAchDebitFundingSource'
        - $ref: '#/components/schemas/StablecoinGridInternalFundingSource'
        - $ref: '#/components/schemas/StablecoinProviderBalanceFundingSource'
      discriminator:
        propertyName: type
        mapping:
          WIRE:
            $ref: '#/components/schemas/StablecoinWireFundingSource'
          ACH_DEBIT:
            $ref: '#/components/schemas/StablecoinAchDebitFundingSource'
          SAME_DAY_ACH_DEBIT:
            $ref: '#/components/schemas/StablecoinSameDayAchDebitFundingSource'
          GRID_INTERNAL_ACCOUNT:
            $ref: '#/components/schemas/StablecoinGridInternalFundingSource'
          PROVIDER_INTERNAL_BALANCE:
            $ref: '#/components/schemas/StablecoinProviderBalanceFundingSource'
    StablecoinMintDestination:
      type: object
      description: >-
        Account that receives the minted stablecoin. External and Grid-managed
        accounts are represented as a single account reference, matching the
        `accountId` pattern used elsewhere in the API; the id prefix
        (`ExternalAccount:` or `InternalAccount:`) determines which. In the
        initial Brale-backed flow this must reference an active Spark external
        account.
      required:
        - accountId
      properties:
        accountId:
          type: string
          description: >-
            Grid account receiving the minted stablecoin. Accepts an
            `ExternalAccount:` id (initial Brale-backed flow) or an
            `InternalAccount:` id for Grid-managed destinations.
          example: ExternalAccount:019542f5-b3e7-1d02-0000-000000000201
    StablecoinOperationType:
      type: string
      enum:
        - MINT
        - BURN
      description: Stablecoin issuer operation type.
    StablecoinOperationStatus:
      type: string
      enum:
        - CREATED
        - PENDING_FUNDING
        - PENDING_PROVIDER
        - PROCESSING
        - COMPLETED
        - FAILED
        - EXPIRED
      description: Stablecoin issuer operation lifecycle status.
    StablecoinProvider:
      type: string
      enum:
        - BRALE
      description: >-
        Stablecoin provider backing the linked account, stablecoin, or
        operation.
    StablecoinProviderEnvironment:
      type: string
      enum:
        - SANDBOX
        - PRODUCTION
      description: Provider environment derived from the authenticated Grid platform mode.
    StablecoinOperationSource:
      type: object
      description: >-
        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 and
        external-account burns, `accountId` for Grid internal account sources,
        and `sourceTokenIdentifier`/`cryptoNetwork` for provider internal
        balance sources.
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - WIRE
            - ACH_DEBIT
            - SAME_DAY_ACH_DEBIT
            - EXTERNAL_ACCOUNT
            - GRID_INTERNAL_ACCOUNT
            - PROVIDER_INTERNAL_BALANCE
          description: >-
            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.
          example: ACH_DEBIT
        externalAccountId:
          type: string
          description: >-
            Grid `ExternalAccount` funding the operation, present for ACH debit
            mints and external-account burns.
          example: ExternalAccount:019542f5-b3e7-1d02-0000-000000000101
        accountId:
          type: string
          description: Grid internal account id, present for Grid internal account sources.
          example: InternalAccount:019542f5-b3e7-1d02-0000-000000000102
        sourceTokenIdentifier:
          type: string
          description: >-
            Provider token/value type, present for provider internal balance
            sources.
          example: USDC
        cryptoNetwork:
          type: string
          description: >-
            Source crypto network, present for provider internal balance
            sources.
          example: SOLANA
    StablecoinFundingInstructions:
      type: object
      description: >-
        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.
      additionalProperties: true
      properties:
        rail:
          type: string
          description: Funding rail these instructions apply to (e.g. `SPARK`, `WIRE`).
          example: SPARK
        network:
          type: string
          description: Network the funds should be sent on, when applicable.
          example: SPARK
        address:
          type: string
          description: >-
            Deposit address the issuer sends funds to, for on-chain or Spark
            rails.
          example: spark1...
        valueType:
          type: string
          description: Provider token/value type the deposit address expects.
          example: ACME
      example:
        rail: SPARK
        network: SPARK
        address: spark1...
        valueType: ACME
    StablecoinOperationDestination:
      type: object
      description: >-
        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.
      required:
        - accountId
      properties:
        accountId:
          type: string
          description: >-
            Grid account that received the funds. An `ExternalAccount:` id for
            external destinations or an `InternalAccount:` id for Grid-managed
            destinations.
          example: ExternalAccount:019542f5-b3e7-1d02-0000-000000000205
        rail:
          type: string
          enum:
            - WIRE
            - ACH_CREDIT
            - SAME_DAY_ACH_CREDIT
            - RTP_CREDIT
          description: Fiat payout rail, present for burn (fiat redemption) destinations.
    StablecoinEstimatedDelivery:
      type: object
      description: >-
        Static rail timing estimate for fiat redemption delivery. This is
        guidance, not a guaranteed arrival time.
      additionalProperties: true
      properties:
        rail:
          type: string
          description: Fiat payout rail the estimate applies to.
          example: ACH_CREDIT
        amount:
          type: string
          pattern: ^[0-9]+$
          description: >-
            Estimated delivery amount in the smallest unit of `currency` (e.g.
            cents for USD).
          example: '100'
        currency:
          type: string
          description: ISO 4217 currency code of the fiat payout.
          example: USD
        timing:
          type: string
          description: Human-readable rail timing estimate.
          example: 1-3 business days
      example:
        rail: ACH_CREDIT
        amount: '100'
        currency: USD
        timing: 1-3 business days
    FieldError:
      type: object
      required:
        - field
      description: >-
        One field-level validation failure. Field-validation errors on submit
        endpoints (e.g. `POST /customers`, `PATCH /customers/{id}`) emit an
        array of these under `details.errors` so platforms can render
        form-field-level UX for every failure in a single round-trip.
      properties:
        field:
          type: string
          description: Dot-notation path to the offending field.
          example: taxIdentifier
        constraint:
          $ref: '#/components/schemas/FieldConstraint'
        message:
          type: string
          description: Human-readable explanation of what's wrong with this field.
          example: Value is not one of the allowed enum members.
    StablecoinWireFundingSource:
      title: Wire
      allOf:
        - $ref: '#/components/schemas/StablecoinMintFundingSourceBase'
        - type: object
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - WIRE
              description: >-
                Wire-funded mint. Funding instructions are returned on the
                resulting operation.
              example: WIRE
          description: >-
            Wire funding source. The issuer wires fiat to the provider using the
            returned funding instructions.
    StablecoinAchDebitFundingSource:
      title: ACH Debit
      allOf:
        - $ref: '#/components/schemas/StablecoinMintFundingSourceBase'
        - type: object
          required:
            - type
            - externalAccountId
          properties:
            type:
              type: string
              enum:
                - ACH_DEBIT
              description: ACH debit funding.
              example: ACH_DEBIT
            externalAccountId:
              type: string
              description: Grid `ExternalAccount` debited to fund the mint.
              example: ExternalAccount:019542f5-b3e7-1d02-0000-000000000101
          description: >-
            ACH debit funding source. The provider debits the referenced
            external account.
    StablecoinSameDayAchDebitFundingSource:
      title: Same-Day ACH Debit
      allOf:
        - $ref: '#/components/schemas/StablecoinMintFundingSourceBase'
        - type: object
          required:
            - type
            - externalAccountId
          properties:
            type:
              type: string
              enum:
                - SAME_DAY_ACH_DEBIT
              description: Same-day ACH debit funding.
              example: SAME_DAY_ACH_DEBIT
            externalAccountId:
              type: string
              description: Grid `ExternalAccount` debited to fund the mint.
              example: ExternalAccount:019542f5-b3e7-1d02-0000-000000000101
          description: >-
            Same-day ACH debit funding source. The provider debits the
            referenced external account.
    StablecoinGridInternalFundingSource:
      title: Grid Internal Account
      allOf:
        - $ref: '#/components/schemas/StablecoinMintFundingSourceBase'
        - type: object
          required:
            - type
            - accountId
          properties:
            type:
              type: string
              enum:
                - GRID_INTERNAL_ACCOUNT
              description: >-
                Grid internal account funding. Reserved for the follow-up
                Grid-funded mint flow.
              example: GRID_INTERNAL_ACCOUNT
            accountId:
              type: string
              description: Grid internal funding account id.
              example: InternalAccount:019542f5-b3e7-1d02-0000-000000000102
          description: >-
            Grid internal account funding source, reserved for future
            Grid-funded mint flows.
    StablecoinProviderBalanceFundingSource:
      title: Provider Internal Balance
      allOf:
        - $ref: '#/components/schemas/StablecoinMintFundingSourceBase'
        - type: object
          required:
            - type
            - sourceTokenIdentifier
            - cryptoNetwork
          properties:
            type:
              type: string
              enum:
                - PROVIDER_INTERNAL_BALANCE
              description: >-
                Provider internal balance funding. Reserved for the follow-up
                provider-balance mint flow.
              example: PROVIDER_INTERNAL_BALANCE
            sourceTokenIdentifier:
              type: string
              description: >-
                Provider token/value type spent from the provider internal
                balance.
              example: USDC
            cryptoNetwork:
              type: string
              description: Source crypto network for the provider internal balance funds.
              example: SOLANA
          description: >-
            Provider internal balance funding source, reserved for future
            provider-funded mint flows.
    FieldConstraint:
      type: object
      description: >-
        Machine-readable validator hint accompanying a 400 `INVALID_INPUT`
        error. Consumers use it to drive form UI (input types, dropdowns,
        masking, length limits) and to pre-validate the field client-side before
        re-submitting. Fields are additive.
      properties:
        format:
          type: string
          description: >-
            Named format the value must satisfy — HTML5 input type names
            (`email`, `tel`, `url`, `date`, ...) or semantic slugs
            (`iso3166-1-alpha-2`, `bcp47-language-tag`, `us-ssn`, `e.164`).
          example: email
        pattern:
          type: string
          description: Regular expression the value must match (JavaScript-flavor).
          example: ^\d{5}(-\d{4})?$
        enum:
          type: array
          items:
            type: string
          description: Allowed values when the field is drawn from a fixed set.
          example:
            - SSN
            - ITIN
            - NON_US_TAX_ID
        minLength:
          type: integer
          description: Minimum length in characters.
          example: 1
        maxLength:
          type: integer
          description: Maximum length in characters.
          example: 500
    StablecoinMintFundingSourceBase:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - WIRE
            - ACH_DEBIT
            - SAME_DAY_ACH_DEBIT
            - GRID_INTERNAL_ACCOUNT
            - PROVIDER_INTERNAL_BALANCE
          description: >-
            Funding source variant. Grid internal account and provider internal
            balance funding are reserved for follow-up support.
          example: ACH_DEBIT
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: >-
        API token authentication using format `<api token id>:<api client
        secret>`
    AgentAuth:
      type: http
      scheme: bearer
      description: >-
        Bearer token authentication for agent-scoped endpoints. The token is the
        `accessToken` returned when redeeming a device code via `POST
        /agents/device-codes/{code}/redeem`. Agent credentials are user-scoped:
        all requests are automatically bound to the agent's associated customer
        and subject to the agent's policy.

````