---
title: "Create Onramp Intent"
method: POST
path: "/onramp/intents"
tags: ["onramp"]
---

# Create Onramp Intent

`POST /onramp/intents`

## Request

- Base URL: `https://api.coinvoyage.io/v3`
- URL: `https://api.coinvoyage.io/v3/onramp/intents`
- Auth: API key in header `X-API-KEY`
- TypeScript: <https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3/docs/onramp/intents/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a reusable onramp intent. For Orders, amount, destination currency, and wallet fields are derived server-side from the Order and cannot be overridden by the client.

## Headers

- `X-API-KEY` string, required

## Request body

- OnrampIntentRequest
  - `order_id` string: CoinVoyage Order ID. When set, amount, currency, and wallet fields are derived server-side and must not be included.
  - `destination_amount` string: Crypto destination amount for a standalone onramp intent. Mutually exclusive with source_amount.
  - `destination_currency` CurrencyBase, required
    - `address` string, nullable
    - `chain_id` 1 | 10 | 56 | 137 | 4663 | 8453 | 42161 | 20000000000001 | 20000000000002 | 30000000000001 | 30000000000002, required
  - `source_amount` string: Fiat source amount for a standalone onramp intent. Mutually exclusive with destination_amount.
  - `source_currency` 'usd' | 'eur': Fiat source currency for Stripe embedded onramp intents
  - `wallet_address` string

## Response `201`

Onramp intent created

- OnrampIntentResponse
  - `id` string, required
  - `order_id` string
  - `session_id` string
  - `status` 'requires_link_auth' | 'requires_kyc' | 'requires_identity_verification' | 'requires_document_verification' | 'identity_verification_pending' | 'session_created', required
  - `source_amount` string
  - `source_currency` 'usd' | 'eur', required: Fiat source currency for Stripe embedded onramp intents
  - `stripe_publishable_key` string, required
  - `destination_amount` string
  - `destination_currency` CurrencyBase, required
    - `address` string, nullable
    - `chain_id` 1 | 10 | 56 | 137 | 4663 | 8453 | 42161 | 20000000000001 | 20000000000002 | 30000000000001 | 30000000000002, required
  - `wallet_address` string, required
  - `expires_at` string, date-time, required

## Other responses

- `401`: Unauthorized
- `403`: Card payments are not enabled
- `404`: Order not found
- `422`: Invalid request body or unsupported onramp destination
- `500`: Failed to create Stripe onramp intent

## Changes

- **2026-10-13** `9b0a781499e3`: 1 warning, 1 info
  - added the new `20000000000002.00` enum value to the `destination_currency/chain_id` response property for the response status `201`
  - added the new `20000000000002.00` enum value to the request property `destination_currency/chain_id`
- **2026-07-31** `9bac53bd1da7`: 1 warning, 1 info
  - added the new `4663.00` enum value to the `destination_currency/chain_id` response property for the response status `201`
  - added the new `4663.00` enum value to the request property `destination_currency/chain_id`

[Operation history](https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3/changes/onramp/intents/post.md)

---

[API](https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3.md) - [All operations](https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3/llms.txt) - [OpenAPI document](https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3/revisions/3535f46f4c27?raw)
