{
  "openapi": "3.0.1",
  "info": {
    "title": "EU Fuel Prices: Spain & France Official Data",
    "description": "Live petrol station prices from the official government feeds of Spain and France: diesel, petrol 95/98, E10, LPG and more, in one clean format with GPS. Filter by city, region, radius or cheapest N, or get every price in a country for a flat $2.50.",
    "version": "1.1",
    "x-build-id": "aPSdojE5Bhh4VNLf4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hydrocore~eu-fuel-prices/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hydrocore-eu-fuel-prices",
        "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/hydrocore~eu-fuel-prices/runs": {
      "post": {
        "operationId": "runs-sync-hydrocore-eu-fuel-prices",
        "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/hydrocore~eu-fuel-prices/run-sync": {
      "post": {
        "operationId": "run-sync-hydrocore-eu-fuel-prices",
        "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": {
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Which official government feeds to read. Spain (ES) republishes its feed every 30 minutes; France (FR) refreshes its instant feed every 10 minutes. Each country you pick is one feed download (one 'Country feed loaded' event). A country never costs more than its full-snapshot price.",
            "items": {
              "type": "string",
              "enum": [
                "ES",
                "FR"
              ],
              "enumTitles": [
                "Spain (MITECO, ~11,500 stations)",
                "France (prix-carburants, ~9,800 stations)"
              ]
            },
            "default": [
              "ES"
            ]
          },
          "fullSnapshot": {
            "title": "Full country snapshot (every station, every price)",
            "type": "boolean",
            "description": "One click for bulk data: turn this on to get every station and every fuel price of each selected country, with no filters. All other filters, Cheapest N and Max results are ignored, including 'Ignore prices older than', so rarely updated French stations are included; use the isStale and priceAgeDays fields to filter them out. Price: a flat price per country, at most $2.50 on the Free plan ($2.25 Bronze, $2.00 Silver, $1.75 Gold and above), plus the $0.0005 run start. Tip: for Spain + France together, set 'Maximum cost per run' to at least $5.01 in the run options, or a country will be skipped and not charged.",
            "default": false
          },
          "fuelTypes": {
            "title": "Fuel types",
            "type": "array",
            "description": "Only return these fuels. Leave empty for every fuel the station sells. Names are normalized across countries, for example 'diesel' covers Spain's Gasóleo A and France's Gazole.",
            "items": {
              "type": "string",
              "enum": [
                "diesel",
                "diesel_premium",
                "diesel_agricultural",
                "hvo",
                "biodiesel",
                "petrol_95",
                "petrol_95_e10",
                "petrol_95_premium",
                "petrol_98",
                "petrol_98_e10",
                "e85",
                "e25",
                "bioethanol",
                "renewable_petrol",
                "lpg",
                "cng",
                "lng",
                "bio_cng",
                "bio_lng",
                "hydrogen",
                "adblue",
                "methanol",
                "ammonia",
                "other"
              ],
              "enumTitles": [
                "Diesel (Gasóleo A / Gazole)",
                "Premium diesel",
                "Agricultural diesel (Spain Gasóleo B)",
                "HVO / renewable diesel",
                "Biodiesel",
                "Petrol 95 (E5 / SP95)",
                "Petrol 95 E10",
                "Premium petrol 95 (Spain)",
                "Petrol 98 (E5 / SP98)",
                "Petrol 98 E10",
                "E85 bioethanol",
                "E25 (Spain)",
                "Bioethanol (Spain)",
                "Renewable petrol (Spain)",
                "LPG / autogas (GLP / GPLc)",
                "CNG / natural gas (per kg)",
                "LNG (per kg)",
                "Bio-CNG (per kg)",
                "Bio-LNG (per kg)",
                "Hydrogen (per kg)",
                "AdBlue",
                "Methanol",
                "Ammonia",
                "Other"
              ]
            }
          },
          "city": {
            "title": "City / town",
            "type": "string",
            "description": "Town or municipality name as the official feed spells it, for example 'Madrid', 'Sevilla' or 'Lyon'. Accents and capital letters don't matter. Separate several towns with commas. It is an exact town match, so 'Madrid' does not include 'Humanes de Madrid'; use Region or a radius for wider areas."
          },
          "region": {
            "title": "Region / province",
            "type": "string",
            "description": "Region, province or département, for example 'Andalucía', 'Málaga', 'Île-de-France' or 'Gironde'. Part of a name also works. For Spain, naming a single province or autonomous community downloads only that part of the feed, which is faster."
          },
          "postalCode": {
            "title": "Postcode starts with",
            "type": "string",
            "description": "Postcode prefix, for example '28' for Madrid province or '75' for Paris."
          },
          "brand": {
            "title": "Brand",
            "type": "string",
            "description": "Part of the brand or station sign, for example 'Repsol', 'Cepsa' or 'Ballenoil'. France's official feed has no brand field, so French stations never match this filter."
          },
          "latitude": {
            "title": "Latitude",
            "type": "number",
            "description": "Centre point latitude in decimal degrees, for example 40.4168 for central Madrid. Use together with longitude. Adds a distanceKm column."
          },
          "longitude": {
            "title": "Longitude",
            "type": "number",
            "description": "Centre point longitude in decimal degrees, for example -3.7038 for central Madrid."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 0,
            "type": "number",
            "description": "Only stations within this straight-line distance of the point. 0 or empty means no limit (distance is still shown)."
          },
          "cheapestN": {
            "title": "Cheapest N per fuel",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only the N cheapest stations for each fuel type in each country after the other filters. 0 keeps every match.",
            "default": 0
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "price",
              "distance",
              "none"
            ],
            "type": "string",
            "description": "Order of the results. 'Cheapest first' lists each fuel type separately, cheapest station first. If you leave this empty, results are sorted nearest first when a point is given, otherwise cheapest first."
          },
          "maxPriceAgeDays": {
            "title": "Ignore prices older than (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip prices the station has not updated for this many days. France keeps old prices from stations that report rarely, so the default is 7 days. Set 0 to keep every price. Every row shows its age in priceAgeDays and isStale (true when older than 7 days).",
            "default": 7
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many price rows in a filtered search (ignored by Full country snapshot). 0 means no limit. You never pay more than the snapshot price per country ($2.50 on the Free plan): only the first 1,920 rows of each country are charged, the rest are free. All of Spain is about 43,000 rows, all of France about 30,000.",
            "default": 1000
          },
          "maxFeedAgeHours": {
            "title": "Reject feeds older than (hours)",
            "minimum": 0,
            "type": "integer",
            "description": "Safety check: if a government feed itself has not been refreshed for this many hours, that country is skipped (not charged) and a clear error row is added instead of serving old prices. Set 0 to turn the check off.",
            "default": 24
          },
          "failOnError": {
            "title": "Fail the run if a feed has a problem",
            "type": "boolean",
            "description": "Off: the run still succeeds with the countries that worked, plus one error row per country that could not be used (feed down, format changed, too old). On: same output, but the run ends as Failed, so Apify can alert you. Good for monitoring and scheduled runs.",
            "default": false
          },
          "trackChanges": {
            "title": "Track price changes",
            "type": "boolean",
            "description": "Compare each price with the last run that used the same tracking name, and add previousPrice, priceChange and changeStatus (new, up, down, same). Prices are remembered in a key-value store in your account.",
            "default": false
          },
          "onlyChanges": {
            "title": "Only output changes",
            "type": "boolean",
            "description": "Return only prices that went up or down, plus stations seen for the first time. Turns on tracking. The first run saves a baseline and returns everything.",
            "default": false
          },
          "stateKey": {
            "title": "Tracking name",
            "type": "string",
            "description": "Name for the saved price history, so different schedules (for example 'madrid-diesel' and 'lyon') don't mix. Use the same name on every run of one schedule.",
            "default": "default"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}