Skip to main content
USD onramp lets your users convert USD into stablecoin, pulled directly from a Plaid-linked bank account. Every onramp flow follows the same four steps: Create User β†’ KYC β†’ Bank Account Linkage β†’ Transaction.
Both USDT and USDC are supported for USD onramp.
1

Create User

Response:
Save user_id β€” every subsequent call needs it as the X-User-Id header.
2

KYC

USD supports only the KYC Partner URL method β€” there is no KYC Widget or KYC Sharing option for USD. The user must submit US ID documents only.
Request a Partner KYC URL:
Headers: X-User-Id: <user_id>This call is asynchronous. The first response may come back pending:
Poll the same endpoint again after a few seconds until the status becomes ACTIVE, at which point the response includes the KYC URL:
Redirect the user to url to complete identity verification. See Partner URL for the full reference.To return the user to your app afterwards, append redirect-uri as the last query parameter on the returned Persona URL:
3

Bank Account Linkage

USD bank accounts are linked through Plaid, using the Bank Account Widget:
The URL is valid for 10 minutes from generation. The user selects and authorizes their bank account via Plaid on this page.To return the user to your app once they exit the Plaid flow, append redirect_url as the last query parameter:
Once the user adds their bank account and it’s successfully linked and approved, the client can fetch the list of approved bank accounts:
A user can have up to 10 active bank accounts at any point in time.
See Bank Account β€” Through Hosted Widget for setup details.
4

Transaction

Two variants:
  • Pool Buy β€” collected funds are converted to stablecoin and deposited into the pool wallet on the Saber system.
  • External Buy β€” collected funds are converted to stablecoin and sent to a specified wallet address on a given network.
The flow is identical for both β€” the only difference is that External Buy requires wallet_address and network in the request. See Available Networks and Tokens for supported networks and per-network limits.
The request body must also include source_id β€” the ID of the linked, approved bank account funds should be pulled from.
Two kinds of quotes are available β€” a Live Quote (informational, executes at market rate) or a Locked Quote (rate held ~30-60s, supplied as quote_id in the buy request):Live quote:
Locked quote:
Save id from the locked-quote response as quote_id.
quote_id is only required when using a Locked Quote β€” omit it when using a Live Quote.

Checking status

Status values mirror the offramp equivalents (CREATED, PROCESSING, COMPLETED, FAILED, CANCELLED, REFUND_INITIATED, REFUND_COMPLETED, etc.). Poll until the status reaches a terminal state, or configure a webhook URL to receive completion pushes instead β€” see Order Lifecycle and Webhooks.

User limits and EDD

SSN is optional at KYC time, so limits are tiered based on whether an SSN was submitted:
There is no EDD widget for USD. For higher limits, the client requests an EDD link via the same async Partner URL pattern as KYC (POST β†’ poll until status: ACTIVE β†’ receive url):
  • If an SSN was already submitted at KYC, the user is taken directly to a broader questionnaire with a Persona link, where they upload the relevant supporting documents.
  • If no SSN was submitted, the first EDD pass collects the SSN; the second pass then runs the actual EDD process (questionnaire and document upload).

Onramp Operations

User KYC β€” Partner URL

Bank Account β€” Hosted Widget

User Limits and EDD