OpenVan.camp Public API

Données ouvertes pour voyager en voiture : prix du carburant, péages, visas, plaques d’immatriculation, jours fériés, risques, prises, douane, taux de change, événements et actualités. Sans clé API ni inscription — dans vos apps, bots et articles sous CC BY 4.0.

Sans clé API

Appelez n'importe quel endpoint directement — sans inscription ni en-tête d'authentification

100% gratuit

Prix du carburant dans 174 pays · licence CC BY 4.0

CORS activé

Fonctionne directement dans le navigateur, aucun proxy serveur nécessaire

Conçu avec OpenVan.camp

Des applis vanlife, suivis de prix des carburants, planificateurs d'itinéraires et outils EV d'une dizaine de pays fonctionnent déjà sur nos données ouvertes.

275
applis et sites
13 200+
requêtes API / mois
4
moteurs IA lisent les données
6
jeux de données ouverts

Qui l'utilise déjà

Une sélection — applis carburant, planificateurs d'itinéraires, tableaux de bord EV et flottes.

Lu par les moteurs de recherche IA
ChatGPT Perplexity Claude Gemini

Nous voyons ChatGPT, Perplexity, Claude et Gemini récupérer les données OpenVan.camp — les données de votre intégration peuvent aussi apparaître dans leurs réponses.

Vous utilisez notre API ?

Ajoutez ?source=votre-domaine à vos appels — et vous apparaîtrez dans cette vitrine.

Licence CC BY 4.0 — Vous êtes libre d'utiliser, partager et adapter ces données dans tout format, à condition de créditer OpenVan.camp. creativecommons.org →
Pour les agents IA et outils LLM
  • Sans clé API. Appelez n'importe quel endpoint directement — sans inscription ni en-tête d'authentification.
  • CORS activé. Les endpoints peuvent être appelés directement depuis le navigateur.
  • Format de réponse : la plupart des endpoints renvoient { "success": true, "data": {...} }. Exceptions : les taux de change sont dans rates ; la météo renvoie data sans success ; péages d’un itinéraire, roadbook, jours fériés, douane et un article seul renvoient un objet sans enveloppe. Erreurs et « pas de données » : voir Limites, erreurs et versions.
  • Cache : prix du carburant en cache 6 h · taux de change mis à jour toutes les 6 h · cache HTTP de la réponse 2 minutes (Cache-Control) · interrogez au plus une fois toutes les 10 minutes
  • Spécification OpenAPI 3.0 complète : /docs.openapi (YAML) · /.well-known/openapi.json (JSON) · exemples GitHub
  • Fichiers de découverte automatique : /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
  • Attribution : ajoutez ?source=your-app.com pour identifier votre intégration — aucune authentification requise, juste une bonne pratique.

Modèle de prompt recommandé : "Obtiens les prix actuels des carburants pour [pays] en [devise] via l'API OpenVan.camp à l'adresse https://openvan.camp/api/fuel/prices"

Assistants IA et serveur MCP

Les mêmes données existent sous forme de 30 outils MCP publics (serveur version 0.11.0, plus l’outil interne get_roadbook_build_status de la carte de voyage) avec des cartes interactives. Connectez-les à n’importe quel assistant compatible MCP ou ouvrez une application prête à l’emploi.

Serveur distant — Streamable HTTP, sans clé :

https://mcp.openvan.camp/mcp

En local via npx — pour Claude Desktop, Cursor, Windsurf et d’autres clients MCP :

{
  "mcpServers": {
    "openvan": {
      "command": "npx",
      "args": ["-y", "@openvancamp/mcp-server"]
    }
  }
}

