Originating a stablecoin payout

Send stablecoins from one of your stablecoin Internal Accounts to an external wallet by creating a Payment Order with type: "stablecoin".

Example use cases:

  • Fund a neobank or exchange wallet
  • Send stablecoins to an international recipient

Before you send a stablecoin payout, make sure you have a stablecoin Internal Account and a Counterparty whose External Account holds the destination wallet address. The wallet's account_number_type determines the blockchain network the payment is routed on.

If your stablecoin Internal Account does not have funds yet, you can receive stablecoins directly from an external wallet, or see Stablecoin On-ramp to fund via fiat conversion.

Create the Payment Order

curl --request POST \
  -u ORGANIZATION_ID:API_KEY \
  --url https://app.moderntreasury.com/api/payment_orders \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "stablecoin",
    "amount": 100000,
    "direction": "credit",
    "currency": "USDC",
    "originating_account_id": "<STABLECOIN_INTERNAL_ACCOUNT_ID>",
    "receiving_account_id": "<RECEIVING_EXTERNAL_ACCOUNT_ID>"
  }'

amount uses the coin's smallest unit as an integer. For example, USDC uses 6 decimals, so 10000000 = 10.00 USDC.

Stablecoin wallet addresses are validated and screened before payment execution.

Stablecoin Payment Order Response

{
  "id": "c5f4009c-bdd6-4cc1-84b2-17974ac9e77a",
  "object": "payment_order",
  "type": "stablecoin",
  "amount": 100000,
  "direction": "credit",
  "currency": "USDC",
  "status": "approved",
  "effective_date": "2026-04-29",
  "priority": "normal",
  "originating_account_id": "<STABLECOIN_INTERNAL_ACCOUNT_ID>",
  "receiving_account_id": "<RECEIVING_EXTERNAL_ACCOUNT_ID>",
  "receiving_account_type": "external_account",
  "receiving_account": {
    "id": "<RECEIVING_EXTERNAL_ACCOUNT_ID>",
    "object": "external_account",
    "account_type": "other",
    "party_name": "Acme Payments",
    "account_details": [
      {
        "id": "ba9eb4d1-2423-4c05-a65b-e69ad78fe489",
        "object": "account_detail",
        "account_number": "0x1234567890abcdef1234567890abcdef12343f9a",
        "account_number_safe": "3f9a",
        "account_number_type": "ethereum_address"
      }
    ],
    "routing_details": []
  },
  "counterparty_id": "fb9d6c24-da0b-4b43-81ef-e84440d928c0",
  "description": null,
  "statement_descriptor": null,
  "remittance_information": null,
  "metadata": {},
  "transaction_ids": [],
  "created_at": "2026-04-29T15:30:00Z",
  "updated_at": "2026-04-29T15:30:00Z"
}

Track the payment

Subscribe to Payment Order webhooks to follow the payment through its lifecycle:

  • payment_order.completed — the transfer has settled on chain.
  • payment_order.processing(optional) the transfer is in flight on the network.

On-chain stablecoin transfers cannot be returned once settled.

For the full list of supported stablecoins and networks, see Stablecoins.

Blockchain Network Selection

When you send stablecoins, the blockchain network is determined by the account_number_type on the receiving counterparty's external account.

For example, if you create the counterparty with account_number_type: "ethereum_address", the payment is routed to an EVM-compatible network.

If you need a specific network, such as Base, Solana, or Polygon PoS, register the counterparty wallet address with the account_number_type for that chain. Your Modern Treasury account team can help configure network routing during onboarding.

For the full list of supported stablecoins and blockchain networks, see Stablecoins.