Stablecoin sends
Send stablecoins from a customer-owned account (pcus_* → account_id) with preview → confirm → poll.
Prerequisites
- Customers quickstart — vault
approved/active - Accounts — banking
products.deposit_account.status=ready, resolveaccount_id - Deposit instructions — fund the rail if you need inbound balance
Auth and environments
Gate
Same banking gate as accounts. If send routes run beforeready, 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 balance2
Preview
POST …/accounts/{account_id}/sends/preview → preview_token3
Confirm
POST …/accounts/{account_id}/sends with preview_token + idempotency_key4
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
2. Preview
Preview and confirm must use the sameaccount_id. The preview_token binds customer + account.
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 example1.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
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.