{
  "openapi": "3.0.1",
  "info": {
    "title": "Exchange Rates Scraper: ECB Daily FX & History",
    "description": "Scrape official ECB exchange rates: latest daily reference rates and daily history back to 1999 for 30+ currencies, from any base, with inverse rates on every row. Multi-base batches and a currency directory. Export CSV, Excel, JSON, XML. No login or API key. 29 currencies per USD-base request.",
    "version": "0.1",
    "x-build-id": "576H4i079NlwZgAz6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/recordsdata~exchange-rates-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-recordsdata-exchange-rates-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/recordsdata~exchange-rates-scraper/runs": {
      "post": {
        "operationId": "runs-sync-recordsdata-exchange-rates-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/recordsdata~exchange-rates-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-recordsdata-exchange-rates-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "baseCurrencies": {
            "title": "Base currencies",
            "type": "array",
            "description": "Base currencies to quote from, as 3-letter ISO codes (USD, EUR, GBP, MXN, BRL). The scraper returns one set of exchange rates per base, with the inverse rate on every row. Retired currencies such as DEM, FRF or ATS also work for history.",
            "default": [
              "USD"
            ],
            "items": {
              "type": "string"
            }
          },
          "symbols": {
            "title": "Target currencies (optional)",
            "type": "array",
            "description": "Optional target currencies to keep, as 3-letter ISO codes (EUR, MXN, JPY). Leave empty to get all 165 currencies of the blended feed (45 with the ECB source).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "providers": {
            "title": "Rate sources (optional)",
            "type": "array",
            "description": "Central bank or institution keys to use instead of the blended feed, for example ECB (euro reference rates), BOE, BOJ, BANXICO, BCB, BCCH, BANREP, TCMB. Leave empty for the default: rates blended across 100+ central banks, 165 currencies. Turn on the source directory to list every key.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeLatest": {
            "title": "Latest rates",
            "type": "boolean",
            "description": "Fetch the latest rate of every pair, one row per base-currency pair, with its change against the previous fixing. Turn off if you only need history or the directories.",
            "default": true
          },
          "amount": {
            "title": "Amount to convert (optional)",
            "minimum": 0,
            "type": "number",
            "description": "When set, every rate row gets the amount and the converted value (amount x rate) in the target currency, for example 100 with base USD gives the value of 100 USD in each currency."
          },
          "includeChange": {
            "title": "Add change versus the previous fixing",
            "type": "boolean",
            "description": "Adds previousRate, previousDate, change and changePct to each row. Daily rows compare with the previous fixing of the pair, weekly, monthly, quarterly and yearly rows with the previous period close.",
            "default": true
          },
          "includeProviderRates": {
            "title": "Add every source's rate to latest rows",
            "type": "boolean",
            "description": "Latest rows get providerCount and providerRates: the rate each central bank published for that pair, with its date, so you can see how much the sources agree. Larger rows.",
            "default": false
          },
          "historyFrom": {
            "title": "History from (optional)",
            "type": "string",
            "description": "Start of the history range: a date like 2025-01-31 or a relative range like 30d, 12w, 6m, 5y, \"last 30 days\", \"last 5 years\" or ytd. History starts in 1999 for most pairs and earlier for some (USD/JPY from 1969). Leave empty to skip history.",
            "default": ""
          },
          "historyTo": {
            "title": "History to (optional)",
            "type": "string",
            "description": "End of the history range: a date like 2025-12-31, or yesterday or today. Leave empty to use today.",
            "default": ""
          },
          "interval": {
            "title": "History interval",
            "enum": [
              "daily",
              "weekly",
              "monthly",
              "quarterly",
              "yearly"
            ],
            "type": "string",
            "description": "Daily returns one row per pair and day. Weekly, monthly, quarterly and yearly return one row per pair and period with the closing rate, open, high, low, average, tradingDays and the change against the previous period.",
            "default": "daily"
          },
          "includeCurrencyList": {
            "title": "Currency directory",
            "type": "boolean",
            "description": "Add one row per supported currency with its full name, ISO number, symbol, first and last rate date.",
            "default": false
          },
          "includeRetiredCurrencies": {
            "title": "Include retired currencies in the directory",
            "type": "boolean",
            "description": "Also list currencies that no longer exist (DEM, FRF, ATS, GRD, CYP and about 50 more). Their history stays available as base or target.",
            "default": false
          },
          "includeProviderList": {
            "title": "Source directory",
            "type": "boolean",
            "description": "Add one row per rate source (central bank): key, name, country, rate type, pivot currency, frequency, first and last date, and the currencies it publishes.",
            "default": false
          },
          "onlyChanged": {
            "title": "Only new or changed rates",
            "type": "boolean",
            "description": "Return a rate only when it is new or its value changed since the last run with the same inputs. Unchanged rates are skipped and not charged. Each row carries changeType new or changed. Ideal for a daily schedule.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name (optional)",
            "type": "string",
            "description": "Name for the memory of previous results. Leave empty to derive it from your inputs. Use the same name to share memory between runs, or a different name to keep separate monitors.",
            "default": ""
          },
          "resetSeen": {
            "title": "Forget previous results",
            "type": "boolean",
            "description": "Clear the memory for this monitor before the run, so every rate counts as new again.",
            "default": false
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of rows to return (rate, currency and source rows count together). Free users are limited to 10 rows. Paid users: up to 1,000,000.",
            "default": 100
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}