La API REST de Gasolina hoy es de solo lectura, gratuita y sin clave. Devuelve JSON con los precios oficiales de los carburantes de unas 11.500 gasolineras de España y otros datos derivados (histórico, rankings, carreteras, rutas, contenido y calculadoras).
Toda respuesta correcta es un objeto { "data": …, "meta": { … } }. data cambia según el endpoint (sus campos están en la referencia generada); meta es siempre igual:
Campo
Tipo
Significado
meta.api_version
texto
Versión de la API que ha respondido (v1).
meta.request_id
texto
Identificador de la petición (también en la cabecera X-Request-Id). Inclúyelo si nos escribes por un error.
meta.last_updated
texto ISO 8601 o null
Fecha y hora (UTC) de la última actualización de los datos.
meta.next_update
texto ISO 8601
Fecha y hora prevista de la próxima actualización.
meta.data_age_seconds
entero o null
Antigüedad de los datos, en segundos.
meta.stale
booleano
true si la fuente no respondió y se sirve la última copia buena (los datos pueden ser de la actualización anterior).
meta.source
texto
Fuente de los precios: Ministerio para la Transición Ecológica y el Reto Demográfico (Geoportal de Gasolineras).
meta.attribution
texto
Texto de atribución que debes mostrar junto a los datos.
meta.license
URL
Licencia de reutilización (CC BY 4.0).
meta.web_url
URL o null
Página equivalente en preciosgasolina.es, para citar y enlazar.
Convenciones de data: precios en euros con tres decimales (€/L, o €/kg con GNC, indicado en unit), porcentajes como número (-1.28 = −1,28 %), fechas ISO 8601 y, en cada gasolinera o territorio, su web_url.
Parámetros estrictos. Un parámetro desconocido, repetido o con un valor fuera de rango devuelve 400 (INVALID_PARAMETER) con el motivo en detail. Los endpoints sin parámetros no admiten ninguno.
Booleanos:true, false, 1 o 0.
Coordenadas: WGS84 dentro de España; se redondean a 3 decimales (≈ 100 m).
URL: 2.048 caracteres como máximo (414 si es más larga).
Cuerpo (solo POST /v1/route/fuel): JSON con Content-Type: application/json, 32 KB como mucho.
La API no pagina: cada endpoint de listas acepta limit (de 1 a 50; por defecto 10, salvo donde se indique) y filtros (level/code, fuel, brand, open_24h…). Para obtener todas las gasolineras o series completas, descarga los datos abiertos en CSV o JSON.
Datos con precios: public, max-age=<segundos hasta la próxima actualización, máx. 3600>, stale-while-revalidate=300. Contenido y catálogos: 6 horas. Territorios y ahorro: 1 día. /v1/route/fuel, /v1/status y errores: no-store. Respuestas con meta.stale: 60 s.
X-Request-Id
siempre
Identificador de la petición (= meta.request_id o request_id del error).
X-Cache
respuestas correctas
hit, miss o stale (caché de la API).
RateLimit-Policy
respuestas correctas y 429
Límite aplicado: "rest";q=120;w=60 y, en las consultas pesadas, también "heavy";q=30;w=60.
Retry-After
429 y 503
Segundos que debes esperar antes de reintentar.
Las respuestas llevan además X-Robots-Tag: noindex, X-Content-Type-Options: nosniff y Strict-Transport-Security.
Por IP: 120 peticiones por minuto (y 20 cada 10 segundos); consultas pesadas, 30 por minuto. Las pesadas son GET /v1/stations/nearby, GET /v1/stations/{id}/history, GET /v1/routes/{slug} y POST /v1/route/fuel. Todo sobre límites, topes y reintentos en Límites de uso.