Plugin pour Claude Code et Codex : il réunit ce serveur MCP et deux skills (des instructions destinées à l'agent IA). Pour l'installer :

# 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

Le skill openvan-travel indique à l'agent quel outil choisir parmi ceux du serveur pour une question de voyage : visas, carburant ou itinéraire. Le skill openvan-api sert lorsque l'agent crée une application qui s'appuie sur les données de notre API. Grâce à ce skill, l'agent place un lien vers OpenVan.camp à côté des données affichées, comme l'exige la licence. Il ajoute aussi le paramètre source aux requêtes et lit, dans la réponse, l'unité et la devise du prix séparément pour chaque type de carburant. skills/

Applications prêtes

Outils MCP (30)
  • 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.
  • 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.

Carte du serveur: /.well-known/mcp/server-card.json · npm: @openvancamp/mcp-server
Le paquet npm peut avoir quelques versions de retard sur le serveur distant ; l’adresse distante est toujours la plus récente.

Points de terminaison disponibles

GET /api/fuel/prices 174 pays

Prix actuels du carburant pour 174 pays. La liste des clés de prix est générée depuis le contrat API actuel. Mis à jour chaque semaine depuis des sources gouvernementales officielles (EU Oil Bulletin, Statistics Norway, EIA, ANP, NRCan et autres). Cache 6 heures. Données carburant mises à jour le : 26 octobre 2026.

Clés de prix : gasoline_regular, gasoline, gasoline_premium, gasoline_super, diesel_regular, diesel, diesel_premium, lpg, cng, e85, kerosene, premium
Unité et devise dépendent du carburant : units[carburant] et currencies[carburant] priment sur unit et currency du pays. Par exemple, la Colombie compte au gallon et l’essence au Venezuela est en bolivars.

curl https://openvan.camp/api/fuel/prices

Exemple de réponse :

{
    "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.1425,
                "gasoline_premium": 2.24,
                "gasoline_super": null,
                "diesel_regular": null,
                "diesel": 2.2677,
                "diesel_premium": 2.469,
                "lpg": 1.095,
                "cng": null,
                "e85": null,
                "kerosene": null,
                "premium": 2.24
            },
            "price_changes": {
                "gasoline_regular": null,
                "gasoline": -0.0255,
                "gasoline_premium": -0.018,
                "gasoline_super": null,
                "diesel_regular": null,
                "diesel": 0.0038,
                "diesel_premium": -0.058,
                "lpg": -0.0383,
                "cng": null,
                "e85": null,
                "kerosene": null,
                "premium": null
            },
            "fetched_at": "2026-10-26T06:04:22+03:00",
            "sources": [
                "EU Weekly Oil Bulletin",
                "clever-tanken.de (Premium Diesel)",
                "Tankerkoenig (tankerkoenig.de)",
                "Fuelo.net",
                "Cargopedia.net",
                "BenzinpreisAktuell.de"
            ],
            "sources_count": 3,
            "is_excluded": false
        }
    },
    "meta": {
        "total_countries": 174,
        "updated_at": "2026-10-26 06:04:23",
        "cache_ttl_hours": 6
    }
}
GET /api/currency/rates 150+ devises

Taux de plus de 150 devises par rapport à l’EUR (EUR = 1), issus de plusieurs sources ouvertes avec bascule automatique. Mis à jour toutes les 6 heures : l’heure est dans meta.updated_at, un taux de plus de 25 heures est considéré comme périmé.

curl https://openvan.camp/api/currency/rates

Réponse réelle de l’API (quelques devises sur 152) :

{
    "success": true,
    "rates": {
        "EUR": 1,
        "GBP": 0.83650983,
        "GEL": 2.8875,
        "KZT": 507.80379551,
        "RUB": 90.166,
        "TRY": 55.5241,
        "USD": 1.11219528,
        "…": "…"
    },
    "meta": {
        "count": 152,
        "base": "EUR",
        "updated_at": "2026-10-29T06:05:23+03:00",
        "refreshed_every_hours": 6,
        "max_age_seconds": 90000
    }
}
GET /api/vanbasket/countries 90+ pays

VanBasket Food Price Index — à quel point la nourriture est chère par rapport à la moyenne mondiale (Monde = 100). Basé sur World Bank ICP 2021, ajusté avec l'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
GET /api/visa/check 39 601 paires

