---
description: "This endpoint establishes an automated workflow that converts incoming cryptocurrency deposits into fiat currency payouts."
title: "Onchain Deposit to Fiat Payout"
---

# Onchain Deposit to Fiat Payout

> This endpoint establishes an automated workflow that converts incoming cryptocurrency deposits into fiat currency payouts.

```http
POST /workflows/onchain-deposit-to-payment-method
```

- `https://api.sandbox.noah.com/v1/workflows/onchain-deposit-to-payment-method` — V1 Sandbox Server
- `https://api.noah.com/v1/workflows/onchain-deposit-to-payment-method` — 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 |
| --- | --- | --- | --- |
| `Trigger` | SingleOnchainDepositSourceTriggerInput \| PermanentOnchainDepositSourceTriggerInput \| QuotedOnchainDepositSourceTriggerInput | Yes | Defines when and how the automated sell rule fires. **SingleOnchainDepositSourceTriggerInput** — executed only once. `FiatAmount` is optional: if provided, it determines the crypto amount to sell; if omitted, the entire deposited crypto amount is sold. **PermanentOnchainDepositSourceTriggerInput** — executed repeatedly on every matching deposit. `FiatAmount` must not be present; the entire deposited crypto amount is always sold. **QuotedOnchainDepositSourceTriggerInput** — executed only once. Locks the conversion rate from the `SellQuote` bound via `SignedQuote`. The deposit must arrive at the destination address before `quote.Expiry`; off-amount or late deposits will not match. Top-level `FiatAmount` must not be present; the recipient payout comes from the Quote. (discriminated by `Type`) |
| `Trigger[SingleOnchainDepositSourceTriggerInput]` | object | No |  |
| `Trigger[SingleOnchainDepositSourceTriggerInput].Type` | `SingleOnchainDepositSourceTriggerInput` | Yes |  |
| `Trigger[SingleOnchainDepositSourceTriggerInput].Conditions` | object[] | Yes | Conditions that trigger the rule. |
| `Trigger[SingleOnchainDepositSourceTriggerInput].Conditions[].AmountConditions` | object[] | Yes | Amount conditions for the rule. |
| `Trigger[SingleOnchainDepositSourceTriggerInput].Conditions[].AmountConditions[].ComparisonOperator` | `EQ` \| `LTEQ` \| `GTEQ` | Yes | Comparison operator for the field value: * EQ (Equals) * LTEQ (Less Than Or Equals) * GTEQ (Greater Than Or Equals) |
| `Trigger[SingleOnchainDepositSourceTriggerInput].Conditions[].AmountConditions[].Value` | string | Yes | (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `Trigger[SingleOnchainDepositSourceTriggerInput].Conditions[].Network` | string | Yes | Account-based network (prod/sandbox): * Celo/CeloTestSepolia * Ethereum/EthereumTestSepolia * Base/BaseTestSepolia * FlowEvm/FlowEvmTest * Gnosis/GnosisTestChiado * PolygonPos/PolygonTestAmoy * Solana/SolanaDevnet |
| `Trigger[SingleOnchainDepositSourceTriggerInput].SourceAddress` | string | Yes | Address in depositor's custody from which the deposit was made. Used for matching the deposit. |
| `Trigger[SingleOnchainDepositSourceTriggerInput].Expiry` | string (date-time) | Yes |  |
| `Trigger[SingleOnchainDepositSourceTriggerInput].Nonce` | string | Yes | A string which must be unique each time a new transaction is created, like a UUID or operation sequence number. Request can be idempotently retried by using the same Nonce. (length 1-36) |
| `Trigger[PermanentOnchainDepositSourceTriggerInput]` | object | No |  |
| `Trigger[PermanentOnchainDepositSourceTriggerInput].Type` | `PermanentOnchainDepositSourceTriggerInput` | Yes |  |
| `Trigger[PermanentOnchainDepositSourceTriggerInput].SourceAddress` | string | Yes | Address in depositor's custody from which the deposit was made. Used for matching the deposit. |
| `Trigger[PermanentOnchainDepositSourceTriggerInput].Conditions` | object[] | Yes | Conditions that trigger the rule. |
| `Trigger[PermanentOnchainDepositSourceTriggerInput].Conditions[].Network` | string | Yes | Account-based network (prod/sandbox): * Celo/CeloTestSepolia * Ethereum/EthereumTestSepolia * Base/BaseTestSepolia * FlowEvm/FlowEvmTest * Gnosis/GnosisTestChiado * PolygonPos/PolygonTestAmoy * Solana/SolanaDevnet |
| `Trigger[PermanentOnchainDepositSourceTriggerInput].NetworkAgnostic` | boolean | Yes | If true, match deposits to the returned destination address from any network. Default to false. (default `false`) |
| `Trigger[QuotedOnchainDepositSourceTriggerInput]` | object | No | One-shot trigger that binds a previously-issued quote to a source address. The deposit must be cleared at the destination address before `quote.Expiry`; off-amount or late arrivals are not matched by this rule and fall through to non-quoted matching. |
| `Trigger[QuotedOnchainDepositSourceTriggerInput].Type` | `QuotedOnchainDepositSourceTriggerInput` | Yes |  |
| `Trigger[QuotedOnchainDepositSourceTriggerInput].SignedQuote` | string | Yes | Signed string with quote details returned as `Quote.SignedQuote` on `PrepareSellResponse`. Pass back unchanged to bind the quote to this rule. The server verifies the signature and rejects tampered or expired quotes. (length 0-4096) |
| `Trigger[QuotedOnchainDepositSourceTriggerInput].Conditions` | object[] | Yes | Networks on which the deposit may arrive. Amount and currency are derived server-side from the bound quote token; do not specify AmountConditions. |
| `Trigger[QuotedOnchainDepositSourceTriggerInput].Conditions[].Network` | string | Yes | Account-based network (prod/sandbox): * Celo/CeloTestSepolia * Ethereum/EthereumTestSepolia * Base/BaseTestSepolia * FlowEvm/FlowEvmTest * Gnosis/GnosisTestChiado * PolygonPos/PolygonTestAmoy * Solana/SolanaDevnet |
| `Trigger[QuotedOnchainDepositSourceTriggerInput].SourceAddress` | string | Yes | Address in depositor's custody from which the deposit was made. Used for matching the deposit. |
| `Trigger[QuotedOnchainDepositSourceTriggerInput].Expiry` | string (date-time) | No | Optional orchestration expiry. Defaults to the quote expiry. Set this if you want to fallback to current market rate after the quote expiry. |
| `CustomerID` | string | Yes | A unique ID which identifies the customer in the Business' internal system and in NOAH. (length 1-42) |
| `CryptoCurrency` | string | Yes | Cryptocurrency: \| Environment \| BTC \| ETH \| USDC \| \|------------\|-----\|-------\|------\| \| Sandbox \| BTC_TEST \| ETH_TEST_SEPOLIA \| USDC_TEST \| \| Production \| BTC \| ETH \| USDC \| |
| `FiatAmount` | string | No | Amount sent to customer's payment method. Optional for SingleOnchainDepositSourceTriggerInput. Must be omitted for PermanentOnchainDepositSourceTriggerInput and for QuotedOnchainDepositSourceTriggerInput (for the quoted variant, the recipient amount is fixed on the referenced `SellQuote`). (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `FormSessionID` | string (uuid) | Yes | Unique identifier for the Form Session. Form Session allows ramping using provided form data. |
| `ExternalID` | string | No | A unique identifier used in the business system to store a reference for the transaction. This field allows businesses to track and manage transactions within their internal systems. (length 1-36) |
| `BusinessFee` | object | No | Per-transaction business fee configuration. When supplied, this fee is applied to the customer's transaction on behalf of the business. |
| `BusinessFee.FeeBase` | string | No | Fixed base fee amount. When set, FiatCurrency is required. (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `BusinessFee.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*)$`) |
| `BusinessFee.FiatCurrency` | string | No | Supported fiat ISO_4217 3 letter currency codes. |

## Responses

### 200 — Workflow created

#### `application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `Conditions` | object[] | Yes | Conditions that trigger the rule. |
| `Conditions[].AmountConditions` | object[] | Yes | Amount conditions for the rule. |
| `Conditions[].AmountConditions[].ComparisonOperator` | `EQ` \| `LTEQ` \| `GTEQ` | Yes | Comparison operator for the field value: * EQ (Equals) * LTEQ (Less Than Or Equals) * GTEQ (Greater Than Or Equals) |
| `Conditions[].AmountConditions[].Value` | string | Yes | (length 1-38; pattern `^[+]?([.]\d+\|\d+[.]?\d*)$`) |
| `Conditions[].CryptoCurrency` | string | Yes | Cryptocurrency: \| Environment \| BTC \| ETH \| USDC \| \|------------\|-----\|-------\|------\| \| Sandbox \| BTC_TEST \| ETH_TEST_SEPOLIA \| USDC_TEST \| \| Production \| BTC \| ETH \| USDC \| |
| `Conditions[].Network` | string | Yes | Account-based network (prod/sandbox): * Base/BaseTestSepolia * Celo/CeloTestSepolia * Ethereum/EthereumTestSepolia * FlowEvm/FlowEvmTest * Gnosis/GnosisTestChiado * PolygonPos/PolygonTestAmoy * Solana/SolanaDevnet |
| `Conditions[].DestinationAddress` | object | Yes | The destination address to which the crypto currency should be transferred. |
| `Conditions[].DestinationAddress.Address` | string | Yes |  |
| `SourceAddress` | string | No | Address in depositor's custody from which the deposit was made. |
| `RuleID` | string (uuid) | No | Rule identifier, matches Orchestration.RuleID in transaction responses/webhooks. |

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