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

# Get an Onramp Quote

> Estimate the stablecoin amount and fees before placing an onramp order

Use a draft quote to show users what to expect before they buy stablecoins with a card. For example, enter 100 USD to see roughly how much USDC the user receives after fees.

Crossmint does not store a draft, and a draft cannot be paid or turned into an order. A draft also starts no identity verification. Display the quote, then discard the response. When the user proceeds, create a new order.

## Request a Quote

Call [Create Order](/onramp/api-reference/create-order) with `state: "draft"`. The rest of the body is the same as a real order. The code sample buys USDC on Base Sepolia with exactly 100 USD.

```bash cURL {5} theme={null}
curl -X POST 'https://staging.crossmint.com/api/2022-06-09/orders' \
  -H 'X-API-KEY: <YOUR_SERVER_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "state": "draft",
    "recipient": {
      "walletAddress": "<USER_WALLET_ADDRESS>"
    },
    "payment": {
      "method": "card",
      "receiptEmail": "alice@example.com"
    },
    "lineItems": [
      {
        "tokenLocator": "base-sepolia:0x036CbD53842c5426634e7929541eC2318f3dCF7e",
        "executionParameters": {
          "mode": "exact-in",
          "amount": "100"
        }
      }
    ]
  }'
```

## Read the Quote

The user is charged 100 USD in total and receives between 96.50 and 97.50 USDC (`quantityRange`). Part of the fee depends on the card the user pays with, so a draft returns a range rather than an exact amount and does not break fees down. The amounts are illustrative.

```json Draft response (excerpt) {21,24-27,46} theme={null}
{
  "order": {
    "orderId": "<ORDER_ID>",
    "phase": "payment",
    "lineItems": [
      {
        "chain": "base-sepolia",
        "metadata": {
          "name": "USDC",
          "description": "USDC Token"
        },
        "quote": {
          "status": "valid",
          "charges": {
            "unit": {
              "amount": "1",
              "currency": "usd"
            }
          },
          "totalPrice": {
            "amount": "100",
            "currency": "usd"
          },
          "quantityRange": {
            "lowerBound": "96.500000",
            "upperBound": "97.500000"
          }
        },
        "delivery": {
          "status": "awaiting-payment",
          "recipient": {
            "locator": "base-sepolia:<USER_WALLET_ADDRESS>",
            "walletAddress": "<USER_WALLET_ADDRESS>"
          }
        },
        "executionMode": "exact-in",
        "executionParams": {
          "mode": "exact-in",
          "amount": "100"
        }
      }
    ],
    "quote": {
      "status": "valid",
      "quotedAt": "2026-09-22T12:55:01.803Z",
      "expiresAt": "2026-09-22T13:25:01.803Z",
      "totalPrice": {
        "amount": "100",
        "currency": "usd"
      }
    }
  }
}
```

## Display the Quote

Use these fields to build the quote summary:

| Field                                          | Show the user                                                       |
| ---------------------------------------------- | ------------------------------------------------------------------- |
| `quote.totalPrice.amount`                      | Fiat charged to the card, all fees included                         |
| `lineItems[0].quote.quantityRange`             | Lowest and highest stablecoin amount the user can expect to receive |
| `lineItems[0].quote.charges.unit.amount`       | Fiat price of one unit of the stablecoin                            |
| `lineItems[0].quote.charges.gas.amount`        | Gas paid on the destination chain, when applicable                  |
| `lineItems[0].quote.charges.networkFee.amount` | Network fee such as Solana account creation, when applicable        |
| `quote.expiresAt`                              | When the quoted price stops being valid                             |

`gas` and `networkFee` only appear when they are not zero. Once the user enters card details on the real order, the quote resolves to an exact amount: `quantityRange` collapses to a single value and `charges.crossmintFees` lists the Crossmint fee included in the total.

## Place the Order

Once the user is ready to continue, discard the draft and send the request again without `state: "draft"`. The draft was only a preview and cannot be reused.

The new order includes a fresh quote and a `clientSecret` for the embedded checkout. If the amounts have changed, show the updated quote to the user before continuing.

## Next Steps

<CardGroup cols={2}>
  <Card title="React Quickstart" icon="bolt" href="/onramp/quickstarts/react">
    Create the order and render the checkout
  </Card>

  <Card title="Create Order API" icon="code" href="/onramp/api-reference/create-order">
    Every request and response field
  </Card>
</CardGroup>
