> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pulseshiga.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Onramp (buy crypto)

> The live engine-direct flow: quote, create an onramp order, show the virtual account, and track it to funded.

Onramp is the fiat-to-crypto direction: your user pays fiat into a virtual bank
account and Pulse delivers crypto to a destination address. This is the
**engine-direct** flow — driven from your backend with your `sk_` API key, and
**live today** (distinct from the preview embedded collection product).

<Steps>
  <Step title="Create a quote">
    Lock a price with `pulse.quotes.create(...)`, or preview one for display with
    `pulse.rates.preview(...)` (see [Preview a rate](/backend/preview-rate)). Quotes use
    the UPPERCASE `EngineNetwork` casing.
  </Step>

  <Step title="Create the onramp order">
    ```ts theme={null}
    const order = await pulse.onramp.create({
      quote_id: quote.id,
      customer_id: 'user_123',
      customer_name: 'Ada Lovelace',
      customer_email: 'ada@example.com',
      destination_address: '0xUserWalletAddress',
      // destination_tag: '...', // only for chains that require a memo/tag
    });
    ```
  </Step>

  <Step title="Show the virtual account">
    The order carries a virtual bank account in `order.account`. Display it so the user
    can transfer fiat:

    ```ts theme={null}
    const { account_name, account_number, bank_name, bank_code, amount, expires_at } =
      order.account;
    ```
  </Step>

  <Step title="Track it to completion">
    Poll `pulse.onramp.retrieve(order.id)` for status changes. The flow currently
    completes at the **funded** state — "transfer received".
  </Step>
</Steps>

<Warning>
  A few onramp fields are still settling against the published contract: for some
  providers `bank_name` / `bank_code` / `expires_at` are filled in by the SDK from a
  provider map rather than returned by the engine, and the onramp status set isn't in the
  published contract yet. Treat the status values as informational for now.
</Warning>

The embedded collection product also exposes an onramp direction (`direction: 'onramp'`
with a `pay_account` on the order), but that path is part of the preview surface.

<Info>
  This surface reflects the `@pulsebyshiga/node` types — the working view of the API
  until the canonical Pulse OpenAPI contract is published. Wire shapes
  (snake\_case JSON, decimal-string amounts) are stable; a few fields are still
  being reconciled and are flagged where they appear.
</Info>
