{
  "openapi": "3.0.3",
  "info": {
    "title": "NOAH Business API",
    "version": "0.1.3",
    "description": "The Noah Business API is organised around REST, using resource-oriented URLs. It accepts JSON-encoded request bodies and returns JSON-encoded responses. All our endpoints follow REST conventions and use standard HTTP response codes, authentication and methods.\n\nPlease follow the links in the navigation to find out more about each resource and endpoint.\n\nOur full OpenApi v3 Schema can be exported using the button above."
  },
  "components": {
    "schemas": {
      "ReturnURL": {
        "type": "string",
        "format": "uri",
        "minLength": 10,
        "maxLength": 1000
      },
      "GetPricesResponse": {
        "type": "object",
        "properties": {
          "Items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceItem"
            },
            "x-go-type-skip-optional-pointer": true
          }
        },
        "required": ["Items"]
      },
      "AccountType": {
        "type": "string",
        "example": "Current",
        "description": "Type of account:\n  * Current"
      },
      "GetChannelsResponse": {
        "type": "object",
        "properties": {
          "Items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Channel"
            },
            "x-go-type-skip-optional-pointer": true
          },
          "PageToken": {
            "type": "string"
          }
        },
        "required": ["Items"]
      },
      "Channel": {
        "type": "object",
        "properties": {
          "ID": {
            "type": "string"
          },
          "PaymentMethodCategory": {
            "$ref": "#/components/schemas/PaymentMethodCategory"
          },
          "PaymentMethodType": {
            "$ref": "#/components/schemas/PaymentMethodType"
          },
          "FiatCurrency": {
            "$ref": "#/components/schemas/FiatCurrencyCode"
          },
          "Country": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "Calculated": {
            "$ref": "#/components/schemas/ChannelCalculated",
            "description": "Calculated price information. Not returned if amount is not provided in the query."
          },
          "FeeConfig": {
            "$ref": "#/components/schemas/ChannelFeeConfig",
            "description": "The effective channel fee rate parameters."
          },
          "Limits": {
            "$ref": "#/components/schemas/ChannelLimits",
            "description": "Limits for the channel in requested currency."
          },
          "Rate": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Rate used for the cryptocurrency being exchanged against the channel fiat currency. Does not include fees. It is not a quoted price and is subject to market fluctuations."
          },
          "PaymentMethods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentMethodDisplay"
            },
            "description": "Recent payment methods for the channel. Only returned if `CustomerID` was provided in the query."
          },
          "ProcessingSeconds": {
            "type": "integer",
            "description": "The time it takes to process a transaction through the channel",
            "minimum": 1
          },
          "ProcessingTier": {
            "$ref": "#/components/schemas/ProcessingTier"
          },
          "FormSchema": {
            "$ref": "#/components/schemas/FormSchema",
            "description": "Form schema which needs to be filled by the customer. If a PaymentMethodID was provided, only the missing fields are displayed in the schema."
          },
          "FormMetadata": {
            "$ref": "#/components/schemas/FormMetadata"
          },
          "Issuer": {
            "$ref": "#/components/schemas/Issuer"
          }
        },
        "required": [
          "ID",
          "PaymentMethodCategory",
          "PaymentMethodType",
          "FiatCurrency",
          "Country",
          "FeeConfig",
          "Limits",
          "Rate",
          "ProcessingSeconds"
        ]
      },
      "ChannelCalculated": {
        "type": "object",
        "properties": {
          "TotalFee": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The total fee that will be charged for using the specific channel, always specified in the same currency as the requested fiat segment of the transaction."
          }
        },
        "required": ["TotalFee"]
      },
      "ChannelFeeConfig": {
        "type": "object",
        "description": "Effective channel fee rate parameters.",
        "properties": {
          "Fixed": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Fixed fee amount that is added to the percentage fee, denominated in FiatCurrencyCode."
          },
          "Percentage": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The percentage fee charged for using the channel, expressed as a percent value (e.g. \"0.5\" means 0.5%)."
          },
          "FiatCurrency": {
            "$ref": "#/components/schemas/FiatCurrencyCode",
            "description": "The fiat currency in which the fixed fee amount is denominated."
          }
        }
      },
      "ChannelLimits": {
        "type": "object",
        "properties": {
          "MinLimit": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The minimum amount that can be sent through the channel"
          },
          "MaxLimit": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The maximum amount that can be sent through the channel"
          }
        },
        "required": ["MinLimit"]
      },
      "ChannelsCountriesResponse": {
        "type": "object",
        "additionalProperties": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/FiatCurrencyCode"
          }
        },
        "example": {
          "AR": ["ARS"],
          "BR": ["BRL"],
          "MX": ["MXN"]
        }
      },
      "BalanceResponse": {
        "type": "object",
        "properties": {
          "AccountType": {
            "$ref": "#/components/schemas/AccountType"
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode"
          },
          "Available": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Amount available to spend."
          },
          "Total": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Amount including outflows that have not yet settled."
          }
        },
        "required": ["AccountType", "CryptoCurrency", "Available", "Total"]
      },
      "GetBalancesResponse": {
        "type": "object",
        "properties": {
          "Items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BalanceResponse"
            },
            "x-go-type-skip-optional-pointer": true
          },
          "PageToken": {
            "type": "string"
          }
        },
        "required": ["Items"]
      },
      "ExternalID": {
        "type": "string",
        "description": "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.",
        "minLength": 1,
        "maxLength": 36
      },
      "PaymentMethodID": {
        "type": "string",
        "description": "Existing payment method id to be used.",
        "minLength": 1,
        "maxLength": 150
      },
      "PaymentMethodDisplay": {
        "type": "object",
        "properties": {
          "ID": {
            "type": "string"
          },
          "PaymentMethodType": {
            "$ref": "#/components/schemas/PaymentMethodType"
          },
          "Details": {
            "$ref": "#/components/schemas/PaymentMethodDisplayDetails"
          },
          "AccountHolderDetails": {
            "$ref": "#/components/schemas/AccountHolderDetails"
          },
          "IssuerDetails": {
            "$ref": "#/components/schemas/IssuerDetails"
          }
        },
        "required": ["ID", "PaymentMethodType", "Details"]
      },
      "BankToAddressFee": {
        "type": "object",
        "properties": {
          "FiatCurrencyCode": {
            "$ref": "#/components/schemas/FiatCurrencyCode"
          },
          "TotalFeePct": {
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "TotalFeeBase": {
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "TotalFeeMin": {
            "$ref": "#/components/schemas/PositiveDecimal"
          }
        },
        "required": ["FiatCurrencyCode", "TotalFeePct", "TotalFeeBase", "TotalFeeMin"]
      },
      "BusinessFeeInput": {
        "type": "object",
        "description": "Per-transaction business fee configuration. When supplied, this fee is applied to the customer's transaction on behalf of the business.",
        "properties": {
          "FeeBase": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Fixed base fee amount. When set, FiatCurrency is required."
          },
          "FeePct": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Variable percentage fee from 0 to 100 (e.g. 0.5 means 0.5%, 50 means 50%)."
          },
          "FiatCurrency": {
            "$ref": "#/components/schemas/FiatCurrencyCode",
            "description": "Fiat currency for fixed fee amounts (FeeBase). Required when FeeBase is set. Defaults to the transaction's fiat currency when omitted."
          }
        },
        "example": {
          "FeeBase": "5",
          "FeePct": "0.1",
          "FiatCurrency": "USD"
        }
      },
      "BankToAddressRelatedPaymentMethod": {
        "type": "object",
        "properties": {
          "PaymentMethodID": {
            "$ref": "#/components/schemas/PaymentMethodID"
          },
          "PaymentMethodType": {
            "$ref": "#/components/schemas/PaymentMethodType"
          },
          "Fee": {
            "$ref": "#/components/schemas/BankToAddressFee"
          },
          "Details": {
            "$ref": "#/components/schemas/BankToAddressFiatPaymentMethodBankDisplay"
          }
        },
        "required": ["PaymentMethodID", "PaymentMethodType", "Fee", "Details"]
      },
      "BankToAddressFiatPaymentMethodBankDisplay": {
        "type": "object",
        "properties": {
          "AccountNumber": {
            "type": "string"
          },
          "BankCode": {
            "type": "string"
          }
        }
      },
      "FiatPaymentMethodBankDisplay": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["FiatPaymentMethodBankDisplay"]
          },
          "AccountNumber": {
            "type": "string"
          },
          "BankCode": {
            "type": "string"
          },
          "RoutingNumber": {
            "type": "string",
            "description": "The routing number of the sender's financial institution (e.g., ODFI routing number for ACH deposits)."
          },
          "SwiftCode": {
            "type": "string"
          },
          "BankingSystems": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "BankName": {
            "type": "string"
          },
          "BankAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          }
        },
        "required": ["Type"]
      },
      "FiatPaymentMethodCardDisplay": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["FiatPaymentMethodCardDisplay"]
          },
          "Last4": {
            "type": "string"
          },
          "Scheme": {
            "$ref": "#/components/schemas/FiatPaymentCardScheme"
          }
        },
        "required": ["Type", "Last4", "Scheme"]
      },
      "FiatPaymentRefund": {
        "type": "object",
        "properties": {
          "RefundID": {
            "type": "string",
            "format": "uuid"
          },
          "RefundedAmount": {
            "$ref": "#/components/schemas/FiatAmount"
          },
          "RequestedTime": {
            "$ref": "#/components/schemas/DateTime"
          },
          "Status": {
            "$ref": "#/components/schemas/FiatPaymentStatus"
          }
        },
        "required": ["RefundID", "RefundedAmount", "RequestedTime", "Status"]
      },
      "SenderPaymentMethod": {
        "type": "object",
        "properties": {
          "FullName": {
            "type": "string"
          },
          "Details": {
            "$ref": "#/components/schemas/PaymentMethodDisplayDetails"
          }
        },
        "required": ["Details"]
      },
      "OnchainDepositSourceTriggerNetworkConditionInput": {
        "type": "object",
        "description": "A trigger condition that matches by network only. Used when the server determines the amount (e.g. from a bound quote, or by liquidating the full deposited amount). Clients must not provide AmountConditions.",
        "properties": {
          "Network": {
            "$ref": "#/components/schemas/Network",
            "description": "Account-based network (prod/sandbox):\n * Celo/CeloTestSepolia\n * Ethereum/EthereumTestSepolia\n * Base/BaseTestSepolia\n * FlowEvm/FlowEvmTest\n * Gnosis/GnosisTestChiado\n * PolygonPos/PolygonTestAmoy\n * Solana/SolanaDevnet",
            "example": "Ethereum"
          }
        },
        "required": ["Network"],
        "additionalProperties": false
      },
      "OnchainDepositSourceTriggerConditionInput": {
        "type": "object",
        "properties": {
          "AmountConditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AmountCondition"
            },
            "description": "Amount conditions for the rule."
          },
          "Network": {
            "$ref": "#/components/schemas/Network",
            "description": "Account-based network (prod/sandbox):\n * Celo/CeloTestSepolia\n * Ethereum/EthereumTestSepolia\n * Base/BaseTestSepolia\n * FlowEvm/FlowEvmTest\n * Gnosis/GnosisTestChiado\n * PolygonPos/PolygonTestAmoy\n * Solana/SolanaDevnet",
            "example": "Ethereum"
          }
        },
        "required": ["AmountConditions", "Network"]
      },
      "DepositSourceTriggerCondition": {
        "type": "object",
        "properties": {
          "AmountConditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AmountCondition"
            },
            "description": "Amount conditions for the rule."
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode",
            "description": "Cryptocurrency for the rule.",
            "example": "USDC"
          },
          "Network": {
            "$ref": "#/components/schemas/Network",
            "description": "Account-based network (prod/sandbox):\n * Base/BaseTestSepolia\n * Celo/CeloTestSepolia\n * Ethereum/EthereumTestSepolia\n * FlowEvm/FlowEvmTest\n * Gnosis/GnosisTestChiado\n * PolygonPos/PolygonTestAmoy\n * Solana/SolanaDevnet",
            "example": "Ethereum"
          },
          "DestinationAddress": {
            "$ref": "#/components/schemas/DestinationAddress",
            "description": "The destination address to which the crypto currency should be transferred.",
            "example": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
          }
        },
        "required": ["AmountConditions", "CryptoCurrency", "Network", "DestinationAddress"]
      },
      "AmountCondition": {
        "type": "object",
        "properties": {
          "ComparisonOperator": {
            "$ref": "#/components/schemas/ComparisonOperator"
          },
          "Value": {
            "$ref": "#/components/schemas/PositiveDecimal"
          }
        },
        "required": ["ComparisonOperator", "Value"]
      },
      "FiatPaymentMethodIdentifierDisplay": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["FiatPaymentMethodIdentifierDisplay"]
          },
          "IdentifierType": {
            "$ref": "#/components/schemas/PaymentMethodIdentifierType"
          },
          "Identifier": {
            "type": "string"
          }
        },
        "required": ["Type", "Identifier", "IdentifierType"]
      },
      "PaymentMethodDisplayDetails": {
        "type": "object",
        "description": "Contains information to display each payment method, with fields tailored to the specific type (e.g., last four digits or account number) to help identify the payment method.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/FiatPaymentMethodBankDisplay"
          },
          {
            "$ref": "#/components/schemas/FiatPaymentMethodCardDisplay"
          },
          {
            "$ref": "#/components/schemas/FiatPaymentMethodIdentifierDisplay"
          }
        ],
        "discriminator": {
          "propertyName": "Type"
        }
      },
      "FiatPaymentCardScheme": {
        "type": "string",
        "description": "The card scheme:\n * Mastercard\n * Visa\n",
        "example": "Visa"
      },
      "PaymentMethodIdentifierType": {
        "type": "string",
        "description": "Identifier type:\n * PhoneNumber\n * Email\n * TaxID\n",
        "example": "PhoneNumber"
      },
      "PaymentMethod": {
        "type": "object",
        "properties": {
          "ID": {
            "type": "string"
          },
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "Country": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "PaymentMethodCategory": {
            "$ref": "#/components/schemas/PaymentMethodCategory"
          },
          "DisplayDetails": {
            "$ref": "#/components/schemas/PaymentMethodDisplayDetails"
          },
          "Capabilities": {
            "$ref": "#/components/schemas/PaymentMethodCapabilities"
          },
          "AccountHolderDetails": {
            "$ref": "#/components/schemas/AccountHolderDetails"
          },
          "IssuerDetails": {
            "$ref": "#/components/schemas/IssuerDetails"
          }
        },
        "required": ["ID", "PaymentMethodCategory", "DisplayDetails", "Country"]
      },
      "PaymentMethodCapabilities": {
        "type": "object",
        "properties": {
          "PayoutFrom": {
            "type": "boolean",
            "description": "internally generated, can take money out of the system"
          },
          "PayinTo": {
            "type": "boolean",
            "description": "user supplied, can add money into the system"
          },
          "PayoutTo": {
            "type": "boolean",
            "description": "user supplied, can take money out of the system"
          }
        },
        "required": ["PayoutTo", "PayoutFrom", "PayinTo"]
      },
      "GetPaymentMethodsResponse": {
        "type": "object",
        "properties": {
          "Items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            },
            "x-go-type-skip-optional-pointer": true
          },
          "PageToken": {
            "type": "string"
          }
        },
        "required": ["Items"]
      },
      "VirtualAccountStatus": {
        "type": "string",
        "description": "Status of a virtual account:\n * Active - active virtual account\n * PendingClosure - virtual account closure is in progress\n * Closed - virtual account has been closed\n",
        "enum": ["Active", "PendingClosure", "Closed"],
        "example": "Active"
      },
      "VirtualAccount": {
        "type": "object",
        "description": "A customer virtual account, represented by the payment methods that share the same virtual account identifier.",
        "properties": {
          "VirtualAccountID": {
            "$ref": "#/components/schemas/VirtualAccountID",
            "x-order": 1
          },
          "Status": {
            "$ref": "#/components/schemas/VirtualAccountStatus",
            "x-order": 2
          },
          "PaymentMethods": {
            "type": "array",
            "description": "Payment methods linked to this virtual account.",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            },
            "x-go-type-skip-optional-pointer": true,
            "x-order": 3
          }
        },
        "required": ["VirtualAccountID", "Status", "PaymentMethods"]
      },
      "GetVirtualAccountsResponse": {
        "type": "object",
        "properties": {
          "Items": {
            "type": "array",
            "description": "Virtual accounts for the requested customer.",
            "items": {
              "$ref": "#/components/schemas/VirtualAccount"
            },
            "x-go-type-skip-optional-pointer": true
          },
          "PageToken": {
            "type": "string",
            "description": "Token for retrieving the next page of results, if more results are available."
          }
        },
        "required": ["Items"]
      },
      "VirtualAccountID": {
        "type": "string",
        "description": "Virtual account identifier.",
        "minLength": 1,
        "maxLength": 43,
        "pattern": "^[0-9A-Za-z]+$"
      },
      "CloseVirtualAccountResponse": {
        "type": "object",
        "properties": {
          "VirtualAccountID": {
            "$ref": "#/components/schemas/VirtualAccountID",
            "description": "Virtual account identifier."
          },
          "Status": {
            "type": "string",
            "description": "Current status of the virtual account. `200 OK` responses return `Closed`; `202 Accepted` responses return `PendingClosure`."
          }
        },
        "required": ["VirtualAccountID", "Status"]
      },
      "PriceItem": {
        "type": "object",
        "properties": {
          "PaymentMethodCategory": {
            "$ref": "#/components/schemas/PaymentMethodCategory"
          },
          "Rate": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Rate used to exchange currencies"
          },
          "UpdatedAt": {
            "$ref": "#/components/schemas/DateTime"
          },
          "TotalFee": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The total fee that will be charged for using the specific channel, always specified in the same currency as the requested fiat segment of the transaction."
          },
          "BusinessFee": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The fee applied on behalf of the business to customer transactions, always specified in the same currency as the requested fiat segment of the transaction."
          },
          "SourceAmount": {
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "DestinationAmount": {
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "CryptoFeeBreakdown": {
            "type": "array",
            "description": "Total fee amount breakdown in cryptocurrency.",
            "items": {
              "$ref": "#/components/schemas/FeeBreakdownItem"
            },
            "x-go-type-skip-optional-pointer": true
          }
        },
        "required": ["PaymentMethodCategory", "Rate", "UpdatedAt"]
      },
      "FeeBreakdownItem": {
        "type": "object",
        "properties": {
          "Type": {
            "$ref": "#/components/schemas/FeeBreakdownItemType"
          },
          "Amount": {
            "$ref": "#/components/schemas/PositiveDecimal"
          }
        },
        "required": ["Type", "Amount"]
      },
      "FeeBreakdownItemType": {
        "type": "string",
        "description": "What fee the items refers to:\n* ChannelFee\n* BusinessFee"
      },
      "PrepareSellRequest": {
        "type": "object",
        "description": "Request to prepare a sell transaction. Exactly one of `FiatAmount` or `CryptoAmount` must be supplied (XOR); the other is derived from the channel's rate. When `Quoted` is true the response includes a `SellQuote` that locks the conversion rate and recipient payout.",
        "properties": {
          "ChannelID": {
            "$ref": "#/components/schemas/ChannelID"
          },
          "FormSessionID": {
            "$ref": "#/components/schemas/FormSessionID"
          },
          "PaymentMethodID": {
            "$ref": "#/components/schemas/PaymentMethodID"
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode",
            "description": "Cryptocurrency to sell."
          },
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "FiatAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Amount sent to customer's payment method. When omitted, the full `CryptoAuthorizedAmount` is sold at the execution-time market rate (full liquidation mode). Mutually exclusive with `CryptoAmount`; exactly one must be provided."
          },
          "CryptoAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Exact amount of cryptocurrency the depositor will send. Mutually exclusive with `FiatAmount`; exactly one must be provided."
          },
          "Quoted": {
            "type": "boolean",
            "description": "Opt in to fixed-quote behaviour. When true and all form steps are complete, the response includes a `SellQuote` whose `SignedQuote` can be used to lock the conversion rate and recipient payout.",
            "default": false
          },
          "Form": {
            "$ref": "#/components/schemas/FormInput"
          },
          "DelayedSell": {
            "type": "boolean",
            "description": "When enabled, balance checks are deferred until the final sell request, allowing the order to be prepared now and executed later."
          },
          "Version": {
            "type": "string",
            "description": "Optional API version."
          },
          "BusinessFee": {
            "$ref": "#/components/schemas/BusinessFeeInput",
            "description": "Per-transaction business fee applied to the customer for this sell.",
            "example": {
              "FeePct": "0.1",
              "FeeBase": "5",
              "FiatCurrency": "USD"
            }
          }
        },
        "required": ["ChannelID", "CryptoCurrency"]
      },
      "SellRequest": {
        "type": "object",
        "properties": {
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode",
            "description": "Cryptocurrency to sell."
          },
          "FiatAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Amount sent to customer's payment method. When omitted, the full `CryptoAuthorizedAmount` is sold at the execution-time market rate (full liquidation mode)."
          },
          "CryptoAuthorizedAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Maximum amount that can be charged for this transaction."
          },
          "FormSessionID": {
            "$ref": "#/components/schemas/FormSessionID"
          },
          "Nonce": {
            "$ref": "#/components/schemas/Nonce"
          },
          "ExternalID": {
            "$ref": "#/components/schemas/ExternalID"
          }
        },
        "required": ["CryptoAuthorizedAmount", "CryptoCurrency", "FormSessionID", "Nonce"]
      },
      "BankDepositToOnchainAddressRequest": {
        "type": "object",
        "properties": {
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "FiatCurrency": {
            "$ref": "#/components/schemas/FiatCurrencyCode"
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode"
          },
          "Network": {
            "$ref": "#/components/schemas/Network"
          },
          "DestinationAddress": {
            "$ref": "#/components/schemas/DestinationAddress",
            "description": "The final destination address to which the crypto currency should be transferred."
          },
          "BusinessFees": {
            "type": "object",
            "description": "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.",
            "additionalProperties": {
              "$ref": "#/components/schemas/BusinessFeeInput"
            },
            "example": {
              "BankAch": {
                "FeePct": "0.2"
              },
              "BankFedwire": {
                "FeeBase": "5",
                "FeePct": "0.1",
                "FiatCurrency": "USD"
              }
            }
          }
        },
        "required": [
          "CustomerID",
          "FiatCurrency",
          "CryptoCurrency",
          "Network",
          "DestinationAddress"
        ]
      },
      "BankDepositToOnchainAddressResponse": {
        "type": "object",
        "properties": {
          "PaymentMethodID": {
            "$ref": "#/components/schemas/PaymentMethodID"
          },
          "PaymentMethodType": {
            "$ref": "#/components/schemas/PaymentMethodType"
          },
          "Reference": {
            "type": "string"
          },
          "AccountNumber": {
            "type": "string"
          },
          "AccountHolderName": {
            "type": "string"
          },
          "BankCode": {
            "type": "string"
          },
          "BankName": {
            "type": "string"
          },
          "BankAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode"
          },
          "Network": {
            "$ref": "#/components/schemas/Network"
          },
          "Fee": {
            "$ref": "#/components/schemas/BankToAddressFee"
          },
          "RelatedPaymentMethods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BankToAddressRelatedPaymentMethod"
            },
            "x-go-type-skip-optional-pointer": true
          }
        },
        "required": [
          "PaymentMethodID",
          "PaymentMethodType",
          "AccountNumber",
          "CryptoCurrency",
          "Network",
          "Fee"
        ]
      },
      "OnchainDepositToPaymentMethodRequest": {
        "type": "object",
        "properties": {
          "Trigger": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SingleOnchainDepositSourceTriggerInput"
              },
              {
                "$ref": "#/components/schemas/PermanentOnchainDepositSourceTriggerInput"
              },
              {
                "$ref": "#/components/schemas/QuotedOnchainDepositSourceTriggerInput"
              }
            ],
            "discriminator": {
              "propertyName": "Type"
            },
            "description": "Defines when and how the automated sell rule fires.\n\n**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.\n\n**PermanentOnchainDepositSourceTriggerInput** — executed repeatedly on every matching deposit. `FiatAmount` must not be present; the entire deposited crypto amount is always sold.\n\n**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."
          },
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode"
          },
          "FiatAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "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`)."
          },
          "FormSessionID": {
            "$ref": "#/components/schemas/FormSessionID"
          },
          "ExternalID": {
            "$ref": "#/components/schemas/ExternalID"
          },
          "BusinessFee": {
            "$ref": "#/components/schemas/BusinessFeeInput",
            "deprecated": true,
            "description": "Per-transaction business fee applied to the customer for this payout. Prefer setting it on `POST /transactions/sell/prepare`; if a fee is already set on the referenced `FormSession`, supplying it here is rejected.",
            "example": {
              "FeePct": "0.1",
              "FeeBase": "5",
              "FiatCurrency": "USD"
            }
          }
        },
        "required": ["Trigger", "CustomerID", "CryptoCurrency", "FormSessionID"]
      },
      "OnchainDepositToPaymentMethodResponse": {
        "type": "object",
        "properties": {
          "Conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DepositSourceTriggerCondition"
            },
            "description": "Conditions that trigger the rule."
          },
          "SourceAddress": {
            "$ref": "#/components/schemas/Address",
            "description": "Address in depositor's custody from which the deposit was made.",
            "example": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
          },
          "RuleID": {
            "type": "string",
            "format": "uuid",
            "description": "Rule identifier, matches Orchestration.RuleID in transaction responses/webhooks."
          }
        },
        "required": ["Conditions"]
      },
      "FormPropertyList": {
        "type": "object",
        "additionalProperties": true,
        "x-go-type-skip-optional-pointer": true,
        "x-order": 5
      },
      "FormSchema": {
        "description": "JSON schema for the form",
        "type": "object",
        "required": ["$schema", "type", "properties"],
        "properties": {
          "$schema": {
            "type": "string",
            "example": "http://json-schema.org/draft-07/schema#",
            "x-order": 1
          },
          "type": {
            "type": "string",
            "example": "object",
            "x-order": 2
          },
          "title": {
            "type": "string",
            "x-go-type-skip-optional-pointer": true,
            "x-order": 3
          },
          "description": {
            "type": "string",
            "x-go-type-skip-optional-pointer": true,
            "x-order": 4
          },
          "properties": {
            "$ref": "#/components/schemas/FormPropertyList"
          },
          "required": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-type-skip-optional-pointer": true,
            "x-order": 6
          },
          "allOf": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "x-go-type-skip-optional-pointer": true,
            "x-order": 7
          }
        }
      },
      "GetFormResponse": {
        "type": "object",
        "properties": {
          "FormSchema": {
            "$ref": "#/components/schemas/FormSchema",
            "description": "Form schema which needs to be filled by the customer. If no customer input is required, this field is omitted."
          },
          "FormMetadata": {
            "$ref": "#/components/schemas/FormMetadata"
          }
        }
      },
      "FormMetadata": {
        "type": "object",
        "description": "Metadata about a form schema. The ContentHash matches the contentHash in pre-compiled static form schemas, enabling correlation between dynamic and static forms.",
        "properties": {
          "ContentHash": {
            "type": "string",
            "description": "SHA256 hash of the form schema content. Matches the contentHash field in published static form schema metadata."
          }
        },
        "required": ["ContentHash"]
      },
      "FormInput": {
        "type": "object",
        "description": "Form input to be submitted based on returned FormSchema",
        "additionalProperties": true,
        "x-go-type-skip-optional-pointer": true
      },
      "FormSessionID": {
        "type": "string",
        "format": "uuid",
        "description": "Unique identifier for the Form Session. Form Session allows ramping using provided form data."
      },
      "SellResponse": {
        "type": "object",
        "properties": {
          "Transaction": {
            "$ref": "#/components/schemas/Transaction"
          }
        },
        "required": ["Transaction"]
      },
      "TravelRule": {
        "type": "object",
        "description": "Party and institution data for travel-rule compliance on this transfer.",
        "properties": {
          "Originator": {
            "$ref": "#/components/schemas/TravelRuleOriginator",
            "description": "The party on whose behalf the funds are sent."
          },
          "Beneficiary": {
            "$ref": "#/components/schemas/TravelRuleBeneficiary",
            "description": "The party receiving the funds at the destination address."
          },
          "OriginatingVASP": {
            "$ref": "#/components/schemas/TravelRuleInstitution",
            "description": "The institution originating the transfer. Provide when your integration acts on behalf of another VASP or financial institution as the originating party."
          },
          "BeneficiaryVASP": {
            "$ref": "#/components/schemas/TravelRuleInstitution",
            "description": "The institution receiving the transfer on the beneficiary's behalf, when known."
          }
        },
        "required": ["Beneficiary"]
      },
      "TravelRuleInstitution": {
        "type": "object",
        "description": "VASP or financial institution (legal person).",
        "properties": {
          "Name": {
            "type": "string",
            "minLength": 1,
            "description": "Legal name of the institution."
          },
          "RegistrationNumber": {
            "type": "string",
            "description": "Registration number, LEI, or other institution identifier."
          },
          "RegistrationCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "RegisteredAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          }
        },
        "required": ["Name"]
      },
      "TravelRuleOriginator": {
        "type": "object",
        "description": "Travel-rule originator — natural or legal person.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/IndividualOriginator"
          },
          {
            "$ref": "#/components/schemas/BusinessOriginator"
          }
        ],
        "discriminator": {
          "propertyName": "Type",
          "mapping": {
            "Individual": "#/components/schemas/IndividualOriginator",
            "Business": "#/components/schemas/BusinessOriginator"
          }
        }
      },
      "TravelRuleBeneficiary": {
        "type": "object",
        "description": "Travel-rule beneficiary — natural or legal person.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/IndividualBeneficiary"
          },
          {
            "$ref": "#/components/schemas/BusinessBeneficiary"
          }
        ],
        "discriminator": {
          "propertyName": "Type",
          "mapping": {
            "Individual": "#/components/schemas/IndividualBeneficiary",
            "Business": "#/components/schemas/BusinessBeneficiary"
          }
        }
      },
      "IndividualOriginator": {
        "type": "object",
        "description": "Individual originator. Requires a full name and at least one of: residential address, identity document, or date and country of birth together.",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["Individual"]
          },
          "FullName": {
            "$ref": "#/components/schemas/FullName"
          },
          "DateOfBirth": {
            "$ref": "#/components/schemas/Date"
          },
          "CountryOfBirth": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "Identities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerIdentity"
            }
          },
          "PrimaryResidence": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "AccountNumber": {
            "type": "string",
            "description": "Account identifier for this party at their institution."
          },
          "ExternalID": {
            "type": "string",
            "description": "Your reference for this party, for reconciliation in your systems."
          }
        },
        "required": ["Type", "FullName", "AccountNumber"]
      },
      "BusinessOriginator": {
        "type": "object",
        "description": "Business originator. Requires a registered name and at least one of: registered address or registration number.",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["Business"]
          },
          "RegisteredName": {
            "type": "string",
            "minLength": 1,
            "description": "Registered name of the business."
          },
          "RegistrationNumber": {
            "type": "string",
            "description": "Company registration number or LEI."
          },
          "RegistrationCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "RegisteredAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "IncorporationDate": {
            "$ref": "#/components/schemas/Date"
          },
          "AccountNumber": {
            "type": "string",
            "description": "Account identifier for this party at their institution."
          },
          "ExternalID": {
            "type": "string",
            "description": "Your reference for this party, for reconciliation in your systems."
          }
        },
        "required": ["Type", "RegisteredName", "AccountNumber"]
      },
      "IndividualBeneficiary": {
        "type": "object",
        "description": "Individual beneficiary. A full name is required; additional fields improve travel-rule data quality.",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["Individual"]
          },
          "FullName": {
            "$ref": "#/components/schemas/FullName"
          },
          "DateOfBirth": {
            "$ref": "#/components/schemas/Date"
          },
          "Identities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerIdentity"
            }
          },
          "PrimaryResidence": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "AccountNumber": {
            "type": "string",
            "description": "Account identifier for this party at their institution."
          },
          "ExternalID": {
            "type": "string",
            "description": "Your reference for this party, for reconciliation in your systems."
          }
        },
        "required": ["Type", "FullName"]
      },
      "BusinessBeneficiary": {
        "type": "object",
        "description": "Business beneficiary. A registered name is required; additional fields improve travel-rule data quality.",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["Business"]
          },
          "RegisteredName": {
            "type": "string",
            "minLength": 1,
            "description": "Registered name of the business."
          },
          "RegistrationNumber": {
            "type": "string",
            "description": "Company registration number or LEI."
          },
          "RegistrationCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "RegisteredAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "IncorporationDate": {
            "$ref": "#/components/schemas/Date"
          },
          "AccountNumber": {
            "type": "string",
            "description": "Account identifier for this party at their institution."
          },
          "ExternalID": {
            "type": "string",
            "description": "Your reference for this party, for reconciliation in your systems."
          }
        },
        "required": ["Type", "RegisteredName"]
      },
      "WithdrawRequest": {
        "type": "object",
        "description": "Request to initiate an on-chain cryptocurrency withdrawal.",
        "properties": {
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode",
            "description": "Cryptocurrency to withdraw."
          },
          "Network": {
            "$ref": "#/components/schemas/Network",
            "description": "Blockchain network for the withdrawal."
          },
          "Amount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Amount received by the beneficiary at the destination address. When GrossAmount is true, this is instead the gross amount debited from the account (network fee included)."
          },
          "DestinationAddress": {
            "$ref": "#/components/schemas/DestinationAddress"
          },
          "GrossAmount": {
            "type": "boolean",
            "default": false,
            "description": "When true, Amount is the gross amount debited (incl. network fee). When false or omitted, Amount is the net amount the beneficiary receives and the fee is added on top."
          },
          "Nonce": {
            "$ref": "#/components/schemas/Nonce"
          },
          "ExternalID": {
            "$ref": "#/components/schemas/ExternalID"
          },
          "Metadata": {
            "$ref": "#/components/schemas/Metadata"
          },
          "TravelRule": {
            "$ref": "#/components/schemas/TravelRule",
            "description": "Travel-rule party and institution data for this withdrawal."
          }
        },
        "required": [
          "CryptoCurrency",
          "Network",
          "Amount",
          "DestinationAddress",
          "Nonce",
          "TravelRule"
        ]
      },
      "WithdrawResponse": {
        "type": "object",
        "description": "Response returned when a withdrawal has been accepted for processing.",
        "properties": {
          "Transaction": {
            "$ref": "#/components/schemas/Transaction"
          }
        },
        "required": ["Transaction"]
      },
      "PrepareSellResponse": {
        "type": "object",
        "properties": {
          "TotalFee": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The total fee that will be charged for using the specific channel, always specified in the same currency as the requested fiat segment of the transaction."
          },
          "CryptoAmountEstimate": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The estimated amount of cryptocurrency that will be used in this transaction. Locked if quoted is true."
          },
          "CryptoAuthorizedAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Maximum amount that can be charged for this transaction. This will be used in your subsequent `/transactions/sell` request. Same as `CryptoAmount` if provided in the request."
          },
          "FormSessionID": {
            "$ref": "#/components/schemas/FormSessionID"
          },
          "NextStep": {
            "$ref": "#/components/schemas/FormNextStep"
          },
          "Quote": {
            "$ref": "#/components/schemas/SellQuote",
            "description": "Fixed-rate quote. Present only when the request set `Quoted: true` and all form steps are complete (`NextStep` is absent). Clients bind this quote to payout transaction by passing its `SignedQuote` unchanged when creating the payout rule or transaction."
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode",
            "description": "Cryptocurrency the depositor will send."
          },
          "FiatCurrency": {
            "$ref": "#/components/schemas/FiatCurrencyCode",
            "description": "Fiat currency the recipient will receive."
          },
          "FiatAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Net amount of `FiatCurrency` the recipient's payment method will receive after every fee in `Breakdown` has been applied. Locked if quoted is true."
          },
          "Rate": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Composite `CryptoCurrency -> FiatCurrency` rate (1 `CryptoCurrency` buys X `FiatCurrency`). Already includes any FX leg; clients do not need to reason about intermediate fiats. Locked if quoted is true."
          },
          "Breakdown": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionBreakdownItem"
            },
            "description": "Per-type payment breakdown in `CryptoCurrency`. Items are additive: `ChannelFee` + `BusinessFee` + `Remaining` = `CryptoAmountEstimate`. The `Remaining` line equals `FiatAmount / Rate` (the net crypto equivalent of the fiat payout); `ChannelFee` and `BusinessFee`, when each converted at `Rate`, sum to `TotalFee`.",
            "x-go-type-skip-optional-pointer": true
          }
        },
        "required": ["FormSessionID", "TotalFee", "CryptoAmountEstimate", "CryptoAuthorizedAmount"]
      },
      "SellQuote": {
        "type": "object",
        "description": "A fixed-rate sell quote returned when the caller opts in with `Quoted: true`. Locks the conversion rate and recipient payout so the depositor knows, before submitting funds on-chain, exactly how much fiat the recipient will receive.",
        "properties": {
          "SignedQuote": {
            "type": "string",
            "description": "Signed string that encodes all binding claims for this quote (`crypto_currency`, `fiat_currency`, `crypto_amount`, `fiat_amount`, `rate`, `total_fee`, `breakdown`, `expiry`). Treat as an opaque bearer: pass back unchanged. The remaining fields are provided as human-readable disclosures so the depositor UI can render the quote without decoding the string."
          },
          "Expiry": {
            "$ref": "#/components/schemas/DateTime",
            "description": "Deadline by which the deposit must be observed AND fully cleared for this quote to apply. 'Cleared' means: (a) the on-chain transfer has reached the finality threshold Noah requires for the arrival network (which varies per chain — e.g. more confirmations are required on Ethereum than on Solana), and (b) downstream compliance and screening checks against the source address have completed successfully. Deposits whose finality and compliance clear after `Expiry` no longer match the locked quoted and will proceed with current market rate. Clients should choose `Networks` on the trigger with this finality variance in mind; the prepare response uses a server-side minimum `Expiry` floor per network."
          }
        },
        "required": ["SignedQuote", "Expiry"]
      },
      "FormStepID": {
        "type": "string",
        "description": "Identifier for a form step.",
        "enum": ["Vop", "Cob", "PaymentDetails"]
      },
      "FormNextStepType": {
        "type": "string",
        "description": "UX intent for the next step. Ack: acknowledgement-only step. DataEntry: collect new information.",
        "enum": ["Ack", "DataEntry"]
      },
      "FormNextStep": {
        "type": "object",
        "properties": {
          "StepID": {
            "$ref": "#/components/schemas/FormStepID"
          },
          "StepType": {
            "$ref": "#/components/schemas/FormNextStepType"
          },
          "Schema": {
            "$ref": "#/components/schemas/FormSchema"
          }
        },
        "required": ["StepID", "StepType", "Schema"]
      },
      "GetCustomersResponse": {
        "type": "object",
        "properties": {
          "Items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Customer"
            },
            "x-go-type-skip-optional-pointer": true
          },
          "PageToken": {
            "type": "string"
          }
        },
        "required": ["Items"]
      },
      "GetTransactionsResponse": {
        "type": "object",
        "properties": {
          "Items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Transaction"
            },
            "x-go-type-skip-optional-pointer": true
          },
          "PageToken": {
            "type": "string"
          }
        },
        "required": ["Items"]
      },
      "CryptoCurrencyCode": {
        "type": "string",
        "description": "Cryptocurrency:\n\n| Environment | BTC | ETH | USDC |\n|------------|-----|-------|------|\n| Sandbox | BTC_TEST | ETH_TEST_SEPOLIA | USDC_TEST |\n| Production | BTC | ETH | USDC |\n",
        "example": "USDC"
      },
      "FiatCurrencyCode": {
        "type": "string",
        "description": "Supported fiat ISO_4217 3 letter currency codes.",
        "example": "USD"
      },
      "FiatOption": {
        "type": "object",
        "properties": {
          "FiatCurrencyCode": {
            "$ref": "#/components/schemas/FiatCurrencyCode"
          }
        },
        "description": "Fiat option for a customer to be onboarded with.",
        "required": ["FiatCurrencyCode"]
      },
      "CryptoOption": {
        "type": "object",
        "properties": {
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode"
          },
          "Network": {
            "$ref": "#/components/schemas/Network"
          }
        },
        "description": "Crypto-network pair option for a customer to choose from.",
        "required": ["CryptoCurrency", "Network"]
      },
      "CryptoOptionsAutoSelect": {
        "type": "string",
        "description": "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.",
        "enum": ["Order"]
      },
      "CryptoOptionsConfig": {
        "type": "object",
        "properties": {
          "AutoSelect": {
            "$ref": "#/components/schemas/CryptoOptionsAutoSelect"
          }
        },
        "description": "Configuration for crypto options behavior in the hosted UI."
      },
      "BankToAddressUI": {
        "type": "object",
        "properties": {
          "CryptoOptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoOption"
            },
            "description": "List of cryptocurrency-network pair options for the customer to choose from. The system will try each option in order until one succeeds.",
            "x-go-type-skip-optional-pointer": true
          },
          "CryptoOptionsConfig": {
            "$ref": "#/components/schemas/CryptoOptionsConfig"
          }
        },
        "description": "UI configuration for the bank-to-address hosted workflow.",
        "required": ["CryptoOptions"]
      },
      "CountryCode": {
        "type": "string",
        "description": "ISO 3166-1 alpha-2 country code.",
        "example": "US"
      },
      "Issuer": {
        "type": "string"
      },
      "AssetID": {
        "type": "string",
        "example": "USD",
        "description": "A scalar representing a financial asset code. Suitable for use in cases where exactly one of the currency codes must be provided."
      },
      "TransactionStatus": {
        "type": "string",
        "enum": ["Pending", "Failed", "Settled"],
        "description": "Statuses for transactions.",
        "example": "Settled"
      },
      "TransactionDirection": {
        "type": "string",
        "description": "Whether the transactions was a credit (in) or a debit (out) in your account",
        "enum": ["In", "Out"],
        "example": "In"
      },
      "PhoneNumber": {
        "type": "string",
        "pattern": "^\\+[0-9]{6,15}$"
      },
      "PositiveDecimal": {
        "type": "string",
        "example": "10.1",
        "minLength": 1,
        "maxLength": 38,
        "pattern": "^[+]?([.]\\d+|\\d+[.]?\\d*)$"
      },
      "Network": {
        "type": "string",
        "description": "Payments network (prod/sandbox):\n * Base/BaseTestSepolia\n * Bitcoin/BitcoinTest\n * Celo/CeloTestSepolia\n * Ethereum/EthereumTestSepolia\n * FlowEvm/FlowEvmTest\n * Gnosis/GnosisTestChiado\n * PolygonPos/PolygonTestAmoy\n * Solana/SolanaDevnet\n * OffNetwork/OffNetwork\n",
        "example": "Solana"
      },
      "Nonce": {
        "type": "string",
        "description": "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.",
        "example": "dc879b38-494b-4de7-98a9-068703144328",
        "minLength": 1,
        "maxLength": 36
      },
      "PaymentMethodCategory": {
        "type": "string",
        "description": "Categorizes one or more `PaymentMethodType`s into broader groups. Useful for listing channels, displaying payment methods:\n * Bank\n * Card\n * Identifier\n",
        "example": "Bank"
      },
      "PaymentMethodCapability": {
        "type": "string",
        "description": "Capability filter for payment methods:\n * PayoutFrom - Methods used to send money out of the system (system-generated)\n * PayoutTo - Methods used to send money out of the system (user-supplied)\n * PayinTo - Methods used to submit money into the system (user-supplied, excludes system-generated methods like virtual accounts)",
        "enum": ["PayoutFrom", "PayinTo", "PayoutTo"]
      },
      "ProcessingTier": {
        "type": "string",
        "description": "Processing tier for a payment method, this may affect the settlement time of the transaction. \n * Standard: it's the payment processor method standard option, for BankACH it means ACH next day settlement.\n * Priority: it's the payment processor method priority option, for BankACH it means ACH same day settlement.",
        "enum": ["Standard", "Priority"]
      },
      "PaymentMethodType": {
        "type": "string",
        "description": "Specific type of payment method:\n * BankAch\n * BankFedNow\n * BankFedwire\n * BankLocal\n * BankSepa\n * BankSortCode\n * BankSwift\n * IdentifierAlias\n * IdentifierMerchantID\n * IdentifierMobileMoney\n * IdentifierPix\n * IdentifierQr\n * TokenizedCard\n",
        "example": "BankLocal"
      },
      "Address": {
        "type": "string",
        "example": "BD4v6DaDE1YNWGKusnXn6SHrZZN2GHRn7bDxPoH5a9EB"
      },
      "AddressFormat": {
        "type": "string",
        "description": "Format of the blockchain address:\n * EvmCompatible\n * Segwit\n * TronBase58\n * SolanaBase58\n",
        "example": "SolanaBase58"
      },
      "DestinationAddress": {
        "type": "object",
        "properties": {
          "Address": {
            "$ref": "#/components/schemas/Address"
          }
        },
        "description": "A destination address to transfer cryptocurrency",
        "required": ["Address"]
      },
      "Date": {
        "type": "string",
        "format": "date",
        "example": "2024-04-16",
        "minLength": 10,
        "maxLength": 10,
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      },
      "DateTime": {
        "type": "string",
        "format": "date-time",
        "example": "2024-04-16T08:00:55Z"
      },
      "FiatAmount": {
        "type": "object",
        "properties": {
          "Amount": {
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "FiatCurrency": {
            "$ref": "#/components/schemas/FiatCurrencyCode"
          }
        },
        "required": ["Amount", "FiatCurrency"]
      },
      "FiatPaymentStatus": {
        "type": "string",
        "enum": ["Pending", "Failed", "Successful"],
        "example": "Successful"
      },
      "Transaction": {
        "type": "object",
        "properties": {
          "ID": {
            "type": "string",
            "format": "uuid",
            "description": "NOAH's unique identifier for the transaction."
          },
          "PublicID": {
            "$ref": "#/components/schemas/PublicID"
          },
          "Network": {
            "$ref": "#/components/schemas/Network"
          },
          "Created": {
            "$ref": "#/components/schemas/DateTime",
            "description": "When was this transaction created"
          },
          "Status": {
            "$ref": "#/components/schemas/TransactionStatus"
          },
          "Direction": {
            "$ref": "#/components/schemas/TransactionDirection"
          },
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "ExternalID": {
            "$ref": "#/components/schemas/ExternalID"
          },
          "Amount": {
            "description": "The net crypto amount transacted, affecting the balance. This amount **excludes** the `NetworkFee`. For buy transactions, this is the amount after payment fees. For sell transactions, this is the amount before payment fees.",
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "NetworkFee": {
            "description": "Amount paid to cover the onchain network or gas fee associated with the transaction, if applicable.",
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode"
          },
          "DestinationAddress": {
            "$ref": "#/components/schemas/DestinationAddress"
          },
          "FiatPayment": {
            "description": " * For buy transactions, `Transaction.Amount = (FiatPayment.Amount - FiatPayment.FeeAmount) / FiatPayment.Rate`\n * For sell transactions, `Transaction.Amount = (FiatPayment.Amount + FiatPayment.FeeAmount) / FiatPayment.Rate`\n",
            "$ref": "#/components/schemas/FiatPayment"
          },
          "Orchestration": {
            "description": "Orchestration details for the transaction.",
            "$ref": "#/components/schemas/TransactionOrchestration"
          },
          "FiatPaymentMethod": {
            "description": "Information about the fiat payment method used to facilitate this transaction.",
            "$ref": "#/components/schemas/PaymentMethod"
          },
          "Breakdown": {
            "type": "array",
            "description": "This list explains how the transaction amount was calculated.",
            "items": {
              "$ref": "#/components/schemas/TransactionBreakdownItem"
            },
            "x-go-type-skip-optional-pointer": true
          },
          "AdjustmentFor": {
            "description": "Identifies a transaction that this transaction adjusts and details about the adjustment.",
            "$ref": "#/components/schemas/TransactionAdjustment"
          },
          "Refunds": {
            "type": "array",
            "description": "Refund attempts associated with this transaction.",
            "items": {
              "$ref": "#/components/schemas/TransactionRefund"
            },
            "x-go-type-skip-optional-pointer": true
          },
          "Reverses": {
            "type": "string",
            "format": "uuid",
            "description": "If present, this transaction is a reversal of the transaction identified by this ID."
          }
        },
        "required": ["ID", "Network", "Created", "Status", "Direction", "CryptoCurrency"]
      },
      "TransactionRefund": {
        "type": "object",
        "properties": {
          "RefundID": {
            "type": "string",
            "description": "Identifier of the refund payment."
          },
          "RefundedAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Amount requested to refund. May be equal, less or greater than the original amount. It could be greater if the AssetID from refund is different from the AssetID from the original transaction."
          },
          "Currency": {
            "$ref": "#/components/schemas/AssetID",
            "description": "Currency of the refund payment."
          },
          "RequestTime": {
            "$ref": "#/components/schemas/DateTime",
            "description": "Timestamp when the refund was requested."
          },
          "Status": {
            "$ref": "#/components/schemas/TransactionStatus",
            "description": "Status of the refund."
          }
        },
        "required": ["RefundID", "RefundedAmount", "Currency", "RequestTime", "Status"]
      },
      "TransactionBreakdownItem": {
        "type": "object",
        "properties": {
          "Type": {
            "$ref": "#/components/schemas/TransactionBreakdownType"
          },
          "Amount": {
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "FixedAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Fixed base portion of this fee line (same unit as Amount)."
          },
          "VariableAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Variable percentage portion of this fee line (same unit as Amount)."
          }
        },
        "required": ["Type", "Amount"]
      },
      "TransactionAdjustment": {
        "type": "object",
        "properties": {
          "AdjustedTransactionID": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the transaction being adjusted."
          },
          "AdjustmentID": {
            "type": "string",
            "format": "uuid",
            "description": "A unique identifier linking related transactions that are involved in a single Adjustment. For Adjustments involving multiple transactions, this ID is shared across all associated records."
          },
          "Reason": {
            "type": "string",
            "description": "Why the adjustment was made:\n* ExchangeRateCorrection"
          }
        },
        "required": ["AdjustedTransactionID", "AdjustmentID", "Reason"]
      },
      "TransactionBreakdownType": {
        "type": "string",
        "description": "What does the breakdown item amount refer to:\n* ChannelFee: amount withheld by the system from the fiat payment\n* BusinessFee: amount withheld on behalf of the business from its customers transactions\n* Remaining: net amount after all fees have been deducted"
      },
      "Customer": {
        "type": "object",
        "oneOf": [
          {
            "$ref": "#/components/schemas/IndividualCustomer"
          },
          {
            "$ref": "#/components/schemas/BusinessCustomer"
          }
        ],
        "discriminator": {
          "propertyName": "Type",
          "mapping": {
            "Individual": "#/components/schemas/IndividualCustomer",
            "Business": "#/components/schemas/BusinessCustomer"
          }
        }
      },
      "IndividualCustomer": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["Individual"]
          },
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "Created": {
            "$ref": "#/components/schemas/DateTime"
          },
          "DateOfBirth": {
            "$ref": "#/components/schemas/Date"
          },
          "FullName": {
            "$ref": "#/components/schemas/FullName"
          },
          "Identities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerIdentity"
            },
            "x-go-type-skip-optional-pointer": true
          },
          "PrimaryResidence": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "Verifications": {
            "$ref": "#/components/schemas/Verifications"
          },
          "Metadata": {
            "type": "object",
            "description": "Custom user defined key value pairs used for storing additional information about the customer.",
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 10
          }
        },
        "required": [
          "Type",
          "CustomerID",
          "Created",
          "DateOfBirth",
          "FullName",
          "Identities",
          "PrimaryResidence"
        ]
      },
      "BusinessCustomer": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["Business"]
          },
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "Created": {
            "$ref": "#/components/schemas/DateTime"
          },
          "RegisteredName": {
            "type": "string",
            "description": "Name of the business."
          },
          "Email": {
            "type": "string",
            "format": "email",
            "description": "Email address of the business."
          },
          "RegistrationNumber": {
            "type": "string",
            "description": "Registration number of the business."
          },
          "RegistrationCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "RegisteredAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "IncorporationDate": {
            "$ref": "#/components/schemas/Date"
          },
          "Verifications": {
            "$ref": "#/components/schemas/Verifications"
          },
          "Metadata": {
            "type": "object",
            "description": "Custom user defined key value pairs used for storing additional information about the customer.",
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 10
          }
        },
        "required": ["Type", "CustomerID", "Created", "RegisteredName"]
      },
      "FiatPayment": {
        "type": "object",
        "properties": {
          "Amount": {
            "description": "The final amount that has been debited (for buy transactions) or credited (for sell transactions) from the payment method.",
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "FeeAmount": {
            "description": "The fee applied to this payment.",
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "Rate": {
            "description": "Crypto/Fiat exchange rate.",
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "FiatCurrency": {
            "description": "The currency related to the amounts.",
            "$ref": "#/components/schemas/FiatCurrencyCode"
          },
          "FiatDepositID": {
            "description": "The ID of the deposit when the payment originated from a deposit.",
            "type": "string"
          },
          "PaymentSystemID": {
            "description": "The transaction ID in the payment system (e.g., IMAD for Wire, UETR for Swift, Trace Number for ACH).",
            "type": "string"
          }
        },
        "required": ["Amount", "FeeAmount", "FiatCurrency"]
      },
      "ChannelID": {
        "type": "string",
        "format": "uuid",
        "description": "Unique identifier for the channel.",
        "minLength": 36,
        "maxLength": 36
      },
      "IDType": {
        "type": "string",
        "description": "Type of identification document:\n * DrivingLicense\n * NationalIDCard\n * Passport\n * AddressProof\n * ResidencePermit\n * TaxID\n",
        "example": "Passport"
      },
      "IntercomIdentifyHashResponse": {
        "type": "object",
        "properties": {
          "UserHash": {
            "type": "string",
            "description": "Intercom identify hash for the user."
          }
        },
        "required": ["UserHash"]
      },
      "FullName": {
        "type": "object",
        "properties": {
          "FirstName": {
            "type": "string",
            "description": "user's first name",
            "minLength": 1,
            "maxLength": 50
          },
          "LastName": {
            "type": "string",
            "description": "user's last name (family name)",
            "minLength": 1,
            "maxLength": 50
          },
          "MiddleName": {
            "type": "string",
            "description": "user's middle name",
            "minLength": 1,
            "maxLength": 50
          }
        },
        "required": ["FirstName", "LastName"]
      },
      "StreetAddress": {
        "type": "object",
        "description": "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.",
        "properties": {
          "Street": {
            "type": "string",
            "description": "Street: the primary name of an address's street. Printable ASCII only.",
            "minLength": 2,
            "maxLength": 200
          },
          "Street2": {
            "type": "string",
            "description": "Street2: the secondary name of an address's street. Optional. Printable ASCII only."
          },
          "City": {
            "type": "string",
            "description": "City: name of an address's city or town. Printable ASCII only.",
            "minLength": 1,
            "maxLength": 100
          },
          "PostCode": {
            "type": "string",
            "description": "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.",
            "minLength": 1,
            "maxLength": 20
          },
          "State": {
            "type": "string",
            "description": "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.",
            "minLength": 1,
            "maxLength": 100
          },
          "Country": {
            "$ref": "#/components/schemas/CountryCode"
          }
        },
        "required": ["Street", "City", "PostCode", "State", "Country"]
      },
      "AccountHolderDetails": {
        "type": "object",
        "description": "Details of the account holder associated with the payment method.",
        "properties": {
          "Name": {
            "$ref": "#/components/schemas/FullName",
            "description": "Name of the account holder."
          }
        }
      },
      "IssuerDetails": {
        "type": "object",
        "description": "Details of the issuer of the payment method (e.g. the bank for bank transfers).",
        "properties": {
          "Name": {
            "type": "string",
            "description": "Name of the issuer (e.g. the bank or financial institution)."
          }
        }
      },
      "CustomerIdentity": {
        "type": "object",
        "properties": {
          "IssuingCountry": {
            "$ref": "#/components/schemas/CountryCode",
            "description": "Issuing country of the identity, ISO 3166-1 alpha-2 country code."
          },
          "IDNumber": {
            "type": "string",
            "minLength": 1,
            "maxLength": 36
          },
          "IssuedDate": {
            "$ref": "#/components/schemas/Date"
          },
          "ExpiryDate": {
            "$ref": "#/components/schemas/Date"
          },
          "IDType": {
            "$ref": "#/components/schemas/IDType"
          }
        },
        "required": ["IssuingCountry", "IDNumber", "IDType"]
      },
      "Verifications": {
        "type": "object",
        "description": "Verification data for the customer",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["Individual", "Business"]
          },
          "Status": {
            "$ref": "#/components/schemas/EntityVerificationStatus"
          },
          "ActionsRequired": {
            "type": "array",
            "description": "Additional actions currently required from the customer to complete the review.",
            "items": {
              "$ref": "#/components/schemas/VerificationActionRequired"
            }
          },
          "EntityVerifications": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EntityVerification"
            }
          }
        },
        "required": ["Type", "Status", "EntityVerifications"]
      },
      "VerificationActionRequired": {
        "type": "string",
        "enum": [
          "HighRiskInfo",
          "HighRiskInfoSenior",
          "SourceOfWealth",
          "DocumentPageMissing",
          "DocumentReupload",
          "SelfieReupload",
          "ProofOfAddress",
          "ProofOfAddressReupload",
          "IncorrectTaxID"
        ]
      },
      "EntityVerification": {
        "type": "object",
        "description": "Entity-specific verification data for the customer",
        "properties": {
          "Model": {
            "$ref": "#/components/schemas/VerificationModel"
          },
          "Status": {
            "$ref": "#/components/schemas/EntityVerificationStatus"
          },
          "Created": {
            "$ref": "#/components/schemas/DateTime"
          },
          "Modified": {
            "$ref": "#/components/schemas/DateTime"
          },
          "Entity": {
            "$ref": "#/components/schemas/SystemLegalEntity"
          },
          "RejectionData": {
            "$ref": "#/components/schemas/EntityRejectionData"
          }
        },
        "required": ["Entity", "Status", "Created", "Modified", "Model"]
      },
      "SortDirection": {
        "type": "string",
        "enum": ["ASC", "DESC"],
        "description": "Direction of sorting",
        "example": "DESC"
      },
      "ErrorType": {
        "type": "string",
        "description": "Type of error:\n* InvalidMessage\n* Unexpected\n* ResourceNotFound\n* Unauthorized\n* Forbidden\n* InsufficientBalance\n",
        "example": "InvalidMessage"
      },
      "SystemLegalEntity": {
        "type": "string"
      },
      "VerificationModel": {
        "type": "string"
      },
      "EntityVerificationStatus": {
        "type": "string"
      },
      "EntityRejectionData": {
        "type": "object",
        "properties": {
          "RejectType": {
            "type": "string",
            "enum": ["Final", "Retry"]
          },
          "PublicComment": {
            "type": "string"
          }
        },
        "required": ["RejectType"]
      },
      "Error": {
        "type": "object",
        "properties": {
          "Type": {
            "$ref": "#/components/schemas/ErrorType"
          },
          "Instance": {
            "type": "string",
            "description": "A unique reference that identifies the specific occurrence of the problem"
          },
          "Action": {
            "type": "string",
            "description": "Action taking place which resulted in error."
          },
          "Detail": {
            "type": "string",
            "description": "Details about the error."
          },
          "Extensions": {
            "$ref": "#/components/schemas/ErrorExtensions"
          },
          "RequestExtension": {
            "$ref": "#/components/schemas/RequestExtension"
          },
          "DenyExtension": {
            "type": "array",
            "x-go-type-skip-optional-pointer": true,
            "items": {
              "$ref": "#/components/schemas/DenyExtensionItem"
            }
          }
        }
      },
      "RequestExtension": {
        "type": "object",
        "description": "Additional information about the request fields.",
        "properties": {
          "Body": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RequestExtensionItem"
            }
          }
        }
      },
      "RequestExtensionItem": {
        "type": "object",
        "properties": {
          "Field": {
            "type": "string",
            "description": "The full path of the field with error."
          },
          "Reason": {
            "type": "string",
            "description": "What reason the field has error, refers to:\n* IntegrityValidation\n* SchemaValidation"
          },
          "Description": {
            "type": "string",
            "description": "A more detailed description of the problem or the fix."
          }
        },
        "required": ["Reason", "Description"]
      },
      "DenyExtensionItem": {
        "type": "object",
        "properties": {
          "Reason": {
            "type": "string",
            "description": "The reason for the access denial. It can be one of the following:\n* AccountStatus\n* Compliance \n* InsufficientPermissions\n* VerificationRequired"
          },
          "Description": {
            "type": "string",
            "description": "A more detailed description of the problem or the fix."
          },
          "Principal": {
            "$ref": "#/components/schemas/DenyExtensionPrincipal"
          },
          "Resource": {
            "$ref": "#/components/schemas/DenyExtensionResource"
          }
        },
        "required": ["Reason", "Description", "Principal", "Resource"]
      },
      "ErrorExtensions": {
        "type": "object",
        "description": "Additional information about the error.",
        "properties": {
          "Request": {
            "type": "object",
            "description": "Details about invalid request properties.",
            "x-go-type-skip-optional-pointer": true
          },
          "Features": {
            "$ref": "#/components/schemas/ErrorExtensionFeatures"
          }
        }
      },
      "ErrorExtensionFeatures": {
        "type": "object",
        "description": "Details about the disabled feature flags",
        "additionalProperties": {
          "description": "List of reasons",
          "type": "array",
          "items": {
            "type": "string",
            "description": "Type of reason:\n* BetaAccess\n* GloballyDisabled\n* Maintenance\n* RestrictedRegion\n* Kyc\n* Suspended"
          }
        },
        "x-go-type-skip-optional-pointer": true
      },
      "DenyExtensionPrincipal": {
        "type": "object",
        "description": "The principal that was denied access.",
        "properties": {
          "ID": {
            "description": "ID of the principal.",
            "type": "string"
          },
          "Type": {
            "type": "string",
            "description": "Type of principal:\n* User\n* Customer\n"
          },
          "Subtype": {
            "type": "string",
            "description": "Subtype of principal:\n* Individual\n* Business\n"
          }
        },
        "required": ["ID", "Type", "Subtype"]
      },
      "DenyExtensionResourceType": {
        "type": "string",
        "description": "Type of resource that access was denied to."
      },
      "DenyExtensionResource": {
        "type": "object",
        "description": "The resource that access was denied to.",
        "properties": {
          "ID": {
            "description": "ID of the resource.",
            "type": "string"
          },
          "Type": {
            "$ref": "#/components/schemas/DenyExtensionResourceType"
          }
        },
        "required": ["ID", "Type"]
      },
      "CustomerID": {
        "type": "string",
        "description": "A unique ID which identifies the customer in the Business' internal system and in NOAH.",
        "example": "550e8400-e29b-41d4-a716-446655440000",
        "minLength": 1,
        "maxLength": 42
      },
      "DocumentType": {
        "type": "string",
        "enum": [
          "DrivingLicense",
          "NationalIDCard",
          "Passport",
          "UtilityBill",
          "SourceOfFunds",
          "ResidencePermit",
          "ForeignerID",
          "MemorandumAndArticles",
          "ShareholdersExtract",
          "RegistryExtract",
          "DirectorsExtract",
          "OngoingMonitoringProcedure",
          "PEPSanctionsAdverseMediaProcedure",
          "OnboardingKYCAndCIPProcedure",
          "CDDEDDProcedure",
          "SARSTRReportingProcedure",
          "AntiBriberyCorruptionProcedure",
          "AMLTrainingScheduleAndRecords",
          "CorporateShareholderExtract",
          "CertificateOfGoodStanding",
          "CompanyBankStatement",
          "BusinessSourceOfFunds",
          "AMLAuditReport",
          "AMLRemediationPlan",
          "AMLCTFEnterpriseRiskAssessment",
          "BusinessTaxId",
          "AmlCtfPolicy",
          "Selfie",
          "IncumbencyCertificate",
          "InformationStatement",
          "TrustAgreement",
          "BusinessPlan"
        ]
      },
      "DocumentSide": {
        "type": "string",
        "enum": ["Front", "Back"]
      },
      "CustomerInput": {
        "type": "object",
        "oneOf": [
          {
            "$ref": "#/components/schemas/IndividualCustomerInput"
          },
          {
            "$ref": "#/components/schemas/BusinessCustomerInput"
          }
        ],
        "discriminator": {
          "propertyName": "Type",
          "mapping": {
            "Business": "#/components/schemas/BusinessCustomerInput",
            "Individual": "#/components/schemas/IndividualCustomerInput"
          }
        }
      },
      "IndividualCustomerInput": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["Individual"]
          },
          "FullName": {
            "$ref": "#/components/schemas/FullName"
          },
          "DateOfBirth": {
            "$ref": "#/components/schemas/Date"
          },
          "Email": {
            "type": "string",
            "format": "email",
            "description": "Customer's email address."
          },
          "PhoneNumber": {
            "$ref": "#/components/schemas/PhoneNumber"
          },
          "Identities": {
            "type": "array",
            "x-go-type-skip-optional-pointer": true,
            "items": {
              "$ref": "#/components/schemas/CustomerIdentity"
            }
          },
          "PrimaryResidence": {
            "$ref": "#/components/schemas/StreetAddress"
          }
        },
        "required": ["Type", "FullName", "DateOfBirth", "Identities", "PrimaryResidence"]
      },
      "BusinessCustomerInput": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["Business"]
          },
          "RegisteredName": {
            "type": "string",
            "description": "Name of the business.",
            "minLength": 1,
            "maxLength": 100
          },
          "Email": {
            "type": "string",
            "format": "email",
            "description": "Email address of the business."
          },
          "RegistrationNumber": {
            "type": "string",
            "description": "Registration number of the business.",
            "minLength": 1,
            "maxLength": 40
          },
          "EntityType": {
            "$ref": "#/components/schemas/EntityEnum"
          },
          "RegistrationCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "RegisteredAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "IncorporationDate": {
            "$ref": "#/components/schemas/Date"
          }
        },
        "required": [
          "Type",
          "RegistrationNumber",
          "RegistrationCountry",
          "RegisteredAddress",
          "IncorporationDate",
          "RegisteredName",
          "EntityType"
        ]
      },
      "BusinessCustomerPrefill": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["BusinessCustomerPrefill"]
          },
          "RegistrationCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "CompanyName": {
            "type": "string",
            "description": "Name of the company.",
            "minLength": 1,
            "maxLength": 100
          },
          "RegistrationNumber": {
            "type": "string",
            "description": "Registration number of the business.",
            "minLength": 1,
            "maxLength": 100
          },
          "LegalAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "IncorporationDate": {
            "$ref": "#/components/schemas/Date"
          },
          "EntityType": {
            "$ref": "#/components/schemas/EntityEnum"
          },
          "TaxID": {
            "type": "string",
            "description": "Tax ID of the business.",
            "minLength": 1,
            "maxLength": 100
          },
          "PrimaryWebsite": {
            "type": "string",
            "description": "Primary website of the business.",
            "minLength": 1,
            "maxLength": 100
          },
          "NoWebsiteClarification": {
            "type": "string",
            "description": "Explanation of how the company operates without a website. Required when PrimaryWebsite is not provided.",
            "minLength": 1,
            "maxLength": 1000
          },
          "TradeName": {
            "type": "string",
            "description": "Trade name of the business (DBA)."
          },
          "Email": {
            "type": "string",
            "format": "email",
            "description": "Email address of the business."
          },
          "RegisteredForeignBranches": {
            "type": "array",
            "description": "List of your registered foreign branches, including registered country and any applicable registration numbers",
            "items": {
              "$ref": "#/components/schemas/RegisteredForeignBranchesInput"
            }
          },
          "PrimaryPhysicalAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "OwnershipType": {
            "type": "string",
            "description": "Ownership type",
            "enum": [
              "Private",
              "PublicListed",
              "GovernmentOwned",
              "Partnership",
              "SoleProprietorship",
              "NonProfit",
              "Cooperative",
              "JointVenture",
              "ForeignOwned",
              "Subsidiary",
              "TrustOwned",
              "CommunityOwned",
              "FoundationOwned",
              "LLC"
            ]
          },
          "LegalEntityIdentifier": {
            "type": "string",
            "description": "Legal entity identifier (LEI) code of the business."
          },
          "MainBusinessActivity": {
            "type": "string",
            "description": "Main business activity of the company.",
            "enum": [
              "AccountingServices",
              "AffiliateMarketing",
              "AffiliateSoftwareProvider",
              "AgriculturalServices",
              "Airlines",
              "AttorneysLawFirms",
              "Auctioning",
              "AdultEntertainmentContentCreators",
              "AdultEntertainment",
              "BarsRestaurants",
              "BuildersGeneralContractors",
              "Charity",
              "AlcoholTobaccoProducts",
              "CBDHempProducts",
              "ArtsLuxuryItems",
              "ChemicalProducts",
              "ClothingFootwear",
              "CollegesUniversitiesSchools",
              "ComputerSoftware",
              "ConsultingServices",
              "ConstructionServices",
              "CSSkins",
              "Cybersecurity",
              "DataProcessingHosting",
              "DataServicesSolutions",
              "DatingApps",
              "DrugManufacturers",
              "DropShipping",
              "EducationServices",
              "EventPlanning",
              "FinancialInstitution",
              "FoodProducts",
              "FreightTransportationArrangement",
              "FreightTransportationShipping",
              "GasOilProducts",
              "HealthServices",
              "HiringWithoutAuthorization",
              "HoldingCompanyActivities",
              "ITConsulting",
              "ITSoftwareTechnologyProvider",
              "ITServiceProvider",
              "InvestmentServices",
              "MedicalSupplies",
              "MetaversePlatform",
              "NewspaperMagazineBookPublishing",
              "NFTMarketplace",
              "NightClubsStripClubs",
              "NursingHomesHospitals",
              "NutritionalDietarySupplements",
              "OnlineFreelanceMarketplace",
              "OnlineProfessionalServicesMarketplace",
              "OnlineTutoring",
              "PackagingSolutionService",
              "PaymentAgent",
              "PharmaceuticalsProducts",
              "PoliticalOrganisation",
              "UsedAutomobilesAutoParts",
              "NewAutomobilesAutoParts",
              "PurchaseSaleAntiques",
              "PreciousMetalsJewellery",
              "RealEstateRentalLeasing",
              "RecordedMusicProduction",
              "ReligiousOrganization",
              "SalesMarketing",
              "SaleOfWeaponsAmmunition",
              "SEOInternetMarketing",
              "TelemarketingCallCenters",
              "TourOperator",
              "TradeInRealEstate",
              "TravelAgency",
              "VisaForWorkImmigrationConsulting"
            ]
          },
          "DurationOfActivity": {
            "type": "string",
            "description": "Duration of business activity.",
            "enum": ["LessThan1Year", "OneToThreeYears", "MoreThanThreeYears"]
          },
          "TaxResidenceCountry": {
            "$ref": "#/components/schemas/CountryCode",
            "description": "Country of business tax residence."
          },
          "NAICSCode": {
            "type": "string",
            "description": "Please provide your NAICS (North American Industry Classification System) code. If you do not have a NAICS code, please select the closest corresponding code that best matches your industry classification - https://www.naics.com/search/"
          },
          "SourceOfFunds": {
            "type": "string",
            "description": "What will be the source of incoming funds to your account?",
            "enum": [
              "Revenue",
              "Investments",
              "LoansCredits",
              "TradingIncome",
              "CryptoMining",
              "ClientFunds"
            ]
          },
          "FinancialsUsd": {
            "$ref": "#/components/schemas/BusinessFinancialsInput"
          },
          "MonthlyTransactionFrequency": {
            "type": "string",
            "description": "What is the expected frequency of transactions per month?",
            "enum": ["UpTo10", "UpTo20", "UpTo50", "Above50"]
          },
          "DisclaimerSignatoryFullName": {
            "type": "string",
            "description": "Full name of the person signing the declaration/disclaimer for the business questionnaire.",
            "minLength": 1,
            "maxLength": 200
          },
          "Associates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AssociateInformationInput"
            },
            "description": "Information about UBOs (25% of more of ownership) and Representatives."
          },
          "BusinessAssociates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BusinessAssociateInformationInput"
            },
            "description": "Information about Corporate Shareholders (25% of more of ownership)."
          }
        },
        "required": ["Type", "RegistrationCountry"]
      },
      "IndividualCustomerPrefill": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["IndividualCustomerPrefill"]
          },
          "Identities": {
            "type": "array",
            "x-go-type-skip-optional-pointer": true,
            "items": {
              "$ref": "#/components/schemas/CustomerIdentity"
            }
          },
          "PrimaryResidence": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "Citizenship": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "TaxResidenceCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "Email": {
            "type": "string",
            "format": "email",
            "description": "Customer's email address."
          },
          "PhoneNumber": {
            "$ref": "#/components/schemas/PhoneNumber"
          },
          "SourceOfIncome": {
            "type": "string",
            "description": "What's your main source of income?",
            "enum": ["Salary", "Pension", "Investment", "Property", "FriendsAndFamily", "Benefits"]
          },
          "EmploymentStatus": {
            "type": "string",
            "description": "What's your employment status?",
            "enum": ["Employed", "Unemployed", "Retired", "Student", "SelfEmployed"]
          },
          "WorkIndustry": {
            "type": "string",
            "description": "What industry do you work in?",
            "enum": [
              "BankingAndFinancialServices",
              "InvestmentAndSecurities",
              "Insurance",
              "RealEstate",
              "LegalServices",
              "AccountingAndAuditing",
              "GamingAndGambling",
              "MiningAndEnergy",
              "RetailAndECommerce",
              "HealthcareAndPharmaceuticals",
              "GovernmentAndPublicSector",
              "NonProfitAndCharity",
              "TechnologyAndSoftwareDevelopment",
              "TransportationAndLogistics",
              "HospitalityAndTourism"
            ]
          },
          "FinancialsUsd": {
            "$ref": "#/components/schemas/IndividualFinancialsInput"
          },
          "TransactionFrequency": {
            "type": "string",
            "description": "What's your expected frequency of transactions?",
            "enum": [
              "OncePerYear",
              "OnceEveryFewMonths",
              "AFewTimesPerMonth",
              "OncePerWeek",
              "MoreThanOncePerWeek"
            ]
          }
        },
        "required": ["Type"]
      },
      "IndividualCustomerHighRiskPrefill": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["IndividualCustomerHighRiskPrefill"]
          },
          "MainVirtualAccountPurpose": {
            "type": "array",
            "description": "What is the primary purpose of using the virtual account? (select all that apply)",
            "minItems": 1,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "enum": [
                "ReceivingEmployerPayments",
                "ReceivingCustomerPayments",
                "ReceivingFamilyFriendPayments",
                "InvestmentRelatedPayments"
              ]
            }
          },
          "CustomerPaymentsAdvertisement": {
            "type": "string",
            "description": "If receiving payments from customers, specify how your services are advertised."
          },
          "ExpectedCounterpartyCount": {
            "type": "string",
            "description": "How many different counterparties do you expect to send funds into your vIBAN each month?",
            "enum": ["UpTo5", "UpTo10", "UpTo15", "Above15"]
          },
          "ExpectedCounterpartyCountries": {
            "type": "array",
            "description": "Please list the main expected counterparty countries",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/CountryCode"
            }
          },
          "ExpectedTransactionCount": {
            "type": "string",
            "description": "Expected number of incoming transactions per month",
            "enum": ["UpTo5", "UpTo10", "UpTo20", "Above20"]
          },
          "ExpectedTransactionValue": {
            "type": "string",
            "description": "Expected average transaction amount (EUR/USD equivalent)",
            "enum": ["UpTo100", "UpTo500", "UpTo2k", "Above2k"]
          }
        },
        "required": [
          "Type",
          "MainVirtualAccountPurpose",
          "ExpectedCounterpartyCount",
          "ExpectedCounterpartyCountries",
          "ExpectedTransactionCount",
          "ExpectedTransactionValue"
        ]
      },
      "EntityEnum": {
        "type": "string",
        "description": "Entity type for business entities",
        "enum": [
          "LimitedLiabilityCompany",
          "PublicCompany",
          "SoleProprietorship",
          "Partnership",
          "Corporation",
          "Trust",
          "PrivateFoundation",
          "Charity",
          "NonProfitOrganization",
          "PublicAgency"
        ]
      },
      "BusinessCustomerPrefillScreeningInput": {
        "type": "object",
        "properties": {
          "Method": {
            "type": "string",
            "description": "Does the company integrate an automated or manual screening?",
            "enum": ["Automated", "Manual"]
          },
          "System": {
            "type": "string",
            "description": "If the method is Automated, please specify the system/software."
          }
        },
        "required": ["Method"]
      },
      "RegisteredForeignBranchesInput": {
        "type": "object",
        "properties": {
          "Name": {
            "type": "string",
            "description": "Name of the registered foreign branch."
          },
          "RegistrationCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "RegistrationNumber": {
            "type": "string",
            "description": "Registration number of the registered foreign branch."
          }
        }
      },
      "BusinessAssociateInformationInput": {
        "type": "object",
        "properties": {
          "ID": {
            "type": "string",
            "format": "uuid",
            "description": "Shareholder ID."
          },
          "RegistrationCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "CompanyName": {
            "type": "string",
            "description": "Shareholders company name."
          },
          "RegistrationNumber": {
            "type": "string",
            "description": "Shareholders registration number."
          },
          "EntityType": {
            "$ref": "#/components/schemas/EntityEnum"
          },
          "IncorporationDate": {
            "$ref": "#/components/schemas/Date"
          },
          "OwnershipPercentage": {
            "type": "integer",
            "description": "Shareholders ownership percentage.",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": ["ID", "RegistrationCountry"]
      },
      "IndividualFinancialsInput": {
        "type": "object",
        "properties": {
          "AnnualDeposit": {
            "type": "string",
            "description": "What's your expected annual deposit?",
            "enum": ["LessThan5k", "5kTo50k", "50kTo150k", "MoreThan150k"]
          }
        }
      },
      "BusinessFinancialsInput": {
        "type": "object",
        "properties": {
          "EstimatedMonthlyTurnover": {
            "type": "string",
            "description": "What is the estimated monthly turnover for your account, including both incoming and outgoing transactions?",
            "enum": ["UpTo15k", "UpTo50k", "UpTo100k", "UpTo500k", "Above500k"]
          },
          "EstimatedTransactionValue": {
            "type": "string",
            "description": "Please specify the planned value of one-time transaction:",
            "enum": ["UpTo5k", "UpTo15k", "UpTo50k", "UpTo100k", "Above100k"]
          }
        }
      },
      "AssociateInformationInput": {
        "type": "object",
        "properties": {
          "ID": {
            "type": "string",
            "format": "uuid",
            "description": "Associate ID."
          },
          "RelationshipTypes": {
            "type": "array",
            "description": "Relationship types.",
            "items": {
              "type": "string",
              "enum": ["UBO", "Representative", "Director"]
            }
          },
          "FullName": {
            "$ref": "#/components/schemas/FullName"
          },
          "Identities": {
            "type": "array",
            "x-go-type-skip-optional-pointer": true,
            "items": {
              "$ref": "#/components/schemas/CustomerIdentity"
            }
          },
          "TaxResidenceCountry": {
            "$ref": "#/components/schemas/CountryCode"
          },
          "Citizenship": {
            "$ref": "#/components/schemas/CountryCode",
            "description": "ISO 3166-1 alpha-2 country code of the associate's citizenship."
          },
          "Email": {
            "type": "string",
            "format": "email",
            "description": "Associate's email address.",
            "minLength": 1,
            "maxLength": 100
          },
          "PhoneNumber": {
            "$ref": "#/components/schemas/PhoneNumber"
          },
          "ResidentialAddress": {
            "$ref": "#/components/schemas/StreetAddress"
          },
          "UBO": {
            "$ref": "#/components/schemas/UBOInformationInput"
          },
          "Token": {
            "type": "string",
            "description": "SumSub share token. When provided, the associate's applicant is imported from the shared token instead of being created from scratch."
          }
        },
        "required": ["ID", "RelationshipTypes"]
      },
      "UBOInformationInput": {
        "type": "object",
        "properties": {
          "OwnershipPercentage": {
            "type": "integer",
            "description": "Percentage of ownership held by the UBO.",
            "minimum": 0,
            "maximum": 100
          }
        }
      },
      "CheckoutSession": {
        "type": "object",
        "properties": {
          "CheckoutSessionID": {
            "type": "string",
            "description": "Unique ID of session."
          },
          "PaymentMethodCategory": {
            "$ref": "#/components/schemas/PaymentMethodCategory"
          },
          "SourceCurrency": {
            "$ref": "#/components/schemas/AssetID"
          },
          "DestinationCurrency": {
            "$ref": "#/components/schemas/AssetID"
          },
          "SourceAmount": {
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "DestinationAmount": {
            "$ref": "#/components/schemas/PositiveDecimal"
          },
          "AuthorizedAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Maximum amount that can be charged for this transaction."
          },
          "Status": {
            "type": "string",
            "description": "Status of CheckoutSession:\n* Pending\n* Failed\n* Settled\n\nNote: other statuses could be added in the future"
          },
          "ExternalID": {
            "type": "string",
            "description": "Unique identifier in user's system."
          },
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "ReturnURL": {
            "$ref": "#/components/schemas/ReturnURL",
            "description": "The URL to which the user is redirected at the end of the Hosted Checkout session. We will include the CheckoutSessionID, ExternalID and Status of the session, ie `?CheckoutSessionID={CheckoutSessionID}&ExternalID={ExternalID}&Status={Status}`"
          },
          "LineItems": {
            "$ref": "#/components/schemas/LineItems"
          },
          "Type": {
            "type": "string",
            "description": "Type of checkout session:\n* PayinCrypto\n* PayinFiat\n* PayoutFiat\n"
          },
          "Expiry": {
            "type": "string",
            "format": "date-time",
            "description": "Time the checkout expires (example: 2020-01-01T00:00:00Z)"
          },
          "Created": {
            "type": "string",
            "format": "date-time",
            "description": "Time the checkout was created (example: 2020-01-01T00:00:00Z)"
          }
        },
        "required": [
          "CheckoutSessionID",
          "CustomerID",
          "Status",
          "Created",
          "ReturnURL",
          "SourceCurrency",
          "DestinationCurrency",
          "LineItems",
          "Type"
        ]
      },
      "BankDepositToOnchainAddressHostedRequest": {
        "type": "object",
        "properties": {
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "ReturnURL": {
            "$ref": "#/components/schemas/ReturnURL"
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode",
            "deprecated": true,
            "description": "Deprecated: Use UI.CryptoOptions instead. Will be removed in a future version."
          },
          "Network": {
            "$ref": "#/components/schemas/Network",
            "deprecated": true,
            "description": "Deprecated: Use UI.CryptoOptions instead. Will be removed in a future version."
          },
          "DestinationAddress": {
            "$ref": "#/components/schemas/DestinationAddress"
          },
          "FiatOptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FiatOption"
            },
            "description": "Restricts fiat channels available in this hosted session.",
            "x-go-type-skip-optional-pointer": true
          },
          "UI": {
            "$ref": "#/components/schemas/BankToAddressUI"
          },
          "Metadata": {
            "type": "object",
            "description": "Custom user defined key value pairs used for storing additional information.",
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 10
          },
          "BusinessFees": {
            "type": "object",
            "description": "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.",
            "additionalProperties": {
              "$ref": "#/components/schemas/BusinessFeeInput"
            },
            "example": {
              "BankAch": {
                "FeePct": "0.2"
              },
              "BankFedwire": {
                "FeeBase": "5",
                "FeePct": "0.1",
                "FiatCurrency": "USD"
              }
            }
          }
        },
        "required": ["ReturnURL", "CustomerID", "DestinationAddress", "FiatOptions"]
      },
      "OnchainDepositToPaymentMethodHostedRequest": {
        "type": "object",
        "properties": {
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "ReturnURL": {
            "$ref": "#/components/schemas/ReturnURL"
          },
          "ChannelID": {
            "$ref": "#/components/schemas/ChannelID"
          },
          "FiatAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Amount sent to customer's payment method."
          },
          "Network": {
            "$ref": "#/components/schemas/Network"
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode"
          },
          "ExternalID": {
            "$ref": "#/components/schemas/ExternalID"
          },
          "Metadata": {
            "type": "object",
            "description": "Custom user defined key value pairs used for storing additional information.",
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 10
          },
          "BusinessFee": {
            "$ref": "#/components/schemas/BusinessFeeInput"
          }
        },
        "required": ["ReturnURL", "CustomerID", "ChannelID", "CryptoCurrency", "Network"]
      },
      "RecoveryHostedRequest": {
        "type": "object",
        "properties": {
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "ReturnURL": {
            "$ref": "#/components/schemas/ReturnURL"
          },
          "FiatOptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FiatOption"
            },
            "description": "Restricts fiat channels available in this hosted session.",
            "x-go-type-skip-optional-pointer": true
          }
        },
        "required": ["ReturnURL", "CustomerID"]
      },
      "CustomerFormRequest": {
        "type": "object",
        "properties": {
          "ReturnURL": {
            "$ref": "#/components/schemas/ReturnURL"
          },
          "FiatOptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FiatOption"
            },
            "description": "Restricts fiat channels available in this hosted session.",
            "x-go-type-skip-optional-pointer": true
          },
          "FormInput": {
            "$ref": "#/components/schemas/FormInput"
          }
        },
        "required": ["ReturnURL", "FiatOptions"]
      },
      "HostedSessionResponse": {
        "type": "object",
        "properties": {
          "HostedURL": {
            "type": "string",
            "format": "uri",
            "description": "URL to redirect the customer to hosted session."
          },
          "FormSchema": {
            "$ref": "#/components/schemas/FormSchema",
            "description": "[JSONForm](https://jsonforms.io/) schema for the verification fields. If unable to provide, a hosted session is provided via the HostedURL."
          },
          "OnboardingStatus": {
            "$ref": "#/components/schemas/OnboardingStatus",
            "description": "Indicates the current status of the onboarding process."
          },
          "MissingSteps": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "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": {
            "$ref": "#/components/schemas/Verifications",
            "description": "Current verification state for the customer, including all available required entity verifications. Only shown if a customer was already created via token sharing or previous onboardings."
          }
        },
        "required": ["HostedURL"]
      },
      "HostedURLResponse": {
        "type": "object",
        "properties": {
          "HostedURL": {
            "type": "string",
            "format": "uri",
            "description": "URL to redirect the customer to the hosted session."
          }
        },
        "required": ["HostedURL"]
      },
      "OnboardingStatus": {
        "type": "string",
        "enum": [
          "ReviewNotStarted",
          "ReviewPending",
          "DocumentInvalid",
          "AgreementsRequired",
          "Rejected"
        ],
        "description": "Indicates the current status of the onboarding process.\n\n* `ReviewNotStarted` - Onboarding has not started check missing steps.\n* `ReviewPending` - KYC review is in progress; no action is required from the business, you should wait webhook for status change.\n* `DocumentInvalid` - A document was rejected and resubmission is required.\n* `AgreementsRequired` - Required agreements have not been accepted.\n* `Rejected` - The customer has been permanently rejected and cannot be onboarded."
      },
      "HostedOnboardingRequest": {
        "type": "object",
        "properties": {
          "Metadata": {
            "type": "object",
            "description": "Custom user defined key value pairs used for storing additional information.",
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 10
          },
          "ReturnURL": {
            "$ref": "#/components/schemas/ReturnURL"
          },
          "FiatOptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FiatOption"
            },
            "description": "Specifies fiat channels the customer will be onboarded to.",
            "x-go-type-skip-optional-pointer": true
          },
          "Form": {
            "$ref": "#/components/schemas/FormInput"
          },
          "CustomerType": {
            "type": "string",
            "enum": ["Individual", "Business"],
            "description": "Type of customer to onboard. Defaults to Individual if not provided."
          }
        },
        "required": ["ReturnURL", "FiatOptions"]
      },
      "PrefillOnboardingRequest": {
        "type": "object",
        "oneOf": [
          {
            "$ref": "#/components/schemas/SumSubToken"
          },
          {
            "$ref": "#/components/schemas/BusinessCustomerPrefill"
          },
          {
            "$ref": "#/components/schemas/IndividualCustomerPrefill"
          },
          {
            "$ref": "#/components/schemas/IndividualCustomerHighRiskPrefill"
          }
        ],
        "discriminator": {
          "propertyName": "Type",
          "mapping": {
            "SumSubToken": "#/components/schemas/SumSubToken",
            "BusinessCustomerPrefill": "#/components/schemas/BusinessCustomerPrefill",
            "IndividualCustomerPrefill": "#/components/schemas/IndividualCustomerPrefill",
            "IndividualCustomerHighRiskPrefill": "#/components/schemas/IndividualCustomerHighRiskPrefill"
          }
        }
      },
      "SumSubToken": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["SumSubToken"]
          },
          "Token": {
            "type": "string",
            "description": "Sumsub token to share applicant."
          }
        },
        "required": ["Type", "Token"]
      },
      "PrefillDocumentUploadURLResponse": {
        "type": "object",
        "properties": {
          "PresignedURL": {
            "type": "string",
            "format": "uri",
            "description": "URL to upload the document."
          },
          "ExpiresAt": {
            "$ref": "#/components/schemas/DateTime",
            "description": "DateTime the presigned URL expires."
          }
        },
        "required": ["PresignedURL", "ExpiresAt"]
      },
      "CheckoutSessionResponse": {
        "type": "object",
        "properties": {
          "HostedURL": {
            "type": "string",
            "format": "uri",
            "description": "URL to redirect the customer to the checkout page."
          },
          "CheckoutSession": {
            "$ref": "#/components/schemas/CheckoutSession"
          }
        },
        "required": ["HostedURL", "CheckoutSession"]
      },
      "CheckoutManageRequest": {
        "type": "object",
        "properties": {
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          }
        },
        "required": ["CustomerID"]
      },
      "LineItem": {
        "type": "object",
        "properties": {
          "Description": {
            "type": "string",
            "description": "Description of the line item.",
            "minLength": 1,
            "maxLength": 140
          },
          "Quantity": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Quantity of the line item. Must be greater than zero."
          },
          "UnitAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Amount of a single unit of the line item. Must be in the same currency as the transaction."
          },
          "TotalAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Total amount of the line item (UnitAmount * Quantity). Must be in the same currency as the transaction."
          }
        },
        "required": ["Description", "Quantity", "UnitAmount", "TotalAmount"]
      },
      "LineItems": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/LineItem"
        },
        "minItems": 1,
        "maxItems": 120
      },
      "Webhook": {
        "type": "object",
        "properties": {
          "EventType": {
            "type": "string",
            "description": "Type of the event being sent:\n * Transaction\n * FiatDeposit\n * CheckoutSession\n"
          },
          "EventVersion": {
            "type": "integer",
            "format": "int64",
            "description": "Version of the event",
            "example": 0
          },
          "Occurred": {
            "$ref": "#/components/schemas/DateTime",
            "description": "Time the event occurred"
          },
          "Data": {
            "type": "object",
            "description": "Data specific to the event.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/Transaction"
              },
              {
                "$ref": "#/components/schemas/FiatDeposit"
              },
              {
                "$ref": "#/components/schemas/CheckoutSession"
              },
              {
                "$ref": "#/components/schemas/Customer"
              }
            ]
          },
          "UserID": {
            "type": "string",
            "description": "User ID of the event."
          }
        },
        "required": ["EventType", "EventVersion", "Occurred", "Data", "UserID"]
      },
      "StepDecimalOperation": {
        "type": "object",
        "properties": {
          "Operator": {
            "type": "string",
            "enum": ["Add", "Sub", "Mul"]
          },
          "Value": {
            "type": "string",
            "example": "../Value",
            "description": "Decimal or output reference."
          }
        },
        "required": ["Operator", "Value"]
      },
      "StepDecimal": {
        "type": "object",
        "description": "Select a fixed amount, an input or a decimal operation with the two",
        "properties": {
          "Value": {
            "type": "string",
            "example": "../Amount",
            "description": "Decimal or output reference."
          },
          "Operations": {
            "type": "array",
            "description": "Operations are applied to `StepDecimal.Value` in the order they appear in the array.",
            "items": {
              "$ref": "#/components/schemas/StepDecimalOperation"
            },
            "x-go-type-skip-optional-pointer": true
          }
        },
        "required": ["Value"]
      },
      "ComparisonOperator": {
        "type": "string",
        "enum": ["EQ", "LTEQ", "GTEQ"],
        "description": "Comparison operator for the field value:\n * EQ (Equals)\n * LTEQ (Less Than Or Equals)\n * GTEQ (Greater Than Or Equals)\n"
      },
      "DepositDestinationTriggerInput": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["DepositDestinationTriggerInput"]
          },
          "Amount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "Amount deposited"
          },
          "CryptoCurrency": {
            "$ref": "#/components/schemas/CryptoCurrencyCode",
            "description": "Cryptocurrency to sell."
          },
          "Network": {
            "$ref": "#/components/schemas/Network",
            "description": "UTXO network(prod/sandbox):\n * Bitcoin/BitcoinTest\n"
          },
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID"
          },
          "RefundAddress": {
            "$ref": "#/components/schemas/DestinationAddress",
            "description": "Address for refunds in case actions were not executed successfully."
          },
          "DepositAddress": {
            "$ref": "#/components/schemas/DestinationAddress",
            "description": "Address generated for the deposit trigger."
          }
        },
        "required": ["Type", "Amount", "CryptoCurrency", "DepositAddress", "RefundAddress"]
      },
      "SingleOnchainDepositSourceTriggerInput": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["SingleOnchainDepositSourceTriggerInput"]
          },
          "Conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OnchainDepositSourceTriggerConditionInput"
            },
            "description": "Conditions that trigger the rule."
          },
          "SourceAddress": {
            "$ref": "#/components/schemas/Address",
            "description": "Address in depositor's custody from which the deposit was made. Used for matching the deposit.",
            "example": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
          },
          "Expiry": {
            "$ref": "#/components/schemas/DateTime"
          },
          "Nonce": {
            "$ref": "#/components/schemas/Nonce"
          }
        },
        "required": ["Type", "Conditions", "SourceAddress", "Expiry", "Nonce"]
      },
      "PermanentOnchainDepositSourceTriggerInput": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["PermanentOnchainDepositSourceTriggerInput"]
          },
          "SourceAddress": {
            "$ref": "#/components/schemas/Address",
            "description": "Address in depositor's custody from which the deposit was made. Used for matching the deposit."
          },
          "Conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OnchainDepositSourceTriggerNetworkConditionInput"
            },
            "description": "Conditions that trigger the rule."
          },
          "NetworkAgnostic": {
            "type": "boolean",
            "description": "If true, match deposits to the returned destination address from any network. Default to false.",
            "default": false
          }
        },
        "required": ["Type", "SourceAddress", "Conditions", "NetworkAgnostic"]
      },
      "QuotedOnchainDepositSourceTriggerInput": {
        "type": "object",
        "description": "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.",
        "properties": {
          "Type": {
            "type": "string",
            "enum": ["QuotedOnchainDepositSourceTriggerInput"]
          },
          "SignedQuote": {
            "type": "string",
            "maxLength": 4096,
            "description": "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."
          },
          "Conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OnchainDepositSourceTriggerNetworkConditionInput"
            },
            "description": "Networks on which the deposit may arrive. Amount and currency are derived server-side from the bound quote token; do not specify AmountConditions."
          },
          "SourceAddress": {
            "$ref": "#/components/schemas/Address",
            "description": "Address in depositor's custody from which the deposit was made. Used for matching the deposit.",
            "example": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
          },
          "Expiry": {
            "$ref": "#/components/schemas/DateTime",
            "description": "Optional orchestration expiry. Defaults to the quote expiry. Set this if you want to fallback to current market rate after the quote expiry."
          }
        },
        "required": ["Type", "SignedQuote", "SourceAddress", "Conditions"]
      },
      "FiatDepositSimulateRequest": {
        "type": "object",
        "properties": {
          "PaymentMethodID": {
            "$ref": "#/components/schemas/PaymentMethodID"
          },
          "FiatAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The amount of the deposit."
          },
          "FiatCurrency": {
            "$ref": "#/components/schemas/FiatCurrencyCode"
          },
          "Reference": {
            "type": "string",
            "description": "Optional reference of the deposit for testing purposes."
          }
        },
        "required": ["PaymentMethodID", "FiatAmount", "FiatCurrency"]
      },
      "FiatDepositSimulateResponse": {
        "type": "object",
        "properties": {
          "FiatDepositID": {
            "type": "string"
          }
        },
        "required": ["FiatDepositID"]
      },
      "TransactionOrchestration": {
        "type": "object",
        "properties": {
          "RuleID": {
            "type": "string",
            "description": "Unique identifier for the rule that is matched for the transaction."
          },
          "RuleExecutionID": {
            "type": "string",
            "description": "Unique identifier for the execution of the rules that is matched for the transaction."
          }
        },
        "description": "Orchestration details for the transaction.",
        "required": ["RuleID", "RuleExecutionID"]
      },
      "FiatDeposit": {
        "type": "object",
        "properties": {
          "ID": {
            "type": "string",
            "description": "Unique identifier of the fiat deposit."
          },
          "Created": {
            "$ref": "#/components/schemas/DateTime",
            "description": "When was this fiat deposit created."
          },
          "FiatAmount": {
            "$ref": "#/components/schemas/PositiveDecimal",
            "description": "The amount of the deposit."
          },
          "FiatCurrency": {
            "$ref": "#/components/schemas/FiatCurrencyCode",
            "description": "The currency of the deposit."
          },
          "Reference": {
            "type": "string",
            "description": "Reference of the deposit."
          },
          "Status": {
            "$ref": "#/components/schemas/FiatDepositStatus",
            "description": "Status of the deposit."
          },
          "CustomerID": {
            "$ref": "#/components/schemas/CustomerID",
            "description": "Customer ID of the deposit."
          },
          "PaymentMethodID": {
            "$ref": "#/components/schemas/PaymentMethodID",
            "description": "Identifier of the payment method that received the deposit."
          },
          "PaymentMethodType": {
            "$ref": "#/components/schemas/PaymentMethodType"
          },
          "PaymentSystemID": {
            "type": "string",
            "description": "The transaction ID in the payment system (e.g., IMAD for Wire, UETR for Swift, Trace Number for ACH)."
          },
          "Description": {
            "type": "string",
            "description": "Human-readable description of the transaction as provided by the finservice (e.g., ACH transaction description)."
          },
          "Sender": {
            "$ref": "#/components/schemas/SenderPaymentMethod",
            "description": "Sender's fiat payment method."
          },
          "Refunds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FiatPaymentRefund"
            },
            "description": "Fiat deposit refunds if any exists"
          }
        },
        "description": "Details of a fiat deposit received by NOAH.",
        "required": [
          "ID",
          "Created",
          "FiatAmount",
          "FiatCurrency",
          "Status",
          "Sender",
          "PaymentMethodID",
          "PaymentMethodType",
          "Refunds"
        ]
      },
      "FiatDepositStatus": {
        "type": "string",
        "enum": ["Pending", "Failed", "Settled"],
        "description": "Statuses for a FiatDeposit.",
        "example": "Settled"
      },
      "Agreement": {
        "type": "object",
        "properties": {
          "Name": {
            "type": "string",
            "enum": [
              "NoahPrivacyPolicy",
              "NoahTermsOfService",
              "NoahEsignAgreement",
              "LeadBankFundTransfer",
              "LeadBankTermsAndConditions",
              "LeadBankBusinessFundTransfer"
            ]
          },
          "Version": {
            "type": "integer"
          },
          "Accepted": {
            "type": "boolean",
            "enum": [true],
            "description": "Whether the agreement has been accepted."
          },
          "AcceptedAt": {
            "$ref": "#/components/schemas/DateTime",
            "description": "When the agreement was accepted."
          }
        },
        "required": ["Name", "Version", "Accepted", "AcceptedAt"]
      },
      "Description": {
        "type": "string",
        "maxLength": 200,
        "description": "Optional description of the payment.",
        "example": "25 Arks"
      },
      "Metadata": {
        "type": "object",
        "description": "Optional key-value metadata to store additional information about the payment.",
        "additionalProperties": {
          "type": "string"
        },
        "example": {
          "customer_name": "John Doe"
        }
      },
      "CancelURL": {
        "type": "string",
        "format": "uri",
        "example": "https://merchant.com/payment/cancel"
      },
      "PaymentURL": {
        "type": "string",
        "format": "uri",
        "description": "PSP payment page URL returned for the payer to complete the payment.",
        "example": "https://payment.com/payment/1234567890"
      },
      "Psp": {
        "type": "string",
        "enum": ["CryptoCom"],
        "description": "Payment service provider used for the PSP payment.",
        "example": "CryptoCom"
      },
      "PublicID": {
        "type": "string",
        "description": "The public blockchain transaction id or hash. This identifier is only available for transactions that are broadcast to a public network."
      },
      "PspRawEvent": {
        "type": "object",
        "description": "Raw PSP payment payload.",
        "additionalProperties": true
      },
      "WalletAddress": {
        "type": "string",
        "example": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
        "description": "Merchant's destination wallet address for the payout."
      },
      "DestinationCryptoCurrency": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CryptoCurrencyCode"
          }
        ],
        "description": "Cryptocurrency that will be paid out to the merchant's destination address."
      },
      "MerchantID": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CustomerID"
          }
        ],
        "description": "A unique ID which identifies the merchant in NOAH and the PSP."
      },
      "PricingAmount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PositiveDecimal"
          }
        ],
        "description": "Amount to be displayed to the payer during the payment process."
      },
      "PricingCurrency": {
        "allOf": [
          {
            "$ref": "#/components/schemas/AssetID"
          }
        ],
        "description": "Currency to be displayed to the payer during the payment process."
      },
      "PaymentExpiry": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DateTime"
          }
        ],
        "description": "Expiry time of the payment session."
      },
      "PspToOnchainRequest": {
        "type": "object",
        "properties": {
          "Psp": {
            "$ref": "#/components/schemas/Psp"
          },
          "MerchantID": {
            "$ref": "#/components/schemas/MerchantID"
          },
          "PricingAmount": {
            "$ref": "#/components/schemas/PricingAmount"
          },
          "PricingCurrency": {
            "$ref": "#/components/schemas/PricingCurrency"
          },
          "Description": {
            "$ref": "#/components/schemas/Description"
          },
          "Metadata": {
            "$ref": "#/components/schemas/Metadata"
          },
          "ReturnURL": {
            "$ref": "#/components/schemas/ReturnURL",
            "description": "The URL which the payer is redirected to after completing the payment."
          },
          "DestinationCryptoCurrency": {
            "$ref": "#/components/schemas/DestinationCryptoCurrency"
          },
          "DestinationNetwork": {
            "$ref": "#/components/schemas/Network"
          },
          "DestinationAddress": {
            "$ref": "#/components/schemas/WalletAddress"
          },
          "Expiry": {
            "$ref": "#/components/schemas/PaymentExpiry"
          },
          "ExternalID": {
            "$ref": "#/components/schemas/ExternalID"
          },
          "MerchantDisplayName": {
            "type": "string",
            "minLength": 3,
            "maxLength": 100,
            "description": "Custom Merchant name displayed to the customer during checkout. Length must be between 3 and 100 characters. The following characters are not allowed: =, +, @, |, \".",
            "example": "Noah's Store"
          },
          "Nonce": {
            "$ref": "#/components/schemas/Nonce"
          }
        },
        "required": [
          "Psp",
          "MerchantID",
          "PricingAmount",
          "PricingCurrency",
          "DestinationCryptoCurrency",
          "DestinationNetwork",
          "DestinationAddress",
          "Nonce"
        ]
      },
      "PspToOnchainResponse": {
        "type": "object",
        "properties": {
          "Psp": {
            "$ref": "#/components/schemas/Psp"
          },
          "MerchantID": {
            "$ref": "#/components/schemas/MerchantID"
          },
          "ID": {
            "type": "string",
            "description": "The unique identifier for the psp to onchain payment workflow",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "PaymentID": {
            "type": "string",
            "description": "The payment identifier returned by the payment service provider.",
            "example": "d413c708-4b37-4f16-bc3c-7c3056b0a8e3"
          },
          "FiatDepositID": {
            "type": "string",
            "description": "Reference to the fiat deposit that was created for the payment."
          },
          "WithdrawOrderID": {
            "type": "string",
            "description": "Reference to the orchestration withdrawal that pays out to the merchant's destination address."
          },
          "PublicID": {
            "$ref": "#/components/schemas/PublicID",
            "example": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
          },
          "SourceAddress": {
            "$ref": "#/components/schemas/Address",
            "description": "Noah wallet address from which the on-chain payout was sent.",
            "example": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
          },
          "ExternalID": {
            "$ref": "#/components/schemas/ExternalID"
          },
          "Status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TransactionStatus"
              }
            ],
            "description": "Combined workflow status derived from the payment and withdrawal statuses."
          },
          "PaymentStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TransactionStatus"
              }
            ],
            "description": "PSP payment status from the payment service provider."
          },
          "WithdrawStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TransactionStatus"
              }
            ],
            "description": "Withdrawal status from the orchestration execution."
          },
          "PaymentURL": {
            "$ref": "#/components/schemas/PaymentURL"
          },
          "PricingAmount": {
            "$ref": "#/components/schemas/PricingAmount"
          },
          "PricingCurrency": {
            "$ref": "#/components/schemas/PricingCurrency"
          },
          "DestinationCryptoCurrency": {
            "$ref": "#/components/schemas/DestinationCryptoCurrency"
          },
          "DestinationNetwork": {
            "$ref": "#/components/schemas/Network"
          },
          "DestinationAddress": {
            "$ref": "#/components/schemas/WalletAddress"
          },
          "Created": {
            "$ref": "#/components/schemas/DateTime",
            "description": "Timestamp when the PSP payment record was created in Noah."
          },
          "Updated": {
            "$ref": "#/components/schemas/DateTime",
            "description": "Timestamp when the PSP payment record was last updated in Noah."
          },
          "Expiry": {
            "$ref": "#/components/schemas/PaymentExpiry"
          },
          "PspRawEvent": {
            "$ref": "#/components/schemas/PspRawEvent"
          },
          "RefundAddress": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WalletAddress"
              }
            ],
            "description": "The onchain deposit address used to initiate the PSP refund."
          },
          "Refunds": {
            "type": "array",
            "description": "Refund attempts associated with this PSP payment.",
            "items": {
              "$ref": "#/components/schemas/TransactionRefund"
            },
            "x-go-type-skip-optional-pointer": true
          }
        },
        "required": [
          "ID",
          "Psp",
          "PaymentID",
          "MerchantID",
          "PaymentURL",
          "PricingAmount",
          "PricingCurrency",
          "Status",
          "DestinationCryptoCurrency",
          "DestinationNetwork",
          "DestinationAddress",
          "Created",
          "Updated",
          "PspRawEvent"
        ]
      }
    },
    "callbacks": {
      "PaymentCallback": {
        "/": {
          "post": {
            "summary": "Payment status update notification",
            "description": "Send a callback to the specified URL when the payment status updates.",
            "requestBody": {
              "required": true,
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Webhook"
                  }
                }
              }
            },
            "responses": {
              "200": {
                "description": "Callback received successfully"
              }
            },
            "parameters": [
              {
                "in": "header",
                "name": "Webhook-Signature",
                "required": true,
                "description": "Digital signature generated by the sender",
                "schema": {
                  "type": "string"
                }
              }
            ]
          }
        }
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "description": "This security scheme requires an API Key to successfully authenticate.",
        "in": "header",
        "name": "X-Api-Key",
        "type": "apiKey"
      }
    }
  },
  "tags": [
    {
      "name": "Payin",
      "description": "Resources that are related to Payin."
    },
    {
      "name": "Payout",
      "description": "Resources that are related to Payout."
    },
    {
      "name": "Transactions",
      "description": "Resources that are related to transactions."
    },
    {
      "name": "Onboarding",
      "description": "Resources that are related to Onboarding."
    },
    {
      "name": "PSP Payments",
      "description": "Resources that are related to PSP Payments."
    }
  ],
  "paths": {
    "/help/{CustomerID}": {
      "post": {
        "summary": "Help Desk Session",
        "description": "This endpoint creates a help desk session for the customer.",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "path",
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            },
            "required": true
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ReturnURL": {
                    "$ref": "#/components/schemas/ReturnURL"
                  }
                },
                "required": ["ReturnURL"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Help Desk Session",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostedSessionResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/balances": {
      "get": {
        "summary": "Balances",
        "description": "This endpoint retrieves a paginated list of balances for the Business User's account.",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "PageSize",
            "in": "query",
            "example": "10",
            "schema": {
              "type": "integer",
              "default": 20
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageSize"
            }
          },
          {
            "name": "PageToken",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageToken"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of balances",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetBalancesResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/channels/{ChannelID}/form": {
      "get": {
        "summary": "Dynamic Form",
        "description": "This endpoint provides a [JSONForm](https://jsonforms.io/) schema needed to configure payment methods for transactions on a specified channel. Use this schema to dynamically generate forms based on the selected payment method. The `ChannelID` parameter, obtainable from the Supported Channels endpoint, specifies the target channel for which the form is generated.\n\nFollow the step-by-step guides:\n * [Direct Payout to US Business](/recipes/payout/global-payouts-business)\n * [Direct Payout to Individual Customer](/recipes/payout/global-payouts-individual)\n\n**Note:** It is not possible to fetch schemas for channels where the `PaymentMethodType` is set to `TokenizedCard`, as the API does not directly accept credit card details. For credit card payments, refer to the [Hosted Checkout](/recipes/payout/hosted-checkout) solution.",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "ChannelID",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ChannelID"
            }
          },
          {
            "name": "CustomerID",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "name": "PaymentMethodID",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/PaymentMethodID"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Payment method form schema",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetFormResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/channels/{ChannelID}": {
      "get": {
        "summary": "Get Channel by ID",
        "description": "This endpoint retrieves detailed information about a specific channel by its ID.\n\nThe endpoint returns a single channel with calculated fees, limits, and processing information for the specified cryptocurrency and optional fiat amount.\n\nUse this endpoint when you know the specific channel ID and want to get detailed information about that channel.",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "ChannelID",
            "in": "path",
            "required": true,
            "description": "The ID of the channel to retrieve",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "CryptoCurrency",
            "in": "query",
            "required": true,
            "example": "BTC",
            "description": "Cryptocurrency (prod/sandbox):\n * BTC/BTC_TEST\n * USDC/USDC_TEST\n",
            "schema": {
              "$ref": "#/components/schemas/CryptoCurrencyCode"
            }
          },
          {
            "name": "FiatAmount",
            "in": "query",
            "description": "The fiat amount for which to calculate channel details and fees",
            "schema": {
              "$ref": "#/components/schemas/PositiveDecimal"
            }
          },
          {
            "name": "CustomerID",
            "in": "query",
            "description": "Customer ID for personalized channel information and payment methods",
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Channel details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Channel"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "404": {
            "description": "Channel not found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/channels/sell": {
      "get": {
        "summary": "Channels",
        "description": "This endpoint provides the list of supported channels for selling crypto into fiat.\n\nFollow the step-by-step guides:\n * [Direct Payout to US Business](/recipes/payout/global-payouts-business)\n * [Direct Payout to Individual Customer](/recipes/payout/global-payouts-individual)",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "Country",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/CountryCode"
            }
          },
          {
            "name": "CryptoCurrency",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CryptoCurrencyCode"
            }
          },
          {
            "name": "FiatCurrency",
            "in": "query",
            "example": "USD",
            "description": "Supported fiat ISO_4217 3 letter currency codes.",
            "schema": {
              "$ref": "#/components/schemas/FiatCurrencyCode"
            }
          },
          {
            "name": "FiatAmount",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/PositiveDecimal"
            }
          },
          {
            "name": "CustomerID",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "name": "PaymentMethodID",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/PaymentMethodID"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "example": "10",
            "schema": {
              "type": "integer",
              "default": 20
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageSize"
            }
          },
          {
            "name": "PageToken",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageToken"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of channels",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetChannelsResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/channels/sell/countries": {
      "get": {
        "summary": "Countries",
        "description": "This endpoint retrieves the complete list of countries where Sell operations are supported.\n\nThe response is useful for enabling customers to select their desired Country+FiatCurrency combination for receiving payouts.\n\nAfter making a selection, obtain the channels for the chosen Country+FiatCurrency using `GET /channels/sell`.\n\nFollow the step-by-step guides:\n * [Direct Payout to US Business](/recipes/payout/global-payouts-business)\n * [Direct Payout to Individual Customer](/recipes/payout/global-payouts-individual)",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of countries",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelsCountriesResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/checkout/payin/crypto": {
      "post": {
        "summary": "Create Crypto Payin Session",
        "description": "This endpoint initiates Noah’s hosted checkout session for cryptocurrency payments.\n\nThe solution creates a hosted session where customers make cryptocurrency payments through Noah’s hosted checkout page, requiring properties such as a `CustomerID` for customer identification, CryptoCurrency type (like USDC or Bitcoin), Amount specifications, and return/cancel URLs for post-payment redirection.\n\nUse the endpoint to retrieve a response consisting of a checkout URL, which you pass to your customer so that they can complete their cryptocurrency payment through a hosted session.\n\nThe hosted flow handles the complete payment process with real-time status updates via Webhooks.",
        "tags": ["Payin"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "CryptoCurrency": {
                    "$ref": "#/components/schemas/CryptoCurrencyCode"
                  },
                  "CryptoAmount": {
                    "$ref": "#/components/schemas/PositiveDecimal"
                  },
                  "ReturnURL": {
                    "$ref": "#/components/schemas/ReturnURL"
                  },
                  "ExternalID": {
                    "$ref": "#/components/schemas/ExternalID"
                  },
                  "CustomerID": {
                    "$ref": "#/components/schemas/CustomerID",
                    "description": "Identifies the customer in user's system"
                  },
                  "LineItems": {
                    "$ref": "#/components/schemas/LineItems",
                    "description": "List of line items that your customer is purchasing using this Hosted Checkout Session. This is used for display purposes for the customer during Checkout as well as remediation of disputed payments. We do not make any calculations using this data."
                  },
                  "Nonce": {
                    "$ref": "#/components/schemas/Nonce"
                  }
                },
                "required": [
                  "CryptoCurrency",
                  "CryptoAmount",
                  "CustomerID",
                  "ReturnURL",
                  "LineItems",
                  "Nonce"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Checkout request created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckoutSessionResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "callbacks": {
          "Status Update": {
            "$ref": "#/components/callbacks/PaymentCallback"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/customers/{CustomerID}": {
      "get": {
        "summary": "Customer by ID",
        "description": "This endpoint retrieves the details of a specific customer by their `CustomerID`.",
        "tags": ["Onboarding"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Customer details retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Customer"
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Create/Update Customer",
        "description": "This endpoint initiates [Noah's Reliance Model onboarding flow](/getting-started/kyc#reliance-model). Customers created from this endpoint must have a valid KYC status at the point of passing this data to Noah, and when executing a transaction. A unique `CustomerID` must be provided to enable unique identification in Noah. Customers are approved synchronously from the API call, and are immediately available to transact.\n\nBefore you get started with this endpoint, Noah must have authorized your usage of the Reliance Model. For more details on this process, see the [Compliance Overview](/getting-started/kyc).\n\nFollow the step-by-step guide: [Reliance Onboarding Recipe](/recipes/onboarding/reliance-onboarding)\n\nNote: Customers created from this endpoint are not able to process USD payments. In this case, follow the step-by-step guide for onboarding for USD payments: [Hosted Onboarding Recipe](/recipes/onboarding/hosted-onboarding)",
        "tags": ["Onboarding"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Customer created"
          },
          "204": {
            "description": "Customer updated"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/onboarding/{CustomerID}": {
      "post": {
        "summary": "Create Onboarding Session",
        "description": "This endpoint initiates [Noah's Standard Model onboarding flow](/getting-started/kyc#standard-model). Through this solution, Noah establishes direct contractual relationships with your end customers, handling all KYB/KYC verification and Terms and Conditions acceptance on your behalf.\n\nUse the endpoint to retrieve a response consisting of a URL, which you pass to your customer so that they can enter their details in a Hosted Onboarding session.\n\nFollow the step-by-step guide: [Hosted Onboarding Recipe](/recipes/onboarding/hosted-onboarding)\n\n:::info\nAdditional KYC applications for users who have already completed KYC will be rejected. Duplicate applications are flagged as a fraud prevention measure. If a user has already completed KYC, do not initiate another KYC session. Instead, retrieve the user's existing verification status. For details, see [KYC Platform](/api-concepts/kyc).\n:::\n\nNote: Customers needing to process USD payments must make use of Hosted Onboarding, rather than using [Reliance Onboarding](/api-reference/create-update-customer).",
        "tags": ["Onboarding"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HostedOnboardingRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Hosted onboarding session request successful. The `OnboardingStatus` field indicates an action is required to complete the onboarding.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostedSessionResponse"
                }
              }
            }
          },
          "201": {
            "description": "Customer created"
          },
          "202": {
            "description": "Onboarding in progress. The review will be processed asynchronously and a webhook will be sent when the review is complete or has advanced to the next step."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/onboarding/{CustomerID}/prefill": {
      "post": {
        "summary": "Prefill Customer Details",
        "description": "Use the Prefill Customer Details endpoint to create a Customer and submit any KYC/KYB information you have already collected.\n\nPrefill allows you to pre-populate known data before initiating the [Hosted Onboarding](/recipes/onboarding/hosted-onboarding) flow, which will gather any remaining required information to collect missing compliance data through dynamic forms or hosted sessions, Terms and Conditions acceptance for regulatory compliance, and Fiat currency selection.\n\nThe `Type` parameter defines the known data for prefilling a customer's Hosted Onboarding session, which can be one of the following.\n\n* **`SumSubToken`.** Follow the step-by-step guide: [Token Share Onboarding Recipe](/recipes/onboarding/token-share-onboarding).\n\n* **`BusinessCustomerPrefill`.** Follow the step-by-step guide: [Business Customer Prefill Recipe](/recipes/onboarding/business-customer-prefill).\n\n* **`IndividualCustomerPrefill`.** Follow the step-by-step guide: [Individual Customer Prefill Recipe](/recipes/onboarding/individual-customer-prefill)",
        "tags": ["Onboarding"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrefillOnboardingRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Data processed",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "RequestExtension": {
                      "$ref": "#/components/schemas/RequestExtension",
                      "description": "Request extensions for any errors that were encountered during the prefill process."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/onboarding/{CustomerID}/prefill/documents/upload-url": {
      "get": {
        "summary": "Get Document Upload URL",
        "description": "Get a URL to upload a document programmatically to add documents to KYC onboarding flows.\n\nMultiple types of documents are supported, using the `Type` parameter described below, both for individual users and company documents for business users.\n\nThe response consists of a URL, together with the date and time at which it will expire, which should be used like this, for example:\n\n`curl -X PUT -H 'Content-Type: image/png' --upload-file image.png '{{URL}}'`\n\n**Note**: If a document is double-sided, submit two images and set up the optional `Side` property (`Front` and `Back`).",
        "tags": ["Onboarding"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "path",
            "required": true,
            "description": "Customer ID for the onboarding session.",
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "name": "Type",
            "in": "query",
            "required": true,
            "description": "Document type.",
            "schema": {
              "$ref": "#/components/schemas/DocumentType"
            }
          },
          {
            "name": "Side",
            "in": "query",
            "description": "Document side.",
            "schema": {
              "$ref": "#/components/schemas/DocumentSide"
            }
          },
          {
            "name": "CountryCode",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CountryCode"
            }
          },
          {
            "name": "AssociateID",
            "in": "query",
            "required": false,
            "description": "The ID of the affiliated party associated with the document.",
            "schema": {
              "type": "string",
              "maxLength": 36
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Document upload URL successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrefillDocumentUploadURLResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/prices": {
      "get": {
        "summary": "Prices",
        "description": "This endpoint lets you retrieve real-time information about a conversion between two supported currencies, including the rate before and after the Noah Fee is applied.\n\nDuring a Noah Hosted Checkout session, real-time `/prices` data is used to calculate the fees and thus the final amount a customer will pay. If neither SourceAmount or DestinationAmount is defined, the fee is not available.",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "SourceCurrency",
            "in": "query",
            "required": true,
            "description": "The source currency to convert from.",
            "example": "USD",
            "schema": {
              "$ref": "#/components/schemas/AssetID"
            }
          },
          {
            "name": "DestinationCurrency",
            "in": "query",
            "required": true,
            "description": "The destination currency to convert to. (prod/sandbox):\n * BTC/BTC_TEST\n * USDC/USDC_TEST\n",
            "example": "BTC",
            "schema": {
              "$ref": "#/components/schemas/AssetID"
            }
          },
          {
            "name": "SourceAmount",
            "in": "query",
            "description": "Only one of `SourceAmount` or `DestinationAmount` can be defined. When this amount is specified, the response `DestinationAmount` field indicates how much you will get for this, after the deduction of any fees.",
            "schema": {
              "$ref": "#/components/schemas/PositiveDecimal"
            }
          },
          {
            "name": "DestinationAmount",
            "in": "query",
            "description": "Only one of `SourceAmount` or `DestinationAmount` can be defined. When this amount is specified, the response `SourceAmount` field indicates how much you will need to sell to get this and cover any fees.",
            "schema": {
              "$ref": "#/components/schemas/PositiveDecimal"
            }
          },
          {
            "name": "PaymentMethodCategory",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/PaymentMethodCategory"
            }
          },
          {
            "name": "Country",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/CountryCode"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Price estimate successful. Response includes the rate of currency exchange before and after fees are subtracted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPricesResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/hosted-workflows/bank-deposit-to-onchain-address": {
      "post": {
        "summary": "Convert Fiat to Crypto Session",
        "description": "This endpoint initiates Noah's hosted session for automated fiat-to-crypto workflows.\n\nThe solution creates a hosted session where customers can set up a workflow that automatically converts incoming fiat currency from bank deposits into cryptocurrency and sends the acquired crypto to a specified wallet address on the specified network. The workflow triggers automatically whenever a bank transfer is made to the designated bank account.\n\nUse the endpoint to retrieve a response consisting of a URL, which you pass to your customer so that they can configure their automated conversion workflow through a hosted session. Deposited amounts are traded for the specified cryptocurrency at current market prices after application of fees.\n\n**Notes**:\n\n * On-chain operations are irreversible, and market prices may fluctuate significantly, impacting the final payout amount.\n * Although this workflow should continue working with the original FormSession, Noah cannot guarantee FormSession longevity. For this reason, generate a new FormSession each time you present the customer with the onchain deposit address.\n * If the customer reuses the onchain address after the FormSession becomes invalid, the transfer will fail but funds will not be lost.",
        "tags": ["Payin"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankDepositToOnchainAddressHostedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "HostedURL successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostedSessionResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/hosted-workflows/onchain-deposit-to-payment-method": {
      "post": {
        "summary": "Convert Crypto to Fiat Session",
        "description": "This endpoint initiates Noah's hosted session for automated crypto-to-fiat workflows.\n\nThe solution creates a hosted session where customers can set up a workflow that automatically converts incoming cryptocurrency from onchain deposits into fiat currency and sends the acquired fiat to their payment method. The workflow triggers automatically when cryptocurrency is deposited to the designated onchain address.\n\nUse the endpoint to retrieve a response consisting of a URL, which you pass to your customer so that they can configure their automated conversion workflow through a hosted session. Deposited amounts are traded for the specified fiat currency at current market prices after application of fees.\n\n**Notes**:\n\n * On-chain operations are irreversible, and market prices may fluctuate significantly, impacting the final payout amount.\n * Although this workflow should continue working with the original FormSession, Noah cannot guarantee FormSession longevity. For this reason, generate a new FormSession each time you present the customer with the onchain deposit address.\n * If the customer reuses the onchain address after the FormSession becomes invalid, the transfer will fail but funds will not be lost.",
        "tags": ["Payout"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OnchainDepositToPaymentMethodHostedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "HostedURL successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostedSessionResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/hosted-workflows/recovery": {
      "post": {
        "summary": "Customer Account Recovery Session",
        "description": "This endpoint initiates Noah's hosted session for customer account fund recovery.\n\nThe solution creates a hosted session where customers can sell cryptocurrency funds currently held in their customer account and receive fiat payouts via available channels. This is used as a fallback mechanism when orchestrated workflows fail to disburse funds.\n\nUse the endpoint to retrieve a response consisting of a URL, which you pass to your customer so that they can recover their funds through a hosted session.",
        "tags": ["Payout"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecoveryHostedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "HostedURL successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostedURLResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/workflows/bank-deposit-to-onchain-address": {
      "post": {
        "summary": "Convert Fiat to Crypto",
        "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.\n\nThe solution requires a CustomerID, FiatCurrency, CryptoCurrency, Network, and DestinationAddress, with the deposited fiat amounts traded for the specified cryptocurrency at current market prices after application of fees.\n\nThe customer must already exist before using this endpoint.\n\nFollow the step-by-step guides:\n * [Bank Onramp via USD Virtual Account](/recipes/payin/bank-onramp-us)\n * [Bank Onramp via EUR Virtual Account](/recipes/payin/bank-onramp-eu)\n\n**Notes**:\n\n * On-chain operations are irreversible, and market prices may fluctuate significantly, impacting the final crypto amount.\n * Although this workflow should continue working with the original bank deposit setup, Noah cannot guarantee indefinite longevity of the configuration. For this reason, verify the workflow is still active before directing new deposits.",
        "tags": ["Payin"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankDepositToOnchainAddressRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Created rule",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankDepositToOnchainAddressResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "403": {
            "content": {
              "application/json": {
                "example": {
                  "Action": "create customer account",
                  "Detail": "Customer is in compliance review",
                  "Instance": "9bbe5ce1-aa6a-4650-ae2b-084f4e1f229c",
                  "Type": "Forbidden"
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden. The customer is not currently eligible for virtual account issuance, such as when an individual is in compliance review."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/workflows/onchain-deposit-to-payment-method": {
      "post": {
        "summary": "Onchain Deposit to Fiat Payout",
        "description": "This endpoint establishes an automated workflow that converts incoming cryptocurrency deposits into fiat currency payouts.\n\nThe solution requires configuration of source cryptocurrency, a FormSessionID for payout instructions, recipient payment method details, and conversion parameters, with deposited amounts traded for the specified fiat currency at current market prices after application of fees.\n\nThe customer must already exist before using this endpoint.\n\n **Notes**: \n * On-chain operations are irreversible, and market prices may fluctuate significantly, impacting the final payout amount.\n * Although this workflow should continue working with the original FormSession, Noah cannot guarantee FormSession longevity. For this reason, generate a new FormSession each time you present the customer with the onchain deposit address.\n * If the customer reuses the onchain address after the FormSession becomes invalid, the transfer will fail but funds will not be lost.\n * To charge a per-transaction business fee, set it on [`POST /transactions/sell/prepare`](/api-reference/prepare-sell-transaction). It is stored on the FormSession and applied to this workflow, so the fee summary you show the customer at prepare time matches what is charged.",
        "tags": ["Payout"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OnchainDepositToPaymentMethodRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Workflow created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OnchainDepositToPaymentMethodResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/payment-methods": {
      "get": {
        "summary": "Payment Methods",
        "description": "This endpoint retrieves a paginated list of payment methods for a specific customer.",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "example": "10",
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 100
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageSize"
            }
          },
          {
            "name": "PageToken",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageToken"
            }
          },
          {
            "name": "Capability",
            "in": "query",
            "description": "Filter payment methods by capability",
            "schema": {
              "$ref": "#/components/schemas/PaymentMethodCapability"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of fiat payment methods",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPaymentMethodsResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/virtual-accounts": {
      "get": {
        "summary": "Virtual Accounts",
        "description": "Returns a paginated list of virtual accounts for a customer. Each virtual account contains the payment methods linked to the same virtual account identifier and status of the virtual account.",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "query",
            "required": true,
            "description": "Customer whose virtual accounts should be returned.",
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "example": "10",
            "description": "Maximum number of virtual accounts to return.",
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 100
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageSize"
            }
          },
          {
            "name": "PageToken",
            "in": "query",
            "description": "Token from a previous response used to retrieve the next page.",
            "schema": {
              "type": "string"
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageToken"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated virtual account list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetVirtualAccountsResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/virtual-accounts/{VirtualAccountID}/close": {
      "post": {
        "summary": "Close Virtual Account",
        "description": "Request closure of one of your virtual accounts. Returns `202 Accepted` when closure has been requested or is already in progress, and `200 OK` when the virtual account is already closed.",
        "tags": ["Utilities"],
        "parameters": [
          {
            "name": "VirtualAccountID",
            "in": "path",
            "required": true,
            "description": "Virtual account identifier to close.",
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountID"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Virtual account is already closed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloseVirtualAccountResponse"
                }
              }
            }
          },
          "202": {
            "description": "Close request accepted. The virtual account is pending closure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloseVirtualAccountResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/customers": {
      "get": {
        "summary": "Customers",
        "description": "This endpoint retrieves a paginated list of customers for the Business User's account.",
        "tags": ["Onboarding"],
        "parameters": [
          {
            "name": "PageSize",
            "in": "query",
            "example": "10",
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 100
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageSize"
            }
          },
          {
            "name": "PageToken",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageToken"
            }
          },
          {
            "name": "SortDirection",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/SortDirection",
              "default": "DESC"
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "SortDirection"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of customers",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCustomersResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/sandbox/fiat-deposit/simulate": {
      "post": {
        "summary": "Simulate Fiat Deposit",
        "description": "This endpoint creates a simulated fiat deposit in the sandbox environment for testing purposes.\n\nThe solution requires a FiatAmount, `CustomerID` reference, and payment method specifications to trigger configured workflows, rules, and webhook integrations.\n\nUse the endpoint to test automated processes and validate business logic without real money transfers, supporting various fiat currencies and deposit scenarios.\n\nFollow the step-by-step guides:\n * [Bank Onramp via USD Virtual Account](/recipes/payin/bank-onramp-us)\n * [Bank Onramp via EUR Virtual Account](/recipes/payin/bank-onramp-eu)",
        "tags": ["Payin"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FiatDepositSimulateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Fiat deposit created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FiatDepositSimulateResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/transactions": {
      "get": {
        "summary": "Transactions",
        "description": "This endpoint retrieves a paginated list of transaction history for the Business User's account. Optionally filter by a specific customer by providing `CustomerID`.",
        "tags": ["Transactions"],
        "parameters": [
          {
            "name": "CustomerID",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/CustomerID"
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "CustomerID"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "example": "10",
            "schema": {
              "type": "integer",
              "default": 20
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageSize"
            }
          },
          {
            "name": "PageToken",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "PageToken"
            }
          },
          {
            "name": "SortDirection",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/SortDirection",
              "default": "DESC"
            },
            "x-oapi-codegen-extra-tags": {
              "schema": "SortDirection"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of transactions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetTransactionsResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/transactions/{TransactionID}": {
      "get": {
        "summary": "Transaction by ID",
        "description": "This endpoint retrieves the details of a single transaction by `TransactionID`.",
        "tags": ["Transactions"],
        "parameters": [
          {
            "name": "TransactionID",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Transaction details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        }
      }
    },
    "/transactions/withdraw": {
      "post": {
        "summary": "Create Withdraw Transaction",
        "description": "This endpoint initiates an on-chain cryptocurrency withdrawal.\n\nUse this endpoint to send crypto from a business account balance to a beneficiary. The server computes the network fee, debits the gross amount (including the network fee) from the account balance, and tracks the withdrawal end-to-end.",
        "tags": ["Transactions"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WithdrawRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Withdraw request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WithdrawResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "callbacks": {
          "Status Update": {
            "$ref": "#/components/callbacks/PaymentCallback"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/transactions/sell": {
      "post": {
        "summary": "Create Sell Transaction",
        "description": "This endpoint initiates an immediate transaction to sell specified cryptocurrency and send the resulting fiat currency to a designated payout method.\n\nUse this endpoint to convert a crypto balance into fiat and send it to a beneficiary (e.g., bank transfer, card payout, wallet) with real-time execution, dynamic payout-form submission for payment methods, immediate balance updates, and end-to-end transaction tracking.\n\n**Note:** This endpoint is only available to customers created under the Reliance Model. Before you get started with this endpoint, Noah must have authorized your usage of the Reliance Model. For more details on this process, see the [Compliance Overview](/getting-started/kyc). When using the Standard Model, use the [Onchain Deposit to Fiat Payout](onchain-deposit-to-fiat-payout) endpoint.\n\nFollow the step-by-step guides:\n * [Direct Payout to US Business](/recipes/payout/global-payouts-business)\n * [Direct Payout to Individual Customer](/recipes/payout/global-payouts-individual)",
        "tags": ["Payout"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SellRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Sell request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SellResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "callbacks": {
          "Status Update": {
            "$ref": "#/components/callbacks/PaymentCallback"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/transactions/sell/prepare": {
      "post": {
        "summary": "Prepare Sell Transaction",
        "description": "This endpoint calculates and validates the required inputs for a sell transaction, including accurate pricing estimates, fees, and limits.\n\nUse the endpoint to pre-validate a crypto-to-fiat sell by generating a FormSessionID, retrieving real-time price/fee/limit estimates, computing the required CryptoAuthorizedAmount, and validating payout-form inputs.\n\nThis enables the subsequent Create Sell call to execute deterministically within your slippage, balance, and compliance constraints, with no funds being removed at this stage.\n\nFollow the step-by-step guides:\n * [Direct Payout to US Business](/recipes/payout/global-payouts-business)\n * [Direct Payout to Individual Customer](/recipes/payout/global-payouts-individual)",
        "tags": ["Payout"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrepareSellRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Sell request data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrepareSellResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Client is not authorized to perform this action"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal server error"
          }
        },
        "parameters": [
          {
            "description": "Digitally signed JWT.",
            "in": "header",
            "name": "Api-Signature",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ],
  "servers": [
    {
      "description": "V1 Sandbox Server",
      "url": "https://api.sandbox.noah.com/v1"
    },
    {
      "description": "V1 Production Server",
      "url": "https://api.noah.com/v1"
    }
  ]
}