Règles de visa et de frontière : combien de temps vous pouvez rester pour chaque paire passeport × destination, comment les jours sont comptés (par entrée ou sur une fenêtre glissante), si un visa run remet le compteur à zéro — et les règles d’importation temporaire de véhicule. Chaque réponse indique sa fiabilité, sa source et la couche dont elle provient.

# 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"
confidence: low signifie que le nombre de jours est exact mais que le mode de calcul est une hypothèse — à vérifier à la frontière. Données de référence, pas un conseil juridique.
Paramètres : passport destination weight plate mode locale limit Documentation complète
GET /api/plates Plaques

Plaques d'immatriculation du monde : format, codes de région et image prête de la plaque. Le SVG/PNG est dessiné par le même moteur que sur le site — la police de la plaque y est en contours, rien à installer : il suffit d'un <img src>. En plus : validation avec normalisation des lettres, plaques aléatoires et un moteur pour les dessiner dans le navigateur.

DL 248WV — Autriche
Autriche
49-CH238 MT — États-Unis
États-Unis
CB 5250 PX — Ukraine
Ukraine
MYC 112 — Suède
Suède
Х700ТР 77 — Russie
Russie
# Ready plate image — put it into <img src> (PNG: plate.png?width=800)
curl "https://openvan.camp/api/plates/ru/plate.svg?number=A123BC&region=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&region=799"
curl https://openvan.camp/api/plates/ru/random
Paramètres : number region width locale Générateur de plaques sur le site Documentation complète
GET /api/tolls Coût d’itinéraire

Les péages par pays — tarifs au kilomètre pour une voiture, un camping-car jusqu’à 3,5 t et les véhicules plus lourds, vignettes, ponts et tunnels payants, chacun avec sa date de vérification et sa source — et le coût d’un itinéraire entier à partir de noms de lieux : péages en fourchette en euros et carburant aux prix de chaque pays traversé.

# 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"}'
partial: true signifie que tous les frais ne sont pas inclus : les pays de unknown_countries n’ont pas de données — ils ne sont pas gratuits pour autant.
Paramètres : waypoints vehicle_class cons tank fuel currency locale Voir dans le Roadbook Documentation complète
POST /api/roadbook/from-places Voyage complet

Le road book OpenVan.camp à partir de 2 à 10 noms de lieux — le même plan que dans l’assistant road book : jours de route et nuits, budget carburant, péages, vignettes et ferries, et pour chaque pays traversé les règles d’entrée des voyageurs et du véhicule selon les passeports et plaques indiqués, jours fériés, sécurité et électricité. La réponse est une page road book partageable ; une même requête renvoie le même 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 et locale sont obligatoires ; tous les autres paramètres vont dans inputs. La réponse de création contient déjà code, status et url (adresse relative du roadbook) ; tant que status n’est pas ready, interrogez /api/roadbook/{code}/status — il ne renvoie que status et progress. Un long trajet prend jusqu’à une minute. 10 roadbooks par minute et par IP au maximum.
Paramètres : places locale name travelers plates weight fuel cons date currency Voir dans le Roadbook Documentation complète
GET /api/holidays/countries/{code} Jours fériés

Jours fériés, vacances scolaires (souvent par région, avec codes ISO 3166-2) et jours officiels de trafic chargé sur une période allant jusqu’à 400 jours — pour savoir quand routes, campings et ferries sont saturés.

# 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
Sans données, la réponse est 404 avec covered: false. Cela veut dire « nous ne savons pas », pas « aucun jour férié » ni « rien d’interdit ».
Paramètres : from to kind locale Voir dans le Roadbook Documentation complète
GET /api/hazards/countries/{code} Risques

La situation actuelle dans un pays : niveau des conseils aux voyageurs du ministère britannique des Affaires étrangères (FCDO) et catastrophes naturelles en cours selon GDACS avec niveau d’alerte, plus les feux détectés par les satellites NASA FIRMS ces dernières 48 heures dans une zone donnée. Pas une prévision.

# 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"
GET /api/electricity/countries/{code} Prises

