OpenVan.camp Public API
Datos abiertos para viajar en coche: precios de combustible, peajes, visados, matrículas, festivos, riesgos, enchufes, aduana, tipos de cambio, eventos y noticias. Sin clave API ni registro, en tus apps, bots y artículos bajo CC BY 4.0.
Sin clave API
Llama a cualquier endpoint directamente — sin registro ni cabecera de autenticación
100% gratis
Precios de combustible en 175 países · licencia CC BY 4.0
CORS habilitado
Funciona directamente desde el navegador, sin proxy de servidor
Hecho con OpenVan.camp
Apps vanlife, rastreadores de precios de combustible, planificadores de rutas y herramientas EV de una decena de países ya funcionan con nuestros datos abiertos.
Quién ya lo usa
Una selección — apps de combustible, planificadores de rutas, paneles EV y de flotas.
Vemos a ChatGPT, Perplexity, Claude y Gemini consultar los datos de OpenVan.camp — los datos de tu integración también pueden aparecer en sus respuestas.
¿Usas nuestra API?
Añade ?source=tu-dominio a tus llamadas — y aparecerás en esta vitrina.
- Sin clave API. Llama a cualquier endpoint directamente — sin registro ni cabecera de autenticación.
- CORS habilitado. Los endpoints pueden llamarse directamente desde el navegador.
- Formato de respuesta: la mayoría de los endpoints devuelven
{ "success": true, "data": {...} }. Excepciones: los tipos de cambio van en rates; el tiempo devuelve data sin success; peajes de una ruta, roadbook, festivos, aduana y una noticia suelta devuelven un objeto sin envoltorio. Errores y «sin datos»: ver Límites, errores y versiones. - Caché: precios de combustible en caché 6 h · tipos de cambio actualizados cada 6 h · caché HTTP de la respuesta 2 minutos (Cache-Control) · consulta como máximo una vez cada 10 minutos
- Especificación OpenAPI 3.0 completa: /docs.openapi (YAML) · /.well-known/openapi.json (JSON) · ejemplos en GitHub
- Archivos de descubrimiento automático: /llms.txt · /.well-known/openapi.json · /.well-known/api-catalog · /.well-known/agent-card.json · /.well-known/mcp/server-card.json · /.well-known/ai-plugin.json
- Atribución: añade
?source=your-app.compara identificar tu integración — no requiere autenticación, solo buena práctica.
Patrón de prompt recomendado: "Obtén los precios actuales de combustible para [país] en [moneda] usando la API de OpenVan.camp en https://openvan.camp/api/fuel/prices"
Asistentes de IA y servidor MCP
Los mismos datos están disponibles como 32 herramientas MCP públicas (servidor versión 0.12.0, más la interna get_roadbook_build_status de la tarjeta de viaje) con tarjetas interactivas. Conéctalas a cualquier asistente compatible con MCP o abre una app lista.
Servidor remoto — Streamable HTTP, sin clave:
https://mcp.openvan.camp/mcp
En local con npx — para Claude Desktop, Cursor, Windsurf y otros clientes MCP:
{
"mcpServers": {
"openvan": {
"command": "npx",
"args": ["-y", "@openvancamp/mcp-server"]
}
}
}
Plugin para Claude Code y Codex con este servidor MCP y dos skills (instrucciones para el agente de IA). Para instalarlo, ejecute:
# Claude Code
/plugin install openvan-camp --marketplace openvancamp/openvan-camp-public-api
# Codex
codex plugin marketplace add openvancamp/openvan-camp-public-api
# Skills only (any agent)
npx skills add openvancamp/openvan-camp-public-api
El skill openvan-travel le indica al agente qué herramienta del servidor usar para cada pregunta de viaje, como visas, combustible o ruta. El skill openvan-api se usa cuando el agente desarrolla una aplicación con los datos de nuestra API. Gracias a este skill, el agente incluye un enlace a OpenVan.camp junto a los datos, como exige la licencia. También añade el parámetro source a las peticiones y toma la unidad y la moneda de cada tipo de combustible por separado. skills/
Apps listas
Herramientas MCP (32)
plan_road_trip— Plan a road trip by campervan or car between 2-10 places with the OpenVan.camp roadbook: distance, driving time and a day-by-day plan with overnights, budget (fuel, tolls, vignettes, ferries), and for every country on the way the entry rule for the given passports, residence permit and plates, how long you and the vehicle may stay (Schengen 90/180), road rules and city access (low-emission zones and stickers such as Umweltplakette and Crit'Air, Italian ZTL), holidays on the trip dates, safety and power plugs, plus the main warning and a checklist. Returns a link to the full roadbook the user can open, edit and share. Use this first when the user describes a trip from A to B.get_country_travel_brief— Everything to know before driving into one country by campervan or car, in one call: entry rule and how long the person and the vehicle may stay (with passport), travel weather now and this week, fuel prices, tolls and vignettes, public holidays in the next 30 days, safety advice, power plugs, customs limits and food prices. Use it when someone asks what to know about a country, the nuances or a guide for travelling there, or is preparing a trip to it; use the single-topic tools for one narrow question.get_fuel_prices— Current retail fuel prices for all API-supported countries. Covers gasoline, diesel, LPG, CNG, E85, kerosene and grade variants. Pass country_code to get one country in detail; omit it for a summary list. Use it for the price of petrol, diesel, LPG/autogas/propane or CNG in one country; without a country it gives an overview.compare_fuel_prices— Compare current prices for one fuel type across 2-10 countries. Returns sorted table cheapest-first. Use it when someone asks which of two or more named countries has cheaper or more expensive fuel.find_cheapest_fuel— Rank countries by the price of a fuel type in a region (or worldwide): the cheapest first, or with order=most_expensive the most expensive first. Useful for route planning. Use it for «where is fuel cheapest» and, with order=most_expensive, «where is fuel the most expensive», in a region or worldwide.get_country_travel_weather— How suitable the weather in a whole country is for travelling and sleeping in a campervan, as a 0-100 score: overall travel score, sleep score, solar panel yield, driving conditions, awning safety, condensation risk, a 7-day forecast, and the 3 best and 3 toughest cities for the coming week. Country-level: for a named city use get_city_travel_weather. Use it when someone asks what the weather is like in a country, where in a country it is warmer, colder or sunnier, which of its cities are best or worst this week, or whether it is too cold or rainy to sleep in a van there now.get_city_travel_weather— How suitable the weather in one city or town is for travelling and sleeping in a campervan, as a 0-100 score for today and for the coming 7 days, with the city's place among the cities of its country this week, comfortable days, the best stretch and the worst day, a 7-day forecast with day and night temperature and rain, today's score breakdown (thermal, sunshine, precipitation, wind), sleep, driving and solar scores and ready-made advice. Use this, not get_country_travel_weather, when the user names a place (Barcelona, Málaga, Alicante). Use it for the weather in one named city, town or place today, tomorrow or this week.get_city_climate— What the weather is usually like in a city or at any point on a given day of the year, from the ERA5 climate archive 2021–2025 (median of 35 archive days: the date ±3 days over five years): day and night temperature, on how many of the 35 days there was precipitation, the usual sky, sea or large-lake water temperature, solar radiation for panels and the VanSky climate index; plus all 12 months and the best month to travel. Climate, not a forecast. Use it for dates beyond the coming week ("weather in Batumi in mid-September", "is the sea warm in Antalya in May") and for "when is the best time to go"; for today and this week use get_city_travel_weather. Omit date to get the month overview.list_best_weather_countries— List the N countries where the weather is best for travelling by campervan, highest 0-100 travel score first: today's score by default, or with period=week the score of the coming 7 days (the ranking used on OpenVan.camp). Use it when no country is named and someone asks where to go for warm or good weather right now — worldwide or in a region (region=europe…); with sort=warmest only when they literally ask where it is warmest or hottest (it ranks by temperature alone, so deserts come first; «warm and pleasant», «warm and dry» → the default score). These are today's conditions and the coming days, not a forecast for a later month: for «in November» say so.list_events— List vanlife events: expos (Caravan Salon), festivals, meetups, forums, road trips. Filter by status, type, country, or free-text search.get_event— Get full details for a single vanlife event by its slug.search_stories— Search recent news about campervans, motorhomes and road travel collected by OpenVan.camp from public news sources. Returns for each story only a headline, a short summary of up to 300 characters, date, category, countries and a link to the story page on openvan.camp, which credits the original publishers. Never returns full article text. Filter by words in the headline, category, country and language.compare_food_prices— Compare food price index between two countries (world average = 100). Higher number = more expensive food. Use it when someone asks where food is cheaper between two countries.get_country_food_prices— Food price index for one country (world average = 100): how expensive groceries are there, with its yearly history. Use it when someone asks how expensive food, groceries or living is in a country.rank_food_prices— Rank countries by food price index (world average = 100) in a region or worldwide: the cheapest first, or with order=most_expensive the most expensive first. Use it when someone asks where food or groceries are cheapest or most expensive.get_currency_rate— Convert an amount between two currencies using live rates (150+ currencies, daily updates). Use it for exchange rates and converting an amount between currencies.check_visa_rules— Entry rules for one passport and destination: entry mode, allowed length of stay, how the days are counted (per entry or in a rolling window), whether a visa run resets the counter, and temporary vehicle import. Answers carry a confidence level and source — pass those on instead of stating a rule as certain.get_route_visa_rules— Visa rules for every country of a route in one call, for up to 10 passports at once, plus the tightest leg of the route.get_vehicle_import_rules— Temporary admission rules for a foreign-plated vehicle in one country: allowed days, per entry or per window, carnet requirement, green card. A country without a rule we can stand behind returns nothing rather than a guess.get_toll_rates— Toll reference for one country: payment system, per-km rates by vehicle class (car, campervan up to 3.5 t, over 3.5 t), vignette prices for every duration, concession sections and toll bridges/tunnels, each with verification date and source. Use it for toll roads, motorway fees, whether a vignette is needed and what it costs in one country.estimate_route_tolls— Estimate toll cost for a road trip from 2-10 place names: per-km tolls, vignettes, bridges and tunnels, as a EUR range with a per-country breakdown. Flags partial results when a country on the route has no data. Use it only for the toll cost between named places when no other trip details are asked; for a whole trip use plan_road_trip.get_holidays— Public holidays, school holidays (often regional, with ISO 3166-2 region codes) and official peak traffic days (France, Bison Futé) in one country for a period of up to 400 days. A country without data returns an error saying so — never present that as "no holidays". Use it for public holidays, days off, school holidays and peak traffic days.get_travel_hazards— Situation now in one country: UK FCDO travel advice level and current GDACS natural disasters (flood, earthquake, tropical cyclone, wildfire, drought, volcano) with alert level green/orange/red. Not a forecast. Use it when someone asks whether it is safe to go to a country now, about travel warnings or natural disasters.get_active_fires— NASA FIRMS VIIRS satellite fire detections of the last 48 hours in a bounding box up to 10°×10°, strongest first, with fire radiative power in MW. Use it for wildfires right now near a place or in a country: bbox is west,south,east,north in degrees — longitude first (Portugal ≈ -9.6,36.9,-6.1,42.2).get_power_plugs— Plug types (IEC A–N), mains voltage and frequency for one country, with the source of the value, plus the campsite hook-up connector in Europe (CEE17). Use it for socket and plug types, adapters, mains voltage and campsite hook-ups.find_ferries— Ferry and river crossing lines in a bounding box from OpenStreetMap: name, operator, countries, whether cars are carried, crossing time, the operator site checked by hand and a booking link where confirmed, and whether an open timetable exists. bbox is west,south,east,north in degrees — longitude first (Adriatic ≈ 12,39,20,46). Narrow with query (port or operator) or country_code. Use it for which ferries go to an island or across a sea, strait or river, and to get the id for get_ferry_schedule.get_ferry_schedule— One ferry line by id from find_ferries: both ends with country, operator site and booking link, and a timetable digest from open GTFS feeds — next departures today in local time, sailings per day, daytime and night rhythm, weekdays over the next 8 days, crossing time. available: false means no open timetable is matched, not that the ferry does not run. Use it for when the next ferry leaves, how often it runs and how long the crossing takes.get_customs_rules— Customs rules when driving into a country, optionally from a given country: food bans, cash declaration, alcohol and tobacco limits, goods value, fuel in a canister. Each rule carries a verbatim official quote and source link. A country without data returns an error saying so — never present that as "nothing is restricted". Use it for what you may bring in by car: alcohol, tobacco, cash, meat and other food, goods limits.list_license_plate_countries— Countries whose license plates are available: international code, number of regions and an example plate.get_license_plate_country— How a country's license plate looks and reads (standard, size, format), its plate types (standard, diplomatic, police, taxi…) with example numbers, and every region code on its plates, grouped by region — e.g. which region is 77 or 199 on Russian plates. Use it for what a plate region code means (77, 777, AA…) and a country's plate format.check_license_plate— Validate a plate number against the country's format (look-alike letters are normalized) and say which region its code belongs to. Pass type to check against a specific plate type's format. Never identifies the owner or the vehicle's location. Use it to check a specific plate number.get_license_plate_image— Draw an illustrative image of a country's standard civilian license plate (PNG shown inline, plus SVG/PNG links). The number must match the country's standard format. Official, police, military and diplomatic plates are not drawn. Use it to draw or show a picture of a plate.
Ficha del servidor: /.well-known/mcp/server-card.json
· npm: @openvancamp/mcp-server
El paquete de npm puede ir unas versiones por detrás del servidor remoto; la dirección remota siempre es la más reciente.
Endpoints disponibles
/api/fuel/prices
175 países
Precios actuales de combustible para 175 países. La lista de claves de precio se genera desde el contrato actual de la API. Actualizados semanalmente desde fuentes gubernamentales oficiales (EU Oil Bulletin, Statistics Norway, EIA, ANP, NRCan y otros). Caché 6 horas. Datos de combustible actualizados el: 31 octubre 2026.
Claves de precio:
gasoline_regular, gasoline, gasoline_premium, gasoline_super, diesel_regular, diesel, diesel_premium, lpg, cng, e85, kerosene, premium
Unidad y moneda van por tipo de combustible: units[tipo] y currencies[tipo] mandan sobre unit y currency del país. Por ejemplo, Colombia cobra por galón y la gasolina en Venezuela va en bolívares.
curl https://openvan.camp/api/fuel/prices
Ejemplo de respuesta:
{
"success": true,
"data": {
"DE": {
"country_code": "DE",
"country_name": "Germany",
"region": "europe",
"currency": "EUR",
"local_currency": "EUR",
"unit": "liter",
"units": {
"diesel": "liter",
"diesel_premium": "liter",
"gasoline": "liter",
"gasoline_premium": "liter",
"lpg": "liter",
"premium": "liter"
},
"currencies": {
"diesel": "EUR",
"diesel_premium": "EUR",
"gasoline": "EUR",
"gasoline_premium": "EUR",
"lpg": "EUR",
"premium": "EUR"
},
"prices": {
"gasoline_regular": null,
"gasoline": 2.1144,
"gasoline_premium": 2.21,
"gasoline_super": null,
"diesel_regular": null,
"diesel": 2.2683,
"diesel_premium": 2.4693,
"lpg": 1.1586,
"cng": null,
"e85": null,
"kerosene": null,
"premium": 2.21
},
"price_changes": {
"gasoline_regular": null,
"gasoline": -0.0281,
"gasoline_premium": -0.03,
"gasoline_super": null,
"diesel_regular": null,
"diesel": 0.0006,
"diesel_premium": 0.0003,
"lpg": 0.0636,
"cng": null,
"e85": null,
"kerosene": null,
"premium": null
},
"fetched_at": "2026-10-31T11:35:40+03:00",
"sources": [
"EU Weekly Oil Bulletin",
"clever-tanken.de (Premium Diesel)",
"Tankerkoenig (tankerkoenig.de)",
"Fuelo.net",
"Cargopedia.net",
"BenzinpreisAktuell.de"
],
"sources_count": 4,
"is_excluded": false
}
},
"meta": {
"total_countries": 175,
"updated_at": "2026-10-31 11:35:40",
"cache_ttl_hours": 6
}
}
/api/currency/rates
150+ monedas
Tipos de más de 150 monedas frente al EUR (EUR = 1), de varias fuentes abiertas con conmutación automática. Se actualizan cada 6 horas: la hora está en meta.updated_at y un tipo de más de 25 horas se considera desactualizado.
curl https://openvan.camp/api/currency/rates
Respuesta real de la API (algunas de 152 monedas):
{
"success": true,
"rates": {
"EUR": 1,
"GBP": 0.83637627,
"GEL": 2.9116,
"KZT": 508.29914188,
"RUB": 89.6603,
"TRY": 55.8153,
"USD": 1.12040699,
"…": "…"
},
"meta": {
"count": 152,
"base": "EUR",
"updated_at": "2026-11-02T00:05:25+03:00",
"refreshed_every_hours": 6,
"max_age_seconds": 90000
}
}
/api/vanbasket/countries
90+ países
VanBasket Food Price Index — cómo de cara es la comida respecto a la media mundial (Mundo = 100). Basado en World Bank ICP 2021, ajustado con IMF CPI.
# All countries
curl https://openvan.camp/api/vanbasket/countries
# Compare two countries
curl "https://openvan.camp/api/vanbasket/compare?from=DE&to=TR"
# Single country with history
curl https://openvan.camp/api/vanbasket/countries/DE
/api/visa/check
39.601 pares
Normas de visado y frontera: cuánto tiempo puedes permanecer para cualquier par pasaporte × destino, cómo se cuentan los días (por entrada o en una ventana móvil), si un visa run reinicia el contador — además de las normas de importación temporal de vehículos. Cada respuesta indica su confianza, su fuente y la capa de la que procede.
# One pair: stay rule, entry mode, shared-counter zone, vehicle rule
curl "https://openvan.camp/api/visa/check?passport=RU&destination=TR"
# All 199 destinations for one passport
curl "https://openvan.camp/api/visa/passport/DE?mode=visa_free"
# Several countries and passports at once: the tightest leg of a route
curl "https://openvan.camp/api/visa/route?t=GE,AM,TR&p=RU,DE"
# Compact payload for colouring a world map
curl https://openvan.camp/api/visa/map/US
# Temporary vehicle import rules (country slug, e.g. georgia)
curl https://openvan.camp/api/visa/vehicle/georgia
# Passport ranking and the change log
curl "https://openvan.camp/api/visa/rank?limit=10"
curl "https://openvan.camp/api/visa/history?subject_key=RU%3ETR"
/api/plates
Matrículas
Matrículas del mundo: formato, códigos de región e imagen lista de la matrícula. El SVG/PNG lo dibuja el mismo motor que el sitio: la tipografía de la matrícula va dentro como contornos, no hay nada que instalar: basta con un <img src>. Además, validación con normalización de letras, matrículas aleatorias y un motor para dibujarlas en el navegador.
# Ready plate image — put it into <img src> (PNG: plate.png?width=800)
curl "https://openvan.camp/api/plates/ru/plate.svg?number=A123BC®ion=77"
# Countries, then one country: format, regions, codes, browser engine
curl https://openvan.camp/api/plates
curl "https://openvan.camp/api/plates/ru?locale=en"
# Validate a number and resolve its region; random plate
curl "https://openvan.camp/api/plates/ru/validate?number=A123BC®ion=799"
curl https://openvan.camp/api/plates/ru/random
/api/tolls
Coste de ruta
Peajes por país — tarifa por kilómetro para coche, autocaravana de hasta 3,5 t y vehículos más pesados, viñetas, puentes y túneles de pago, cada dato con fecha de verificación y fuente — y el coste de una ruta completa a partir de nombres de lugares: peajes como rango en euros y combustible a los precios de cada país del camino.
# Tolls for a route of 2–10 place names: car | van (up to 3.5 t, default) | heavy
curl "https://openvan.camp/api/tolls/route?waypoints=Munich|Venice&vehicle_class=van"
# Toll reference: all countries, then one country with vignettes, bridges and tunnels
curl https://openvan.camp/api/tolls/countries
curl https://openvan.camp/api/tolls/countries/FR
# Fuel cost for the same kind of route, at the prices of every country on the way
curl -X POST https://openvan.camp/api/route-cost \
-H "Content-Type: application/json" \
-d '{"waypoints":["Berlin","Prague"],"cons":10,"fuel":"diesel"}'
waypoints
vehicle_class
cons
tank
fuel
currency
locale
Cómo se ve en el Roadbook
Documentación completa
/api/roadbook/from-places
Viaje completo
El road book de OpenVan.camp a partir de 2–10 nombres de lugares: el mismo plan que en el asistente de road book — días al volante y noches, presupuesto de combustible, peajes, viñetas y ferris, y para cada país del camino las normas de entrada de viajeros y vehículo según los pasaportes y matrículas indicados, festivos, seguridad y electricidad. La respuesta es una página de road book que se puede compartir; la misma petición devuelve el mismo road book.
# Roadbook for 2–10 place names: places and locale are required, everything else goes into "inputs"
curl -X POST https://openvan.camp/api/roadbook/from-places \
-H "Content-Type: application/json" \
-d '{"places":["Munich","Venice"],"locale":"en","inputs":{"travelers":["DE"],"plates":"DE","cons":10,"fuel":"diesel"}}'
# → { "code": "wqhk8", "status": "building", "url": "/en/roadbook/wqhk8-munich-venice", ... }
# While status is not "ready", poll it (returns only status and progress)
curl https://openvan.camp/api/roadbook/wqhk8/status
# → { "status": "ready", "error": null, "progress": ... } then open https://openvan.camp + url
places
locale
name
travelers
plates
weight
fuel
cons
date
currency
Cómo se ve en el Roadbook
Documentación completa
/api/holidays/countries/{code}
Festivos
Festivos oficiales, vacaciones escolares (a menudo por región, con códigos ISO 3166-2) y días oficiales de tráfico intenso para un periodo de hasta 400 días, para saber cuándo se llenan carreteras, campings y ferris.
# School holidays in Germany in December (kind = public | school | traffic)
curl "https://openvan.camp/api/holidays/countries/DE?from=2026-12-01&to=2026-12-31&kind=school"
# Countries and the kinds of data each has
curl https://openvan.camp/api/holidays/countries
/api/hazards/countries/{code}
Riesgos
La situación actual en un país: nivel de recomendación de viaje del Ministerio de Exteriores británico (FCDO) y desastres naturales en curso según GDACS con nivel de alerta, además de focos de incendio detectados por los satélites de NASA FIRMS en las últimas 48 horas dentro de una zona. No es un pronóstico.
# FCDO advice level + current GDACS disasters
curl https://openvan.camp/api/hazards/countries/TR
# Active fires of the last 48 h, bbox = west,south,east,north (up to 10°×10°)
curl "https://openvan.camp/api/hazards/fires?bbox=29,36,33,38"
/api/ferries
Ferris
Líneas de ferri y pasos fluviales con sus embarcaderos de OpenStreetMap en un recuadro del mapa: sitios de los operadores verificados a mano, enlaces de reserva en línea cuando está confirmada y un resumen de horarios de feeds GTFS abiertos: próximas salidas, días, frecuencia y duración del trayecto. Los datos de líneas y embarcaderos están bajo ODbL 1.0.
# Lines and ports in a box, bbox = west,south,east,north; zoom sets geometry detail
curl "https://openvan.camp/api/ferries?bbox=4.9,58.8,6.2,59.4&zoom=9"
# One crossing with both ends, then its timetable digest (local operator time)
curl https://openvan.camp/api/ferries/r5958961
curl https://openvan.camp/api/ferries/r5958961/schedule
/api/electricity/countries/{code}
Enchufes
Tipos de enchufe (IEC A–N), tensión y frecuencia de la red de cada país con la fuente del dato, además de la toma eléctrica de los campings europeos (CEE17).
curl https://openvan.camp/api/electricity/countries/GB
curl https://openvan.camp/api/electricity/countries
/api/customs/countries/{code}
Aduana
Qué puedes llevar en coche: alimentos prohibidos, declaración de efectivo, límites de alcohol y tabaco, valor libre de impuestos, combustible en bidón. Opcionalmente desde un país concreto: dentro de la UE no hay aduana. Cada norma incluye una cita literal de la fuente oficial y un enlace.
# Entering Norway from Germany: cash, alcohol, tobacco, food
curl "https://openvan.camp/api/customs/countries/NO?from=DE"
# Jurisdictions and blocs (EU, EAEU)
curl https://openvan.camp/api/customs/countries
/api/vansky/weather/{code}/{city}
0–100
El índice VanSky mide en qué medida las condiciones meteorológicas son adecuadas para viajar en autocaravana. Se expresa en una escala de 0–100, donde 100 significa excelente. Se calcula para un país y para una ciudad, para hoy y para los próximos 7 días, y coincide con la cifra de «hoy» que muestra la página de openvan.camp. Para una ciudad, la API devuelve su posición en el ranking de ciudades del país según el índice de la semana (la media de los 7 días, rebajada si los días son irregulares), la previsión por días con los componentes del índice, las puntuaciones parciales (pernocta, conducción, paneles solares, mar), la calidad del aire y recomendaciones redactadas como texto. El ranking de ciudades de un país está en /api/vansky/weather/{code}/cities. El ranking de países está en /api/vansky/ranking. La fórmula y los pesos del índice están en /api/vansky/methodology. En {code} indique el código de país de dos letras según ISO 3166-1 alpha-2. La ciudad se identifica con el slug en caracteres latinos que aparece al final de la dirección de su página: en openvan.camp/ru/vansky/georgia/batumi es batumi. Puede encontrarlo con la consulta /api/vansky/search?q=Batumi, donde q contiene el nombre de la ciudad.
# One country: score, forecast, best and worst cities for the week
curl https://openvan.camp/api/vansky/weather/PT
# Find a city slug: the last part of "url" (…/vansky/portugal/lisbon → lisbon)
curl "https://openvan.camp/api/vansky/search?q=Lisbon"
# One city, as on its page: today, week, place in the country, score breakdown per day
curl "https://openvan.camp/api/vansky/weather/PT/lisbon?include=hourly"
# Rankings: cities of a country for the coming week, countries of a region
curl "https://openvan.camp/api/vansky/weather/PT/cities?limit=10"
curl "https://openvan.camp/api/vansky/ranking?region=europe&limit=10"
# How the score is calculated (curves, weights, adjustments) — recompute it yourself
curl https://openvan.camp/api/vansky/methodology
/api/vansky/climate
2021–2025
Clima típico de cualquier coordenada o ciudad de VanSky en un día del año elegido. Es la mediana de 35 días de archivo: la misma fecha con un margen de ±3 días en cada año de 2021–2025, según datos de reanálisis ERA5 del servicio Copernicus. Devuelve la temperatura máxima diurna y la mínima nocturna de esa fecha. Indica en cuántos de los 35 días hubo precipitación (lluvia o nieve, ≥1,5 mm) y cuál es el cielo más frecuente (clear, cloudy, overcast). Añade la temperatura del mar o de un lago grande en un radio de ~50 km, dato que se omite si no hay agua cerca. Incluye la radiación solar en kWh/m² para dimensionar paneles solares y el índice VanSky de 0–100, donde un valor más alto significa más confort. Para cada uno de los 12 meses ofrece la media de días despejados, nubosos y cubiertos sin precipitación, y de días con precipitación, y señala el mejor mes según el índice. Indique en la petición lat y lng (latitud y longitud), o bien el código ISO del país y el slug de la ciudad. El parámetro date es opcional y usa el formato MM-DD. Si lo omite, la respuesta incluye los 366 días.
# Any point: what the weather is usually like on 18 September
curl "https://openvan.camp/api/vansky/climate?lat=41.64&lng=41.63&date=09-18"
# A VanSky city, all 366 days + 12 months + best month
curl https://openvan.camp/api/vansky/climate/GE/batumi
/api/events
eventos vanlife
Lista paginada de eventos vanlife — exposiciones, festivales, quedadas, road trips. Filtra por estado, tipo, país. Nombres localizados en 7 idiomas.
# Upcoming events in Germany
curl "https://openvan.camp/api/events?country=DE&status=upcoming"
# Search by name, Russian locale
curl "https://openvan.camp/api/events?search=Adventure+Northside&locale=ru"
# Event details + linked source articles
curl "https://openvan.camp/api/event/adventure-northside-2026?locale=en"
curl "https://openvan.camp/api/event/adventure-northside-2026/articles?locale=en"
en ru de fr es pt tr. Por defecto: en. Una configuración regional desconocida se reemplaza silenciosamente por en.
alternativa de articles: si ningún artículo coincide con la configuración regional solicitada, se devuelven todos los artículos de origen.
/api/stories
7 idiomas
Noticias vanlife agregadas de 200+ editores y traducidas a 7 idiomas. Cada historia incluye sources — los artículos originales de los editores con enlaces directos, nombres de fuente, fechas de publicación y códigos de idioma.
Búsqueda semántica de noticias (q, hasta 15 resultados) y el resumen de la tarde ya preparado (ru, en).
# Latest stories in English
curl "https://openvan.camp/api/stories?locale=en"
# Filter by category and country
curl "https://openvan.camp/api/stories?locale=de&category=festival&country=DE"
# Full story with all source articles
curl "https://openvan.camp/api/story/adac-camper-des-jahres-der-wettbewerb-fuer?locale=en"
# Semantic search over the news (1–15 results)
curl "https://openvan.camp/api/news/search?q=campervan+rules+Europe&locale=en&limit=5"
# Ready evening digest (ru or en)
curl "https://openvan.camp/api/news/digest?locale=en"
Ejemplo de respuesta para /api/story/{slug}:
{
"slug": "adac-camper-des-jahres-der-wettbewerb-fuer",
"title": "ADAC launches 'Camper of the Year' competition for motorhome drivers",
"summary": "ADAC is holding the national 'Camper des Jahres 2026' competition for motorhome owners...",
"image_url": "https://...",
"category": { "slug": "festival", "name": "Festivals" },
"countries": [{ "code": "de", "name": "Germany", "flag_emoji": "🇩🇪" }],
"first_published_at": "2026-01-22T11:00:00+03:00",
"last_updated_at": "2026-07-04T04:16:47+03:00",
"articles_count": 5,
"url": "https://openvan.camp/en/news/festival/adac-camper-des-jahres-der-wettbewerb-fuer",
"sources": [
{
"title": "Nürburgring: Bundesweiter Wettbewerb «Camper des Jahres»",
"original_url": "https://www.blick-aktuell.de/Berichte/...",
"source_name": "BLICK aktuell",
"published_at": "2026-04-30T09:24:20+03:00",
"language": "de",
"image_url": "https://..."
}
]
}
en ru de fr es pt tr. Por defecto: en. Afecta a title, summary, y category.name.
sources[].language es siempre el idioma original del editor, independiente de la configuración regional.
Inicio rápido
JavaScript — el diésel más barato de Europa
const { data } = await fetch("https://openvan.camp/api/fuel/prices").then(r => r.json());
const cheapest = Object.values(data)
.filter(c => c.region === "europe" && c.prices.diesel !== null)
.sort((a, b) => a.prices.diesel - b.prices.diesel)
.slice(0, 5);
cheapest.forEach(c => console.log(`${c.country_name}: ${c.prices.diesel} ${c.currency}/L`));
JavaScript — conversión a USD con tipos de cambio
const [{ data }, { rates }] = await Promise.all([
fetch("https://openvan.camp/api/fuel/prices").then(r => r.json()),
fetch("https://openvan.camp/api/currency/rates").then(r => r.json()),
]);
// Convert any price to USD/liter
// unit: "liter" | "gallon" (US, 3.78541 L) | "imperial_gallon" (4.54609 L)
const LITERS_PER_UNIT = { liter: 1, gallon: 3.78541, imperial_gallon: 4.54609 };
// Unit and currency are per grade: units[grade] / currencies[grade] win over unit / currency
function toUSD(country, grade) {
const currency = country.currencies?.[grade] ?? country.currency;
const unit = country.units?.[grade] ?? country.unit;
const usd = (country.prices[grade] / rates[currency]) * rates["USD"];
return usd / (LITERS_PER_UNIT[unit] || 1);
}
console.log(`Germany diesel: $${toUSD(data["DE"], "diesel").toFixed(3)}/L`);
Python — países con GLP
import requests
data = requests.get("https://openvan.camp/api/fuel/prices").json()["data"]
lpg = [(v["country_name"], v["prices"]["lpg"], v["currency"])
for v in data.values() if v["prices"]["lpg"] is not None]
for name, price, currency in sorted(lpg, key=lambda x: x[1])[:10]:
print(f"{name}: {price} {currency}/L")
Más ejemplos (bash, pandas, widget): GitHub →
SDK de JavaScript / TypeScript
SDK oficial tipado — sin configuración, funciona en Node.js ≥ 18, navegador, Cloudflare Workers, Deno, Bun. No requiere clave API.
Instalación
npm install @openvancamp/sdk
# or: pnpm add @openvancamp/sdk
Inicio rápido (TypeScript / ESM)
import { OpenVan } from "@openvancamp/sdk";
const ov = new OpenVan();
// Cheapest diesel in Europe (top 5, EUR-normalized)
const top5 = await ov.fuel.cheapest("diesel", 5);
top5.forEach(c => console.log(c.country_name, c.prices.diesel, c.currency));
// Is Portugal cheaper than Germany for van living?
const comp = await ov.basket.compare("DE", "PT");
console.log(`Portugal is ${Math.abs(comp.diff_percent)}% cheaper`);
// Vanlife weather suitability — top 10 countries right now
const weather = await ov.weather.top({ limit: 10 });
// Tolls and visa rules for a road trip
const tolls = await ov.tolls.route(["Munich", "Venice"], "van");
const visa = await ov.visa.check("RU", "TR");
// Holidays, hazards, plugs and customs for the next country
const traffic = await ov.holidays.country("FR", { kind: "traffic" });
const hazards = await ov.hazards.country("TR");
const plugs = await ov.electricity.country("GB");
const customs = await ov.customs.country("NO", { from: "DE" });
SDK para Python
Sin dependencias, Python 3.9+, sin clave de API.
pip install openvan
from openvan import OpenVan
ov = OpenVan(source="myapp.com") # source is optional: it lets us see and credit your project
for c in ov.fuel.cheapest("diesel", 5):
print(c["country_name"], c["prices"]["diesel"], c["currency"])
print(ov.visa.check("RU", "TR")["data"])
print(ov.tolls.route(["Rome", "Paris"], vehicle_class="van"))
Límites, errores y versiones
Límites de peticiones
Se cuentan por IP: 120 peticiones por minuto en toda la API; las pesadas tienen límites menores — la tabla muestra los valores reales. Lo que queda está en las cabeceras X-RateLimit-Limit y X-RateLimit-Remaining. Al superarlo: HTTP 429 y la cabecera Retry-After — espera esos segundos y reintenta.
| Petición | Por minuto |
|---|---|
| Toda la API | 120 |
| POST /api/route-cost | 30 |
| GET /api/tolls/route | 10 |
| GET /api/hazards/fires | 15 |
| GET /api/plates/{code}/plate.svg · plate.png · random | 30 |
| POST /api/roadbook/from-places | 10 |
| GET /api/roadbook/{code}/status | 240 |
Errores
Un error es HTTP 4xx/5xx. El cuerpo tiene tres formas: { "success": false, "error": "…" } o { "error": "…", "message": "…" }; un error de validación del roadbook es { "error": "validation", "fields": [ … ] }; el límite superado y una dirección desconocida devuelven { "message": "…" }. Comprueba el estado HTTP, no solo el cuerpo.
# 422 — invalid parameters
{ "success": false, "error": "Parameters \"passport\" and \"destination\" are required." }
# 404 — no data for this object
{ "error": "not_found", "message": "No toll data for this country" }
# 422 — roadbook validation
{ "error": "validation", "fields": ["locale"] }
# 404 — country known to the API, but no data: "we don't know", not "nothing applies"
{ "country_code": "ZZ", "covered": false, "items": [] }
# 429 — rate limit (wait Retry-After seconds)
{ "message": "Too Many Attempts." }
Sin datos no significa «nada»
Festivos y aduana responden 404 con covered: false (los campos del país siguen ahí); el catálogo de peajes y el tiempo responden 404 con un campo error. No digas al usuario «no hay festivos», «carretera gratuita» ni «nada prohibido» si faltan datos.
Versiones
API versión 1.10.0 (especificación OpenAPI), servidor MCP 0.12.0. Cada cambio se publica en el changelog de GitHub. Changelog
Soporte
Preguntas y errores — GitHub Issues o hello@openvan.camp. Uso de datos bajo CC BY 4.0; condiciones del sitio en la página Condiciones. GitHub Issues · /terms · /privacy
Atribución
La atribución es obligatoria según la licencia CC BY 4.0: dondequiera que muestres nuestros datos (web, app, bot, artículo), coloca al lado un enlace visible a OpenVan.camp. Si un agente de IA escribe tu código, pídele que mantenga este enlace. Snippet listo para usar:
Los festivos proceden de OpenHolidays API (ODbL) y Nager.Date (MIT): al mostrarlos, cita también esas fuentes — figuran en el campo upstream de la respuesta.
Data: <a href="https://openvan.camp/">OpenVan.camp</a> (CC BY 4.0)
Identifica tu app — añade ?source=yoursite.com
Pasa source como parámetro de consulta con tu dominio o nombre de app. Sin registro — nos ayuda a entender cómo se usan los datos y reconocer proyectos activos. El valor se devuelve en cada respuesta en _attribution.your_source.
curl "https://openvan.camp/api/fuel/prices?source=myapp.com"
# Response includes:
# "_attribution": {
# "data_source": "openvan.camp",
# "license": "CC BY 4.0",
# "required": true,
# "attribution_url": "https://openvan.camp/",
# "attribution_html": "Data: <a href=\"https://openvan.camp/\">OpenVan.camp</a> (CC BY 4.0)",
# "instructions": "Attribution is required by the CC BY 4.0 license. ...",
# "your_source": "myapp.com"
# }