Skip to main content

Stablecoin sends

Send stablecoins from a customer-owned account (pcus_*account_id) with preview → confirm → poll.

Prerequisites

  1. Customers quickstart — vault approved / active
  2. Accounts — banking products.deposit_account.status=ready, resolve account_id
  3. Deposit instructions — fund the rail if you need inbound balance
Sandbox: self-serve deposits may not credit usable balance for outbound sends. Contact Element Pay for a sandbox credit if you need to exercise preview → confirm. Live: fund via deposit instructions (bank or on-chain) or corridor quote → accept where applicable, then send. On-chain credits usually need the correct network and about ~2.00 major units or more; wait for balance / account.credited before sending.

Auth and environments

Gate

Same banking gate as accounts. If send routes run before ready, the API returns 409 with message Deposit account is not ready. Response data includes deposit_account_status or, in some cases, reason: banking_profile_incomplete.

Happy path

1

Confirm account + balance

Use Accounts to list/get a stablecoin account_id with available balance
2

Preview

POST …/accounts/{account_id}/sends/previewpreview_token
3

Confirm

POST …/accounts/{account_id}/sends with preview_token + idempotency_key
4

Poll

GET …/accounts/{account_id}/sends/{send_id} until a terminal status (completed / failed, or your mapped equivalents). Prefer webhooks account.send.completed / account.send.failed when configured.

1. Resolve stablecoin account

Details: Accounts. Funding: Deposit instructions.

2. Preview

Preview and confirm must use the same account_id. The preview_token binds customer + account.
Save preview_token. For Stellar destinations, include memo when the recipient requires it.

Send headroom

Amount must be strictly below the account’s displayed available balance. Sending the full balance (for example 1.00 when available is 1.00) returns 422 with available, amount, and currency in data when known.

3. Confirm

Confirm is a live money movement on production.

4. Poll send

Prefer webhooks account.send.completed / account.send.failed when configured (Webhooks). Poll GET until a terminal status. If the source was debited but status stays non-terminal (for example long submitted) for an extended time, treat that as abnormal: keep polling, do not assume the destination credited, and escalate to Element Pay ops rather than retrying a second confirm.

Errors

Next