{
  "openapi": "3.0.3",
  "x-organization": "onboard",
  "x-service-id": "external-gateway",
  "info": {
    "version": "3.0.2",
    "title": "Onboard External API Gateway",
    "description": "**Introduction**\nAPI Gateway for Onboard\n\nThis specification describes API endpoints that are available to the public internet via the API gateway. The different endpoints require different authentication schemes, see documentation for what applies to the operation you want to access.\n\n**Errors**\nUses conventional HTTP response codes to indicate success or failure. In\ngeneral:\n \n- `2xx` status codes indicate success. Codes in the\n- `4xx` range\nindicate a client error (e.g. required parameters, failed request etc.).\n- `5xx` status codes indicate a server error occurred.",
    "contact": {
      "name": "Nestcoin TechOps",
      "email": "techops@nestcoin.com"
    },
    "license": {
      "name": "UNLICENSED"
    }
  },
  "servers": [
    {
      "url": "https://external.dev.onboardpay.co",
      "description": "Gateway for external API on staging environment."
    }
  ],
  "paths": {
    "/auth/oauth/access-token": {
      "post": {
        "tags": [
          "auth-oauth"
        ],
        "description": "Request for access token by presenting previously acquired request token. Requires x-signature and x-timestamp header\n",
        "summary": "Request for access token",
        "x-visibility": "external",
        "operationId": "requestAccessToken",
        "security": [
          {
            "authSignature": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccessTokenRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessTokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        }
      },
      "x-original-path": "/oauth/access-token"
    },
    "/auth/oauth/refresh-token": {
      "post": {
        "tags": [
          "auth-oauth"
        ],
        "description": "Refresh access token by presenting previously acquired refresh token. Requires the refresh token initially acquired to be passed as x-auth-token in header\n",
        "summary": "Request for access token",
        "x-visibility": "external",
        "operationId": "refreshAccessToken",
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessTokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        }
      },
      "x-original-path": "/oauth/refresh-token"
    },
    "/auth/user-auth/initiate": {
      "post": {
        "tags": [
          "auth-userauth"
        ],
        "summary": "Initiate authentication for a user",
        "description": "Initiate authentication for a user. If the email address is for a new user, a new onboard profile will be created\n",
        "operationId": "initiateUserLogin",
        "x-visibility": "external",
        "security": [
          {
            "authSignature": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserAuthInitRequest"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserAuthInitResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        }
      },
      "x-original-path": "/user-auth/initiate"
    },
    "/auth/user-auth/verify-otp": {
      "post": {
        "tags": [
          "auth-userauth"
        ],
        "summary": "Verify OTP",
        "operationId": "verifyAuthOtp",
        "x-visibility": "external",
        "security": [
          {
            "authSignature": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserAuthOtpVerificationRequest"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessTokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        }
      },
      "x-original-path": "/user-auth/verify-otp"
    },
    "/auth/user-auth/resend-otp": {
      "post": {
        "tags": [
          "auth-userauth"
        ],
        "summary": "Resend a new otp to a user",
        "operationId": "resendAuthOtp",
        "x-visibility": "external",
        "security": [
          {
            "authSignature": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserAuthOtpResendRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserAuthOtpResendResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        }
      },
      "x-original-path": "/user-auth/resend-otp"
    },
    "/exchange/api/info": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Get CEX Profile",
        "operationId": "queryMyBusinessInfo",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CexProfileDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/api/info"
    },
    "/exchange/orders/trade": {
      "get": {
        "tags": [
          "exchange-orders",
          "exchange-external-api"
        ],
        "summary": "Start a trade",
        "operationId": "createOrder",
        "parameters": [
          {
            "name": "apiKey",
            "in": "query",
            "description": "CEX api key",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "product",
            "in": "query",
            "description": "Integration product in use e.g web3 or custodial",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CreateOrderProductEnum"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "Order ID generated for offramp trades",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tradeType",
            "in": "query",
            "description": "Type of trade",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CreateOrderTradeTypeEnum"
            }
          },
          {
            "name": "fiat",
            "in": "query",
            "description": "Symbol of fiat currency",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fiatAmount",
            "in": "query",
            "description": "Fiat amount",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "token",
            "in": "query",
            "description": "Symbol of token asset",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tokenAmount",
            "in": "query",
            "description": "Token amount",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "networkId",
            "in": "query",
            "description": "Onboard blockchain network identifier or chain Id e.g Base will be `base` or `8453` or `0x2105`",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "address",
            "in": "query",
            "description": "Wallet address to be debited/credited in order",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentChannel",
            "in": "query",
            "description": "Payment channel",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "Customer's email address",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "autoselect",
            "in": "query",
            "description": "Offer auto select flag",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect",
            "content": {}
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [],
        "x-visibility": "external"
      },
      "x-original-path": "/orders/trade"
    },
    "/exchange/api/orders/trade-options": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Trade options / configurations for onboard",
        "operationId": "getTradeOptions",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TradeOptions"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "x-visibility": "external",
        "security": []
      },
      "x-original-path": "/api/orders/trade-options"
    },
    "/exchange/api/orders/price": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Get best price for order",
        "operationId": "getPrice",
        "parameters": [
          {
            "$ref": "#/components/parameters/ExchangeSvctradeTypeQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcfiatQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcfiatAmountQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvctokenQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvctokenAmountQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcnetworkQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcpaymentChannelQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "x-visibility": "external",
        "security": []
      },
      "x-original-path": "/api/orders/price"
    },
    "/exchange/api/orders/trade-url": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Fetch trade url",
        "operationId": "initTrade",
        "parameters": [
          {
            "name": "apiKey",
            "in": "query",
            "description": "CEX api key",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "product",
            "in": "query",
            "description": "Integration product in use e.g web3 or custodial",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/InitTradeProductEnum"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "Order ID generated for offramp trades",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tradeType",
            "in": "query",
            "description": "Type of trade",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/InitTradeTradeTypeEnum"
            }
          },
          {
            "name": "fiat",
            "in": "query",
            "description": "Symbol of fiat currency",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fiatAmount",
            "in": "query",
            "description": "Fiat amount",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "token",
            "in": "query",
            "description": "Symbol of token asset",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tokenAmount",
            "in": "query",
            "description": "Token amount",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "networkId",
            "in": "query",
            "description": "Onboard blockchain network identifier or chain Id e.g Base will be `base` or `8453` or `0x2105`",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "address",
            "in": "query",
            "description": "Wallet address to be debited/credited in order",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentChannel",
            "in": "query",
            "description": "Payment channel",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "Customer's email address",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "autoselect",
            "in": "query",
            "description": "Offer auto select flag",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateOrderDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "x-visibility": "external",
        "security": []
      },
      "x-original-path": "/api/orders/trade-url"
    },
    "/exchange/api/cexs/signers": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Query CEX signer addresses",
        "operationId": "querySignersExternal",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "signers"
                  ],
                  "type": "object",
                  "properties": {
                    "signers": {
                      "uniqueItems": true,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CexSignerDto"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/api/cexs/signers"
    },
    "/exchange/api/cexs/signers/{networkId}": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Query CEX network signer",
        "operationId": "queryNetworkSignerExternal",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "description": "Supported network ID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CexSignerDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/api/cexs/signers/{networkId}"
    },
    "/exchange/api/cexs/liquidity-pools": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Get CEX deployed liquidity pool contract data",
        "operationId": "queryLiquidityPoolsExternal",
        "parameters": [
          {
            "name": "networkId",
            "in": "query",
            "description": "Onboard blockchain network identifier or chain Id e.g Base will be `base` or `8453` or `0x2105`",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "liquidityPools": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/LiquidityPoolDto"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "post": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Create liquidity pool contract for CEX",
        "operationId": "deployLiquidityPoolExternal",
        "requestBody": {
          "description": "Request data",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeployLiquidityPoolCommand"
              }
            }
          },
          "required": false
        },
        "responses": {
          "201": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LiquidityPoolDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external",
        "x-codegen-request-body-name": "body"
      },
      "x-original-path": "/api/cexs/liquidity-pools"
    },
    "/exchange/api/cexs/liquidity-pools/{poolAddress}/balances": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Get CEX token and coin balances",
        "operationId": "fetchLiquidityPoolBalanceExternal",
        "parameters": [
          {
            "name": "networkId",
            "in": "query",
            "description": "Onboard blockchain network identifier or chain Id e.g Base will be `base` or `8453` or `0x2105`",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "poolAddress",
            "in": "path",
            "description": "Account address for liquidity pool",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "balances": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/LiquidityPoolBalanceDto"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/api/cexs/liquidity-pools/{poolAddress}/balances"
    },
    "/exchange/api/orders": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Retrieve list of exchange orders",
        "operationId": "getExchangeOrdersExternal",
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "description": "15-04-2022",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "description": "15-08-2022",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "size",
            "in": "query",
            "schema": {
              "maximum": 100,
              "type": "integer",
              "default": 20
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "transactionType",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/GetExchangeOrdersExternalTransactionTypeEnum"
            }
          },
          {
            "name": "statuses",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/GetExchangeOrdersExternalStatusesEnum"
              }
            }
          },
          {
            "name": "token",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fiat",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "network",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExchangeOrdersResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/api/orders"
    },
    "/exchange/api/business/orders/{cexOrderId}": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Retrieve an exchange order by cexOrderId",
        "operationId": "getExchangeOrderByIdExternal",
        "parameters": [
          {
            "name": "cexOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExchangeOrderDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/api/business/orders/{cexOrderId}"
    },
    "/exchange/api/offers": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Find offers using trading parameters",
        "operationId": "extFindOffers",
        "x-visibility": "external",
        "parameters": [
          {
            "$ref": "#/components/parameters/ExchangeSvcofferTypeQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvctokenQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcfiatQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvctokenAmountQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcfiatAmountQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcnetworkQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcpaymentChannelQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcpaymentChannelTypeQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcmerchantIdQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcpageQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvclimitQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "offers": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/OfferDto"
                      }
                    },
                    "orderRequestTradeId": {
                      "type": "string"
                    },
                    "currentPage": {
                      "type": "number"
                    },
                    "totalPages": {
                      "type": "number"
                    },
                    "totalCount": {
                      "type": "number"
                    },
                    "totalPairOffers": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "currentPage",
                    "totalPages",
                    "totalCount",
                    "offers",
                    "orderRequestTradeId"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": []
      },
      "x-original-path": "/api/offers"
    },
    "/exchange/api/offers/best-offer": {
      "get": {
        "tags": [
          "exchange-external-api"
        ],
        "summary": "Get best offer using trade parameters",
        "operationId": "getBestOfferExchange",
        "x-visibility": "external",
        "parameters": [
          {
            "$ref": "#/components/parameters/ExchangeSvcofferTypeQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvctokenQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcfiatQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvctokenAmountQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcfiatAmountQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcnetworkQueryParam"
          },
          {
            "$ref": "#/components/parameters/ExchangeSvcpaymentChannelQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "offer": {
                      "$ref": "#/components/schemas/BestOfferDTO"
                    },
                    "orderRequestTradeId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "offer",
                    "orderRequestTradeId"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": []
      },
      "x-original-path": "/api/offers/best-offer"
    },
    "/ledger/accounts": {
      "get": {
        "summary": "Fetch All Customer Account",
        "description": "This operation allows the client to fetch all customer's accounts",
        "operationId": "fetchCustomerAccounts",
        "x-visibility": "external",
        "tags": [
          "ledger-accounts"
        ],
        "responses": {
          "200": {
            "description": "Account fetched",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerAccountList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/accounts"
    },
    "/ledger/fiat-beneficiaries": {
      "post": {
        "summary": "Customer beneficiary",
        "description": "This Operation allows user to save beneficiary\n",
        "operationId": "saveBeneficiary",
        "x-visibility": "external",
        "tags": [
          "ledger-beneficiaries"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBeneficiaryRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Beneficiary details saved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Beneficiary"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "get": {
        "summary": "Fetch all bank account beneficiaries and bank transfer type",
        "description": "This operation allows the client to fetch all beneficiary by accounts and their transaction type\n",
        "operationId": "fetchBeneficiaries",
        "x-visibility": "external",
        "tags": [
          "ledger-beneficiaries"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvccurrencyCode"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcaccountHolderType"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          }
        ],
        "responses": {
          "200": {
            "description": "Beneficiary fetched",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BeneficiaryList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/fiat-beneficiaries"
    },
    "/ledger/fiat-beneficiaries/{beneficiaryId}": {
      "get": {
        "summary": "Fetch Beneficiary by Id",
        "description": "This operation allows the client to fetch a beneficiary by its Id\n",
        "operationId": "getBeneficiaryById",
        "x-visibility": "external",
        "tags": [
          "ledger-beneficiaries"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcbeneficiaryId"
          }
        ],
        "responses": {
          "200": {
            "description": "Beneficiary fetched",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Beneficiary"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Delete Beneficiary by Id",
        "description": "This operation allows the client to delete a beneficiary by its Id\n",
        "operationId": "deleteBeneficiary",
        "x-visibility": "external",
        "tags": [
          "ledger-beneficiaries"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcbeneficiaryId"
          }
        ],
        "responses": {
          "200": {
            "description": "Beneficiary deleted successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusDto"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/fiat-beneficiaries/{beneficiaryId}"
    },
    "/ledger/accounts/{accountId}": {
      "get": {
        "summary": "Fetch account details",
        "description": "This operation allows the client to fetch account details by account id. A client can fetch only their own account details.\n",
        "operationId": "getAccountDetails",
        "x-visibility": "external",
        "tags": [
          "ledger-accounts"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcaccountId"
          }
        ],
        "responses": {
          "200": {
            "description": "Account details fetched",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/accounts/{accountId}"
    },
    "/ledger/accounts/{accountId}/activities": {
      "get": {
        "summary": "Get account transaction activities",
        "description": "This operation allows the client to fetch a paginated, aggregated feed of all\ntransaction activity for an account (cash deposits/payments, account-number\ndeposits, crypto deposits/withdrawals, internal transfers, offramp deposits),\neach with type-specific details in activityData.\n",
        "operationId": "getAccountActivities",
        "x-visibility": "external",
        "tags": [
          "ledger-account activity"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcaccountId"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Filter by activity type",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/TransactionActivityType"
              }
            }
          },
          {
            "name": "direction",
            "in": "query",
            "description": "Filter by activity direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ActivityDirection"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Filter activities occurring on or after this date-time",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Filter activities occurring on or before this date-time",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          }
        ],
        "responses": {
          "200": {
            "description": "Activities fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionActivityList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/accounts/{accountId}/activities"
    },
    "/ledger/accounts/{accountId}/activities/{activityId}": {
      "get": {
        "summary": "Get a single transaction activity",
        "description": "This operation allows the client to fetch a specific transaction activity by its ID.\n",
        "operationId": "getAccountActivityById",
        "x-visibility": "external",
        "tags": [
          "ledger-account activity"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcaccountId"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcactivityId"
          }
        ],
        "responses": {
          "200": {
            "description": "Activity fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionActivity"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/accounts/{accountId}/activities/{activityId}"
    },
    "/ledger/subaccounts/{subAccountIdRef}/activities": {
      "get": {
        "summary": "Get sub-account transaction activities",
        "description": "This operation allows the client to fetch a paginated, aggregated feed of all\ntransaction activities for a sub-account (cash deposits/payments, account-number\ndeposits, crypto deposits/withdrawals, internal transfers, offramp deposits),\neach with type-specific details in activityData.\n",
        "operationId": "getSubAccountActivities",
        "x-visibility": "external",
        "tags": [
          "ledger-account activity"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcsubAccountIdOrRef"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Filter by activity type",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/TransactionActivityType"
              }
            }
          },
          {
            "name": "direction",
            "in": "query",
            "description": "Filter by activity direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ActivityDirection"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Filter activities occurring on or after this date-time",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Filter activities occurring on or before this date-time",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          }
        ],
        "responses": {
          "200": {
            "description": "Activities fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionActivityList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/subaccounts/{subAccountIdRef}/activities"
    },
    "/ledger/subaccounts/{subAccountIdRef}/activities/{activityId}": {
      "get": {
        "summary": "Get a single sub-account transaction activity",
        "description": "This operation allows the client to fetch a specific transaction activity by its ID.\n",
        "operationId": "getSubAccountActivityById",
        "x-visibility": "external",
        "tags": [
          "ledger-account activity"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcsubAccountIdOrRef"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcactivityId"
          }
        ],
        "responses": {
          "200": {
            "description": "Activity fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionActivity"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/subaccounts/{subAccountIdRef}/activities/{activityId}"
    },
    "/ledger/transaction-activities": {
      "get": {
        "summary": "Get transaction activities across the business",
        "description": "This operation allows the client to fetch a paginated, aggregated feed of all\ntransaction activity for the authenticated business, optionally scoped to a\nsingle account, with the same type-specific activityData as the account-scoped\nactivities endpoint.\n",
        "operationId": "getTransactionActivities",
        "x-visibility": "external",
        "tags": [
          "ledger-account activity"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcanyAccountIdQuery"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Filter by activity type",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/TransactionActivityType"
              }
            }
          },
          {
            "name": "direction",
            "in": "query",
            "description": "Filter by activity direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ActivityDirection"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Filter activities occurring on or after this date-time",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Filter activities occurring on or before this date-time",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          }
        ],
        "responses": {
          "200": {
            "description": "Activities fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionActivityList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/transaction-activities"
    },
    "/ledger/internal-transfers": {
      "post": {
        "summary": "Create internal transfer",
        "description": "This operation allows the client to create an internal transfer between subaccounts and main account.\n",
        "operationId": "createInternalTransfer",
        "x-visibility": "external",
        "tags": [
          "ledger-transfer"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InternalTransferRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Internal transfer created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalTransfer"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/internal-transfers"
    },
    "/ledger/internal-transfers/{referenceId}": {
      "get": {
        "summary": "Get internal transfer by reference",
        "description": "This operation allows the client to fetch an internal transfer by its reference ID.\n",
        "operationId": "getInternalTransferByReference",
        "x-visibility": "external",
        "tags": [
          "ledger-transfer"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcreferenceId"
          }
        ],
        "responses": {
          "200": {
            "description": "Internal transfer fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalTransfer"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/internal-transfers/{referenceId}"
    },
    "/ledger/currency/assets": {
      "get": {
        "summary": "Get list of supported assets for main accounts.",
        "description": "This operation allows the client to get the Nestcoin supported\nAssets\n",
        "operationId": "getSupportedAssets",
        "x-visibility": "external",
        "tags": [
          "ledger-accounts"
        ],
        "responses": {
          "200": {
            "description": "Assets Fetched Successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupportedAssetsList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/currency/assets"
    },
    "/ledger/assets/{assetCode}/network-tokens": {
      "get": {
        "summary": "Get stablecoin tokens supported for account.",
        "operationId": "getAssetNetworkTokens",
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcassetCode"
          }
        ],
        "description": "Get list of stablecoin tokens supported for account by asset code.\nThe asset code is the currency code of the main account e.g USD\n",
        "x-visibility": "external",
        "tags": [
          "ledger-accounts"
        ],
        "responses": {
          "200": {
            "description": "List of supported stablecoin tokens for the asset code",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetBlockchainTokens"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/assets/{assetCode}/network-tokens"
    },
    "/ledger/crypto-transfer": {
      "post": {
        "summary": "Performs crypto transfer",
        "description": "This operation allow the client to perform crypto transfer to an external wallet.\n\nN.B. The amount field is the withdrawal amount only (fees are not included). The applicable\nfee, including any platform fee, is computed server-side and is not a client-supplied input.\n",
        "operationId": "cryptoTransfer",
        "x-visibility": "external",
        "tags": [
          "ledger-transfer"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CryptoTransferRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Request received, do 2FA",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/crypto-transfer"
    },
    "/ledger/crypto-transfer/{transferReference}": {
      "get": {
        "summary": "Get crypto transfer by reference",
        "description": "This operation allows the client to fetch a specific crypto transfer by its reference ID.\n",
        "operationId": "getCryptoTransferByReference",
        "x-visibility": "external",
        "tags": [
          "ledger-transfer"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvctransferReference"
          }
        ],
        "responses": {
          "200": {
            "description": "Crypto Transfer fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountTransaction"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/crypto-transfer/{transferReference}"
    },
    "/ledger/crypto-beneficiaries": {
      "post": {
        "summary": "Crypto Customer beneficiary",
        "description": "This Operation allows crypto users to save beneficiary",
        "operationId": "saveCryptoBeneficiary",
        "x-visibility": "external",
        "tags": [
          "ledger-beneficiaries"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCryptoBeneficiaryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Beneficiary details saved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusDto"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "get": {
        "summary": "Fetch crypto beneficiaries",
        "description": "This operation allows the client to fetch all beneficiary by accounts\n",
        "operationId": "fetchCryptoBeneficiary",
        "x-visibility": "external",
        "tags": [
          "ledger-beneficiaries"
        ],
        "parameters": [
          {
            "name": "network",
            "description": "The crypto network code",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          }
        ],
        "responses": {
          "200": {
            "description": "Beneficiary fetched",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoBeneficiaryList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/crypto-beneficiaries"
    },
    "/ledger/crypto-beneficiaries/{beneficiaryId}": {
      "get": {
        "summary": "Fetch crypto Beneficiary by Id",
        "description": "This operation allows the client to fetch a crypto beneficiary by its Id\n",
        "operationId": "getCryptoBeneficiaryById",
        "x-visibility": "external",
        "tags": [
          "ledger-beneficiaries"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcbeneficiaryId"
          }
        ],
        "responses": {
          "200": {
            "description": "Beneficiary fetched",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoBeneficiary"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Delete crypto Beneficiary by Id",
        "description": "This operation allows the client to delete a crypto beneficiary by its Id\n",
        "operationId": "deleteCryptoBeneficiary",
        "x-visibility": "external",
        "tags": [
          "ledger-beneficiaries"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcbeneficiaryId"
          }
        ],
        "responses": {
          "200": {
            "description": "Beneficiary deleted successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusDto"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/crypto-beneficiaries/{beneficiaryId}"
    },
    "/ledger/accounts/{accountId}/account-details": {
      "parameters": [
        {
          "$ref": "#/components/parameters/LedgerSvcaccountId"
        },
        {
          "$ref": "#/components/parameters/LedgerSvcaccountNumberCurrencyQuery"
        }
      ],
      "get": {
        "summary": "Get the bank account number for an account.",
        "description": "Returns the bank account number (and bank details) generated for this account in the given\ncurrency, if one exists.\n",
        "operationId": "getAccountNumber",
        "x-visibility": "external",
        "tags": [
          "ledger-accounts"
        ],
        "responses": {
          "200": {
            "description": "Bank account number details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDepositPaymentDetails"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "post": {
        "summary": "Create a bank account number for an account.",
        "description": "Generates a bank account number for this account in the given currency through the account-number\nprovider. Returns the existing details if one was already generated.\n",
        "operationId": "createAccountNumber",
        "x-visibility": "external",
        "tags": [
          "ledger-accounts"
        ],
        "responses": {
          "201": {
            "description": "Bank account number created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDepositPaymentDetails"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/accounts/{accountId}/account-details"
    },
    "/ledger/subaccounts": {
      "post": {
        "summary": "Create sub-account for a customer.",
        "operationId": "createSubAccount",
        "x-visibility": "external",
        "tags": [
          "ledger-sub-accounts"
        ],
        "requestBody": {
          "description": "Sub-account creation request",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSubAccountRequest"
              }
            }
          }
        },
        "description": "This endpoint helps to create sub-accounts for a customer. The endpoint requires the main account ID to create a sub-account under it.\n",
        "responses": {
          "201": {
            "description": "Sub-account created Successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubAccount"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "get": {
        "summary": "Fetch all sub-accounts belonging to the customer.",
        "description": "This endpoint returns all sub-accounts\n",
        "operationId": "fetchSubAccounts",
        "x-visibility": "external",
        "tags": [
          "ledger-sub-accounts"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcaccountIdQuery"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          }
        ],
        "responses": {
          "200": {
            "description": "Sub-accounts fetched Successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubAccountList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/subaccounts"
    },
    "/ledger/subaccounts/{subAccountIdRef}": {
      "get": {
        "summary": "Fetch sub-account details by sub-account ID.",
        "description": "This endpoint returns sub-account details by sub-account ID.\n",
        "operationId": "fetchSubAccountById",
        "x-visibility": "external",
        "tags": [
          "ledger-sub-accounts"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcsubAccountIdOrRef"
          }
        ],
        "responses": {
          "200": {
            "description": "Sub-account fetched Successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubAccount"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "put": {
        "summary": "Update sub-account details by sub-account ID.",
        "description": "This endpoint updates sub-account details by sub-account ID.\n",
        "operationId": "updateSubAccountById",
        "x-visibility": "external",
        "tags": [
          "ledger-sub-accounts"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcsubAccountIdOrRef"
          }
        ],
        "requestBody": {
          "description": "Sub-account update request",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSubAccountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Sub-account updated Successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubAccount"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Delete sub-account by sub-account ID.",
        "description": "This endpoint deletes sub-account by sub-account ID. The sub-account must have zero balance before it can be deleted.\nThe endpoint will return an error if the sub-account has a non-zero balance. The funds in the sub-account must be transferred to another account before deletion.\nOnce an account is deleted, it cannot be recovered, and a new sub-account must be created if needed.\nThe address associated with the sub-account will also be deleted upon successful deletion of the sub-account.\n",
        "operationId": "deleteSubAccountById",
        "x-visibility": "external",
        "tags": [
          "ledger-sub-accounts"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcsubAccountIdOrRef"
          }
        ],
        "responses": {
          "200": {
            "description": "Sub-account deleted Successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusDto"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/subaccounts/{subAccountIdRef}"
    },
    "/ledger/subaccounts/{subAccountIdRef}/funding-address": {
      "parameters": [
        {
          "$ref": "#/components/parameters/LedgerSvcsubAccountIdOrRef"
        },
        {
          "name": "tokenNetworkCode",
          "description": "a unique code we assign to a token on a network, e.g. USDT_ETH",
          "required": true,
          "in": "query",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Check funding address for a sub-account.",
        "description": "This operation allows the client to get the address for the sub-account if it exists\n",
        "operationId": "getSubAccountFundingAddress",
        "x-visibility": "external",
        "tags": [
          "ledger-sub-accounts"
        ],
        "responses": {
          "200": {
            "description": "Address Fetched Successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FundingAddressResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "post": {
        "summary": "Create Funding Address for a sub-account using token network.",
        "description": "This operation allows the client to create an address for the supported token and network for a sub-account.\n",
        "operationId": "createSubAccountFundingAddress",
        "x-visibility": "external",
        "parameters": [
          {
            "$ref": "#/components/parameters/LedgerSvcsubAccountIdOrRef"
          }
        ],
        "tags": [
          "ledger-sub-accounts"
        ],
        "responses": {
          "201": {
            "description": "Address created Successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FundingAddress"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "409": {
            "$ref": "#/components/responses/LedgerSvcEntityAlreadyExist"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/subaccounts/{subAccountIdRef}/funding-address"
    },
    "/ledger/subaccounts/{subAccountIdRef}/account-details": {
      "parameters": [
        {
          "$ref": "#/components/parameters/LedgerSvcsubAccountIdOrRef"
        },
        {
          "$ref": "#/components/parameters/LedgerSvcaccountNumberCurrencyQuery"
        }
      ],
      "get": {
        "summary": "Get the bank account number for a sub-account.",
        "description": "Returns the bank account number (and bank details) generated for this sub-account in the given\ncurrency, if one exists.\n",
        "operationId": "getSubAccountNumber",
        "x-visibility": "external",
        "tags": [
          "ledger-sub-accounts"
        ],
        "responses": {
          "200": {
            "description": "Bank account number details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDepositPaymentDetails"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "post": {
        "summary": "Create a bank account number for a sub-account.",
        "description": "Generates a bank account number for this sub-account in the given currency through the\naccount-number provider. The account name must be supplied by the client.\n",
        "operationId": "createSubAccountNumber",
        "x-visibility": "external",
        "tags": [
          "ledger-sub-accounts"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSubAccountNumberRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Bank account number created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDepositPaymentDetails"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LedgerSvcAccessDenied"
          },
          "409": {
            "$ref": "#/components/responses/LedgerSvcEntityAlreadyExist"
          },
          "default": {
            "$ref": "#/components/responses/LedgerSvcServerError"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/subaccounts/{subAccountIdRef}/account-details"
    },
    "/ledger/cash-payments/rates": {
      "get": {
        "summary": "Get reference rate",
        "description": "Get reference rate for cash payments",
        "operationId": "getCashPaymentRates",
        "x-visibility": "external",
        "tags": [
          "ledger-payments"
        ],
        "parameters": [
          {
            "name": "accountCurrency",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "payoutCurrency",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Rate retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferRate"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-payments/rates"
    },
    "/ledger/cash-payments/quotes": {
      "post": {
        "summary": "Create transfer quote",
        "description": "Create quote for cash payment",
        "operationId": "createTransferQuote",
        "x-visibility": "external",
        "tags": [
          "ledger-payments"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTransferQuoteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Quote created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashPaymentQuote"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-payments/quotes"
    },
    "/ledger/cash-payments": {
      "get": {
        "summary": "Retrieve list of cash payments",
        "description": "Retrieve a list of cash payments, can accept accountId, status",
        "operationId": "getCashPayments",
        "x-visibility": "external",
        "tags": [
          "ledger-payments"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "query",
            "description": "Filter by the account that was debited. Can be the main account ID or a sub-account ID.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          }
        ],
        "responses": {
          "200": {
            "description": "Cash payments list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashPaymentTransactionList"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "post": {
        "summary": "Create cash payment",
        "description": "Create cash payment, using the created quote",
        "operationId": "createCashPayment",
        "x-visibility": "external",
        "tags": [
          "ledger-payments"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCashPaymentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cash payment created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-payments"
    },
    "/ledger/cash-payments/{reference}": {
      "get": {
        "summary": "Get specific cash payment",
        "description": "Get specific cash payment by reference",
        "operationId": "getCashPaymentByReference",
        "x-visibility": "external",
        "tags": [
          "ledger-payments"
        ],
        "parameters": [
          {
            "name": "reference",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "cash payment details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashPaymentTransaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-payments/{reference}"
    },
    "/ledger/cash-payments/currencies": {
      "get": {
        "summary": "Get supported payout currencies",
        "description": "Get supported payout currencies for cash payment.",
        "operationId": "getCashPaymentPayoutCurrencies",
        "x-visibility": "external",
        "tags": [
          "ledger-payments"
        ],
        "responses": {
          "200": {
            "description": "List of supported payout currencies",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashPaymentCurrenciesList"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-payments/currencies"
    },
    "/ledger/cash-deposits/rates": {
      "get": {
        "summary": "Get reference rate",
        "description": "Get reference rate for cash deposits, from the pay-in currency to the account currency.",
        "operationId": "getCashDepositRates",
        "x-visibility": "external",
        "tags": [
          "ledger-cash deposits"
        ],
        "parameters": [
          {
            "name": "accountCurrency",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "payinCurrency",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Rate retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferRate"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-deposits/rates"
    },
    "/ledger/cash-deposits/quotes": {
      "post": {
        "summary": "Create deposit quote",
        "description": "Create quote for cash deposit",
        "operationId": "createDepositQuote",
        "x-visibility": "external",
        "tags": [
          "ledger-cash deposits"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDepositQuoteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Quote created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDepositQuote"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-deposits/quotes"
    },
    "/ledger/cash-deposits": {
      "get": {
        "summary": "Retrieve list of cash deposits",
        "description": "Retrieve a list of cash deposits, can accept accountId, status",
        "operationId": "getCashDeposits",
        "x-visibility": "external",
        "tags": [
          "ledger-cash deposits"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "query",
            "description": "Filter by the account that was credited. Can be the main account ID or a sub-account ID.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          }
        ],
        "responses": {
          "200": {
            "description": "Cash deposits list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDepositTransactionList"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "post": {
        "summary": "Create cash deposit",
        "description": "Create cash deposit, using the created quote. Returns the deposit transaction, including the payment details the customer must pay into.",
        "operationId": "createCashDeposit",
        "x-visibility": "external",
        "tags": [
          "ledger-cash deposits"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCashDepositRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cash deposit created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDepositTransaction"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-deposits"
    },
    "/ledger/cash-deposits/{reference}": {
      "get": {
        "summary": "Get specific cash deposit",
        "description": "Get specific cash deposit by reference",
        "operationId": "getCashDepositByReference",
        "x-visibility": "external",
        "tags": [
          "ledger-cash deposits"
        ],
        "parameters": [
          {
            "name": "reference",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "cash deposit details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDepositTransaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-deposits/{reference}"
    },
    "/ledger/cash-deposits/currencies": {
      "get": {
        "summary": "Get supported pay-in currencies",
        "description": "Get supported pay-in currencies for cash deposit. Only whitelisted pay-in currencies are returned.",
        "operationId": "getCashDepositPayinCurrencies",
        "x-visibility": "external",
        "tags": [
          "ledger-cash deposits"
        ],
        "responses": {
          "200": {
            "description": "List of supported pay-in currencies",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashPaymentCurrenciesList"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/cash-deposits/currencies"
    },
    "/ledger/offramp-accounts": {
      "get": {
        "summary": "Get a list of offramp accounts",
        "description": "Get a list of offramp accounts, with pagination and payout currency",
        "operationId": "getOfframpAccounts",
        "x-visibility": "external",
        "tags": [
          "ledger-offramp accounts"
        ],
        "parameters": [
          {
            "name": "payoutCurrency",
            "in": "query",
            "required": false,
            "description": "Filter by payout currency",
            "schema": {
              "type": "string",
              "example": "IDR"
            }
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          }
        ],
        "responses": {
          "200": {
            "description": "List of offramp accounts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfframpAccountList"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "post": {
        "summary": "Create offramp account",
        "description": "Create offramp account with beneficiary id.",
        "operationId": "createOfframpAccount",
        "x-visibility": "external",
        "tags": [
          "ledger-offramp accounts"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOfframpAccountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Offramp account created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfframpAccount"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/LedgerSvcInvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/offramp-accounts"
    },
    "/ledger/offramp-accounts/{offrampAccountId}": {
      "get": {
        "summary": "Get offramp account",
        "description": "Get offramp account by offrampAccountId",
        "operationId": "getOfframpAccount",
        "x-visibility": "external",
        "tags": [
          "ledger-offramp accounts"
        ],
        "parameters": [
          {
            "name": "offrampAccountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Offramp account details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfframpAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Delete offramp account",
        "description": "Delete offramp account and automatically disable address assigned.",
        "operationId": "deleteOfframpAccount",
        "x-visibility": "external",
        "tags": [
          "ledger-offramp accounts"
        ],
        "parameters": [
          {
            "name": "offrampAccountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Offramp account deleted"
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/offramp-accounts/{offrampAccountId}"
    },
    "/ledger/offramp-accounts/{id}/funding-address": {
      "get": {
        "summary": "Get address for offramp account",
        "description": "Get address for offramp account, response should include the list of TokenAssetNetwork supported for the address.",
        "operationId": "getOfframpAccountFundingAddress",
        "x-visibility": "external",
        "tags": [
          "ledger-offramp accounts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "network",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Offramp account funding address",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfframpAccountFundingAddress"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/offramp-accounts/{id}/funding-address"
    },
    "/ledger/offramp-accounts/{id}/transactions": {
      "get": {
        "summary": "Get transactions for offramp account",
        "description": "Get a paginated list of transactions proccessed by offramp accounts",
        "operationId": "getOfframpAccountTransactions",
        "x-visibility": "external",
        "tags": [
          "ledger-offramp accounts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/LedgerSvcpage"
          },
          {
            "$ref": "#/components/parameters/LedgerSvcsize"
          }
        ],
        "responses": {
          "200": {
            "description": "List of transactions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfframpAccountTransactionList"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/LedgerSvcUnauthorized"
          },
          "404": {
            "$ref": "#/components/responses/LedgerSvcNotFound"
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/offramp-accounts/{id}/transactions"
    },
    "/offers/rate": {
      "get": {
        "tags": [
          "offers-offers"
        ],
        "summary": "get Weighted Rates",
        "operationId": "getWeightedRates",
        "x-visibility": "external",
        "parameters": [
          {
            "name": "fiatSymbol",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tokenSymbol",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offerType",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/OffersSvcOfferType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "weightedRate": {
                      "type": "number",
                      "description": "weighted rate for the fiat symbol pair",
                      "example": 54000
                    },
                    "bestRate": {
                      "type": "number",
                      "description": "best market rate for the fiat symbol pair",
                      "example": 54000
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": []
      },
      "x-original-path": "/offers/rate"
    },
    "/offers/limits": {
      "get": {
        "tags": [
          "offers-offers",
          "offers-onboardapi"
        ],
        "summary": "Find matching offer for trading pair",
        "operationId": "getLimits",
        "x-visibility": "external",
        "parameters": [
          {
            "$ref": "#/components/parameters/OffersSvctokenSymbolQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcfiatSymbolQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcofferTypeQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcnetworkQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfferLimitsDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": []
      },
      "x-original-path": "/offers/limits"
    },
    "/offers/best-offer": {
      "get": {
        "tags": [
          "offers-offers",
          "offers-onboardapi"
        ],
        "summary": "Get best offer for trade parameters",
        "operationId": "getBestOfferOffers",
        "x-visibility": "external",
        "parameters": [
          {
            "$ref": "#/components/parameters/OffersSvcunitAmountQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcfiatUnitAmountQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcnetworkQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvctokenSymbolQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcfiatSymbolQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcofferTypeQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcpaymentChannelQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcmerchantBlackListQueryParam"
          },
          {
            "$ref": "#/components/parameters/OffersSvcprioritizeIpQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OffersSvcOfferDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": []
      },
      "x-original-path": "/offers/best-offer"
    },
    "/orders/quotes": {
      "post": {
        "tags": [
          "orders-quotes"
        ],
        "summary": "Request a Quote",
        "operationId": "requestQuote",
        "requestBody": {
          "description": "body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external",
        "x-scopes": [
          "users.onboard.opn-access",
          "users.onboard.api-access"
        ]
      },
      "x-original-path": "/quotes"
    },
    "/orders/quotes/rates": {
      "get": {
        "tags": [
          "orders-quotes"
        ],
        "x-visibility": "external",
        "summary": "get base rates",
        "operationId": "getRate",
        "parameters": [
          {
            "name": "payoutCurrency",
            "in": "query",
            "description": "Payment account Currency",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ]
      },
      "x-original-path": "/quotes/rates"
    },
    "/orders/quotes/reference-rate": {
      "get": {
        "x-visibility": "external",
        "tags": [
          "orders-quotes"
        ],
        "summary": "get reference rates",
        "operationId": "getReferenceRate",
        "parameters": [
          {
            "name": "payoutCurrency",
            "in": "query",
            "description": "Payment account Currency",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "Type or transaction (BUY/SELL)",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OrderType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": []
      },
      "x-original-path": "/quotes/reference-rate"
    },
    "/orders/clients/orders": {
      "post": {
        "tags": [
          "orders-orders"
        ],
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external",
        "x-scopes": [
          "users.onboard.opn-access",
          "users.onboard.api-access"
        ],
        "summary": "Create order",
        "description": "Create client order based on selected quote",
        "operationId": "createClientOrder",
        "requestBody": {
          "required": true,
          "description": "Create order request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOrderRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Order created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusDto"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/OrdersSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/OrdersSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/OrdersSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/OrdersSvcServerError"
          }
        }
      },
      "get": {
        "tags": [
          "orders-orders"
        ],
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external",
        "x-scopes": [
          "users.onboard.opn-access"
        ],
        "summary": "Get orders",
        "description": "Get client orders",
        "operationId": "getClientOrders",
        "parameters": [
          {
            "in": "query",
            "required": false,
            "name": "orderStatus",
            "schema": {
              "$ref": "#/components/schemas/OrderQueryStatus"
            }
          },
          {
            "$ref": "#/components/parameters/OrdersSvcorderType"
          },
          {
            "$ref": "#/components/parameters/OrdersSvcpageNumber"
          },
          {
            "$ref": "#/components/parameters/OrdersSvcpageSize"
          }
        ],
        "responses": {
          "200": {
            "description": "Orders gotten successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderTransactionList"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/OrdersSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/OrdersSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/OrdersSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/OrdersSvcServerError"
          }
        }
      },
      "x-original-path": "/clients/orders"
    },
    "/orders/clients/orders/sell": {
      "post": {
        "tags": [
          "orders-orders"
        ],
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external",
        "x-scopes": [
          "users.onboard.opn-access",
          "users.onboard.api-access"
        ],
        "summary": "Create SELL order (alias, returns OrderResponse)",
        "description": "Explicit SELL alias for `POST /clients/orders`. Accepts the same `CreateOrderRequest` body,\nbut returns the **full `OrderResponse`** rather than the legacy `StatusDto` — same shape as\n`POST /clients/orders/buy` and `GET /clients/orders/{orderRef}`. Use this path when the\ncaller wants the persisted order details directly; `POST /clients/orders` (no alias)\nkeeps the legacy `StatusDto` response for backward compatibility.\n",
        "operationId": "createClientSellOrder",
        "requestBody": {
          "required": true,
          "description": "Create SELL order request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOrderRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Order created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/OrdersSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/OrdersSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/OrdersSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/OrdersSvcServerError"
          }
        }
      },
      "x-original-path": "/clients/orders/sell"
    },
    "/orders/clients/orders/buy": {
      "post": {
        "tags": [
          "orders-orders"
        ],
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external",
        "x-scopes": [
          "users.onboard.opn-access",
          "users.onboard.api-access"
        ],
        "summary": "Create BUY order (returns OrderResponse with pay-in details)",
        "description": "Client BUY order — the buyer deposits fiat into a merchant-controlled pay-in account, and once\nthe fiat lands, the merchant-locked asset is released to the buyer's wallet. The request\ncarries `sender` (buyer identity for the pay-in) and optional `creditAccountId` (asset\ndestination — defaults to the buyer's default base-currency account). The pay-in mode\n(`DEPOSIT` / `INTERNAL_TRANSFER`) is chosen on `POST /quotes` and inherited from the\nreferenced quote; it is **not** specified here.\n\nFor `DEPOSIT` paymentMode orders, the server waits briefly (a few seconds) for the pay-in\naccount to be provisioned and returns the full `OrderResponse` including\n`payinPaymentDetails` so the buyer knows where and how to deposit fiat. If provisioning is\nstill in flight when the wait elapses, `payinPaymentDetails` is `null` — poll\n`GET /clients/orders/{orderRef}` until it appears or the order fails. `INTERNAL_TRANSFER`\norders return immediately with `payinPaymentDetails` as `null`; poll the order until it\nappears. The same details are re-surfaced on `GET /clients/orders/{orderRef}` at any point.\n",
        "operationId": "createClientBuyOrder",
        "requestBody": {
          "required": true,
          "description": "Create BUY order request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBuyOrderRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Order created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/OrdersSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/OrdersSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/OrdersSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/OrdersSvcServerError"
          }
        }
      },
      "x-original-path": "/clients/orders/buy"
    },
    "/orders/clients/orders/{orderRef}": {
      "get": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-scopes": [
          "users.onboard.opn-access"
        ],
        "x-visibility": "external",
        "tags": [
          "orders-orders"
        ],
        "summary": "Get order",
        "description": "Get client order by reference",
        "operationId": "getClientOrder",
        "parameters": [
          {
            "in": "path",
            "required": true,
            "name": "orderRef",
            "description": "the order reference",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Orders gotten successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/OrdersSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/OrdersSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/OrdersSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/OrdersSvcServerError"
          }
        }
      },
      "x-original-path": "/clients/orders/{orderRef}"
    },
    "/orders/clients/orders/{orderRef}/cancel": {
      "post": {
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-scopes": [
          "users.onboard.opn-access",
          "users.onboard.api-access"
        ],
        "x-visibility": "external",
        "tags": [
          "orders-orders"
        ],
        "summary": "Cancel a BUY order",
        "description": "Cancel an ongoing BUY order owned by the caller. Allowed only while the order is awaiting\nthe buyer's fiat — `PENDING_INIT`, `ASSET_LOCKED`, or `PAYMENT_INIT`. For `PAYMENT_INIT` the\npay-in is re-scanned first; if the fiat has already landed the cancel is refused and the\norder proceeds to completion. Cancellation releases the merchant's locked asset and cancels\nthe pay-in. SELL orders are not cancellable through this endpoint.\n",
        "operationId": "cancelClientBuyOrder",
        "parameters": [
          {
            "in": "path",
            "required": true,
            "name": "orderRef",
            "description": "the order reference",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Order cancelled successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderResponse"
                }
              }
            }
          },
          "400": {
            "description": "Order is not in a cancellable state, is not a BUY order, or the pay-in already landed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/OrdersSvcUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/OrdersSvcAccessDenied"
          },
          "404": {
            "$ref": "#/components/responses/OrdersSvcNotFound"
          },
          "default": {
            "$ref": "#/components/responses/OrdersSvcServerError"
          }
        }
      },
      "x-original-path": "/clients/orders/{orderRef}/cancel"
    },
    "/payment-methods/channels/payment-methods/{id}": {
      "put": {
        "tags": [
          "payment-methods-users"
        ],
        "summary": "update a payment method ",
        "operationId": "updatePaymentMethodById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "the id of the payment method",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentMethodUpdateRequest"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentMethod"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external",
        "x-codegen-request-body-name": "updatePaymentMethodRequest"
      },
      "x-original-path": "/channels/payment-methods/{id}"
    },
    "/transactions/{id}": {
      "get": {
        "tags": [
          "transactions-transactions",
          "transactions-onboardapi"
        ],
        "summary": "Retrieve a particular transaction",
        "operationId": "getTransactionById",
        "parameters": [
          {
            "$ref": "#/components/parameters/TransactionsSvcidPathVariable"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/transactions/{id}"
    },
    "/transactions/{id}/contacts": {
      "get": {
        "tags": [
          "transactions-transactions"
        ],
        "summary": "Retrieve a particular transaction's contacts. Currently just phone numbers",
        "operationId": "getTransactionContacts",
        "parameters": [
          {
            "$ref": "#/components/parameters/TransactionsSvcidPathVariable"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionContactsDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/transactions/{id}/contacts"
    },
    "/transactions/customers/{id}/history": {
      "get": {
        "tags": [
          "transactions-transactions"
        ],
        "summary": "Retrieve list of customer transactions",
        "operationId": "getCustomerTransactions",
        "parameters": [
          {
            "$ref": "#/components/parameters/TransactionsSvcidPathVariableForUserId"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvctransactionTypeParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcfromDateParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvctoDateParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcsizeParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcpageParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcstatusesParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvctokenQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcfiatQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcnetworkQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcpaymentChannelQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcreferenceQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcotherPartyQueryParam"
          },
          {
            "name": "tradeRequestBroadcastId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcisTradeRequestBroadcastQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/transactions/customers/{id}/history"
    },
    "/transactions/customers/{id}/history-aggregate": {
      "get": {
        "tags": [
          "transactions-transactions"
        ],
        "summary": "Retrieve list of customer transactions",
        "operationId": "getCustomerTransactionsAggregate",
        "parameters": [
          {
            "$ref": "#/components/parameters/TransactionsSvcidPathVariableForUserId"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvctransactionTypeParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcfromDateParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvctoDateParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcstatusesParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvctokenQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcfiatQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcnetworkQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcpaymentChannelQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcreferenceQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcotherPartyQueryParam"
          },
          {
            "$ref": "#/components/parameters/TransactionsSvcisTradeRequestBroadcastQueryParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionHistoryAggregate"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/transactions/customers/{id}/history-aggregate"
    },
    "/transactions/v2/onramp/initiate": {
      "post": {
        "tags": [
          "transactions-onramp",
          "transactions-onboardapi"
        ],
        "summary": "Initiate an onramp transaction",
        "operationId": "initiateOnrampWithoutReservation",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerInitiateOrderRequestV2"
              }
            }
          },
          "required": false
        },
        "responses": {
          "201": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/v2/onramp/initiate"
    },
    "/transactions/onramp/customer-deposit": {
      "post": {
        "tags": [
          "transactions-onramp",
          "transactions-onboardapi"
        ],
        "summary": "Customer acknowledges transfer of fiat",
        "operationId": "onrampCustomerDeposit",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerActionRequest"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/onramp/customer-deposit"
    },
    "/transactions/onramp/customer-cancel": {
      "post": {
        "tags": [
          "transactions-onramp",
          "transactions-onboardapi"
        ],
        "summary": "Customer cancels onramp transaction",
        "operationId": "onrampCustomerCancel",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerActionRequest"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/onramp/customer-cancel"
    },
    "/transactions/v2/offramp/initiate": {
      "post": {
        "tags": [
          "transactions-offramp"
        ],
        "summary": "Initiate an offramp transaction",
        "operationId": "initiateOfframpWithoutReservation",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerInitiateOrderRequestV2"
              }
            }
          },
          "required": false
        },
        "responses": {
          "201": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/v2/offramp/initiate"
    },
    "/transactions/offramp/customer-approve": {
      "post": {
        "tags": [
          "transactions-offramp"
        ],
        "summary": "Customer approves withdrawal from wallet",
        "operationId": "offrampCustomerApprove",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerActionRequest"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/offramp/customer-approve"
    },
    "/transactions/offramp/customer-confirm": {
      "post": {
        "tags": [
          "transactions-offramp"
        ],
        "summary": "Customer acknowledges receipt of fiat",
        "operationId": "offrampCustomerConfirm",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerConfirmationRequest"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/offramp/customer-confirm"
    },
    "/transactions/offramp/customer-cancel": {
      "post": {
        "tags": [
          "transactions-offramp"
        ],
        "summary": "Customer cancels pending offramp transaction",
        "operationId": "offrampCustomerCancel",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerActionRequest"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/offramp/customer-cancel"
    },
    "/users/me/send-otp": {
      "get": {
        "tags": [
          "users-users"
        ],
        "summary": "Provide otp for user",
        "operationId": "sendOtp",
        "parameters": [
          {
            "name": "purpose",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OtpPurpose"
            }
          },
          {
            "name": "verificationChannel",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/PhoneNumberVerificationChannel"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OtpSendResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/me/send-otp"
    },
    "/users/me": {
      "get": {
        "tags": [
          "users-users",
          "users-onboardapi"
        ],
        "summary": "Get a single user by their authorization token",
        "operationId": "getMyProfile",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDataDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external"
      },
      "x-original-path": "/me"
    },
    "/users/me/update-profile": {
      "put": {
        "tags": [
          "users-users"
        ],
        "summary": "Update partner's personal information",
        "operationId": "updateProfile",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProfileRequestDto"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserProfileDataDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorMessageDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "HMACAuth": []
          }
        ],
        "x-visibility": "external",
        "x-codegen-request-body-name": "profileData"
      },
      "x-original-path": "/me/update-profile"
    }
  },
  "tags": [
    {
      "name": "users-onboardapi",
      "description": "Endpoints available to for merchants liquidity automation"
    },
    {
      "name": "users-users",
      "description": "User related endpoints"
    },
    {
      "name": "users-partners",
      "description": "Partner related endpoints"
    },
    {
      "name": "users-admin",
      "description": "Back office related endpoints"
    },
    {
      "name": "users-user2fa",
      "description": "User 2fa related endpoints"
    },
    {
      "name": "users-usernotifications",
      "description": "User notifications related endpoints"
    },
    {
      "name": "users-merchantnetwork",
      "description": "Merchant network endpoints"
    },
    {
      "name": "users-userauth",
      "description": "Authentication endpoints"
    },
    {
      "name": "users-userservice",
      "description": "Service endpoints"
    },
    {
      "name": "users-webhook",
      "description": "webhook endpoints"
    },
    {
      "name": "users-config",
      "description": "Configuration Endpoints"
    }
  ],
  "components": {
    "schemas": {
      "AccessTokenRequest": {
        "properties": {
          "requestToken": {
            "type": "string",
            "description": "Request token acquired when user granted access"
          },
          "requestId": {
            "type": "string",
            "description": "Unique Request ID originally generated by requesting app but in plain text (not hashed)"
          },
          "serviceIdentifier": {
            "type": "string",
            "description": "Service ID or API key of requesting app"
          }
        },
        "required": [
          "requestToken",
          "requestId",
          "serviceIdentifier"
        ],
        "x-source-svc": "auth"
      },
      "AccessTokenResponse": {
        "properties": {
          "userId": {
            "type": "string",
            "description": "Onboard unique User ID"
          },
          "accessToken": {
            "$ref": "#/components/schemas/Token"
          },
          "refreshToken": {
            "$ref": "#/components/schemas/Token"
          }
        },
        "required": [
          "userId",
          "accessToken",
          "refreshToken"
        ],
        "x-source-svc": "auth"
      },
      "Account": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "customerName",
          "balance",
          "availableBalance",
          "currency",
          "createdDate"
        ],
        "properties": {
          "id": {
            "description": "The customer account identifier",
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "description": "The customer account name",
            "type": "string",
            "example": "ACME Corp"
          },
          "customerName": {
            "description": "The customer name associated to the details",
            "type": "string",
            "example": "Babajide Apata"
          },
          "balance": {
            "description": "The account balance on provider",
            "type": "number",
            "example": "100.00",
            "minimum": 0
          },
          "availableBalance": {
            "description": "The available balance on provider",
            "type": "number",
            "example": "100.00",
            "minimum": 0
          },
          "currency": {
            "description": "The account currency code",
            "type": "string",
            "example": "GBP"
          },
          "createdDate": {
            "description": "The date the customer was created",
            "type": "string",
            "format": "date-time"
          }
        },
        "x-source-svc": "ledger"
      },
      "AccountBalanceDetails": {
        "type": "object",
        "additionalProperties": false,
        "description": "Account balance details",
        "properties": {
          "balance": {
            "description": "The actual ledger balance of the account",
            "type": "number",
            "example": 1000
          },
          "availableBalance": {
            "description": "The available balance for spending",
            "type": "number",
            "example": 1000
          }
        },
        "x-source-svc": "ledger"
      },
      "AccountHolderType": {
        "type": "string",
        "enum": [
          "INDIVIDUAL",
          "BUSINESS"
        ],
        "x-source-svc": "ledger"
      },
      "AccountNumberDepositActivity": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TransactionActivity"
          },
          {
            "type": "object",
            "required": [
              "activityData"
            ],
            "properties": {
              "activityData": {
                "$ref": "#/components/schemas/AccountNumberDepositTransaction"
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "AccountNumberDepositTransaction": {
        "type": "object",
        "description": "Details of an account-number (virtual/bank account number) deposit transaction.",
        "required": [
          "id",
          "amount",
          "currency",
          "accountCurrency",
          "status",
          "createdDate"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "amount": {
            "type": "number",
            "example": 100,
            "description": "Amount deposited to the bank account number"
          },
          "fee": {
            "type": "number",
            "minimum": 0,
            "description": "Fee charged in account number currency (currency field)"
          },
          "currency": {
            "description": "The account number currency/currency for the amount that was deposited.",
            "type": "string",
            "example": "NGN"
          },
          "accountCurrency": {
            "type": "string",
            "description": "The currency of the account that owns the account number",
            "example": "USD"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TransactionStatus"
              },
              {
                "description": "Status of the deposit transaction"
              }
            ]
          },
          "senderAccountDetails": {
            "$ref": "#/components/schemas/CashAccountDetails"
          },
          "settlementAmount": {
            "type": "number",
            "description": "The final settlement amount in the same currency as accountCurrency"
          },
          "settlementExchangeRate": {
            "type": "number",
            "description": "Exchange rate from the deposited currency to the account currency"
          },
          "accountTransactionId": {
            "type": "string",
            "description": "Transaction ID on the ledger, only available when status is SUCCESS"
          },
          "createdDate": {
            "type": "string",
            "format": "date-time"
          }
        },
        "x-source-svc": "ledger"
      },
      "AccountTransaction": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "reference",
          "type",
          "amount",
          "currency",
          "status",
          "createdDate"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique transaction ID",
            "example": "txn_123456"
          },
          "reference": {
            "type": "string",
            "description": "Unique transaction reference.",
            "example": "REF123456"
          },
          "type": {
            "$ref": "#/components/schemas/TransactionType"
          },
          "amount": {
            "type": "number",
            "description": "Transaction amount, negative for debits, positive for credits",
            "example": 100
          },
          "currency": {
            "type": "string",
            "description": "Transaction currency",
            "example": "USD"
          },
          "status": {
            "$ref": "#/components/schemas/TransactionStatus"
          },
          "categoryTag": {
            "type": "string",
            "description": "Category tag for the transaction",
            "example": "crypto-withdrawal"
          },
          "createdDate": {
            "type": "string",
            "format": "date-time",
            "description": "Transaction creation date"
          },
          "notes": {
            "type": "string",
            "description": "Transaction description",
            "example": "Conversion from USDC to IDR"
          },
          "accountId": {
            "type": "string",
            "format": "uuid",
            "description": "Associated account ID"
          },
          "feeAmount": {
            "type": "number",
            "description": "Fee amount associated with the transaction",
            "example": 1
          },
          "feeInclusive": {
            "type": "boolean",
            "description": "Indicates if the fee is inclusive in the transaction amount"
          },
          "subAccountId": {
            "type": "string",
            "format": "uuid",
            "description": "Associated sub-account ID, if applicable"
          },
          "blockchainInfo": {
            "$ref": "#/components/schemas/TransactionBlockchainInfo"
          }
        },
        "x-source-svc": "ledger"
      },
      "AccountType": {
        "type": "string",
        "description": "The account type",
        "example": "CHECKING",
        "enum": [
          "CHECKING",
          "SAVINGS"
        ],
        "x-source-svc": "ledger"
      },
      "ActivityAccountType": {
        "type": "string",
        "description": "The kind of account a transaction activity occurred on.",
        "enum": [
          "MAIN",
          "SUB_ACCOUNT",
          "OFFRAMP_ACCOUNT"
        ],
        "x-source-svc": "ledger"
      },
      "ActivityDirection": {
        "type": "string",
        "enum": [
          "CREDIT",
          "DEBIT"
        ],
        "x-source-svc": "ledger"
      },
      "AdAppliedEscrowBalanceDto": {
        "type": "object",
        "required": [
          "balance",
          "lockedBalance",
          "availableBalance",
          "tokenSymbol",
          "tokenDecimals"
        ],
        "description": "SCEA balances",
        "properties": {
          "address": {
            "type": "string",
            "description": "Partner's account address"
          },
          "balance": {
            "type": "string",
            "example": "1000000000"
          },
          "lockedBalance": {
            "type": "string",
            "example": "0"
          },
          "lockedBalanceInAds": {
            "type": "string",
            "example": "0"
          },
          "lockedBalanceInOrders": {
            "type": "string",
            "example": "0"
          },
          "availableBalance": {
            "type": "string",
            "example": "1000000000"
          },
          "name": {
            "type": "string",
            "description": "Full descriptive name"
          },
          "tokenSymbol": {
            "type": "string",
            "example": "BNB"
          },
          "tokenDecimals": {
            "type": "number",
            "example": 18
          },
          "tokenAddress": {
            "type": "string"
          }
        },
        "x-source-svc": "offers"
      },
      "Asset": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "code": {
            "type": "string",
            "minLength": 3,
            "description": "The asset code/symbol for this asset.",
            "example": "USD"
          },
          "name": {
            "type": "string",
            "description": "Name of this asset.",
            "example": "US Dollars"
          },
          "decimals": {
            "type": "integer",
            "description": "Number of decimal places supported by this asset.",
            "example": 2
          },
          "symbol": {
            "type": "string",
            "description": "asset symbol"
          },
          "supportsBlockchainTransfer": {
            "type": "boolean",
            "description": "Indicates if this asset supports blockchain operations like crypto transfers.",
            "default": false
          }
        },
        "x-source-svc": "ledger"
      },
      "AssetBlockchainTokens": {
        "type": "object",
        "required": [
          "asset",
          "tokens"
        ],
        "properties": {
          "asset": {
            "type": "string",
            "example": "USD"
          },
          "tokens": {
            "type": "array",
            "description": "A list of funding tokens with details of their supported networks.",
            "items": {
              "$ref": "#/components/schemas/TokenDetails"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "AutoRefillConfig": {
        "type": "object",
        "required": [
          "threshold",
          "amount"
        ],
        "properties": {
          "threshold": {
            "type": "number",
            "description": "If ad available unit go belows this value the system would trigger a auto refill"
          },
          "amount": {
            "type": "number",
            "description": "The token amount to refill the ad with"
          }
        },
        "x-source-svc": "exchange"
      },
      "BankAccountRecipient": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Recipient"
          },
          {
            "type": "object",
            "properties": {
              "bankId": {
                "type": "string",
                "minLength": 1,
                "description": "The identifier for the bank"
              },
              "accountNumber": {
                "type": "string",
                "minLength": 1,
                "description": "the recipients bank account number"
              },
              "metadata": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Additional provider-specific metadata (e.g. country, address, bank_name, bank_address)"
              }
            },
            "required": [
              "bankId",
              "accountNumber"
            ]
          }
        ],
        "x-source-svc": "orders"
      },
      "BaseACHBankAccount": {
        "description": "Bank details needed for ACH payments",
        "type": "object",
        "required": [
          "recipientAddress",
          "bankAddress",
          "routingNumber",
          "bankName"
        ],
        "properties": {
          "routingNumber": {
            "type": "string",
            "minLength": 9,
            "maxLength": 9,
            "pattern": "^\\d{9}$",
            "example": "021000021"
          },
          "accountType": {
            "$ref": "#/components/schemas/AccountType"
          },
          "recipientAddress": {
            "$ref": "#/components/schemas/PhysicalAddress"
          },
          "bankAddress": {
            "$ref": "#/components/schemas/PhysicalAddress"
          },
          "bankName": {
            "description": "Beneficiary bank name",
            "type": "string"
          },
          "identityNumber": {
            "description": "Beneficiary government/tax identity number. Optional; forwarded to the payout provider when present.",
            "type": "string"
          }
        },
        "x-source-svc": "ledger"
      },
      "BaseCreateOrderRequest": {
        "type": "object",
        "description": "Fields shared between SELL and BUY order creation requests. Not used directly as a request body — see CreateOrderRequest (SELL) and CreateBuyOrderRequest (BUY).",
        "properties": {
          "quoteId": {
            "type": "string",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5",
            "description": "General format for UUID"
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "Positive double"
          },
          "reference": {
            "type": "string",
            "minLength": 15,
            "pattern": "^[a-zA-Z0-9-_]+$"
          },
          "twoFaCode": {
            "type": "string",
            "minLength": 4
          },
          "narration": {
            "type": "string",
            "description": "A description for the transfer that's passed to the recipient of the orders",
            "maxLength": 200
          }
        },
        "required": [
          "quoteId",
          "amount",
          "twoFaCode",
          "reference"
        ],
        "x-source-svc": "orders"
      },
      "BaseLocalBankAccount": {
        "description": "Details for local bank accounts",
        "type": "object",
        "required": [
          "bankCode"
        ],
        "properties": {
          "bankName": {
            "description": "Beneficiary bank name",
            "type": "string"
          },
          "bankCode": {
            "description": "Beneficiary bank code",
            "type": "string",
            "minLength": 3,
            "maxLength": 12
          },
          "bankAddress": {
            "$ref": "#/components/schemas/PhysicalAddress"
          },
          "identityNumber": {
            "description": "Beneficiary government/tax identity number. Optional; forwarded to the payout provider when present.",
            "type": "string"
          }
        },
        "x-source-svc": "ledger"
      },
      "BaseMobileWalletAccount": {
        "description": "Details needed for mobile money payments",
        "type": "object",
        "required": [
          "accountNumber"
        ],
        "properties": {
          "accountNumber": {
            "description": "Beneficiary account number, for Mobile Money, this is the phone number.",
            "type": "string",
            "example": "233501234567"
          },
          "mobileNetwork": {
            "type": "string",
            "description": "Mobile network operator for the mobile money account (e.g., MTN, Vodafone)"
          }
        },
        "x-source-svc": "ledger"
      },
      "BaseMultiRailBankAccount": {
        "description": "Bank details for an account reachable via more than one independently-coded payment rail on the\nsame account number (e.g. a US account that accepts ACH, FedWire, and SWIFT, each with its own\nrouting code). Use the single-rail Cash*BankAccount schemas instead when only one rail applies.\n",
        "type": "object",
        "required": [
          "bankName",
          "bankAddress",
          "supportedRails"
        ],
        "properties": {
          "bankName": {
            "description": "Beneficiary bank name",
            "type": "string"
          },
          "bankAddress": {
            "$ref": "#/components/schemas/PhysicalAddress"
          },
          "accountType": {
            "$ref": "#/components/schemas/AccountType"
          },
          "supportedRails": {
            "type": "array",
            "minItems": 1,
            "uniqueItems": true,
            "items": {
              "$ref": "#/components/schemas/CashPaymentRail"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "BaseOrderResponse": {
        "type": "object",
        "discriminator": {
          "propertyName": "responseType"
        },
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5",
            "description": "General format for UUID"
          },
          "merchantId": {
            "type": "string",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5",
            "description": "General format for UUID"
          },
          "merchantAccountId": {
            "type": "string",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5",
            "description": "General format for UUID"
          },
          "clientId": {
            "type": "string",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5",
            "description": "General format for UUID"
          },
          "reference": {
            "type": "string"
          },
          "assetCurrency": {
            "type": "string"
          },
          "payoutCurrency": {
            "type": "string"
          },
          "payoutReference": {
            "type": "string"
          },
          "payoutRequestReference": {
            "type": "string"
          },
          "paymentChannel": {
            "$ref": "#/components/schemas/ProviderPaymentChannel"
          },
          "recipient": {
            "description": "Details of the recipient (for SELL), specified at order initiation. Details may be masked in merchant view.",
            "allOf": [
              {
                "$ref": "#/components/schemas/Recipient"
              }
            ]
          },
          "type": {
            "$ref": "#/components/schemas/OrderType"
          },
          "status": {
            "$ref": "#/components/schemas/OrderQueryStatus"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "senderInfo": {
            "description": "Details of the sender (for BUY), specified at order initiation. Details may be masked in merchant view.",
            "allOf": [
              {
                "$ref": "#/components/schemas/SenderInfo"
              }
            ]
          },
          "responseType": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "reference",
          "assetCurrency",
          "payoutCurrency",
          "type",
          "status",
          "createdAt",
          "responseType"
        ],
        "x-source-svc": "orders"
      },
      "BaseSepaBankAccount": {
        "description": "Details for SEPA accounts",
        "type": "object",
        "required": [
          "country"
        ],
        "properties": {
          "country": {
            "description": "Beneficiary country ISO code",
            "type": "string",
            "minLength": 2,
            "maxLength": 2
          },
          "bic": {
            "description": "Providing a BIC alongside the IBAN is optional for regular SEPA transfers. \nBanks are required by SEPA to automatically derive the BIC from the IBAN.  \nYou must still provide the BIC if the SEPA-participating country does not use the euro (e.g., Switzerland, Monaco, or San Marino).\n",
            "type": "string"
          },
          "bankName": {
            "description": "Beneficiary bank name",
            "type": "string"
          },
          "bankAddress": {
            "$ref": "#/components/schemas/PhysicalAddress"
          },
          "identityNumber": {
            "description": "Beneficiary government/tax identity number. Optional; forwarded to the payout provider when present.",
            "type": "string"
          }
        },
        "x-source-svc": "ledger"
      },
      "BaseSwiftBankAccount": {
        "description": "Bank details needed for SWIFT",
        "type": "object",
        "required": [
          "recipientAddress",
          "bankAddress",
          "bankName",
          "bic"
        ],
        "properties": {
          "routingNumber": {
            "type": "string",
            "minLength": 9,
            "maxLength": 9,
            "pattern": "^\\d{9}$",
            "example": "021000021"
          },
          "recipientAddress": {
            "$ref": "#/components/schemas/PhysicalAddress"
          },
          "bankAddress": {
            "$ref": "#/components/schemas/PhysicalAddress"
          },
          "bankName": {
            "description": "Beneficiary bank name",
            "type": "string"
          },
          "bic": {
            "description": "Beneficiary BIC, might be called SWIFT code",
            "type": "string"
          },
          "identityNumber": {
            "description": "Beneficiary government/tax identity number. Optional; forwarded to the payout provider when present.",
            "type": "string"
          }
        },
        "x-source-svc": "ledger"
      },
      "BasicBeneficiaryInfo": {
        "type": "object",
        "description": "Basic information about a beneficiary as at the time of transaction.",
        "required": [
          "id",
          "accountName",
          "beneficiaryType",
          "accountIdentifier",
          "paymentChannelId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for the beneficiary."
          },
          "accountName": {
            "type": "string",
            "description": "Name on the account",
            "example": "John Doe"
          },
          "beneficiaryType": {
            "type": "string",
            "description": "Type of beneficiary object.",
            "example": "BeneficiaryLocalBankAccount"
          },
          "bankName": {
            "type": "string",
            "description": "Name of the receiving bank, for mobile money this would be the network, and for P2P wallet it will be the name of the account provider\n",
            "example": "Great Bank LLC"
          },
          "accountIdentifier": {
            "type": "string",
            "description": "The account identifier at the bank. For mobile money, this is the phone number on account, for P2P wallet, this is the account ID\nWhere routing number or sort code is present, this would be `{routingNumber}-{accountNumber}`\n",
            "example": "230101010"
          },
          "paymentChannelId": {
            "type": "string",
            "description": "Identifier of the payment channel used for this transaction, if available. This can be used to determine the exact payment method used for the transaction.",
            "example": "BANK_TRANSFER_NIGERIA"
          },
          "country": {
            "type": "string",
            "description": "Country where the payment method belongs if available",
            "example": "IE"
          }
        },
        "x-source-svc": "ledger"
      },
      "Beneficiary": {
        "type": "object",
        "additionalProperties": false,
        "description": "Fiat beneficiary object",
        "discriminator": {
          "propertyName": "beneficiaryType",
          "mapping": {
            "BeneficiaryLocalBankAccount": "#/components/schemas/BeneficiaryLocalBankAccount",
            "BeneficiarySepaBankAccount": "#/components/schemas/BeneficiarySepaBankAccount",
            "BeneficiaryACHBankAccount": "#/components/schemas/BeneficiaryACHBankAccount",
            "BeneficiarySwiftBankAccount": "#/components/schemas/BeneficiarySwiftBankAccount",
            "BeneficiaryMobileWalletAccount": "#/components/schemas/BeneficiaryMobileWalletAccount"
          }
        },
        "required": [
          "id",
          "accountNumber",
          "accountName",
          "currency",
          "accountHolderType"
        ],
        "properties": {
          "id": {
            "description": "Beneficiary identifier",
            "type": "string",
            "format": "uuid"
          },
          "accountNumber": {
            "description": "Beneficiary account number, for international payments like SEPA, this is the IBAN",
            "type": "string"
          },
          "accountName": {
            "description": "Beneficiary account name",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "beneficiaryType": {
            "type": "string",
            "description": "Discriminator value for beneficiary type. Allowed values include:\n- BeneficiaryLocalBankAccount\n- BeneficiarySepaBankAccount\n- BeneficiaryACHBankAccount\n- BeneficiarySwiftBankAccount\n- BeneficiaryMobileWalletAccount\n"
          },
          "isThirdParty": {
            "type": "boolean",
            "description": "Flag to indicate if the beneficiary is a third party",
            "default": false
          },
          "accountHolderType": {
            "$ref": "#/components/schemas/AccountHolderType"
          }
        },
        "x-source-svc": "ledger"
      },
      "BeneficiaryACHBankAccount": {
        "description": "ACH, FedWire and FedNow transfer beneficiary",
        "allOf": [
          {
            "$ref": "#/components/schemas/Beneficiary"
          },
          {
            "$ref": "#/components/schemas/BaseACHBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "BeneficiaryList": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Paging"
          },
          {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "content": {
                "type": "array",
                "description": "List of Beneficiaries",
                "items": {
                  "$ref": "#/components/schemas/Beneficiary"
                }
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "BeneficiaryLocalBankAccount": {
        "description": "Local bank transfer beneficiary.",
        "allOf": [
          {
            "$ref": "#/components/schemas/Beneficiary"
          },
          {
            "$ref": "#/components/schemas/BaseLocalBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "BeneficiaryMobileWalletAccount": {
        "description": "Use this for beneficiaries that will receive mobile wallet payments. \nSupported channels include MOBILE_MONEY_UGANDA, MOBILE_MONEY_TANZANIA, MOBILE_MONEY_ZAMBIA, etc\n",
        "allOf": [
          {
            "$ref": "#/components/schemas/Beneficiary"
          },
          {
            "$ref": "#/components/schemas/BaseMobileWalletAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "BeneficiarySepaBankAccount": {
        "description": "SEPA instant and standard transfer beneficiary. Use this for beneficiaries that will receive SEPA payments.",
        "allOf": [
          {
            "$ref": "#/components/schemas/Beneficiary"
          },
          {
            "$ref": "#/components/schemas/BaseSepaBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "BeneficiarySwiftBankAccount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Beneficiary"
          },
          {
            "$ref": "#/components/schemas/BaseSwiftBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "BestOfferDTO": {
        "type": "object",
        "properties": {
          "offer": {
            "$ref": "#/components/schemas/OfferDto"
          },
          "orderRequestTradeId": {
            "type": "string"
          }
        },
        "required": [
          "offer",
          "orderRequestTradeId"
        ],
        "x-source-svc": "exchange"
      },
      "BlockchainNetwork": {
        "required": [
          "chainId",
          "explorer",
          "logo",
          "name",
          "nativeAsset",
          "networkId"
        ],
        "type": "object",
        "properties": {
          "networkId": {
            "type": "string",
            "description": "Unique network connector identifier on Onboard",
            "example": "bsc_testnet"
          },
          "name": {
            "type": "string",
            "description": "Human readable name for the network",
            "example": "Binance Smart Chain Network"
          },
          "logo": {
            "type": "string",
            "description": "network's logo",
            "format": "url"
          },
          "explorer": {
            "type": "string",
            "description": "URL to explorer (scan) application for the network",
            "format": "url"
          },
          "chainId": {
            "type": "number",
            "description": "Protocol chain ID",
            "example": 1
          },
          "nativeAsset": {
            "type": "string",
            "description": "Network native coin symbol",
            "example": "BNB"
          },
          "availableTokens": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tokens"
            }
          }
        },
        "x-source-svc": "exchange"
      },
      "BusinessCategory": {
        "type": "string",
        "description": "KYB onboarding tier that determines the required document set",
        "enum": [
          "GENERAL_BUSINESS",
          "OTC_FX_LIQUIDITY_PROVIDER",
          "LICENSED_FINANCIAL_SERVICES"
        ],
        "x-source-svc": "exchange"
      },
      "BusinessDirector": {
        "type": "object",
        "description": "A current director of the business",
        "required": [
          "fullName",
          "email"
        ],
        "properties": {
          "fullName": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          }
        },
        "x-source-svc": "exchange"
      },
      "BusinessDocument": {
        "type": "object",
        "description": "An uploaded KYB document",
        "required": [
          "label",
          "uploadId"
        ],
        "properties": {
          "label": {
            "type": "string",
            "description": "Human-readable document name, e.g. Certificate of Incorporation"
          },
          "uploadId": {
            "type": "string",
            "description": "Identifier of the stored upload"
          },
          "url": {
            "type": "string",
            "description": "Direct URL to the stored file",
            "format": "url"
          }
        },
        "x-source-svc": "exchange"
      },
      "BusinessIndustry": {
        "type": "string",
        "description": "Sector the business primarily operates in",
        "enum": [
          "TECHNOLOGY_SOFTWARE",
          "FINANCIAL_SERVICES",
          "ECOMMERCE",
          "MARKETING_ADVERTISING",
          "CONSULTING_PROFESSIONAL_SERVICES",
          "EDUCATION",
          "HEALTHCARE",
          "MANUFACTURING",
          "LOGISTICS_SUPPLY_CHAIN",
          "REAL_ESTATE",
          "CRYPTO_WEB3",
          "GAMING",
          "MEDIA_ENTERTAINMENT",
          "OTHER"
        ],
        "x-source-svc": "exchange"
      },
      "CashACHBankAccount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CashAccountDetails"
          },
          {
            "$ref": "#/components/schemas/BaseACHBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CashAccountDetails": {
        "type": "object",
        "required": [
          "accountInfoType",
          "accountName",
          "accountNumber"
        ],
        "properties": {
          "accountInfoType": {
            "type": "string",
            "pattern": "^Cash(LocalBank|SepaBank|ACHBank|SwiftBank|MobileWallet|MultiRailBank)Account$",
            "description": "Used to determine the exact schema type.\nAllowed values:\n- CashLocalBankAccount\n- CashSepaBankAccount\n- CashACHBankAccount\n- CashSwiftBankAccount\n- CashMobileWalletAccount\n- CashMultiRailBankAccount\n"
          },
          "accountName": {
            "type": "string",
            "description": "Name on the destination account.",
            "example": "John Doe"
          },
          "accountNumber": {
            "type": "string",
            "description": "The destination account identifier. For mobile money this is the phone number, for P2P wallet the account ID.\nWhere routing number or sort code is present, this would be `{routingNumber}-{accountNumber}`.\n",
            "example": "230101010"
          },
          "reference": {
            "type": "string",
            "description": "Reference the customer must include with the deposit so the pay-in is auto-matched.\nOptional — some providers do not require one.\n",
            "example": "PROV123456"
          }
        },
        "discriminator": {
          "propertyName": "accountInfoType",
          "mapping": {
            "CashLocalBankAccount": "#/components/schemas/CashLocalBankAccount",
            "CashSepaBankAccount": "#/components/schemas/CashSepaBankAccount",
            "CashACHBankAccount": "#/components/schemas/CashACHBankAccount",
            "CashSwiftBankAccount": "#/components/schemas/CashSwiftBankAccount",
            "CashMobileWalletAccount": "#/components/schemas/CashMobileWalletAccount",
            "CashMultiRailBankAccount": "#/components/schemas/CashMultiRailBankAccount"
          }
        },
        "x-source-svc": "ledger"
      },
      "CashDepositActivity": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TransactionActivity"
          },
          {
            "type": "object",
            "required": [
              "activityData"
            ],
            "properties": {
              "activityData": {
                "$ref": "#/components/schemas/CashDepositTransaction"
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "CashDepositPaymentDetails": {
        "type": "object",
        "description": "Destination account details the customer must pay into to fund the deposit. Mirrors a Beneficiary\n(without an id). Carries only the account details needed to make the payment; transaction context\n(amount, status, etc.) lives on the enclosing CashDepositTransaction.\n\n`details` can be nullable when the account number provider is still generating it\n",
        "required": [
          "payinCurrency"
        ],
        "properties": {
          "details": {
            "$ref": "#/components/schemas/CashAccountDetails"
          },
          "payinCurrency": {
            "type": "string",
            "description": "Currency the destination account accepts for the deposit.",
            "example": "NGN"
          },
          "paymentMethods": {
            "type": "array",
            "description": "Fee, limits, and settlement timeline per payment rail this account accepts deposits through,\nso a business can see up front what each rail will cost and how long it will take. Empty when\nthe account-number provider has no capability data configured for this currency yet.\n",
            "items": {
              "$ref": "#/components/schemas/PaymentMethodCapability"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "CashDepositQuote": {
        "type": "object",
        "required": [
          "id",
          "payinCurrency",
          "accountCurrency",
          "rate",
          "minimumAmount",
          "maximumAmount",
          "expiresAt"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for the deposit quote."
          },
          "accountCurrency": {
            "type": "string",
            "description": "Currency of the account to be credited.",
            "example": "USD"
          },
          "payinCurrency": {
            "type": "string",
            "description": "Currency the customer pays in.",
            "example": "NGN"
          },
          "rate": {
            "type": "number",
            "description": "Exchange rate applied for this quote",
            "example": 1450.75
          },
          "minimumAmount": {
            "type": "number",
            "description": "Minimum amount allowed for this quote",
            "example": 50
          },
          "maximumAmount": {
            "type": "number",
            "description": "Maximum amount allowed for this quote",
            "example": 10000
          },
          "minimumPayinAmount": {
            "type": "number",
            "description": "Minimum pay-in amount allowed for this quote",
            "example": 72500
          },
          "maximumPayinAmount": {
            "type": "number",
            "description": "Maximum pay-in amount allowed for this quote",
            "example": 14507500
          },
          "feeAmount": {
            "type": "number",
            "description": "Platform fee, in accountCurrency, that would apply based on the business's configured fee\npreference (zero if none configured). Informational only for now — not yet reflected in\nminimumAmount/maximumAmount or in the amount actually credited once the deposit settles;\nwiring it into the settled amount is a tracked follow-up.\n",
            "example": 0.5
          },
          "feeInclusive": {
            "type": "boolean",
            "description": "The fee's intended relationship to the credited amount once wired into settlement (true =\nalready netted out, matching Graph USD deposits). Has no effect on the credited amount today.\n"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          }
        },
        "x-source-svc": "ledger"
      },
      "CashDepositTransaction": {
        "type": "object",
        "description": "Details of a cash deposit transaction.",
        "required": [
          "id",
          "reference",
          "currency",
          "status",
          "payinCurrency",
          "amount",
          "rate",
          "payinAmount",
          "createdDate"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "reference": {
            "type": "string",
            "description": "Reference for the cash deposit transaction at initiation."
          },
          "accountTransactionId": {
            "type": "string",
            "description": "Identifier of the credit transaction on the account."
          },
          "currency": {
            "type": "string",
            "description": "Currency in which the account was credited.",
            "example": "USD"
          },
          "status": {
            "$ref": "#/components/schemas/TransactionStatus"
          },
          "payinCurrency": {
            "type": "string",
            "description": "Currency the customer paid in.",
            "example": "NGN"
          },
          "amount": {
            "type": "number",
            "description": "Amount credited to the account.",
            "example": 100
          },
          "rate": {
            "type": "number",
            "description": "Exchange rate applied for this deposit.",
            "example": 1450.75
          },
          "payinAmount": {
            "type": "number",
            "description": "Amount the customer paid in, in the pay-in currency.",
            "example": 145075
          },
          "feeAmount": {
            "type": "number",
            "description": "Platform fee, in currency, that applied based on the business's configured fee preference\n(zero if none configured). Informational only for now — amount reflects only what\nonboard-orders actually settled and is not adjusted by this fee; wiring it into the\nactual credited amount is a tracked follow-up.\n",
            "example": 0.5
          },
          "feeInclusive": {
            "type": "boolean",
            "description": "The fee's intended relationship to amount once wired into settlement (true = already\nnetted out, matching Graph USD deposits). Has no effect on amount today.\n"
          },
          "providerReference": {
            "type": "string",
            "description": "Reference provided by the cash deposit provider.",
            "example": "PROV123456"
          },
          "paymentDetails": {
            "$ref": "#/components/schemas/CashDepositPaymentDetails"
          },
          "createdDate": {
            "type": "string",
            "format": "date-time"
          }
        },
        "x-source-svc": "ledger"
      },
      "CashDepositTransactionList": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Paging"
          },
          {
            "type": "object",
            "properties": {
              "content": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CashDepositTransaction"
                }
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "CashLocalBankAccount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CashAccountDetails"
          },
          {
            "$ref": "#/components/schemas/BaseLocalBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CashMobileWalletAccount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CashAccountDetails"
          },
          {
            "$ref": "#/components/schemas/BaseMobileWalletAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CashMultiRailBankAccount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CashAccountDetails"
          },
          {
            "$ref": "#/components/schemas/BaseMultiRailBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CashPaymentActivity": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TransactionActivity"
          },
          {
            "type": "object",
            "required": [
              "activityData"
            ],
            "properties": {
              "activityData": {
                "$ref": "#/components/schemas/CashPaymentTransaction"
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "CashPaymentChannel": {
        "type": "object",
        "required": [
          "name",
          "id",
          "beneficiaryType"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Human-readable display name of the payment method",
            "example": "Bank Transfer"
          },
          "id": {
            "type": "string",
            "description": "Unique identifier for this payment channel",
            "example": "BANK_TRANSFER_NIGERIA"
          },
          "beneficiaryType": {
            "type": "string",
            "description": "Type to use for beneficiaries created for this payment channel. See the Beneficiary schema for more details on beneficiary types.\n",
            "example": "BeneficiaryLocalBankAccount"
          }
        },
        "x-source-svc": "ledger"
      },
      "CashPaymentCurrenciesList": {
        "type": "object",
        "required": [
          "currencies"
        ],
        "properties": {
          "currencies": {
            "type": "array",
            "description": "List of supported payout currencies for cash payments.",
            "items": {
              "$ref": "#/components/schemas/CashPaymentCurrency"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "CashPaymentCurrency": {
        "type": "object",
        "required": [
          "name",
          "logo",
          "code",
          "countryCode",
          "paymentChannels"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "logo": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "countryCode": {
            "type": "string"
          },
          "paymentChannels": {
            "type": "array",
            "uniqueItems": true,
            "default": [],
            "items": {
              "$ref": "#/components/schemas/CashPaymentChannel"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "CashPaymentQuote": {
        "type": "object",
        "required": [
          "id",
          "payoutCurrency",
          "accountCurrency",
          "rate",
          "minimumAmount",
          "maximumAmount",
          "expiresAt"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for the transfer quote."
          },
          "accountCurrency": {
            "type": "string",
            "description": "Currency of the account to be debited.",
            "example": "USD"
          },
          "payoutCurrency": {
            "type": "string",
            "description": "Currency of the payout to the beneficiary.",
            "example": "NGN"
          },
          "rate": {
            "type": "number",
            "description": "Exchange rate applied for this quote",
            "example": 1450.75
          },
          "minimumAmount": {
            "type": "number",
            "description": "Minimum amount allowed for this quote",
            "example": 50
          },
          "maximumAmount": {
            "type": "number",
            "description": "Maximum amount allowed for this quote",
            "example": 10000
          },
          "minimumPayoutAmount": {
            "type": "number",
            "description": "Minimum payout amount allowed for this quote",
            "example": 72500
          },
          "maximumPayoutAmount": {
            "type": "number",
            "description": "Maximum payout amount allowed for this quote",
            "example": 14507500
          },
          "feeAmount": {
            "type": "number",
            "description": "Platform fee, in accountCurrency, that would apply based on the business's configured fee\npreference (zero if none configured). Informational only for now — not yet reflected in\nminimumAmount/maximumAmount or in the amount actually debited once the payment is created;\nwiring it into the settled amount is a tracked follow-up.\n",
            "example": 0.5
          },
          "feeInclusive": {
            "type": "boolean",
            "description": "The fee's intended relationship to the debited amount once wired into settlement (false =\nadditive, matching crypto withdrawals). Has no effect on the actual debited amount today.\n"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          }
        },
        "x-source-svc": "ledger"
      },
      "CashPaymentRail": {
        "description": "A single payment rail supported by a multi-rail bank account, and the routing code specific to\nthat rail (e.g. the ABA routing number for ACH/FedWire, or the BIC for SWIFT).\n",
        "type": "object",
        "required": [
          "rail",
          "routingCode"
        ],
        "properties": {
          "rail": {
            "type": "string",
            "enum": [
              "ACH",
              "FEDWIRE",
              "SWIFT"
            ]
          },
          "routingCode": {
            "type": "string",
            "example": "021000021"
          }
        },
        "x-source-svc": "ledger"
      },
      "CashPaymentTransaction": {
        "type": "object",
        "description": "Details of a cash payment transaction.",
        "required": [
          "id",
          "reference",
          "currency",
          "status",
          "payoutCurrency",
          "amount",
          "rate",
          "payoutAmount",
          "createdDate",
          "recipient"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "reference": {
            "type": "string",
            "description": "Reference for the cash payment transaction at initiation."
          },
          "accountTransactionId": {
            "type": "string",
            "description": "Identifier of the transaction on the account."
          },
          "currency": {
            "type": "string",
            "description": "Currency in which the account was debited.",
            "example": "USD"
          },
          "status": {
            "$ref": "#/components/schemas/TransactionStatus"
          },
          "payoutCurrency": {
            "type": "string",
            "description": "Currency in which the beneficiary will be paid out.",
            "example": "NGN"
          },
          "amount": {
            "type": "number",
            "description": "Amount transferred.",
            "example": 100
          },
          "rate": {
            "type": "number",
            "description": "Exchange rate applied for this transfer.",
            "example": 1450.75
          },
          "payoutAmount": {
            "type": "number",
            "description": "Amount paid out to the beneficiary in payout currency.",
            "example": 145075
          },
          "feeAmount": {
            "type": "number",
            "description": "Platform fee, in currency, that applied based on the business's configured fee preference\n(zero if none configured). Informational only for now — amount reflects only what\nonboard-orders actually settled and is not adjusted by this fee; wiring it into the\nactual debited amount is a tracked follow-up.\n",
            "example": 0.5
          },
          "feeInclusive": {
            "type": "boolean",
            "description": "The fee's intended relationship to amount once wired into settlement (false = additive,\nmatching crypto withdrawals). Has no effect on amount today.\n"
          },
          "providerReference": {
            "type": "string",
            "description": "Reference provided by the cash payment provider.",
            "example": "PROV123456"
          },
          "recipient": {
            "$ref": "#/components/schemas/BasicBeneficiaryInfo"
          },
          "createdDate": {
            "type": "string",
            "format": "date-time"
          }
        },
        "x-source-svc": "ledger"
      },
      "CashPaymentTransactionList": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Paging"
          },
          {
            "type": "object",
            "properties": {
              "content": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CashPaymentTransaction"
                }
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "CashSepaBankAccount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CashAccountDetails"
          },
          {
            "$ref": "#/components/schemas/BaseSepaBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CashSwiftBankAccount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CashAccountDetails"
          },
          {
            "$ref": "#/components/schemas/BaseSwiftBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CexProfileDto": {
        "required": [
          "businessCategory",
          "businessEmail",
          "businessFormationDate",
          "businessId",
          "businessIndustry",
          "businessLocation",
          "businessName",
          "businessRegCountry",
          "businessRegNo",
          "createdAt",
          "legalEntityType",
          "monthlyTransactionVolume",
          "operatesInRestrictedRegions",
          "taxCountry",
          "taxIdentificationNumber",
          "transactsOnBehalfOfThirdParties",
          "updatedAt"
        ],
        "type": "object",
        "properties": {
          "businessId": {
            "type": "string",
            "description": "General format for UUID",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5"
          },
          "businessName": {
            "type": "string",
            "description": "Registered name of business entity",
            "example": "Onabord exchange"
          },
          "businessEmail": {
            "type": "string",
            "format": "email",
            "description": "Business profile email address"
          },
          "businessLocation": {
            "type": "string",
            "description": "business full location address"
          },
          "productName": {
            "type": "string",
            "description": "Product name"
          },
          "productWebsiteUrl": {
            "type": "string",
            "description": "HTTP link to the product / business website",
            "format": "url"
          },
          "productDescription": {
            "type": "string",
            "description": "Description of product"
          },
          "businessPhoneNumber": {
            "pattern": "\\+[1-9][0-9]{0,3}[0-9]{7,14}",
            "type": "string",
            "description": "Phone number field."
          },
          "businessRegNo": {
            "type": "string",
            "description": "Business registration number (if any)"
          },
          "businessRegCountry": {
            "type": "string",
            "description": "Business country of registration (if any)"
          },
          "businessLogoUrl": {
            "type": "string",
            "description": "HTTP link to business image logo",
            "format": "url"
          },
          "businessFormationDate": {
            "type": "string",
            "description": "Date the business entity was formed",
            "format": "date"
          },
          "businessType": {
            "type": "string"
          },
          "businessIndustry": {
            "$ref": "#/components/schemas/BusinessIndustry"
          },
          "enabledProducts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "operatingAddress": {
            "type": "string",
            "description": "Operating address, when different from the registered address"
          },
          "taxCountry": {
            "type": "string",
            "description": "Tax residency country, Valid alpha2 country code",
            "minLength": 2,
            "maxLength": 2
          },
          "taxIdentificationNumber": {
            "type": "string",
            "description": "Business tax identification number (TIN)"
          },
          "legalEntityType": {
            "$ref": "#/components/schemas/LegalEntityType"
          },
          "businessCategory": {
            "$ref": "#/components/schemas/BusinessCategory"
          },
          "monthlyTransactionVolume": {
            "type": "string",
            "description": "Current monthly transaction volume bucket in USD"
          },
          "transactsOnBehalfOfThirdParties": {
            "type": "boolean",
            "description": "Whether the business transacts on behalf of other parties"
          },
          "operatesInRestrictedRegions": {
            "type": "boolean",
            "description": "Whether the business operates in or serves customers from restricted regions"
          },
          "restrictedRegions": {
            "type": "string",
            "description": "Free-text list of restricted regions, when applicable"
          },
          "ultimateBeneficialOwners": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UltimateBeneficialOwner"
            }
          },
          "directors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BusinessDirector"
            }
          },
          "authorisedSignatories": {
            "type": "array",
            "description": "BVNs of authorised signatories (Nigerian-registered entities)",
            "items": {
              "type": "string"
            }
          },
          "documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BusinessDocument"
            }
          },
          "declarationAcceptedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          }
        },
        "description": "CEX user profile object",
        "x-source-svc": "exchange"
      },
      "CexSignerDto": {
        "required": [
          "address",
          "businessId",
          "networkId"
        ],
        "type": "object",
        "properties": {
          "businessId": {
            "type": "string",
            "description": "General format for UUID",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5"
          },
          "networkId": {
            "type": "string",
            "description": "Gateway network ID",
            "example": "bsc_testnet"
          },
          "address": {
            "type": "string",
            "description": "Exchange signer address",
            "example": 1.2869144918162796e+48
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          }
        },
        "description": "Registered wallet address",
        "x-source-svc": "exchange"
      },
      "CreateACHBankAccountBeneficiary": {
        "description": "Use this when creating BeneficiaryACHBankAccount.",
        "allOf": [
          {
            "$ref": "#/components/schemas/CreateBeneficiaryRequest"
          },
          {
            "$ref": "#/components/schemas/BaseACHBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CreateBeneficiaryRequest": {
        "type": "object",
        "additionalProperties": false,
        "description": "create beneficiary for customer",
        "discriminator": {
          "propertyName": "beneficiaryType",
          "mapping": {
            "CreateLocalBankAccountBeneficiary": "#/components/schemas/CreateLocalBankAccountBeneficiary",
            "CreateSepaBankAccountBeneficiary": "#/components/schemas/CreateSepaBankAccountBeneficiary",
            "CreateACHBankAccountBeneficiary": "#/components/schemas/CreateACHBankAccountBeneficiary",
            "CreateSwiftBankAccountBeneficiary": "#/components/schemas/CreateSwiftBankAccountBeneficiary",
            "CreateMobileWalletAccountBeneficiary": "#/components/schemas/CreateMobileWalletAccountBeneficiary"
          }
        },
        "required": [
          "accountNumber",
          "accountName",
          "currency",
          "accountHolderType",
          "beneficiaryType",
          "paymentChannelId"
        ],
        "properties": {
          "accountNumber": {
            "description": "Beneficiary account number, for international payments like SEPA, this is the IBAN, and for Mobile Money, this is the phone number.\n",
            "type": "string"
          },
          "accountName": {
            "description": "Beneficiary account name",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "beneficiaryType": {
            "type": "string",
            "pattern": "^Create(LocalBank|SepaBank|ACHBank|SwiftBank|MobileWallet)AccountBeneficiary$",
            "description": "Discriminator value for beneficiary type. Possible values are:\n- CreateLocalBankAccountBeneficiary: Local bank transfer beneficiary, maps to BeneficiaryLocalBankAccount\n- CreateSepaBankAccountBeneficiary: SEPA instant and standard transfer beneficiary. Use\n    this for beneficiaries that will receive SEPA payments. Maps to BeneficiarySepaBankAccount\n- CreateACHBankAccountBeneficiary: ACH, FedWire and FedNow transfer beneficiary. Maps to BeneficiaryACHBankAccount\n- CreateSwiftBankAccountBeneficiary: SWIFT transfer beneficiary. Maps to BeneficiarySwiftBankAccount\n- CreateMobileWalletAccountBeneficiary: Use this for beneficiaries that will receive mobile wallet payments. \n   Maps to BeneficiaryMobileWalletAccount.\n"
          },
          "isThirdParty": {
            "type": "boolean",
            "description": "Flag to indicate if the beneficiary is a third party",
            "default": false
          },
          "accountHolderType": {
            "$ref": "#/components/schemas/AccountHolderType"
          },
          "paymentChannelId": {
            "type": "string",
            "description": "To get the payment channels available, call the /currencies endpoint.\nThe payment channel ID to be used for transfer to this beneficiary. The payment channel ID and the beneficiaryType are mutually exclusive.\nFor example BANK_TRANSFER_NIGERIA uses CreateLocalBankAccountBeneficiary\n"
          }
        },
        "x-source-svc": "ledger"
      },
      "CreateBuyOrderRequest": {
        "description": "BUY order request accepted by `POST /clients/orders/buy`. Carries buyer (sender)\ninformation for the pay-in and an optional `creditAccountId` for where the asset should be\ncredited. The pay-in mode (`DEPOSIT` / `INTERNAL_TRANSFER`) is **not** specified here —\nit's chosen on `POST /quotes` and inherited from the referenced `quoteId`, so a BUY order\ncan never be placed against a merchant whose payment account doesn't support the requested\nmode.\n",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseCreateOrderRequest"
          },
          {
            "type": "object",
            "properties": {
              "sender": {
                "$ref": "#/components/schemas/SenderInfo"
              },
              "creditAccountId": {
                "description": "Wallet account on the buyer's side that should receive the asset. When omitted, the buyer's default base-currency account is used.",
                "type": "string",
                "format": "uuid"
              }
            },
            "required": [
              "sender"
            ]
          }
        ],
        "x-source-svc": "orders"
      },
      "CreateCashDepositRequest": {
        "type": "object",
        "description": "Details required to create a cash deposit. The amount and currency must align with an existing quote.",
        "required": [
          "quoteId",
          "accountId",
          "amount",
          "reference"
        ],
        "properties": {
          "quoteId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of an existing cash deposit quote, retrieved from the cash deposit quote endpoint."
          },
          "accountId": {
            "type": "string",
            "format": "uuid",
            "description": "Account to credit for this deposit. Can be the main account ID or a sub-account ID."
          },
          "reference": {
            "type": "string",
            "description": "Alpha-numeric deposit reference, unique for this deposit.",
            "example": "CTR123456",
            "pattern": "^[a-zA-Z0-9_-]{8,48}$",
            "minLength": 8,
            "maxLength": 48
          },
          "amount": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true
          },
          "unitCurrency": {
            "type": "string",
            "description": "Should be same as one of pay-in or account currencies in the quote.\nDefaults to account currency if not provided.\n"
          },
          "senderInfo": {
            "$ref": "#/components/schemas/DepositSenderInfo"
          },
          "narration": {
            "type": "string",
            "description": "Notes to be included with the deposit."
          }
        },
        "x-source-svc": "ledger"
      },
      "CreateCashPaymentRequest": {
        "type": "object",
        "description": "Details required to create a cash payment. The amount and currency must align with an existing quote.",
        "required": [
          "quoteId",
          "accountId",
          "amount",
          "beneficiaryId",
          "reference",
          "paymentReason"
        ],
        "properties": {
          "quoteId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of an existing cash payment quote, retrieved from the cash payment quote endpoint."
          },
          "accountId": {
            "type": "string",
            "format": "uuid",
            "description": "Account to debit for this payment. Can be the main account ID or a sub-account ID."
          },
          "reference": {
            "type": "string",
            "description": "Alpha-numeric transfer reference, unique for this transfer.",
            "example": "CTR123456",
            "pattern": "^[a-zA-Z0-9_-]{8,48}$",
            "minLength": 8,
            "maxLength": 48
          },
          "amount": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true
          },
          "unitCurrency": {
            "type": "string",
            "description": "Should be same as one of payout or account currencies in the quote. \nDefaults to account currency if not provided.\n"
          },
          "beneficiaryId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of an existing beneficiary to whom the transfer will be made."
          },
          "paymentReason": {
            "type": "string",
            "description": "Reason for the payment, to be provided at the time of transfer creation."
          },
          "narration": {
            "type": "string",
            "description": "Notes to be included in the transfer."
          },
          "twoFaMethod": {
            "$ref": "#/components/schemas/User2FAMethod"
          }
        },
        "x-source-svc": "ledger"
      },
      "CreateCryptoBeneficiaryRequest": {
        "type": "object",
        "additionalProperties": false,
        "description": "create crypto beneficiary for customer",
        "required": [
          "address",
          "network"
        ],
        "properties": {
          "address": {
            "description": "beneficiary crypto address",
            "type": "string"
          },
          "name": {
            "description": "beneficiary name",
            "type": "string"
          },
          "network": {
            "description": "crypto network",
            "type": "string"
          },
          "memo": {
            "description": "memo for network optional",
            "type": "string"
          }
        },
        "x-source-svc": "ledger"
      },
      "CreateDepositQuoteRequest": {
        "type": "object",
        "required": [
          "payinCurrency",
          "accountCurrency",
          "amount"
        ],
        "properties": {
          "payinCurrency": {
            "type": "string",
            "example": "NGN",
            "description": "Currency the customer pays in."
          },
          "accountCurrency": {
            "type": "string",
            "example": "USD",
            "description": "Currency of the account to be credited."
          },
          "amount": {
            "type": "number",
            "example": 100,
            "minimum": 0,
            "exclusiveMinimum": true,
            "multipleOf": 0.01
          },
          "unitCurrency": {
            "type": "string",
            "description": "Should be same as one of pay-in or account currencies. Defaults to account currency if not provided.",
            "example": "USD"
          }
        },
        "x-source-svc": "ledger"
      },
      "CreateLocalBankAccountBeneficiary": {
        "description": "Use this when creating BeneficiaryLocalBankAccount.",
        "allOf": [
          {
            "$ref": "#/components/schemas/CreateBeneficiaryRequest"
          },
          {
            "$ref": "#/components/schemas/BaseLocalBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CreateMobileWalletAccountBeneficiary": {
        "description": "Use this when creating BeneficiaryMobileWalletAccount.",
        "allOf": [
          {
            "$ref": "#/components/schemas/CreateBeneficiaryRequest"
          },
          {
            "$ref": "#/components/schemas/BaseMobileWalletAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CreateOfframpAccountRequest": {
        "type": "object",
        "required": [
          "beneficiaryId",
          "payoutCurrency"
        ],
        "properties": {
          "payoutCurrency": {
            "type": "string",
            "description": "Currency in which payouts will be made to the beneficiary.",
            "example": "KES"
          },
          "beneficiaryId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of an existing beneficiary to be linked to the offramp account. \nShould be in the same currency as payoutCurrency.\n"
          }
        },
        "x-source-svc": "ledger"
      },
      "CreateOrderDto": {
        "required": [
          "tradeUrl"
        ],
        "type": "object",
        "properties": {
          "tradeUrl": {
            "type": "string",
            "description": "Http link for CEX to redirect to"
          }
        },
        "description": "Response for a successful create order command",
        "x-source-svc": "exchange"
      },
      "CreateOrderProductEnum": {
        "type": "string",
        "enum": [
          "WEB3",
          "CUSTODIAL"
        ],
        "x-source-svc": "exchange"
      },
      "CreateOrderRequest": {
        "description": "SELL order request. Canonical payload accepted by `POST /clients/orders` (and the `/sell` alias).\nThe order side is implied by the endpoint — `type` is kept for backward compatibility with\nexisting clients but is deprecated and ignored by the server. BUY orders use\n`CreateBuyOrderRequest` against `POST /clients/orders/buy`.\n",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseCreateOrderRequest"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "description": "Deprecated — the order side is determined by the endpoint. This field is retained so\nexisting clients that still send `type: SELL` continue to validate; the server ignores\nits value. New integrations should omit it. Use `POST /clients/orders/buy` for BUY.\n",
                "deprecated": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderType"
                  }
                ]
              },
              "recipient": {
                "$ref": "#/components/schemas/Recipient"
              }
            },
            "required": [
              "recipient"
            ]
          }
        ],
        "x-source-svc": "orders"
      },
      "CreateOrderTradeTypeEnum": {
        "type": "string",
        "enum": [
          "BUY",
          "SELL"
        ],
        "x-source-svc": "exchange"
      },
      "CreateSepaBankAccountBeneficiary": {
        "description": "Use this when creating BeneficiarySepaBankAccount.",
        "allOf": [
          {
            "$ref": "#/components/schemas/CreateBeneficiaryRequest"
          },
          {
            "$ref": "#/components/schemas/BaseSepaBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CreateSubAccountNumberRequest": {
        "type": "object",
        "description": "Request to generate a bank account number for a sub-account.",
        "required": [
          "accountName"
        ],
        "properties": {
          "accountName": {
            "type": "string",
            "description": "Name to assign to the generated bank account.",
            "example": "ACME Collections"
          }
        },
        "x-source-svc": "ledger"
      },
      "CreateSubAccountRequest": {
        "type": "object",
        "description": "Request to create a sub-account under a main account.\n",
        "required": [
          "accountId",
          "reference"
        ],
        "properties": {
          "accountId": {
            "type": "string",
            "format": "uuid",
            "description": "The main account ID under which the sub-account will be created."
          },
          "reference": {
            "type": "string",
            "description": "A unique reference for the sub-account. This must be unique across all sub-accounts.",
            "minLength": 6,
            "maxLength": 36,
            "pattern": "^[a-zA-Z0-9_-]{6,36}$"
          },
          "displayName": {
            "type": "string",
            "description": "An optional name for the sub-account."
          }
        },
        "x-source-svc": "ledger"
      },
      "CreateSwiftBankAccountBeneficiary": {
        "description": "Use this when creating BeneficiarySwiftBankAccount.",
        "allOf": [
          {
            "$ref": "#/components/schemas/CreateBeneficiaryRequest"
          },
          {
            "$ref": "#/components/schemas/BaseSwiftBankAccount"
          }
        ],
        "x-source-svc": "ledger"
      },
      "CreateTransferQuoteRequest": {
        "type": "object",
        "required": [
          "payoutCurrency",
          "accountCurrency",
          "amount"
        ],
        "properties": {
          "payoutCurrency": {
            "type": "string",
            "example": "NGN",
            "description": "Currency of the payout to the beneficiary."
          },
          "accountCurrency": {
            "type": "string",
            "example": "USD",
            "description": "Currency of the account to be debited."
          },
          "amount": {
            "type": "number",
            "example": 100,
            "minimum": 0,
            "exclusiveMinimum": true,
            "multipleOf": 0.01
          },
          "unitCurrency": {
            "type": "string",
            "description": "Should be same as one of payout or account currencies. Defaults to account currency if not provided.",
            "example": "USD"
          }
        },
        "x-source-svc": "ledger"
      },
      "CryptoBeneficiary": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "address",
          "id",
          "network"
        ],
        "properties": {
          "id": {
            "description": "Beneficiary identifier",
            "type": "string",
            "format": "uuid"
          },
          "address": {
            "description": "Beneficiary crypto address",
            "type": "string"
          },
          "network": {
            "description": "Beneficiary network",
            "type": "string"
          },
          "name": {
            "description": "Beneficiary name",
            "type": "string"
          },
          "memo": {
            "description": "Beneficiary network memo",
            "type": "string"
          }
        },
        "x-source-svc": "ledger"
      },
      "CryptoBeneficiaryList": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Paging"
          },
          {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "content": {
                "type": "array",
                "description": "List of Crypto Beneficiaries",
                "items": {
                  "$ref": "#/components/schemas/CryptoBeneficiary"
                }
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "CryptoDepositActivity": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TransactionActivity"
          },
          {
            "type": "object",
            "required": [
              "activityData"
            ],
            "properties": {
              "activityData": {
                "$ref": "#/components/schemas/AccountTransaction"
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "CryptoTransferDestination": {
        "type": "object",
        "additionalProperties": false,
        "description": "The destination details of the transfer. Either beneficiaryId or address must be provided.",
        "required": [
          "tokenNetworkCode"
        ],
        "properties": {
          "tokenNetworkCode": {
            "type": "string",
            "description": "The token network code for the transfer",
            "example": "BUSD_BSC"
          },
          "beneficiaryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the saved crypto beneficiary to which the transfer will be made."
          },
          "address": {
            "type": "string",
            "example": "0x7BCc5bCBa19DE3C903F062D8fB5fF8d9f818173E"
          },
          "memo": {
            "type": "string",
            "example": "405070",
            "description": "Optional, for networks that require memo."
          }
        },
        "x-source-svc": "ledger"
      },
      "CryptoTransferRequest": {
        "description": "Request object for crypto payment initiation request. The sourceAccountId can be a main account or sub-account.\n",
        "type": "object",
        "additionalProperties": false,
        "required": [
          "sourceAccountId",
          "amount",
          "destination"
        ],
        "properties": {
          "sourceAccountId": {
            "type": "string",
            "format": "uuid",
            "description": "The source account ID from which funds will be debited. This can be a main account or sub-account."
          },
          "amount": {
            "type": "number",
            "example": "100.00",
            "minimum": 0,
            "description": "Transaction amount, specified in the source account's currency."
          },
          "narration": {
            "type": "string",
            "description": "Notes"
          },
          "destination": {
            "$ref": "#/components/schemas/CryptoTransferDestination"
          },
          "twoFaMethod": {
            "$ref": "#/components/schemas/User2FAMethod"
          }
        },
        "x-source-svc": "ledger"
      },
      "CryptoWithdrawalActivity": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TransactionActivity"
          },
          {
            "type": "object",
            "required": [
              "activityData"
            ],
            "properties": {
              "activityData": {
                "$ref": "#/components/schemas/AccountTransaction"
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "CustomerAccountList": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "content": {
            "type": "array",
            "uniqueItems": true,
            "description": "List of accounts",
            "items": {
              "$ref": "#/components/schemas/Account"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "CustomerActionFields": {
        "required": [
          "customerId",
          "transactionId"
        ],
        "type": "object",
        "properties": {
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "transactionId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "x-source-svc": "transactions"
      },
      "CustomerActionRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CustomerActionFields"
          },
          {
            "type": "object",
            "properties": {
              "txHash": {
                "type": "string",
                "description": "Deposit transaction hash for deposit related transaction"
              },
              "permitSignature": {
                "type": "string",
                "description": "Permit data signature for permit related approval"
              },
              "flag": {
                "type": "string"
              },
              "paymentReceiptUploadId": {
                "type": "string",
                "description": "Upload ID for receipt uploaded on storage bucket"
              }
            }
          }
        ],
        "x-source-svc": "transactions"
      },
      "CustomerConfirmationRequest": {
        "required": [
          "customerId",
          "transactionId",
          "verificationData"
        ],
        "type": "object",
        "properties": {
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "transactionId": {
            "type": "string",
            "format": "uuid"
          },
          "verificationData": {
            "$ref": "#/components/schemas/VerificationData"
          }
        },
        "x-source-svc": "transactions"
      },
      "CustomerInitiateOrderRequestV2": {
        "type": "object",
        "properties": {
          "offerId": {
            "type": "string",
            "description": "id of offer to make unit reservation from"
          },
          "offerToken": {
            "type": "string",
            "description": "Token used to access private ads."
          },
          "unitAmount": {
            "type": "string",
            "description": "unit to be reserved"
          },
          "rate": {
            "type": "number",
            "description": "rate to make reservation at"
          },
          "fiatAmount": {
            "type": "number",
            "description": "fiat equivalent of reserved unit"
          },
          "tradeRequestBroadcastId": {
            "type": "string",
            "format": "uuid"
          },
          "paymentMethodId": {
            "type": "string"
          },
          "paymentChannelId": {
            "type": "string"
          },
          "buyerPaymentMethodId": {
            "type": "string"
          },
          "customerWallet": {
            "$ref": "#/components/schemas/TransactionsSvcWalletDTO"
          },
          "apiKey": {
            "type": "string"
          },
          "thirdPartyOrderTradeId": {
            "type": "string"
          },
          "cexOrderId": {
            "type": "string"
          }
        },
        "required": [
          "offerId",
          "unitAmount"
        ],
        "x-source-svc": "transactions"
      },
      "DefaultConfigurationResponse": {
        "type": "object",
        "required": [
          "kyc",
          "noKyc"
        ],
        "properties": {
          "kyc": {
            "$ref": "#/components/schemas/TransactionLimitResponse"
          },
          "noKyc": {
            "$ref": "#/components/schemas/TransactionLimitResponse"
          }
        },
        "x-source-svc": "exchange"
      },
      "DeployLiquidityPoolCommand": {
        "required": [
          "cexSigner",
          "networkId"
        ],
        "type": "object",
        "properties": {
          "networkId": {
            "type": "string",
            "description": "ID for network",
            "example": "bsc_testnet"
          },
          "cexSigner": {
            "type": "string",
            "description": "CEX signer wallet address",
            "example": 0
          }
        },
        "x-source-svc": "exchange"
      },
      "DepositSenderInfo": {
        "type": "object",
        "description": "Identifies the party sending fiat for the deposit. When omitted on a deposit request, it is constructed from the business details.",
        "required": [
          "firstName",
          "lastName",
          "email"
        ],
        "properties": {
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "phoneNumber": {
            "type": "string",
            "pattern": "^\\+[1-9][0-9]{0,3}[0-9]{7,14}$"
          }
        },
        "x-source-svc": "ledger"
      },
      "ErrorCodes": {
        "type": "string",
        "enum": [
          "INVALID_OTP",
          "EXPIRED_OTP",
          "OTP_ATTEMPTS_EXCEEDED",
          "OTP_NOT_ALLOWED",
          "WRONG_USER_APP",
          "MAX_ATTEMPTS_REACHED",
          "ADDRESS_MISMATCH",
          "SIGNATURE_ERROR",
          "ADDRESS_NOT_FOUND",
          "USER_NOT_FOUND",
          "INVALID_CREDENTIALS",
          "INVALID_AUTH_PAYLOAD",
          "NOT_ALLOWED",
          "KYC_NOT_FOUND",
          "PHONE_NUMBER_TAKEN",
          "PROFILE_INCOMPLETE",
          "DUPLICATE_ADDRESS",
          "ALREADY_BLACKLISTED",
          "ACCOUNT_RESTRICTED",
          "INVALID_PASSKEY_SESSION",
          "PASSKEY_NOT_REGISTERED",
          "ACCOUNT_IN_DELETION_MODE",
          "RE_AUTHENTICATE",
          "INVALID_KYC_SESSION",
          "ADDITIONAL_VERIFICATION_REQUIRED",
          "USER_ALREADY_VERIFIED"
        ],
        "x-source-svc": "users"
      },
      "ErrorMessageDto": {
        "description": "Default error object for services. This gives consistent error object that all services may use.",
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code",
            "example": "UNKNOWN_ERROR"
          },
          "message": {
            "type": "string",
            "description": "Descriptive error message",
            "example": "Request could not be completed due to an error"
          },
          "data": {
            "type": "object",
            "description": "Additional data for this error message.",
            "additionalProperties": true,
            "properties": {}
          }
        },
        "x-common-model": "ErrorMessageDto"
      },
      "ExchangeOrderDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "cexOrderId": {
            "minimum": 1,
            "type": "integer"
          },
          "apiKey": {
            "type": "string"
          },
          "lastWebhookSentAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "orderId": {
            "type": "string",
            "format": "uuid"
          },
          "reference": {
            "type": "string",
            "example": "0165359005113074501885"
          },
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "customerName": {
            "type": "string",
            "example": "John Doe"
          },
          "offer": {
            "$ref": "#/components/schemas/OrderOfferDTO"
          },
          "escrowAddress": {
            "type": "string",
            "description": "Escrow address",
            "example": 1.2869144918162796e+48
          },
          "paymentChannelId": {
            "type": "string",
            "example": "BANK_TRANSFER_NIGERIA"
          },
          "paymentMethod": {
            "type": "object",
            "properties": {}
          },
          "buyerPaymentMethod": {
            "type": "object",
            "properties": {}
          },
          "customerWallet": {
            "$ref": "#/components/schemas/WalletDTO"
          },
          "tokenAddress": {
            "type": "string",
            "example": 0
          },
          "status": {
            "type": "string",
            "enum": [
              "INITIATED",
              "DEPOSITED",
              "CONFIRMED",
              "COMPLETED",
              "PENDING",
              "CANCELLED",
              "IN_DISPUTE",
              "AWAITING_ACCEPTANCE"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "initiatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "depositedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "confirmedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "cancelledAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "lockHash": {
            "type": "string",
            "default": "null"
          },
          "confirmationHash": {
            "type": "string",
            "default": "null"
          },
          "cancellationHash": {
            "type": "string",
            "default": "null"
          }
        },
        "x-source-svc": "exchange"
      },
      "ExchangeOrdersResponse": {
        "type": "object",
        "properties": {
          "orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExchangeOrderDTO"
            }
          },
          "pageNumber": {
            "type": "integer"
          },
          "pageSize": {
            "type": "integer"
          },
          "totalPages": {
            "type": "integer"
          },
          "totalOrders": {
            "type": "integer"
          }
        },
        "x-source-svc": "exchange"
      },
      "Fee": {
        "required": [
          "asFiat",
          "asToken"
        ],
        "type": "object",
        "properties": {
          "asToken": {
            "type": "string",
            "pattern": "([0-9]*[.])?[0-9]+",
            "example": "1000.0"
          },
          "asFiat": {
            "type": "number"
          }
        },
        "x-source-svc": "transactions"
      },
      "FeeConfig": {
        "type": "object",
        "properties": {
          "tradeType": {
            "$ref": "#/components/schemas/OfferType"
          },
          "tradeMode": {
            "$ref": "#/components/schemas/TradeMode"
          },
          "base": {
            "type": "number",
            "description": "Flat fee that must be paid for irrespective of percentage fee"
          },
          "tradePercentage": {
            "type": "number",
            "description": "Fee described as a percentage of the trade"
          },
          "cap": {
            "type": "number",
            "description": "Maximum value a fee is allowed to have"
          },
          "network": {
            "type": "string",
            "description": "The network this config should be applied to(There will always be at least\none fee config, that config will have network value of `default`\n"
          }
        },
        "required": [
          "base",
          "tradePercentage",
          "network"
        ],
        "x-source-svc": "exchange"
      },
      "FiatCurrency": {
        "required": [
          "isoCode",
          "logo",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Offical name of a currency"
          },
          "logo": {
            "type": "string",
            "description": "URL to fiat logo"
          },
          "isoCode": {
            "type": "string",
            "description": "ISO 4217 (alphabetic) for currency"
          },
          "symbol": {
            "type": "string",
            "description": "Alias to isoCode"
          },
          "unicodeSymbol": {
            "type": "string",
            "description": "Unicode symbol for fiat"
          },
          "transactionLimitsConfig": {
            "$ref": "#/components/schemas/DefaultConfigurationResponse"
          }
        },
        "x-source-svc": "exchange"
      },
      "FulfillOrderAs": {
        "type": "string",
        "enum": [
          "BUSINESS",
          "PERSONAL"
        ],
        "x-source-svc": "exchange"
      },
      "FullOrderStatus": {
        "type": "string",
        "enum": [
          "PENDING_INIT",
          "ASSET_LOCKED",
          "PAYMENT_INIT",
          "PAYMENT_COMPLETED",
          "FAILED",
          "COMPLETED"
        ],
        "x-source-svc": "orders"
      },
      "FundingAddress": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tokenInfo",
          "address"
        ],
        "properties": {
          "address": {
            "type": "string",
            "description": "The deposit address",
            "example": "0x43e4715ae093a4c86b5ecddb52216c4f879e9672"
          },
          "memo": {
            "type": "string",
            "description": "Optional, for networks that support memo."
          },
          "tokenInfo": {
            "$ref": "#/components/schemas/TokenNetwork"
          }
        },
        "x-source-svc": "ledger"
      },
      "FundingAddressResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "available"
        ],
        "properties": {
          "available": {
            "type": "boolean",
            "description": "Indicates if the funding address has been generated and is available for use.\nWhen false, the fundingAddress field will be null, and the client can create the address.\nWhen true, the fundingAddress field will contain the deposit address details.\n",
            "default": false
          },
          "fundingAddress": {
            "$ref": "#/components/schemas/FundingAddress"
          }
        },
        "x-source-svc": "ledger"
      },
      "GetExchangeOrdersExternalStatusesEnum": {
        "type": "string",
        "enum": [
          "INITIATED",
          "DEPOSITED",
          "CONFIRMED",
          "COMPLETED",
          "PENDING",
          "CANCELLED",
          "IN_DISPUTE",
          "AWAITING_ACCEPTANCE"
        ],
        "x-source-svc": "exchange"
      },
      "GetExchangeOrdersExternalTransactionTypeEnum": {
        "type": "string",
        "enum": [
          "ONRAMP",
          "OFFRAMP"
        ],
        "x-source-svc": "exchange"
      },
      "InitTradeProductEnum": {
        "type": "string",
        "enum": [
          "WEB3",
          "CUSTODIAL"
        ],
        "x-source-svc": "exchange"
      },
      "InitTradeTradeTypeEnum": {
        "type": "string",
        "enum": [
          "BUY",
          "SELL"
        ],
        "x-source-svc": "exchange"
      },
      "InstantPayProcessingStatus": {
        "type": "string",
        "enum": [
          "PENDING_IP_REPORT",
          "IN_PROGRESS",
          "FAILURE",
          "SUCCESS"
        ],
        "x-source-svc": "transactions"
      },
      "IntegrationProduct": {
        "type": "string",
        "enum": [
          "WEB3",
          "CUSTODIAL"
        ],
        "x-source-svc": "exchange"
      },
      "InternalTransfer": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "reference",
          "sourceAccountId",
          "destinationAccountId",
          "amount",
          "currency",
          "status",
          "createdDate"
        ],
        "properties": {
          "reference": {
            "type": "string",
            "description": "Transfer reference",
            "example": "ITR123456"
          },
          "sourceAccountId": {
            "type": "string",
            "format": "uuid",
            "description": "Source account ID"
          },
          "sourceAccountRef": {
            "type": "string",
            "description": "The transaction reference on the source account."
          },
          "destinationAccountId": {
            "type": "string",
            "format": "uuid",
            "description": "Destination account ID"
          },
          "destinationAccountRef": {
            "type": "string",
            "description": "The transaction reference on the destination account."
          },
          "amount": {
            "type": "number",
            "description": "Transfer amount",
            "example": 100
          },
          "currency": {
            "type": "string",
            "description": "Transfer currency",
            "example": "USD"
          },
          "status": {
            "$ref": "#/components/schemas/TransactionStatus"
          },
          "createdDate": {
            "type": "string",
            "format": "date-time",
            "description": "Transfer creation date"
          },
          "description": {
            "type": "string",
            "description": "Transfer description"
          }
        },
        "x-source-svc": "ledger"
      },
      "InternalTransferActivity": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TransactionActivity"
          },
          {
            "type": "object",
            "required": [
              "activityData"
            ],
            "properties": {
              "activityData": {
                "$ref": "#/components/schemas/InternalTransfer"
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "InternalTransferRequest": {
        "type": "object",
        "additionalProperties": false,
        "description": "Internal request to transfer funds between two sub-accounts of between main account and sub-account.\nThe accounts must have the same currency.\n",
        "required": [
          "sourceAccountId",
          "destinationAccountId",
          "amount"
        ],
        "properties": {
          "sourceAccountId": {
            "type": "string",
            "format": "uuid",
            "description": "Source account ID, could be the main account or another sub-account"
          },
          "destinationAccountId": {
            "type": "string",
            "format": "uuid",
            "description": "Destination account ID, could be the main account or another sub-account"
          },
          "reference": {
            "type": "string",
            "description": "Alpha-numeric transfer reference",
            "example": "ITR123456",
            "pattern": "^[a-zA-Z0-9_-]{8,32}$",
            "minLength": 8,
            "maxLength": 32
          },
          "amount": {
            "type": "number",
            "description": "Transfer amount",
            "example": 100,
            "minimum": 0,
            "exclusiveMinimum": true
          },
          "notes": {
            "type": "string",
            "description": "Transfer description"
          }
        },
        "x-source-svc": "ledger"
      },
      "KycJobStatus": {
        "type": "string",
        "enum": [
          "VERIFIED",
          "UNVERIFIED",
          "IN_PROGRESS",
          "AWAITING_INPUT",
          "FAILED_VERIFICATION",
          "REVIEW_REQUIRED",
          "VERIFICATION_TIMEOUT"
        ],
        "x-source-svc": "users"
      },
      "KycNameChangeHistoryDto": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "description": "Name change reason"
          },
          "actor": {
            "type": "string",
            "description": "Name of admin that initiated the change"
          },
          "previousName": {
            "type": "string",
            "description": "Previous full name"
          },
          "currentName": {
            "type": "string",
            "description": "Current full name"
          },
          "evidenceUrl": {
            "type": "string",
            "format": "url",
            "description": "Url link of change request evidence"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "reason",
          "actor",
          "previousName",
          "currentName",
          "timestamp"
        ],
        "x-source-svc": "users"
      },
      "LedgerSvcBlockchainNetwork": {
        "type": "object",
        "description": "Details of blockchain network",
        "required": [
          "name",
          "id",
          "blockTime",
          "confirmations",
          "coinName",
          "coinSymbol"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Simple identifier to identify the network",
            "example": "ETH"
          },
          "name": {
            "type": "string",
            "description": "Descriptive name for network",
            "example": "Ethereum"
          },
          "blockTime": {
            "type": "integer",
            "format": "int32",
            "description": "Average time to generate new blocks in seconds.",
            "minimum": 1,
            "example": 15
          },
          "confirmations": {
            "type": "number",
            "description": "Minimum number of confirmations needed for a transaction to be confirmed.\nTotal wait time for an asset can be computed as  blockTime * confirmations.\n",
            "minimum": 1,
            "example": 8
          },
          "coinName": {
            "type": "string",
            "example": "Ether",
            "description": "name of the network's native coin"
          },
          "coinSymbol": {
            "type": "string",
            "description": "symbol of the network's native coin",
            "example": "ETH"
          },
          "supportsMemo": {
            "type": "boolean",
            "description": "Indicates if the network has memo support.",
            "default": "false"
          },
          "alias": {
            "type": "string",
            "description": "The network alias",
            "example": "BEP20"
          },
          "addressExplorerUrl": {
            "type": "string",
            "format": "url",
            "example": "https://etherscan.io/address",
            "description": "Base URL path of an address on the blockchain explorer. Full URL can be obtained by appending the address to this.\n"
          },
          "txExplorerUrl": {
            "type": "string",
            "format": "url",
            "example": "https://etherscan.io/tx",
            "description": "Base URL Path of a transaction on the blockchain explorer. Full URL can be obtained by appending the TX hash to this URL.\n"
          }
        },
        "x-source-svc": "ledger"
      },
      "LegalEntityType": {
        "type": "string",
        "description": "Legal structure of the business entity (KYB \"Business type (Entity)\")",
        "enum": [
          "LIMITED_LIABILITY_COMPANY",
          "PUBLIC_COMPANY",
          "SOLE_PROPRIETORSHIP",
          "PARTNERSHIP",
          "CORPORATION",
          "TRUST",
          "PRIVATE_FOUNDATION",
          "CHARITY",
          "NON_PROFIT_ORGANIZATION",
          "PUBLIC_AGENCY"
        ],
        "x-source-svc": "exchange"
      },
      "LiquidityPoolBalanceDto": {
        "required": [
          "assetSymbol",
          "balance",
          "isNative",
          "networkId"
        ],
        "type": "object",
        "properties": {
          "networkId": {
            "type": "string"
          },
          "assetSymbol": {
            "type": "string"
          },
          "balance": {
            "type": "string"
          },
          "balanceInUsd": {
            "type": "number"
          },
          "tokenAddress": {
            "type": "string"
          },
          "isNative": {
            "type": "boolean"
          }
        },
        "x-source-svc": "exchange"
      },
      "LiquidityPoolDto": {
        "required": [
          "businessId",
          "cexSigner",
          "createdAt",
          "networkId",
          "updatedAt"
        ],
        "type": "object",
        "properties": {
          "networkId": {
            "type": "string",
            "description": "ID for network",
            "example": "bsc_testnet"
          },
          "cexSigner": {
            "type": "string",
            "description": "CEX signer wallet address",
            "example": 0
          },
          "businessId": {
            "type": "string",
            "description": "CEX profile business ID"
          },
          "address": {
            "type": "string",
            "description": "CEX liquidity pool address",
            "example": 0
          },
          "poolIndex": {
            "type": "number",
            "description": "on-chain index of liquidity pool account"
          },
          "initHash": {
            "type": "string",
            "description": "contract creation transaction hash"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-faker": "date.recent"
          }
        },
        "x-source-svc": "exchange"
      },
      "Metadata": {
        "type": "object",
        "description": "Metadata object, for extending properties of an object.",
        "required": [
          "name",
          "value"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "name of metadata",
            "example": "meta_name"
          },
          "value": {
            "type": "string",
            "description": "any value to represent"
          }
        },
        "x-common-model": "Metadata"
      },
      "MobileMoneyRecipient": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Recipient"
          },
          {
            "type": "object",
            "properties": {
              "network": {
                "type": "string",
                "description": "The mobile network",
                "minLength": 2
              },
              "countryCode": {
                "type": "string",
                "description": "the country ISO CODE 3166-2 where the mobile money account is registered.",
                "minLength": 2,
                "maxLength": 2
              }
            },
            "required": [
              "phoneNumber",
              "countryCode"
            ]
          }
        ],
        "x-source-svc": "orders"
      },
      "OfferBehavior": {
        "type": "string",
        "description": "Offer rate behavior",
        "enum": [
          "FIXED",
          "FLEXIBLE"
        ],
        "x-source-svc": "exchange"
      },
      "OfferDto": {
        "type": "object",
        "properties": {
          "offerId": {
            "type": "string",
            "description": "external offer id"
          },
          "userId": {
            "type": "string",
            "description": "userId of the merchant that created offer"
          },
          "network": {
            "type": "string",
            "description": "id of network on which the asset is on"
          },
          "tokenSymbol": {
            "type": "string",
            "description": "symbol of token been sold or bought",
            "example": "BNB"
          },
          "fiatSymbol": {
            "type": "string",
            "description": "ISO 4217 code for fiat currency",
            "example": "USD, NGN"
          },
          "offerType": {
            "$ref": "#/components/schemas/OfferType"
          },
          "behaviour": {
            "$ref": "#/components/schemas/OfferBehavior"
          },
          "totalUnit": {
            "type": "number",
            "description": "offer total unit in fiat",
            "example": 5000
          },
          "tradedUnit": {
            "type": "number",
            "description": "units that has been traded out of the total unit",
            "example": 5000
          },
          "lockedUnit": {
            "type": "number",
            "description": "units that has been locked out of the offer total unit",
            "example": 5000
          },
          "rate": {
            "type": "number",
            "description": "price rate to buy or sell",
            "example": 500
          },
          "rateCap": {
            "type": "number",
            "description": "The minimum (for onramp) or maximum (for offramp) rate allowed for this ad if it's a flexible ad",
            "example": 500
          },
          "paymentMethods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferPaymentMethod"
            }
          },
          "paymentChannels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferPaymentChannel"
            }
          },
          "flexibleOfferMargin": {
            "type": "number",
            "description": "offer margin in percentage allowed for flexible offers",
            "example": 10
          },
          "status": {
            "$ref": "#/components/schemas/OfferStatus"
          },
          "partnerDisplayName": {
            "type": "string",
            "description": "Partner's display name"
          },
          "partnerRating": {
            "type": "number",
            "example": -1
          },
          "partnerStats": {
            "$ref": "#/components/schemas/PartnerStats"
          },
          "statusReason": {
            "type": "string",
            "description": "the reason for the current status - mostly applied to non active or offline status"
          },
          "tradeMinimumLimit": {
            "type": "number",
            "description": "minimum trade limit"
          },
          "tradeMaximumLimit": {
            "type": "number",
            "description": "maximum trade limit"
          },
          "previewImageUrl": {
            "type": "string",
            "description": "preview image url"
          },
          "maxTimeout": {
            "type": "object",
            "properties": {
              "deposit": {
                "type": "integer",
                "description": "timeout for buyer to pay in seconds",
                "example": 1440
              },
              "confirmation": {
                "type": "integer",
                "description": "timeout for seller to confirm in seconds",
                "example": 600
              }
            }
          },
          "feeConfig": {
            "$ref": "#/components/schemas/FeeConfig"
          },
          "feeConfigs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeeConfig"
            }
          },
          "tradeCriteria": {
            "$ref": "#/components/schemas/TradeCriteria"
          },
          "autoResponseMessage": {
            "type": "string",
            "description": "auto response message to be shown to customers"
          },
          "adNote": {
            "type": "string",
            "description": "note to be shown to the customer"
          },
          "tradeRequestBroadcastId": {
            "type": "string",
            "description": "trade request broadcast id"
          },
          "isPrivate": {
            "type": "boolean",
            "description": "Indicates if an ad should be hidden from the public and treated as a private ad."
          },
          "isRateHidden": {
            "type": "boolean",
            "description": "Indicates if rate is hidden"
          },
          "instantPayEnabled": {
            "type": "boolean",
            "description": "Is instant pay enabled for offer",
            "default": false
          },
          "instantPayLimit": {
            "type": "number",
            "description": "Max tradeable by instant pay on this add. (In fiat value)"
          },
          "instantPayMinimum": {
            "type": "number",
            "description": "minimum tradeable by instant pay on this add. (In fiat value)"
          },
          "instantPayAccountId": {
            "type": "string",
            "description": "Account id of instantpay. Useful especially for onramp payins"
          },
          "customPayinProvider": {
            "type": "string",
            "description": "Provider for custom payin (ONRAMP only)"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "editedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "partnerLastActiveAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "primaryEscrowAddress": {
            "type": "string"
          },
          "fiatTradeMinimumLimit": {
            "type": "number"
          },
          "fiatTradeMaximumLimit": {
            "type": "number"
          },
          "maxFiatLimit": {
            "type": "number",
            "description": "Maximum fiat limit consideration available units"
          },
          "availableUnits": {
            "type": "number",
            "description": "Calculated available units when locked  and traded units are deducted"
          },
          "fulfillOrderAs": {
            "$ref": "#/components/schemas/FulfillOrderAs"
          },
          "autoRefillEnabled": {
            "type": "boolean",
            "description": "Flag indicating if auto refill is enabled for this ad"
          },
          "autoRefillConfig": {
            "$ref": "#/components/schemas/AutoRefillConfig"
          }
        },
        "required": [
          "offerId",
          "userId",
          "network",
          "tokenSymbol",
          "fiatSymbol",
          "offerType",
          "behaviour",
          "totalUnit",
          "tradedUnit",
          "lockedUnit",
          "rate",
          "paymentMethods",
          "status",
          "availableUnits",
          "maxFiatLimit",
          "tradeMinimumLimit",
          "tradeMaximumLimit",
          "createdAt",
          "updatedAt",
          "editedAt",
          "partnerDisplayName",
          "partnerRating",
          "partnerLastActiveAt"
        ],
        "x-source-svc": "exchange"
      },
      "OfferLimitsDto": {
        "type": "object",
        "required": [
          "fiatSymbol",
          "tokenSymbol",
          "minTokens",
          "maxTokens"
        ],
        "properties": {
          "fiatSymbol": {
            "type": "string"
          },
          "tokenSymbol": {
            "type": "string"
          },
          "network": {
            "type": "string"
          },
          "offerType": {
            "$ref": "#/components/schemas/OffersSvcOfferType"
          },
          "minTokens": {
            "type": "number"
          },
          "maxTokens": {
            "type": "number"
          },
          "minFiat": {
            "type": "number"
          },
          "maxFiat": {
            "type": "number"
          }
        },
        "x-source-svc": "offers"
      },
      "OfferPaymentChannel": {
        "type": "object",
        "properties": {
          "channelId": {
            "type": "string"
          },
          "channelName": {
            "type": "string"
          },
          "channelType": {
            "type": "string"
          },
          "color": {
            "$ref": "#/components/schemas/OfferPaymentChannelColor"
          }
        },
        "x-source-svc": "exchange"
      },
      "OfferPaymentChannelColor": {
        "type": "object",
        "properties": {
          "bg": {
            "type": "string"
          },
          "fg": {
            "type": "string"
          }
        },
        "required": [
          "bg",
          "fg"
        ],
        "x-source-svc": "exchange"
      },
      "OfferPaymentMethod": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/OfferPaymentChannel"
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              }
            }
          }
        ],
        "x-source-svc": "exchange"
      },
      "OfferStatus": {
        "type": "string",
        "description": "the current offer status",
        "default": "ACTIVE",
        "enum": [
          "PENDING",
          "ACTIVE",
          "OFFLINE",
          "LOW_BALANCE",
          "LIMIT_REACHED"
        ],
        "x-source-svc": "exchange"
      },
      "OfferType": {
        "type": "string",
        "enum": [
          "ONRAMP",
          "OFFRAMP"
        ],
        "x-source-svc": "exchange"
      },
      "OfferTypeQueryParamOfferTypeEnum": {
        "type": "string",
        "enum": [
          "ONRAMP",
          "OFFRAMP"
        ],
        "x-source-svc": "exchange"
      },
      "OffersSvcAutoRefillConfig": {
        "type": "object",
        "required": [
          "threshold",
          "amount"
        ],
        "properties": {
          "threshold": {
            "type": "number",
            "description": "If ad available unit go belows this value the system would trigger a auto refill"
          },
          "amount": {
            "type": "number",
            "description": "The token amount to refill the ad with"
          }
        },
        "x-source-svc": "offers"
      },
      "OffersSvcFeeConfig": {
        "type": "object",
        "properties": {
          "tradeType": {
            "$ref": "#/components/schemas/OffersSvcOfferType"
          },
          "tradeMode": {
            "$ref": "#/components/schemas/OffersSvcTradeMode"
          },
          "base": {
            "type": "number",
            "description": "Flat fee that must be paid for irrespective of percentage fee"
          },
          "tradePercentage": {
            "type": "number",
            "description": "Fee described as a percentage of the trade"
          },
          "cap": {
            "type": "number",
            "description": "Maximum value a fee is allowed to have"
          },
          "network": {
            "type": "string",
            "description": "The network this config should be applied to(There will always be at least\none fee config, that config will have network value of `default`\n"
          }
        },
        "required": [
          "base",
          "tradePercentage",
          "network"
        ],
        "x-source-svc": "offers"
      },
      "OffersSvcFulfillOrderAs": {
        "type": "string",
        "enum": [
          "BUSINESS",
          "PERSONAL"
        ],
        "x-source-svc": "offers"
      },
      "OffersSvcOfferBehavior": {
        "type": "string",
        "description": "Offer rate behavior",
        "enum": [
          "FIXED",
          "FLEXIBLE"
        ],
        "x-source-svc": "offers"
      },
      "OffersSvcOfferDto": {
        "type": "object",
        "properties": {
          "offerId": {
            "type": "string",
            "description": "external offer id"
          },
          "userId": {
            "type": "string",
            "description": "userId of the merchant that created offer"
          },
          "network": {
            "type": "string",
            "description": "id of network on which the asset is on"
          },
          "tokenSymbol": {
            "type": "string",
            "description": "symbol of token been sold or bought",
            "example": "BNB"
          },
          "fiatSymbol": {
            "type": "string",
            "description": "ISO 4217 code for fiat currency",
            "example": "USD, NGN"
          },
          "offerType": {
            "$ref": "#/components/schemas/OffersSvcOfferType"
          },
          "behaviour": {
            "$ref": "#/components/schemas/OffersSvcOfferBehavior"
          },
          "totalUnit": {
            "type": "number",
            "description": "offer total unit in fiat",
            "example": 5000
          },
          "tradedUnit": {
            "type": "number",
            "description": "units that has been traded out of the total unit",
            "example": 5000
          },
          "lockedUnit": {
            "type": "number",
            "description": "units that has been locked out of the offer total unit",
            "example": 5000
          },
          "rate": {
            "type": "number",
            "description": "price rate to buy or sell",
            "example": 500
          },
          "rateCap": {
            "type": "number",
            "description": "The minimum (for onramp) or maximum (for offramp) rate allowed for this ad if it's a flexible ad",
            "example": 500
          },
          "paymentMethods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OffersSvcOfferPaymentMethod"
            }
          },
          "paymentChannels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OffersSvcOfferPaymentChannel"
            }
          },
          "flexibleOfferMargin": {
            "type": "number",
            "description": "offer margin in percentage allowed for flexible offers",
            "example": 10
          },
          "status": {
            "$ref": "#/components/schemas/OffersSvcOfferStatus"
          },
          "partnerDisplayName": {
            "type": "string",
            "description": "Partner's display name"
          },
          "partnerRating": {
            "type": "number",
            "example": -1
          },
          "partnerStats": {
            "$ref": "#/components/schemas/OffersSvcPartnerStats"
          },
          "statusReason": {
            "type": "string",
            "description": "the reason for the current status - mostly applied to non active or offline status"
          },
          "tradeMinimumLimit": {
            "type": "number",
            "description": "minimum trade limit"
          },
          "tradeMaximumLimit": {
            "type": "number",
            "description": "maximum trade limit"
          },
          "previewImageUrl": {
            "type": "string",
            "description": "preview image url"
          },
          "maxTimeout": {
            "type": "object",
            "properties": {
              "deposit": {
                "type": "integer",
                "description": "timeout for buyer to pay in seconds",
                "example": 1440
              },
              "confirmation": {
                "type": "integer",
                "description": "timeout for seller to confirm in seconds",
                "example": 600
              }
            }
          },
          "feeConfig": {
            "$ref": "#/components/schemas/OffersSvcFeeConfig"
          },
          "feeConfigs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OffersSvcFeeConfig"
            }
          },
          "tradeCriteria": {
            "$ref": "#/components/schemas/OffersSvcTradeCriteria"
          },
          "autoResponseMessage": {
            "type": "string",
            "description": "auto response message to be shown to customers"
          },
          "adNote": {
            "type": "string",
            "description": "note to be shown to the customer"
          },
          "tradeRequestBroadcastId": {
            "type": "string",
            "description": "trade request broadcast id"
          },
          "isPrivate": {
            "type": "boolean",
            "description": "Indicates if an ad should be hidden from the public and treated as a private ad."
          },
          "isRateHidden": {
            "type": "boolean",
            "description": "Indicates if rate is hidden"
          },
          "instantPayEnabled": {
            "type": "boolean",
            "description": "Is instant pay enabled for offer",
            "default": false
          },
          "instantPayLimit": {
            "type": "number",
            "description": "Max tradeable by instant pay on this add. (In fiat value)"
          },
          "instantPayMinimum": {
            "type": "number",
            "description": "minimum tradeable by instant pay on this add. (In fiat value)"
          },
          "instantPayAccountId": {
            "type": "string",
            "description": "Account id of instantpay. Useful especially for onramp payins"
          },
          "customPayinProvider": {
            "type": "string",
            "description": "Provider for custom payin (ONRAMP only)"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "editedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "partnerLastActiveAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "primaryEscrowAddress": {
            "type": "string"
          },
          "fiatTradeMinimumLimit": {
            "type": "number"
          },
          "fiatTradeMaximumLimit": {
            "type": "number"
          },
          "maxFiatLimit": {
            "type": "number",
            "description": "Maximum fiat limit consideration available units"
          },
          "availableUnits": {
            "type": "number",
            "description": "Calculated available units when locked  and traded units are deducted"
          },
          "fulfillOrderAs": {
            "$ref": "#/components/schemas/OffersSvcFulfillOrderAs"
          },
          "autoRefillEnabled": {
            "type": "boolean",
            "description": "Flag indicating if auto refill is enabled for this ad"
          },
          "autoRefillConfig": {
            "$ref": "#/components/schemas/OffersSvcAutoRefillConfig"
          }
        },
        "required": [
          "offerId",
          "userId",
          "network",
          "tokenSymbol",
          "fiatSymbol",
          "offerType",
          "behaviour",
          "totalUnit",
          "tradedUnit",
          "lockedUnit",
          "rate",
          "paymentMethods",
          "status",
          "availableUnits",
          "maxFiatLimit",
          "tradeMinimumLimit",
          "tradeMaximumLimit",
          "createdAt",
          "updatedAt",
          "editedAt",
          "partnerDisplayName",
          "partnerRating",
          "partnerLastActiveAt"
        ],
        "x-source-svc": "offers"
      },
      "OffersSvcOfferPaymentChannel": {
        "type": "object",
        "properties": {
          "channelId": {
            "type": "string"
          },
          "channelName": {
            "type": "string"
          },
          "channelType": {
            "type": "string"
          },
          "color": {
            "$ref": "#/components/schemas/OffersSvcOfferPaymentChannelColor"
          }
        },
        "x-source-svc": "offers"
      },
      "OffersSvcOfferPaymentChannelColor": {
        "type": "object",
        "properties": {
          "bg": {
            "type": "string"
          },
          "fg": {
            "type": "string"
          }
        },
        "required": [
          "bg",
          "fg"
        ],
        "x-source-svc": "offers"
      },
      "OffersSvcOfferPaymentMethod": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/OffersSvcOfferPaymentChannel"
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              }
            }
          }
        ],
        "x-source-svc": "offers"
      },
      "OffersSvcOfferStatus": {
        "type": "string",
        "description": "the current offer status",
        "default": "ACTIVE",
        "enum": [
          "PENDING",
          "ACTIVE",
          "OFFLINE",
          "LOW_BALANCE",
          "LIMIT_REACHED"
        ],
        "x-source-svc": "offers"
      },
      "OffersSvcOfferType": {
        "type": "string",
        "enum": [
          "ONRAMP",
          "OFFRAMP"
        ],
        "x-source-svc": "offers"
      },
      "OffersSvcPartnerStats": {
        "type": "object",
        "properties": {
          "partnerId": {
            "type": "string",
            "format": "uuid"
          },
          "averageRating": {
            "type": "number",
            "example": 3
          },
          "totalTransactions": {
            "type": "number"
          },
          "tradeCount": {
            "type": "number"
          },
          "completionPercentage": {
            "type": "number",
            "format": "double",
            "example": 94
          },
          "averageResponseTime": {
            "type": "number",
            "format": "double",
            "example": 5
          }
        },
        "x-source-svc": "offers"
      },
      "OffersSvcTradeCriteria": {
        "type": "object",
        "properties": {
          "verifiedKyc": {
            "type": "boolean"
          }
        },
        "x-source-svc": "offers"
      },
      "OffersSvcTradeMode": {
        "type": "string",
        "enum": [
          "P2P",
          "IP",
          "OTC"
        ],
        "x-source-svc": "offers"
      },
      "OfframpAccount": {
        "type": "object",
        "required": [
          "id",
          "beneficiary",
          "payoutCurrency"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for the offramp account."
          },
          "beneficiary": {
            "$ref": "#/components/schemas/Beneficiary"
          },
          "payoutCurrency": {
            "type": "string",
            "example": "KES"
          },
          "status": {
            "$ref": "#/components/schemas/OfframpAccountStatus"
          },
          "createdDate": {
            "type": "string",
            "format": "date-time"
          }
        },
        "x-source-svc": "ledger"
      },
      "OfframpAccountFundingAddress": {
        "type": "object",
        "required": [
          "address",
          "network",
          "supportedTokens"
        ],
        "properties": {
          "address": {
            "type": "string",
            "description": "The deposit address for the offramp account.",
            "example": "0x43e4715ae093a4c86b5ecddb52216c4f879e9672"
          },
          "memo": {
            "type": "string",
            "description": "Memo for networks that support memo."
          },
          "network": {
            "$ref": "#/components/schemas/LedgerSvcBlockchainNetwork"
          },
          "supportedTokens": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TokenDetails"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "OfframpAccountList": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Paging"
          },
          {
            "type": "object",
            "required": [
              "content"
            ],
            "properties": {
              "content": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/OfframpAccount"
                }
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "OfframpAccountStatus": {
        "type": "string",
        "description": "Status of the offramp account.",
        "enum": [
          "ACTIVE",
          "INACTIVE",
          "SUSPENDED"
        ],
        "x-source-svc": "ledger"
      },
      "OfframpAccountTransaction": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CashPaymentTransaction"
          },
          {
            "type": "object",
            "description": "Details of an offramp account transaction.",
            "properties": {
              "offrampAccountId": {
                "type": "string",
                "format": "uuid",
                "description": "Identifier of the offramp account associated with this transaction."
              },
              "blockchainInfo": {
                "$ref": "#/components/schemas/TransactionBlockchainInfo"
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "OfframpAccountTransactionList": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Paging"
          },
          {
            "type": "object",
            "required": [
              "content"
            ],
            "properties": {
              "content": {
                "type": "array",
                "description": "List of offramp account transactions",
                "items": {
                  "$ref": "#/components/schemas/OfframpAccountTransaction"
                }
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "OfframpDepositActivity": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TransactionActivity"
          },
          {
            "type": "object",
            "required": [
              "activityData"
            ],
            "properties": {
              "activityData": {
                "$ref": "#/components/schemas/OfframpAccountTransaction"
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "OrderEvent": {
        "type": "object",
        "description": "Event payload published for order lifecycle updates.",
        "properties": {
          "orderId": {
            "type": "string",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5",
            "description": "General format for UUID"
          },
          "clientId": {
            "type": "string",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5",
            "description": "General format for UUID"
          },
          "merchantId": {
            "type": "string",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5",
            "description": "General format for UUID"
          },
          "accountId": {
            "type": "string",
            "format": "uuid",
            "example": "3a5aaea8-504a-4404-ad3d-b82574fba5e5",
            "description": "General format for UUID"
          },
          "reference": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "amount": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true,
            "description": "Amount for the order, always specified in the base currency."
          },
          "clientAmount": {
            "type": "number",
            "description": "What the client ultimately receives. Currency flips by side:\nSELL: fiat, in quoteCurrency (paid out to the client).\nBUY:  asset, in baseCurrency (released to the client's wallet).\n",
            "minimum": 0,
            "exclusiveMinimum": true
          },
          "merchantAmount": {
            "type": "number",
            "description": "What the merchant ultimately receives. Currency flips by side:\nSELL: asset, in baseCurrency (the client's crypto).\nBUY:  fiat, in quoteCurrency (the buyer's pay-in).\n",
            "minimum": 0,
            "exclusiveMinimum": true
          },
          "type": {
            "$ref": "#/components/schemas/OrderType"
          },
          "status": {
            "$ref": "#/components/schemas/FullOrderStatus"
          },
          "statusReason": {
            "type": "string"
          },
          "recipient": {
            "$ref": "#/components/schemas/Recipient"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "payinPaymentDetails": {
            "$ref": "#/components/schemas/PayinPaymentDetails"
          },
          "orderMetadata": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Metadata"
            }
          }
        },
        "required": [
          "orderId",
          "clientId",
          "merchantId",
          "accountId",
          "reference",
          "provider",
          "amount",
          "merchantAmount",
          "clientAmount",
          "type",
          "status",
          "statusReason",
          "recipient",
          "timestamp",
          "orderMetadata"
        ],
        "x-source-svc": "orders"
      },
      "OrderOfferDTO": {
        "required": [
          "networkId",
          "partnerId",
          "rate",
          "token",
          "tokenAmount",
          "transactionType"
        ],
        "type": "object",
        "properties": {
          "offerId": {
            "type": "string",
            "format": "uuid"
          },
          "partnerId": {
            "type": "string",
            "format": "uuid"
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "ONRAMP",
              "OFFRAMP"
            ]
          },
          "rate": {
            "type": "number",
            "example": 0.32
          },
          "networkId": {
            "type": "string",
            "example": "TRC20"
          },
          "fiatSymbol": {
            "type": "string",
            "example": "NGN"
          },
          "fiatAmount": {
            "type": "number",
            "example": 120.5
          },
          "token": {
            "type": "string",
            "example": "USDT"
          },
          "tokenAmount": {
            "type": "number",
            "example": 120.5
          },
          "partnerDisplayName": {
            "type": "string",
            "example": "John Doe"
          }
        },
        "x-source-svc": "exchange"
      },
      "OrderQueryStatus": {
        "type": "string",
        "enum": [
          "FAILED",
          "ONGOING",
          "COMPLETED"
        ],
        "x-source-svc": "orders"
      },
      "OrderResponse": {
        "description": "Order response displayed to merchants and clients. They have different views of the order object.",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseOrderResponse"
          },
          {
            "type": "object",
            "properties": {
              "amount": {
                "type": "number",
                "description": "Amount for the order, always specified in the base currency.\nIn merchant's view, this is the amount to receive (SELL) or amount to be sent (BUY)\nIn the client's view, this is the amount they'll receive (BUY) or amount they are sending (SELL)\n"
              },
              "rate": {
                "type": "number",
                "description": "The rate displayed to merchant or client."
              },
              "paymentMode": {
                "description": "BUY-only. Echoes the paymentMode persisted on the order.",
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PaymentMode"
                  }
                ]
              },
              "payinPaymentDetails": {
                "description": "BUY-only. Populated once the pay-in account has been provisioned. For DEPOSIT\npaymentMode orders the create endpoints wait briefly for provisioning, so this is\nnormally present on the create response; for INTERNAL_TRANSFER orders (or if\nprovisioning is still in flight) it is null and appears on\n`GET /clients/orders/{orderRef}` once ready. Null for SELL orders.\n",
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PayinPaymentDetails"
                  }
                ]
              }
            },
            "required": [
              "rate",
              "amount"
            ]
          }
        ],
        "x-source-svc": "orders"
      },
      "OrderTransactionList": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Paging"
          },
          {
            "type": "object",
            "required": [
              "records"
            ],
            "properties": {
              "records": {
                "type": "array",
                "default": [],
                "description": "List of order transactions",
                "items": {
                  "$ref": "#/components/schemas/OrderResponse"
                }
              },
              "name": {
                "type": "string",
                "readOnly": true,
                "default": "OrderTransactionList"
              }
            }
          }
        ],
        "x-source-svc": "orders"
      },
      "OrderType": {
        "type": "string",
        "enum": [
          "BUY",
          "SELL"
        ],
        "x-source-svc": "orders"
      },
      "OrdersSvcAccountHolderType": {
        "type": "string",
        "enum": [
          "INDIVIDUAL",
          "BUSINESS"
        ],
        "x-source-svc": "orders"
      },
      "OtpPurpose": {
        "type": "string",
        "description": "the purpose of an otp",
        "enum": [
          "SIGN_IN",
          "DELETE_ACCOUNT",
          "ADD_PAYMENT_METHOD",
          "EDIT_PAYMENT_METHOD",
          "CEX_ORDER_CONFIRMATION",
          "PHONE_NUMBER_VERIFICATION",
          "AUTHENTICATE_ACTION",
          "WALLET_RECOVERY",
          "WALLET_RESET",
          "MFA_SETUP"
        ],
        "x-source-svc": "users"
      },
      "OtpSendResponse": {
        "type": "object",
        "properties": {
          "sent": {
            "type": "boolean"
          },
          "authSessionId": {
            "type": "string"
          }
        },
        "x-source-svc": "users"
      },
      "P2PWalletRecipient": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Recipient"
          },
          {
            "type": "object",
            "properties": {
              "accountId": {
                "type": "string",
                "description": "The account identifier on the platform, e.g. username, phone number, email, tag",
                "minLength": 1,
                "example": "enoobong"
              },
              "providerId": {
                "type": "string",
                "description": "the id of the p2p wallet provider",
                "minLength": 1,
                "example": "paga"
              },
              "network": {
                "type": "string",
                "description": "Optional mobile network for when the request is from exchange's P2P wallet",
                "minLength": 2
              }
            },
            "required": [
              "accountId",
              "providerId"
            ]
          }
        ],
        "x-source-svc": "orders"
      },
      "Paging": {
        "description": "Base object for paginated list",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Descriptive name for the list"
          },
          "size": {
            "minimum": 0,
            "type": "integer",
            "format": "int32",
            "description": "Positive integer"
          },
          "totalItems": {
            "minimum": 0,
            "type": "integer",
            "format": "int32",
            "description": "Positive integer"
          },
          "nextPage": {
            "minimum": 0,
            "type": "integer",
            "format": "int32",
            "description": "Positive integer"
          },
          "previousPage": {
            "minimum": 0,
            "type": "integer",
            "format": "int32",
            "description": "Positive integer"
          }
        },
        "discriminator": {
          "propertyName": "name"
        },
        "x-common-model": "Paging"
      },
      "PartnerStats": {
        "type": "object",
        "properties": {
          "partnerId": {
            "type": "string",
            "format": "uuid"
          },
          "averageRating": {
            "type": "number",
            "example": 3
          },
          "totalTransactions": {
            "type": "number"
          },
          "tradeCount": {
            "type": "number"
          },
          "completionPercentage": {
            "type": "number",
            "format": "double",
            "example": 94
          },
          "averageResponseTime": {
            "type": "number",
            "format": "double",
            "example": 5
          }
        },
        "x-source-svc": "exchange"
      },
      "PartyDepositLimits": {
        "type": "object",
        "description": "Maximum deposit amount(s) for one party type (see PaymentMethodLimits). A null maxPerTransaction\nor maxPerDay means no limit is enforced for that period — e.g. NGN's first-party bank transfers\nhave no cap at all, while third-party transfers are capped both per-transaction and per-day.\n",
        "properties": {
          "maxPerTransaction": {
            "type": "number",
            "minimum": 0,
            "example": 250000
          },
          "maxPerDay": {
            "type": "number",
            "minimum": 0,
            "example": 24000
          }
        },
        "x-source-svc": "ledger"
      },
      "PayinPaymentDetails": {
        "type": "object",
        "description": "Buyer-facing payment details for a BUY order. Surfaced on the create-order response and on\n`GET /clients/orders/{orderRef}` for BUY orders so the buyer can re-fetch where (and how)\nto deposit fiat at any point in the order's lifetime.\n",
        "properties": {
          "recipient": {
            "description": "The deposit destination — a BankAccountRecipient / MobileMoneyRecipient / P2PWalletRecipient depending on the merchant's pay-in account type.",
            "allOf": [
              {
                "$ref": "#/components/schemas/Recipient"
              }
            ]
          },
          "amount": {
            "type": "number",
            "description": "Fiat amount the buyer must deposit (matches the order's clientPayoutAmount)."
          },
          "currency": {
            "type": "string",
            "description": "Currency of the amount above (matches the order's payoutCurrency)."
          },
          "paymentMode": {
            "$ref": "#/components/schemas/PaymentMode"
          },
          "reference": {
            "type": "string",
            "description": "Reference the buyer must include with the deposit so the payouts service can auto-match\nthe pay-in to this order.\n"
          }
        },
        "required": [
          "recipient",
          "amount",
          "currency",
          "paymentMode",
          "reference"
        ],
        "x-source-svc": "orders"
      },
      "PaymentChannel": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "paymentChannelId": {
            "type": "string",
            "description": "Identifier for payment channel"
          },
          "name": {
            "type": "string",
            "description": "Payment channel name"
          },
          "supportedCurrencies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentChannelSupportedCurrency"
            }
          }
        },
        "x-source-svc": "exchange"
      },
      "PaymentChannelSupportedCurrency": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "ISO code (alpha 2) for the country valid for"
          },
          "currency": {
            "type": "string",
            "description": "ISO code for the supported currency"
          }
        },
        "x-source-svc": "exchange"
      },
      "PaymentMethod": {
        "type": "object",
        "required": [
          "paymentMethodId",
          "userId",
          "paymentChannelId",
          "paymentChannelName",
          "paymentChannelType",
          "data"
        ],
        "properties": {
          "paymentMethodId": {
            "type": "string",
            "description": "Id of the payment method"
          },
          "userId": {
            "type": "string",
            "description": "Id of the owner of a payment method"
          },
          "paymentChannelId": {
            "type": "string",
            "description": "Payment Channel's id"
          },
          "paymentChannelName": {
            "type": "string",
            "description": "Payment Channel's name"
          },
          "paymentChannelType": {
            "type": "string",
            "description": "The type of the payment channel",
            "example": "P2P_WALLET"
          },
          "defaultCurrencyMap": {
            "type": "object",
            "description": "map of currencies set as default\n- A payment method can belong to a channel that supports multiple currencies\n- This contains a map currency symbols to boolean to indicate if method is default for the currency\n",
            "additionalProperties": {
              "type": "boolean",
              "default": false
            }
          },
          "data": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "description": "Fields"
            },
            "description": "Can be used to store the required fields and their values for a payment method created by a user."
          },
          "isBeneficiary": {
            "type": "boolean",
            "description": "Flag indicating if the payment method is a beneficiary account or owned by user.\nBeneficiary accounts CANNOT be used to process P2P trades.\n"
          }
        },
        "x-source-svc": "payment-methods"
      },
      "PaymentMethodCapability": {
        "type": "object",
        "description": "The fee, limits, and expected settlement timeline for depositing via a specific payment rail,\nso a business knows what to expect before initiating a deposit. One entry per rail supported by\nthe destination account for this currency.\n",
        "required": [
          "rail",
          "fee"
        ],
        "properties": {
          "rail": {
            "$ref": "#/components/schemas/PaymentRail"
          },
          "fee": {
            "$ref": "#/components/schemas/PaymentMethodFee"
          },
          "limits": {
            "$ref": "#/components/schemas/PaymentMethodLimits"
          },
          "timeline": {
            "$ref": "#/components/schemas/PaymentMethodTimeline"
          }
        },
        "x-source-svc": "ledger"
      },
      "PaymentMethodEventAction": {
        "type": "string",
        "enum": [
          "CREATED",
          "UPDATED",
          "DELETED"
        ],
        "x-source-svc": "payment-methods"
      },
      "PaymentMethodEventPayload": {
        "required": [
          "paymentMethodId",
          "userId"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "type": "string"
          },
          "action": {
            "$ref": "#/components/schemas/PaymentMethodEventAction"
          },
          "paymentMethodId": {
            "type": "string"
          },
          "paymentChannelId": {
            "type": "string"
          },
          "paymentChannelName": {
            "type": "string"
          },
          "paymentChannelType": {
            "type": "string"
          }
        },
        "x-source-svc": "payment-methods"
      },
      "PaymentMethodFee": {
        "type": "object",
        "description": "The fee charged to the customer for a deposit made via this rail.",
        "required": [
          "percentage",
          "fixedAmount",
          "currency"
        ],
        "properties": {
          "percentage": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "Fee as a fraction of the deposit amount, e.g. 0.0035 = 0.35%.",
            "default": 0,
            "example": 0.0035
          },
          "fixedAmount": {
            "type": "number",
            "minimum": 0,
            "description": "Flat fee added on top of the percentage fee, in `currency`.",
            "default": 0,
            "example": 1.5
          },
          "currency": {
            "type": "string",
            "description": "Currency `fixedAmount` is denominated in.",
            "example": "USD"
          }
        },
        "x-source-svc": "ledger"
      },
      "PaymentMethodLimits": {
        "type": "object",
        "description": "Deposit amount limits for this rail, split by whether the sender is the account owner\n(first-party) or someone else (third-party) — third-party deposits are typically capped lower\nas an AML control.\n",
        "required": [
          "currency",
          "minAmount"
        ],
        "properties": {
          "minAmount": {
            "type": "number",
            "minimum": 0,
            "example": 1
          },
          "firstParty": {
            "$ref": "#/components/schemas/PartyDepositLimits"
          },
          "thirdParty": {
            "$ref": "#/components/schemas/PartyDepositLimits"
          },
          "currency": {
            "type": "string",
            "example": "USD"
          }
        },
        "x-source-svc": "ledger"
      },
      "PaymentMethodTimeline": {
        "type": "object",
        "description": "How long a deposit made via this rail is expected to take to settle.",
        "required": [
          "minValue",
          "maxValue",
          "unit"
        ],
        "properties": {
          "minValue": {
            "type": "integer",
            "minimum": 0,
            "example": 1
          },
          "maxValue": {
            "type": "integer",
            "minimum": 0,
            "example": 3
          },
          "unit": {
            "type": "string",
            "enum": [
              "MINUTES",
              "HOURS",
              "BUSINESS_DAYS"
            ]
          }
        },
        "x-source-svc": "ledger"
      },
      "PaymentMethodUpdateRequest": {
        "required": [
          "data"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "additionalProperties": true,
            "description": "Can be used to store the required fields and their values for a payment method created by a user."
          },
          "otp": {
            "type": "string",
            "description": "Otp code to verify if user exists"
          }
        },
        "x-source-svc": "payment-methods"
      },
      "PaymentMode": {
        "type": "string",
        "default": "DEPOSIT",
        "description": "How the buyer is paying fiat for a BUY order. Chosen at quote time on `POST /quotes` and\npersisted on the resulting quote; the BUY order then inherits the value when it references\nthe quote. Clients do not (and cannot) re-specify it on the order request — the quote is\nthe binding contract.\n\n- `DEPOSIT` — buyer transfers fiat from an external bank account into the merchant's\n  pay-in account. Every payouts provider supports this and it is the default when the\n  field is omitted.\n- `INTERNAL_TRANSFER` — buyer pays via an internal transfer routed through a configured\n  override provider (currently `onb-nuban` for merchants on `onb-nuban-collections`).\n  Quote generation filters out merchants whose payment account doesn't have\n  `providerDetails.supportsCustomPayin=true`, or whose provider has no configured\n  internal-transfer override on the order service. If no merchant satisfies the request,\n  quote generation returns `NoMatchingQuoteException` rather than producing a quote that\n  would later fail at order placement.\n",
        "enum": [
          "DEPOSIT",
          "INTERNAL_TRANSFER"
        ],
        "x-source-svc": "orders"
      },
      "PaymentRail": {
        "type": "string",
        "description": "A payment rail an account-number provider can settle a deposit through.",
        "enum": [
          "ACH",
          "FEDWIRE",
          "SWIFT",
          "SEPA",
          "FPS",
          "FPS_CROSS_SCHEME",
          "NIP"
        ],
        "x-source-svc": "ledger"
      },
      "PhoneNumberVerificationChannel": {
        "type": "string",
        "enum": [
          "SMS",
          "WHATSAPP"
        ],
        "x-source-svc": "users"
      },
      "PhysicalAddress": {
        "required": [
          "city",
          "country",
          "postalCode",
          "state",
          "streetAddress"
        ],
        "type": "object",
        "properties": {
          "streetAddress": {
            "minLength": 3,
            "type": "string",
            "description": "the street address of the user",
            "example": "11 Main Street"
          },
          "city": {
            "minLength": 2,
            "type": "string",
            "description": "the city/municipality where the user lives",
            "example": "Gbagada"
          },
          "state": {
            "minLength": 3,
            "type": "string",
            "description": "the state/region/province where the user lives",
            "example": "Lagos"
          },
          "country": {
            "maxLength": 2,
            "minLength": 2,
            "type": "string",
            "description": "the country ISO CODE 3166-2 where the user lives",
            "example": "NG"
          },
          "postalCode": {
            "minLength": 4,
            "type": "string",
            "description": "the postal code of the specified address",
            "example": "200124"
          },
          "apartmentNo": {
            "minLength": 1,
            "type": "string",
            "description": "the flat/apartment number of the user at the specified address",
            "example": "5B"
          }
        },
        "x-source-svc": "ledger"
      },
      "PriceDto": {
        "required": [
          "price"
        ],
        "type": "object",
        "properties": {
          "price": {
            "type": "number",
            "description": "The price at which the order will be traded"
          }
        },
        "description": "Price for a trade",
        "x-source-svc": "exchange"
      },
      "ProfileDataDto": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/VerificationStatus"
          },
          "fullname": {
            "type": "string",
            "description": "User's full name"
          },
          "country": {
            "type": "string",
            "description": "User's country",
            "example": "NG"
          },
          "dob": {
            "type": "string",
            "description": "User's date of birth",
            "format": "date",
            "example": "2024-04-18T00:00:00.000Z"
          },
          "displayName": {
            "type": "string",
            "description": "User's display name"
          },
          "proofOfAddress": {
            "type": "string",
            "description": "Proof of partner's address"
          },
          "hasBusinessBankAccount": {
            "type": "boolean",
            "description": "partner has a business account"
          },
          "businessName": {
            "type": "string"
          },
          "certificateOfIncorporation": {
            "type": "string"
          },
          "hasShareHolderList": {
            "type": "boolean"
          },
          "userInShareHolderList": {
            "type": "boolean"
          },
          "noShareHolderListEvidence": {
            "type": "string"
          },
          "useOfBusinessAccountApprovedByShareholders": {
            "type": "boolean"
          },
          "noOfLegalDirectors": {
            "type": "number"
          },
          "regulatoryIdsOfDirectors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "depositTimeout": {
            "type": "number",
            "example": 1200
          },
          "approvalTimeout": {
            "type": "number",
            "example": 1200
          },
          "tradeHistoryDetails": {
            "$ref": "#/components/schemas/ProfileTradeDto"
          }
        },
        "x-source-svc": "users"
      },
      "ProfileTradeDto": {
        "type": "object",
        "properties": {
          "hasPreviousTradeHistory": {
            "type": "boolean",
            "description": "Partner have previous trading experience"
          },
          "proofOfTrade": {
            "type": "array",
            "description": "Partner's proof of previous trade history",
            "items": {
              "type": "string"
            }
          },
          "referee": {
            "type": "string",
            "description": "Partner's referee"
          }
        },
        "x-source-svc": "users"
      },
      "ProviderPaymentChannel": {
        "type": "string",
        "description": "Payment channel a provider is used for",
        "enum": [
          "BANK_TRANSFER",
          "MOBILE_MONEY",
          "P2P_WALLET"
        ],
        "x-source-svc": "orders"
      },
      "QuoteDto": {
        "title": "QuoteDto",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "adId": {
            "type": "string",
            "format": "uuid"
          },
          "payoutCurrency": {
            "type": "string"
          },
          "rate": {
            "type": "number"
          },
          "minimumAmount": {
            "type": "number"
          },
          "maximumAmount": {
            "type": "number"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field."
          },
          "paymentMode": {
            "description": "BUY-only. Echoes the paymentMode persisted on the quote so the client can confirm which\nmode this quote was issued under. Null for SELL quotes.\n",
            "allOf": [
              {
                "$ref": "#/components/schemas/PaymentMode"
              }
            ]
          }
        },
        "x-source-svc": "orders"
      },
      "QuoteRequestDto": {
        "title": "QuoteRequestDto",
        "required": [
          "amount",
          "payoutCurrency",
          "paymentChannel"
        ],
        "type": "object",
        "properties": {
          "amount": {
            "description": "asset amount",
            "minimum": 0,
            "type": "number"
          },
          "payoutCurrency": {
            "description": "payout currency",
            "type": "string"
          },
          "paymentChannel": {
            "$ref": "#/components/schemas/ProviderPaymentChannel"
          },
          "type": {
            "description": "Order side this quote is being requested for. Defaults to SELL when omitted, preserving the existing\nquote contract for clients that don't yet supply it. Use BUY to quote an onramp (client pays fiat to\nbuy crypto from the merchant).\n",
            "allOf": [
              {
                "$ref": "#/components/schemas/OrderType"
              }
            ]
          },
          "paymentMode": {
            "description": "BUY-only. How the buyer intends to pay fiat. Optional — defaults to `DEPOSIT` server-side.\nUsed at quote-generation time to filter out merchants whose payment account can't fulfil\nthe requested mode: `DEPOSIT` requires `providerDetails.supportsPayin` or\n`providerDetails.supportsCustomPayin`; `INTERNAL_TRANSFER` requires\n`providerDetails.supportsCustomPayin = true` *and* the order service to have an\ninternal-transfer provider override configured for that merchant's provider (currently\n`onb-nuban-collections → onb-nuban`). The chosen mode is persisted on the resulting\nquote and inherited by the BUY order at creation time — clients do not (and cannot)\nre-specify it when placing the order. Ignored for SELL quotes.\n",
            "allOf": [
              {
                "$ref": "#/components/schemas/PaymentMode"
              }
            ]
          }
        },
        "x-source-svc": "orders"
      },
      "QuoteResponseDto": {
        "type": "object",
        "properties": {
          "quote": {
            "$ref": "#/components/schemas/QuoteDto"
          },
          "fallbackQuote": {
            "$ref": "#/components/schemas/QuoteDto"
          }
        },
        "x-source-svc": "orders"
      },
      "RateDto": {
        "title": "RateDto",
        "type": "object",
        "properties": {
          "currency": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "lastUpdated": {
            "type": "string",
            "format": "date-time"
          }
        },
        "x-source-svc": "orders"
      },
      "Recipient": {
        "discriminator": {
          "propertyName": "recipientType",
          "mapping": {
            "P2PWalletRecipient": "#/components/schemas/P2PWalletRecipient",
            "BankAccountRecipient": "#/components/schemas/BankAccountRecipient",
            "MobileMoneyRecipient": "#/components/schemas/MobileMoneyRecipient"
          }
        },
        "type": "object",
        "description": "Details of the recipient of the transfer. Should be one of\n- `BankAccountRecipient`\n- `P2PWalletRecipient`\n- `MobileMoneyRecipient`\n",
        "required": [
          "email",
          "recipientType"
        ],
        "properties": {
          "email": {
            "type": "string",
            "description": "Email address of the recipient.",
            "format": "email",
            "minLength": 4
          },
          "phoneNumber": {
            "type": "string",
            "description": "Phone number of the recipient.",
            "minLength": 9
          },
          "firstName": {
            "type": "string",
            "description": "The recipients' first name. Required unless accountHolderType is BUSINESS.",
            "minLength": 2
          },
          "lastName": {
            "type": "string",
            "description": "The recipients' last name. Required unless accountHolderType is BUSINESS.",
            "minLength": 2
          },
          "accountHolderType": {
            "$ref": "#/components/schemas/OrdersSvcAccountHolderType",
            "default": "INDIVIDUAL"
          },
          "businessName": {
            "type": "string",
            "description": "The recipient's registered business name. Populated instead of firstName/lastName when\naccountHolderType is BUSINESS — a business name isn't a \"firstname lastname\" pair.\n",
            "minLength": 1
          },
          "recipientType": {
            "type": "string",
            "description": "Must match the name of one of the models that extends Recipient"
          },
          "isThirdParty": {
            "type": "boolean",
            "description": "Indicates if the recipient is a third party (not the account owner)",
            "default": false
          }
        },
        "x-source-svc": "orders"
      },
      "SenderInfo": {
        "description": "Information identifying the party sending fiat for a pay-in (BUY order). Mirrors the SenderInfo\nused by the onboard-payouts pay-in endpoints — the order service forwards these fields when\nprovisioning the merchant pay-in account.\n",
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "phoneNumber": {
            "type": "string"
          }
        },
        "required": [
          "firstName",
          "lastName"
        ],
        "x-source-svc": "orders"
      },
      "StatusDto": {
        "description": "Status data, check additional message field.",
        "type": "object",
        "required": [
          "success"
        ],
        "properties": {
          "success": {
            "description": "Status can be successful or failed, a value of true indicates success.",
            "type": "boolean",
            "example": true
          },
          "message": {
            "type": "string",
            "description": "additional message describing status."
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "description": "Data associated with the status, this will not always be present"
          },
          "error": {
            "$ref": "#/components/schemas/ErrorMessageDto"
          }
        },
        "x-common-model": "StatusDto"
      },
      "SubAccount": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "accountId",
          "reference",
          "accountBalance",
          "currency",
          "frozen",
          "createdDate"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique sub-account ID"
          },
          "accountId": {
            "type": "string",
            "format": "uuid",
            "description": "The main account ID to which this sub-account belongs."
          },
          "displayName": {
            "type": "string",
            "description": "An optional name for the sub-account."
          },
          "reference": {
            "type": "string",
            "description": "A unique reference for the sub-account."
          },
          "currency": {
            "type": "string",
            "description": "Currency of the sub-account",
            "example": "USD"
          },
          "accountBalance": {
            "$ref": "#/components/schemas/AccountBalanceDetails"
          },
          "frozen": {
            "type": "boolean",
            "description": "Indicates if the sub-account is frozen (locked) or not.",
            "default": false
          },
          "createdDate": {
            "type": "string",
            "format": "date-time",
            "description": "The date the sub-account was created."
          }
        },
        "x-source-svc": "ledger"
      },
      "SubAccountList": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Paging"
          },
          {
            "type": "object",
            "description": "Paginated list of sub-accounts belonging to a client.",
            "additionalProperties": false,
            "required": [
              "content"
            ],
            "properties": {
              "content": {
                "type": "array",
                "description": "List of sub-accounts",
                "items": {
                  "$ref": "#/components/schemas/SubAccount"
                }
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "SupportedAssetsList": {
        "type": "object",
        "description": "List of assets supported for main account.",
        "properties": {
          "assets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Asset"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "ThirdpartyOrderInfoDTO": {
        "required": [
          "businessId"
        ],
        "properties": {
          "businessId": {
            "type": "string",
            "description": "The thirdparty business the customer is trading via"
          },
          "tradeId": {
            "type": "string",
            "description": "Tracking trade Id"
          },
          "product": {
            "type": "string",
            "description": "Product name, typically custodial or web"
          },
          "blockchainOrderId": {
            "type": "integer"
          },
          "externalOrderReference": {
            "type": "string"
          }
        },
        "x-source-svc": "transactions"
      },
      "TimeoutDTO": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "enum": [
              "APPROVE_TRANSACTION",
              "MAKE_DEPOSIT",
              "CONFIRM_DEPOSIT",
              "FLAG_DISPUTE",
              "ACKNOWLEDGE_TRANSACTION"
            ]
          },
          "startTime": {
            "type": "string",
            "format": "date-time",
            "x-faker": "date.recent"
          },
          "duration": {
            "type": "number"
          },
          "timeLeft": {
            "type": "integer",
            "format": "int64"
          }
        },
        "x-source-svc": "transactions"
      },
      "Token": {
        "properties": {
          "token": {
            "type": "string",
            "description": "Token string (Request, Access, Refresh)"
          },
          "expiry": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp field.",
            "x-source-svc": "auth"
          }
        },
        "required": [
          "token",
          "expiry"
        ],
        "x-source-svc": "auth"
      },
      "TokenDetails": {
        "type": "object",
        "description": "Details of supported funding token object.",
        "required": [
          "symbol",
          "name",
          "logoUrl",
          "supportedNetworks"
        ],
        "properties": {
          "symbol": {
            "type": "string",
            "description": "Token symbol",
            "example": "USDC"
          },
          "name": {
            "type": "string",
            "description": "Token name.",
            "example": "USD Coin"
          },
          "logoUrl": {
            "type": "string",
            "example": "https://etherscan.io/token/images/centre-usdc_28.png",
            "description": "URL for token's logo."
          },
          "supportedNetworks": {
            "description": "A list of networks on which the token is supported",
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/TokenNetwork"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "TokenNetwork": {
        "type": "object",
        "required": [
          "code",
          "networkInfo",
          "decimals",
          "contractAddress",
          "minimumDeposit"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "human-readable identifier for the token on this network. Usually a combination of network code and asset symbol\n",
            "example": "ETH_USDC"
          },
          "decimals": {
            "type": "integer",
            "format": "int32",
            "example": 6,
            "minimum": 0,
            "description": "The number of decimals used by this token on this network."
          },
          "contractAddress": {
            "type": "string",
            "description": "Contract address of the token on the given network.",
            "example": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
          },
          "minimumDeposit": {
            "type": "number",
            "description": "Minimum amount allowed for deposits.",
            "example": 5.25
          },
          "depositAvailable": {
            "type": "boolean",
            "description": "Indicates if deposits are currently available. Address request will fail if this is false.",
            "default": true
          },
          "withdrawalAvailable": {
            "type": "boolean",
            "description": "Indicates if withdrawals are currently available. Withdrawal request will fail if this is false.",
            "default": true
          },
          "withdrawalFee": {
            "type": "number",
            "minimum": 0,
            "example": "100.01",
            "description": "Transaction value. Must be positive."
          },
          "platformFeePercentage": {
            "type": "number",
            "minimum": 0,
            "example": 0.001,
            "description": "Additional platform fee charged on withdrawal, as a fraction of the withdrawal amount\n(e.g. 0.001 = 0.1%), on top of withdrawalFee. Null when no platform fee applies.\n"
          },
          "networkInfo": {
            "$ref": "#/components/schemas/LedgerSvcBlockchainNetwork"
          }
        },
        "x-source-svc": "ledger"
      },
      "Tokens": {
        "required": [
          "decimals",
          "isNative",
          "networkId",
          "symbol"
        ],
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string",
            "description": "Token symbol e.g ETH, USDC, BUSD",
            "example": "USDC"
          },
          "networkId": {
            "type": "string",
            "description": "Onboard network identifier"
          },
          "decimals": {
            "type": "number",
            "description": "Token decimal size"
          },
          "isNative": {
            "type": "boolean",
            "description": "Flags of the token is native to the blockchain or not"
          },
          "address": {
            "type": "string",
            "description": "Token address on the chain if it's not a native token"
          }
        },
        "x-source-svc": "exchange"
      },
      "TradeContext": {
        "type": "string",
        "enum": [
          "STANDARD_TRADE",
          "INTERNAL_RAIL"
        ],
        "x-source-svc": "transactions"
      },
      "TradeCriteria": {
        "type": "object",
        "properties": {
          "verifiedKyc": {
            "type": "boolean"
          }
        },
        "x-source-svc": "exchange"
      },
      "TradeMode": {
        "type": "string",
        "enum": [
          "P2P",
          "IP",
          "OTC"
        ],
        "x-source-svc": "exchange"
      },
      "TradeOptions": {
        "required": [
          "fiats",
          "networks"
        ],
        "type": "object",
        "properties": {
          "fiats": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FiatCurrency"
            }
          },
          "networks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BlockchainNetwork"
            }
          },
          "paymentChannels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentChannel"
            }
          },
          "transactionLimitsConfig": {
            "$ref": "#/components/schemas/DefaultConfigurationResponse"
          }
        },
        "x-source-svc": "exchange"
      },
      "TradeTypeQueryParamTradeTypeEnum": {
        "type": "string",
        "enum": [
          "BUY",
          "SELL"
        ],
        "x-source-svc": "exchange"
      },
      "TransactionActivity": {
        "type": "object",
        "description": "A single entry in the aggregated account activity feed. The concrete subtype is\ndetermined by the activityType discriminator; the type field carries the\nsemantic category for filtering and display.\n",
        "discriminator": {
          "propertyName": "activityType",
          "mapping": {
            "CashDepositActivity": "#/components/schemas/CashDepositActivity",
            "CashPaymentActivity": "#/components/schemas/CashPaymentActivity",
            "AccountNumberDepositActivity": "#/components/schemas/AccountNumberDepositActivity",
            "CryptoWithdrawalActivity": "#/components/schemas/CryptoWithdrawalActivity",
            "CryptoDepositActivity": "#/components/schemas/CryptoDepositActivity",
            "InternalTransferActivity": "#/components/schemas/InternalTransferActivity",
            "OfframpDepositActivity": "#/components/schemas/OfframpDepositActivity"
          }
        },
        "required": [
          "id",
          "activityType",
          "type",
          "direction",
          "amount",
          "currency",
          "status",
          "activityAt",
          "accountId",
          "accountType"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "activityType": {
            "type": "string",
            "description": "Discriminator; the concrete activity model name, e.g. CashDepositActivity.\n"
          },
          "type": {
            "$ref": "#/components/schemas/TransactionActivityType"
          },
          "direction": {
            "$ref": "#/components/schemas/ActivityDirection"
          },
          "amount": {
            "type": "number",
            "description": "Always positive; see direction for credit/debit.",
            "example": 100
          },
          "currency": {
            "type": "string",
            "example": "USD"
          },
          "status": {
            "$ref": "#/components/schemas/TransactionStatus"
          },
          "reference": {
            "type": "string",
            "description": "Customer-facing reference of the source transaction."
          },
          "accountId": {
            "type": "string",
            "format": "uuid"
          },
          "accountType": {
            "$ref": "#/components/schemas/ActivityAccountType"
          },
          "subAccountId": {
            "type": "string",
            "format": "uuid",
            "description": "Set when accountType is SUB_ACCOUNT."
          },
          "accountTransactionId": {
            "type": "string",
            "description": "Identifier of the transaction on the ledger account, when available."
          },
          "groupId": {
            "type": "string",
            "format": "uuid",
            "description": "Links related activities together, e.g. the two legs of an internal\ntransfer, or an offramp deposit and its refund.\n"
          },
          "narration": {
            "type": "string"
          },
          "activityAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "x-source-svc": "ledger"
      },
      "TransactionActivityList": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Paging"
          },
          {
            "type": "object",
            "properties": {
              "content": {
                "type": "array",
                "description": "List of transaction activities",
                "items": {
                  "$ref": "#/components/schemas/TransactionActivity"
                }
              }
            }
          }
        ],
        "x-source-svc": "ledger"
      },
      "TransactionActivityType": {
        "type": "string",
        "description": "Semantic category of a transaction activity feed entry.",
        "enum": [
          "CASH_DEPOSIT",
          "CASH_PAYMENT",
          "ACCOUNT_NUMBER_DEPOSIT",
          "CRYPTO_WITHDRAWAL",
          "CRYPTO_DEPOSIT",
          "INTERNAL_TRANSFER",
          "OFFRAMP_DEPOSIT"
        ],
        "x-source-svc": "ledger"
      },
      "TransactionBlockchainAddress": {
        "type": "object",
        "description": "Address data",
        "required": [
          "address"
        ],
        "properties": {
          "address": {
            "type": "string",
            "description": "Blockchain address where deposit was received.",
            "example": "0x2b059a574a35e60b228d10d54fec2671de4928e1"
          },
          "memo": {
            "type": "string",
            "description": "Memo for blockchains where memo is required.",
            "example": "1290122112"
          }
        },
        "x-source-svc": "ledger"
      },
      "TransactionBlockchainInfo": {
        "type": "object",
        "description": "Blockchain transaction data, present on Crypto-backed transactions.",
        "required": [
          "txHash",
          "recipient",
          "value",
          "tokenSymbol"
        ],
        "properties": {
          "txHash": {
            "type": "string",
            "description": "Blockchain Transaction Hash",
            "example": "0x093a0b443d5f698d1097368c1c05fab1ee2304e508b36c08bb72c40389c17584"
          },
          "recipient": {
            "$ref": "#/components/schemas/TransactionBlockchainAddress"
          },
          "senderAddress": {
            "type": "string",
            "description": "The address of the sender.",
            "example": "0x2b059a574a35e60b228d10d54fec2671de4928e1"
          },
          "value": {
            "type": "number",
            "example": "100.01",
            "minimum": 0,
            "description": "Quantity of tokens transferred in the transaction.",
            "default": "0.0"
          },
          "blockNumber": {
            "type": "integer",
            "format": "int64",
            "example": 20564802
          },
          "tokenSymbol": {
            "example": "USDT",
            "description": "Token symbol",
            "type": "string"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64",
            "description": "Transaction block timestamp."
          },
          "explorerUrl": {
            "type": "string",
            "format": "url",
            "description": "URL to view the transaction on a blockchain explorer."
          }
        },
        "x-source-svc": "ledger"
      },
      "TransactionContactsDTO": {
        "type": "object",
        "properties": {
          "customerPhoneNumber": {
            "type": "string",
            "example": "23408100000000"
          },
          "merchantPhoneNumber": {
            "type": "string",
            "example": "23408100000001"
          }
        },
        "x-source-svc": "transactions"
      },
      "TransactionDTO": {
        "required": [
          "customerId",
          "fee",
          "id",
          "reference",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "reference": {
            "type": "string",
            "example": "0165359005113074501885"
          },
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "customerName": {
            "type": "string",
            "example": "John Doe"
          },
          "offer": {
            "$ref": "#/components/schemas/TransactionsSvcOfferDTO"
          },
          "escrowAddress": {
            "type": "string",
            "description": "Escrow address",
            "example": 1.2869144918162796e+48
          },
          "paymentChannelId": {
            "type": "string",
            "example": "BANK_TRANSFER_NIGERIA"
          },
          "paymentMethod": {
            "type": "object",
            "properties": {}
          },
          "buyerPaymentMethod": {
            "type": "object",
            "properties": {}
          },
          "customerWallet": {
            "$ref": "#/components/schemas/TransactionsSvcWalletDTO"
          },
          "tokenAddress": {
            "type": "string",
            "example": 0
          },
          "status": {
            "$ref": "#/components/schemas/TransactionOrderStatus"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "x-faker": "date.recent"
          },
          "initiatedAt": {
            "type": "string",
            "format": "date-time",
            "x-faker": "date.recent"
          },
          "depositedAt": {
            "type": "string",
            "format": "date-time",
            "x-faker": "date.recent"
          },
          "confirmedAt": {
            "type": "string",
            "format": "date-time",
            "x-faker": "date.recent"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time",
            "x-faker": "date.recent"
          },
          "cancelledAt": {
            "type": "string",
            "format": "date-time",
            "x-faker": "date.recent"
          },
          "cancellationReason": {
            "type": "string"
          },
          "disputeId": {
            "type": "string",
            "default": "null"
          },
          "timeout": {
            "$ref": "#/components/schemas/TimeoutDTO"
          },
          "lockHash": {
            "type": "string",
            "default": "null"
          },
          "confirmationHash": {
            "type": "string",
            "default": "null"
          },
          "cancellationHash": {
            "type": "string",
            "default": "null"
          },
          "isPartnerAcknowledged": {
            "type": "boolean",
            "default": false
          },
          "defaultingParty": {
            "$ref": "#/components/schemas/UserType"
          },
          "rating": {
            "type": "number",
            "example": 3
          },
          "isCexOrder": {
            "type": "boolean",
            "example": false
          },
          "fee": {
            "$ref": "#/components/schemas/Fee"
          },
          "instantPayProcessingStatus": {
            "$ref": "#/components/schemas/InstantPayProcessingStatus"
          },
          "tradeValue": {
            "type": "number",
            "description": "Actual token amount that is to be traded",
            "deprecated": true
          },
          "merchantTokenValue": {
            "type": "number",
            "description": "Actual token value that is to be traded by merchant less any fees"
          },
          "customerTokenValue": {
            "type": "number",
            "description": "Actual token value that is to be traded by customer less any fees"
          },
          "payableAmount": {
            "type": "number",
            "description": "Actual fiat amount that is to be paid."
          },
          "thirdpartyOrderInfo": {
            "$ref": "#/components/schemas/ThirdpartyOrderInfoDTO"
          },
          "isNoKyc": {
            "type": "boolean",
            "description": "Flag showing if order is a no kyc order"
          },
          "paymentReceiptUploadId": {
            "type": "string",
            "description": "Upload ID for receipt uploaded on storage bucket",
            "default": "null"
          },
          "suppressCustomerNotifications": {
            "type": "boolean",
            "description": "Flag to indicate if notifications should be sent to the customer or not during the lifetime of this transaction",
            "default": false
          },
          "chatUnavailable": {
            "type": "boolean",
            "description": "Flag to indicate if chat is unavailable for this transaction",
            "default": false
          },
          "tradeContext": {
            "$ref": "#/components/schemas/TradeContext"
          }
        },
        "x-source-svc": "transactions"
      },
      "TransactionHistoryAggregate": {
        "type": "object",
        "required": [
          "tradeCount",
          "tradeUsdTotal"
        ],
        "properties": {
          "userId": {
            "type": "string",
            "format": "uuid"
          },
          "tradeCount": {
            "type": "integer"
          },
          "tradeUsdTotal": {
            "type": "number",
            "example": 3849594.1
          },
          "fiatTotal": {
            "type": "number",
            "example": 1245.92
          },
          "tokenTotal": {
            "type": "number",
            "example": 245.73
          }
        },
        "x-source-svc": "transactions"
      },
      "TransactionLimitResponse": {
        "type": "object",
        "properties": {
          "maxSingleTransactionLimit": {
            "type": "number"
          },
          "minSingleTransactionLimit": {
            "type": "number"
          },
          "dailyTransactionLimit": {
            "type": "number"
          },
          "maxLifetimeLimit": {
            "type": "number"
          }
        },
        "x-source-svc": "exchange"
      },
      "TransactionOrderStatus": {
        "type": "string",
        "description": "Order transaction status",
        "enum": [
          "INITIATED",
          "DEPOSITED",
          "CONFIRMED",
          "COMPLETED",
          "PENDING",
          "CANCELLED",
          "IN_DISPUTE",
          "AWAITING_ACCEPTANCE"
        ],
        "x-source-svc": "transactions"
      },
      "TransactionServiceErrorCode": {
        "type": "string",
        "enum": [
          "UNKNOWN_ERROR",
          "VALIDATION_ERROR",
          "TRANSACTION_LIMIT_EXCEEDED",
          "OFFER_NOT_AVAILABLE",
          "USER_EXCEEDED_CANCEL_LIMIT",
          "ALIEN_USER_OPERATION",
          "INVALID_DISPUTE_REGISTRATION",
          "INVALID_OPERATION",
          "ONGOING_ORDER_EXIST",
          "TOKEN_LOCK_IN_PROGRESS",
          "ILLEGAL_ORDER_STATUS_TRANSITION",
          "UNKNOWN_BLOCKCHAIN_ERROR",
          "BLOCKCHAIN_ACTION_NOT_ALLOWED",
          "INVALID_ORDER_AMOUNT",
          "INVALID_SIGNATURE",
          "ORDER_AMOUNT_ABOVE_MAXIMUM_LIMIT",
          "ORDER_AMOUNT_BELOW_MINIMUM_LIMIT",
          "SAME_USER_ORDER_PARTICIPANTS",
          "SAME_WALLET_ORDER_PARTICIPANTS"
        ],
        "x-source-svc": "transactions"
      },
      "TransactionStatus": {
        "type": "string",
        "description": "Status of the transaction, indicating its current state in the processing lifecycle.\n- PENDING: The transaction has been created but not yet processed.\n- IN_PROGRESS: The transaction is currently being processed.\n- FAILED: The transaction processing has failed.\n- SUCCESS: The transaction has been successfully processed.\n",
        "enum": [
          "PENDING",
          "IN_PROGRESS",
          "FAILED",
          "SUCCESS"
        ],
        "x-source-svc": "ledger"
      },
      "TransactionType": {
        "type": "string",
        "enum": [
          "DEPOSIT",
          "WITHDRAWAL",
          "TRANSFER"
        ],
        "x-source-svc": "ledger"
      },
      "TransactionsResponse": {
        "type": "object",
        "properties": {
          "transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionDTO"
            }
          },
          "pageNumber": {
            "type": "integer"
          },
          "pageSize": {
            "type": "integer"
          },
          "totalPages": {
            "type": "integer"
          },
          "totalTransactions": {
            "type": "integer"
          }
        },
        "x-source-svc": "transactions"
      },
      "TransactionsSvcOfferDTO": {
        "required": [
          "instantPayEnabled",
          "networkId",
          "partnerId",
          "rate",
          "token",
          "tokenAmount",
          "transactionType"
        ],
        "type": "object",
        "properties": {
          "offerId": {
            "type": "string",
            "format": "uuid"
          },
          "partnerId": {
            "type": "string",
            "format": "uuid"
          },
          "transactionType": {
            "$ref": "#/components/schemas/TransactionsSvcTransactionType"
          },
          "rate": {
            "type": "number",
            "example": 0.32
          },
          "networkId": {
            "type": "string",
            "example": "TRC20"
          },
          "fiatSymbol": {
            "type": "string",
            "example": "NGN"
          },
          "fiatAmount": {
            "type": "number",
            "example": 120.5
          },
          "token": {
            "type": "string",
            "example": "USDT"
          },
          "tokenAmount": {
            "type": "number",
            "example": 120.5
          },
          "usdAmount": {
            "type": "number",
            "example": 120.5
          },
          "partnerDisplayName": {
            "type": "string",
            "example": "John Doe"
          },
          "adNote": {
            "type": "string",
            "example": "Guaranteed fast payment"
          },
          "instantPayEnabled": {
            "type": "boolean"
          },
          "instantPayPaymentAccountId": {
            "type": "string"
          },
          "customPayinProvider": {
            "type": "string"
          },
          "tradeMode": {
            "$ref": "#/components/schemas/TransactionsSvcTradeMode"
          }
        },
        "x-source-svc": "transactions"
      },
      "TransactionsSvcTradeMode": {
        "type": "string",
        "enum": [
          "P2P",
          "IP",
          "OTC"
        ],
        "x-source-svc": "transactions"
      },
      "TransactionsSvcTransactionType": {
        "type": "string",
        "description": "Transaction order type, can be ONRAMP or OFFRAMP",
        "enum": [
          "ONRAMP",
          "OFFRAMP"
        ],
        "x-source-svc": "transactions"
      },
      "TransactionsSvcWalletDTO": {
        "type": "object",
        "properties": {
          "walletAddress": {
            "type": "string",
            "example": 0
          },
          "networkId": {
            "type": "string",
            "example": "bsc_testnet"
          },
          "walletName": {
            "type": "string",
            "example": "My Trust Wallet"
          }
        },
        "x-source-svc": "transactions"
      },
      "TransferRate": {
        "type": "object",
        "required": [
          "accountCurrency",
          "cashCurrency",
          "rate"
        ],
        "properties": {
          "accountCurrency": {
            "type": "string",
            "example": "USD"
          },
          "cashCurrency": {
            "type": "string",
            "description": "The cash (fiat) currency. For cash payments this is the payout currency; for cash deposits the pay-in currency.",
            "example": "NGN"
          },
          "rate": {
            "type": "number",
            "example": 1500.5
          }
        },
        "x-source-svc": "ledger"
      },
      "TransferResponse": {
        "type": "object",
        "additionalProperties": false,
        "description": "The payment initiation response",
        "required": [
          "id",
          "status",
          "awaiting2fA"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "P12005E1DV"
          },
          "status": {
            "$ref": "#/components/schemas/TransactionStatus"
          },
          "awaiting2fA": {
            "type": "boolean",
            "default": false,
            "description": "Indicates if transfer is awaiting 2FA confirmation. This applies mostly to transaction initiated via dashboard"
          },
          "twoFaMethod": {
            "type": "array",
            "description": "List of 2fa enabled",
            "items": {
              "$ref": "#/components/schemas/User2FAMethod"
            }
          }
        },
        "x-source-svc": "ledger"
      },
      "UltimateBeneficialOwner": {
        "type": "object",
        "description": "An individual owning 25% or more of the business",
        "required": [
          "fullName",
          "email",
          "ownershipPercentage"
        ],
        "properties": {
          "fullName": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "ownershipPercentage": {
            "type": "number"
          }
        },
        "x-source-svc": "exchange"
      },
      "UpdateProfileRequestDto": {
        "type": "object",
        "properties": {
          "fullname": {
            "type": "string",
            "description": "User's full name"
          },
          "country": {
            "type": "string",
            "description": "User's country",
            "example": "NG"
          },
          "dob": {
            "type": "string",
            "description": "User's date of birth",
            "format": "date",
            "example": "2024-04-18T00:00:00.000Z"
          },
          "hasBusinessBankAccount": {
            "type": "boolean",
            "description": "partner has a business account"
          },
          "displayName": {
            "type": "string",
            "description": "User's display name"
          },
          "proofOfAddress": {
            "type": "string",
            "description": "Proof of partner's address"
          }
        },
        "x-source-svc": "users"
      },
      "UpdateSubAccountRequest": {
        "type": "object",
        "required": [
          "frozen"
        ],
        "properties": {
          "displayName": {
            "type": "string",
            "description": "An optional name for the sub-account."
          },
          "frozen": {
            "type": "boolean",
            "description": "Indicates if the sub-account is frozen (locked) or not.",
            "default": false
          }
        },
        "x-source-svc": "ledger"
      },
      "User2FAMethod": {
        "type": "string",
        "enum": [
          "AUTHENTICATOR_APP",
          "EMAIL",
          "SMS"
        ],
        "x-source-svc": "ledger"
      },
      "UserAuthInitRequest": {
        "required": [
          "email"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "user's email"
          }
        },
        "x-source-svc": "auth"
      },
      "UserAuthInitResponse": {
        "type": "object",
        "properties": {
          "authSessionId": {
            "type": "string",
            "description": "The log in session ID of the user, valid for the duration of the OTP validity",
            "format": "uuid"
          },
          "isReturning": {
            "type": "boolean",
            "description": "Indicates if user is a returning user, i.e. previously verified",
            "default": false
          }
        },
        "x-source-svc": "auth"
      },
      "UserAuthOtpResendRequest": {
        "type": "object",
        "required": [
          "authSessionId"
        ],
        "properties": {
          "authSessionId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "x-source-svc": "auth"
      },
      "UserAuthOtpResendResponse": {
        "type": "object",
        "properties": {
          "sent": {
            "type": "boolean"
          },
          "authSessionId": {
            "type": "string"
          }
        },
        "x-source-svc": "auth"
      },
      "UserAuthOtpVerificationRequest": {
        "required": [
          "authSessionId",
          "otp"
        ],
        "type": "object",
        "properties": {
          "authSessionId": {
            "type": "string",
            "description": "The log in session ID of the user, valid for the duration of the OTP validity",
            "format": "uuid"
          },
          "otp": {
            "type": "string",
            "description": "The verification code sent to user (partner) email"
          }
        },
        "x-source-svc": "auth"
      },
      "UserDataDto": {
        "required": [
          "email",
          "userId"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "the user ID"
          },
          "email": {
            "type": "string",
            "description": "User's email"
          },
          "name": {
            "type": "string",
            "description": "Name of customer"
          },
          "phoneNumber": {
            "type": "string",
            "description": "User phone number",
            "example": "2348100000000"
          },
          "phoneNumberVerified": {
            "type": "boolean",
            "description": "flag indicating if user has verified their phone number"
          },
          "fullName": {
            "type": "string",
            "description": "user's kyc fullname"
          },
          "referralLink": {
            "type": "string",
            "description": "referral link"
          },
          "referralCode": {
            "type": "string",
            "description": "referral code generated for this user. Also known as onboard pass"
          },
          "userType": {
            "$ref": "#/components/schemas/UsersSvcUserType"
          },
          "roles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserRoles"
            }
          },
          "isCustomer": {
            "type": "boolean"
          },
          "isMerchant": {
            "type": "boolean"
          },
          "isOnboardWalletUser": {
            "type": "boolean",
            "description": "flag indicating if user is an Onboard wallet user or not. i.e user has made use of/sign in using Onboard wallet before."
          },
          "isOpnMerchant": {
            "type": "boolean",
            "description": "Indicates if the merchant has been provisioned for OPN"
          },
          "isMerchantNetwork": {
            "type": "boolean"
          },
          "kycStatus": {
            "$ref": "#/components/schemas/KycJobStatus"
          },
          "kycRetryCount": {
            "type": "number",
            "description": "The number of kyc retries"
          },
          "kycRetryLimit": {
            "type": "number",
            "description": "kyc retry limit"
          },
          "kycNameHistory": {
            "type": "array",
            "description": "History of name change",
            "items": {
              "$ref": "#/components/schemas/KycNameChangeHistoryDto"
            }
          },
          "comments": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "comment": {
                  "type": "string"
                },
                "addedBy": {
                  "type": "string"
                }
              }
            }
          },
          "includes": {
            "type": "object",
            "properties": {}
          },
          "supportedCurrencies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "language": {
            "type": "string",
            "description": "Language preference (preferred or detected).\nCan be just language (en) or locale (en-GB). See samples\n",
            "example": "en, en-US, fr-FR, pt-BR"
          },
          "availability": {
            "type": "boolean"
          },
          "active": {
            "type": "boolean"
          },
          "country": {
            "type": "string"
          },
          "verifiedAddress": {
            "type": "string",
            "description": "Wallet Address connected to user's account.",
            "example": "0x15b8b00fb8d2bd7d76e90e70294e87fc6ba79e3b"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileDataDto"
          },
          "transactionLimit": {
            "$ref": "#/components/schemas/UserTransactionLimit"
          },
          "authSource": {
            "type": "string",
            "description": "specifies the user's wallet source"
          },
          "createdAt": {
            "type": "string",
            "description": "Timestamp field.",
            "format": "date-time"
          },
          "lastActiveAt": {
            "type": "string",
            "description": "Timestamp field.",
            "format": "date-time"
          },
          "isTotpSetup": {
            "type": "boolean"
          },
          "totpSetupAt": {
            "type": "string",
            "description": "Timestamp field.",
            "format": "date-time"
          },
          "verifiedPhoneNumberLastUpdatedAt": {
            "type": "string",
            "description": "Timestamp field.",
            "format": "date-time"
          }
        },
        "x-source-svc": "users"
      },
      "UserProfileDataDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "userType": {
            "$ref": "#/components/schemas/UsersSvcUserType"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileDataDto"
          }
        },
        "x-source-svc": "users"
      },
      "UserRoles": {
        "type": "string",
        "description": "the roles a user can possess on Onboard",
        "enum": [
          "CUSTOMER",
          "MERCHANT",
          "MERCHANT_NETWORK"
        ],
        "x-source-svc": "users"
      },
      "UserTransactionLimit": {
        "type": "object",
        "properties": {
          "dailyTransactionLimit": {
            "type": "number"
          },
          "maxSingleTransactionLimit": {
            "type": "number"
          },
          "minSingleTransactionLimit": {
            "type": "number"
          },
          "maxLifetimeLimit": {
            "type": "number"
          }
        },
        "x-source-svc": "users"
      },
      "UserType": {
        "type": "string",
        "description": "Type of user/role of user in transaction",
        "enum": [
          "CUSTOMER",
          "PARTNER"
        ],
        "x-source-svc": "transactions"
      },
      "UsersSvcUserType": {
        "type": "string",
        "description": "the type of the user",
        "enum": [
          "CUSTOMER",
          "PARTNER"
        ],
        "x-source-svc": "users"
      },
      "VerificationData": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "example": "Hello Onboard"
          },
          "signature": {
            "type": "string",
            "example": 1.4274191415664356e+156
          },
          "timestamp": {
            "type": "integer",
            "example": 1655483046
          },
          "otp": {
            "type": "string",
            "example": "1655483046"
          },
          "totp": {
            "type": "string",
            "description": "User totp from authenticator app",
            "example": 28404
          }
        },
        "x-source-svc": "transactions"
      },
      "VerificationStatus": {
        "type": "string",
        "description": "user's verification status",
        "enum": [
          "VERIFIED",
          "UNVERIFIED",
          "FAILED_VERIFICATION",
          "REVIEW_REQUIRED",
          "IN_PROGRESS",
          "REJECTED"
        ],
        "x-source-svc": "users"
      },
      "WalletDTO": {
        "type": "object",
        "properties": {
          "walletAddress": {
            "type": "string",
            "example": 0
          },
          "networkId": {
            "type": "string",
            "example": "bsc_testnet"
          },
          "walletName": {
            "type": "string",
            "example": "My Trust Wallet"
          }
        },
        "x-source-svc": "exchange"
      }
    },
    "securitySchemes": {
      "HMACAuth": {
        "type": "apiKey",
        "name": "x-api-key",
        "in": "header",
        "description": "Requires authentication via API key and HMAC signature.\n  * `x-api-key`: Your API key generated from your Onboard Business dashboard.\n  * `x-timestamp`:  Unix epoch timestamp (seconds) used in signature, allowed skew is 30 seconds\n  * `x-signature`: SHA256 HMAC HEX signature calculated over  `t={x-timestamp}&{requestBody}` using your API Secret."
      },
      "authSignature": {
        "type": "apiKey",
        "name": "x-signature",
        "in": "header"
      }
    },
    "parameters": {
      "ExchangeSvcfiatAmountQueryParam": {
        "name": "fiatAmount",
        "in": "query",
        "schema": {
          "type": "number"
        }
      },
      "ExchangeSvcfiatQueryParam": {
        "name": "fiat",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ExchangeSvclimitQueryParam": {
        "name": "limit",
        "in": "query",
        "description": "Pagination limit",
        "schema": {
          "type": "number"
        }
      },
      "ExchangeSvcmerchantIdQueryParam": {
        "name": "merchantId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        }
      },
      "ExchangeSvcnetworkQueryParam": {
        "name": "networkId",
        "in": "query",
        "description": "Onboard blockchain network identifier or chain Id e.g Base will be `base` or `8453` or `0x2105`",
        "schema": {
          "type": "string"
        }
      },
      "ExchangeSvcofferTypeQueryParam": {
        "name": "offerType",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/OfferTypeQueryParamOfferTypeEnum"
        }
      },
      "ExchangeSvcpageQueryParam": {
        "name": "page",
        "in": "query",
        "schema": {
          "type": "number"
        }
      },
      "ExchangeSvcpaymentChannelQueryParam": {
        "name": "paymentChannel",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ExchangeSvcpaymentChannelTypeQueryParam": {
        "name": "paymentChannelType",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ExchangeSvctokenAmountQueryParam": {
        "name": "tokenAmount",
        "in": "query",
        "schema": {
          "type": "number"
        }
      },
      "ExchangeSvctokenQueryParam": {
        "name": "token",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ExchangeSvctradeTypeQueryParam": {
        "name": "tradeType",
        "in": "query",
        "description": "Type of trade (maps to transaction type: BUY - ONRAMP, SELL - OFFRAMP)\n",
        "required": false,
        "schema": {
          "$ref": "#/components/schemas/TradeTypeQueryParamTradeTypeEnum"
        }
      },
      "LedgerSvcaccountHolderType": {
        "name": "accountHolderType",
        "description": "The account holder type",
        "required": false,
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/AccountHolderType"
        }
      },
      "LedgerSvcaccountId": {
        "in": "path",
        "name": "accountId",
        "description": "the unique onboard account ID",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "LedgerSvcaccountIdQuery": {
        "name": "accountId",
        "description": "The ID for the main account for the request.",
        "required": false,
        "in": "query",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "LedgerSvcaccountNumberCurrencyQuery": {
        "in": "query",
        "name": "currency",
        "description": "Currency of the bank account number to generate or retrieve.",
        "required": false,
        "schema": {
          "type": "string",
          "default": "USD",
          "example": "NGN"
        }
      },
      "LedgerSvcactivityId": {
        "in": "path",
        "name": "activityId",
        "description": "The unique transaction activity ID",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "LedgerSvcanyAccountIdQuery": {
        "name": "accountId",
        "description": "Any account ID (could be Main account, sub-account or offramp account)",
        "required": false,
        "in": "query",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "LedgerSvcassetCode": {
        "in": "path",
        "name": "assetCode",
        "description": "The assets code of a crypto",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "LedgerSvcbeneficiaryId": {
        "in": "path",
        "name": "beneficiaryId",
        "description": "The unique ID of a beneficiary",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "LedgerSvccurrencyCode": {
        "name": "currency",
        "description": "The currency code for the request.",
        "required": false,
        "in": "query",
        "schema": {
          "type": "string",
          "example": "USD"
        }
      },
      "LedgerSvcpage": {
        "in": "query",
        "name": "page",
        "required": false,
        "description": "Page parameter, starting from 1",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "default": 1
        }
      },
      "LedgerSvcreferenceId": {
        "in": "path",
        "name": "referenceId",
        "description": "The transaction or transfer reference ID",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "LedgerSvcsize": {
        "in": "query",
        "name": "size",
        "required": false,
        "schema": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "default": 20
        }
      },
      "LedgerSvcsubAccountIdOrRef": {
        "in": "path",
        "name": "subAccountIdRef",
        "description": "The unique onboard sub-account ID or reference\n",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "LedgerSvctransferReference": {
        "in": "path",
        "name": "transferReference",
        "description": "The transfer unique ID",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "OffersSvcfiatSymbolQueryParam": {
        "name": "fiatSymbol",
        "in": "query",
        "schema": {
          "type": "string"
        },
        "required": false
      },
      "OffersSvcfiatUnitAmountQueryParam": {
        "name": "fiatUnitAmount",
        "in": "query",
        "schema": {
          "type": "number"
        }
      },
      "OffersSvcmerchantBlackListQueryParam": {
        "name": "exemptedMerchants",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "OffersSvcnetworkQueryParam": {
        "in": "query",
        "name": "network",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Blockchain network identifier"
      },
      "OffersSvcofferTypeQueryParam": {
        "name": "offerType",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/OffersSvcOfferType"
        },
        "required": false
      },
      "OffersSvcpaymentChannelQueryParam": {
        "name": "paymentChannel",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "OffersSvcprioritizeIpQueryParam": {
        "name": "prioritizeIp",
        "in": "query",
        "required": false,
        "schema": {
          "type": "boolean"
        }
      },
      "OffersSvctokenSymbolQueryParam": {
        "name": "tokenSymbol",
        "in": "query",
        "schema": {
          "type": "string"
        },
        "required": false
      },
      "OffersSvcunitAmountQueryParam": {
        "name": "unitAmount",
        "in": "query",
        "schema": {
          "type": "number"
        }
      },
      "OrdersSvcorderType": {
        "name": "type",
        "in": "query",
        "description": "Filter orders by type (BUY or SELL). When omitted, orders of both types are returned.",
        "schema": {
          "$ref": "#/components/schemas/OrderType"
        }
      },
      "OrdersSvcpageNumber": {
        "name": "page",
        "in": "query",
        "description": "Page number of items to return",
        "schema": {
          "type": "integer",
          "format": "int32",
          "default": 1
        }
      },
      "OrdersSvcpageSize": {
        "name": "size",
        "in": "query",
        "description": "Number of items to return",
        "schema": {
          "type": "integer",
          "format": "int32",
          "default": 20
        }
      },
      "TransactionsSvcfiatQueryParam": {
        "name": "fiat",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "TransactionsSvcfromDateParam": {
        "name": "from",
        "in": "query",
        "description": "15-04-2022",
        "schema": {
          "type": "string",
          "pattern": "\\d{2}-\\d{2}-\\d{4}"
        }
      },
      "TransactionsSvcidPathVariable": {
        "name": "id",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "TransactionsSvcidPathVariableForUserId": {
        "name": "id",
        "in": "path",
        "description": "userId",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "TransactionsSvcisTradeRequestBroadcastQueryParam": {
        "name": "isTradeRequestBroadcast",
        "in": "query",
        "schema": {
          "type": "boolean"
        }
      },
      "TransactionsSvcnetworkQueryParam": {
        "name": "network",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "TransactionsSvcotherPartyQueryParam": {
        "name": "otherPartyId",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "TransactionsSvcpageParam": {
        "name": "page",
        "in": "query",
        "schema": {
          "type": "integer"
        }
      },
      "TransactionsSvcpaymentChannelQueryParam": {
        "name": "paymentChannel",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "TransactionsSvcreferenceQueryParam": {
        "name": "reference",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "TransactionsSvcsizeParam": {
        "name": "size",
        "in": "query",
        "schema": {
          "type": "integer"
        }
      },
      "TransactionsSvcstatusesParam": {
        "name": "statuses",
        "in": "query",
        "style": "form",
        "explode": false,
        "schema": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/TransactionOrderStatus"
          }
        }
      },
      "TransactionsSvctoDateParam": {
        "name": "to",
        "in": "query",
        "description": "15-08-2022",
        "schema": {
          "type": "string",
          "pattern": "\\d{2}-\\d{2}-\\d{4}"
        }
      },
      "TransactionsSvctokenQueryParam": {
        "name": "token",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "TransactionsSvctransactionTypeParam": {
        "name": "transactionType",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/TransactionsSvcTransactionType"
        }
      }
    },
    "responses": {
      "LedgerSvcAccessDenied": {
        "description": "Expected permission is not available.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "ACCESS_DENIED",
              "message": "Expected permission or scope is not present."
            }
          }
        }
      },
      "LedgerSvcEntityAlreadyExist": {
        "description": "Entity already exist, it can not be created.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "ENTITY_ALREADY_EXIST",
              "message": "Entity already exist, it can not be created."
            }
          }
        }
      },
      "LedgerSvcInvalidRequest": {
        "description": "Request could not be validated",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "BAD_REQUEST",
              "message": "Request could not be validated."
            }
          }
        }
      },
      "LedgerSvcNotFound": {
        "description": "Entity was not found",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "NOT_FOUND",
              "message": "Information could not be found"
            }
          }
        }
      },
      "LedgerSvcServerError": {
        "description": "Internal Server Error",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "INTERNAL_ERROR",
              "message": "An internal server error occurred."
            }
          }
        }
      },
      "LedgerSvcUnauthorized": {
        "description": "Client is not authorized to make request",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "UNAUTHORIZED",
              "message": "Either client security header is missing or it is not valid."
            }
          }
        }
      },
      "OrdersSvcAccessDenied": {
        "description": "Expected permission is not available.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "ACCESS_DENIED",
              "message": "Expected permission or scope is not present."
            }
          }
        }
      },
      "OrdersSvcNotFound": {
        "description": "Entity was not found",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "NOT_FOUND",
              "message": "Information could not be found"
            }
          }
        }
      },
      "OrdersSvcServerError": {
        "description": "Internal Server Error",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "INTERNAL_ERROR",
              "message": "An internal server error occurred."
            }
          }
        }
      },
      "OrdersSvcUnauthorized": {
        "description": "Client is not authorized to make request",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessageDto"
            },
            "example": {
              "code": "UNAUTHORIZED",
              "message": "Either client security header is missing or it is not valid."
            }
          }
        }
      }
    }
  },
  "x-preserve-refs": [
    "#/components/schemas/IntegrationProduct",
    "#/components/schemas/AdAppliedEscrowBalanceDto",
    "#/components/schemas/P2PWalletRecipient",
    "#/components/schemas/BankAccountRecipient",
    "#/components/schemas/MobileMoneyRecipient",
    "#/components/schemas/OrderEvent",
    "#/components/schemas/PaymentMethodEventAction",
    "#/components/schemas/PaymentMethodEventPayload",
    "#/components/schemas/TransactionServiceErrorCode",
    "#/components/schemas/ErrorCodes"
  ]
}