A Grid Global Account is powered by a self-custody embedded Spark wallet Grid provisions for your customer that holds a stablecoin or BTC balance and participates in the standard Grid payment flows. It behaves like any other internal account for incoming funds, but every outbound transfer must be authorized by the customer — a session signing key issued for their device signs each payment. In the API, a Global Account is an internal account withDocumentation Index
Fetch the complete documentation index at: https://ramps-sync-country-coverage-2026-05-29.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
type: "EMBEDDED_WALLET" that participates in the standard Grid customer, quote, transaction, and webhook flows.
Why a Grid Global Account?
- Self-custody. Grid never has unilateral access to move user funds, and neither do you. The customer’s device is the only party that can authorize a transaction.
- Stablecoin-denominated. Balances are held as stablecoins like Brale-issued USDB. Use the standard
/quotesAPI to convert in from fiat or out to any supported Grid bank-account rail (ACH, PIX, CLABE, UPI, IBAN, UMA, …). - Grid-native. You reuse the customer, internal-account, quote, transaction, and webhook primitives you already integrated for Payouts or P2P. The only thing that’s new is an auth + signing layer at the account.
- Built on Bitcoin. Global Accounts run on Spark, a Lightning-compatible Bitcoin L2 that supports instant, low-fee Bitcoin and Stablecoin transfers. You get the benefits of running on Bitcoin, the most neutral, decentralized, and secure network for money.
Payment flow
Grid Global Accounts ride on the same/quotes + /quotes/{id}/execute pattern as every other Grid payment. The only thing that’s different is that outbound transfers need a client signature.
- Incoming funds. Funding an account works like any other internal account. Create a quote with the Global Account as the
destination, execute it, and Grid converts the source currency into USDB and credits the account. No customer approval needed — incoming value is passive. - Outgoing funds. Withdrawals and transfers out require the customer to authorize them on their device. Grid returns a
payloadToSignin the quote’spaymentInstructions; the client signs those bytes with its session signing key and passes the base64 signature as theGrid-Wallet-Signatureheader on/quotes/{id}/execute. Only then does Grid release the funds.
Architecture
Three parties participate in every signed action:| Party | Role |
|---|---|
| Client | The customer’s device (browser, iOS app, or Android app). Generates the client key pair, runs WebAuthn, decrypts the session signing key, and signs outbound requests. |
| Integrator backend | Your server. Holds your Grid API credentials, brokers every call to Grid on behalf of the client, and issues WebAuthn challenges for initial passkey registration. |
| Grid | Verifies auth credentials, issues session signing keys (encrypted to the client’s public key), and enforces that every account action is authorized. |
Auth credentials, client keys, and session signing keys
Three distinct pieces of crypto collaborate to authorize actions on the Global Account (withdrawals, credential changes, session revocations, wallet exports, and wallet privacy updates):| Piece | Where it lives | How long it lives | What it proves |
|---|---|---|---|
| Auth credential — passkey, OIDC token, or email OTP | Registered on the account; the passkey itself lives on the authenticator, OIDC on your IdP, OTP in the user’s inbox | Until the customer revokes it | ”I am the human who owns this account.” Used to authenticate the user at the start of each session. |
| Client key pair (P-256) | Generated on the client device for each session-issuing or export request; private key stays in device-local secure storage | One authentication, session refresh, or wallet export | Binds a given session signing key or wallet export delivery to the exact device that asked for it — Grid encrypts the response to this public key, so only this device can decrypt. |
| Session signing key (P-256) | Issued by Grid, sealed to the client public key, decrypted and held on the device for the session’s lifetime | 15 minutes (default) | “This specific account action was approved on an authenticated device.” Builds Turnkey API-key stamps over the payloadToSign Grid returns on quotes, credential changes, session refresh/revocation, wallet exports, customer email updates, and wallet privacy updates. |
payloadToSign bytes on the client → pass that stamp as the Grid-Wallet-Signature header on the request that actually moves funds or changes account state. This applies to withdrawals, adding or removing credentials, refreshing or revoking sessions, exporting the wallet seed, updating customer email for tied email OTP credentials, and updating wallet privacy.
Prerequisites
You also need:- A platform configured with
USDBin its supported currencies. In sandbox, USDB is enabled by default alongsideUSDandUSDC. - Sandbox or production API credentials with access to the
Embedded Wallet AuthandInternal Accountsendpoints.
Walkthrough
The walkthrough below is the happy path: create a customer, find the auto-provisioned account and its default email OTP credential, fund it, and withdraw to a bank account. Each step shows the HTTP request your integrator backend makes on behalf of the client.1. Create a customer
Create the customer record. A Global Account is provisioned automatically whenever a customer is created on a platform that hasUSDB in its supported currencies — you don’t need to pass it on the customer.
201 Created with the new Customer:... id. In sandbox, the customer is KYC-approved immediately; in production you would now run them through the KYC / KYB flow before any funds can move.
2. Find the Global Account
When a customer is created on a USDB-enabled platform, Grid automatically provisions a Global Account alongside their other internal accounts. Fetch it by filtering the customer’s internal accounts bytype=EMBEDDED_WALLET.
InternalAccount:... id — every auth credential is scoped to it.
3. Find the default email OTP credential
Global Accounts are initialized with anEMAIL_OTP credential tied to the customer email on file. Fetch the auth methods for the account and keep the AuthMethod:... id for the signing step later in this walkthrough.
4. Fund the Account
Global Accounts behave like any other internal account on the way in — incoming funds do not need the customer’s signature. In sandbox, use the sandbox funding endpoint to skip straight to a funded state:amount is in the smallest unit of the account’s currency. USDB has 6 decimals, so 1000000000 is 1,000.00 USDB.
You will receive an INCOMING_PAYMENT webhook when the balance updates. The account now holds 1,000.00 USDB.
5. Add an external bank account
Add the destination the customer wants to withdraw to. This is a standard external account — nothing Global Account-specific.201 Created with the new ExternalAccount:... id.
6. Create a withdrawal quote
Create a quote with the Global Account as the source. Grid returns apayloadToSign in the quote’s payment instructions — this is what the client will sign to authorize the transfer.
lockedCurrencyAmount is in the smallest unit of the locked side’s currency. Here the sending currency is USDB (6 decimals), so 10000000 is 10.00 USDB.
Response:
7. Authenticate and sign
The customer has an outstanding quote with apayloadToSign. Now we need a session signing key to sign it with. The flow is keypair → OTP challenge → verify → decrypt → sign.
Your backend requests a fresh OTP
Ask Grid to send a fresh OTP email for the default Response (200):
EMAIL_OTP credential.Client enters the OTP and generates a key pair
The client generates a fresh P-256 client key pair and posts the public key plus the OTP value to your backend. Grid uses the public key to seal the session signing key to that device.
Your backend verifies the OTP with Grid to mint a session
encryptedSessionSigningKey and expiresAt to the client.Client decrypts the session signing key and stamps the payload
The client decrypts
encryptedSessionSigningKey with the matching client private key, then stamps the quote’s payloadToSign with the resulting session signing key. Return the full Turnkey API-key stamp to your backend./challenge + /verify round-trip.
8. Execute the quote
Call/execute with the stamp in the Grid-Wallet-Signature header.
OUTGOING_PAYMENT) as it settles — see Transaction lifecycle.
Where to next
Client keys & signing
Generate the P-256 key pair, decrypt the session signing key, and sign payloads on Web, iOS, and Android.
Authentication
OAuth and Email OTP flows, passkey reauthentication, and the full WebAuthn parameter mapping.
Sessions
List, refresh, and revoke active sessions.
Exporting a wallet
Let a customer take their wallet seed off Grid.