> ## Documentation Index
> Fetch the complete documentation index at: https://ramps-09-17-encode-card-status-field-dependency.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Global Accounts

> Give your customers a branded, self-custodial multi-currency account powered by Grid.

export const FeatureCardGrid = ({cols = 3, children}) => <div className={`not-prose feature-cards-grid feature-cards-cols-${cols}`}>
    {children}
  </div>;

export const FeatureCard = ({icon, title, children, href, linkHref, linkText, color, tag, tagPosition, layout, variant, iconSize}) => {
  const isHorizontal = layout === 'horizontal';
  const isFlat = variant === 'flat';
  const isLargeIcon = iconSize === 'lg';
  const isInlineTag = tagPosition === 'inline';
  const className = ['feature-card', href && 'feature-card-link', !icon && 'feature-card-no-icon', isHorizontal && 'feature-card-horizontal', isFlat && 'feature-card-flat', isLargeIcon && 'feature-card-icon-lg'].filter(Boolean).join(' ');
  const card = <div className={className}>
      {icon && <div className="feature-card-icon-wrapper">
          {color ? <div className="feature-card-icon" style={{
    WebkitMaskImage: `url(${icon})`,
    maskImage: `url(${icon})`,
    backgroundColor: color,
    width: '24px',
    height: '24px',
    WebkitMaskSize: 'contain',
    maskSize: 'contain',
    WebkitMaskRepeat: 'no-repeat',
    maskRepeat: 'no-repeat'
  }} /> : <img src={icon} alt="" className="feature-card-icon" />}
        </div>}
      <div className="feature-card-content">
        {isInlineTag ? <div className="feature-card-title-row">
            <span className="feature-card-title">{title}</span>
            {tag && <span className="feature-card-tag">{tag}</span>}
          </div> : <div className="feature-card-title">{title}</div>}
        <div className="feature-card-desc">{children}</div>
        {tag && !isInlineTag && <div className="feature-card-tag-row"><span className="feature-card-tag">{tag}</span></div>}
        {linkText && <div className="feature-card-link-row">
            {linkHref ? <a href={linkHref} className="feature-card-text-link" style={{
    color: color
  }}>
                {linkText}
              </a> : <span className="feature-card-text-link feature-card-coming-soon" style={{
    color: color,
    opacity: 0.6
  }}>
                {linkText}
              </span>}
          </div>}
      </div>
    </div>;
  return href ? <a href={href} className="feature-card-anchor">{card}</a> : card;
};

<img src="https://mintcdn.com/ramps-09-17-encode-card-status-field-dependency/F78wz4uwl-zr9Rx-/images/heroes/hero-gga.webp?fit=max&auto=format&n=F78wz4uwl-zr9Rx-&q=85&s=cab381400b0c12d467ef9c9112dc142c" alt="Global Accounts hero" className="page-hero" width="1856" height="800" data-path="images/heroes/hero-gga.webp" />

