Quickstart
Quickstart · Web custodial cash-out
Omnibus hot-wallet cash-out: customerIdentifier sessions, deposit address, and server-side USDC transfer.
~15 minCustodialUSDC
Quickstart · Web custodial cash-out (Solana / USDC)
Time: about 15 minutes · Success: sandbox widget returns a deposit address; your server transfers USDC from the omnibus wallet and the flow reaches a reference number.
- Request access for sandbox API keys or Sign in if you already have a partner account
- Sandbox keys + allowlisted domain from the partner portal
- Omnibus / hot wallet funded with devnet USDC
- Confirmed you are custodial (you move customer USDC; users do not sign)
Wrong track? User-owned wallets → Web non-custodial Quickstart.
Server-side only:
TypeScript
const res = await fetch('https://playground.xramps.moneygram.com/api/v1/sessions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.RAMPS_SECRET_KEY!, }, body: JSON.stringify({ customerIdentifier: 'stable-customer-id-in-your-system', // off-ramp / cash-out only for this guide }),})const session = await res.json()
Load the SDK via script tag (it is not published to npm):
HTML
<script src="https://playground.xramps.moneygram.com/sdk/index.global.js"></script>TypeScript
const { createRamps } = window.RampsSDK const ramps = createRamps({ container: document.getElementById('ramps-widget'), sessionToken: session.sessionToken, widgetUrl: session.widgetUrl, // off-ramp wallet: { address: omnibusWalletAddress, chain: 'solana', asset: 'USDC', walletType: 'custodial', }, onDepositAddress: async () => { // Your backend re-reads the destination and amount from the Ramps API, // transfers USDC from the hot wallet, and returns the transaction hash. const res = await fetch('/api/internal-transfer', { method: 'POST' }) if (!res.ok) throw new Error('Transfer failed') const { txHash } = await res.json() return txHash // required: a bare string; the widget polls using this hash }, onComplete: (result) => console.log(result.referenceNumber), onError: console.error,}) ramps.open()
Exact callback names and payload fields: see the full custodial guide.
- Session created with a stable
customerIdentifier - Widget reaches deposit-address step
- Hot-wallet transfer confirms on Solana
- Widget surfaces a sandbox reference number