Features
This page lists every feature of OpenRampKit, with a link to its documentation. For how the parts fit together, read Architecture. For the step-by-step flows, read Flows.
Deposits
| Feature | What it does | Read more |
|---|---|---|
| Crypto destination | The money ends as a token on a chain, at an address that your backend sets | Sessions, Pathways |
| Merchant destination | The money ends in your own fiat account at a payment provider (Xendit). No crypto. | Merchant fiat destination |
| On-chain settlement | The payment goes through OpenRampSettlement. The chain records the session id. | On-chain settlement, flow |
| Destination calls | Contract calls after delivery, in the same transaction (for example a vault deposit) | Destination calls |
| Signed settlement intents | Your server signs an EIP-712 intent. The payer cannot change the recipient, token or calls. | Signed intents |
| Fiat onramps | Card, bank and local methods at Coinbase, Transak, MoonPay, Stripe, Swapped, Meld, Onramper | Adapters, flow |
| Local QR and e-wallets | QRIS, QR Ph, PromptPay, PayNow, VietQR, GCash, MoMo and more | Xendit, Swapped, flow |
| Crypto transfer | The user sends crypto from any wallet or exchange to a deposit address | Relay, flow |
| Wallet payment | The user pays from a connected EVM or Solana wallet. Relay bridges or swaps when needed. | Wallets (wagmi), Solana, flow |
| Two-leg pathways | An onramp buys a hop asset, then a Relay bridge moves it to the destination | Hops, flow |
| Peer-to-peer onramp | Fiat to crypto through Peer | Peer |
Withdrawals
| Feature | What it does | Read more |
|---|---|---|
| To wallet | The user sends the source asset to an address on a network they pick | To wallet |
| To cash | The user gets fiat in their own bank or e-wallet account | To cash |
| User custody | The user's wallet signs the transaction (custody: 'user_wallet') | Custody |
| App custody | Your treasury hook sends the transaction (custody: 'app'), once per step | custody: 'app' |
| Allowed targets | Limit the chains or currencies that a user can pick | Allowed targets |
| Address screening | Your screenAddress hook refuses an address. An error also refuses it. | Screen addresses |
| Withdraw events | The same session.* events as a deposit. data.object.session.direction is withdraw. | Events |
See the withdraw flow.
Planning and quotes
| Feature | What it does | Read more |
|---|---|---|
| Pathway planner | A pure function builds every one-leg and two-leg pathway to the destination | The planner algorithm |
| Method groups | Methods show as Connected, Most popular, Other options and Not available | Grouping |
| Country rules | Region policy per leg, local methods first per country | Method country rules |
| Global payment methods | SEPA Instant, Faster Payments, pay by bank, iDEAL, Bancontact, BLIK, SPEI, PSE, Khipu, Interac, IMPS, PayID, M-Pesa and mobile money, next to cards, Apple Pay, Google Pay, ACH, Pix and UPI | Payment methods |
| Policy | maxLegs, regions, methodPriority, disabledMethods, hopPreference | createOpenRamp |
| Per-session method list | allowedMethods hides and blocks other methods | Sessions |
| Amount bounds | A min and a max per session, enforced on quotes and on select | Amount bounds |
| Live catalogs | An adapter can refine its legs per user (methods, limits, assets) | Writing an adapter |
| Parallel quotes | Up to 5 pathways per method, each with a timeout. Failures are fields, not exceptions. | Quoting |
| Ranking | Best price and fastest badges | Quoting |
| Exact output | Quote the amount that arrives (amountSide: 'destination') on one-leg pathways | POST /sessions/:id/quotes |
Flow and UI
| Feature | What it does | Read more |
|---|---|---|
| Server-driven steps | The server sends a Step. The modal renders it. A new provider needs no UI release. | Flow state machine |
| Ten surfaces | REDIRECT, IFRAME, PROVIDER_SDK, QR, DEEPLINK, BANK_FIELDS, DEPOSIT_ADDRESS, WALLET_TX, OTP, FORM | Surfaces |
| Popup-safe start URLs | Provider checkouts open from a signed URL on your origin | Popup-safe start URLs |
| Iframe message protocol | Provider pages can signal completion. The modal checks origin and source. | Iframe flow, IFRAME |
| Provider SDK renderers | Mount a provider's own UI, for example the Stripe onramp element, or drive a headless flow (Stripe Link) | PROVIDER_SDK, Stripe, Stripe Link |
| Restart | "Choose another method" leaves a payment that waits for the user | Transitions |
| Errors as fields | OpenRampError with a code, a safe message and a recovery hint | Errors as fields |
| Web component | <openramp-modal> in Shadow DOM, for any framework or none | Web component, @openrampkit/web |
| Embedded mode | Render the widget inline in your page | Embedded mode |
| Framework wrappers | React, Vue, Svelte and Solid | React, Vue, Svelte, Solid |
| Headless controller | Drive DepositController with your own UI | @openrampkit/client, Custom UIs |
| Themes | Light, dark and auto themes, appearance options, CSS variables and parts | Theming |
| Languages | English, Vietnamese, Indonesian, Thai, Malay and Filipino. English unless the app sets a locale. | Languages |
| History | The user's past deposits and withdrawals in the widget, with status and explorer links (server option history) | History |
| Browser events | modal.opened, method.selected, quote.selected, step.changed and more, for analytics | Browser events |
Wallets and chains
| Feature | What it does | Read more |
|---|---|---|
| EVM wallets | wagmiWallet() sends transactions and reads balances | Wallets (wagmi) |
| Solana wallets | solanaWallet() over Wallet Standard | Solana |
| Several wallets | combineWallets() joins an EVM and a Solana wallet | Solana |
| Solana destinations | Deposits to SOL and SPL tokens | Send deposits to Solana |
| Tempo | Chain and token support for Tempo | Tempo |
| On-chain verification | Same-chain payments are checked on chain before a leg counts | Security |
Server
| Feature | What it does | Read more |
|---|---|---|
| One web-standard handler | Request to Response. Runs on Workers, Vercel, Node, Bun and Deno. | @openrampkit/server, HTTP routes |
| Sessions and client secrets | The backend fixes user and destination. The browser gets a scoped secret. | Sessions and security, flow |
| Browser-created sessions | Optional POST /sessions through your authorize hook | Browser-created sessions |
| Provider webhooks in | POST /webhooks/:adapterId, verified by the adapter | Provider webhooks |
| Signed webhooks out | HMAC-signed events to your backend, with an outbox and retries | Webhooks to your backend, flow |
| Background sweep | Retries webhooks, refreshes payments, expires sessions | Background sweep, flow |
| Pay links | A signed, expiring page where a person pays one session | POST /sessions/:id/pay-link, GET /pay/:credential |
| Idempotency | Idempotency-Key on select and transitions | Idempotency |
| Rate limits | Provider calls per session per minute | Limits |
| Health checks | GET /health, and a deep check with the tasks token | GET /health |
| CORS | Allow other origins to call the handler | CORS |
| Session stores | Durable Objects, Redis, Cloudflare KV, memory, or your own | Session stores |
| Test and live mode | livemode on sessions and events | Events |
Agents
| Feature | What it does | Read more |
|---|---|---|
| MCP server | Tools for an AI agent: list_payment_methods, get_quotes, create_deposit_session, create_withdraw_session, get_session_status, wait_for_completion | Agents (MCP) |
| Guardrails | Allowed destinations and amount caps that the agent cannot change | Guardrails |
| Transports | stdio (Claude Desktop, Claude Code) and Streamable HTTP | Connect an agent |
See the agent flow.
Adapters and testing
| Feature | What it does | Read more |
|---|---|---|
| 14 provider adapters and a mock | Relay, LI.FI, Swapped, Xendit, Coinbase, Transak, MoonPay, Stripe, Stripe Link, Meld, Onramper, Bridge, Binance, Peer, Mock | Adapters |
createAdapter() | Write an adapter for any provider | Writing an adapter, @openrampkit/adapter |
| Conformance kit | runAdapterConformance() checks an adapter's shape, quotes, steps and webhooks | @openrampkit/adapter |
| Mock adapter and mock wallet | Test every flow with no provider account | Testing with mocks |
| Anvil test | A real local chain test for wallet payments | Real-chain test with Anvil |
| Examples | Next.js, Cloudflare Worker, static playground, agent | Examples, Live demo |