---
description: "This endpoint initiates Noah's hosted session for automated fiat-to-crypto workflows."
title: "Convert Fiat to Crypto Session"
---

# Convert Fiat to Crypto Session

> This endpoint initiates Noah's hosted session for automated fiat-to-crypto workflows.

```http
POST /hosted-workflows/bank-deposit-to-onchain-address
```

- `https://api.sandbox.noah.com/v1/hosted-workflows/bank-deposit-to-onchain-address` — V1 Sandbox Server
- `https://api.noah.com/v1/hosted-workflows/bank-deposit-to-onchain-address` — V1 Production Server

## Authentication

- `X-Api-Key`: Your Noah API key. Required on all requests. See [API Keys](/api-concepts/authentication/api).
- `Api-Signature`: Digitally signed JWT used to verify request authenticity. Optional in sandbox when your API key has no associated signing public key; required in production for all requests. If sent, the signature is always validated. See [Request Signing](/api-concepts/authentication/signing).

## Request body

### `application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `CustomerID` | string | Yes | A unique ID which identifies the customer in the Business' internal system and in NOAH. (length 1-42) |
| `ReturnURL` | string (uri) | Yes | (length 10-1000) |
| `CryptoCurrency` | string | No | Cryptocurrency: \| Environment \| BTC \| ETH \| USDC \| \|------------\|-----\|-------\|------\| \| Sandbox \| BTC_TEST \| ETH_TEST_SEPOLIA \| USDC_TEST \| \| Production \| BTC \| ETH \| USDC \| |
| `Network` | string | No | Payments network (prod/sandbox): * Base/BaseTestSepolia * Bitcoin/BitcoinTest * Celo/CeloTestSepolia * Ethereum/EthereumTestSepolia * FlowEvm/FlowEvmTest * Gnosis/GnosisTestChiado * PolygonPos/PolygonTestAmoy * Solana/SolanaDevnet * OffNetwork/OffNetwork |
| `DestinationAddress` | object | Yes | A destination address to transfer cryptocurrency |
| `DestinationAddress.Address` | string | Yes |  |
| `FiatOptions` | object[] | Yes | Restricts fiat channels available in this hosted session. |
| `FiatOptions[].FiatCurrencyCode` | string | Yes | Supported fiat ISO_4217 3 letter currency codes. |
| `UI` | object | No | UI configuration for the bank-to-address hosted workflow. |
| `UI.CryptoOptions` | object[] | Yes | List of cryptocurrency-network pair options for the customer to choose from. The system will try each option in order until one succeeds. |
| `UI.CryptoOptions[].CryptoCurrency` | string | Yes | Cryptocurrency: \| Environment \| BTC \| ETH \| USDC \| \|------------\|-----\|-------\|------\| \| Sandbox \| BTC_TEST \| ETH_TEST_SEPOLIA \| USDC_TEST \| \| Production \| BTC \| ETH \| USDC \| |
| `UI.CryptoOptions[].Network` | string | Yes | Payments network (prod/sandbox): * Base/BaseTestSepolia * Bitcoin/BitcoinTest * Celo/CeloTestSepolia * Ethereum/EthereumTestSepolia * FlowEvm/FlowEvmTest * Gnosis/GnosisTestChiado * PolygonPos/PolygonTestAmoy * Solana/SolanaDevnet * OffNetwork/OffNetwork |
| `UI.CryptoOptionsConfig` | object | No | Configuration for crypto options behavior in the hosted UI. |
| `UI.CryptoOptionsConfig.AutoSelect` | `Order` | No | Strategy for automatically selecting a crypto option, removing the need for the customer to choose. 'Order' selects the first available option from the provided list. |
| `Metadata` | Record<string, string> | No | Custom user defined key value pairs used for storing additional information. |
| `BusinessFees` | Record<string, BusinessFeeInput> | No | Per-transaction business fees keyed by PaymentMethodType (e.g. BankAch, BankFedwire, BankSepa). Each entry defines the business fee applied to customer transactions using that payment method. |
| `BusinessFees[*].FeeBase` | string | No | Fixed base fee amount. When set, FiatCurrency is required. (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `BusinessFees[*].FeePct` | string | No | Variable percentage fee from 0 to 100 (e.g. 0.5 means 0.5%, 50 means 50%). (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `BusinessFees[*].FiatCurrency` | string | No | Supported fiat ISO_4217 3 letter currency codes. |

## Responses

### 200 — HostedURL successfully created.

#### `application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `HostedURL` | string (uri) | Yes | URL to redirect the customer to hosted session. |
| `FormSchema` | object | No | JSON schema for the form |
| `FormSchema.$schema` | string | Yes |  |
| `FormSchema.type` | string | Yes |  |
| `FormSchema.title` | string | No |  |
| `FormSchema.description` | string | No |  |
| `FormSchema.properties` | object | Yes | (additional properties allowed) |
| `FormSchema.required` | string[] | No |  |
| `FormSchema.allOf` | object[] | No |  |
| `OnboardingStatus` | `ReviewNotStarted` \| `ReviewPending` \| `DocumentInvalid` \| `AgreementsRequired` \| `Rejected` | No | Indicates the current status of the onboarding process. |
| `MissingSteps` | string[] | No | Verification step types that are still incomplete (e.g. IDENTITY, SELFIE, QUESTIONNAIRE). Only present when OnboardingStatus is ReviewNotStarted and the applicant has not yet submitted all required data for the initial verification. For follow-up verification requirements, please refer to customer webhooks. |
| `Verifications` | object | No | Verification data for the customer |
| `Verifications.Type` | `Individual` \| `Business` | Yes |  |
| `Verifications.Status` | string | Yes |  |
| `Verifications.ActionsRequired` | (`HighRiskInfo` \| `HighRiskInfoSenior` \| `SourceOfWealth` \| `DocumentPageMissing` \| `DocumentReupload` \| `SelfieReupload` \| `ProofOfAddress` \| `ProofOfAddressReupload` \| `IncorrectTaxID`)[] | No | Additional actions currently required from the customer to complete the review. |
| `Verifications.EntityVerifications` | object[] | Yes |  |
| `Verifications.EntityVerifications[].Model` | string | Yes |  |
| `Verifications.EntityVerifications[].Status` | string | Yes |  |
| `Verifications.EntityVerifications[].Created` | string (date-time) | Yes |  |
| `Verifications.EntityVerifications[].Modified` | string (date-time) | Yes |  |
| `Verifications.EntityVerifications[].Entity` | string | Yes |  |
| `Verifications.EntityVerifications[].RejectionData` | object | No |  |
| `Verifications.EntityVerifications[].RejectionData.RejectType` | `Final` \| `Retry` | Yes |  |
| `Verifications.EntityVerifications[].RejectionData.PublicComment` | string | No |  |

### 400 — Bad request

### 401 — Client is not authorized to perform this action

### 500 — Internal server error

Error responses share one `Error` envelope across the whole API. See https://docs.noah.com/api-concepts/errors.md for its fields, the `Type` values, and the field-level validation details in `RequestExtension` and `DenyExtension`.

## See also

- Rendered reference: https://docs.noah.com/api-reference/convert-fiat-to-crypto-session
- OpenAPI document: https://docs.noah.com/files/oas-schema.generated.json
