{
  "openapi": "3.0.0",
  "info": {
    "title": "AllRatesToday Exchange Rate API",
    "description": "Get live currency exchange rates",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://allratestoday.com"
    }
  ],
  "paths": {
    "/api/rate": {
      "get": {
        "summary": "Get current exchange rate",
        "description": "Returns the live mid-market exchange rate between two currencies",
        "parameters": [
          {
            "name": "source",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "GBP",
            "description": "Source currency code (e.g., USD, EUR, GBP)"
          },
          {
            "name": "target",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "LKR",
            "description": "Target currency code (e.g., INR, LKR, PKR)"
          }
        ],
        "responses": {
          "200": {
            "description": "Exchange rate",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "rate": {
                      "type": "number",
                      "example": 415.28
                    },
                    "source": {
                      "type": "string",
                      "example": "refinitiv"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/central-banks": {
      "get": {
        "summary": "List covered central banks",
        "description": "Official central-bank rate coverage: bank metadata, latest available date, and endpoint URLs. Requires authentication.",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Array of covered banks with metadata"
          }
        }
      }
    },
    "/api/v1/central-bank/{bank}/latest": {
      "get": {
        "summary": "Latest official central bank rates",
        "description": "The most recent full rate table as published by the central bank (e.g. ecb, boc, cbsl). Pass source+target for a single pair (cross-computed via the bank's home currency when not directly published; see the derived flag). Available on all plans.",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "bank",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "cbsl",
            "description": "Bank code from /api/v1/central-banks"
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "USD",
            "description": "Pair mode: source currency (requires target)"
          },
          {
            "name": "target",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "LKR",
            "description": "Pair mode: target currency (requires source)"
          }
        ],
        "responses": {
          "200": {
            "description": "Latest published rate table with rate_date"
          },
          "404": {
            "description": "Unknown bank"
          }
        }
      }
    },
    "/api/v1/central-bank/{bank}/{date}": {
      "get": {
        "summary": "Official central bank rates for a date",
        "description": "The bank's published table for a date. Weekends/holidays return the most recent published date on or before it (see rate_date). Paid plans only.",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "bank",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "ecb"
          },
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2026-06-30"
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "USD",
            "description": "Pair mode: source currency (requires target)"
          },
          {
            "name": "target",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "EUR",
            "description": "Pair mode: target currency (requires source)"
          }
        ],
        "responses": {
          "200": {
            "description": "Published rate table"
          },
          "403": {
            "description": "Free plan — paid feature"
          },
          "404": {
            "description": "Unknown bank or no data on/before date"
          }
        }
      }
    },
    "/api/v1/central-bank/{bank}/history": {
      "get": {
        "summary": "Official central bank rate time series",
        "description": "Daily series over a date range (defaults to the last year, max 5000 rows). Use symbol for all pairs involving one currency, or source+target for a single pair series. Paid plans only.",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "bank",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "boc"
          },
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "USD",
            "description": "Required unless source+target given"
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "USD",
            "description": "Pair mode: source currency (requires target)"
          },
          {
            "name": "target",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "LKR",
            "description": "Pair mode: target currency (requires source)"
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ascending daily series"
          },
          "403": {
            "description": "Free plan — paid feature"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "API key from your dashboard"
      }
    }
  }
}