A Global Account is what we consider a programmable, self-custodial account for holding and moving money. Under the hood, it is an embedded [Spark](https://spark.money) wallet that Lightspark provisions for your customer. It can hold different stablecoins, including those denominated in local currencies, as well as other digital assets such as Bitcoin.

In the API, a Global Account is an internal account with `type: "EMBEDDED_WALLET"`. It uses the same customer, quote, transaction, and webhook primitives as other accounts. Receiving funds works the same way, too. To move money out, the customer must authorize the transfer on their device, which signs the payment with a session signing key.

## Why a Global Account?

* **Self-custodial.** Neither Lightspark nor your platform can move funds unilaterally. Outbound transfers require authorization from the customer's device.
* **Stablecoin-denominated.** Balances can be held in stablecoins like [Brale-issued USDB](https://brale.xyz/stablecoins/USDB). You can also issue your own stablecoin and [request enablement in Grid](/api-reference/stablecoins/request-grid-enablement-for-a-stablecoin). Use the `/quotes` API to convert from fiat or withdraw through supported payment rails.
* **Native.** Reuse the customer, internal-account, quote, transaction, and webhook primitives you already use for payouts or P2P. Global Accounts add authentication and signing at the account level.

## Payment flow

Global Accounts use the same `/quotes` and `/quotes/{id}/execute` pattern as other payments. Outbound transfers also require 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. Incoming funds do not require customer approval.
* **Outgoing funds.** Withdrawals and transfers out require the customer to authorize them on their device. Grid returns a `payloadToSign` in the quote's `paymentInstructions`; the client signs those bytes with its session signing key and passes the base64 signature as the `Grid-Wallet-Signature` header on `/quotes/{id}/execute`. Only then does Grid release the funds.

Sessions are short-lived (15 minutes by default) and bound to a specific device via the client key pair, so a stolen signature can't be replayed from a different device or after the session expires. Standard transaction webhooks fire throughout the lifecycle. See [Transaction lifecycle](/platform-overview/core-concepts/transaction-lifecycle).

## 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.                   |

The client **never** talks to Grid directly. Every request flows client → integrator backend → Grid.

## 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 Grid wallet signatures over the `payloadToSign` Grid returns on quotes, credential changes, session refresh/revocation, wallet exports, customer email updates, and wallet privacy updates. |

The flow is always the same: verify an auth credential → receive a short-lived session signing key → build a Grid wallet signature over the `payloadToSign` bytes on the client → pass that signature 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.

## Core capabilities

<FeatureCardGrid cols={3}>
  <FeatureCard icon="/images/icons/wallet1.svg" title="Branded dollar accounts">
    Give each customer a branded account experience backed by Grid account infrastructure.
  </FeatureCard>

  <FeatureCard icon="/images/icons/coins.svg" title="Stablecoin balances">
    Hold dollar-denominated value and use Grid quotes to move between account balances and supported rails.
  </FeatureCard>

  <FeatureCard icon="/images/icons/globe.svg" title="Local off-ramps">
    Let customers move value to supported local bank rails, including corridors such as PIX, UPI, SEPA, FPS, and more.
  </FeatureCard>

  <FeatureCard icon="/images/icons/shield.svg" title="Self-custodial authorization">
    Require customer approval for outbound account actions. Grid and your platform cannot unilaterally move customer funds.
  </FeatureCard>

  <FeatureCard icon="/images/icons/bitcoin.svg" title="Built on Spark">
    Use Spark, a Lightning-compatible Bitcoin L2, to support Bitcoin and stablecoin flows where enabled for your platform.
  </FeatureCard>

  <FeatureCard icon="/images/icons/bell.svg" title="Webhooks and reconciliation">
    Track funding, withdrawals, and settlement status with standard Grid account and transaction webhooks.
  </FeatureCard>
</FeatureCardGrid>

## Additional capabilities

Some Global Accounts capabilities require platform enablement before you can build with them. [Book a demo](https://www.lightspark.com/contact) to see how they fit your platform.

<FeatureCardGrid cols={3}>
  <FeatureCard icon="/images/icons/credit-card1.svg" title="Card programs">
    Issue cards tied to Global Account balances where enabled for your platform.
  </FeatureCard>

  <FeatureCard icon="/images/icons/agent.svg" title="Agentic payments">
    Support bounded account access for AI agents with policy-controlled movement.
  </FeatureCard>

  <FeatureCard icon="/images/icons/IconSquareChecklistMagnifyingGlass.svg" title="Advanced account controls">
    Configure limits, permissions, and controls for more complex account programs.
  </FeatureCard>
</FeatureCardGrid>

## Where to next

<CardGroup cols={2}>
  <Card title="Implementation overview" href="/global-accounts/implementation-overview" icon="rocket">
    End-to-end walkthrough: create a customer, register a passkey, fund the account, and execute a signed withdrawal.
  </Card>

  <Card title="Agents (experimental)" href="/global-accounts/agents/overview" icon="bot">
    Native Grid support for connected AI agents, managed permissions, and partner approval surfaces.
  </Card>

  <Card title="Authentication" href="/global-accounts/authentication" icon="shield-check">
    Passkey, OAuth (OIDC), and email OTP registration and reauthentication flows.
  </Card>

  <Card title="Client keys & signing" href="/global-accounts/client-keys" icon="key">
    Generate the P-256 key pair, decrypt the session signing key, and sign payloads on Web, iOS, and Android.
  </Card>

  <Card title="Sandbox testing" href="/global-accounts/platform-tools/sandbox-testing" icon="hammer">
    Magic values for OTP and signatures, plus sandbox OIDC token rules that exercise the full request shape without standing up real auth providers.
  </Card>
</CardGroup>