Types de prises (IEC A–N), tension et fréquence du réseau pour chaque pays avec la source de la valeur, plus le branchement électrique des campings européens (CEE17).

curl https://openvan.camp/api/electricity/countries/GB
curl https://openvan.camp/api/electricity/countries
GET /api/customs/countries/{code} Douane

Ce que vous pouvez importer en voiture : interdictions alimentaires, déclaration d’argent liquide, franchises d’alcool et de tabac, valeur en franchise, carburant en jerrican. En option depuis un pays donné — il n’y a pas de douane à l’intérieur de l’UE. Chaque règle cite mot pour mot la source officielle, avec un lien.

# 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
Sans données, la réponse est 404 avec covered: false. Cela veut dire « nous ne savons pas », pas « aucun jour férié » ni « rien d’interdit ».
GET /api/vansky/weather/{code}/{city} 0–100

Cette API indique si la météo convient à un voyage en camping-car. L'indice VanSky va de 0 à 100, où 100 signifie « excellent ». Il est calculé pour un pays ou une ville, pour aujourd'hui et pour chacun des 7 prochains jours. Il est identique au chiffre « aujourd'hui » de la page openvan.camp. Pour une ville, l'API renvoie : sa position dans le classement des villes du pays, calculé à partir de l'indice de la semaine (moyenne des 7 prochains jours, abaissée quand les jours sont irréguliers) ; les prévisions jour par jour, avec les composantes de l'indice ; des scores détaillés (nuit sur place, conduite, panneaux solaires, mer) ; la qualité de l'air ; des conseils sous forme de texte. Pour lister les villes d'un pays dans cet ordre de classement, appelez /api/vansky/weather/{code}/cities. Pour obtenir le classement des pays, appelez /api/vansky/ranking. Pour lire la formule et les poids de l'indice, appelez /api/vansky/methodology. Dans {code}, indiquez le code de pays ISO 3166-1 alpha-2, sur deux lettres. La ville se désigne par son slug latin, soit la fin de l'adresse de sa page. Pour openvan.camp/ru/vansky/georgia/batumi, le slug est batumi. Pour le trouver, appelez /api/vansky/search?q=Batumi, où q contient le nom de la ville.

# 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
Paramètres : code city sort by region include locale Météo sur le site Documentation complète
GET /api/vansky/climate 2021–2025

Météo typique d'un jour de l'année, pour des coordonnées quelconques ou pour une ville VanSky. Chaque valeur est la médiane de 35 jours d'archive : la même date à ±3 jours sur chacune des années 2021–2025, d'après la réanalyse ERA5 du service Copernicus. Pour la date demandée, la réponse donne la température maximale de jour et la température minimale de nuit. Elle donne le nombre de jours, parmi ces 35, avec au moins 1,5 mm de pluie ou de neige. Elle donne la catégorie de ciel la plus fréquente (clair, nuageux, couvert). Elle donne la température de la mer ou d'un grand lac dans un rayon de ~50 km (absente si aucune eau n'est à proximité). Elle donne le rayonnement solaire en kWh/m², utile pour dimensionner des panneaux solaires. Elle donne l'indice VanSky, de 0–100 (plus il est élevé, plus les conditions sont confortables). Pour chacun des 12 mois, elle donne le nombre moyen de jours de ciel clair, nuageux et couvert, ainsi que de jours avec précipitations, puis le meilleur mois selon l'indice. Dans la requête, indiquez lat et lng (latitude et longitude), ou bien le code ISO du pays et le slug de la ville. Le paramètre date, au format MM-DD, est facultatif : sans lui, la réponse contient les 366 jours.

# 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
Paramètres : lat lng date code city Météo sur le site Documentation complète
GET /api/events événements vanlife

Liste paginée d'événements vanlife — expositions, festivals, rencontres, road trips. Filtrez par statut, type, pays. Noms localisés en 7 langues.

# 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"
locale — l'une de en ru de fr es pt tr. Par défaut : en. Une locale inconnue est silencieusement remplacée par en. repli articles : si aucun article ne correspond à la locale demandée, tous les articles sources sont renvoyés.
Paramètres : locale status type country search page limit Documentation complète →
GET /api/stories 7 langues

