{
  "components": {
    "responses": {
      "conflict": {
        "description": "Conflict"
      },
      "accepted": {
        "description": "Accepted"
      },
      "bad_request": {
        "description": "Bad Request"
      },
      "forbidden": {
        "description": "Forbidden"
      },
      "no_content": {
        "description": "No Content"
      },
      "not_found": {
        "content": {
          "application/json": {
            "schema": {
              "type": "string"
            }
          }
        },
        "description": "Not Found"
      },
      "unprocessable_entity": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object"
            }
          }
        },
        "description": "Unprocessable Entity"
      }
    },
    "schemas": {
      "AddTransferParams": {
        "type": "object"
      },
      "TransfersResponse": {
        "type": "object"
      },
      "BulkTransferListResponse": {
        "type": "object"
      },
      "InitiateBulkTransferParams": {
        "type": "object"
      },
      "BulkTransferResponse": {
        "type": "object"
      },
      "PaymentStatsResponse": {
        "type": "object"
      },
      "PayoutResponse": {
        "type": "object"
      },
      "GenerateReceiptResponse": {
        "type": "object"
      },
      "PayoutChargeResponse": {
        "type": "object"
      },
      "PaymentSessionResponse": {
        "type": "object"
      },
      "PaymentLinkListResponse": {
        "type": "object"
      },
      "CreatePaymentLinkParams": {
        "type": "object"
      },
      "PaymentSessionUpdateParams": {
        "type": "object"
      },
      "PaymentSessionCaptureParams": {
        "type": "object"
      },
      "RefundPaymentInitiationParams": {
        "type": "object"
      },
      "PaymentResponse": {
        "type": "object"
      },
      "PaymentListResponse": {
        "type": "object"
      },
      "PaymentSessionInitiationParams": {
        "type": "object"
      },
      "PaymentLinkResponse": {
        "type": "object"
      },
      "UpdatePaymentLinkParams": {
        "type": "object"
      },
      "UrlResponse": {
        "type": "object"
      },
      "PayoutInitiationParams": {
        "type": "object"
      },
      "PaymentSessionAuthorizationParams": {
        "type": "object"
      },
      "EncryptionKeyResponse": {
        "type": "object"
      },
      "ListPayoutResponse": {
        "type": "object"
      },
      "MerchantResponse": {
        "example": {
          "data": {
            "active": "true,",
            "address": {
              "city": "South Ted",
              "country": "NG",
              "line1": "28 Kristy Place",
              "line2": "Suite 289",
              "state": "Adamawa",
              "zip_code": 35654
            },
            "email": "flossie1994@fay.com",
            "id": "21b44c27-6017-4815-84a2-be128426b7ce",
            "mcc": 5997,
            "name": "Hoeger-Hills",
            "display_name": "Hoeger-Hills",
            "logo_url": "https://picsum.photos/786",
            "phone": "+2348026585106",
            "settings": {
              "accept_overpayment": false,
              "accept_underpayment": true,
              "fee_chargeable_to": "merchant"
            }
          }
        },
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "active": {
                "type": "boolean"
              },
              "address": {
                "type": "object",
                "properties": {
                  "city": {
                    "type": "string"
                  },
                  "country": {
                    "type": "string"
                  },
                  "line1": {
                    "type": "string"
                  },
                  "line2": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  },
                  "zip_code": {
                    "type": "string"
                  }
                }
              },
              "email": {
                "type": "string",
                "format": "email"
              },
              "id": {
                "type": "string"
              },
              "mcc": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "display_name": {
                "type": "string"
              },
              "logo_url": {
                "type": "string",
                "format": "url"
              },
              "phone": {
                "type": "string"
              },
              "settings": {
                "type": "object",
                "properties": {
                  "accept_overpayment": {
                    "type": "boolean"
                  },
                  "accept_underpayment": {
                    "type": "boolean"
                  },
                  "fee_chargeable_to": {
                    "type": "string",
                    "enum": [
                      "merchant",
                      "customer"
                    ]
                  }
                }
              }
            }
          }
        }
      },
      "PaymentSessionCancelParams": {
        "example": {
          "reason": "Some reason"
        },
        "description": "Cancel Payment Session params",
        "properties": {
          "reason": {
            "type": "string"
          }
        }
      },
      "UpdateStandingOrderParams": {
        "description": "Standing Order update params",
        "example": {
          "archived": false,
          "qty": 1.0,
          "strict": true
        },
        "properties": {
          "archived": {
            "type": "boolean"
          },
          "low_watermark_qty": {
            "description": "Minimum quantity level to inform market maker, in base currency",
            "type": "number"
          },
          "min_qty": {
            "description": "Minimum quantity to be traded at a go, in base currency",
            "nullable": true,
            "type": "number"
          },
          "qty": {
            "description": "Order quantity, denominated in the base currency",
            "type": "number"
          },
          "strict": {
            "description": "Should always open orders == qty or not",
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "symbol",
          "strict",
          "low_watermark_qty"
        ],
        "title": "UpdateStandingOrderParams",
        "type": "object"
      },
      "SwapDetails": {
        "description": "Swap details",
        "example": {
          "correlation_id": "7da742ea-a1bc-11ee-b907-560f156a658b",
          "created_at": "2021-01-01T00:00:00Z",
          "customer": {
            "email": "customer@email.com",
            "id": "1",
            "name": "User 1",
            "type": "user"
          },
          "id": "7da8e726-a1bc-11ee-80cf-560f156a658b",
          "provider": {
            "email": "provider@email.com",
            "id": "1",
            "name": "Provider 1",
            "type": "provider"
          },
          "source_amount": {
            "amount": 1.0,
            "currency": "USD"
          },
          "status": "success",
          "symbol": "USD-NGN",
          "target_amount": {
            "amount": 1.0e3,
            "currency": "NGN"
          },
          "updated_at": "2021-01-01T00:00:00Z"
        },
        "properties": {
          "client_reference": {
            "description": "Reference",
            "nullable": true,
            "type": "string"
          },
          "correlation_id": {
            "description": "Correlation ID",
            "type": "string"
          },
          "created_at": {
            "description": "Creation timestamp",
            "format": "date-time",
            "type": "string"
          },
          "customer": {
            "$ref": "#/components/schemas/Profile"
          },
          "fee_amount": {
            "description": "Fee Amount",
            "type": "number"
          },
          "fee_currency": {
            "description": "Fee Currency",
            "type": "string"
          },
          "id": {
            "description": "Id",
            "type": "string"
          },
          "provider": {
            "$ref": "#/components/schemas/Profile"
          },
          "source_amount": {
            "description": "Source Amount",
            "type": "number"
          },
          "source_currency": {
            "description": "Source Currency",
            "type": "string"
          },
          "status": {
            "enum": [
              "pending",
              "success",
              "failed"
            ],
            "type": "string"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "target_amount": {
            "description": "Target Amount",
            "type": "number"
          },
          "target_currency": {
            "description": "Target Currency",
            "type": "string"
          },
          "updated_at": {
            "description": "Update timestamp",
            "format": "date-time",
            "type": "string"
          }
        },
        "title": "SwapDetails",
        "type": "object"
      },
      "StandingOrderResponse": {
        "description": "Response schema for a single standing order",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/StandingOrder"
          }
        },
        "title": "StandingOrderResponse",
        "type": "object"
      },
      "CreateRateParams": {
        "description": "Rate creation params",
        "example": {
          "buy": 100,
          "pair": "USD-NGN",
          "sell": 75000,
          "ttl": 60
        },
        "properties": {
          "buy": {
            "description": "Buy rate, in minor units",
            "type": "integer"
          },
          "pair": {
            "description": "Currency pair",
            "type": "string"
          },
          "sell": {
            "description": "Sell rate, in minor units",
            "type": "integer"
          },
          "ttl": {
            "description": "Price TTL, in seconds",
            "type": "integer"
          }
        },
        "required": [
          "pair",
          "buy"
        ],
        "title": "CreateRateParams",
        "type": "object"
      },
      "MarketMakerResponse": {
        "description": "Response schema for a single market maker",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/MarketMaker"
          }
        },
        "title": "MarketMakerResponse",
        "type": "object"
      },
      "SwapListResponse": {
        "description": "Response schema for multiple swaps",
        "properties": {
          "data": {
            "description": "Swap list",
            "items": {
              "$ref": "#/components/schemas/SwapDetails"
            },
            "type": "array"
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "title": "SwapListResponse",
        "type": "object"
      },
      "MarketMakersResponse": {
        "description": "Response schema for multiple market makers",
        "properties": {
          "data": {
            "description": "Market makers",
            "items": {
              "$ref": "#/components/schemas/MarketMaker"
            },
            "type": "array"
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "title": "MarketMakersResponse",
        "type": "object"
      },
      "RatesResponse": {
        "description": "Response schema for multiple rates",
        "properties": {
          "data": {
            "description": "Rate list",
            "items": {
              "$ref": "#/components/schemas/Rate"
            },
            "type": "array"
          }
        },
        "title": "RatesResponse",
        "type": "object"
      },
      "CreateOrderParams": {
        "description": "Order creation params",
        "example": {
          "qty": 1.0,
          "symbol": "USD-NGN",
          "type": "buy"
        },
        "properties": {
          "min_qty": {
            "description": "Minimum quantity to be traded at a go, in base currency",
            "nullable": true,
            "type": "number"
          },
          "min_quote_qty": {
            "description": "Minimum quantity to be traded at a go, in quote currency",
            "nullable": true,
            "type": "number"
          },
          "price": {
            "description": "Order price, in minor units",
            "type": "integer"
          },
          "price_type": {
            "description": "Price type",
            "enum": [
              "limit",
              "market"
            ],
            "type": "string"
          },
          "qty": {
            "description": "Order quantity, denominated in the base currency",
            "type": "number"
          },
          "quote_qty": {
            "description": "Order quantity, denominated in the quote currency",
            "nullable": true,
            "type": "number"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "time_in_force": {
            "enum": [
              "gtc",
              "gtt",
              "ioc",
              "fok"
            ],
            "type": "string"
          },
          "type": {
            "description": "Order type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "symbol"
        ],
        "title": "CreateOrderParams",
        "type": "object"
      },
      "MarketMaker": {
        "example": {
          "archived": false,
          "contacts": [
            {
              "email": "test@user.com",
              "id": "7da8e726-a1bc-11ee-80cf-560f156a658b",
              "name": "Test User",
              "type": "user"
            }
          ],
          "email": "anon@nymous.com",
          "entity": {
            "id": "6ebe0a0f-bb8f-49be-80ea-c6b72c348fea",
            "type": "business"
          },
          "id": "7da75a46-a1bc-11ee-9a32-560f156a658b",
          "name": "Anon Nymous",
          "swap_provider": false,
          "swap_weight": 0
        },
        "properties": {
          "archived": {
            "description": "Archived?",
            "type": "boolean"
          },
          "contacts": {
            "items": {
              "$ref": "#/components/schemas/Contact"
            },
            "type": "array"
          },
          "email": {
            "description": "Email",
            "type": "string"
          },
          "entity": {
            "properties": {
              "id": {
                "description": "Account id",
                "type": "string"
              },
              "type": {
                "description": "Account type",
                "enum": [
                  "business",
                  "personal"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "id": {
            "description": "Id",
            "type": "string"
          },
          "name": {
            "description": "Name",
            "type": "string"
          },
          "swap_provider": {
            "description": "Is swap provider?",
            "type": "boolean"
          },
          "swap_weight": {
            "description": "Swap weight",
            "type": "integer"
          }
        },
        "title": "MarketMaker",
        "type": "object"
      },
      "Profile": {
        "description": "Profile Details",
        "example": {
          "email": "customer@email.com",
          "id": "1",
          "name": "User 1",
          "type": "user"
        },
        "properties": {
          "email": {
            "description": "Provider email",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "description": "Provider ID",
            "type": "string"
          },
          "name": {
            "description": "Provider name",
            "nullable": true,
            "type": "string"
          },
          "type": {
            "description": "Provider type",
            "type": "string"
          }
        },
        "title": "Profile",
        "type": "object"
      },
      "Order": {
        "description": "An order",
        "example": {
          "accepted_at": "2023-12-23T17:55:42.919523",
          "average_fill_price": 80000,
          "business_id": "dd625bec-b1a3-466e-867e-c91ae0b6e71e",
          "correlation_id": "7da742ea-a1bc-11ee-b907-560f156a658b",
          "created_at": "2023-12-23T17:55:42.911",
          "expires_at": null,
          "id": "7da75a46-a1bc-11ee-9a32-560f156a658b",
          "min_qty": null,
          "min_quote_qty": null,
          "percent_filled": 10000,
          "price": 80000,
          "price_type": "market",
          "qty": 1.0,
          "quote_qty": null,
          "status": "filled",
          "symbol": "USD-NGN",
          "time_in_force": "gtc",
          "trades": [
            {
              "buy_order_id": "7da75a46-a1bc-11ee-9a32-560f156a658b",
              "commission": 0,
              "correlation_id": "7da742ea-a1bc-11ee-b907-560f156a658b",
              "created_at": "2023-12-23T17:55:42.921",
              "id": "7da8e726-a1bc-11ee-80cf-560f156a658b",
              "price": 80000,
              "sell_order_id": "7d97c0b8-a1bc-11ee-b240-560f156a658b",
              "size": 1.0,
              "symbol": "USD-NGN"
            }
          ],
          "type": "buy",
          "updated_at": "2023-12-23T17:55:42.911",
          "user_id": "b101f718-d133-450c-a572-c281c7341803"
        },
        "properties": {
          "accepted_at": {
            "description": "Order book registration timestamp",
            "format": "date-time",
            "type": "string"
          },
          "average_fill_price": {
            "description": "Order average price, in major units",
            "nullable": true,
            "type": "string"
          },
          "correlation_id": {
            "description": "Correlation ID",
            "type": "string"
          },
          "created_at": {
            "description": "Creation timestamp",
            "format": "date-time",
            "type": "string"
          },
          "expires_at": {
            "description": "Expiration timestamp",
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "description": "Order ID",
            "type": "string"
          },
          "min_qty": {
            "description": "Minimum quantity to be traded at a go, in base currency",
            "nullable": true,
            "type": "number"
          },
          "min_quote_qty": {
            "description": "Minimum quantity to be traded at a go, in quote currency",
            "nullable": true,
            "type": "number"
          },
          "percent_filled": {
            "description": "Percentage of qty filled, in basis points",
            "type": "integer"
          },
          "price": {
            "description": "Order price, in major units",
            "type": "string"
          },
          "price_type": {
            "description": "Price type",
            "enum": [
              "limit",
              "market"
            ],
            "type": "string"
          },
          "qty": {
            "description": "Order quantity, denominated in the base currency",
            "nullable": true,
            "type": "number"
          },
          "quote_qty": {
            "description": "Order quantity, denominated in the quote currency",
            "nullable": true,
            "type": "number"
          },
          "status": {
            "enum": [
              "open",
              "cancelled",
              "rejected",
              "filled",
              "expired",
              "closed"
            ],
            "type": "string"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "time_in_force": {
            "enum": [
              "gtc",
              "gtt",
              "ioc",
              "fok"
            ],
            "type": "string"
          },
          "trades": {
            "description": "Trades",
            "items": {
              "$ref": "#/components/schemas/Trade"
            },
            "type": "array"
          },
          "type": {
            "description": "Order type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          },
          "updated_at": {
            "description": "Update timestamp",
            "format": "date-time",
            "type": "string"
          }
        },
        "title": "Order",
        "type": "object"
      },
      "UpdateMarketMakerParams": {
        "example": {
          "archived": false,
          "swap_provider": false,
          "swap_weight": 0
        },
        "properties": {
          "archived": {
            "type": "boolean"
          },
          "swap_provider": {
            "type": "boolean"
          },
          "swap_weight": {
            "type": "integer"
          }
        },
        "title": "UpdateMarketMakerParams",
        "type": "object"
      },
      "AggregatorSwapRateResponse": {
        "description": "Response schema for a aggregator swap rate",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/AggregatorSwapRate"
          }
        },
        "title": "AggregatorSwapRateResponse",
        "type": "object"
      },
      "CreateStandingOrderParams": {
        "description": "Standing Order creation params",
        "example": {
          "qty": 1.0,
          "symbol": "USD-NGN",
          "type": "buy"
        },
        "properties": {
          "low_watermark_qty": {
            "description": "Minimum quantity level to inform market maker, in base currency",
            "type": "number"
          },
          "min_qty": {
            "description": "Minimum quantity to be traded at a go, in base currency",
            "nullable": true,
            "type": "number"
          },
          "qty": {
            "description": "Order quantity, denominated in the base currency",
            "type": "number"
          },
          "strict": {
            "description": "Should always open orders == qty or not",
            "type": "boolean"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "type": {
            "description": "Order type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "symbol",
          "strict",
          "low_watermark_qty"
        ],
        "title": "CreateStandingOrderParams",
        "type": "object"
      },
      "SwapRateResponse": {
        "description": "Response schema for a swap rate",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/SwapRate"
          }
        },
        "title": "SwapRateResponse",
        "type": "object"
      },
      "SwapResponse": {
        "description": "Response schema for swap",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/SwapDetails"
          }
        },
        "title": "SwapResponse",
        "type": "object"
      },
      "FetchMarketPriceResponse": {
        "description": "Response schema for market prices",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/MarketPrice"
          }
        },
        "title": "FetchMarketPriceResponse",
        "type": "object"
      },
      "ConversionResponse": {
        "description": "Conversion response",
        "example": {
          "data": {
            "converted_amount": "100.00"
          }
        },
        "properties": {
          "data": {
            "description": "Conversion response",
            "properties": {
              "converted_amount": {
                "description": "Converted amount, in major units",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "title": "ConversionResponse",
        "type": "object"
      },
      "OrderBookEntry": {
        "description": "An order book entry",
        "example": {
          "business_id": "ce8331b2-a396-46c1-9638-5db5e9cf5b2e",
          "created_at": "2023-12-23T19:11:23.097",
          "id": "0fd0baf2-a1c7-11ee-ae88-560f156a658b",
          "percent_filled": 0,
          "price": 75000,
          "price_type": "limit",
          "status": "open",
          "time_in_force": "gtc",
          "total_qty": "1",
          "unfilled_qty": "1.0",
          "user_id": "82dde615-d181-4f3e-8d3f-53ac7962feb7"
        },
        "properties": {
          "business_id": {
            "description": "Business ID",
            "type": "string"
          },
          "created_at": {
            "description": "Creation timestamp",
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "description": "Order ID",
            "type": "string"
          },
          "percent_filled": {
            "description": "Portion of order quantity filled, in basis points",
            "type": "integer"
          },
          "price": {
            "description": "Order price",
            "type": "string"
          },
          "price_type": {
            "description": "Price type",
            "enum": [
              "limit",
              "market"
            ],
            "type": "string"
          },
          "status": {
            "enum": [
              "open",
              "cancelled",
              "rejected",
              "filled",
              "expired",
              "closed"
            ],
            "type": "string"
          },
          "time_in_force": {
            "enum": [
              "gtc",
              "gtt",
              "ioc",
              "fok"
            ],
            "type": "string"
          },
          "total_qty": {
            "description": "Order quantity",
            "type": "number"
          },
          "type": {
            "description": "Order type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          },
          "unfilled_qty": {
            "description": "Unfilled portion of order quantity",
            "type": "number"
          },
          "user_id": {
            "description": "User ID",
            "nullable": true,
            "type": "string"
          }
        },
        "title": "OrderBookEntry",
        "type": "object"
      },
      "SwapConfigurationsResponse": {
        "description": "Response schema for multiple swap configurations",
        "properties": {
          "data": {
            "description": "Swap configurations",
            "items": {
              "$ref": "#/components/schemas/SwapConfiguration"
            },
            "type": "array"
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "title": "SwapConfigurationsResponse",
        "type": "object"
      },
      "QuoteResponse": {
        "description": "Response schema for a quote",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Quote"
          }
        },
        "title": "QuoteResponse",
        "type": "object"
      },
      "OrderResponse": {
        "description": "Response schema for a single order",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Order"
          }
        },
        "title": "OrderResponse",
        "type": "object"
      },
      "SwapRate": {
        "description": "Response schema for swap rate",
        "example": {
          "rate": 1500,
          "symbol": "USD-NGN",
          "ttl": 10,
          "type": "buy"
        },
        "properties": {
          "rate": {
            "description": "Rate price",
            "type": "string"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "ttl": {
            "description": "How long this rate will last, in seconds",
            "type": "integer"
          },
          "type": {
            "description": "Swap type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          }
        },
        "title": "SwapRate",
        "type": "object"
      },
      "ConversionParams": {
        "description": "Conversion params",
        "example": {
          "amount": "750.00",
          "from": "USD",
          "to": "NGN"
        },
        "properties": {
          "amount": {
            "description": "Amount, in major units",
            "type": "string"
          },
          "from": {
            "description": "Source currency",
            "type": "string"
          },
          "to": {
            "description": "Target currency",
            "type": "string"
          }
        },
        "required": [
          "from",
          "to",
          "amount"
        ],
        "title": "ConversionParams",
        "type": "object"
      },
      "SwapConfigurationResponse": {
        "description": "Response schema for a single swap configuration",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/SwapConfiguration"
          }
        },
        "title": "SwapConfigurationResponse",
        "type": "object"
      },
      "OrderBookResponse": {
        "description": "Response schema for an order book",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/OrderBook"
          }
        },
        "title": "OrderBookResponse",
        "type": "object"
      },
      "CreateSwapConfigurationParams": {
        "description": "Swap configuration creation params",
        "example": {
          "symbol": "USD-NGN",
          "ttl": 10,
          "type": "buy"
        },
        "properties": {
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "ttl": {
            "description": "Price TTL, in seconds",
            "nullable": true,
            "type": "integer"
          },
          "type": {
            "description": "Order type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          }
        },
        "title": "CreateSwapConfigurationParams",
        "type": "object"
      },
      "SwapConfiguration": {
        "description": "Response schema for a single swap configuration",
        "properties": {
          "id": {
            "description": "Id",
            "type": "string"
          },
          "order_type": {
            "description": "Order type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "ttl": {
            "description": "Price TTL, in seconds",
            "nullable": true,
            "type": "integer"
          }
        },
        "title": "SwapConfiguration",
        "type": "object"
      },
      "OrdersResponse": {
        "description": "Response schema for multiple orders",
        "properties": {
          "data": {
            "description": "Order list",
            "items": {
              "$ref": "#/components/schemas/Order"
            },
            "type": "array"
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "title": "OrdersResponse",
        "type": "object"
      },
      "Rate": {
        "description": "Currency rate",
        "example": {
          "buy": 1200,
          "created_at": "2025-01-21T11:56:45Z",
          "entity": {
            "id": "397752fb-92e6-404a-b6e4-d9d72f1379f9",
            "type": "business"
          },
          "id": "83b16397-d524-4619-b30f-e5e77b1b8d17",
          "pair": "USD-NGN",
          "sell": 1100,
          "ttl": 60,
          "updated_at": "2025-01-21T11:56:46Z"
        },
        "properties": {
          "buy": {
            "description": "Buy price, in major units",
            "type": "string"
          },
          "entity": {
            "properties": {
              "id": {
                "description": "Account id",
                "type": "string"
              },
              "type": {
                "description": "Account type",
                "enum": [
                  "business",
                  "personal"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "id": {
            "description": "Rate ID",
            "type": "string"
          },
          "pair": {
            "description": "Currency pair",
            "type": "string"
          },
          "sell": {
            "description": "Sell price, in major units",
            "type": "string"
          },
          "ttl": {
            "description": "Price ttl, in seconds",
            "type": "integer"
          },
          "updated_at": {
            "description": "Update timestamp",
            "format": "date-time",
            "type": "string"
          }
        },
        "title": "Rate",
        "type": "object"
      },
      "CreateMarketMakerParams": {
        "description": "Market maker creation params",
        "example": {
          "business_id": "7da8e726-a1bc-11ee-80cf-560f156a658b",
          "contacts": [
            {
              "id": "7da8e726-a1bc-11ee-80cf-560f156a658b",
              "type": "user"
            }
          ],
          "swap_provider": true,
          "swap_weight": 50
        },
        "properties": {
          "business_id": {
            "description": "Business id",
            "type": "string"
          },
          "contacts": {
            "items": {
              "$ref": "#/components/schemas/Contact"
            },
            "type": "array"
          },
          "swap_provider": {
            "description": "Is swap provider",
            "type": "boolean"
          },
          "swap_weight": {
            "description": "Swap weight",
            "type": "integer"
          }
        },
        "required": [
          "business_id"
        ],
        "title": "CreateMarketMakerParams",
        "type": "object"
      },
      "UpdateRateParams": {
        "description": "Rate update params",
        "example": {
          "buy": 100,
          "sell": 75000,
          "ttl": 60
        },
        "properties": {
          "buy": {
            "description": "Buy rate, in minor units",
            "type": "integer"
          },
          "sell": {
            "description": "Sell rate, in minor units",
            "type": "integer"
          },
          "ttl": {
            "description": "Price TTL, in seconds",
            "type": "integer"
          }
        },
        "required": [
          "pair",
          "buy"
        ],
        "title": "UpdateRateParams",
        "type": "object"
      },
      "Trade": {
        "description": "An exchange trade",
        "example": {
          "buy_order_id": "7da75a46-a1bc-11ee-9a32-560f156a658b",
          "commission": "0.00",
          "correlation_id": "7da742ea-a1bc-11ee-b907-560f156a658b",
          "created_at": "2023-12-23T17:55:42.921",
          "id": "7da8e726-a1bc-11ee-80cf-560f156a658b",
          "price": "800.00",
          "sell_order_id": "7d97c0b8-a1bc-11ee-b240-560f156a658b",
          "size": 1.0,
          "symbol": "USD-NGN"
        },
        "properties": {
          "buy_order_id": {
            "description": "Buy order ID",
            "type": "string"
          },
          "commission": {
            "description": "Trade commission in major units",
            "type": "string"
          },
          "correlation_id": {
            "description": "Correlation ID",
            "type": "string"
          },
          "created_at": {
            "description": "Creation timestamp",
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "description": "Order ID",
            "type": "string"
          },
          "price": {
            "description": "Trade price in major units",
            "type": "string"
          },
          "sell_order_id": {
            "description": "Sell order ID",
            "type": "string"
          },
          "size": {
            "description": "Trade size",
            "type": "number"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          }
        },
        "title": "Trade",
        "type": "object"
      },
       "Quote": {
        "description": "Quote",
        "example": {
          "id": "2f939fe5-fb7b-4234-8b73-761a848d13af",
          "locked": false,
          "rate": 1500,
          "symbol": "USD-NGN",
          "time_to_convert": 10,
          "time_to_lock": 30,
          "type": "buy"
        },
        "properties": {
          "id": {
            "description": "Quote Id",
            "type": "string"
          },
          "locked": {
            "description": "Quote lock status",
            "type": "boolean"
          },
          "rate": {
            "description": "Quote price",
            "type": "string"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "time_to_convert": {
            "description": "How long this rate will last before conversion, in seconds",
            "type": "integer"
          },
          "time_to_lock": {
            "description": "How long this rate will last before locking, in seconds",
            "type": "integer"
          },
          "type": {
            "description": "Quote type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          }
        },
        "title": "Quote",
        "type": "object"
      },
      "SwapParams": {
        "description": "Swap params",
        "example": {
          "amount": 1000,
          "quote_id": "570745f5-1252-417f-badf-8b6f19d2319e",
          "reference": "6b35c97f-99e3-4310-af92-2bb0404cfa5a",
          "source_currency": "USD",
          "target_currency": "NGN"
        },
        "properties": {
          "amount": {
            "description": "Amount, in minor units",
            "type": "integer"
          },
          "quote_id": {
            "description": "Quote ID",
            "type": "string"
          },
          "reference": {
            "description": "Reference",
            "type": "string"
          },
          "source_currency": {
            "description": "Source currency",
            "type": "string"
          },
          "target_currency": {
            "description": "Target currency",
            "type": "string"
          }
        },
        "required": [
          "source_currency",
          "target_currency",
          "amount"
        ],
        "title": "SwapParams",
        "type": "object"
      },
      "StandingOrder": {
        "description": "An order",
        "example": {
          "archived": false,
          "created_at": "2023-12-23T17:55:42.911",
          "entity": {
            "id": "6ebe0a0f-bb8f-49be-80ea-c6b72c348fea",
            "type": "business"
          },
          "id": "7da75a46-a1bc-11ee-9a32-560f156a658b",
          "low_watermark_qty": 1.0,
          "min_qty": null,
          "qty": 3.0,
          "strict": false,
          "symbol": "USD-NGN",
          "type": "buy",
          "updated_at": "2023-12-23T17:55:42.911"
        },
        "properties": {
          "archived": {
            "description": "Order is archived or not",
            "type": "boolean"
          },
          "created_at": {
            "description": "Creation timestamp",
            "format": "date-time",
            "type": "string"
          },
          "entity": {
            "properties": {
              "id": {
                "description": "Account id",
                "type": "string"
              },
              "type": {
                "description": "Account type",
                "enum": [
                  "business",
                  "personal"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "id": {
            "description": "Standing order ID",
            "type": "string"
          },
          "low_watermark_qty": {
            "description": "Minimum quantity level to inform market maker, in base currency",
            "type": "number"
          },
          "min_qty": {
            "description": "Minimum quantity to be traded at a go, in base currency",
            "nullable": true,
            "type": "number"
          },
          "qty": {
            "description": "StandingOrder quantity, denominated in the base currency",
            "nullable": true,
            "type": "number"
          },
          "strict": {
            "description": "Should always open orders == qty or not",
            "type": "boolean"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "type": {
            "description": "StandingOrder type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          },
          "updated_at": {
            "description": "Update timestamp",
            "format": "date-time",
            "type": "string"
          }
        },
        "title": "StandingOrder",
        "type": "object"
      },
      "AggregatorRateSwapParams": {
        "description": "Aggregator rate swap params",
        "example": {
          "amount": 1000,
          "rate_id": "2f939fe5-fb7b-4234-8b73-761a848d13af",
          "reference": "6b35c97f-99e3-4310-af92-2bb0404cfa5a",
          "source_currency": "USD",
          "target_currency": "NGN"
        },
        "properties": {
          "amount": {
            "description": "Amount, in minor units",
            "type": "integer"
          },
          "rate_id": {
            "description": "Locked aggregator swap rate Id",
            "type": "string"
          },
          "reference": {
            "description": "Reference",
            "type": "string"
          },
          "source_currency": {
            "description": "Source currency",
            "type": "string"
          },
          "target_currency": {
            "description": "Target currency",
            "type": "string"
          }
        },
        "required": [
          "rate_id",
          "source_currency",
          "target_currency",
          "amount"
        ],
        "title": "AggregatorRateSwapParams",
        "type": "object"
      },
      "MarketPrice": {
        "description": "Market price",
        "example": {
          "buy": 75000,
          "sell": 80000
        },
        "properties": {
          "buy": {
            "description": "Maximum bid price, in major units",
            "type": "string"
          },
          "sell": {
            "description": "Minimum ask price, in major units",
            "type": "string"
          }
        },
        "title": "MarketPrice",
        "type": "object"
      },
      "StandingOrdersResponse": {
        "description": "Response schema for multiple standing orders",
        "properties": {
          "data": {
            "description": "Standing order list",
            "items": {
              "$ref": "#/components/schemas/StandingOrder"
            },
            "type": "array"
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "title": "StandingOrdersResponse",
        "type": "object"
      },
      "UpdateSwapConfigurationParams": {
        "example": {
          "symbol": "USD-NGN",
          "ttl": 10,
          "type": "buy"
        },
        "properties": {
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          },
          "ttl": {
            "description": "Price TTL, in seconds",
            "nullable": true,
            "type": "integer"
          },
          "type": {
            "description": "Order type",
            "enum": [
              "sell",
              "buy"
            ],
            "type": "string"
          }
        },
        "title": "UpdateSwapConfigurationParams",
        "type": "object"
      },
      "InjectLiquidityParams": {
        "description": "Liquidity injection params",
        "example": {
          "amount": 1000,
          "currency": "USD"
        },
        "properties": {
          "amount": {
            "description": "Amount",
            "type": "integer"
          },
          "currency": {
            "description": "Currency",
            "type": "string"
          }
        },
        "required": [
          "currency",
          "amount"
        ],
        "title": "InjectLiquidityParams",
        "type": "object"
      },
      "MarketPriceResponse": {
        "description": "Market Prices response",
        "oneOf": [
          {
            "$ref": "#/components/schemas/FetchMarketPriceResponse"
          },
          {
            "$ref": "#/components/schemas/ListMarketPricesResponse"
          }
        ],
        "title": "MarketPriceResponse"
      },
      "OrderBook": {
        "description": "An order book",
        "example": {
          "asks": [
            {
              "business_id": "ce8331b2-a396-46c1-9638-5db5e9cf5b2e",
              "created_at": "2023-12-23T19:11:23.215",
              "id": "0fe2d322-a1c7-11ee-9c0e-560f156a658b",
              "percent_filled": 0,
              "price": 80000,
              "price_type": "limit",
              "status": "open",
              "time_in_force": "gtc",
              "total_qty": "1",
              "unfilled_qty": "1.0",
              "user_id": null
            }
          ],
          "bids": [
            {
              "business_id": "ce8331b2-a396-46c1-9638-5db5e9cf5b2e",
              "created_at": "2023-12-23T19:11:23.097",
              "id": "0fd0baf2-a1c7-11ee-ae88-560f156a658b",
              "percent_filled": 0,
              "price": 75000,
              "price_type": "limit",
              "status": "open",
              "time_in_force": "gtc",
              "total_qty": "1",
              "unfilled_qty": "1.0",
              "user_id": "82dde615-d181-4f3e-8d3f-53ac7962feb7"
            }
          ],
          "max_bid": 75000,
          "min_ask": 80000,
          "symbol": "USD-NGN"
        },
        "properties": {
          "asks": {
            "description": "Sell orders",
            "items": {
              "$ref": "#/components/schemas/OrderBookEntry"
            },
            "type": "array"
          },
          "bids": {
            "description": "Buy orders",
            "items": {
              "$ref": "#/components/schemas/OrderBookEntry"
            },
            "type": "array"
          },
          "max_bid": {
            "description": "Maximum bid",
            "type": "string"
          },
          "min_ask": {
            "description": "Minimum ask",
            "type": "string"
          },
          "symbol": {
            "description": "Currency pair",
            "type": "string"
          }
        },
        "title": "OrderBook",
        "type": "object"
      },
      "RateResponse": {
        "description": "Response schema for a single order",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Rate"
          }
        },
        "title": "RateResponse",
        "type": "object"
      },
      "ListMarketPricesResponse": {
        "description": "Response schema for listing market prices",
        "properties": {
          "data": {
            "additionalProperties": {
              "$ref": "#/components/schemas/MarketPrice"
            },
            "type": "object"
          }
        },
        "title": "ListMarketPricesResponse",
        "type": "object"
      },
      "CurrenciesResponse": {
        "description": "Response schema for Currencies",
        "properties": {
          "data": {
            "description": "Currency list",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "data"
        ],
        "title": "CurrenciesResponse",
        "type": "object"
      },
      "Pagination": {
        "example": {
          "after": "b101f718-d133-450c-a572-c281c7341803",
          "before": null,
          "limit": 15
        },
        "properties": {
          "after": {
            "description": "After cursor",
            "nullable": true,
            "type": "string"
          },
          "before": {
            "description": "Before cursor",
            "nullable": true,
            "type": "string"
          },
          "limit": {
            "description": "Limit",
            "type": "integer"
          }
        },
        "title": "Pagination",
        "type": "object"
      },
      "RemoveMarketMakerContactParams": {
        "example": {
          "id": "7da8e726-a1bc-11ee-80cf-560f156a658b"
        },
        "properties": {
          "contact_id": {
            "description": "Id",
            "type": "string"
          }
        },
        "required": [
          "contact_id"
        ],
        "title": "RemoveMarketMakerContactParams",
        "type": "object"
      },
      "AggregatorSwapRate": {
        "description": "Response schema for swap rate",
        "example": {
          "id": "2f939fe5-fb7b-4234-8b73-761a848d13af",
          "rate": 1500,
          "source_currency": "NGN",
          "target_currency": "USD",
          "time_to_convert": 10,
          "time_to_lock": 30,
          "type": "conversion"
        },
        "properties": {
          "id": {
            "description": "Aggregator swap rate Id",
            "type": "string"
          },
          "source_currency": {
            "description": "Source currency",
            "type": "string"
          },
          "target_currency": {
            "description": "Target currency",
            "type": "string"
          },
          "time_to_convert": {
            "description": "How long this rate will last before before conversion, in seconds",
            "type": "integer"
          },
          "time_to_lock": {
            "description": "How long this rate will last before locking, in seconds",
            "type": "integer"
          },
          "ttl": {
            "description": "How long this rate will last before locking, in seconds",
            "type": "integer"
          },
          "type": {
            "description": "Transaction description",
            "type": "string"
          }
        },
        "title": "AggregatorSwapRate",
        "type": "object"
      },
      "Contact": {
        "example": {
          "email": "test@user.com",
          "id": "7da8e726-a1bc-11ee-80cf-560f156a658b",
          "name": "Test User",
          "type": "user"
        },
        "properties": {
          "email": {
            "description": "Email",
            "type": "string"
          },
          "id": {
            "description": "Id",
            "type": "string"
          },
          "name": {
            "description": "Name",
            "type": "string"
          },
          "type": {
            "enum": [
              "business",
              "user"
            ],
            "type": "string"
          }
        },
        "title": "Contact",
        "type": "object"
      },
      "CurrencyPairsResponse": {
        "description": "Response schema for currency pairs",
        "example": {
          "data": [
            "USD-NGN"
          ]
        },
        "properties": {
          "data": {
            "description": "Currency pair list",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "title": "CurrencyPairsResponse",
        "type": "object"
      },
      "RetryPaymentParams": {
        "example": {
          "correlation_id": "2315fca8-9aec-42ee-8bee-a9d10add170e",
          "id": "2315fca8-9aec-42ee-8bee-a9d10add170e"
        },
        "properties": {
          "correlation_id": {
            "description": "Correlation ID",
            "type": "string"
          },
          "id": {
            "description": "Payment ID",
            "type": "string"
          }
        }
      },
      "CreatePaymentMethodParams": {
        "description": "Create wallet payment method params",
        "example": {
          "id": "7da75a46-a1bc-11ee-9a32-560f156a658b",
          "type": "bank_account"
        },
        "properties": {
          "id": {
            "description": "Wallet ID",
            "type": "string"
          },
          "type": {
            "enum": [
              "bank_account",
              "crypto_address",
              "card",
              "interac"
            ],
            "type": "string"
          }
        },
        "required": [
          "currency",
          "customer_id"
        ],
        "title": "CreatePaymentMethodParams",
        "type": "object"
      },
      "CreateTransactionParams": {
        "description": "Create transaction params",
        "example": {
          "amount": 1000,
          "description": "a credit action",
          "type": "credit",
          "wallet_id": "7da75a46-a1bc-11ee-9a32-560f156a658b"
        },
        "properties": {
          "amount": {
            "description": "Transaction amount",
            "type": "integer"
          },
          "description": {
            "description": "Transaction desciption",
            "type": "string"
          },
          "reference": {
            "description": "Transaction reference",
            "nullable": true,
            "type": "string"
          },
          "type": {
            "enum": [
              "credit",
              "debit"
            ],
            "type": "string"
          },
          "wallet_id": {
            "description": "Customer ID",
            "type": "string"
          }
        },
        "required": [
          "amount",
          "description",
          "wallet_id",
          "type"
        ],
        "title": "CreateTransactionParams",
        "type": "object"
      },
      "CreateWalletParams": {
        "description": "Create wallet params",
        "example": {
          "currency": "USD",
          "customer_id": "7da75a46-a1bc-11ee-9a32-560f156a658b"
        },
        "properties": {
          "currency": {
            "description": "Wallet currency",
            "type": "string"
          },
          "customer_id": {
            "description": "Customer ID",
            "type": "string"
          }
        },
        "required": [
          "currency",
          "customer_id"
        ],
        "title": "CreateWalletParams",
        "type": "object"
      },
      "Transaction": {
        "description": "Transaction details",
        "example": {
          "account_id": "c2f9e33c-7f28-402b-974f-493546f11f2b",
          "amount": {
            "amount": 1000,
            "currency": "USD"
          },
          "correlation_id": "9f7d3278-71f4-44b0-968d-99ef6c0e983d",
          "created_at": "2025-08-08T11:17:34Z",
          "customer_id": "0997de13-834c-4cc5-88ca-ca321730c938",
          "description": "Id consequatur distinctio et!",
          "destination": null,
          "error": null,
          "fee": {
            "amount": 0,
            "currency": "USD"
          },
          "id": "48160506-2dbb-4f7d-ab2f-09af335aca1d",
          "metadata": {},
          "reference": null,
          "source": null,
          "type": "credit",
          "updated_at": "2025-08-08T11:17:34Z",
          "wallet_id": "c4f43392-1438-4ab4-8d85-5327f34ca238"
        },
        "properties": {
          "account_id": {
            "description": "Account Id",
            "type": "string"
          },
          "amount": {
            "$ref": "#/components/schemas/Money"
          },
          "correlation_id": {
            "description": "Correlation Id",
            "type": "string"
          },
          "customer_id": {
            "description": "Customer Id",
            "type": "string"
          },
          "description": {
            "description": "Transaction description",
            "type": "string"
          },
          "destination": {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          "error": {
            "description": "Transaction error message",
            "nullable": true,
            "type": "string"
          },
          "fee": {
            "$ref": "#/components/schemas/Money"
          },
          "id": {
            "description": "Id",
            "type": "string"
          },
          "reference": {
            "description": "Transaction reference",
            "nullable": true,
            "type": "string"
          },
          "source": {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          "type": {
            "enum": [
              "credit",
              "debit"
            ],
            "type": "string"
          },
          "wallet_id": {
            "description": "Wallet Id",
            "type": "string"
          }
        },
        "title": "Transaction",
        "type": "object"
      },
      "TransactionResponse": {
        "description": "Response schema for a transaction",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Transaction"
          }
        },
        "title": "TransactionResponse",
        "type": "object"
      },
      "TransactionsResponse": {
        "description": "Response schema for transaction list",
        "properties": {
          "data": {
            "description": "Transaction list",
            "items": {
              "$ref": "#/components/schemas/Transaction"
            },
            "type": "array"
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "title": "TransactionsResponse",
        "type": "object"
      },
      "UpdateBalanceParams": {
        "description": "Update wallet balance params",
        "example": {
          "action": "credit",
          "amount": 1000
        },
        "properties": {
          "action": {
            "description": "Transfer action (i.e debit or credit)",
            "enum": [
              "credit",
              "debit"
            ],
            "type": "string"
          },
          "amount": {
            "description": "Transfer amount",
            "type": "integer"
          }
        },
        "required": [
          "amount",
          "action"
        ],
        "title": "UpdateBalanceParams",
        "type": "object"
      },
      "UpdateWalletStatusParams": {
        "description": "Update wallet status params",
        "example": {
          "id": "7da75a46-a1bc-11ee-9a32-560f156a658b",
          "reason": "No longer in use",
          "status": "deleted"
        },
        "properties": {
          "id": {
            "description": "Wallet ID",
            "type": "string"
          },
          "reason": {
            "description": "Status update reason",
            "type": "string"
          },
          "status": {
            "enum": [
              "active",
              "deleted",
              "frozen"
            ],
            "type": "string"
          }
        },
        "required": [
          "currency",
          "customer_id"
        ],
        "title": "UpdateWalletStatusParams",
        "type": "object"
      },
      "WalletDetails": {
        "description": "Transaction details",
        "example": {
          "account_id": "f55ca88c-71aa-4dab-a10a-4d818c11e8e6",
          "balance": {
            "amount": 0,
            "currency": "USD"
          },
          "customer_id": "a08bf5a3-8459-4e65-a5bb-34a1feef94cf",
          "events": [
            {
              "action": "create",
              "id": "6a2a5833-609d-4dff-a4e6-0eaf452d7826",
              "inserted_at": "2025-07-24T08:08:07Z",
              "reason": null,
              "wallet_id": "55a76a42-ed3a-4d0b-b74c-2887d64612f6"
            }
          ],
          "id": "3d2e3f3e-3b3c-4907-a4fd-e241203440d7",
          "payment_methods": [],
          "status": "active"
        },
        "properties": {
          "account_id": {
            "description": "Account Id",
            "type": "string"
          },
          "balance": {
            "description": "Wallet balance",
            "type": "integer"
          },
          "currency": {
            "description": "Wallet Currency",
            "type": "string"
          },
          "customer_id": {
            "description": "Customer Id",
            "type": "string"
          },
          "events": {
            "description": "Wallet events",
            "items": {
              "$ref": "#/components/schemas/WalletEvent"
            },
            "type": "array"
          },
          "id": {
            "description": "Id",
            "type": "string"
          },
          "payment_methods": {
            "description": "payment methods",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            },
            "type": "array"
          },
          "status": {
            "enum": [
              "active",
              "deleted",
              "frozen"
            ],
            "type": "string"
          }
        },
        "title": "WalletDetails",
        "type": "object"
      },
      "WalletEvent": {
        "description": "A Wallet event",
        "nullable": true,
        "properties": {
          "action": {
            "enum": [
              "freeze",
              "unfreeze",
              "delete",
              "restore",
              "create"
            ],
            "type": "string"
          },
          "id": {
            "$ref": "#/components/schemas/Id"
          },
          "inserted_at": {
            "format": "date-time",
            "type": "string"
          },
          "reason": {
            "nullable": true,
            "type": "string"
          },
          "wallet_id": {
            "$ref": "#/components/schemas/Id"
          }
        },
        "title": "WalletEvent",
        "type": "object"
      },
      "WalletResponse": {
        "description": "Response schema for wallet",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WalletDetails"
          }
        },
        "title": "WalletResponse",
        "type": "object"
      },
      "WalletsResponse": {
        "description": "Response schema for wallet list",
        "properties": {
          "data": {
            "description": "Wallet list",
            "items": {
              "$ref": "#/components/schemas/WalletDetails"
            },
            "type": "array"
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "title": "WalletsResponse",
        "type": "object"
      }
    },
    "securitySchemes": {
      "authorization": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "title": "Juicyway API",
    "version": "1.0.0"
  },
  "openapi": "3.0.0",
  "paths": {
    "/exchange/swap-configurations/{id}": {
      "delete": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapConfigurationController.delete",
        "parameters": [
          {
            "description": "Swap Configuration ID",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no_content"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Delete a swap configuration",
        "tags": [
          "exchange"
        ]
      },
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapConfigurationController.get",
        "parameters": [
          {
            "description": "Swap Configuration ID",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapConfigurationResponse"
                }
              }
            },
            "description": "SwapConfiguration"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Retrieve a swap configuration",
        "tags": [
          "exchange"
        ]
      },
      "patch": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapConfigurationController.update",
        "parameters": [
          {
            "description": "Id",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSwapConfigurationParams"
              }
            }
          },
          "description": "swap configuration update params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapConfigurationResponse"
                }
              }
            },
            "description": "SwapConfiguration"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Update a swap configuration",
        "tags": [
          "exchange"
        ]
      }
    },
    "/bulk-transfers/{batch_id}/transfers/{id}/retry": {
      "post": {
        "callbacks": {},
        "operationId": "Payout.Web.BulkTransferController.retry_transfer",
        "parameters": [
          {
            "description": "Bulk Transfer ID",
            "example": "B2hTQkxSBLDcAsFCrejWgZ",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Transfer ID",
            "example": "B2hTQkxSBLDcAsFCrejWgZ",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "$ref": "#/components/responses/accepted"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Retry failed but retryable transfer",
        "tags": [
          "payouts"
        ]
      }
    },
    "/bulk-transfers/{batch_id}/transfers/{id}": {
      "delete": {
        "callbacks": {},
        "operationId": "Payout.Web.BulkTransferController.delete_transfer",
        "parameters": [
          {
            "description": "Bulk Transfer ID",
            "example": "cd3943b7-c964-4fef-a1a9-255d1615543b",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Transfer ID",
            "example": "eda4f238-8c79-11ef-bc0e-7ac8e7b1f828",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no_content"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Delete transfers",
        "tags": [
          "payouts"
        ]
      }
    },
    "/exchange/standing-orders": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.StandingOrderController.list",
        "parameters": [
          {
            "description": "Before Cursor",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "After Cursor",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "description": "Standing order type",
              "enum": [
                "buy",
                "sell"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "archived",
            "required": false,
            "schema": {
              "description": "Standing order archived state",
              "type": "boolean"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "symbol",
            "required": false,
            "schema": {
              "description": "Standing order symbol",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StandingOrdersResponse"
                }
              }
            },
            "description": "Standing Order List"
          }
        },
        "summary": "List standing orders",
        "tags": [
          "exchange"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.StandingOrderController.create",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStandingOrderParams"
              }
            }
          },
          "description": "Order params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StandingOrderResponse"
                }
              }
            },
            "description": "StandingOrder"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Create a standing order",
        "tags": [
          "exchange"
        ]
      }
    },
    "/payment-sessions/{id}/cancel": {
      "post": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.SessionController.cancel",
        "parameters": [
          {
            "description": "Payment Session ID",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSessionCancelParams"
              }
            }
          },
          "description": "Cancel Payment Session Params",
          "required": false
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/no_content"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Cancel a running payment session",
        "tags": [
          "payments"
        ]
      }
    },
    "/merchants/me": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.MerchantController.me",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantResponse"
                }
              }
            },
            "description": "Merchant profile"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get merchant profile",
        "tags": [
          "payments"
        ]
      },
      "patch": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.MerchantController.update",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantResponse"
                }
              }
            },
            "description": "Merchant profile"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Update merchant profile",
        "tags": [
          "payments"
        ]
      }
    },
    "/exchange/books/{symbol}": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.Controller.get_book",
        "parameters": [
          {
            "description": "Currency pair",
            "in": "path",
            "name": "symbol",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderBookResponse"
                }
              }
            },
            "description": "Order book"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          }
        },
        "summary": "Get order book",
        "tags": [
          "exchange"
        ]
      }
    },
    "/bulk-transfers/transfers": {
      "post": {
        "callbacks": {},
        "operationId": "Payout.Web.BulkTransferController.add_transfers",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddTransferParams"
              }
            }
          },
          "description": "Add transfers params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransfersResponse"
                }
              }
            },
            "description": "Add transfers response"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Add transfers",
        "tags": [
          "payouts"
        ]
      }
    },
    "/bulk-transfers": {
      "get": {
        "callbacks": {},
        "operationId": "Payout.Web.BulkTransferController.list_bulk_transfers",
        "parameters": [
          {
            "description": "",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkTransferListResponse"
                }
              }
            },
            "description": "Bulk Transfer List Response"
          }
        },
        "summary": "List bulk payouts",
        "tags": [
          "payouts"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "Payout.Web.BulkTransferController.initiate_bulk_transfer",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InitiateBulkTransferParams"
              }
            }
          },
          "description": "Initiate bulk transfer params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkTransferResponse"
                }
              }
            },
            "description": "Bulk transfer initiated response"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Initiate a bulk transfer",
        "tags": [
          "payouts"
        ]
      }
    },
    "/payment-links/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentLinkController.get",
        "parameters": [
          {
            "description": "Payment link id",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Auth signature",
            "in": "header",
            "name": "x-auth-signature",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentLinkResponse"
                }
              }
            },
            "description": "Payment link"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get a payment link",
        "tags": [
          "payments"
        ]
      },
      "patch": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentLinkController.update",
        "parameters": [
          {
            "description": "Payment link id",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePaymentLinkParams"
              }
            }
          },
          "description": "Update a payment link params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentLinkResponse"
                }
              }
            },
            "description": "Payment link details"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Update a payment link",
        "tags": [
          "payments"
        ]
      }
    },
    "/payments/export": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentController.export_payments",
        "parameters": [
          {
            "description": "Payment record status",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "pending",
                "captured",
                "settled",
                "failed"
              ],
              "type": "string"
            }
          },
          {
            "description": "Payment type",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "enum": [
                "collection",
                "deposit",
                "payout"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "customer_id",
            "required": false,
            "schema": {
              "description": "Customer id",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "provider_id",
            "required": false,
            "schema": {
              "description": "Provider id",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "payment_link_id",
            "required": false,
            "schema": {
              "description": "Payment link id",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "since",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "until",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "currency",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "enum": [
                    "NGN",
                    "USD",
                    "CAD",
                    "EUR",
                    "AUD",
                    "CNY",
                    "GBP",
                    "GHS",
                    "KES"
                  ],
                  "type": "string"
                },
                {
                  "enum": [
                    "BTC",
                    "ETH",
                    "USDT",
                    "USDC",
                    "BUSD",
                    "SOL",
                    "DOGE",
                    "XRP",
                    "ADA",
                    "TRX",
                    "AVAX"
                  ],
                  "type": "string"
                }
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UrlResponse"
                }
              }
            },
            "description": "Payment export url"
          }
        },
        "summary": "Export payment details",
        "tags": [
          "payments"
        ]
      }
    },
    "/exchange/convert": {
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.RateController.convert",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConversionParams"
              }
            }
          },
          "description": "Conversion params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConversionResponse"
                }
              }
            },
            "description": "Conversion result"
          }
        },
        "summary": "Convert an amount from one currency to another",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/rates/{id}": {
      "delete": {
        "callbacks": {},
        "operationId": "Exchange.Web.RateController.remove_rate",
        "parameters": [
          {
            "description": "Rate ID",
            "example": "3f27a046-314d-457f-b39b-1ec30561353d",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no_content"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Delete a rate",
        "tags": [
          "exchange"
        ]
      },
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.RateController.get_rate",
        "parameters": [
          {
            "description": "Rate ID",
            "example": "3f27a046-314d-457f-b39b-1ec30561353d",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateResponse"
                }
              }
            },
            "description": "Rate"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get rate",
        "tags": [
          "exchange"
        ]
      },
      "patch": {
        "callbacks": {},
        "operationId": "Exchange.Web.RateController.update_rate",
        "parameters": [
          {
            "description": "Rate ID",
            "example": "3f27a046-314d-457f-b39b-1ec30561353d",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRateParams"
              }
            }
          },
          "description": "Update params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateResponse"
                }
              }
            },
            "description": "Rate"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Update a rate",
        "tags": [
          "exchange"
        ]
      }
    },
    "/payment-sessions/{id}/authorize": {
      "post": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.SessionController.authorize",
        "parameters": [
          {
            "description": "Payment Session ID",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSessionAuthorizationParams"
              }
            }
          },
          "description": "Capture Payment Session Params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSessionResponse"
                }
              }
            },
            "description": "Capture Session Result"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Authorize a captured payment session",
        "tags": [
          "payments"
        ]
      }
    },
    "/exchange/market-makers/{id}/remove-contact": {
      "patch": {
        "callbacks": {},
        "operationId": "Exchange.Web.MarketMakerController.remove_contact",
        "parameters": [
          {
            "description": "Id",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemoveMarketMakerContactParams"
              }
            }
          },
          "description": "Remove contact params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketMakerResponse"
                }
              }
            },
            "description": "Market maker"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Remove contact from a market maker",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/rates": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.RateController.get_rates",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RatesResponse"
                }
              }
            },
            "description": "Rate list"
          }
        },
        "summary": "List rates",
        "tags": [
          "exchange"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.RateController.add_rate",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRateParams"
              }
            }
          },
          "description": "Rate params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateResponse"
                }
              }
            },
            "description": "Rate"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Create a rate",
        "tags": [
          "exchange"
        ]
      }
    },
    "/payment-sessions/encryption-keys/{mode}": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentController.encryption_key",
        "parameters": [
          {
            "description": "Environment Mode",
            "in": "path",
            "name": "mode",
            "required": true,
            "schema": {
              "enum": [
                "live",
                "test"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EncryptionKeyResponse"
                }
              }
            },
            "description": "Encryption key returned"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          }
        },
        "summary": "Get encryption key",
        "tags": [
          "payments"
        ]
      }
    },
    "/exchange/pairs": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.RateController.supported_pairs",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CurrencyPairsResponse"
                }
              }
            },
            "description": "Currency pair list"
          }
        },
        "summary": "List supported rates",
        "tags": [
          "exchange"
        ]
      }
    },
    "/bulk-transfers/{id}/cancel": {
      "post": {
        "callbacks": {},
        "operationId": "Payout.Web.BulkTransferController.cancel_bulk_transfer",
        "parameters": [
          {
            "description": "Bulk Transfer ID",
            "example": "B2hTQkxSBLDcAsFCrejWgZ",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkTransferResponse"
                }
              }
            },
            "description": "Bulk transfer response"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "cancel bulk transfer",
        "tags": [
          "payouts"
        ]
      }
    },
    "/exchange/market-makers": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.MarketMakerController.list",
        "parameters": [
          {
            "description": "Cursor",
            "in": "query",
            "name": "before",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "After",
            "in": "query",
            "name": "after",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketMakersResponse"
                }
              }
            },
            "description": "Market maker list"
          }
        },
        "summary": "List market makers",
        "tags": [
          "exchange"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.MarketMakerController.create",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMarketMakerParams"
              }
            }
          },
          "description": "Market maker params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketMakerResponse"
                }
              }
            },
            "description": "Market maker"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Create a market maker",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/quote": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.quote",
        "parameters": [
          {
            "description": "",
            "in": "query",
            "name": "source_currency",
            "required": true,
            "schema": {
              "description": "Source currency for swap",
              "enum": [
                "USD",
                "NGN",
                "GHS",
                "CNY",
                "KES",
                "CAD",
                "AUD",
                "EUR",
                "GBP",
                "BTC",
                "ETH",
                "USDT",
                "USDC",
                "BUSD",
                "SOL",
                "DOGE",
                "XRP",
                "ADA",
                "TRX",
                "AVAX"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "target_currency",
            "required": true,
            "schema": {
              "description": "Target currency for swap",
              "enum": [
                "USD",
                "NGN",
                "GHS",
                "CNY",
                "KES",
                "CAD",
                "AUD",
                "EUR",
                "GBP",
                "BTC",
                "ETH",
                "USDT",
                "USDC",
                "BUSD",
                "SOL",
                "DOGE",
                "XRP",
                "ADA",
                "TRX",
                "AVAX"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "lock",
            "required": false,
            "schema": {
              "description": "Lock quote",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteResponse"
                }
              }
            },
            "description": "Quote"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get quote",
        "tags": [
          "Swaps"
        ]
      }
    },
    "/exchange/quote/{id}/lock": {
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.lock_quote",
        "parameters": [
          {
            "description": "Quote ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteResponse"
                }
              }
            },
            "description": "Quote"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Lock quote",
        "tags": [
          "Swaps"
        ]
      }
    },
    "/exchange/swap": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.list",
        "parameters": [
          {
            "description": "Cursor",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "After",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "symbol",
            "required": false,
            "schema": {
              "description": "Swap symbol",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapListResponse"
                }
              }
            },
            "description": "Swap List"
          }
        },
        "summary": "List swaps",
        "tags": [
          "exchange"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.swap",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SwapParams"
              }
            }
          },
          "description": "Swap params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapResponse"
                }
              }
            },
            "description": "Swap Details"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "409": {
            "$ref": "#/components/responses/conflict"
          }
        },
        "summary": "Make a swap",
        "tags": [
          "exchange"
        ]
      }
    },
    "/payments/stats": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentController.stats",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentStatsResponse"
                }
              }
            },
            "description": "Payment details"
          }
        },
        "summary": "Get payment stats",
        "tags": [
          "payments"
        ]
      }
    },
    "/exchange/orders/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.Controller.get_order",
        "parameters": [
          {
            "description": "Order ID",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderResponse"
                }
              }
            },
            "description": "Order"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Retrieve an order",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/orders": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.Controller.list_orders",
        "parameters": [
          {
            "description": "Cursor",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "After",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "description": "Order type",
              "enum": [
                "buy",
                "sell"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "description": "Order status",
              "enum": [
                "open",
                "cancelled",
                "rejected",
                "filled",
                "expired",
                "closed"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "price",
            "required": false,
            "schema": {
              "description": "Order price",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrdersResponse"
                }
              }
            },
            "description": "Order List"
          }
        },
        "summary": "List orders",
        "tags": [
          "exchange"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.Controller.create_order",
        "parameters": [
          {
            "description": "",
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOrderParams"
              }
            }
          },
          "description": "Order params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderResponse"
                }
              }
            },
            "description": "Order"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Create an order",
        "tags": [
          "exchange"
        ]
      }
    },
    "/payouts/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "Payout.Web.Controller.get_payout",
        "parameters": [
          {
            "description": "Payout ID",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutResponse"
                }
              }
            },
            "description": "Beneficiary Response"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get payout details",
        "tags": [
          "payouts"
        ]
      }
    },
    "/payouts/{id}/receipt": {
      "get": {
        "callbacks": {},
        "operationId": "Payout.Web.Controller.generate_receipt",
        "parameters": [
          {
            "description": "Payout id",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerateReceiptResponse"
                }
              }
            },
            "description": "Receipt generated"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Generate a payout receipt",
        "tags": [
          "payouts"
        ]
      }
    },
    "/payments/retry": {
      "post": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentController.retry",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RetryPaymentParams"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Ok"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Retry the processing of a pending outgoing payment ",
        "tags": [
          "payments"
        ]
      }
    },
    "/payouts/charge": {
      "get": {
        "callbacks": {},
        "operationId": "Payout.Web.Controller.get_charge",
        "parameters": [
          {
            "description": "Amount to charge",
            "example": "1000",
            "in": "query",
            "name": "amount",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Currency to charge in",
            "example": "USD",
            "in": "query",
            "name": "currency",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutChargeResponse"
                }
              }
            },
            "description": "Charge Response"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Get charge for a payout",
        "tags": [
          "payouts"
        ]
      }
    },
    "/hosted-sessions/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.SessionController.get_hosted_session",
        "parameters": [
          {
            "description": "(Encoded) payment session id",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Auth signature",
            "in": "header",
            "name": "x-auth-signature",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSessionResponse"
                }
              }
            },
            "description": "Payment session"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get a hosted payment session",
        "tags": [
          "payments"
        ]
      }
    },
    "/payment-links": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentLinkController.list",
        "parameters": [
          {
            "description": "",
            "in": "query",
            "name": "fixed",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "archived",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "currency",
            "required": false,
            "schema": {
              "enum": [
                "NGN",
                "USD",
                "CAD",
                "EUR",
                "AUD",
                "CNY",
                "GBP",
                "GHS",
                "KES"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "id",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentLinkListResponse"
                }
              }
            },
            "description": "Payment links"
          }
        },
        "summary": "List payment links",
        "tags": [
          "payments"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentLinkController.create",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentLinkParams"
              }
            }
          },
          "description": "Create a payment link params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentLinkResponse"
                }
              }
            },
            "description": "Payment link details"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Create a payment link",
        "tags": [
          "payments"
        ]
      }
    },
    "/payouts": {
      "get": {
        "callbacks": {},
        "operationId": "Payout.Web.Controller.list_payouts",
        "parameters": [
          {
            "description": "",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListPayoutResponse"
                }
              }
            },
            "description": "Beneficiary Response"
          }
        },
        "summary": "List payouts",
        "tags": [
          "payouts"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "Payout.Web.Controller.initiate_payout",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayoutInitiationParams"
              }
            }
          },
          "description": "Initiate payout params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutResponse"
                }
              }
            },
            "description": "Payout initiated response"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Initiate a payout",
        "tags": [
          "payouts"
        ]
      }
    },
    "/exchange/swap-configurations": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapConfigurationController.list",
        "parameters": [
          {
            "description": "Before Cursor",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "After Cursor",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "description": "Standing order type",
              "enum": [
                "buy",
                "sell"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "symbol",
            "required": false,
            "schema": {
              "description": "Standing order symbol",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapConfigurationsResponse"
                }
              }
            },
            "description": "Swap Configuration List"
          }
        },
        "summary": "List swap configuration",
        "tags": [
          "exchange"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapConfigurationController.create",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSwapConfigurationParams"
              }
            }
          },
          "description": "Order params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapConfigurationResponse"
                }
              }
            },
            "description": "SwapConfiguration"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Create a swap configuration",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/orders/{id}/cancel": {
      "put": {
        "callbacks": {},
        "operationId": "Exchange.Web.Controller.cancel_order",
        "parameters": [
          {
            "description": "Order ID",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderResponse"
                }
              }
            },
            "description": "Order response"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Cancel an order",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/swap/rate": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.get_rate",
        "parameters": [
          {
            "description": "",
            "in": "query",
            "name": "source_currency",
            "required": true,
            "schema": {
              "description": "Source currency for swap",
              "enum": [
                "NGN",
                "USD"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "target_currency",
            "required": true,
            "schema": {
              "description": "Target currency swap",
              "enum": [
                "NGN",
                "USD"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "cache",
            "required": false,
            "schema": {
              "description": "If Rate should be cached",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapRateResponse"
                }
              }
            },
            "description": "Swap Rate"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get swap rate",
        "tags": [
          "exchange"
        ]
      }
    },
    "/payment-sessions/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.SessionController.get",
        "parameters": [
          {
            "description": "Payment Session ID",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSessionResponse"
                }
              }
            },
            "description": "Capture Session Result"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Get a running payment session",
        "tags": [
          "payments"
        ]
      },
      "patch": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.SessionController.update",
        "parameters": [
          {
            "description": "Session id",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSessionUpdateParams"
              }
            }
          },
          "description": "Params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSessionResponse"
                }
              }
            },
            "description": "Session"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Update a pending payment session",
        "tags": [
          "payments"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.SessionController.capture",
        "parameters": [
          {
            "description": "Payment Session ID",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSessionCaptureParams"
              }
            }
          },
          "description": "Capture Payment Session Params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSessionResponse"
                }
              }
            },
            "description": "Capture Payment Session Result"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Capture a payment session",
        "tags": [
          "payments"
        ]
      }
    },
    "/payments/{id}/refund": {
      "post": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentController.refund",
        "parameters": [
          {
            "description": "Payment ID",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefundPaymentInitiationParams"
              }
            }
          },
          "description": "Initiate a payment refund params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentResponse"
                }
              }
            },
            "description": "Refund details"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Initiate a payment refund",
        "tags": [
          "payments"
        ]
      }
    },
    "/bulk-transfers/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "Payout.Web.BulkTransferController.fetch_bulk_transfer",
        "parameters": [
          {
            "description": "Bulk Payout ID",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkTransferResponse"
                }
              }
            },
            "description": "Bulk Transfer Response"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get bulk payout details",
        "tags": [
          "payouts"
        ]
      }
    },
    "/merchants/me/settings": {
      "patch": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.MerchantController.update_settings",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantResponse"
                }
              }
            },
            "description": "Merchant profile returned"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get merchant profile",
        "tags": [
          "payments"
        ]
      }
    },
    "/exchange/increase-liquidity": {
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.Controller.increase_liquidity",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InjectLiquidityParams"
              }
            }
          },
          "description": "Liquidity injection params",
          "required": true
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/no_content"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          }
        },
        "summary": "Increase order book liquidity",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/currencies": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.Controller.list_currencies",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CurrenciesResponse"
                }
              }
            },
            "description": "Currencies"
          }
        },
        "summary": "List currencies",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/market-prices{symbol}": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.Controller.market_prices",
        "parameters": [
          {
            "description": "Currency pair",
            "in": "path",
            "name": "symbol",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketPriceResponse"
                }
              }
            },
            "description": "Market prices"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Fetch current market prices",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/standing-orders/{id}/orders": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.StandingOrderController.orders",
        "parameters": [
          {
            "description": "Standing Order ID",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Before Cursor",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "After Cursor",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrdersResponse"
                }
              }
            },
            "description": "Order List"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Retrieve list of orders created from a standing order",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/market-makers/me": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.MarketMakerController.me",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketMakerResponse"
                }
              }
            },
            "description": "Market maker"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Retrieve market maker details for current account",
        "tags": [
          "exchange"
        ]
      }
    },
    "/bulk-transfers/{id}/execute": {
      "post": {
        "callbacks": {},
        "operationId": "Payout.Web.BulkTransferController.execute_bulk_transfer",
        "parameters": [
          {
            "description": "Bulk Transfer ID",
            "example": "B2hTQkxSBLDcAsFCrejWgZ",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "$ref": "#/components/responses/accepted"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Execute bulk transfer",
        "tags": [
          "payouts"
        ]
      }
    },
    "/payments": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentController.list",
        "parameters": [
          {
            "description": "Payment session status",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "pending",
                "captured",
                "settled",
                "failed"
              ],
              "type": "string"
            }
          },
          {
            "description": "Payment type",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "enum": [
                "collection",
                "deposit",
                "payout"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "customer_id",
            "required": false,
            "schema": {
              "description": "Customer id",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "provider_id",
            "required": false,
            "schema": {
              "description": "Provider id",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "payment_link_id",
            "required": false,
            "schema": {
              "description": "Payment link id",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "since",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "until",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "currency",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "enum": [
                    "NGN",
                    "USD",
                    "CAD",
                    "EUR",
                    "AUD",
                    "CNY",
                    "GBP",
                    "GHS",
                    "KES"
                  ],
                  "type": "string"
                },
                {
                  "enum": [
                    "BTC",
                    "ETH",
                    "USDT",
                    "USDC",
                    "BUSD",
                    "SOL",
                    "DOGE",
                    "XRP",
                    "ADA",
                    "TRX",
                    "AVAX"
                  ],
                  "type": "string"
                }
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentListResponse"
                }
              }
            },
            "description": "Payment details"
          }
        },
        "summary": "Get payment details",
        "tags": [
          "payments"
        ]
      }
    },
    "/exchange/market-makers/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.MarketMakerController.get",
        "parameters": [
          {
            "description": "Id",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketMakerResponse"
                }
              }
            },
            "description": "Market maker"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Retrieve a market maker",
        "tags": [
          "exchange"
        ]
      },
      "patch": {
        "callbacks": {},
        "operationId": "Exchange.Web.MarketMakerController.update",
        "parameters": [
          {
            "description": "Id",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMarketMakerParams"
              }
            }
          },
          "description": "Market maker params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketMakerResponse"
                }
              }
            },
            "description": "Market maker"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Update a market maker",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/swap/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.get",
        "parameters": [
          {
            "description": "Swap ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapResponse"
                }
              }
            },
            "description": "Swap"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get swap",
        "tags": [
          "exchange"
        ]
      }
    },
    "/exchange/market-makers/{id}/add-contact": {
      "patch": {
        "callbacks": {},
        "operationId": "Exchange.Web.MarketMakerController.add_contact",
        "parameters": [
          {
            "description": "Id",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Contact"
              }
            }
          },
          "description": "Contact params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketMakerResponse"
                }
              }
            },
            "description": "Market maker"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Add contact to a market maker",
        "tags": [
          "exchange"
        ]
      }
    },
    "/payments/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.PaymentController.get_payment",
        "parameters": [
          {
            "description": "Payment Session ID",
            "example": "2315fca8-9aec-42ee-8bee-a9d10add170e",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentResponse"
                }
              }
            },
            "description": "Payment details"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get payment details",
        "tags": [
          "payments"
        ]
      }
    },
    "/exchange/standing-orders/{id}": {
      "delete": {
        "callbacks": {},
        "operationId": "Exchange.Web.StandingOrderController.delete",
        "parameters": [
          {
            "description": "Standing Order ID",
            "example": "B2hTQkxSBLDcAsFCrejWgZ",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no_content"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Delete a standing order",
        "tags": [
          "exchange"
        ]
      },
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.StandingOrderController.get",
        "parameters": [
          {
            "description": "Standing Order ID",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StandingOrderResponse"
                }
              }
            },
            "description": "StandingOrder"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Retrieve a standing order",
        "tags": [
          "exchange"
        ]
      },
      "patch": {
        "callbacks": {},
        "operationId": "Exchange.Web.StandingOrderController.update",
        "parameters": [
          {
            "description": "Id",
            "example": "b207fc34-25d7-439b-802d-158aff4b4bb5",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateStandingOrderParams"
              }
            }
          },
          "description": "Standing order update params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StandingOrderResponse"
                }
              }
            },
            "description": "StandingOrder"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Update a standing order",
        "tags": [
          "exchange"
        ]
      }
    },
    "/payment-sessions": {
      "post": {
        "callbacks": {},
        "operationId": "PaymentLifecycle.Web.SessionController.init",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSessionInitiationParams"
              }
            }
          },
          "description": "Initiate Payment Session Params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSessionResponse"
                }
              }
            },
            "description": "Payment Session Result"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Initialize a payment session",
        "tags": [
          "payments"
        ]
      }
    },
    "/exchange/market-prices": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.Controller.market_prices",
        "parameters": [
          {
            "description": "Currency pair",
            "in": "query",
            "name": "symbol",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketPriceResponse"
                }
              }
            },
            "description": "Market prices"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Fetch current market prices",
        "tags": [
          "Orders"
        ]
      }
    },
    "/exchange/fx/convert": {
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.swap_with_aggregator_rate",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AggregatorRateSwapParams"
              }
            }
          },
          "description": "Aggregator Rate Swap params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapResponse"
                }
              }
            },
            "description": "Swap Details"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "409": {
            "$ref": "#/components/responses/conflict"
          }
        },
        "summary": "Make a swap with a locked aggregator rate",
        "tags": [
          "Swaps"
        ]
      }
    },
    "/exchange/fx/convert/{reference}": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.get_swap_by_ref",
        "parameters": [
          {
            "description": "Swap reference",
            "in": "path",
            "name": "ref",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapResponse"
                }
              }
            },
            "description": "Swap"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get swap by reference",
        "tags": [
          "Swaps"
        ]
      }
    },
    "/exchange/fx/rate": {
      "get": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.get_aggregator_rate",
        "parameters": [
          {
            "description": "",
            "in": "query",
            "name": "source_currency",
            "required": true,
            "schema": {
              "description": "Source currency for swap",
              "enum": [
                "USD",
                "NGN",
                "GHS",
                "CNY",
                "KES",
                "EUR",
                "GBP",
                "AUD",
                "CAD",
                "BTC",
                "ETH",
                "USDT",
                "USDC",
                "BUSD",
                "SOL",
                "DOGE",
                "XRP",
                "ADA",
                "TRX",
                "AVAX"
              ],
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "target_currency",
            "required": true,
            "schema": {
              "description": "Target currency for swap",
              "enum": [
                "USD",
                "NGN",
                "GHS",
                "CNY",
                "KES",
                "EUR",
                "GBP",
                "AUD",
                "CAD",
                "BTC",
                "ETH",
                "USDT",
                "USDC",
                "BUSD",
                "SOL",
                "DOGE",
                "XRP",
                "ADA",
                "TRX",
                "AVAX"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AggregatorSwapRateResponse"
                }
              }
            },
            "description": "Aggregator Swap Rate"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Get aggregator swap rate",
        "tags": [
          "Swaps"
        ]
      }
    },
    "/exchange/fx/rate/{id}/lock": {
      "post": {
        "callbacks": {},
        "operationId": "Exchange.Web.SwapController.lock_aggregator_rate",
        "parameters": [
          {
            "description": "Aggregator rate ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapRateResponse"
                }
              }
            },
            "description": "SwapRate"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Lock aggregator swap rate",
        "tags": [
          "Swaps"
        ]
      }
    },
    "/wallets": {
      "post": {
        "callbacks": {},
        "operationId": "Wallets.Web.Controller.create_wallet",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWalletParams"
              }
            }
          },
          "description": "Wallet params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletResponse"
                }
              }
            },
            "description": "Wallet"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Create a wallet",
        "tags": [
          "wallets"
        ]
      }
    },
    "/wallets/all": {
      "get": {
        "callbacks": {},
        "operationId": "Wallets.Web.Controller.list_wallets",
        "parameters": [
          {
            "description": "Before Cursor",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "After Cursor",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "customer_id",
            "required": false,
            "schema": {
              "description": "Customer ID",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "currency",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Currency"
            }
          },
          {
            "description": "Wallet status",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "active",
                "frozen",
                "deleted"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletsResponse"
                }
              }
            },
            "description": "Link List"
          }
        },
        "summary": "List wallets",
        "tags": [
          "wallets"
        ]
      }
    },
    "/wallets/transactions": {
      "get": {
        "callbacks": {},
        "operationId": "Wallets.Web.Controller.list_transactions",
        "parameters": [
          {
            "description": "Before Cursor",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "After Cursor",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "customer_id",
            "required": false,
            "schema": {
              "description": "Customer ID",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "wallet_id",
            "required": false,
            "schema": {
              "description": "Wallet ID",
              "type": "string"
            }
          },
          {
            "description": "",
            "in": "query",
            "name": "currency",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Currency"
            }
          },
          {
            "description": "Transaction type",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "enum": [
                "credit",
                "debit"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionsResponse"
                }
              }
            },
            "description": "Transaction List"
          }
        },
        "summary": "List transactions",
        "tags": [
          "wallets"
        ]
      },
      "post": {
        "callbacks": {},
        "operationId": "Wallets.Web.Controller.create_transaction",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTransactionParams"
              }
            }
          },
          "description": "Transaction params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionResponse"
                }
              }
            },
            "description": "Transaction"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Create a wallet transaction",
        "tags": [
          "wallets"
        ]
      }
    },
    "/wallets/transactions/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "Wallets.Web.Controller.get_transaction",
        "parameters": [
          {
            "description": "Transaction ID",
            "example": "ca55325a-3fa2-481a-b370-4bd212ba7846",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionResponse"
                }
              }
            },
            "description": "Wallet"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Retrieve a wallet transaction",
        "tags": [
          "wallets"
        ]
      }
    },
    "/wallets/{id}": {
      "get": {
        "callbacks": {},
        "operationId": "Wallets.Web.Controller.get_wallet",
        "parameters": [
          {
            "description": "Wallet ID",
            "example": "ca55325a-3fa2-481a-b370-4bd212ba7846",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletResponse"
                }
              }
            },
            "description": "Wallet"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Retrieve a wallet",
        "tags": [
          "wallets"
        ]
      }
    },
    "/wallets/{id}/balance": {
      "patch": {
        "callbacks": {},
        "operationId": "Wallets.Web.Controller.update_balance",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateBalanceParams"
              }
            }
          },
          "description": "Update wallet balance params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionResponse"
                }
              }
            },
            "description": "Transaction"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Update wallet balance",
        "tags": [
          "wallets"
        ]
      }
    },
    "/wallets/{id}/payment-method": {
      "post": {
        "callbacks": {},
        "operationId": "Wallets.Web.Controller.create_payment_method",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentMethodParams"
              }
            }
          },
          "description": "Create payment method params",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletResponse"
                }
              }
            },
            "description": "Wallet"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "422": {
            "$ref": "#/components/responses/unprocessable_entity"
          }
        },
        "summary": "Create a wallet payment method",
        "tags": [
          "wallets"
        ]
      }
    },
    "/wallets/{id}/status": {
      "patch": {
        "callbacks": {},
        "operationId": "Wallets.Web.Controller.update_wallet_status",
        "parameters": [
          {
            "description": "Wallet ID",
            "example": "ca55325a-3fa2-481a-b370-4bd212ba7846",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWalletStatusParams"
              }
            }
          },
          "description": "Update wallet status params",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletResponse"
                }
              }
            },
            "description": "Wallet"
          },
          "404": {
            "$ref": "#/components/responses/not_found"
          }
        },
        "summary": "Update a wallet status",
        "tags": [
          "wallets"
        ]
      }
    }
  },
  "tags": [
    {
      "description": "Payment APIs",
      "name": "payments"
    },
    {
      "description": "Payouts APIs",
      "name": "payouts"
    },
    {
      "description": "Exchange APIs",
      "name": "exchange"
    },
    {
      "description": "Wallets APIs",
      "name": "wallets"
    }
  ]
}