{
  "openapi": "3.1.0",
  "info": {
    "title": "Banxa Native API",
    "description": "Official Banxa Enterprise API Specs\n\n> For the complete documentation index, see [llms.txt](https://docs.banxa.com/llms.txt). Append `.md` to any page URL for its markdown version.",
    "license": {
      "name": "MIT",
      "identifier": "MIT"
    },
    "version": "0 BETA",
    "x-logo": {
      "url": "https://banxa.com/wp-content/uploads/2025/02/Banxa-Logo-Primary-RGB-for-Dark-Mode.png",
      "backgroundColor": "#121730",
      "altText": "Banxa official logo"
    },
    "termsOfService": "https://banxa.com/terms-of-use/",
    "contact": {
      "name": "Banxa customer support",
      "url": "https://support.banxa.com/en/support/home",
      "email": "developer-support@banxa.com"
    }
  },
  "servers": [
    {
      "url": "https://api.banxa.com",
      "description": "Production environment server"
    },
    {
      "url": "https://api.banxa-sandbox.com",
      "description": "Sandbox environment server"
    }
  ],
  "tags": [
    {
      "name": "Ramps",
      "description": "**Ramp Transactions** - Create and manage cryptocurrency on-ramp (fiat → crypto) and off-ramp (crypto → fiat) transactions.\n\n**Key Operations**:\n- Create on-ramp transactions (buy cryptocurrency)\n- Create off-ramp transactions (sell cryptocurrency)\n- Retrieve transaction status and details\n- Monitor transaction lifecycle via webhooks\n\n**Transaction Flow**:\n1. Check eligibility and limits\n2. Get price quote\n3. Create ramp transaction\n4. Customer completes payment/deposit\n5. Receive status updates via webhooks\n6. Transaction completes\n\n**Supported Payment Methods**: PayID (AU), SEPA (EU), ACH (US), Interac (CA)\n\n**Supported Blockchains**: Bitcoin, Ethereum, TRON, Polygon, BSC",
      "x-displayName": "Ramps (Transactions)"
    },
    {
      "name": "Identities",
      "description": "**Identity & KYC Management** - Manage customer identity verification and Know Your Customer (KYC) compliance.\n\n**Key Operations**:\n- Create basic customer identities\n- Share KYC verification via third-party providers (Sumsub)\n- Upload identity documents directly\n- Update customer information\n- Retrieve identity verification status\n\n**Verification Methods**:\n1. **Token Sharing**: Use existing KYC from Sumsub\n2. **Identity Reliance**: Share verified identity data\n3. **Document Upload**: Submit documents directly to Banxa\n\n**Required Documents**:\n- Government-issued photo ID (passport, driver's license, national ID)\n- Proof of address (utility bill, bank statement)\n- Selfie for liveness verification\n\n**Verification Tiers**:\n- **Tier 0**: Basic info (low limits)\n- **Tier 1**: Email + phone verified (medium limits)\n- **Tier 2**: Full KYC verified (high limits)",
      "x-displayName": "Identities (KYC)"
    },
    {
      "name": "Quote",
      "description": "**Quotes** - Get a locked price quote with a unique `quoteId` and a 3-minute TTL.\n\n**Key Features**:\n- Returns a `quoteId` that can be used to create a ramp transaction\n- Quote is valid for 3 minutes (`expiresAt`)\n- Includes all fees (processing + network)\n- Lock fiat OR crypto amount\n\n**Flow**:\n1. Request a quote via `GET /eapi/v0/quote`\n2. Display the quote to the customer\n3. Use the `quoteId` in the ramp creation payload before it expires\n\n**Important Notes**:\n- Prices are subject to market volatility and network congestion\n- Once expired, a new quote must be requested\n- The `quoteId` can only be used once",
      "x-displayName": "Quote"
    },
    {
      "name": "Price",
      "description": "**Indicative Pricing** - Get real-time, non-persisted price estimates for cryptocurrency transactions.\n\nThe price endpoint returns an **indicative** price that is not stored or locked. It carries no `quoteId` and cannot be referenced when creating a ramp transaction. For a locked quote that can be used to create a ramp, use the `GET /eapi/v0/quote` endpoint.\n\n**Key Features**:\n- Real-time market rates\n- Includes all fees (processing + network)\n- Lock fiat OR crypto amount\n\n**Important Notes**:\n- Prices are indicative and not persisted\n- Prices fluctuate with market conditions\n- Don't cache prices for more than 1 minute\n- Use the Quote endpoint to obtain a locked, referenceable quote\n\n**Use Cases**:\n- Display indicative price to customer\n- Transaction previews and fee breakdowns\n- UI price tickers and estimates",
      "x-displayName": "Price (Indicative)"
    },
    {
      "name": "Eligibility",
      "description": "**Transaction Eligibility** - Pre-check if a customer can perform a transaction.\n\n**Purpose**: Determine if customer meets requirements before attempting transaction.\n\n**Returns**:\n- `paymentReady`: Boolean indicating if customer can transact immediately\n- `requirements`: Array of outstanding KYC/compliance requirements\n\n**Possible Requirements**:\n- `US_TAX_ID`: US tax identification needed\n- `PERSONAL_DETAILS`: Name, DOB, address required\n- `DOCUMENT`: Government ID needed\n- `SELFIE`: Liveness check required\n- `SOURCE_FUNDS`: Source of funds declaration needed\n- `OCCUPATION`: Occupation information required\n- `PURPOSE_OF_TX`: Transaction purpose needed\n\n**Best Practice**: Check eligibility before showing price quotes to avoid failed transactions.",
      "x-displayName": "Eligibility (Pre-checks)"
    },
    {
      "name": "Limits",
      "description": "**Transaction Limits** - Check applicable transaction limits for customers.\n\n**Limit Types**:\n- **Transaction Limits**: Minimum and maximum per transaction\n- **Daily Limits**: 24-hour rolling window\n- **Weekly Limits**: 7-day rolling window\n- **Monthly Limits**: 30-day rolling window\n- **Annual Limits**: 365-day rolling window\n\n**Limit Sources**:\n- **Provider Limits**: Payment method/route specific limits\n- **Customer Limits**: User tier-based limits and overrides\n\n**Effective Limit**: The most restrictive limit applies (minimum of provider and customer limits).\n\n**Use Cases**:\n- Display available transaction amounts to customer\n- Validate transaction amount before submission\n- Show customer their current tier limits\n- Explain why a transaction amount is not allowed",
      "x-displayName": "Limits (Transaction Limits)"
    },
    {
      "name": "Verifications",
      "description": "**OTP Verification** - Email verification using one-time password (OTP) codes.\n\n**Key Operations**:\n- Request OTP code to be sent to customer's email\n- Verify OTP code to confirm email ownership\n\n**Flow**:\n1. Request OTP via `POST /eapi/v0/verifications/otp`\n2. Customer receives OTP code via email\n3. Verify OTP via `POST /eapi/v0/verifications/otp/verify`\n\n**Rate Limits**:\n- OTP requests: 3 per minute per customer\n- OTP verification attempts: 4 per minute per customer\n\n**Important Notes**:\n- OTP codes are single-use and expire after a set time\n- Email must be verified for certain compliance requirements\n- Feature must be enabled for your merchant account",
      "x-displayName": "Verifications (OTP)"
    },
    {
      "name": "Configuration",
      "description": "**Configuration Endpoints** - Retrieve supported payment methods, fiat currencies, countries, crypto currencies, and other configuration data required to build onboarding and transaction flows.\n\n**Key Operations**:\n- List supported fiat currencies for on-ramp and off-ramp transactions\n- Retrieve available payment methods for a given transaction direction\n- Get supported countries and any required states or provinces\n- List supported crypto currencies for transaction setup\n- Use configuration data to pre-fill forms before pricing or ramp creation\n\n**Use Cases**:\n- Populate dropdowns and selectors in your UI\n- Filter valid options based on customer choices\n- Validate transaction parameters before submission\n- Display supported onboarding and payout options",
      "x-displayName": "Configuration"
    }
  ],
  "externalDocs": {
    "url": "https://banxa.com",
    "description": "Banxa website"
  },
  "paths": {
    "/eapi/v0/ramps": {
      "get": {
        "summary": "Ramps List",
        "description": "Retrieve a paginated list of transfer orders (ramps).\n\n**Pagination Modes**:\n- **Cursor Pagination**: Use `startAfter`, `endBefore`, or `cursor` parameters. Dates are optional.\n- **Offset Pagination**: Use `page` parameter. Dates (`dateFrom` and `dateTo`) are required.\n\n**Important**: Cannot mix pagination types. Choose either cursor-based or offset-based pagination.\n\n**Use Cases**:\n- Retrieve transaction history for reporting\n- Sync transactions to your system\n- Display transaction list to customers\n- Export transaction data",
        "operationId": "listRamps",
        "tags": [
          "Ramps"
        ],
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "parameters": [
          {
            "name": "perPage",
            "in": "query",
            "description": "Number of items per page.\n\n**Range**: 1-200\n**Default**: 10\n\n**Recommendation**: Use smaller page sizes (10-50) for better performance.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 10
            },
            "example": 25
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number for offset pagination (1-based).\n\n**Offset Pagination Mode**:\n- Cannot be used with cursor parameters (`startAfter`, `endBefore`, `cursor`)\n- **Requires** `dateFrom` and `dateTo` when used\n- Returns total count and page information\n- Suitable for UI pagination with page numbers\n\n**Example**: `page=2&perPage=25&dateFrom=2024-01-01&dateTo=2024-12-31`",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            },
            "example": 2
          },
          {
            "name": "startAfter",
            "in": "query",
            "description": "Cursor to start after (order key or ID). Returns orders after this cursor, excluding it.\n\n**Cursor Pagination Mode**:\n- Cannot be used with `endBefore` or `page`\n- Dates are optional when using cursor pagination\n- More efficient for large datasets\n- Suitable for infinite scroll or \"load more\" patterns\n\n**Example**: `startAfter=ORD-2024-100&perPage=25`",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "example": "ORD-2024-100"
          },
          {
            "name": "endBefore",
            "in": "query",
            "description": "Cursor to end before (order key or ID). Returns orders before this cursor, excluding it.\n\n**Cursor Pagination Mode**:\n- Cannot be used with `startAfter` or `page`\n- Dates are optional when using cursor pagination\n- Useful for reverse pagination\n\n**Example**: `endBefore=ORD-2024-200&perPage=25`",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "example": "ORD-2024-200"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Generic cursor parameter for pagination (typically from previous response).\n\n**Usage**:\n- Cannot be used with `page`\n- Dates are optional when using cursor pagination\n- Use `nextCursor` or `prevCursor` from previous response\n- Opaque string - do not parse or modify\n\n**Example**: `cursor=eyJvcmRlcnMuaWQiOjEyMzQ1fQ==`",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "example": "eyJvcmRlcnMuaWQiOjEyMzQ1LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9"
          },
          {
            "name": "dateFrom",
            "in": "query",
            "description": "Start date filter (YYYY-MM-DD).\n\n**Requirements**:\n- **Required** for offset pagination (when using `page`)\n- **Optional** for cursor pagination (when using `startAfter`, `endBefore`, or `cursor`)\n\n**Validation**:\n- Must be valid date in YYYY-MM-DD format\n- Cannot be in the future\n- Must be <= `dateTo` if both provided",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2024-01-01"
          },
          {
            "name": "dateTo",
            "in": "query",
            "description": "End date filter (YYYY-MM-DD). Must be >= `dateFrom` if provided.\n\n**Requirements**:\n- **Required** for offset pagination (when using `page`)\n- **Optional** for cursor pagination (when using `startAfter`, `endBefore`, or `cursor`)\n\n**Validation**:\n- Must be valid date in YYYY-MM-DD format\n- Must be >= `dateFrom`\n- Cannot be in the future",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2024-12-31"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response with paginated ramps list.\n\n**Response Structure**:\n- `data`: Array of ramp objects\n- `pagination`: Pagination metadata (cursor or offset based)\n\n**Pagination Metadata**:\n- **Cursor mode**: `nextCursor`, `prevCursor`, `hasMore`, `perPage`\n- **Offset mode**: `currentPage`, `perPage`, `total`, `lastPage`, `from`, `to`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RampsListResponse"
                },
                "examples": {
                  "cursorPaginationResponse": {
                    "summary": "Cursor pagination response",
                    "description": "Example response using cursor-based pagination. Use nextCursor for next page.",
                    "value": {
                      "data": [
                        {
                          "id": "ORD-2024-001",
                          "subPartnerId": "partner-123",
                          "identityReference": "customer-12345",
                          "status": "completed",
                          "source": {
                            "fiat": {
                              "id": "USD",
                              "method": "card"
                            },
                            "amount": "1000.00"
                          },
                          "target": {
                            "crypto": {
                              "id": "BTC",
                              "blockchain": "BTC",
                              "walletAddress": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
                              "walletAddressMemo": null
                            },
                            "amount": "0.025"
                          },
                          "receipt": {
                            "targetTransactionHash": "0xabc123...",
                            "gatewayFee": "5.00",
                            "networkFee": "2.50",
                            "sourceAmount": "1000.00",
                            "targetAmount": "0.025"
                          },
                          "createdAt": "2024-01-15T10:30:00Z",
                          "completedAt": "2024-01-15T10:45:00Z"
                        }
                      ],
                      "pagination": {
                        "nextCursor": "eyJvcmRlcnMuaWQiOjEyMzQ1LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9",
                        "prevCursor": null,
                        "hasMore": true,
                        "perPage": 10
                      }
                    }
                  },
                  "offsetPaginationResponse": {
                    "summary": "Offset pagination response",
                    "description": "Example response using offset-based pagination. Use page parameter for navigation.",
                    "value": {
                      "data": [
                        {
                          "id": "ORD-2024-001",
                          "subPartnerId": "partner-123",
                          "identityReference": "customer-12345",
                          "status": "completed",
                          "source": {
                            "fiat": {
                              "id": "USD",
                              "method": "card"
                            },
                            "amount": "1000.00"
                          },
                          "target": {
                            "crypto": {
                              "id": "BTC",
                              "blockchain": "BTC",
                              "walletAddress": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
                              "walletAddressMemo": null
                            },
                            "amount": "0.025"
                          },
                          "receipt": {
                            "targetTransactionHash": "0xabc123...",
                            "gatewayFee": "5.00",
                            "networkFee": "2.50",
                            "sourceAmount": "1000.00",
                            "targetAmount": "0.025"
                          },
                          "createdAt": "2024-01-15T10:30:00Z",
                          "completedAt": "2024-01-15T10:45:00Z"
                        }
                      ],
                      "pagination": {
                        "currentPage": 1,
                        "perPage": 10,
                        "total": 150,
                        "lastPage": 15,
                        "from": 1,
                        "to": 10
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      },
      "post": {
        "summary": "Ramps enable Fiat to Crypto and Crypto to fiat on and off ramp.",
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "description": "Enables conversion between fiat and cryptocurrency in both directions.",
        "operationId": "createRamp",
        "tags": [
          "Ramps"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/OnRampRequest"
                  },
                  {
                    "$ref": "#/components/schemas/OffRampRequest"
                  },
                  {
                    "$ref": "#/components/schemas/QuoteRampRequest"
                  }
                ]
              },
              "examples": {
                "onramp_fiat_amount": {
                  "summary": "On-Ramp with fiat amount (Buy crypto)",
                  "description": "Customer wants to buy USDT on TRON network using AUD via PayID. Fiat amount is locked at 100 AUD.",
                  "value": {
                    "identityReference": "customer-12345",
                    "subPartnerId": "partner-app-1",
                    "source": {
                      "fiat": {
                        "id": "AUD",
                        "method": "payid-bank-transfer"
                      }
                    },
                    "target": {
                      "crypto": {
                        "id": "USDT",
                        "blockchain": "TRON",
                        "walletAddress": "TYDzsYUEpvnYmQk4zGP9sWWcTEd2MiAtW6",
                        "walletAddressMemo": "39730"
                      }
                    },
                    "fiatAmount": "100.00"
                  }
                },
                "onramp_crypto_amount": {
                  "summary": "On-Ramp with crypto amount (Buy exact crypto)",
                  "description": "Customer wants to buy exactly 100 USDT using ACH. Fiat amount will be calculated. Includes tosAccepted for ACH terms of service.",
                  "value": {
                    "identityReference": "customer-67890",
                    "source": {
                      "fiat": {
                        "id": "USD",
                        "method": "ach-bank-transfer",
                        "tosAccepted": true
                      }
                    },
                    "target": {
                      "crypto": {
                        "id": "USDT",
                        "blockchain": "ETH",
                        "walletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
                      }
                    },
                    "cryptoAmount": "100.00"
                  }
                },
                "offramp_crypto_amount": {
                  "summary": "Off-Ramp with crypto amount (Sell crypto)",
                  "description": "Customer wants to sell 100 USDT for AUD. Crypto amount is locked.",
                  "value": {
                    "identityReference": "customer-11111",
                    "source": {
                      "crypto": {
                        "id": "USDT",
                        "blockchain": "TRON",
                        "walletAddress": "TYDzsYUEpvnYmQk4zGP9sWWcTEd2MiAtW6",
                        "walletAddressMemo": "1234"
                      }
                    },
                    "target": {
                      "fiat": {
                        "id": "AUD",
                        "method": "payid-bank-transfer",
                        "instructions": [
                          {
                            "accountName": "John Doe",
                            "accountNumber": "12345678",
                            "bsb": "063123"
                          }
                        ]
                      }
                    },
                    "cryptoAmount": "100.00"
                  }
                },
                "offramp_fiat_amount": {
                  "summary": "Off-Ramp with fiat amount (Receive exact fiat)",
                  "description": "Customer wants to receive exactly 100 AUD. Crypto amount will be calculated.",
                  "value": {
                    "identityReference": "customer-22222",
                    "source": {
                      "crypto": {
                        "id": "ETH",
                        "blockchain": "ETH",
                        "walletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
                      }
                    },
                    "target": {
                      "fiat": {
                        "id": "EUR",
                        "method": "sepa-bank-transfer",
                        "instructions": [
                          {
                            "accountName": "Jane Smith",
                            "iban": "DE89370400440532013000"
                          }
                        ]
                      }
                    },
                    "fiatAmount": "100.00"
                  }
                },
                "quote_ramp": {
                  "summary": "Ramp using a quote ID",
                  "description": "Create a ramp transaction using a previously obtained quote ID. Source, target, and amount details are inferred from the quote.",
                  "value": {
                    "quoteId": "6e9174edd370ffe6331aeda7a6d75592",
                    "identityReference": "customer-ref-1234",
                    "walletAddress": "0xc292474673cf1a96a96e8c56ec4f45ecf2e0b448",
                    "walletAddressMemo": null
                  }
                },
                "offramp_ach_with_tos": {
                  "summary": "Off-Ramp with ACH bank transfer",
                  "description": "Customer wants to sell crypto and receive USD via ACH. Includes tosAccepted for ACH terms of service.",
                  "value": {
                    "identityReference": "customer-33333",
                    "source": {
                      "crypto": {
                        "id": "USDT",
                        "blockchain": "ETH",
                        "walletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
                      }
                    },
                    "target": {
                      "fiat": {
                        "id": "USD",
                        "method": "ach-bank-transfer",
                        "tosAccepted": true,
                        "instructions": [
                          {
                            "bankName": "Bank of America",
                            "accountName": "John Doe",
                            "accountNumber": "123456789012",
                            "routingNumber": "121000358"
                          }
                        ]
                      }
                    },
                    "cryptoAmount": "100.00"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful ramp response.\n\n**Next Steps**:\n- **On-Ramp**: Display payment instructions to customer (sourceDepositInstructions)\n- **Off-Ramp**: Display crypto deposit address to customer (sourceDepositInstructions)\n- Monitor status via webhooks or GET endpoint\n\n**Important**: The response type (OnRamp vs OffRamp) matches the request type.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/offramp-response"
                    },
                    {
                      "$ref": "#/components/schemas/onramp-response"
                    }
                  ]
                },
                "examples": {
                  "onramp_response": {
                    "summary": "On-Ramp Response",
                    "description": "Response for an on-ramp transaction. Customer needs to make payment to the provided instructions.",
                    "value": {
                      "id": "b7f1ffbb2f1bd7a5e2ba152b4049d234",
                      "subPartnerId": "partner-app-1",
                      "identityReference": "customer-12345",
                      "status": "INITIALIZED",
                      "source": {
                        "fiat": {
                          "id": "AUD",
                          "method": "payid-bank-transfer"
                        },
                        "amount": "100.00"
                      },
                      "target": {
                        "crypto": {
                          "id": "USDT",
                          "blockchain": "TRON",
                          "walletAddress": "TYDzsYUEpvnYmQk4zGP9sWWcTEd2MiAtW6",
                          "walletAddressMemo": "39730"
                        },
                        "amount": "95.50"
                      },
                      "sourceDepositInstructions": {
                        "recipientEmail": "15600270@banxa.com",
                        "depositReference": "BNX-12345678"
                      },
                      "receipt": {
                        "targetTransactionHash": null,
                        "gatewayFee": "2.50",
                        "networkFee": "2.00",
                        "sourceAmount": "100.00",
                        "targetAmount": "95.50"
                      },
                      "createdAt": "2023-06-05T19:53:08.320Z",
                      "completedAt": null
                    }
                  },
                  "offramp_response": {
                    "summary": "Off-Ramp Response",
                    "description": "Response for an off-ramp transaction. Customer needs to send crypto to the provided address.",
                    "value": {
                      "id": "c8g2ggcc3g2ce8b6f3cb263b5150e345",
                      "subPartnerId": "partner-app-1",
                      "identityReference": "customer-11111",
                      "status": "AWAITING_FUNDS",
                      "source": {
                        "crypto": {
                          "id": "USDT",
                          "blockchain": "TRON",
                          "walletAddress": "TYDzsYUEpvnYmQk4zGP9sWWcTEd2MiAtW6",
                          "walletAddressMemo": "1234"
                        },
                        "amount": "105.00"
                      },
                      "target": {
                        "fiat": {
                          "id": "AUD",
                          "method": "payid-bank-transfer"
                        },
                        "amount": "100.00"
                      },
                      "sourceDepositInstructions": {
                        "walletAddress": "TBanxaDepositAddress123456789",
                        "walletAddressMemo": "MEMO123456"
                      },
                      "receipt": {
                        "sourceTransactionHash": null,
                        "gatewayFee": "3.00",
                        "networkFee": "2.00",
                        "sourceAmount": "105.00",
                        "targetAmount": "100.00"
                      },
                      "createdAt": "2023-06-05T19:53:08.320Z",
                      "completedAt": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/ramps/{ramp_id}": {
      "get": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Ramp retrieval",
        "description": "Enables retrieval of detailed information about a specific order using its unique identifier.",
        "operationId": "getRamp",
        "tags": [
          "Ramps"
        ],
        "parameters": [
          {
            "name": "ramp_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "b7f1ffbb2f1bd7a5e2ba152b4049d234",
              "maxLength": 100
            },
            "description": "The ramp ID to fetch."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful ramp response",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/offramp-response"
                    },
                    {
                      "$ref": "#/components/schemas/onramp-response"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/identities/share/token": {
      "post": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Identity token sharing (sumsub)",
        "description": "Share customer identity",
        "operationId": "shareIdentity",
        "tags": [
          "Identities"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IdentityTokenSharingRequest"
              },
              "examples": {
                "sumsub_token": {
                  "summary": "Share Sumsub KYC token",
                  "description": "Share existing KYC verification from Sumsub",
                  "value": {
                    "identityReference": "customer-12345",
                    "email": "john.doe@example.com",
                    "mobileNumber": "+61431000001",
                    "provider": {
                      "vendor": "sumsub",
                      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "The identity sharing request has been accepted for processing, but the processing has not been finished yet.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityTokenSharingResponse"
                },
                "examples": {
                  "accepted": {
                    "summary": "Request accepted for processing",
                    "value": {
                      "identityReference": "customer-12345"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/identities/reliance": {
      "post": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Identity Reliance",
        "description": "Share customer identity",
        "operationId": "identityReliance",
        "tags": [
          "Identities"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IdentityRelianceRequest"
              },
              "examples": {
                "identity_reliance": {
                  "summary": "Share verified identity data",
                  "description": "Share identity data that has been verified by another trusted party",
                  "value": {
                    "identityReference": "customer-12345",
                    "email": "john.doe@example.com",
                    "mobileNumber": "+61431000001",
                    "screeningDate": "2024-01-15",
                    "screeningSanctionsResult": true,
                    "screeningPepResult": true,
                    "customerIdentity": {
                      "givenName": "John",
                      "surname": "Doe",
                      "dob": "1990-01-15",
                      "residentialAddress": {
                        "addressLine": "123 Main Street",
                        "suburb": "Sydney",
                        "state": "NSW",
                        "postCode": "2000",
                        "country": "AU"
                      }
                    },
                    "identityDocuments": [
                      {
                        "type": "PASSPORT",
                        "data": {
                          "number": "N1234567"
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "The identity sharing request has been accepted for processing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityRelianceResponse"
                },
                "examples": {
                  "accepted": {
                    "summary": "Request accepted for processing",
                    "value": {
                      "identityReference": "customer-12345"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/identities/{identity_reference}": {
      "get": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Identity Retrieval",
        "description": "Enables retrieval of detailed information about a specific identity using the unique identityReference.",
        "operationId": "getIdentity",
        "tags": [
          "Identities"
        ],
        "parameters": [
          {
            "name": "identity_reference",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "/identities/c-13344",
              "maxLength": 100
            },
            "description": "The identity reference to retrieve data for."
          },
          {
            "name": "email",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email",
              "maxLength": 254
            },
            "description": "Optional email address to assist with identity matching.",
            "example": "user@example.com"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful identity response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetIdentityResponse"
                },
                "examples": {
                  "existing_identity": {
                    "summary": "Existing verified identity",
                    "description": "Identity exists with verified KYC data on file. Note: VERIFIED status means the identity data we have is validated, but does not guarantee transaction eligibility. Check the eligibility endpoint before allowing transactions.",
                    "value": {
                      "identityReference": "customer-12345",
                      "account": {
                        "blocked": false,
                        "exists": true,
                        "createdAt": "2024-01-15T10:30:00Z"
                      },
                      "kyc": {
                        "status": "VERIFIED"
                      }
                    }
                  },
                  "blocked_identity": {
                    "summary": "Blocked identity",
                    "description": "Identity exists but has been blocked",
                    "value": {
                      "identityReference": "customer-blocked",
                      "account": {
                        "blocked": true,
                        "exists": true,
                        "createdAt": "2024-01-10T08:15:00Z"
                      },
                      "kyc": {
                        "status": "REJECTED"
                      }
                    }
                  },
                  "new_identity": {
                    "summary": "New identity (not yet created)",
                    "description": "Identity does not exist in the system",
                    "value": {
                      "identityReference": "customer-new",
                      "account": {
                        "blocked": false,
                        "exists": false,
                        "createdAt": null
                      },
                      "kyc": {
                        "status": "PENDING"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/identities/basic": {
      "post": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Identity create",
        "description": "Low level identity onboarding",
        "operationId": "createIdentity",
        "tags": [
          "Identities"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BasicIdentityRequest"
              },
              "examples": {
                "basic_identity": {
                  "summary": "Create basic identity",
                  "description": "Minimal identity creation with required fields",
                  "value": {
                    "identityReference": "customer-12345",
                    "givenName": "John",
                    "surname": "Doe",
                    "dateOfBirth": "1990-01-15",
                    "email": "john.doe@example.com",
                    "residentialAddress": {
                      "addressLine": "123 Main Street",
                      "suburb": "Sydney",
                      "state": "NSW",
                      "postCode": "2000",
                      "country": "AU"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The identity has been created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicIdentityResponse"
                },
                "examples": {
                  "created": {
                    "summary": "Identity created successfully",
                    "value": {
                      "identityReference": "customer-12345",
                      "createdAt": "2024-01-15T10:30:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/eapi/v0/identities/share/documents": {
      "post": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Identity Document sharing",
        "description": "Share identity documents for KYC verification.\n\n**Use Case**: Submit customer identity documents directly to Banxa for verification.\n\n**Process**:\n1. Collect customer information and documents\n2. Submit via this endpoint\n3. Receive 202 Accepted response\n4. Wait for webhook notification with verification result\n\n**Required Documents**:\n- At least one government-issued photo ID\n- Proof of address (if required)\n- Selfie for liveness verification\n\n**Document Quality**:\n- Clear, high-resolution images\n- All text readable\n- No glare or shadows\n- Maximum 10MB per image",
        "operationId": "shareIdentityDocuments",
        "tags": [
          "Identities"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IdentityDocumentSharingRequest"
              },
              "examples": {
                "complete_submission": {
                  "summary": "Complete identity submission with passport",
                  "description": "Example of a complete identity verification submission including passport, proof of address, and selfie",
                  "value": {
                    "identityReference": "customer-12345",
                    "mobileNumber": "+61431000001",
                    "email": "john.doe@example.com",
                    "customerIdentity": {
                      "givenName": "John",
                      "surname": "Doe",
                      "dob": "1990-01-15",
                      "residentialAddress": {
                        "addressLine": "123 Main Street",
                        "suburb": "Sydney",
                        "state": "NSW",
                        "postCode": "2000",
                        "country": "AU"
                      }
                    },
                    "occupationIndustry": "Consulting, IT, or business services",
                    "occupation": "IT developer",
                    "sourceOfFunds": "Salary",
                    "purposeOfTransaction": "Investment",
                    "identityDocuments": [
                      {
                        "type": "PASSPORT",
                        "data": {
                          "number": "N1234567"
                        },
                        "images": [
                          {
                            "type": "PASSPORT",
                            "base64": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",
                            "mimetype": "image/jpeg"
                          }
                        ]
                      },
                      {
                        "type": "PROOF_OF_ADDRESS",
                        "images": [
                          {
                            "type": "PROOF_OF_ADDRESS",
                            "base64": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",
                            "mimetype": "image/jpeg"
                          }
                        ]
                      },
                      {
                        "type": "SELFIE",
                        "images": [
                          {
                            "type": "SELFIE",
                            "base64": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",
                            "mimetype": "image/jpeg"
                          }
                        ]
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "The identity document sharing request has been accepted for processing, but the processing of the sent documents has not been finished yet.\n\n**Next Steps**:\n- Documents are being verified (typical time: 1-24 hours)\n- You will receive a webhook notification when verification is complete\n- Status will be either VERIFIED or REJECTED",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityDocumentSharingResponse"
                },
                "examples": {
                  "pending": {
                    "summary": "Verification pending",
                    "value": {
                      "identityReference": "customer-12345",
                      "status": "PENDING",
                      "customerIdentity": {
                        "givenName": "John",
                        "surname": "Doe",
                        "dob": "1990-01-15",
                        "residentialAddress": {
                          "addressLine": "123 Main Street",
                          "suburb": "Sydney",
                          "state": "NSW",
                          "postCode": "2000",
                          "country": "AU"
                        }
                      },
                      "occupationIndustry": "Consulting, IT, or business services",
                      "occupation": "IT developer",
                      "purposeOfTransaction": "Investment",
                      "createdAt": "2023-06-05T19:53:08.320Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/eapi/v0/identities": {
      "patch": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Identity update",
        "description": "Update specific fields of an existing customer identity.\n\n**Use Case**: Update customer information without resubmitting all documents.\n\n**Partial Updates**: Only include fields you want to update. Omitted fields remain unchanged.\n\n**Important Notes**:\n- Some changes may trigger re-verification\n- Email and identityReference are required to identify the customer\n- Changes to critical fields (name, DOB) may require document re-submission",
        "operationId": "patchIdentity",
        "tags": [
          "Identities"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IdentityPatchRequest"
              },
              "examples": {
                "update_contact": {
                  "summary": "Update contact information",
                  "description": "Update email and mobile number only",
                  "value": {
                    "identityReference": "customer-12345",
                    "email": "updated.email@example.com",
                    "mobileNumber": "+61431000002"
                  }
                },
                "update_address": {
                  "summary": "Update residential address",
                  "description": "Update customer's residential address",
                  "value": {
                    "identityReference": "customer-67890",
                    "email": "john.doe@example.com",
                    "customerIdentity": {
                      "residentialAddress": {
                        "addressLine": "456 New Street",
                        "suburb": "Melbourne",
                        "state": "VIC",
                        "postCode": "3000",
                        "country": "AU"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "No content, success. The identity has been updated successfully."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/eapi/v0/identities/transactions/limits": {
      "post": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Transaction Limits",
        "description": "Returns applicable transaction limits for a given identity and transaction context.\n\nLimits are derived from:\n- payment-provider limits (route/method specific), and\n- customer-specific limits (tier-based and/or overrides)\n\nThe response returns:\n- limits for DAILY/WEEKLY/MONTHLY/ANNUAL windows,\n  including provider vs customer sources\n",
        "operationId": "postIdentityTransactionLimits",
        "tags": [
          "Limits"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LimitsRequest"
              },
              "examples": {
                "example": {
                  "summary": "Limits request",
                  "value": {
                    "identityReference": "206-0x56c386b7b49be8618dbcdb2c6d09e161645c31ed",
                    "method": "payid-bank-transfer",
                    "fiat": "AUD",
                    "crypto": "BTC",
                    "blockchain": "BTC",
                    "transactionType": "ONRAMP"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Limits result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LimitsResponse"
                },
                "examples": {
                  "limits_response": {
                    "summary": "Transaction limits for customer",
                    "description": "Shows per-transaction and periodical limits from both provider and customer sources",
                    "value": {
                      "identityReference": "RandomCustReferenceForTesting020600001",
                      "limits": {
                        "transaction": {
                          "maxFiat": {
                            "amount": "15000",
                            "currency": "AUD"
                          },
                          "minFiat": {
                            "amount": "50",
                            "currency": "AUD"
                          }
                        },
                        "periodical": [
                          {
                            "period": "DAILY",
                            "sources": {
                              "provider": {
                                "maxFiat": {
                                  "amount": "10000",
                                  "currency": "AUD"
                                },
                                "remainder": "9000"
                              },
                              "customer": {
                                "maxFiat": {
                                  "amount": "15000",
                                  "currency": "AUD"
                                },
                                "remainder": "14000"
                              }
                            }
                          },
                          {
                            "period": "WEEKLY",
                            "sources": {
                              "provider": {
                                "maxFiat": {
                                  "amount": "30000",
                                  "currency": "AUD"
                                },
                                "remainder": "29000"
                              },
                              "customer": {
                                "maxFiat": {
                                  "amount": "50000",
                                  "currency": "AUD"
                                },
                                "remainder": "49000"
                              }
                            }
                          },
                          {
                            "period": "MONTHLY",
                            "sources": {
                              "provider": {
                                "maxFiat": {
                                  "amount": "120000",
                                  "currency": "AUD"
                                },
                                "remainder": "119000"
                              },
                              "customer": {
                                "maxFiat": {
                                  "amount": "200000",
                                  "currency": "AUD"
                                },
                                "remainder": "199000"
                              }
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/identities/transactions/eligibility": {
      "post": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Identity transaction eligibility",
        "description": "Request transaction eligibility for a specific identity",
        "operationId": "Identities/Transactions",
        "tags": [
          "Eligibility"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EligibilityRequest"
              },
              "examples": {
                "with_identity_reference": {
                  "summary": "Check eligibility with identity reference",
                  "description": "Check if existing customer can perform transaction",
                  "value": {
                    "identityReference": "customer-12345",
                    "method": "payid-bank-transfer",
                    "transactionType": "ONRAMP",
                    "fiat": "AUD",
                    "crypto": "BTC",
                    "blockchain": "BTC",
                    "fiatAmount": "100.00"
                  }
                },
                "without_identity_reference": {
                  "summary": "Check eligibility without identity reference",
                  "description": "Check eligibility for new customer using personal details",
                  "value": {
                    "email": "newuser@example.com",
                    "countryOfResidence": "AU",
                    "dateOfBirth": "1990-01-30",
                    "method": "payid-bank-transfer",
                    "transactionType": "ONRAMP",
                    "fiat": "AUD",
                    "crypto": "USDT",
                    "blockchain": "TRON",
                    "fiatAmount": "500.00"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Eligibility check result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EligibilityResponse"
                },
                "examples": {
                  "ready_to_transact": {
                    "summary": "Customer ready to transact",
                    "description": "Customer has completed all KYC requirements and can proceed",
                    "value": {
                      "paymentReady": true,
                      "requirements": []
                    }
                  },
                  "kyc_required": {
                    "summary": "KYC requirements needed",
                    "description": "Customer needs to complete KYC verification",
                    "value": {
                      "paymentReady": false,
                      "kycRequirements": [
                        "NAME",
                        "DOB",
                        "ADDRESS",
                        "TIN",
                        "POA",
                        "DOCUMENT",
                        "SELFIE"
                      ]
                    }
                  },
                  "additional_info_required": {
                    "summary": "Additional information required",
                    "description": "Customer needs to provide occupation and source of funds",
                    "value": {
                      "paymentReady": false,
                      "kycRequirements": [
                        "OCCUPATION",
                        "SOURCE_FUNDS",
                        "PURPOSE_OF_TX"
                      ]
                    }
                  },
                  "us_tax_id_required": {
                    "summary": "Tax ID required",
                    "description": "Customer needs to provide tax identification",
                    "value": {
                      "paymentReady": false,
                      "kycRequirements": [
                        "TIN"
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/price": {
      "get": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Indicative price request",
        "description": "Request an indicative, non-persisted price. The returned price is a point-in-time estimate and is **not** stored or locked — it carries no `quoteId` and cannot be referenced later.\n\nUse this endpoint for display purposes, transaction previews, or fee breakdowns. For a locked price that can be used to create a ramp transaction, use the `GET /eapi/v0/quote` endpoint instead.\n\nPrices are subject to change based on market volatility and network congestion.",
        "operationId": "getPrice",
        "tags": [
          "Price"
        ],
        "parameters": [
          {
            "name": "identityReference",
            "in": "query",
            "description": "A unique customer identifier provided by you. This field is required and must be unique for each customer. Please ensure you consistently reuse the same identityReference for repeat interactions with the same customer, allowing us to reliably recognize and associate their identity.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c-13344"
            }
          },
          {
            "name": "fiat",
            "in": "query",
            "description": "The desired fiat",
            "required": true,
            "schema": {
              "type": "string",
              "example": "AUD"
            }
          },
          {
            "name": "crypto",
            "in": "query",
            "description": "The desired crypto",
            "required": true,
            "schema": {
              "type": "string",
              "example": "USDT"
            }
          },
          {
            "name": "method",
            "in": "query",
            "description": "The payment method.\n\n| Available payments |\n|-------------|\n|debit-credit-card|\n|apple-pay|\n|sepa-bank-transfer|\n|gbp-bank-transfer|\n|ach-bank-transfer|\n|pix|\n|zar-bank-transfer|\n|interac-bank-transfer|\n|ideal-bank-transfer|\n|google-pay|\n|payid-bank-transfer|\n|wire-transfer|\n|spei|\n|pse|\n|khipu|\n|aud-bank-transfer|\n|usd-bank-transfer|\n|paypal|\n|klarna-paynow|\n",
            "required": true,
            "schema": {
              "type": "string",
              "example": "payid-bank-transfer"
            }
          },
          {
            "name": "blockchain",
            "in": "query",
            "description": "The chain for the crypto currency e.g. TRON or ETH",
            "required": true,
            "schema": {
              "type": "string",
              "example": "TRON"
            }
          },
          {
            "name": "transactionType",
            "in": "query",
            "description": "The type of transaction",
            "schema": {
              "type": "string",
              "enum": [
                "ONRAMP",
                "OFFRAMP"
              ],
              "example": "ONRAMP"
            }
          },
          {
            "name": "fiatAmount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "minimum": 10
            },
            "description": "**Required without cryptoAmount**\nThe amount in fiat currency to convert.\nAmount in fiat minor precision (typically 2 decimals).\nThis locks the fiat amount; the crypto amount will be computed and rounded to the configured crypto scale.\nNote: due to differing decimal scales and rounding rules, converting fiat→crypto and then crypto→fiat may not return the exact original number..\n"
          },
          {
            "name": "cryptoAmount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "minimum": 0.01
            },
            "description": "**Required without fiatAmount**\nAmount in crypto precision (token-dependent, e.g., 6–8 decimals).\nThis locks the crypto amount; the fiat amount will be computed and rounded to the fiat scale.\nNote: small differences vs the reverse path are expected from precision/rounding.\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Indicative price response. This price is not persisted and cannot be used to create a ramp transaction.",
            "x-summary": "Prices are subject to change due to market volatility and network congestion, therefore it's not recommended to cache this response for longer than 1 minute.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/OnRampQuoteResponse"
                    },
                    {
                      "$ref": "#/components/schemas/OffRampQuoteResponse"
                    }
                  ]
                },
                "examples": {
                  "onramp_fiat_locked": {
                    "summary": "On-ramp quote with fiat amount locked",
                    "description": "Customer wants to spend exactly 100 AUD to buy USDT on TRON",
                    "value": {
                      "identityReference": "customer-12345",
                      "source": {
                        "fiat": {
                          "id": "AUD",
                          "method": "payid-bank-transfer"
                        },
                        "amount": "100.00"
                      },
                      "target": {
                        "crypto": {
                          "id": "USDT",
                          "blockchain": "TRON"
                        },
                        "amount": "95.50"
                      },
                      "processingFee": "2.50",
                      "networkFee": "2.00",
                      "marketRate": {
                        "crypto": {
                          "USD": "1.0000",
                          "AUD": "1.4071"
                        },
                        "forex": {
                          "reference": "USD",
                          "AUD": "1.4071"
                        }
                      }
                    }
                  },
                  "onramp_crypto_locked": {
                    "summary": "On-ramp quote with crypto amount locked",
                    "description": "Customer wants to receive exactly 100 USDT on TRON",
                    "value": {
                      "identityReference": "customer-12345",
                      "source": {
                        "fiat": {
                          "id": "AUD",
                          "method": "payid-bank-transfer"
                        },
                        "amount": "145.23"
                      },
                      "target": {
                        "crypto": {
                          "id": "USDT",
                          "blockchain": "TRON"
                        },
                        "amount": "100.00"
                      },
                      "processingFee": "3.62",
                      "networkFee": "2.00",
                      "marketRate": {
                        "crypto": {
                          "USD": "1.0000",
                          "AUD": "1.4071"
                        },
                        "forex": {
                          "reference": "USD",
                          "AUD": "1.4071"
                        }
                      }
                    }
                  },
                  "offramp_crypto_locked": {
                    "summary": "Off-ramp quote with crypto amount locked",
                    "description": "Customer wants to sell exactly 0.01 BTC for AUD",
                    "value": {
                      "identityReference": "customer-12345",
                      "source": {
                        "crypto": {
                          "id": "BTC",
                          "blockchain": "BTC"
                        },
                        "amount": "0.01"
                      },
                      "target": {
                        "fiat": {
                          "id": "AUD",
                          "method": "payid-bank-transfer"
                        },
                        "amount": "542.15"
                      },
                      "processingFee": "13.55",
                      "networkFee": "0.00",
                      "marketRate": {
                        "crypto": {
                          "USD": "38497.64",
                          "AUD": "54170.03"
                        },
                        "forex": {
                          "reference": "USD",
                          "AUD": "1.4071"
                        }
                      }
                    }
                  },
                  "offramp_fiat_locked": {
                    "summary": "Off-ramp quote with fiat amount locked",
                    "description": "Customer wants to receive exactly 1000 AUD",
                    "value": {
                      "identityReference": "customer-12345",
                      "source": {
                        "crypto": {
                          "id": "BTC",
                          "blockchain": "BTC"
                        },
                        "amount": "0.01876"
                      },
                      "target": {
                        "fiat": {
                          "id": "AUD",
                          "method": "payid-bank-transfer"
                        },
                        "amount": "1000.00"
                      },
                      "processingFee": "25.00",
                      "networkFee": "0.00",
                      "marketRate": {
                        "crypto": {
                          "USD": "38497.64",
                          "AUD": "54170.03"
                        },
                        "forex": {
                          "reference": "USD",
                          "AUD": "1.4071"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/quote": {
      "get": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Quote request",
        "description": "Request a quote with a locked price and a unique `quoteId`. The quote is valid for **3 minutes** (`expiresAt`). Unique identifier for this quote. Use this when creating a ramp transaction via the Ramps Request payload to lock the quote in.\n\nPrices are subject to change based on market volatility and network congestion. Once expired, a new quote must be requested.",
        "operationId": "getQuote",
        "tags": [
          "Quote"
        ],
        "parameters": [
          {
            "name": "identityReference",
            "in": "query",
            "description": "A unique customer identifier provided by you. This field is required and must be unique for each customer. Please ensure you consistently reuse the same identityReference for repeat interactions with the same customer, allowing us to reliably recognize and associate their identity.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c-13344"
            }
          },
          {
            "name": "fiat",
            "in": "query",
            "description": "The desired fiat currency. Must be formatted as an ISO 4217 code.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "AUD"
            }
          },
          {
            "name": "crypto",
            "in": "query",
            "description": "The desired crypto token.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "ETH"
            }
          },
          {
            "name": "method",
            "in": "query",
            "description": "The payment method.\n\n| Available payments |\n|-------------|\n|debit-credit-card|\n|apple-pay|\n|sepa-bank-transfer|\n|gbp-bank-transfer|\n|ach-bank-transfer|\n|upi|\n|pix|\n|zar-bank-transfer|\n|interac-bank-transfer|\n|ideal-bank-transfer|\n|google-pay|\n|payid-bank-transfer|\n|poli-bank-transfer|\n|try-bank-transfer|\n|wire-transfer|\n|spei|\n|pse|\n|khipu|\n|io-ar-bank-transfer|\n|aud-bank-transfer|\n|open-banking|\n|euro-open-banking|\n|usd-bank-transfer|\n|paypal|\n|klarna-paynow|\n",
            "required": true,
            "schema": {
              "type": "string",
              "example": "payid-bank-transfer"
            }
          },
          {
            "name": "blockchain",
            "in": "query",
            "description": "The blockchain for the crypto currency e.g. TRON or ETH.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "ETH"
            }
          },
          {
            "name": "transactionType",
            "in": "query",
            "description": "The type of transaction.",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ONRAMP",
                "OFFRAMP"
              ],
              "example": "ONRAMP"
            }
          },
          {
            "name": "fiatAmount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "minimum": 10
            },
            "description": "**Required without cryptoAmount**\nThe amount in fiat currency to convert.\nAmount in fiat minor precision (typically 2 decimals).\nThis locks the fiat amount; the crypto amount will be computed and rounded to the configured crypto scale.\nNote: due to differing decimal scales and rounding rules, converting fiat→crypto and then crypto→fiat may not return the exact original number.\n"
          },
          {
            "name": "cryptoAmount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "minimum": 0.01
            },
            "description": "**Required without fiatAmount**\nAmount in crypto precision (token-dependent, e.g., 6–8 decimals).\nThis locks the crypto amount; the fiat amount will be computed and rounded to the fiat scale.\nNote: small differences vs the reverse path are expected from precision/rounding.\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Quote response with a unique `quoteId` and an `expiresAt` timestamp. The quote is valid for 3 minutes.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/OnRampQuoteWithIdResponse"
                    },
                    {
                      "$ref": "#/components/schemas/OffRampQuoteWithIdResponse"
                    }
                  ]
                },
                "examples": {
                  "onramp_fiat_locked": {
                    "summary": "On-ramp quote with fiat amount locked",
                    "description": "Customer wants to spend exactly 24.50 AUD to buy ETH",
                    "value": {
                      "quoteId": "6e9174edd370ffe6331aeda7a6d75592",
                      "identityReference": "wesley",
                      "source": {
                        "fiat": {
                          "id": "AUD",
                          "method": "payid-bank-transfer"
                        },
                        "amount": "24.50"
                      },
                      "target": {
                        "crypto": {
                          "id": "ETH",
                          "blockchain": "ETH"
                        },
                        "amount": "0.007259"
                      },
                      "processingFee": "0.00",
                      "networkFee": "0.00",
                      "marketRate": {
                        "crypto": {
                          "USD": "2342.218527689999974",
                          "AUD": "3297.796842616966163"
                        },
                        "forex": {
                          "reference": "USD",
                          "AUD": "1.4079800"
                        }
                      },
                      "expiresAt": "2026-04-10 04:50:36"
                    }
                  },
                  "onramp_crypto_locked": {
                    "summary": "On-ramp quote with crypto amount locked",
                    "description": "Customer wants to receive exactly 0.01 ETH",
                    "value": {
                      "quoteId": "7f0285dee481ffe7331bfca9c8f97603",
                      "identityReference": "customer-12345",
                      "source": {
                        "fiat": {
                          "id": "AUD",
                          "method": "payid-bank-transfer"
                        },
                        "amount": "33.75"
                      },
                      "target": {
                        "crypto": {
                          "id": "ETH",
                          "blockchain": "ETH"
                        },
                        "amount": "0.01"
                      },
                      "processingFee": "0.84",
                      "networkFee": "0.00",
                      "marketRate": {
                        "crypto": {
                          "USD": "2342.218527689999974",
                          "AUD": "3297.796842616966163"
                        },
                        "forex": {
                          "reference": "USD",
                          "AUD": "1.4079800"
                        }
                      },
                      "expiresAt": "2026-04-10 04:52:10"
                    }
                  },
                  "offramp_crypto_locked": {
                    "summary": "Off-ramp quote with crypto amount locked",
                    "description": "Customer wants to sell exactly 100 USDT for AUD",
                    "value": {
                      "quoteId": "8a2b45ccd891ffe7442bfdb8b7e86703",
                      "identityReference": "customer-12345",
                      "source": {
                        "crypto": {
                          "id": "USDT",
                          "blockchain": "TRON"
                        },
                        "amount": "100"
                      },
                      "target": {
                        "fiat": {
                          "id": "AUD",
                          "method": "payid-bank-transfer"
                        },
                        "amount": "95.50"
                      },
                      "processingFee": "2.50",
                      "networkFee": "2.00",
                      "marketRate": {
                        "crypto": {
                          "USD": "1.0000",
                          "AUD": "1.4071"
                        },
                        "forex": {
                          "reference": "USD",
                          "AUD": "1.4071"
                        }
                      },
                      "expiresAt": "2026-04-10 04:53:12"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/verifications/otp": {
      "post": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Request OTP Code",
        "description": "Sends a one-time password (OTP) code to the customer's email address for verification. The OTP code is valid for a limited time and can only be used once. Rate limited to 3 requests per minute per customer.",
        "operationId": "requestOtp",
        "tags": [
          "Verifications"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OtpRequestRequest"
              },
              "examples": {
                "request_otp": {
                  "summary": "Request OTP for customer",
                  "description": "Send OTP code to customer's registered email address",
                  "value": {
                    "identityReference": "customer-12345",
                    "email": "user@example.com"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OTP sent successfully to customer's email address",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed per minute",
                "schema": {
                  "type": "integer",
                  "example": 3
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in current window",
                "schema": {
                  "type": "integer",
                  "example": 2
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OtpRequestResponse"
                },
                "examples": {
                  "success": {
                    "summary": "OTP sent successfully",
                    "value": {
                      "message": "OTP sent successfully"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/OtpFeatureNotEnabled"
          },
          "422": {
            "description": "Validation error - invalid or missing identity reference",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "example": "The identity reference field is required."
                    },
                    "errors": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "missing_identity_reference": {
                    "summary": "Missing identity reference",
                    "value": {
                      "message": "The identity reference field is required.",
                      "errors": {
                        "identityReference": [
                          "The identity reference field is required."
                        ]
                      }
                    }
                  },
                  "invalid_identity_reference": {
                    "summary": "Invalid customer reference",
                    "value": {
                      "message": "The selected identity reference is invalid.",
                      "errors": {
                        "identityReference": [
                          "The selected identity reference is invalid."
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/OtpRateLimitExceeded"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/verifications/otp/verify": {
      "post": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Verify OTP Code",
        "description": "Verifies the OTP code sent to the customer's email address. Upon successful verification, the customer's email is marked as verified. OTP codes are single-use and expire after a set time period. Rate limited to 4 verification attempts per minute per customer.",
        "operationId": "verifyOtp",
        "tags": [
          "Verifications"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OtpVerifyRequest"
              },
              "examples": {
                "verify_otp": {
                  "summary": "Verify OTP code",
                  "description": "Verify the OTP code received via email",
                  "value": {
                    "identityReference": "customer-12345",
                    "email": "test@example.com",
                    "code": "1234"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OTP verified successfully. Customer email is now verified.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of verification attempts allowed per minute",
                "schema": {
                  "type": "integer",
                  "example": 4
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of verification attempts remaining in current window",
                "schema": {
                  "type": "integer",
                  "example": 3
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OtpVerifyResponse"
                },
                "examples": {
                  "success": {
                    "summary": "OTP verified successfully",
                    "value": {
                      "message": "Success"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/OtpFeatureNotEnabled"
          },
          "422": {
            "description": "Validation error - invalid or missing fields, incorrect OTP code",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "example": "Validation error occurred."
                    },
                    "errors": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "missing_fields": {
                    "summary": "Missing required fields",
                    "value": {
                      "errors": {
                        "identityReference": [
                          "The identity reference field is required."
                        ],
                        "code": [
                          "The code field is required."
                        ]
                      }
                    }
                  },
                  "invalid_code_length": {
                    "summary": "Invalid code length",
                    "value": {
                      "errors": {
                        "code": [
                          "The code field must be at least 4 characters."
                        ]
                      }
                    }
                  },
                  "incorrect_code": {
                    "summary": "Incorrect OTP code",
                    "description": "The provided OTP code is invalid, expired, or has already been used",
                    "value": {
                      "message": "The provided code is invalid.",
                      "errors": {
                        "code": [
                          "The provided code is invalid."
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/OtpRateLimitExceeded"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/payment-methods/{transactionType}": {
      "get": {
        "summary": "Payment Methods",
        "description": "Retrieve supported payment methods for the specified transaction type as part of the configuration data required to build onboarding and transaction flows.\n\n**Use Cases**:\n- Populate payment method selectors for on-ramp and off-ramp journeys\n- Determine which fiat currencies are available for each payment method\n- Pre-configure transaction forms before requesting quotes or creating ramps\n- Show only valid payment options for the customer's selected transaction direction\n\n**Transaction Types**:\n- `onramp` - Payment methods available for buying cryptocurrency with fiat\n- `offramp` - Payment methods available for selling cryptocurrency to fiat\n\n**Response Structure**:\nEach payment method includes:\n- `method`: Unique code used in API requests\n- `name`: Human-readable payment method name\n- `supportedFiats`: Fiat currencies supported by that payment method",
        "operationId": "listPaymentMethods",
        "tags": [
          "Configuration"
        ],
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "parameters": [
          {
            "name": "transactionType",
            "in": "path",
            "description": "The transaction direction used to retrieve available payment methods.\n\n**Values**:\n- `onramp` - Buy cryptocurrency using fiat\n- `offramp` - Sell cryptocurrency and receive fiat",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "onramp",
                "offramp"
              ],
              "example": "onramp"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response with supported payment methods for the selected transaction type.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentMethodsResponse"
                },
                "examples": {
                  "onramp": {
                    "summary": "On-ramp payment methods",
                    "description": "Available payment methods for buying cryptocurrency",
                    "value": {
                      "data": [
                        {
                          "method": "payid-bank-transfer",
                          "name": "PayID Bank Transfer",
                          "supportedFiats": [
                            "AUD"
                          ]
                        },
                        {
                          "method": "sepa-bank-transfer",
                          "name": "SEPA Bank Transfer",
                          "supportedFiats": [
                            "EUR"
                          ]
                        },
                        {
                          "method": "ach-bank-transfer",
                          "name": "ACH Bank Transfer",
                          "supportedFiats": [
                            "USD"
                          ]
                        },
                        {
                          "method": "debit-credit-card",
                          "name": "Debit/Credit Card",
                          "supportedFiats": [
                            "AUD",
                            "USD",
                            "EUR",
                            "GBP"
                          ]
                        }
                      ]
                    }
                  },
                  "offramp": {
                    "summary": "Off-ramp payment methods",
                    "description": "Available payment methods for selling cryptocurrency",
                    "value": {
                      "data": [
                        {
                          "method": "payid-bank-transfer",
                          "name": "PayID Bank Transfer",
                          "supportedFiats": [
                            "AUD"
                          ]
                        },
                        {
                          "method": "sepa-bank-transfer",
                          "name": "SEPA Bank Transfer",
                          "supportedFiats": [
                            "EUR"
                          ]
                        },
                        {
                          "method": "ach-bank-transfer",
                          "name": "ACH Bank Transfer",
                          "supportedFiats": [
                            "USD"
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "$ref": "#/components/responses/InvalidTransactionType"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/cryptocurrencies/{transactionType}": {
      "get": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Cryptocurrencies",
        "description": "Retrieve supported cryptocurrencies for the specified transaction type as part of the configuration data required to build onboarding and transaction flows.\n\n**Use Cases**:\n- Display available cryptocurrency options to customers\n- Show supported blockchains for each cryptocurrency\n- Pre-configure asset and network selectors before pricing or ramp creation\n- Filter cryptocurrencies by transaction direction\n\n**Transaction Types**:\n- `onramp` - Cryptocurrencies available for buying (fiat → crypto)\n- `offramp` - Cryptocurrencies available for selling (crypto → fiat)\n\n**Response Structure**: Each cryptocurrency includes:\n- `crypto`: Unique coin code (e.g., `BTC`, `ETH`, `USDT`)\n- `name`: Human-readable display name\n- `blockchains`: Array of supported blockchain networks, each with contract address, minimum amount, default flag, and restricted countries",
        "operationId": "listCryptocurrencies",
        "tags": [
          "Configuration"
        ],
        "parameters": [
          {
            "name": "transactionType",
            "in": "path",
            "description": "The transaction direction used to retrieve available cryptocurrencies.\n\n**Values**:\n- `onramp` - Buy cryptocurrency using fiat\n- `offramp` - Sell cryptocurrency and receive fiat",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "onramp",
                "offramp"
              ],
              "example": "onramp"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response with supported cryptocurrencies and blockchains for the selected transaction type.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoCurrenciesResponse"
                },
                "examples": {
                  "onramp_cryptocurrencies": {
                    "summary": "On-ramp cryptocurrencies",
                    "description": "Supported cryptocurrencies available for purchase (fiat → crypto)",
                    "value": {
                      "data": [
                        {
                          "crypto": "BTC",
                          "name": "Bitcoin",
                          "blockchains": [
                            {
                              "blockchain": "BTC",
                              "name": "Bitcoin",
                              "isDefault": true,
                              "address": null,
                              "network": null,
                              "minimum": "0.00001",
                              "unsupportedCountries": []
                            }
                          ]
                        },
                        {
                          "crypto": "USDT",
                          "name": "Tether USD",
                          "blockchains": [
                            {
                              "blockchain": "ETH",
                              "name": "Ethereum",
                              "isDefault": false,
                              "address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
                              "network": null,
                              "minimum": "1",
                              "unsupportedCountries": []
                            },
                            {
                              "blockchain": "TRON",
                              "name": "TRON",
                              "isDefault": true,
                              "address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
                              "network": null,
                              "minimum": "1",
                              "unsupportedCountries": []
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "offramp_cryptocurrencies": {
                    "summary": "Off-ramp cryptocurrencies",
                    "description": "Supported cryptocurrencies available for selling (crypto → fiat)",
                    "value": {
                      "data": [
                        {
                          "crypto": "ETH",
                          "name": "Ethereum",
                          "blockchains": [
                            {
                              "blockchain": "ETH",
                              "name": "Ethereum",
                              "isDefault": true,
                              "address": null,
                              "network": null,
                              "minimum": "0.001",
                              "unsupportedCountries": [
                                "US",
                                "CA"
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "$ref": "#/components/responses/InvalidTransactionType"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/fiats/{transactionType}": {
      "get": {
        "summary": "Supported Fiats",
        "description": "Retrieve a list of supported fiat currencies for the specified transaction type (onramp or offramp).\n\n**Use Cases**:\n- Display available fiat currencies to customers during onboarding\n- Filter payment methods by fiat currency\n- Show fiat options in transaction creation UI\n- Validate customer-selected fiat before transaction\n\n**Transaction Types**:\n- `onramp` - Returns fiat currencies supported for buying cryptocurrency\n- `offramp` - Returns fiat currencies supported for selling cryptocurrency\n\n**Response Structure**: Each fiat currency includes:\n- `fiat` - Three-letter ISO 4217 currency code (e.g., \"AUD\", \"USD\")\n- `name` - Human-readable currency name (e.g., \"Australian Dollar\")\n- `symbol` - Currency symbol (e.g., \"$\", \"€\")\n- `supportedPaymentMethods` - Array of payment methods available for this fiat",
        "operationId": "listFiats",
        "tags": [
          "Configuration"
        ],
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "parameters": [
          {
            "name": "transactionType",
            "in": "path",
            "description": "The type of transaction to retrieve supported fiats for.\n\n**Values**:\n- `onramp` - Buying cryptocurrency with fiat\n- `offramp` - Selling cryptocurrency for fiat\n\n**Note**: Value is case-insensitive (e.g., `onramp`, `ONRAMP`, `OnRamp` are all valid).",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "onramp",
                "offramp"
              ],
              "example": "onramp"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response with list of supported fiat currencies and their payment methods.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FiatsListResponse"
                },
                "examples": {
                  "onramp_fiats": {
                    "summary": "On-ramp supported fiats",
                    "description": "Example response for on-ramp transaction type showing available fiat currencies for buying crypto.",
                    "value": [
                      {
                        "fiat": "AUD",
                        "name": "Australian Dollar",
                        "symbol": "$",
                        "supportedPaymentMethods": [
                          {
                            "method": "payid-bank-transfer",
                            "name": "Payid Bank Transfer",
                            "minimum": "10",
                            "maximum": "50000"
                          },
                          {
                            "method": "debit-credit-card",
                            "name": "Debit Credit Card",
                            "minimum": "10",
                            "maximum": "10000"
                          }
                        ]
                      },
                      {
                        "fiat": "USD",
                        "name": "US Dollar",
                        "symbol": "$",
                        "supportedPaymentMethods": [
                          {
                            "method": "ach-bank-transfer",
                            "name": "Ach Bank Transfer",
                            "minimum": "10",
                            "maximum": "25000"
                          },
                          {
                            "method": "debit-credit-card",
                            "name": "Debit Credit Card",
                            "minimum": "10",
                            "maximum": "10000"
                          }
                        ]
                      }
                    ]
                  },
                  "offramp_fiats": {
                    "summary": "Off-ramp supported fiats",
                    "description": "Example response for off-ramp transaction type showing available fiat currencies for selling crypto.",
                    "value": [
                      {
                        "fiat": "AUD",
                        "name": "Australian Dollar",
                        "symbol": "$",
                        "supportedPaymentMethods": [
                          {
                            "method": "payid-bank-transfer",
                            "name": "Payid Bank Transfer",
                            "minimum": "10",
                            "maximum": "50000"
                          }
                        ]
                      },
                      {
                        "fiat": "EUR",
                        "name": "Euro",
                        "symbol": "€",
                        "supportedPaymentMethods": [
                          {
                            "method": "sepa-bank-transfer",
                            "name": "Sepa Bank Transfer",
                            "minimum": "10",
                            "maximum": "50000"
                          }
                        ]
                      }
                    ]
                  },
                  "empty_response": {
                    "summary": "Empty response",
                    "description": "Response when no payment providers are configured for the merchant.",
                    "value": []
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "$ref": "#/components/responses/InvalidTransactionType"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/eapi/v0/countries": {
      "get": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "summary": "Supported Countries",
        "description": "Retrieve supported countries for KYC and transaction flows as part of the configuration data required to build onboarding and transaction flows.\n\n**Use Cases**:\n- Populate country dropdowns during customer onboarding\n- Determine which countries are enabled for your merchant configuration\n- Retrieve state or province options for countries that require region selection\n- Filter valid options based on customer location\n\n**Response Structure**: Each country includes:\n- `id`: Two-letter ISO country code\n- `description`: Human-readable country name\n- `states`: List of supported states or provinces for that country, if applicable",
        "operationId": "listCountries",
        "tags": [
          "Configuration"
        ],
        "responses": {
          "200": {
            "description": "Successful response with supported countries and their states or provinces where applicable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CountriesListResponse"
                },
                "examples": {
                  "countries_response": {
                    "summary": "Supported countries response",
                    "description": "Example response showing countries with and without state or province lists.",
                    "value": [
                      {
                        "id": "US",
                        "description": "United States",
                        "states": [
                          {
                            "id": "AL",
                            "description": "Alabama"
                          },
                          {
                            "id": "CA",
                            "description": "California"
                          },
                          {
                            "id": "TX",
                            "description": "Texas"
                          }
                        ]
                      },
                      {
                        "id": "CA",
                        "description": "Canada",
                        "states": [
                          {
                            "id": "AB",
                            "description": "Alberta"
                          },
                          {
                            "id": "BC",
                            "description": "British Columbia"
                          },
                          {
                            "id": "ON",
                            "description": "Ontario"
                          }
                        ]
                      },
                      {
                        "id": "GB",
                        "description": "United Kingdom",
                        "states": []
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    }
  },
  "webhooks": {
    "rampMessage": {
      "post": {
        "tags": [
          "Ramps"
        ],
        "summary": "Inbound message regarding the ramp status",
        "operationId": "rampMessage",
        "security": [],
        "description": "When a ramp transitions into a new status, the status update will be sent to the provided callback endpoint to your server.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "order_id",
                  "status",
                  "status_date",
                  "internal_reason",
                  "external_reason"
                ],
                "properties": {
                  "order_id": {
                    "type": "string",
                    "description": "The ID of the ramp, returned on creation of a ramp, or via the GET ramp endpoint.",
                    "example": "fd04c5780062121628e05324003eef30"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "IN_PROGRESS",
                      "REFUNDED",
                      "EXPIRED",
                      "FULFILLED",
                      "EXTRA_VERIFICATION",
                      "COIN_DEPOSIT_READY",
                      "COIN_DEPOSIT_CONFIRMED",
                      "COIN_TRANSFERRED",
                      "FIAT_TRANSFERRED",
                      "ACCOUNT_BLOCKED",
                      "PAYMENT_READY",
                      "PAYMENT_ACCEPTED",
                      "PAYMENT_RECEIVED",
                      "PAYMENT_DECLINED",
                      "PAYMENT_CANCELLED"
                    ],
                    "description": "| Status                 | Description                                                          |\n|------------------------|----------------------------------------------------------------------|\n| IN_PROGRESS            | Order is in progress. |\n| REFUNDED               | Order has been refunded                                              |\n| EXPIRED                | Order has expired.                                                   |\n| FULFILLED              | Order has been completed.                                            |\n| EXTRA_VERIFICATION     | Customer requires extra verification.                                |\n| COIN_DEPOSIT_READY     | Coin deposit is ready.                                               |\n| COIN_DEPOSIT_CONFIRMED | Coin deposit has been confirmed.                                     |\n| COIN_TRANSFERRED       | Coin has been transferred.                                           |\n| FIAT_TRANSFERRED       | Fiat has been transferred.                                           |\n| ACCOUNT_BLOCKED   | Customer account is blocked., a separate webhook will be sent with the Identity reference of the customer |\n| PAYMENT_READY          | Payment is ready to be processed.                                    |\n| PAYMENT_ACCEPTED       | Payment has been accepted for the order                              |\n| PAYMENT_RECEIVED       | Payment has been received.                                           |\n| PAYMENT_DECLINED       | Payment has been declined.                                           |\n| PAYMENT_CANCELLED      | Payment has been cancelled.                                          |\n",
                    "example": "IN_PROGRESS"
                  },
                  "status_date": {
                    "type": "string",
                    "format": "datetime",
                    "description": "The date of the status update",
                    "example": "2023-06-05 19:53:08"
                  },
                  "created_at": {
                    "type": "string",
                    "format": "datetime",
                    "description": "The date of the status update",
                    "example": "2023-06-02 14:44:00"
                  },
                  "updated_at": {
                    "type": "string",
                    "format": "datetime",
                    "description": "The date of the status update",
                    "example": "2023-06-09 13:53:08"
                  },
                  "internal_reason": {
                    "type": "string",
                    "description": "The internal body for this inbound message containing the reason of the message, this is for internal use.",
                    "example": "Order is in progress"
                  },
                  "external_reason": {
                    "type": "string",
                    "description": "The external reason to provide to your customer via your designated messaging channel.",
                    "example": "Your payment was successfully received. Your order is now being processed."
                  },
                  "order_type": {
                    "type": "string",
                    "enum": [
                      "ONRAMP",
                      "OFFRAMP"
                    ],
                    "description": "The transaction type of the ramp",
                    "example": "ONRAMP"
                  },
                  "crypto_coin": {
                    "type": "string",
                    "description": "The crypto currency requested",
                    "example": "ETH"
                  },
                  "crypto_blockchain": {
                    "type": "string",
                    "description": "The blockchain",
                    "example": "ETH"
                  },
                  "crypto_amount": {
                    "type": "string",
                    "description": "The amount of crypto",
                    "example": "0.228632"
                  },
                  "fiat_currency": {
                    "type": "string",
                    "description": "The requested fiat currency",
                    "example": "USD"
                  },
                  "fiat_amount": {
                    "type": "string",
                    "description": "The amount of fiat",
                    "example": "100"
                  },
                  "asset_price": {
                    "type": "string",
                    "description": "The market rate of the asset (crypto)",
                    "example": "0.018656"
                  },
                  "payment": {
                    "type": "string",
                    "description": "The payment requested",
                    "example": "100"
                  },
                  "processing_fee": {
                    "type": "string",
                    "description": "The processing fee associated to the ramp",
                    "example": "1.95"
                  },
                  "network_fee": {
                    "type": "string",
                    "description": "The network fee associated to the ramp",
                    "example": "2.33"
                  },
                  "usd_exchange_rate": {
                    "type": "string",
                    "description": "Represent the value of 1 unit of the source Fiat in USD",
                    "example": "1.36"
                  },
                  "transaction_hash": {
                    "type": "string",
                    "description": "The transaction hash of the completed ramp",
                    "example": "0x9401a7173d7bd2ad73e8b798fdc30c83fb0529e6edbad163c549a5ad136407be"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Your server returns this code if it accepts the callback. On a failed response we will retry sending the webook.\n"
          }
        }
      }
    },
    "identityMessage": {
      "post": {
        "security": [],
        "tags": [
          "Identities"
        ],
        "summary": "Inbound message regarding customer Identity related messages",
        "operationId": "identityMessage",
        "description": "When a customer failed to create an order for a specific reason, the status update will be sent to the provided callback endpoint to your server.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "identity_reference",
                  "status",
                  "status_date",
                  "internal_reason",
                  "external_reason"
                ],
                "properties": {
                  "identity_reference": {
                    "$ref": "#/components/schemas/identity-reference"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "ACCOUNT_BLOCKED"
                    ],
                    "description": "| Status                 | Description                                                          |\n|------------------------|----------------------------------------------------------------------|\n| ACCOUNT_BLOCKED   | Customer account is blocked.                                       |\n",
                    "example": "ACCOUNT_BLOCKED"
                  },
                  "status_date": {
                    "type": "string",
                    "format": "datetime",
                    "description": "The date of the status update",
                    "example": "2023-06-05 19:53:08"
                  },
                  "internal_reason": {
                    "type": "string",
                    "description": "The internal body for this inbound message containing the reason of the message, this is for internal use.",
                    "example": "Customer account is blocked."
                  },
                  "external_reason": {
                    "type": "string",
                    "description": "The external reason to provide to your customer via your designated messaging channel.",
                    "example": "You order could not be processed"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Your server returns this code if it accepts the callback. On a failed response we will retry sending the webook.\n"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "HMACAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "Authorization",
        "description": "HMAC authentication using SHA256.\nThe URI must be used to generate the hmac signature e.g. `/eapi/v0/ramps` example:    \n\"POST    \n/eapi/v0/ramps   \n1741220905019999   \n{\\\"subPartnerId\\\":null,\\\"identityReference\\\":\\\"926553-1732538-7235638-6352926\\\",\\\"source\\\":{\\\"crypto\\\":{\\\"id\\\":\\\"USDT\\\",\\\"blockchain\\\":\\\"ETH\\\",\\\"walletAddress\\\":\\\"0xc292474673cf1a96a96e8c56ec4f45ecf2e0b448\\\",\\\"walletAddressMemo\\\":null},\\\"amount\\\":\\\"100\\\"},\\\"target\\\":{\\\"fiat\\\":{\\\"id\\\":\\\"AUD\\\",\\\"method\\\":\\\"payid-bank-transfer\\\",\\\"instructions\\\":{\\\"accountName\\\":\\\"Foo Bar\\\",\\\"accountNumber\\\":\\\"12345678\\\",\\\"bsb\\\":\\\"063123\\\"}}}}\"\n"
      }
    },
    "schemas": {
      "IdentityReference": {
        "$ref": "#/components/schemas/identity-reference"
      },
      "ResidentialAddress": {
        "type": "object",
        "title": "Residential Address",
        "description": "Customer's residential address. Required for identity verification and compliance purposes.\n\n**Important**: This must be the customer's current residential address, not a PO Box or business address.",
        "properties": {
          "addressLine": {
            "type": "string",
            "title": "Street Address",
            "description": "Primary street address including street number and name.\n\n**Examples**:\n- \"44 Gwynne Street\"\n- \"123 Main Street, Apt 4B\"\n- \"10 Downing Street\"\n\n**Requirements**:\n- Must include street number and name\n- Can include unit/apartment number\n- Maximum 200 characters",
            "example": "44 Gwynne Street",
            "minLength": 1,
            "maxLength": 200
          },
          "suburb": {
            "type": "string",
            "title": "Suburb/City",
            "description": "Suburb, city, or town name.\n\n**Regional Variations**:\n- Australia: Suburb (e.g., \"Cremorne\")\n- USA: City (e.g., \"New York\")\n- UK: Town/City (e.g., \"London\")\n- Europe: City (e.g., \"Paris\")",
            "example": "Cremorne",
            "minLength": 1,
            "maxLength": 100
          },
          "state": {
            "type": "string",
            "title": "State/Region",
            "description": "State, province, or region code.\n\n**Format**: Typically 2-3 character code\n\n**Examples**:\n- Australia: \"VIC\", \"NSW\", \"QLD\"\n- USA: \"CA\", \"NY\", \"TX\" (required for US addresses)\n- Canada: \"ON\", \"BC\", \"QC\"\n\n**Note**: Required when country is \"US\"",
            "example": "VIC",
            "minLength": 2,
            "maxLength": 3
          },
          "postCode": {
            "type": "string",
            "title": "Postal Code",
            "description": "Postal code, ZIP code, or postCode.\n\n**Format varies by country**:\n- Australia: 4 digits (e.g., \"3121\")\n- USA: 5 digits or 5+4 format (e.g., \"90210\" or \"90210-1234\")\n- UK: Alphanumeric (e.g., \"SW1A 1AA\")\n- Canada: Alphanumeric (e.g., \"K1A 0B1\")",
            "example": "3121",
            "minLength": 3,
            "maxLength": 10
          },
          "country": {
            "type": "string",
            "title": "Country Code",
            "description": "Two-letter ISO 3166-1 alpha-2 country code.\n\n**Common Examples**:\n- AU - Australia\n- US - United States\n- GB - United Kingdom\n- CA - Canada\n- NZ - New Zealand\n- SG - Singapore\n\n**Note**: The country must be supported by Banxa for the requested transaction type.",
            "example": "AU",
            "pattern": "^[A-Z]{2}$",
            "minLength": 2,
            "maxLength": 2
          }
        },
        "required": [
          "addressLine",
          "suburb",
          "state",
          "postCode",
          "country"
        ],
        "examples": [
          {
            "addressLine": "44 Gwynne Street",
            "suburb": "Cremorne",
            "state": "VIC",
            "postCode": "3121",
            "country": "AU"
          },
          {
            "addressLine": "123 Main Street, Apt 5B",
            "suburb": "New York",
            "state": "NY",
            "postCode": "10001",
            "country": "US"
          },
          {
            "addressLine": "10 Downing Street",
            "suburb": "London",
            "state": "LDN",
            "postCode": "SW1A 2AA",
            "country": "GB"
          }
        ]
      },
      "Money": {
        "type": "object",
        "title": "Money",
        "description": "Represents a monetary amount with currency. Used throughout the API for fiat currency amounts.",
        "additionalProperties": false,
        "required": [
          "amount",
          "currency"
        ],
        "properties": {
          "amount": {
            "type": "string",
            "title": "Amount",
            "description": "The monetary amount as a decimal string.\n\n**Format**: String representation of a decimal number with up to 2 decimal places for fiat currencies.\n\n**Why String?**: Using strings prevents floating-point precision errors in financial calculations.\n\n**Examples**:\n- \"100.00\" - One hundred dollars/euros/etc\n- \"1234.56\" - One thousand two hundred thirty-four and 56 cents\n- \"0.01\" - One cent (minimum for most currencies)",
            "example": "5000.00",
            "pattern": "^[0-9]+(\\.[0-9]{1,2})?$"
          },
          "currency": {
            "type": "string",
            "title": "Currency Code",
            "description": "Three-letter ISO 4217 currency code.\n\n**Supported Currencies** (examples):\n- AUD - Australian Dollar\n- USD - United States Dollar\n- EUR - Euro\n- GBP - British Pound Sterling\n- CAD - Canadian Dollar\n\n**Note**: The actual list of supported currencies depends on your partner configuration and the payment method being used.",
            "example": "AUD",
            "pattern": "^[A-Z]{3}$",
            "minLength": 3,
            "maxLength": 3
          }
        },
        "examples": [
          {
            "amount": "100.00",
            "currency": "USD"
          },
          {
            "amount": "5000.50",
            "currency": "AUD"
          },
          {
            "amount": "250.00",
            "currency": "EUR"
          }
        ]
      },
      "Email": {
        "type": "string",
        "format": "email",
        "title": "Email Address",
        "description": "Email address in valid RFC 5322 format.\n\n**Requirements**:\n- Must be a valid email format\n- Used for communication and verification\n- Maximum 254 characters (RFC 5321)\n\n**Best Practice**: Use the customer's primary email address",
        "example": "customer@example.com",
        "maxLength": 254
      },
      "MobileNumber": {
        "type": "string",
        "title": "Mobile Number",
        "description": "Mobile phone number in international E.164 format.\n\n**Format**: Include country code with + prefix\n\n**Examples**:\n- \"+61431000001\" (Australia)\n- \"+14155552671\" (USA)\n- \"+442071234567\" (UK)\n\n**Requirements**:\n- Must be a valid, active mobile number\n- Used for SMS verification if needed\n- Length: 8-20 characters",
        "example": "+61431000001",
        "pattern": "^\\+[1-9]\\d{1,14}$",
        "minLength": 8,
        "maxLength": 20
      },
      "OccupationIndustry": {
        "type": "string",
        "title": "Occupation Industry",
        "description": "The industry sector of the customer's occupation.\n\n**Important**: The selected industry determines which specific occupations are valid. See the Occupation schema for the mapping table.\n\n**Compliance Requirement**: Required for AML/KYC compliance to assess customer risk profile.",
        "enum": [
          "Consulting, IT, or business services",
          "Design, marketing or communication",
          "Travel, accommodation, or transport",
          "Entertainment, arts or photography",
          "Health, sports or personal care",
          "Food, beverages, or tobacco",
          "Retail, eCommerce, wholesale or manufacturing",
          "Dealers & Resellers",
          "Financial services, products, or holding companies",
          "Real estate or construction",
          "Education or learning",
          "Charity or not-for-profit",
          "Public or government services",
          "Utility services",
          "Unemployed/Retired",
          "In between jobs/looking for work",
          "Fulltime student"
        ],
        "example": "Consulting, IT, or business services"
      },
      "SourceOfFunds": {
        "type": "string",
        "title": "Source of Funds",
        "description": "The source from which the customer's funds are obtained.\n\n**Compliance Requirement**: Required for AML compliance to verify the origin of funds.\n\n**Common Sources**:\n- Employment income (Salary)\n- Business revenue (Business Income/Profits)\n- Investment returns\n- Savings and inheritance",
        "enum": [
          "Personal Savings",
          "Salary",
          "Business Income/Profits",
          "Pension",
          "Government Benefits",
          "Income from Cryptocurrency Trading",
          "Income from Investments (e.g. shares, bonds, investment funds)",
          "Income from sale of real estate or other property",
          "Income from renting/leasing",
          "Private loan from family members/ friends/others",
          "Loan from bank",
          "Inheritance",
          "Gift",
          "Other"
        ],
        "example": "Salary"
      },
      "PurposeOfTransaction": {
        "type": "string",
        "title": "Purpose of Transaction",
        "description": "The intended purpose for the cryptocurrency transaction.\n\n**Compliance Requirement**: Required for AML compliance to understand transaction intent.\n\n**Note**: Currently only 'investment' is supported.",
        "enum": [
          "Investment",
          "Trading",
          "Payment for Online Purchase",
          "Payment for Services",
          "Gaming",
          "Charity",
          "Ransomware/Virus/Cyber Extortion Demands",
          "Other"
        ],
        "example": "Investment"
      },
      "Occupation": {
        "type": "string",
        "enum": [
          "Architect",
          "IT developer",
          "IT hosting services",
          "IT consulting/services - other",
          "Scientific or technical consulting",
          "Management consulting and coaching",
          "Employment placement and recruitment services",
          "Cleaning, repair and maintenance services",
          "Financial (inc. tax, accounting, audit)",
          "Lawyer / Legal services",
          "Translation or language services",
          "Company establishment/formation services",
          "Freelance platform",
          "Other consulting",
          "Advertising and marketing",
          "Designer",
          "Interior design",
          "Audio and video",
          "Photography",
          "Print and online media",
          "Telecommunications services",
          "Travel agent",
          "Tour operator",
          "Accommodation or hotelier",
          "Other travel or tour activities",
          "Passenger transport or rentals",
          "Freight transport",
          "Rideshare and transport share services",
          "Transport - other",
          "Audio and video engineer",
          "Events and entertainment organiser",
          "Photographer",
          "Books, magazines, blogs, news",
          "Video gaming",
          "Performing arts",
          "Gambling, betting, and lotteries",
          "Adult Entertainment",
          "Beautician",
          "Vitamins and dietary supplements",
          "Fitness or sports services",
          "Medical or veterinary services",
          "Dental services",
          "Medical equipment",
          "Elderly or other care home",
          "Nursing or other care services",
          "Pharmaceuticals",
          "Pharmacy",
          "Food manufacturing and retail",
          "Restaurants and catering",
          "Alcohol",
          "Soft drinks",
          "Tobacco",
          "Clothing and accessories",
          "Beauty products and services",
          "Home and garden",
          "Toys, games and musical instruments",
          "Electronics and electrical products",
          "Sports equipment (excl. weapons)",
          "Manufacturing",
          "Farming, seeds, plants",
          "Pets or pet supplies",
          "Vehicle sales",
          "Vehicle accessories, spare parts, manufacturing",
          "Machinery and equipment",
          "Firearms, weapons, and military goods/services",
          "Arts - fine art sales, auctions or procurement",
          "Arts - other arts and crafts products or services",
          "Jewellery - fine jewellery, watches",
          "Jewellery - fashion jewellery",
          "Precious stones, diamonds, or metals",
          "Chemicals",
          "Legal highs and related accessories",
          "Selling products on behalf of others (incl. auction, online marketplace)",
          "Other retail or wholesale (not listed above)",
          "Financial Adviser (inc. tax, accounting, audit)",
          "Investment Manager",
          "Money service business operator",
          "Professional Trader",
          "Insurance Manager",
          "Crowdfunding and peer lending",
          "Other financial services",
          "Real estate sale, purchase, and management",
          "Construction",
          "Real estate development",
          "Online learning",
          "Teaching and tutoring",
          "Schools and universities",
          "Any charity related activity",
          "Government Official",
          "Politician",
          "Other, not listed above",
          "Utility services and providers",
          "Unemployed/Retired",
          "In between jobs/looking for work",
          "Fulltime student"
        ],
        "example": "IT developer",
        "description": "Customer's occupation. Must be a valid occupation for the selected 'occupationIndustry'. When the selected combination is invalid a validation error will be thrown. Refer to the Occupation-Industry mapping table:\n\n| occupationIndustry | occupation |\n|--------------------|------------|\n| Consulting, IT, or business services | Architect |\n| Consulting, IT, or business services | IT developer |\n| Consulting, IT, or business services | IT hosting services |\n| Consulting, IT, or business services | IT consulting/services - other |\n| Consulting, IT, or business services | Scientific or technical consulting |\n| Consulting, IT, or business services | Management consulting and coaching |\n| Consulting, IT, or business services | Employment placement and recruitment services |\n| Consulting, IT, or business services | Cleaning, repair and maintenance services |\n| Consulting, IT, or business services | Financial (inc. tax, accounting, audit) |\n| Consulting, IT, or business services | Lawyer / Legal services |\n| Consulting, IT, or business services | Translation or language services |\n| Consulting, IT, or business services | Company establishment/formation services |\n| Consulting, IT, or business services | Freelance platform |\n| Consulting, IT, or business services | Other consulting |\n| Design, marketing or communication | Advertising and marketing |\n| Design, marketing or communication | Designer |\n| Design, marketing or communication | Interior design |\n| Design, marketing or communication | Audio and video |\n| Design, marketing or communication | Photography |\n| Design, marketing or communication | Print and online media |\n| Design, marketing or communication | Translation or language services |\n| Design, marketing or communication | Telecommunications services |\n| Travel, accommodation, or transport | Travel agent |\n| Travel, accommodation, or transport | Tour operator |\n| Travel, accommodation, or transport | Accommodation or hotelier |\n| Travel, accommodation, or transport | Other travel or tour activities |\n| Travel, accommodation, or transport | Passenger transport or rentals |\n| Travel, accommodation, or transport | Freight transport |\n| Travel, accommodation, or transport | Rideshare and transport share services |\n| Travel, accommodation, or transport | Transport - other |\n| Entertainment, arts or photography | Audio and video engineer |\n| Entertainment, arts or photography | Events and entertainment organiser |\n| Entertainment, arts or photography | Photographer |\n| Entertainment, arts or photography | Books, magazines, blogs, news |\n| Entertainment, arts or photography | Video gaming |\n| Entertainment, arts or photography | Performing arts |\n| Entertainment, arts or photography | Gambling, betting, and lotteries |\n| Entertainment, arts or photography | Telecommunications services |\n| Entertainment, arts or photography | Adult Entertainment |\n| Health, sports or personal care | Beautician |\n| Health, sports or personal care | Vitamins and dietary supplements |\n| Health, sports or personal care | Fitness or sports services |\n| Health, sports or personal care | Medical or veterinary services |\n| Health, sports or personal care | Dental services |\n| Health, sports or personal care | Medical equipment |\n| Health, sports or personal care | Elderly or other care home |\n| Health, sports or personal care | Nursing or other care services |\n| Health, sports or personal care | Pharmaceuticals |\n| Health, sports or personal care | Pharmacy |\n| Food, beverages, or tobacco | Food manufacturing and retail |\n| Food, beverages, or tobacco | Restaurants and catering |\n| Food, beverages, or tobacco | Vitamins and dietary supplements |\n| Food, beverages, or tobacco | Alcohol |\n| Food, beverages, or tobacco | Soft drinks |\n| Food, beverages, or tobacco | Tobacco |\n| Retail, eCommerce, wholesale or manufacturing | Clothing and accessories |\n| Retail, eCommerce, wholesale or manufacturing | Beauty products and services |\n| Retail, eCommerce, wholesale or manufacturing | Home and garden |\n| Retail, eCommerce, wholesale or manufacturing | Toys, games and musical instruments |\n| Retail, eCommerce, wholesale or manufacturing | Electronics and electrical products |\n| Retail, eCommerce, wholesale or manufacturing | Sports equipment (excl. weapons) |\n| Retail, eCommerce, wholesale or manufacturing | Manufacturing |\n| Retail, eCommerce, wholesale or manufacturing | Farming, seeds, plants |\n| Retail, eCommerce, wholesale or manufacturing | Pets or pet supplies |\n| Dealers & Resellers | Vehicle sales |\n| Dealers & Resellers | Vehicle accessories, spare parts, manufacturing |\n| Dealers & Resellers | Machinery and equipment |\n| Dealers & Resellers | Firearms, weapons, and military goods/services |\n| Dealers & Resellers | Arts - fine art sales, auctions or procurement |\n| Dealers & Resellers | Arts - other arts and crafts products or services |\n| Dealers & Resellers | Jewellery - fine jewellery, watches |\n| Dealers & Resellers | Jewellery - fashion jewellery |\n| Dealers & Resellers | Precious stones, diamonds, or metals |\n| Dealers & Resellers | Chemicals |\n| Dealers & Resellers | Legal highs and related accessories |\n| Dealers & Resellers | Selling products on behalf of others (incl. auction, online marketplace) |\n| Dealers & Resellers | Other retail or wholesale (not listed above) |\n| Financial services, products, or holding companies | Financial Adviser (inc. tax, accounting, audit) |\n| Financial services, products, or holding companies | Investment Manager |\n| Financial services, products, or holding companies | Money service business operator |\n| Financial services, products, or holding companies | Professional Trader |\n| Financial services, products, or holding companies | Insurance Manager |\n| Financial services, products, or holding companies | Crowdfunding and peer lending |\n| Financial services, products, or holding companies | Other financial services |\n| Real estate or construction | Real estate sale, purchase, and management |\n| Real estate or construction | Construction |\n| Real estate or construction | Real estate development |\n| Education or learning | Online learning |\n| Education or learning | Teaching and tutoring |\n| Education or learning | Schools and universities |\n| Charity or not-for-profit | Any charity related activity |\n| Public or government services | Government Official |\n| Public or government services | Politician |\n| Public or government services | Other, not listed above |\n| Utility services | Utility services and providers |\n| Utility services | Cleaning, repair and maintenance services |\n| Utility services | Telecommunications services |\n| Utility services | Other, not listed above |\n| Unemployed/Retired | Unemployed/Retired |\n| In between jobs/looking for work | In between jobs/looking for work |\n| Fulltime student | Fulltime student |"
      },
      "CursorPagination": {
        "type": "object",
        "title": "Cursor Pagination",
        "description": "Cursor-based pagination metadata.\n\n**Advantages**:\n- More efficient for large datasets\n- Consistent results even when data changes\n- Suitable for infinite scroll patterns\n\n**Usage**:\n- Use `nextCursor` to fetch next page\n- Use `prevCursor` to fetch previous page\n- Check `hasMore` to determine if more results exist",
        "additionalProperties": false,
        "required": [
          "hasMore",
          "perPage"
        ],
        "properties": {
          "nextCursor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cursor for the next page. Null if no more pages.",
            "example": "eyJvcmRlcnMuaWQiOjEyMzQ1LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9"
          },
          "prevCursor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cursor for the previous page. Null if on first page.",
            "example": "eyJvcmRlcnMuaWQiOjEyMzQ1LCJfcG9pbnRzVG9OZXh0SXRlbXMiOmZhbHNlfQ=="
          },
          "hasMore": {
            "type": "boolean",
            "title": "Has More",
            "description": "Indicates if there are more results available after the current page.\n\n**Usage**: Use this to show/hide \"Load More\" button in UI.",
            "example": true
          },
          "perPage": {
            "type": "integer",
            "title": "Per Page",
            "description": "Number of items per page (as requested or default)",
            "example": 10,
            "minimum": 1
          }
        }
      },
      "OffsetPagination": {
        "type": "object",
        "title": "Offset Pagination",
        "description": "Offset-based pagination metadata.\n\n**Advantages**:\n- Shows total count and page numbers\n- Familiar pagination pattern\n- Suitable for traditional page-based UI\n\n**Usage**:\n- Use `currentPage` to show current position\n- Use `total` to calculate total pages\n- Increment/decrement `page` parameter for navigation",
        "additionalProperties": false,
        "required": [
          "currentPage",
          "perPage",
          "total",
          "lastPage"
        ],
        "properties": {
          "currentPage": {
            "type": "integer",
            "title": "Current Page",
            "description": "Current page number (1-based)",
            "example": 1,
            "minimum": 1
          },
          "perPage": {
            "type": "integer",
            "title": "Per Page",
            "description": "Number of items per page",
            "example": 10,
            "minimum": 1
          },
          "total": {
            "type": "integer",
            "title": "Total Items",
            "description": "Total number of items across all pages",
            "example": 150,
            "minimum": 0
          },
          "lastPage": {
            "type": "integer",
            "title": "Last Page",
            "description": "Last page number (total pages)",
            "example": 15,
            "minimum": 1
          },
          "from": {
            "type": [
              "integer",
              "null"
            ],
            "title": "From",
            "description": "Index of first item on current page (1-based). Null if no results.",
            "example": 1,
            "minimum": 1
          },
          "to": {
            "type": [
              "integer",
              "null"
            ],
            "title": "To",
            "description": "Index of last item on current page (1-based). Null if no results.",
            "example": 10,
            "minimum": 1
          }
        }
      },
      "OffRampRequest": {
        "title": "Off-Ramp Request",
        "oneOf": [
          {
            "$ref": "#/components/schemas/OffRampRequestWithCryptoAmount"
          },
          {
            "$ref": "#/components/schemas/OffRampRequestWithFiatAmount"
          }
        ]
      },
      "OnRampRequest": {
        "title": "On-Ramp Request",
        "oneOf": [
          {
            "$ref": "#/components/schemas/OnRampRequestWithFiatAmount"
          },
          {
            "$ref": "#/components/schemas/OnRampRequestWithCryptoAmount"
          }
        ]
      },
      "QuoteRampRequest": {
        "title": "Quote Ramp Request",
        "type": "object",
        "description": "Create a ramp transaction using a previously obtained quote ID. This simplified payload references an existing quote, avoiding the need to re-specify source/target and amount details.",
        "properties": {
          "quoteId": {
            "type": "string",
            "description": "The unique identifier of a previously obtained price quote.",
            "example": "6e9174edd370ffe6331aeda7a6d75592"
          },
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "walletAddress": {
            "type": "string",
            "description": "The wallet address to use for the transaction.",
            "example": "0xc292474673cf1a96a96e8c56ec4f45ecf2e0b448"
          },
          "walletAddressMemo": {
            "type": [
              "string",
              "null"
            ],
            "description": "The wallet address memo associated with the wallet address.",
            "example": null
          }
        },
        "required": [
          "quoteId",
          "identityReference",
          "walletAddress"
        ]
      },
      "OffRampResponse": {
        "$ref": "#/components/schemas/offramp-response"
      },
      "OnRampResponse": {
        "$ref": "#/components/schemas/onramp-response"
      },
      "PaymentMethodsResponse": {
        "type": "object",
        "title": "Payment Methods Response",
        "description": "List of available payment methods for a transaction type.",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "title": "Payment Methods",
            "description": "Array of available payment method objects",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            }
          }
        }
      },
      "PaymentMethod": {
        "type": "object",
        "title": "Payment Method",
        "description": "Individual payment method with its supported fiat currencies.",
        "required": [
          "method",
          "name",
          "supportedFiats"
        ],
        "properties": {
          "method": {
            "type": "string",
            "title": "Payment Method Code",
            "description": "Unique identifier code for the payment method. Use this value when specifying the payment method in other API calls.",
            "example": "payid-bank-transfer"
          },
          "name": {
            "type": "string",
            "title": "Payment Method Name",
            "description": "Human-readable display name for the payment method.",
            "example": "PayID Bank Transfer"
          },
          "supportedFiats": {
            "type": "array",
            "title": "Supported Fiat Currencies",
            "description": "Array of ISO 4217 fiat currency codes supported by this payment method.",
            "items": {
              "type": "string",
              "example": "AUD"
            },
            "example": [
              "AUD",
              "USD",
              "EUR"
            ]
          }
        }
      },
      "RampsListResponse": {
        "type": "object",
        "title": "Ramps List Response",
        "description": "Paginated list of ramp transactions with metadata.\n\n**Pagination Types**:\n- **Cursor-based**: More efficient for large datasets, suitable for infinite scroll\n- **Offset-based**: Traditional page-based pagination with total count",
        "required": [
          "data",
          "pagination"
        ],
        "properties": {
          "data": {
            "type": "array",
            "title": "Ramps Data",
            "description": "Array of ramp transaction objects",
            "items": {
              "$ref": "#/components/schemas/RampListItem"
            }
          },
          "pagination": {
            "title": "Pagination Metadata",
            "description": "Pagination information - either cursor-based or offset-based",
            "oneOf": [
              {
                "$ref": "#/components/schemas/CursorPagination"
              },
              {
                "$ref": "#/components/schemas/OffsetPagination"
              }
            ]
          }
        }
      },
      "RampListItem": {
        "type": "object",
        "title": "Ramp List Item",
        "description": "Individual ramp transaction in the list",
        "required": [
          "id",
          "status",
          "source",
          "target",
          "receipt",
          "createdAt"
        ],
        "properties": {
          "id": {
            "type": "string",
            "title": "Order ID",
            "description": "Unique order identifier (order key)",
            "example": "ORD-2024-12345"
          },
          "subPartnerId": {
            "type": [
              "string",
              "null"
            ],
            "title": "Sub-Partner ID",
            "description": "Sub-partner identifier if applicable",
            "example": "partner-123"
          },
          "identityReference": {
            "type": [
              "string",
              "null"
            ],
            "title": "Identity Reference",
            "description": "Customer identity reference",
            "example": "customer-12345"
          },
          "status": {
            "type": "string",
            "title": "Order Status",
            "description": "Current status of the ramp transaction",
            "enum": [
              "pending",
              "processing",
              "completed",
              "cancelled",
              "failed"
            ],
            "example": "completed"
          },
          "source": {
            "title": "Source",
            "description": "Source of the transfer (fiat for on-ramp, crypto for off-ramp)",
            "oneOf": [
              {
                "title": "Fiat Source (On-ramp)",
                "type": "object",
                "required": [
                  "fiat",
                  "amount"
                ],
                "properties": {
                  "fiat": {
                    "type": "object",
                    "required": [
                      "id",
                      "method"
                    ],
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Fiat currency code",
                        "example": "USD"
                      },
                      "method": {
                        "type": "string",
                        "description": "Payment method",
                        "example": "card"
                      }
                    }
                  },
                  "amount": {
                    "type": "string",
                    "description": "Source amount",
                    "example": "1000.00"
                  }
                }
              },
              {
                "title": "Crypto Source (Off-ramp)",
                "type": "object",
                "required": [
                  "crypto",
                  "amount"
                ],
                "properties": {
                  "crypto": {
                    "type": "object",
                    "required": [
                      "id",
                      "blockchain"
                    ],
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Cryptocurrency code",
                        "example": "BTC"
                      },
                      "blockchain": {
                        "type": "string",
                        "description": "Blockchain network",
                        "example": "BTC"
                      },
                      "walletAddress": {
                        "type": "string",
                        "example": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
                      },
                      "walletAddressMemo": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "example": "123456"
                      }
                    }
                  },
                  "amount": {
                    "type": "string",
                    "description": "Source amount",
                    "example": "0.025"
                  }
                }
              }
            ]
          },
          "target": {
            "title": "Target",
            "description": "Target of the transfer (crypto for on-ramp, fiat for off-ramp)",
            "oneOf": [
              {
                "title": "Crypto Target (On-ramp)",
                "type": "object",
                "required": [
                  "crypto",
                  "amount"
                ],
                "properties": {
                  "crypto": {
                    "type": "object",
                    "required": [
                      "id",
                      "blockchain"
                    ],
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Cryptocurrency code",
                        "example": "ETH"
                      },
                      "blockchain": {
                        "type": "string",
                        "description": "Blockchain network",
                        "example": "ETH"
                      },
                      "walletAddress": {
                        "type": "string",
                        "example": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
                      },
                      "walletAddressMemo": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "example": "100547087"
                      }
                    }
                  },
                  "amount": {
                    "type": "string",
                    "description": "Target amount",
                    "example": "0.5"
                  }
                }
              },
              {
                "title": "Fiat Target (Off-ramp)",
                "type": "object",
                "required": [
                  "fiat",
                  "amount"
                ],
                "properties": {
                  "fiat": {
                    "type": "object",
                    "required": [
                      "id",
                      "method"
                    ],
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Fiat currency code",
                        "example": "EUR"
                      },
                      "method": {
                        "type": "string",
                        "description": "Payment method",
                        "example": "bank_transfer"
                      }
                    }
                  },
                  "amount": {
                    "type": "string",
                    "description": "Target amount",
                    "example": "950.00"
                  }
                }
              }
            ]
          },
          "receipt": {
            "type": "object",
            "title": "Receipt",
            "description": "Transaction receipt with fees and hashes",
            "properties": {
              "targetTransactionHash": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Blockchain transaction hash for target (on-ramp)",
                "example": "0xabc123def456789..."
              },
              "sourceTransactionHash": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Blockchain transaction hash for source (off-ramp)",
                "example": "0x789def456abc123..."
              },
              "gatewayFee": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "5.00"
              },
              "networkFee": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "2.50"
              },
              "sourceAmount": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "1000.00"
              },
              "targetAmount": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "0.025"
              }
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "Order creation timestamp (ISO 8601 UTC)",
            "example": "2024-01-15T10:30:00Z"
          },
          "completedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "title": "Completion Time",
            "description": "When the transaction was completed (null if not completed)",
            "example": "2024-01-15T10:45:00Z"
          }
        }
      },
      "IdentityTokenSharingRequest": {
        "title": "Identity Sharing Request",
        "type": "object",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "email": {
            "type": "string",
            "format": "email",
            "example": "user@banxa.com",
            "description": "The customer email",
            "maxLength": 200
          },
          "mobileNumber": {
            "type": "string",
            "example": "61410001000",
            "description": "Mobile phone number in international format (E.164).\n\n**Format**: Include country code with + prefix\n\n**Examples**:\n- \"+61431000001\" (Australia)\n- \"+14155552671\" (USA)\n- \"+442071234567\" (UK)\n\n**Requirements**:\n- Must be a valid, active mobile number\n- Used for SMS verification if needed\n- Maximum 20 characters"
          },
          "taxIdType": {
            "$ref": "#/components/schemas/TaxIdType"
          },
          "taxId": {
            "$ref": "#/components/schemas/TaxId"
          },
          "taxState": {
            "type": "string",
            "example": "IL",
            "description": "Tax state or region if applicable.(associated with the taxId) Required format as two characters. Note; We do not accept any states where Banxa is not licensed.\n"
          },
          "provider": {
            "type": "object",
            "properties": {
              "vendor": {
                "type": "string",
                "description": "The KYC provider e.g. sumsub",
                "enum": [
                  "sumsub"
                ],
                "example": "sumsub"
              },
              "token": {
                "type": "string",
                "minimum": 6,
                "description": "Arbitrary string",
                "example": "eyJhbGciOiJub25lIn0.eyJqdGkiOiJfYWN0LTZmODI2ZTU0LTE2MzctNDViMS05NzMyLWY1MjZiN2YxNWE3YyIsInVybCI6Imh0dHBzOi8vYXBpLnN1bXN1Yi5jb20ifQ."
              }
            },
            "required": [
              "vendor",
              "token"
            ]
          }
        },
        "required": [
          "identityReference",
          "email",
          "provider"
        ]
      },
      "IdentityTokenSharingResponse": {
        "title": "Identity Sharing Response",
        "type": "object",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          }
        },
        "required": [
          "identityReference"
        ]
      },
      "IdentityRelianceRequest": {
        "title": "Identity Reliance Request",
        "type": "object",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "mobileNumber": {
            "type": "string",
            "example": "61431000001",
            "description": "Mobile number of the customer."
          },
          "email": {
            "type": "string",
            "format": "email",
            "example": "test@bitcoin.com.au",
            "description": "Email address of the customer."
          },
          "screeningDate": {
            "type": "string",
            "format": "date",
            "description": "The UTC screening date of the applicant.",
            "example": "2023-06-05"
          },
          "screeningSanctionsResult": {
            "type": "boolean",
            "description": "The result of the sanction screening.",
            "example": true
          },
          "screeningPepResult": {
            "type": "boolean",
            "description": "The result of the PEP sanction screening.",
            "example": true
          },
          "customerIdentity": {
            "$ref": "#/components/schemas/CustomerIdentity"
          },
          "identityDocuments": {
            "type": "array",
            "description": "Collection of identity documents colected frofmo the customer. (array of objects)\n",
            "items": {
              "$ref": "#/components/schemas/IdentityRelianceDocument"
            }
          }
        },
        "required": [
          "identityReference",
          "mobileNumber",
          "email",
          "screeningDate",
          "screeningSanctionsResult",
          "screeningPepResult",
          "customerIdentity",
          "identityDocuments"
        ]
      },
      "IdentityRelianceResponse": {
        "title": "Identity Reliance Response",
        "type": "object",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          }
        },
        "required": [
          "identityReference"
        ]
      },
      "GetIdentityResponse": {
        "type": "object",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "account": {
            "type": "object",
            "properties": {
              "blocked": {
                "type": "boolean",
                "description": "The account status",
                "example": false
              },
              "exists": {
                "type": "boolean",
                "description": "Indicated wether the account exists",
                "example": true
              },
              "createdAt": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "The UTC date time of the identity. Null if identity does not exist.",
                "example": "2023-06-05T19:53:08.320Z"
              }
            },
            "required": [
              "blocked",
              "exists",
              "createdAt"
            ]
          },
          "kyc": {
            "type": "object",
            "description": "Reflects the verification status of identity documents submitted through Banxa's identity provider. This status is updated based on document and liveness verification only — it does not account for Lite tier data, supplementary fields (e.g. purpose of transaction, occupation), or overall transaction eligibility. Use the eligibility endpoint to determine whether a customer can transact.",
            "properties": {
              "status": {
                "type": "string",
                "description": "The verification outcome of the customer's submitted identity documents (selfie + document), as processed by Banxa's identity provider. APPROVED indicates that document and liveness verification passed. It does not indicate that all required data for a given transaction has been collected or that the customer is eligible to transact.",
                "enum": [
                  "PENDING",
                  "UNDER_REVIEW",
                  "ACTION_REQUIRED",
                  "VERIFIED",
                  "REJECTED"
                ],
                "example": "VERIFIED"
              }
            },
            "required": [
              "status"
            ]
          }
        },
        "required": [
          "identityReference",
          "account",
          "kyc"
        ]
      },
      "BasicIdentityRequest": {
        "title": "The basic requirements to register a customer, redidential address and email are optional, if available it's recomended to provide these.\n",
        "type": "object",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "givenName": {
            "type": "string",
            "example": "Joe",
            "description": "Company representative first name."
          },
          "surname": {
            "type": "string",
            "example": "Bloggs",
            "description": "Company representative last name."
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date",
            "description": "Date of birth in `YYYY-MM-DD` format. Must be a past date.",
            "example": "1990-05-21"
          },
          "email": {
            "type": "string",
            "format": "email",
            "example": "test@solana.com.au",
            "description": "Email address of the customer."
          },
          "taxIdType": {
            "$ref": "#/components/schemas/TaxIdType"
          },
          "taxId": {
            "$ref": "#/components/schemas/TaxId"
          },
          "taxState": {
            "type": "string",
            "example": "IL",
            "description": "Tax state or region if applicable.(associated with the taxId) Required format as two characters. Note; We do not accept any states where Banxa is not licensed.\n"
          },
          "residentialAddress": {
            "$ref": "#/components/schemas/ResidentialAddress"
          }
        },
        "required": [
          "identityReference"
        ]
      },
      "BasicIdentityResponse": {
        "type": "object",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "The UTC date time of the identity.",
            "example": "2023-06-05T19:53:08.320Z"
          }
        },
        "required": [
          "identityReference",
          "createdAt"
        ]
      },
      "CustomerIdentity": {
        "type": "object",
        "properties": {
          "givenName": {
            "type": "string",
            "example": "Joe",
            "description": "Customer's given / first name.\n"
          },
          "surname": {
            "type": "string",
            "example": "Bloggs",
            "description": "Customer's surname / last name.\n"
          },
          "dob": {
            "type": "string",
            "format": "date",
            "example": "1990-01-31",
            "description": "Customer's date of birth (e.g. \"1985-01-31\"). Required to format as ISO 8601 Date format : YYYY-MM-DD.\n"
          },
          "taxIdType": {
            "$ref": "#/components/schemas/TaxIdType"
          },
          "taxId": {
            "$ref": "#/components/schemas/TaxId"
          },
          "taxState": {
            "type": "string",
            "example": "IL",
            "description": "Tax state or region if applicable.(associated with the taxId) Required format as two characters. Note; We do not accept any states where Banxa is not licensed.\n"
          },
          "residentialAddress": {
            "$ref": "#/components/schemas/ResidentialAddress"
          }
        },
        "required": [
          "givenName",
          "surname",
          "dob",
          "residentialAddress"
        ]
      },
      "IdentityDocumentSharingRequest": {
        "title": "Identity Document Sharing Request",
        "type": "object",
        "description": "Request to share identity documents and customer information for KYC verification.\n\n**Use Case**: When you want to submit customer identity documents directly to Banxa for verification instead of using a third-party KYC provider.\n\n**Process Flow**:\n1. Collect customer information and documents\n2. Submit via this endpoint\n3. Banxa processes and verifies the documents\n4. Receive webhook notification with verification status\n\n**Required Documents**: Typically requires at least one government-issued ID (passport, driver's license, or national ID) and proof of address.",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "mobileNumber": {
            "type": "string",
            "title": "Mobile Number",
            "description": "Customer's mobile phone number in international format (E.164).\n\n**Format**: Include country code with + prefix\n\n**Examples**:\n- \"+61431000001\" (Australia)\n- \"+14155552671\" (USA)\n- \"+442071234567\" (UK)\n\n**Requirements**:\n- Must be a valid, active mobile number\n- Used for SMS verification if needed\n- Maximum 20 characters",
            "example": "+61431000001",
            "pattern": "^\\+[1-9]\\d{1,14}$",
            "minLength": 8,
            "maxLength": 20
          },
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email Address",
            "description": "Customer's email address.\n\n**Requirements**:\n- Must be a valid email format\n- Used for communication and verification\n- Maximum 254 characters (RFC 5321)\n\n**Best Practice**: Use the customer's primary email address",
            "example": "customer@example.com",
            "maxLength": 254
          },
          "customerIdentity": {
            "$ref": "#/components/schemas/CustomerIdentity"
          },
          "occupationIndustry": {
            "$ref": "#/components/schemas/OccupationIndustry"
          },
          "occupation": {
            "$ref": "#/components/schemas/Occupation"
          },
          "sourceOfFunds": {
            "$ref": "#/components/schemas/SourceOfFunds"
          },
          "purposeOfTransaction": {
            "$ref": "#/components/schemas/PurposeOfTransaction"
          },
          "identityDocuments": {
            "type": "array",
            "title": "Identity Documents",
            "description": "Array of identity documents to verify the customer's identity.\n\n**Minimum Requirements**:\n- At least one government-issued photo ID (Passport, Driver's License, or National ID)\n- Proof of Address (if required based on jurisdiction)\n- Selfie (for liveness verification)\n\n**Document Quality Requirements**:\n- Clear, high-resolution images\n- All text must be readable\n- All four corners of the document visible\n- No glare or shadows obscuring information\n- Color images preferred\n- Maximum file size: 10MB per image (before base64 encoding)",
            "items": {
              "$ref": "#/components/schemas/IdentityDocument"
            },
            "minItems": 1,
            "maxItems": 10
          }
        },
        "required": [
          "identityReference",
          "mobileNumber",
          "email",
          "customerIdentity",
          "occupation",
          "occupationIndustry",
          "sourceOfFunds",
          "purposeOfTransaction",
          "identityDocuments"
        ],
        "examples": [
          {
            "identityReference": "customer-12345",
            "mobileNumber": "+61431000001",
            "email": "john.doe@example.com",
            "customerIdentity": {
              "givenName": "John",
              "surname": "Doe",
              "dob": "1990-01-15",
              "residentialAddress": {
                "addressLine": "123 Main Street",
                "suburb": "Sydney",
                "state": "NSW",
                "postCode": "2000",
                "country": "AU"
              }
            },
            "occupationIndustry": "Consulting, IT, or business services",
            "occupation": "IT developer",
            "sourceOfFunds": "Salary",
            "purposeOfTransaction": "Investment",
            "identityDocuments": [
              {
                "type": "PASSPORT",
                "data": {
                  "number": "N1234567"
                },
                "images": [
                  {
                    "type": "PASSPORT",
                    "base64": "iVBORw0KGgoAAAANSUhEUgAAAAUA...",
                    "mimetype": "image/jpeg"
                  }
                ]
              }
            ]
          }
        ]
      },
      "IdentityDocumentSharingResponse": {
        "title": "Identity Document Sharing Response",
        "type": "object",
        "description": "Response after submitting identity documents for verification.\n\n**Status Flow**:\n1. PENDING - Documents submitted, verification in progress\n2. VERIFIED - Documents verified successfully\n3. REJECTED - Documents rejected (see rejectionReason for details)\n\n**Next Steps**:\n- PENDING: Wait for webhook notification\n- VERIFIED: Customer can proceed with transactions\n- REJECTED: Review rejection reason and resubmit with corrections",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "status": {
            "type": "string",
            "title": "Verification Status",
            "description": "Current status of the identity verification.\n\n**Status Meanings**:\n- **PENDING**: Documents are being reviewed (typical review time: 1-24 hours)\n- **VERIFIED**: Identity verified successfully, customer can transact\n- **REJECTED**: Documents rejected, see rejectionReason for details",
            "enum": [
              "PENDING",
              "UNDER_REVIEW",
              "ACTION_REQUIRED",
              "VERIFIED",
              "REJECTED"
            ],
            "example": "PENDING"
          },
          "rejectionReason": {
            "type": "object",
            "title": "Rejection Reason",
            "description": "Details about why the identity verification was rejected. Only present when status is REJECTED.",
            "properties": {
              "internalReason": {
                "type": "string",
                "title": "Internal Reason Code",
                "description": "Internal code/reason for rejection. For logging and debugging purposes.",
                "example": "DOCUMENT_BLURRY"
              },
              "reason": {
                "type": "string",
                "title": "User-Facing Reason",
                "description": "Human-readable rejection message that can be displayed to the customer.\n\n**Common Reasons**:\n- Document image is blurry or unclear\n- Document is expired\n- Information doesn't match provided details\n- Document type not accepted\n- Selfie doesn't match ID photo",
                "example": "The document image is blurry. Please re-submit a clear photo showing all details."
              }
            }
          },
          "customerIdentity": {
            "$ref": "#/components/schemas/CustomerIdentity"
          },
          "occupationIndustry": {
            "type": "string",
            "title": "Occupation Industry",
            "description": "Echo of the submitted occupation industry.",
            "example": "Consulting, IT, or business services"
          },
          "occupation": {
            "type": "string",
            "title": "Occupation",
            "description": "Echo of the submitted occupation.",
            "example": "IT developer"
          },
          "purposeOfTransaction": {
            "type": "string",
            "title": "Purpose of Transaction",
            "description": "Submitted transaction purpose.",
            "enum": [
              "Investment",
              "Trading",
              "Payment for Online Purchase",
              "Payment for Services",
              "Gaming",
              "Charity",
              "Ransomware/Virus/Cyber Extortion Demands",
              "Other"
            ],
            "example": "Investment"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Creation Timestamp",
            "description": "UTC timestamp when the identity verification request was created.\n\n**Format**: ISO 8601 date-time format",
            "example": "2023-06-05T19:53:08.320Z"
          }
        },
        "required": [
          "identityReference",
          "status"
        ],
        "examples": [
          {
            "identityReference": "customer-12345",
            "status": "PENDING",
            "customerIdentity": {
              "givenName": "John",
              "surname": "Doe",
              "dob": "1990-01-15"
            },
            "occupationIndustry": "Consulting, IT, or business services",
            "occupation": "IT developer",
            "purposeOfTransaction": "Investment",
            "createdAt": "2023-06-05T19:53:08.320Z"
          },
          {
            "identityReference": "customer-67890",
            "status": "REJECTED",
            "rejectionReason": {
              "internalReason": "DOCUMENT_BLURRY",
              "reason": "The passport image is too blurry. Please take a new photo in good lighting and ensure all text is clearly readable."
            },
            "createdAt": "2023-06-05T19:53:08.320Z"
          }
        ]
      },
      "IdentityPatchRequest": {
        "title": "Identity Update Request",
        "type": "object",
        "description": "Request to update specific fields of an existing customer identity.\n\n**Use Case**: Update customer information without resubmitting all documents.\n\n**Partial Updates**: Only include fields you want to update. Omitted fields will remain unchanged.\n\n**Note**: Some changes may trigger re-verification depending on compliance requirements.",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "mobileNumber": {
            "type": "string",
            "title": "Mobile Number",
            "description": "Updated mobile phone number in international format (E.164).",
            "example": "+61431000001",
            "pattern": "^\\+[1-9]\\d{1,14}$",
            "minLength": 8,
            "maxLength": 20
          },
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email Address",
            "description": "Updated email address.",
            "example": "newemail@example.com",
            "maxLength": 254
          },
          "customerIdentity": {
            "type": "object",
            "title": "Customer Identity Updates",
            "description": "Partial customer identity updates. Only include fields to update.",
            "properties": {
              "givenName": {
                "type": "string",
                "title": "Given Name",
                "description": "Customer's first/given name.",
                "example": "John",
                "minLength": 1,
                "maxLength": 100
              },
              "surname": {
                "type": "string",
                "title": "Surname",
                "description": "Customer's last/family name.",
                "example": "Doe",
                "minLength": 1,
                "maxLength": 100
              },
              "dob": {
                "type": "string",
                "format": "date",
                "title": "Date of Birth",
                "description": "Customer's date of birth in YYYY-MM-DD format.",
                "example": "1990-01-31"
              },
              "taxIdType": {
                "$ref": "#/components/schemas/TaxIdType"
              },
              "taxId": {
                "$ref": "#/components/schemas/TaxId"
              },
              "taxState": {
                "type": "string",
                "title": "Tax State",
                "description": "State associated with the tax ID (for USA).",
                "example": "CA",
                "minLength": 2,
                "maxLength": 2
              },
              "residentialAddress": {
                "$ref": "#/components/schemas/ResidentialAddress"
              }
            }
          },
          "occupationIndustry": {
            "$ref": "#/components/schemas/OccupationIndustry"
          },
          "occupation": {
            "$ref": "#/components/schemas/Occupation"
          },
          "sourceOfFunds": {
            "$ref": "#/components/schemas/SourceOfFunds"
          },
          "purposeOfTransaction": {
            "$ref": "#/components/schemas/PurposeOfTransaction"
          },
          "identityDocuments": {
            "type": "array",
            "title": "Updated Identity Documents",
            "description": "New or updated identity documents.",
            "items": {
              "$ref": "#/components/schemas/IdentityDocument"
            },
            "minItems": 1,
            "maxItems": 10
          }
        },
        "required": [
          "identityReference",
          "email"
        ],
        "examples": [
          {
            "identityReference": "customer-12345",
            "email": "updated.email@example.com",
            "mobileNumber": "+61431000002"
          },
          {
            "identityReference": "customer-67890",
            "email": "john.doe@example.com",
            "customerIdentity": {
              "residentialAddress": {
                "addressLine": "456 New Street",
                "suburb": "Melbourne",
                "state": "VIC",
                "postCode": "3000",
                "country": "AU"
              }
            }
          }
        ]
      },
      "OnRampQuoteResponse": {
        "title": "On-Ramp Indicative Price",
        "type": "object",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "source": {
            "type": "object",
            "properties": {
              "fiat": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The fiat currency.",
                    "example": "AUD"
                  },
                  "method": {
                    "type": "string",
                    "description": "The payment method.\n\n| Available payments |\n|-------------|\n|debit-credit-card|\n|apple-pay|\n|sepa-bank-transfer|\n|gbp-bank-transfer|\n|ach-bank-transfer|\n|pix|\n|zar-bank-transfer|\n|interac-bank-transfer|\n|ideal-bank-transfer|\n|google-pay|\n|payid-bank-transfer|\n|wire-transfer|\n|spei|\n|pse|\n|khipu|\n|aud-bank-transfer|\n|usd-bank-transfer|\n|paypal|\n|klarna-paynow|\n",
                    "example": "payid-bank-transfer"
                  }
                },
                "required": [
                  "id",
                  "method"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount of fiat in.",
                "example": "100"
              }
            },
            "required": [
              "fiat",
              "amount"
            ]
          },
          "target": {
            "type": "object",
            "properties": {
              "crypto": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The crypto token.",
                    "example": "USDT"
                  },
                  "blockchain": {
                    "type": "string",
                    "description": "The blockchain that is associated with the crypto token.",
                    "example": "TRON"
                  }
                },
                "required": [
                  "id",
                  "blockchain"
                ]
              },
              "amount": {
                "type": "string",
                "example": "100",
                "description": "The total amount of crypto out."
              }
            },
            "required": [
              "crypto",
              "amount"
            ]
          },
          "processingFee": {
            "type": "string",
            "example": "1.00",
            "description": "The processing fee associated with the price."
          },
          "networkFee": {
            "type": "string",
            "example": "1.00",
            "description": "The network fee (gas fee) associated with the price."
          },
          "marketRate": {
            "type": "object",
            "title": "Market Rates",
            "description": "Current market rates for crypto and forex conversions.\n\n**Purpose**: Provides transparency on the exchange rates used for the quote calculation.\n\n**Components**:\n- `crypto`: Map of fiat currencies to crypto market rates\n- `forex`: Foreign exchange rates relative to reference currency",
            "required": [
              "crypto",
              "forex"
            ],
            "properties": {
              "crypto": {
                "type": "object",
                "title": "Crypto Market Rates",
                "description": "Map of fiat currency codes to crypto market rates.\n\n**Format**: Each property is a fiat currency code, and the value is the amount of that fiat currency equal to 1 unit of the crypto.\n\n**Example**: If crypto is BTC and USD rate is \"38497.64\", then 1 BTC = 38,497.64 USD",
                "additionalProperties": {
                  "type": "string",
                  "description": "Decimal market rate as string to preserve precision.",
                  "example": "3849.764255560000038"
                },
                "example": {
                  "USD": "3849.764255560000038",
                  "AUD": "5417.003283998476053"
                }
              },
              "forex": {
                "type": "object",
                "title": "Foreign Exchange Rates",
                "description": "Foreign exchange rates relative to the reference currency.\n\n**Format**: Each property (except `reference`) is a quote currency code, and the value is the amount of that currency equal to 1 unit of the reference currency.\n\n**Example**: If reference is USD and AUD is \"1.4071000\", then 1 USD = 1.4071 AUD\n\n**Usage**: Use these rates to convert between different fiat currencies.",
                "required": [
                  "reference"
                ],
                "properties": {
                  "reference": {
                    "type": "string",
                    "title": "Reference Currency",
                    "description": "Reference/base currency used for all forex conversion values.\n\n**Common Reference Currencies**: USD, EUR",
                    "example": "USD"
                  }
                },
                "additionalProperties": {
                  "type": "string",
                  "description": "FX conversion rate from the reference currency to the property currency, expressed as a decimal string.",
                  "example": "1.4071000"
                },
                "example": {
                  "reference": "USD",
                  "AUD": "1.4071000",
                  "EUR": "0.9234000",
                  "GBP": "0.7891000"
                }
              }
            }
          }
        },
        "required": [
          "identityReference",
          "source",
          "target",
          "processingFee",
          "networkFee",
          "marketRate"
        ]
      },
      "OffRampQuoteResponse": {
        "title": "Off-Ramp Indicative Price",
        "type": "object",
        "properties": {
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "source": {
            "type": "object",
            "properties": {
              "crypto": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The crypto token.",
                    "example": "USDT"
                  },
                  "blockchain": {
                    "type": "string",
                    "description": "The blockchain that is associated with the crypto token.",
                    "example": "TRON"
                  }
                },
                "required": [
                  "id",
                  "blockchain"
                ]
              },
              "amount": {
                "type": "string",
                "example": "100",
                "description": "The amount of crypto in."
              }
            },
            "required": [
              "crypto",
              "amount"
            ]
          },
          "target": {
            "type": "object",
            "properties": {
              "fiat": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The fiat currency.",
                    "example": "AUD"
                  },
                  "method": {
                    "type": "string",
                    "description": "The payment method.",
                    "example": "payid-bank-transfer"
                  }
                },
                "required": [
                  "id",
                  "method"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount of fiat out.",
                "example": "100"
              }
            },
            "required": [
              "fiat",
              "amount"
            ]
          },
          "processingFee": {
            "type": "string",
            "example": "0.00",
            "description": "The processing fee associated with the price."
          },
          "networkFee": {
            "type": "string",
            "example": "0.00",
            "description": "The network fee (gas fee) associated with the price."
          },
          "marketRate": {
            "type": "object",
            "title": "Market Rates",
            "description": "Current market rates for crypto and forex conversions.",
            "required": [
              "crypto",
              "forex"
            ],
            "properties": {
              "crypto": {
                "type": "object",
                "title": "Crypto Market Rates",
                "description": "Map of fiat currency codes to crypto market rates.",
                "additionalProperties": {
                  "type": "string",
                  "description": "Decimal market rate as string to preserve precision."
                }
              },
              "forex": {
                "type": "object",
                "title": "Foreign Exchange Rates",
                "description": "Foreign exchange rates relative to the reference currency.",
                "required": [
                  "reference"
                ],
                "properties": {
                  "reference": {
                    "type": "string",
                    "title": "Reference Currency",
                    "description": "Reference/base currency used for all forex conversion values.",
                    "example": "USD"
                  }
                },
                "additionalProperties": {
                  "type": "string",
                  "description": "FX conversion rate from the reference currency."
                }
              }
            }
          }
        },
        "required": [
          "identityReference",
          "source",
          "target"
        ]
      },
      "OnRampQuoteWithIdResponse": {
        "title": "On-Ramp Quote",
        "type": "object",
        "properties": {
          "quoteId": {
            "type": "string",
            "description": "Unique identifier for this quote. Use this when creating a ramp transaction via the Ramps Request payload to lock the quote in.",
            "example": "6e9174edd370ffe6331aeda7a6d75592"
          },
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "source": {
            "type": "object",
            "properties": {
              "fiat": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The fiat currency.",
                    "example": "AUD"
                  },
                  "method": {
                    "type": "string",
                    "description": "The payment method.",
                    "example": "payid-bank-transfer"
                  }
                },
                "required": [
                  "id",
                  "method"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount of fiat in.",
                "example": "24.50"
              }
            },
            "required": [
              "fiat",
              "amount"
            ]
          },
          "target": {
            "type": "object",
            "properties": {
              "crypto": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The crypto token.",
                    "example": "ETH"
                  },
                  "blockchain": {
                    "type": "string",
                    "description": "The blockchain that is associated with the crypto token.",
                    "example": "ETH"
                  }
                },
                "required": [
                  "id",
                  "blockchain"
                ]
              },
              "amount": {
                "type": "string",
                "example": "0.007259",
                "description": "The total amount of crypto out."
              }
            },
            "required": [
              "crypto",
              "amount"
            ]
          },
          "processingFee": {
            "type": "string",
            "example": "0.00",
            "description": "The processing fee associated with the quote."
          },
          "networkFee": {
            "type": "string",
            "example": "0.00",
            "description": "The network fee (gas fee) associated with the quote."
          },
          "marketRate": {
            "type": "object",
            "title": "Market Rates",
            "description": "Current market rates for crypto and forex conversions.",
            "required": [
              "crypto",
              "forex"
            ],
            "properties": {
              "crypto": {
                "type": "object",
                "title": "Crypto Market Rates",
                "description": "Map of fiat currency codes to crypto market rates.\n\n**Format**: Each property is a fiat currency code, and the value is the amount of that fiat currency equal to 1 unit of the crypto.",
                "additionalProperties": {
                  "type": "string",
                  "description": "Decimal market rate as string to preserve precision.",
                  "example": "2342.218527689999974"
                },
                "example": {
                  "USD": "2342.218527689999974",
                  "AUD": "3297.796842616966163"
                }
              },
              "forex": {
                "type": "object",
                "title": "Foreign Exchange Rates",
                "description": "Foreign exchange rates relative to the reference currency.",
                "required": [
                  "reference"
                ],
                "properties": {
                  "reference": {
                    "type": "string",
                    "title": "Reference Currency",
                    "description": "Reference/base currency used for all forex conversion values.",
                    "example": "USD"
                  }
                },
                "additionalProperties": {
                  "type": "string",
                  "description": "FX conversion rate from the reference currency to the property currency, expressed as a decimal string.",
                  "example": "1.4079800"
                },
                "example": {
                  "reference": "USD",
                  "AUD": "1.4079800"
                }
              }
            }
          },
          "expiresAt": {
            "type": "string",
            "description": "The expiry timestamp of the quote. The quote is valid for 3 minutes from creation.",
            "example": "2026-04-10 04:50:36"
          }
        },
        "required": [
          "quoteId",
          "identityReference",
          "source",
          "target",
          "processingFee",
          "networkFee",
          "marketRate",
          "expiresAt"
        ]
      },
      "OffRampQuoteWithIdResponse": {
        "title": "Off-Ramp Quote",
        "type": "object",
        "properties": {
          "quoteId": {
            "type": "string",
            "description": "Unique identifier for this quote. Use this when creating a ramp transaction via the Ramps Request payload to lock the quote in.",
            "example": "8a2b45ccd891ffe7442bfdb8b7e86703"
          },
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "source": {
            "type": "object",
            "properties": {
              "crypto": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The crypto token.",
                    "example": "USDT"
                  },
                  "blockchain": {
                    "type": "string",
                    "description": "The blockchain that is associated with the crypto token.",
                    "example": "TRON"
                  }
                },
                "required": [
                  "id",
                  "blockchain"
                ]
              },
              "amount": {
                "type": "string",
                "example": "100",
                "description": "The amount of crypto in."
              }
            },
            "required": [
              "crypto",
              "amount"
            ]
          },
          "target": {
            "type": "object",
            "properties": {
              "fiat": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The fiat currency.",
                    "example": "AUD"
                  },
                  "method": {
                    "type": "string",
                    "description": "The payment method.",
                    "example": "payid-bank-transfer"
                  }
                },
                "required": [
                  "id",
                  "method"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount of fiat out.",
                "example": "95.50"
              }
            },
            "required": [
              "fiat",
              "amount"
            ]
          },
          "processingFee": {
            "type": "string",
            "example": "2.50",
            "description": "The processing fee associated with the quote."
          },
          "networkFee": {
            "type": "string",
            "example": "2.00",
            "description": "The network fee (gas fee) associated with the quote."
          },
          "marketRate": {
            "type": "object",
            "title": "Market Rates",
            "description": "Current market rates for crypto and forex conversions.",
            "required": [
              "crypto",
              "forex"
            ],
            "properties": {
              "crypto": {
                "type": "object",
                "title": "Crypto Market Rates",
                "description": "Map of fiat currency codes to crypto market rates.",
                "additionalProperties": {
                  "type": "string",
                  "description": "Decimal market rate as string to preserve precision."
                }
              },
              "forex": {
                "type": "object",
                "title": "Foreign Exchange Rates",
                "description": "Foreign exchange rates relative to the reference currency.",
                "required": [
                  "reference"
                ],
                "properties": {
                  "reference": {
                    "type": "string",
                    "title": "Reference Currency",
                    "description": "Reference/base currency used for all forex conversion values.",
                    "example": "USD"
                  }
                },
                "additionalProperties": {
                  "type": "string",
                  "description": "FX conversion rate from the reference currency."
                }
              }
            }
          },
          "expiresAt": {
            "type": "string",
            "description": "The expiry timestamp of the quote. The quote is valid for 3 minutes from creation.",
            "example": "2026-04-10 04:53:12"
          }
        },
        "required": [
          "quoteId",
          "identityReference",
          "source",
          "target",
          "processingFee",
          "networkFee",
          "marketRate",
          "expiresAt"
        ]
      },
      "LimitsRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "identityReference",
          "method",
          "fiat",
          "crypto",
          "blockchain",
          "transactionType"
        ],
        "properties": {
          "identityReference": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Partner identity reference.",
            "example": "206-0x56c386b7b49be8618dbcdb2c6d09e161645c31ed"
          },
          "method": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "The payment method.\n\n| Available payments |\n|-------------|\n|debit-credit-card|\n|apple-pay|\n|sepa-bank-transfer|\n|gbp-bank-transfer|\n|ach-bank-transfer|\n|pix|\n|zar-bank-transfer|\n|interac-bank-transfer|\n|ideal-bank-transfer|\n|google-pay|\n|payid-bank-transfer|\n|wire-transfer|\n|spei|\n|pse|\n|khipu|\n|aud-bank-transfer|\n|usd-bank-transfer|\n|paypal|\n|klarna-paynow|\n",
            "example": "payid-bank-transfer"
          },
          "transactionType": {
            "type": "string",
            "description": "Transaction type (e.g., ONRAMP/OFFRAMP). Populate enum from your TransactionTypeEnum if desired.",
            "example": "ONRAMP"
          },
          "fiat": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10,
            "description": "Fiat currency code (typically ISO 4217).",
            "example": "AUD",
            "pattern": "^[A-Z0-9]{1,10}$"
          },
          "crypto": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10,
            "description": "Crypto asset code.",
            "example": "BTC",
            "pattern": "^[A-Z0-9]{1,10}$"
          },
          "blockchain": {
            "type": "string",
            "minLength": 1,
            "maxLength": 50,
            "description": "Blockchain identifier.",
            "example": "BTC"
          }
        }
      },
      "LimitsResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "identityReference",
          "limits"
        ],
        "properties": {
          "identityReference": {
            "type": "string",
            "description": "Echo of the identity reference.",
            "example": "206-0x56c386b7b49be8618dbcdb2c6d09e161645c31ed"
          },
          "limits": {
            "type": "object",
            "properties": {
              "transaction": {
                "type": "object",
                "properties": {
                  "maxFiat": {
                    "type": "object",
                    "properties": {
                      "amount": {
                        "type": "string",
                        "example": "100",
                        "description": "The maximum value for the transaction"
                      },
                      "currency": {
                        "type": "string",
                        "example": "AUD",
                        "description": "Subject fiat currencty"
                      }
                    }
                  },
                  "minFiat": {
                    "type": "object",
                    "properties": {
                      "amount": {
                        "type": "string",
                        "example": "100",
                        "description": "The maximum value for the transaction"
                      },
                      "currency": {
                        "type": "string",
                        "example": "AUD",
                        "description": "Subject fiat currencty"
                      }
                    }
                  }
                }
              },
              "periodical": {
                "type": "array",
                "description": "List of limit buckets for each time period.",
                "items": {
                  "$ref": "#/components/schemas/LimitBucket"
                }
              }
            }
          }
        }
      },
      "EligibilityRequest": {
        "type": "object",
        "additionalProperties": false,
        "description": "Request payload for transaction eligibility.\n\nIdentification rules:\n- Provide `identityReference`, OR provide all of `email`, `countryOfResidence`.\n- Responses containg 422 status codes can vary based on the restrcitions found for the profile for example:\n  - limit breach (daily, weekly, monthly, annual) \n  - age restrictions \n  - unsupported asset or fiat currency\n  - Locality restrictions\n\nAmount rules:\n- Provide exactly one of `fiatAmount` or `cryptoAmount`.\n\nConditional:\n- `state` is required when `countryOfResidence` is `US`.\n",
        "required": [
          "method",
          "transactionType",
          "fiat",
          "crypto",
          "blockchain"
        ],
        "properties": {
          "identityReference": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Partner identity reference.",
            "example": "user-123"
          },
          "method": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "The payment method.\n\n| Available payments |\n|-------------|\n|debit-credit-card|\n|apple-pay|\n|sepa-bank-transfer|\n|gbp-bank-transfer|\n|ach-bank-transfer|\n|pix|\n|zar-bank-transfer|\n|interac-bank-transfer|\n|ideal-bank-transfer|\n|google-pay|\n|payid-bank-transfer|\n|wire-transfer|\n|spei|\n|pse|\n|khipu|\n|aud-bank-transfer|\n|usd-bank-transfer|\\n|paypal|\\n|klarna-paynow|\\n\",|\n",
            "example": "payid-bank-transfer"
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "ONRAMP",
              "OFFRAMP"
            ],
            "description": "Transaction type. Must be a valid value of `TransactionTypeEnum`.\n(Populate the allowed values here if you want strict client validation.)\n",
            "example": "ONRAMP"
          },
          "fiat": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10,
            "description": "Fiat currency code allowed for the partner (e.g., ISO 4217).\nEnforced server-side validation for availbility\n",
            "example": "AUD",
            "pattern": "^[A-Z0-9]{1,10}$"
          },
          "crypto": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10,
            "description": "Crypto asset code. Enforced server-side validation for availbility\n",
            "example": "BTC",
            "pattern": "^[A-Z0-9]{1,10}$"
          },
          "fiatAmount": {
            "type": "string",
            "minLength": 1,
            "description": "Fiat amount as a decimal string.\nMutually exclusive with `cryptoAmount`.\n",
            "example": "250.00",
            "pattern": "^[0-9]+(\\.[0-9]+)?$"
          },
          "cryptoAmount": {
            "type": "string",
            "minLength": 1,
            "description": "Crypto amount as a decimal string.\nMutually exclusive with `fiatAmount`.\n",
            "example": "0.125",
            "pattern": "^[0-9]+(\\.[0-9]+)?$"
          },
          "blockchain": {
            "type": "string",
            "minLength": 1,
            "description": "Blockchain identifier.",
            "example": "BITCOIN"
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Required when `identityReference` is not provided.",
            "example": "user@example.com"
          },
          "countryOfResidence": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "Required when `identityReference` is not provided.\nISO 3166-1 alpha-2 country code.\n",
            "example": "AU",
            "pattern": "^[A-Z]{2}$"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date",
            "description": "Optional when `identityReference` is not provided. (Format YYYY-MM-DD)\"",
            "example": "1990-01-30"
          },
          "state": {
            "type": "string",
            "description": "Required if `countryOfResidence` is `US`. (Enforced server-side.)",
            "example": "CA"
          }
        },
        "anyOf": [
          {
            "required": [
              "identityReference"
            ]
          },
          {
            "required": [
              "email",
              "countryOfResidence",
              "dateOfBirth"
            ]
          }
        ],
        "oneOf": [
          {
            "title": "fiatAmount",
            "required": [
              "fiatAmount"
            ]
          },
          {
            "title": "cryptoAmount",
            "required": [
              "cryptoAmount"
            ]
          }
        ]
      },
      "EligibilityResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "paymentReady",
          "kycRequirements"
        ],
        "properties": {
          "paymentReady": {
            "type": "boolean",
            "description": "Whether the identity is eligible and can proceed with payment/transaction. When true, there are no KYC requirements.",
            "example": false
          },
          "kycRequirements": {
            "type": "array",
            "description": "List of outstanding requirements that must be satisfied before payment can proceed.\nIf `paymentReady` is true, this will typically be an empty array.\n",
            "items": {
              "type": "string",
              "enum": [
                "TIN",
                "NAME",
                "DOB",
                "ADDRESS",
                "POA",
                "DOCUMENT",
                "SELFIE",
                "SOURCE_FUNDS",
                "OCCUPATION",
                "PURPOSE_OF_TX"
              ]
            },
            "uniqueItems": true,
            "example": [
              "TIN",
              "NAME",
              "DOB",
              "ADDRESS",
              "POA",
              "DOCUMENT",
              "SELFIE",
              "SOURCE_FUNDS",
              "OCCUPATION",
              "PURPOSE_OF_TX"
            ]
          }
        }
      },
      "OtpRequestRequest": {
        "type": "object",
        "title": "OTP Request",
        "description": "Request to send an OTP code to the customer's email address for verification.",
        "properties": {
          "identityReference": {
            "type": "string",
            "title": "Identity Reference",
            "description": "Identity reference of an existing customer created through our platform",
            "example": "c-13344",
            "pattern": "^[A-Za-z0-9-]+$",
            "minLength": 1,
            "maxLength": 255
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "The customer's email address",
            "example": "user@example.com"
          }
        },
        "required": [
          "identityReference",
          "email"
        ]
      },
      "OtpRequestResponse": {
        "type": "object",
        "title": "OTP Request Response",
        "description": "Response after successfully requesting an OTP code.",
        "properties": {
          "message": {
            "type": "string",
            "description": "Success message indicating OTP was sent.",
            "example": "OTP sent successfully"
          }
        },
        "required": [
          "message"
        ]
      },
      "OtpVerifyRequest": {
        "type": "object",
        "title": "OTP Verification Request",
        "description": "Request to verify an OTP code sent to the customer's email.",
        "properties": {
          "identityReference": {
            "type": "string",
            "title": "Identity Reference",
            "description": "Identity reference of an existing customer created through our platform",
            "example": "c-13344",
            "pattern": "^[A-Za-z0-9-]+$",
            "minLength": 1,
            "maxLength": 255
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "The customer's email address",
            "example": "user@example.com"
          },
          "code": {
            "type": "string",
            "description": "The OTP code received via email. Must be 4 characters.",
            "minLength": 4,
            "maxLength": 4,
            "example": "4205"
          }
        },
        "required": [
          "identityReference",
          "email",
          "code"
        ]
      },
      "OtpVerifyResponse": {
        "type": "object",
        "title": "OTP Verification Response",
        "description": "Response after successfully verifying an OTP code.",
        "properties": {
          "message": {
            "type": "string",
            "description": "Success message indicating verification was successful.",
            "example": "Success"
          }
        },
        "required": [
          "message"
        ]
      },
      "identity-reference": {
        "type": "string",
        "title": "Identity Reference",
        "description": "A unique customer identifier provided by the partner. This field is required and must be unique for each customer.\n\n**Important**: You must consistently reuse the same identityReference for repeat interactions with the same customer, allowing Banxa to reliably recognize and associate their identity across multiple transactions.\n\n**Format Requirements**:\n- Only ASCII letters (a-z, A-Z), digits (0-9), and hyphens (-) are allowed\n- Must be between 1 and 255 characters\n- Case-sensitive\n\n**Best Practices**:\n- Use a consistent format across your system\n- Consider using a prefix to identify your organization (e.g., 'partner-customer-123')\n- Do not include personally identifiable information (PII) in the reference\n- Store the mapping between your internal customer ID and this reference securely",
        "example": "c-13344",
        "pattern": "^[A-Za-z0-9-]+$",
        "minLength": 1,
        "maxLength": 255
      },
      "OnRampRequestBase": {
        "title": "On-Ramp Request",
        "type": "object",
        "properties": {
          "subPartnerId": {
            "type": "string",
            "description": "Your defined ID for associating an order with. You may use this to differentiate between your customers.",
            "example": "2125",
            "minimum": 1
          },
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "source": {
            "type": "object",
            "properties": {
              "fiat": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The fiat currency to be transferred. Must be formatted as an ISO 4217 code.",
                    "example": "AUD"
                  },
                  "method": {
                    "type": "string",
                    "example": "payid-bank-transfer",
                    "description": "| Available payments |\n|-------------|\n|interac-bank-transfer|\n|payid-bank-transfer|\n|sepa-bank-transfer|\n|ach-bank-transfer|\n"
                  },
                  "tosAccepted": {
                    "type": "boolean",
                    "description": "Indicates whether the customer has accepted the Terms of Service. Required for ach-bank-transfer method if the customer has not previously signed the terms of service agreement.",
                    "example": true
                  }
                },
                "required": [
                  "id",
                  "method"
                ]
              }
            },
            "required": [
              "fiat"
            ]
          },
          "target": {
            "type": "object",
            "properties": {
              "crypto": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The crypto token to be received.",
                    "example": "XRP"
                  },
                  "blockchain": {
                    "type": "string",
                    "description": "The blockchain that is associated with the crypto token.",
                    "example": "XRP Ledger"
                  },
                  "walletAddress": {
                    "type": "string",
                    "description": "The wallet address Banxa will use to transfer the crypto.",
                    "example": "rp93JdjfXxPYVjo5E7qF4G6tRbBeweUz9K"
                  },
                  "walletAddressMemo": {
                    "type": "string",
                    "description": "The wallet address memo associated with the wallet address.",
                    "example": "39730"
                  }
                },
                "required": [
                  "id",
                  "blockchain",
                  "walletAddress"
                ]
              }
            },
            "required": [
              "crypto"
            ]
          }
        },
        "required": [
          "identityReference",
          "source",
          "target"
        ]
      },
      "OnRampRequestWithFiatAmount": {
        "title": "Lock fiat amount",
        "allOf": [
          {
            "$ref": "#/components/schemas/OnRampRequestBase"
          },
          {
            "type": "object",
            "properties": {
              "fiatAmount": {
                "type": "string",
                "description": "The amount in fiat currency to convert. \nAmount in fiat minor precision (typically 2 decimals). \nThis locks the fiat amount; the crypto amount will be computed and rounded to the configured crypto scale. \nNote: due to differing decimal scales and rounding rules, converting fiat→crypto and then crypto→fiat may not return the exact original number.\n",
                "example": "100"
              }
            },
            "required": [
              "fiatAmount"
            ]
          }
        ]
      },
      "OnRampRequestWithCryptoAmount": {
        "title": "Lock crypto amount",
        "allOf": [
          {
            "$ref": "#/components/schemas/OnRampRequestBase"
          },
          {
            "type": "object",
            "properties": {
              "cryptoAmount": {
                "type": "string",
                "description": "Amount in crypto precision (token-dependent, e.g., 6–8 decimals).\nThis locks the crypto amount; the fiat amount will be computed and rounded to the fiat scale.\nNote: small differences vs the reverse path are expected from precision/rounding.\n",
                "example": "100"
              }
            },
            "required": [
              "cryptoAmount"
            ]
          }
        ]
      },
      "payid-bank-transfer": {
        "type": "object",
        "title": "Offramp PayId instructions",
        "description": "The payment instructions for the bank transfer in Australia.\n",
        "properties": {
          "accountName": {
            "type": "string",
            "description": "The account name for the bank transfer.",
            "example": "John Citizen"
          },
          "accountNumber": {
            "type": "string",
            "description": "The account number for the bank transfer.",
            "example": "12345678"
          },
          "bsb": {
            "type": "string",
            "description": "The BSB number for the bank transfer.",
            "example": "26195"
          }
        },
        "required": [
          "accountName",
          "accountNumber",
          "bsb"
        ]
      },
      "interac-bank-transfer": {
        "type": "object",
        "title": "Offramp Interac instructions",
        "properties": {
          "email": {
            "type": "string",
            "example": "j.citizen@example.com",
            "description": "The account holder email",
            "maxLength": 160
          }
        },
        "required": [
          "email"
        ]
      },
      "sepa-bank-transfer": {
        "type": "object",
        "title": "Offramp SEPA instructions",
        "description": "The payment instructions for the bank transfer in Europe\n",
        "properties": {
          "accountName": {
            "type": "string",
            "description": "The account name for the bank transfer.",
            "example": "John Citizen"
          },
          "iban": {
            "type": "string",
            "description": "The IBAN number for the bank transfer.",
            "example": "26195"
          }
        },
        "required": [
          "accountName",
          "iban"
        ]
      },
      "ach-bank-transfer": {
        "type": "object",
        "title": "Offramp ACH instructions",
        "properties": {
          "bankName": {
            "type": "string",
            "example": "Bank of America",
            "description": "The bank name",
            "maxLength": 200
          },
          "accountName": {
            "type": "string",
            "example": "John Armstrong",
            "description": "The account name",
            "maxLength": 200
          },
          "accountNumber": {
            "type": "string",
            "example": "123456789012",
            "description": "The account number",
            "minLength": 1
          },
          "routingNumber": {
            "type": "string",
            "example": "121000358"
          }
        },
        "required": [
          "bankName",
          "accountName",
          "accountNumber",
          "routingNumber"
        ]
      },
      "OffRampInstructions": {
        "type": "object",
        "oneOf": [
          {
            "$ref": "#/components/schemas/payid-bank-transfer"
          },
          {
            "$ref": "#/components/schemas/interac-bank-transfer"
          },
          {
            "$ref": "#/components/schemas/sepa-bank-transfer"
          },
          {
            "$ref": "#/components/schemas/ach-bank-transfer"
          }
        ]
      },
      "OffRampRequestBase": {
        "title": "Off-Ramp Request",
        "type": "object",
        "properties": {
          "subPartnerId": {
            "type": "string",
            "description": "Your defined ID for associating an order with. You may use this to differentiate between your customers.\n",
            "example": "2125",
            "minimum": 1
          },
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "source": {
            "type": "object",
            "properties": {
              "crypto": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The crypto token to be transferred.",
                    "example": "ETH"
                  },
                  "blockchain": {
                    "type": "string",
                    "description": "The blockchain that is associated with the crypto token.",
                    "example": "ethereum"
                  },
                  "walletAddress": {
                    "type": "string",
                    "description": "The wallet address that will be used to send the crypto. This will also be the wallet address used for refunds if a refund is necessary.",
                    "example": "0xc292474673cf1a96a96e8c56ec4f45ecf2e0b448"
                  },
                  "walletAddressMemo": {
                    "type": "string",
                    "description": "The wallet address memo associated with the wallet address.",
                    "example": "1234"
                  }
                },
                "required": [
                  "id",
                  "blockchain",
                  "walletAddress"
                ]
              }
            },
            "required": [
              "crypto"
            ]
          },
          "target": {
            "type": "object",
            "properties": {
              "fiat": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The fiat currency to be received. Must be formatted as an ISO 4217 code.",
                    "example": "GBP"
                  },
                  "method": {
                    "type": "string",
                    "description": "The payment method used for the ramp.",
                    "example": "payid-bank-transfer"
                  },
                  "instructions": {
                    "type": "array",
                    "description": "The payment instructions that you provide to Banxa. It will be the where the payout will be made to and will differ per payment method.",
                    "items": {
                      "$ref": "#/components/schemas/OffRampInstructions"
                    }
                  },
                  "tosAccepted": {
                    "type": "boolean",
                    "description": "Indicates whether the customer has accepted the Terms of Service. Required for ach-bank-transfer method if the customer has not previously signed the terms of service agreement.",
                    "example": true
                  }
                },
                "required": [
                  "id",
                  "method",
                  "instructions"
                ]
              }
            },
            "required": [
              "fiat"
            ]
          }
        },
        "required": [
          "identityReference",
          "source",
          "target"
        ]
      },
      "OffRampRequestWithCryptoAmount": {
        "title": "Lock crypto amount",
        "allOf": [
          {
            "$ref": "#/components/schemas/OffRampRequestBase"
          },
          {
            "type": "object",
            "properties": {
              "cryptoAmount": {
                "type": "string",
                "description": "Amount in crypto precision (token-dependent, e.g., 6–8 decimals).\nThis locks the crypto amount; the fiat amount will be computed and rounded to the fiat scale.\nNote: small differences vs the reverse path are expected from precision/rounding.\n",
                "example": "100"
              }
            },
            "required": [
              "cryptoAmount"
            ]
          }
        ]
      },
      "OffRampRequestWithFiatAmount": {
        "title": "Lock fiat amount",
        "allOf": [
          {
            "$ref": "#/components/schemas/OffRampRequestBase"
          },
          {
            "type": "object",
            "properties": {
              "fiatAmount": {
                "type": "string",
                "description": "The amount in fiat currency to convert. \nAmount in fiat minor precision (typically 2 decimals). \nThis locks the fiat amount; the crypto amount will be computed and rounded to the configured crypto scale. \nNote: due to differing decimal scales and rounding rules, converting fiat→crypto and then crypto→fiat may not return the exact original number.\n",
                "example": "100"
              }
            },
            "required": [
              "fiatAmount"
            ]
          }
        ]
      },
      "offramp-response": {
        "title": "Off-Ramp Response",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ramp ID.",
            "example": "4002"
          },
          "subPartnerId": {
            "type": "string",
            "description": "Your defined ID for associating an order with. You may use this to differentiate between your customers.",
            "example": "2125"
          },
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "status": {
            "type": "string",
            "enum": [
              "INITIALIZED",
              "AWAITING_FUNDS",
              "PAYMENT_SUBMITTED",
              "FUNDS_RECEIVED",
              "UNDER_REVIEW",
              "CANCELLED",
              "REFUNDED",
              "COMPLETED"
            ],
            "description": "| Status           | Description                                                                                   |\n|------------------|-----------------------------------------------------------------------------------------------|\n| INITIALIZED      | The request has been accepted and is queued for processing.                          |\n| AWAITING_FUNDS   | The order is ready; awaiting receipt of funds at the specified wallet address.             |\n| FUNDS_RECEIVED   | Funds have been successfully received at the destination wallet address.                      |\n| UNDER_REVIEW     | The order is undergoing compliance and security review.                                    |\n| COMPLETED        | The order is finalized: funds have been secured and fiat disbursed to the customer's method. |\n| CANCELLED        | The order has been cancelled and will not proceed.                                         |\n| REFUNDED         | The amount has been returned to the customer's wallet address.                       |\n",
            "example": "INITIALIZED"
          },
          "source": {
            "type": "object",
            "properties": {
              "crypto": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The crypto token to be transferred.",
                    "example": "USDT"
                  },
                  "blockchain": {
                    "type": "string",
                    "description": "The blockchain that is associated with the crypto token.",
                    "example": "ethereum"
                  },
                  "walletAddress": {
                    "type": "string",
                    "description": "The wallet address that will be used to send the crypto. This will also be the wallet address used for refunds if a refund is necessary.",
                    "example": "0x46B2E9701FE4F6C0A23533D196DbBE7EfEeDea4F"
                  },
                  "walletAddressMemo": {
                    "type": "string",
                    "description": "The wallet address memo associated with the wallet address.",
                    "example": "1234"
                  }
                },
                "required": [
                  "id",
                  "blockchain",
                  "walletAddress"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount of crypto to be transferred",
                "example": "105"
              }
            },
            "required": [
              "crypto",
              "amount"
            ]
          },
          "target": {
            "type": "object",
            "properties": {
              "fiat": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The fiat currency to be received. Must be formatted as an ISO 4217 code.",
                    "example": "USD"
                  },
                  "method": {
                    "type": "string",
                    "description": "The payment method used for the ramp.",
                    "example": "payid-bank-transfer"
                  }
                },
                "required": [
                  "id",
                  "method"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount of fiat to be received.",
                "example": "100.5"
              }
            },
            "required": [
              "fiat",
              "amount"
            ]
          },
          "sourceDepositInstructions": {
            "type": "object",
            "properties": {
              "walletAddress": {
                "type": "string",
                "description": "The Banxa deposit wallet address.",
                "example": "0x46B2E9701FE4F6C0A23533D196DbBE7EfEeDea4F"
              },
              "walletAddressMemo": {
                "type": "string",
                "description": "The wallet address memo assoicated with the Banxa deposit wallet address.",
                "example": "1684"
              }
            },
            "required": [
              "walletAddress",
              "walletAddressMemo"
            ]
          },
          "receipt": {
            "type": "object",
            "properties": {
              "sourceTransactionHash": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The transaction hash of the crypto transfer. Null if not yet received.",
                "example": "0x637f3f8c7b15a83657901ca9f9e0134f0b7dad09e09fbac8a637d026343f586e"
              },
              "gatewayFee": {
                "type": "string",
                "description": "The fee charged by the payment processor.",
                "example": "1.95"
              },
              "networkFee": {
                "type": "string",
                "description": "The blockchain network fee required to process the transaction.",
                "example": "1.95"
              },
              "sourceAmount": {
                "type": "string",
                "description": "The amount of crypto transferred.",
                "example": "100"
              },
              "targetAmount": {
                "type": "string",
                "description": "The amount of fiat received.",
                "example": "100"
              }
            },
            "required": [
              "sourceTransactionHash",
              "gatewayFee",
              "networkFee",
              "sourceAmount",
              "targetAmount"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "The UTC date time of creation.",
            "example": "2023-05-05T19:53:08.320Z"
          },
          "completedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "The UTC date time of the completion. Null if not yet completed.",
            "example": "2023-06-05T19:53:08.320Z"
          }
        },
        "required": [
          "id",
          "subPartnerId",
          "identityReference",
          "status",
          "source",
          "target",
          "sourceDepositInstructions",
          "receipt",
          "createdAt",
          "completedAt"
        ]
      },
      "payid-bank-transfer-onramp": {
        "type": "object",
        "title": "Onramp PayId instructions",
        "description": "The Australian payment instructions the customer to complete the payment for the transfer.\n",
        "properties": {
          "recipientEmail": {
            "type": "string",
            "description": "The account name for the payid bank transfer.",
            "example": "15600270@banxa.com"
          },
          "depositReference": {
            "type": "string",
            "description": "The reference required to provide with the deposit.",
            "example": "12345678"
          }
        },
        "required": [
          "recipientEmail",
          "depositReference"
        ]
      },
      "interac-bank-transfer-onramp": {
        "type": "object",
        "title": "Onramp Interac instructions",
        "properties": {
          "recipientEmail": {
            "type": "string",
            "example": "j.citizen@example.com",
            "description": "The account holder email",
            "maxLength": 255
          },
          "securityQuestion": {
            "type": "string",
            "example": "What was the name of your first pet?",
            "description": "Security question",
            "maxLength": 255
          },
          "securityAnswer": {
            "type": "string",
            "example": "DOGE",
            "description": "The answer to the security question.",
            "maxLength": 255
          }
        },
        "required": [
          "recipientEmail",
          "securityQuestion",
          "securityAnswer"
        ]
      },
      "sepa-bank-transfer-onramp": {
        "type": "object",
        "title": "Onramp SEPA instructions",
        "description": "The European payment instructions the customer to complete the payment for the transfer.\n",
        "properties": {
          "depositReference": {
            "type": "string",
            "description": "The reference for the deposit.",
            "example": "01"
          },
          "recipientName": {
            "type": "string",
            "description": "The name of the recipient.",
            "example": "Banxa"
          },
          "recipientAddress": {
            "type": "string",
            "description": "The address of the recipient",
            "example": "EU Internet Ventures B.V. Piet. Heinkade 93B, 1019GM, Amsterdam, The Netherlands"
          },
          "BIC": {
            "type": "string",
            "description": "The BIC number.",
            "example": "CLJUGB00"
          },
          "IBAN": {
            "type": "string",
            "description": "The IBAN number for the bank transfer.",
            "example": "GB22CLJU10000000000000"
          },
          "bankName": {
            "type": "string",
            "description": "The name of the bank",
            "example": "CJ Limited"
          },
          "bankAddress": {
            "type": "string",
            "description": "The bank address",
            "example": "6th Floor, Manfield House, 1 Southampton Street London, United Kingdom WC2R OLR"
          }
        },
        "required": [
          "depositReference",
          "recipientName",
          "recipientAddress",
          "BIC",
          "IBAN",
          "bankName",
          "bankAddress"
        ]
      },
      "ach-bank-transfer-onramp": {
        "type": "object",
        "title": "Onramp ACH instructions",
        "properties": {
          "paymentRail": {
            "type": "string",
            "example": "ach_push",
            "description": "The payment rail"
          },
          "currency": {
            "type": "string",
            "example": "usd",
            "description": "The currency"
          },
          "amount": {
            "type": "string",
            "example": "500",
            "description": "The amount",
            "minLength": 1
          },
          "depositReference": {
            "type": "string",
            "example": "BRGYAVF82BNNR3ZPGBD6",
            "description": "The deposit reference"
          },
          "bankAccountNumber": {
            "type": "string",
            "description": "The bank account number",
            "example": "210351636791"
          },
          "bankRoutingNumber": {
            "type": "string",
            "description": "The bank routing number",
            "example": "101019644"
          },
          "bankBeneficiaryName": {
            "type": "string",
            "description": "The bank beneficiary name",
            "example": "BNXA USA MTL Inc"
          },
          "bankBeneficiaryAddress": {
            "type": "string",
            "description": "The beneficiary address",
            "example": "1 East Liberty Street, 600, Reno, Nevada 895010000, US"
          },
          "bankName": {
            "type": "string",
            "description": "The bank name",
            "example": "Lead Bank"
          },
          "bankAddress": {
            "type": "string",
            "description": "The bank aaddress",
            "example": "1801 Main St., Kansas City, MO 64108"
          }
        },
        "required": [
          "paymentRail",
          "currency",
          "amount",
          "depositReference",
          "bankAccountNumber",
          "bankRoutingNumber",
          "bankBeneficiaryName",
          "bankName",
          "bankAddress"
        ]
      },
      "OnRampInstructions": {
        "type": "object",
        "oneOf": [
          {
            "$ref": "#/components/schemas/payid-bank-transfer-onramp"
          },
          {
            "$ref": "#/components/schemas/interac-bank-transfer-onramp"
          },
          {
            "$ref": "#/components/schemas/sepa-bank-transfer-onramp"
          },
          {
            "$ref": "#/components/schemas/ach-bank-transfer-onramp"
          }
        ]
      },
      "onramp-response": {
        "title": "On-Ramp Response",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ramp ID.",
            "example": "4002"
          },
          "subPartnerId": {
            "type": "string",
            "description": "Your defined ID for associating an order with. You may use this to differentiate between your customers.",
            "example": "2125"
          },
          "identityReference": {
            "$ref": "#/components/schemas/identity-reference"
          },
          "status": {
            "type": "string",
            "enum": [
              "INITIALIZED",
              "AWAITING_FUNDS",
              "PAYMENT_SUBMITTED",
              "FUNDS_RECEIVED",
              "UNDER_REVIEW",
              "CANCELLED",
              "REFUNDED",
              "COMPLETED"
            ],
            "description": "| Status           | Description                                                                                   |\n|------------------|-----------------------------------------------------------------------------------------------|\n| INITIALIZED      | The request has been accepted and is queued for processing.                          |\n| AWAITING_FUNDS   | The order is ready; awaiting receipt of funds through the specified payment method.             |\n| FUNDS_RECEIVED   | Funds have been successfully received via the requested payment method.                      |\n| UNDER_REVIEW     | The order is undergoing compliance and security review.                                    |\n| COMPLETED        | The order is finalized: funds have been secured and crypto is disbursed to the customer's wallet address. |\n| CANCELLED        | The order has been cancelled and will not proceed.                                         |\n| REFUNDED         | The order amount has been returned to the customer.                       |\n",
            "example": "INITIALIZED"
          },
          "source": {
            "type": "object",
            "properties": {
              "fiat": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The fiat currency to be transferred. Must be formatted as an ISO 4217 code.\n",
                    "example": "AUD"
                  },
                  "method": {
                    "type": "string",
                    "description": "The payment method used for the ramp.",
                    "example": "payid-bank-transfer"
                  }
                },
                "required": [
                  "id",
                  "method"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount of fiat to be transferred.",
                "example": "100"
              }
            },
            "required": [
              "fiat",
              "amount"
            ]
          },
          "target": {
            "type": "object",
            "properties": {
              "crypto": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The crypto token to be received.",
                    "example": "XRP"
                  },
                  "blockchain": {
                    "type": "string",
                    "description": "The blockchain that is associated with the crypto token.",
                    "example": "XRP Ledger"
                  },
                  "walletAddress": {
                    "type": "string",
                    "description": "The wallet address Banxa will use to transfer the crypto.",
                    "example": "rp93JdjfXxPYVjo5E7qF4G6tRbBeweUz9K"
                  },
                  "walletAddressMemo": {
                    "type": "string",
                    "description": "The wallet address memo associated with the wallet address.",
                    "example": "39730"
                  }
                },
                "required": [
                  "id",
                  "blockchain",
                  "walletAddress"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount of crypto to be received.",
                "example": "105"
              }
            },
            "required": [
              "crypto",
              "amount"
            ]
          },
          "sourceDepositInstructions": {
            "$ref": "#/components/schemas/OnRampInstructions"
          },
          "receipt": {
            "type": "object",
            "properties": {
              "targetTransactionHash": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The transaction hash of the crypto transfer. Null if not yet completed.",
                "example": "string"
              },
              "gatewayFee": {
                "type": "string",
                "description": "The fee charged by the payment processor.",
                "example": "1.95"
              },
              "networkFee": {
                "type": "string",
                "description": "The blockchain network fee required to process the transaction.",
                "example": "1.95"
              },
              "sourceAmount": {
                "type": "string",
                "description": "The amount of fiat transferred.",
                "example": "100"
              },
              "targetAmount": {
                "type": "string",
                "description": "The amount of crypto received.",
                "example": "100"
              }
            },
            "required": [
              "targetTransactionHash",
              "gatewayFee",
              "networkFee",
              "sourceAmount",
              "targetAmount"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "The UTC date time of the transaction creation.",
            "example": "2023-05-05T19:53:08.320Z"
          },
          "completedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "The UTC date time of the transaction completion. Null if not yet completed.",
            "example": "2023-06-05T19:53:08.320Z"
          }
        },
        "required": [
          "id",
          "subPartnerId",
          "identityReference",
          "status",
          "source",
          "target",
          "sourceDepositInstructions",
          "receipt",
          "createdAt",
          "completedAt"
        ]
      },
      "TaxIdType": {
        "type": "string",
        "example": "tax_id",
        "description": "The category of tax or government identifier supplied in `taxId`. The correct value depends on the customer's country and the identifier type accepted for that country.\n\n| Value | Description |\n|---|---|\n| `identity_card` | A government-issued identity card number used for identity or tax reporting in the customer's country. |\n| `tax_id` | A tax identification number issued by a tax authority, such as a TFN, TIN, ITIN, or equivalent. |\n| `national_number` | A national, citizen, resident, or social insurance number used to identify an individual in their country. |\n| `ssn` | A Social Security Number, generally used for US individuals. |",
        "enum": [
          "identity_card",
          "tax_id",
          "national_number",
          "ssn"
        ]
      },
      "TaxId": {
        "type": "string",
        "example": "123-11-123",
        "description": "Tax identification number.\n\nSee [TIN validation](./enterprise-api/v0-beta/how-it-works/tin-validation)."
      },
      "IdentityRelianceDocument": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "DRIVING_LICENSE",
              "PASSPORT",
              "IDENTIFICATION"
            ],
            "example": "DRIVING_LICENSE",
            "description": "The type of document collected from the applicant."
          },
          "data": {
            "type": "object",
            "description": "The document data collected from the customer.",
            "properties": {
              "number": {
                "type": "string",
                "example": "123456789",
                "description": "Identifier number from the document."
              }
            }
          }
        }
      },
      "Image": {
        "type": "object",
        "oneOf": [
          {
            "title": "Driving License / Identification",
            "required": [
              "side"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "DRIVING_LICENSE",
                  "IDENTIFICATION"
                ],
                "example": "DRIVING_LICENSE"
              }
            }
          },
          {
            "title": "Other",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "PASSPORT",
                  "PROOF_OF_ADDRESS",
                  "SELFIE"
                ],
                "example": "PASSPORT"
              }
            }
          }
        ],
        "description": "The mimetype field is required and must be either image/jpeg or image/png. Note: JSON does not support line breaks in string values, so the Base64-encoded content must be provided as a single continuous line without any line breaks.\n",
        "properties": {
          "base64": {
            "type": "string",
            "example": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P49/8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",
            "pattern": "^[A-Za-z0-9\\/\\r\\n+]*={0,2}$",
            "description": "Base64-encoded file content. Maximum original file size before encoding is 10 MB.\n",
            "format": "byte"
          },
          "mimetype": {
            "type": "string",
            "example": "image/png",
            "description": "MIME type of the image, we support image/jpeg and image/png mimetypes\n"
          },
          "side": {
            "type": "string",
            "example": "FRONT",
            "enum": [
              "FRONT",
              "BACK"
            ],
            "description": "The side of the identity document\n"
          }
        },
        "required": [
          "base64",
          "mimetype"
        ]
      },
      "IdentityDocument": {
        "type": "object",
        "oneOf": [
          {
            "title": "Passport / Driving License / ID",
            "required": [
              "type",
              "images",
              "data"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "PASSPORT",
                  "DRIVING_LICENSE",
                  "IDENTIFICATION"
                ],
                "example": "PASSPORT"
              }
            }
          },
          {
            "title": "Proof of Address / Selfie",
            "required": [
              "type",
              "images"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "PROOF_OF_ADDRESS",
                  "SELFIE"
                ],
                "example": "PROOF_OF_ADDRESS"
              }
            }
          }
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "DRIVING_LICENSE",
              "PASSPORT",
              "IDENTIFICATION",
              "PROOF_OF_ADDRESS",
              "SELFIE"
            ],
            "example": "DRIVING_LICENSE",
            "description": "The type of document provided."
          },
          "data": {
            "type": "object",
            "description": "Required when the document \"type\" is \"PASSPORT\", \"DRIVING_LICENSE\", or \"IDENTIFICATION\".\n",
            "properties": {
              "number": {
                "type": "string",
                "example": "123456789",
                "description": "Identifier number from the document."
              }
            }
          },
          "images": {
            "type": "array",
            "description": "One or more images of the document.",
            "items": {
              "$ref": "#/components/schemas/Image"
            }
          }
        }
      },
      "LimitAmounts": {
        "type": "object",
        "additionalProperties": false,
        "description": "Limit amounts for a given context.\n",
        "properties": {
          "maxFiat": {
            "$ref": "#/components/schemas/Money"
          },
          "remainder": {
            "title": "Remainder",
            "description": "Total remaining value the customer can purchase.",
            "example": "5000",
            "pattern": "^[0-9]+(\\.[0-9]{1,2})?$"
          }
        }
      },
      "LimitBucket": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "period"
        ],
        "properties": {
          "period": {
            "type": "string",
            "description": "Time window the limits apply to.",
            "enum": [
              "TRANSACTION",
              "DAILY",
              "WEEKLY",
              "MONTHLY",
              "ANNUAL"
            ],
            "example": "DAILY"
          },
          "sources": {
            "type": "object",
            "additionalProperties": false,
            "description": "Breakdown of limit sources",
            "properties": {
              "provider": {
                "$ref": "#/components/schemas/LimitAmounts"
              },
              "customer": {
                "$ref": "#/components/schemas/LimitAmounts"
              }
            }
          }
        }
      },
      "CryptoCurrenciesResponse": {
        "type": "object",
        "title": "Cryptocurrencies Response",
        "description": "A list of supported cryptocurrencies and their available blockchains.",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "description": "Array of supported cryptocurrencies.",
            "items": {
              "$ref": "#/components/schemas/CryptoCurrency"
            }
          }
        }
      },
      "CryptoCurrency": {
        "type": "object",
        "title": "Cryptocurrency",
        "description": "A supported cryptocurrency and its available blockchains.",
        "required": [
          "crypto",
          "name",
          "blockchains"
        ],
        "properties": {
          "crypto": {
            "type": "string",
            "description": "The cryptocurrency coin code.",
            "example": "BTC"
          },
          "name": {
            "type": "string",
            "description": "The display name of the cryptocurrency.",
            "example": "Bitcoin"
          },
          "blockchains": {
            "type": "array",
            "description": "The list of blockchains on which this cryptocurrency is supported.",
            "items": {
              "$ref": "#/components/schemas/CryptoCurrencyBlockchain"
            }
          }
        }
      },
      "CryptoCurrencyBlockchain": {
        "type": "object",
        "title": "Cryptocurrency Blockchain",
        "description": "A blockchain network on which a cryptocurrency is available.",
        "required": [
          "blockchain",
          "name",
          "isDefault",
          "address",
          "network",
          "minimum",
          "unsupportedCountries"
        ],
        "properties": {
          "blockchain": {
            "type": "string",
            "description": "The blockchain network code.",
            "example": "TRON"
          },
          "name": {
            "type": "string",
            "description": "The display name of the blockchain network.",
            "example": "TRON"
          },
          "isDefault": {
            "type": "boolean",
            "description": "Indicates whether this is the default blockchain for the cryptocurrency.",
            "example": true
          },
          "address": {
            "type": [
              "string",
              "null"
            ],
            "description": "The contract address of the token on this blockchain, if applicable. `null` for native coins.",
            "example": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
          },
          "network": {
            "type": [
              "string",
              "null"
            ],
            "description": "A network or asset identifier used to disambiguate the asset on this blockchain, if applicable. `null` if not set.",
            "example": null
          },
          "minimum": {
            "type": "string",
            "description": "The minimum transaction amount for this asset on this blockchain, as a decimal string.",
            "example": "0.00001"
          },
          "unsupportedCountries": {
            "type": "array",
            "description": "ISO 3166-1 alpha-2 country codes where this asset is unavailable.",
            "items": {
              "type": "string",
              "example": "US"
            },
            "example": []
          }
        }
      },
      "FiatsListResponse": {
        "type": "array",
        "title": "Fiats List Response",
        "description": "List of supported fiat currencies with their available payment methods for a specific transaction type.",
        "items": {
          "$ref": "#/components/schemas/FiatWithPaymentMethods"
        }
      },
      "FiatWithPaymentMethods": {
        "type": "object",
        "title": "Fiat Currency with Payment Methods",
        "description": "A fiat currency supported by Banxa with its available payment methods.",
        "required": [
          "fiat",
          "name",
          "symbol",
          "supportedPaymentMethods"
        ],
        "properties": {
          "fiat": {
            "type": "string",
            "title": "Fiat Currency Code",
            "description": "Three-letter ISO 4217 currency code identifying the fiat currency.",
            "example": "AUD",
            "pattern": "^[A-Z]{3}$",
            "minLength": 3,
            "maxLength": 3
          },
          "name": {
            "type": "string",
            "title": "Currency Name",
            "description": "Human-readable name of the fiat currency.",
            "example": "Australian Dollar"
          },
          "symbol": {
            "type": "string",
            "title": "Currency Symbol",
            "description": "Symbol used to represent the currency (e.g., $, €, £).",
            "example": "$"
          },
          "supportedPaymentMethods": {
            "type": "array",
            "title": "Supported Payment Methods",
            "description": "List of payment methods available for this fiat currency. Each method includes transaction limits.",
            "items": {
              "$ref": "#/components/schemas/PaymentMethodWithLimits"
            }
          }
        }
      },
      "PaymentMethodWithLimits": {
        "type": "object",
        "title": "Payment Method with Transaction Limits",
        "description": "Payment method available for a fiat currency with minimum and maximum transaction limits.",
        "required": [
          "method",
          "name",
          "minimum",
          "maximum"
        ],
        "properties": {
          "method": {
            "type": "string",
            "title": "Payment Method Code",
            "description": "Unique identifier for the payment method.",
            "example": "payid-bank-transfer"
          },
          "name": {
            "type": "string",
            "title": "Payment Method Name",
            "description": "Human-readable name of the payment method.",
            "example": "Payid Bank Transfer"
          },
          "minimum": {
            "type": "string",
            "title": "Minimum Transaction Amount",
            "description": "Minimum allowed transaction amount for this payment method in the fiat currency's minor units (e.g., cents for AUD).",
            "example": "10"
          },
          "maximum": {
            "type": "string",
            "title": "Maximum Transaction Amount",
            "description": "Maximum allowed transaction amount for this payment method in the fiat currency's minor units.",
            "example": "50000"
          }
        }
      },
      "CountriesListResponse": {
        "type": "array",
        "title": "Countries List Response",
        "description": "List of supported countries available for KYC and transaction flows.",
        "items": {
          "$ref": "#/components/schemas/Country"
        }
      },
      "Country": {
        "type": "object",
        "title": "Country",
        "description": "A supported country and its available states or provinces.",
        "required": [
          "id",
          "description",
          "states"
        ],
        "properties": {
          "id": {
            "type": "string",
            "title": "Country Code",
            "description": "Two-letter ISO 3166-1 alpha-2 country code.",
            "example": "US",
            "pattern": "^[A-Z]{2}$",
            "minLength": 2,
            "maxLength": 2
          },
          "description": {
            "type": "string",
            "title": "Country Name",
            "description": "Human-readable name of the country.",
            "example": "United States"
          },
          "states": {
            "type": "array",
            "title": "States or Provinces",
            "description": "List of supported states or provinces for the country. Empty when the country does not require region selection.",
            "items": {
              "$ref": "#/components/schemas/CountryState"
            }
          }
        }
      },
      "CountryState": {
        "type": "object",
        "title": "Country State",
        "description": "A state or province supported for a country.",
        "required": [
          "id",
          "description"
        ],
        "properties": {
          "id": {
            "type": "string",
            "title": "State or Province Code",
            "description": "Short code identifying the state or province.",
            "example": "CA"
          },
          "description": {
            "type": "string",
            "title": "State or Province Name",
            "description": "Human-readable name of the state or province.",
            "example": "California"
          }
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Bad request due to invalid input.\n\n**Common Causes**:\n- Malformed JSON in request body\n- Invalid data types\n- Missing required fields\n- Invalid request structure",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Human-readable error message",
                  "example": "Bad Request"
                },
                "code": {
                  "type": "integer",
                  "description": "HTTP status code",
                  "example": 400
                },
                "traceId": {
                  "type": "string",
                  "description": "Unique identifier for this error instance. Use this when contacting support.",
                  "example": "2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f"
                }
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Authentication failed or missing credentials.\n\n**Common Causes**:\n- Missing Authorization header\n- Invalid API key\n- Expired or invalid HMAC signature\n- Incorrect timestamp (must be within 5 minutes of server time)",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Human-readable error message",
                  "example": "Unauthenticated."
                },
                "code": {
                  "type": "integer",
                  "description": "HTTP status code",
                  "example": 401
                },
                "traceId": {
                  "type": "string",
                  "description": "Unique identifier for this error instance",
                  "example": "2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f"
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "The requested resource was not found.\n\n**Common Causes**:\n- Invalid ramp ID\n- Invalid identity reference\n- Resource has been deleted\n- Incorrect endpoint URL",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Human-readable error message",
                  "example": "Not Found"
                },
                "code": {
                  "type": "integer",
                  "description": "Error code (may be HTTP status or custom code)",
                  "example": 500100
                },
                "traceId": {
                  "type": "string",
                  "description": "Unique identifier for this error instance",
                  "example": "2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f"
                }
              }
            }
          }
        }
      },
      "UnprocessableEntity": {
        "description": "Validation error - request is well-formed but contains invalid data.\n\n**Common Causes**:\n- Field validation failures\n- Business rule violations\n- Invalid field combinations\n- Out of range values",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Summary of validation errors",
                  "example": "The given data was invalid."
                },
                "errors": {
                  "type": "object",
                  "description": "Map of field names to error messages.\n\n**Format**: Each key is a field name, value is an array of error messages for that field.",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "example": {
                    "email": [
                      "The email field is required."
                    ],
                    "fiatAmount": [
                      "The fiat amount must be at least 10."
                    ]
                  }
                },
                "code": {
                  "type": "integer",
                  "description": "HTTP status code",
                  "example": 422
                },
                "traceId": {
                  "type": "string",
                  "description": "Unique identifier for this error instance",
                  "example": "2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f"
                }
              }
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Rate limit exceeded.\n\n**Rate Limits**:\n- General API: 100 requests per minute\n- Price endpoint: 60 requests per minute\n\n**Action**: Wait for the duration specified in `Retry-After` header before retrying.",
        "headers": {
          "Retry-After": {
            "description": "Number of seconds to wait before retrying.\n\n**Important**: Always respect this header to avoid further rate limiting.",
            "schema": {
              "type": "integer",
              "example": 60
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Human-readable error message",
                  "example": "Too Many Requests. Please try again later."
                },
                "code": {
                  "type": "integer",
                  "description": "HTTP status code",
                  "example": 429
                },
                "traceId": {
                  "type": "string",
                  "description": "Unique identifier for this error instance",
                  "example": "2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f"
                }
              }
            }
          }
        }
      },
      "InternalServerError": {
        "description": "Unexpected server error.\n\n**Action**: \n- Retry with exponential backoff (up to 3 attempts)\n- If error persists, contact support with the traceId\n\n**Note**: This is a temporary issue on our side, not a problem with your request.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Human-readable error message",
                  "example": "Server Error"
                },
                "code": {
                  "type": "integer",
                  "description": "HTTP status code",
                  "example": 500
                },
                "traceId": {
                  "type": "string",
                  "description": "Unique identifier for this error instance. **Important**: Include this when contacting support.",
                  "example": "2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f"
                }
              }
            }
          }
        }
      },
      "InvalidTransactionType": {
        "description": "Validation error - the transactionType path parameter is invalid.\n\n**Common Causes**:\n- Supplied value is not `onramp` or `offramp`\n- Parameter is missing or empty",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "integer",
                  "description": "HTTP status code",
                  "example": 422
                },
                "message": {
                  "type": "string",
                  "description": "Validation error message",
                  "example": "Invalid transaction type. Must be one of onramp and offramp"
                },
                "errors": {
                  "type": "object",
                  "description": "Map of field names to error messages.",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "example": {
                    "transactionType": [
                      "Invalid transaction type. Must be one of onramp and offramp"
                    ]
                  }
                }
              }
            }
          }
        }
      },
      "OtpFeatureNotEnabled": {
        "description": "Email verification feature is not enabled for this merchant. Contact support to enable this feature.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "example": "Email validation is not enabled, please contact us to enable this feature."
                },
                "code": {
                  "type": "integer",
                  "example": 403
                }
              }
            }
          }
        }
      },
      "OtpRateLimitExceeded": {
        "description": "Rate limit exceeded for OTP requests or verification attempts. Rate limits reset after 60 seconds.",
        "headers": {
          "Retry-After": {
            "description": "Number of seconds to wait before retrying",
            "schema": {
              "type": "integer",
              "example": 60
            }
          },
          "X-RateLimit-Reset": {
            "description": "Unix timestamp when the rate limit resets",
            "schema": {
              "type": "integer",
              "example": 1710648000
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "example": "Too many OTP requests. Please try again later."
                },
                "code": {
                  "type": "integer",
                  "example": 429
                },
                "traceId": {
                  "type": "string",
                  "example": "abc123def456"
                }
              }
            },
            "examples": {
              "request_rate_limit": {
                "summary": "OTP request rate limit exceeded",
                "description": "Maximum 3 OTP requests per minute per customer",
                "value": {
                  "message": "Too many OTP requests. Please try again later.",
                  "code": 429,
                  "traceId": "req_abc123"
                }
              },
              "verify_rate_limit": {
                "summary": "OTP verification rate limit exceeded",
                "description": "Maximum 4 verification attempts per minute per customer",
                "value": {
                  "message": "Too many OTP verification attempts. Please try again later.",
                  "code": 429,
                  "traceId": "ver_def456"
                }
              }
            }
          }
        }
      }
    }
  }
}