Skip to main content
Nuvion supports stablecoin transfers natively. You can issue a wallet address on any supported chain for an entity’s account, receive inbound stablecoin deposits, and send USDC or USDT to any external wallet address globally.

Supported networks

ChainNetworkAssets
ethEthereum MainnetUSDC, USDT
baseBaseUSDC, USDT
maticPolygonUSDC, USDT
solSolana MainnetUSDC, USDT
Nuvion uses USC as the currency code for USDC and UST for USDT. Use these codes when initiating transfers.

Step 1: Issue a wallet

Issue a stablecoin wallet address by creating account details with asset_type: stablecoin on an existing account. Each account can hold one wallet per chain.
curl -X POST https://api.nuvion.dev/account-details \
  -H "Authorization: Bearer $NUVION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "acc_01HXYZ5678EFGH",
    "asset_type": "stablecoin",
    "chain": "eth"
  }'
account_id
string
required
The ID of the account to issue the wallet for.
asset_type
string
required
Set to stablecoin.
chain
string
required
The blockchain to provision the wallet address on. One of eth, base, matic, sol.
terminate_after
number
Number of days after which the wallet address expires. Omit for a permanent wallet.
{
  "id": "acd_01HXYZ9012MNOP",
  "entity_id": "ent_01HXYZ1234ABCD",
  "account_id": "acc_01HXYZ5678EFGH",
  "asset_type": "stablecoin",
  "chain": "eth",
  "account_number": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F",
  "supported_assets": ["USDC", "USDT"],
  "issuer": {
    "name": "Ethereum Mainnet",
    "code": "ETH_MAINNET"
  },
  "status": "pending",
  "created": 1735725600000,
  "updated": 1735725600000
}
The wallet is created with status: pending while the address is being provisioned on-chain. Listen for the account_details.created webhook event to confirm the wallet is ready.

Step 2: Send stablecoins

Sending stablecoins is a two-step process: first create a counterparty for the recipient wallet, then initiate a transfer.

Create a counterparty

A counterparty represents the external wallet you’re sending funds to. Create one using POST /recipient-counterparties.
curl -X POST https://api.nuvion.dev/recipient-counterparties \
  -H "Authorization: Bearer $NUVION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "individual",
    "entity_relationship": "customer",
    "name": "Alice Johnson",
    "email": "alice.johnson@example.com",
    "address": {
      "line_1": "350 Fifth Avenue",
      "city": "New York",
      "state": "NY",
      "postal_code": "10001",
      "country_code": "US"
    },
    "account_details": {
      "issuer": {
        "code": "ETH_MAINNET",
        "name": "ETH_MAINNET"
      },
      "account_number": "0x13cb41cAED32dc0676832be1EB83eC500358C882"
    }
  }'
type
string
required
The counterparty type. One of individual or business.
entity_relationship
string
required
Describes the relationship to your platform. e.g. customer, vendor, supplier.
name
string
required
Full name of the recipient.
email
string
required
Email address of the recipient.
address
object
required
The recipient’s physical address.
account_details.issuer.code
string
required
The network the recipient wallet is on. One of ETH_MAINNET, SOLANA_MAINNET, BASE_MAINNET, POLYGON_MAINNET.
account_details.account_number
string
required
The recipient’s wallet address.
{
  "id": "cpt_01KCKKPJYCRGCETKPNQ4VEV92K",
  "entity_id": "ent_01HXYZ1234ABCD",
  "type": "individual",
  "entity_relationship": "customer",
  "name": "Alice Johnson",
  "email": "alice.johnson@example.com",
  "address": {
    "line_1": "350 Fifth Avenue",
    "city": "New York",
    "state": "NY",
    "postal_code": "10001",
    "country_code": "US"
  },
  "account_details": {
    "issuer": {
      "id": "694156dc5a9fadcbf04bc98f"
    },
    "account_number": "0x13cb41cAED32dc0676832be1EB83eC500358C882"
  },
  "created": 1735725600000,
  "updated": 1735725600000
}

Initiate the transfer

Once you have a counterparty, use POST /transfers to send stablecoins.
curl -X POST https://api.nuvion.dev/transfers \
  -H "Authorization: Bearer $NUVION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "acc_01HXYZ5678EFGH",
    "counterparty_id": "cpt_01KCKKPJYCRGCETKPNQ4VEV92K",
    "currency": "USC",
    "amount": 10000,
    "payment_type": "stablecoin-transfer",
    "narration": "Payment for design services",
    "unique_reference": "STABLE-2025-001"
  }'
account_id
string
required
The ID of the source account to debit.
counterparty_id
string
required
The ID of the recipient counterparty.
currency
string
required
The stablecoin to send. USC for USDC, UST for USDT.
amount
number
required
Amount in the smallest currency unit. 10000 = 100.00 USDC.
payment_type
string
required
Set to stablecoin-transfer.
narration
string
required
A description of the transfer.
unique_reference
string
required
A unique idempotency key for this transfer. Resubmitting with the same reference returns the original transfer rather than creating a duplicate.
{
  "id": "txf_01KCKNK76B401XBG286FTCMJSH",
  "account_id": "acc_01HXYZ5678EFGH",
  "entity_id": "ent_01HXYZ1234ABCD",
  "counterparty_id": "cpt_01KCKKPJYCRGCETKPNQ4VEV92K",
  "type": "outflow",
  "payment_type": "stablecoin-transfer",
  "currency": "USC",
  "amount": 10000,
  "applicable_fee": 2,
  "status": "pending",
  "status_reason": "awaiting_processing",
  "narration": "Payment for design services",
  "unique_reference": "STABLE-2025-001",
  "meta": {
    "payment_order_id": "01KCKNK779M261FRH7Y93JWS0B"
  },
  "created": 1735725600000,
  "updated": 1735725600000
}

Transfer statuses

StatusDescription
pendingTransfer created, awaiting processing
processingSubmitted to the blockchain, awaiting on-chain confirmation
completedConfirmed on-chain. Funds have arrived in the recipient wallet
failedTransfer could not be completed
reversedTransfer was reversed after completion

Webhooks

Subscribe to these events to track wallet provisioning and transfer lifecycle:
EventTrigger
account_details.createdA stablecoin wallet address has been provisioned
account_details.updatedA wallet’s status or configuration has changed
transfers.updatedA transfer’s status has changed

What’s next

Account Details

Learn how fiat and stablecoin account details are structured and managed.

Send a payout

Send fiat funds from an account to any bank account globally.

Transfers API reference

Full endpoint documentation for initiating and managing transfers.