---
description: "This endpoint establishes an automated workflow that converts incoming fiat currency from bank deposits into cryptocurrency and sends the acquired crypto to a specified wallet address."
title: "Convert Fiat to Crypto"
---

# Convert Fiat to Crypto

> This endpoint establishes an automated workflow that converts incoming fiat currency from bank deposits into cryptocurrency and sends the acquired crypto to a specified wallet address.

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

- `https://api.sandbox.noah.com/v1/workflows/bank-deposit-to-onchain-address` — V1 Sandbox Server
- `https://api.noah.com/v1/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) |
| `FiatCurrency` | string | Yes | Supported fiat ISO_4217 3 letter currency codes. |
| `CryptoCurrency` | string | Yes | Cryptocurrency: \| Environment \| BTC \| ETH \| USDC \| \|------------\|-----\|-------\|------\| \| Sandbox \| BTC_TEST \| ETH_TEST_SEPOLIA \| USDC_TEST \| \| Production \| BTC \| ETH \| USDC \| |
| `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 |
| `DestinationAddress` | object | Yes | The final destination address to which the crypto currency should be transferred. |
| `DestinationAddress.Address` | string | Yes |  |
| `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 — Created rule

#### `application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `PaymentMethodID` | string | Yes | Existing payment method id to be used. (length 1-150) |
| `PaymentMethodType` | string | Yes | Specific type of payment method: * BankAch * BankFedNow * BankFedwire * BankLocal * BankSepa * BankSortCode * BankSwift * IdentifierAlias * IdentifierMerchantID * IdentifierMobileMoney * IdentifierPix * IdentifierQr * TokenizedCard |
| `Reference` | string | No |  |
| `AccountNumber` | string | Yes |  |
| `AccountHolderName` | string | No |  |
| `BankCode` | string | No |  |
| `BankName` | string | No |  |
| `BankAddress` | object | No | Physical postal address. All string fields must be printable ASCII. State and PostCode are required for every country. See [Address Validation](/api-concepts/address-validation) for country-specific rules and payment-form differences. |
| `BankAddress.Street` | string | Yes | Street: the primary name of an address's street. Printable ASCII only. (length 2-200) |
| `BankAddress.Street2` | string | No | Street2: the secondary name of an address's street. Optional. Printable ASCII only. (length 0-200) |
| `BankAddress.City` | string | Yes | City: name of an address's city or town. Printable ASCII only. (length 1-100) |
| `BankAddress.PostCode` | string | Yes | PostCode: the address's postcode or ZIP code. Required for all countries (1-20 characters). Use the format from the customer's official documents. Placeholder values such as 00000 or NA are not accepted. (length 1-20) |
| `BankAddress.State` | string | Yes | State: the address's state, province, or county. Required for all countries (1-100 characters). For USA and Canada, use the ISO 3166-2 subdivision code as two uppercase letters (e.g. CA). For other countries, use the local administrative division name. Placeholders such as NA or None are not accepted. (length 1-100) |
| `BankAddress.Country` | string | Yes | ISO 3166-1 alpha-2 country code. |
| `CryptoCurrency` | string | Yes | Cryptocurrency: \| Environment \| BTC \| ETH \| USDC \| \|------------\|-----\|-------\|------\| \| Sandbox \| BTC_TEST \| ETH_TEST_SEPOLIA \| USDC_TEST \| \| Production \| BTC \| ETH \| USDC \| |
| `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 |
| `Fee` | object | Yes |  |
| `Fee.FiatCurrencyCode` | string | Yes | Supported fiat ISO_4217 3 letter currency codes. |
| `Fee.TotalFeePct` | string | Yes | (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `Fee.TotalFeeBase` | string | Yes | (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `Fee.TotalFeeMin` | string | Yes | (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `RelatedPaymentMethods` | object[] | No |  |
| `RelatedPaymentMethods[].PaymentMethodID` | string | Yes | Existing payment method id to be used. (length 1-150) |
| `RelatedPaymentMethods[].PaymentMethodType` | string | Yes | Specific type of payment method: * BankAch * BankFedNow * BankFedwire * BankLocal * BankSepa * BankSortCode * BankSwift * IdentifierAlias * IdentifierMerchantID * IdentifierMobileMoney * IdentifierPix * IdentifierQr * TokenizedCard |
| `RelatedPaymentMethods[].Fee` | object | Yes |  |
| `RelatedPaymentMethods[].Fee.FiatCurrencyCode` | string | Yes | Supported fiat ISO_4217 3 letter currency codes. |
| `RelatedPaymentMethods[].Fee.TotalFeePct` | string | Yes | (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `RelatedPaymentMethods[].Fee.TotalFeeBase` | string | Yes | (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `RelatedPaymentMethods[].Fee.TotalFeeMin` | string | Yes | (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `RelatedPaymentMethods[].Details` | object | Yes |  |
| `RelatedPaymentMethods[].Details.AccountNumber` | string | No |  |
| `RelatedPaymentMethods[].Details.BankCode` | string | No |  |
| `VirtualAccountID` | string | Yes | Virtual account identifier. (length 1-43; pattern `^[0-9A-Za-z]+$`) |
| `DestinationAddress` | object | Yes | A destination address to transfer cryptocurrency |
| `DestinationAddress.Address` | string | Yes |  |

### 400 — Bad request

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

### 403 — Forbidden. The customer is not currently eligible for virtual account issuance, such as when an individual is in compliance review.

### 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
- OpenAPI document: https://docs.noah.com/files/oas-schema.generated.json