Actualités vanlife agrégées depuis 200+ éditeurs et traduites en 7 langues. Chaque story inclut sources — les articles originaux des éditeurs avec liens directs, noms des sources, dates de publication et codes de langue. Recherche sémantique dans l’actualité (q, jusqu’à 15 résultats) et le digest du soir prêt à l’emploi (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"

Exemple de réponse pour /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://..."
    }
  ]
}
locale — l'une de en ru de fr es pt tr. Par défaut : en. Affecte title, summary, et category.name. sources[].language est toujours la langue d'origine de l'éditeur, indépendamment de la locale.
Paramètres : locale category country search page limit q Documentation complète →

Démarrage rapide

JavaScript — le diesel le moins cher d'Europe

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 — conversion en USD avec les taux de change

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 — pays avec GPL

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")

Plus d'exemples (bash, pandas, widget) : GitHub →

SDK JavaScript / TypeScript

SDK typé officiel — sans configuration, fonctionne sous Node.js ≥ 18, navigateur, Cloudflare Workers, Deno, Bun. Aucune clé API requise.

Installation

npm install @openvancamp/sdk
# or: pnpm add @openvancamp/sdk

Démarrage rapide (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 Python

Sans dépendances, Python 3.9+, sans clé 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"))

Limites, erreurs et versions

Limites de requêtes

Comptées par IP : 120 requêtes par minute pour toute l’API, les requêtes lourdes ont des limites plus basses — le tableau donne les valeurs réelles. Le reste est dans les en-têtes X-RateLimit-Limit et X-RateLimit-Remaining. Au-delà : HTTP 429 et l’en-tête Retry-After — attendez ce nombre de secondes et réessayez.

Requête Par minute
Toute l’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

Erreurs

Une erreur, c’est HTTP 4xx/5xx. Le corps a trois formes : { "success": false, "error": "…" } ou { "error": "…", "message": "…" } ; une erreur de validation du roadbook est { "error": "validation", "fields": [ … ] } ; limite dépassée et adresse inconnue renvoient { "message": "…" }. Vérifiez le statut HTTP, pas seulement le corps.

# 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." }

Pas de données ne veut pas dire « rien »

Jours fériés et douane répondent 404 avec covered: false (les champs du pays restent présents) ; le référentiel des péages et la météo répondent 404 avec un champ error. N’affichez pas « aucun jour férié », « route gratuite » ou « rien d’interdit » faute de données.

Versions

API version 1.9.0 (spécification OpenAPI), serveur MCP 0.11.0. Chaque changement est publié dans le changelog sur GitHub. Changelog

Support

Questions et bugs — GitHub Issues ou hello@openvan.camp. Utilisation des données sous CC BY 4.0, conditions du site sur la page Conditions. GitHub Issues · /terms · /privacy

Attribution

L'attribution est obligatoire selon la licence CC BY 4.0 : partout où vous affichez nos données (site, application, bot, article), placez à côté un lien visible vers OpenVan.camp. Si un agent IA écrit votre code, demandez-lui de conserver ce lien. Snippet prêt à l'emploi :

Les jours fériés viennent de l’OpenHolidays API (ODbL) et de Nager.Date (MIT) : quand vous les affichez, citez aussi ces sources — elles figurent dans le champ upstream de la réponse.

Data: <a href="https://openvan.camp/">OpenVan.camp</a> (CC BY 4.0)

Identifiez votre app — ajoutez ?source=yoursite.com

Transmettez source comme paramètre de requête avec votre domaine ou nom d'app. Aucune inscription nécessaire — cela nous aide à comprendre comment les données sont utilisées et à valoriser les projets actifs. La valeur est renvoyée dans chaque réponse sous _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"
# }
Suggérer actu ou événement

Envoyé à la modération

Nous ne publions que des extraits. En envoyant, vous acceptez nos règles.

→ Voir le glossaire