OpenVan.camp Public API
[OpenVan.camp — free road-trip data API for every country]
[MCP server on npm]
[SDK on npm]
[npm downloads]
[Data: CC BY 4.0]
[CI]
[Published packages work]
[OpenVan.camp MCP server on Glama]
Free, no-auth API for vanlife data: fuel prices, route fuel cost, toll roads, holidays and peak traffic days, travel hazards, ferry and river crossings with operator sites and timetables, power plugs, customs rules, currency rates, food cost index, weather suitability scores, visa and vehicle-import rules, vanlife events, news stories, and license plates of the world — all in one place, no registration required.
Base URL: https://openvan.camp
Auth: None required
CORS: Enabled
License: data is CC BY 4.0; code in this repository (SDK, MCP server, examples) is MIT
Attribution required: show Data: <a href="https://openvan.camp/">OpenVan.camp</a> wherever you display the data — see Attribution
JavaScript/TypeScript SDK: @openvancamp/sdk — npm install @openvancamp/sdk. Zero-config, typed, Node.js / browser / edge. SDK docs →
Python SDK: openvan — pip install openvan. No dependencies, Python 3.9+, works with pandas. Python docs →
Daily CSV snapshots: openvancamp/openvan-travel-data — fuel prices, exchange rates, food cost index and weather scores as CSV/JSON, one commit a day, with history.
MCP Server (for AI agents): mcp-server/ — 32 read-only tools with interactive cards in Claude and ChatGPT (incl. plan_road_trip — a whole-trip roadbook), hosted at https://mcp.openvan.camp/mcp, or locally npx -y @openvancamp/mcp-server for Claude Desktop / Cursor / Windsurf. Install docs → · AI agents guide →
Gemini CLI extension: install this repository with gemini extensions install https://github.com/openvancamp/openvan-camp-public-api. The root gemini-extension.json connects Gemini CLI directly to the hosted OpenVan.camp MCP server; no API key is required.
Plugin for coding agents (Claude Code, Codex): the hosted MCP server plus two agent skills — openvan-travel answers trip questions with the right tools, openvan-api writes code on this API with attribution, per-grade fuel units and caching done right. Claude Code: /plugin install openvan-camp --marketplace openvancamp/openvan-camp-public-api (or /plugin marketplace add openvancamp/openvan-camp-public-api, then /plugin install openvan-camp@openvan-camp). Codex: codex plugin marketplace add openvancamp/openvan-camp-public-api, then install OpenVan.camp from the Plugins Directory. Skills only, for any agent: npx skills add openvancamp/openvan-camp-public-api.
In your AI assistant, no code: Claude connector · ChatGPT app · Telegram bot @OpenVanCampBot — the same data as interactive cards in the chat. How to connect →
What is authoritative
The OpenAPI spec at /docs.openapi is generated from the live codebase and is the authoritative contract. Numbers in this README (country counts, story totals) are approximate and updated periodically — check /api/fuel/prices meta or /api/stories pagination for current totals.
Endpoints
Quick Start
Fuel Prices — /api/fuel/prices
Weekly retail prices from 45+ official government sources.
Cache TTL: 6 hours. Please poll no faster than every 10 minutes.
Notes:
unit is "liter" for most countries, "gallon" for US and Ecuador
is_excluded: true means the country has heavy fuel subsidies (prices don't reflect market rates)
price_changes = delta vs last week's prices
Currency Rates — /api/currency/rates
EUR-based exchange rates from multiple open-source providers with automatic fallback.
Cache TTL: 25 hours. Refreshed daily at 07:00 UTC.
Convert to any currency:
VanBasket Food Price Index — /api/vanbasket/*
Relative cost of a food basket compared to world average (World = 100).
Based on World Bank ICP 2021 data, adjusted with IMF CPI.
Data source: CC BY 4.0
Compare response:
budget_100: if you spend €100 on food in the from country, you'd spend €69 in the to country.
Events — /api/events
Vanlife events: exhibitions, festivals, meetups, road trips. Updated in real time.
Query params:
Notes:
- Unknown or missing
locale silently falls back to en
/api/event/{slug}/articles returns source articles filtered by locale; if none match, all articles are returned (may be in the original publisher language)
Stories / News — /api/stories
Vanlife news stories aggregated from 200+ publishers and translated into 7 languages. Each story clusters multiple source articles covering the same topic.
Query params:
Notes:
title and summary are translated to the requested locale
sources[].language is always the original publisher language, regardless of locale
sources[].original_url is the direct link to the publisher article
License Plates — /api/plates/*
License plates of the world: plate formats, every region code grouped by region (with ISO 3166-2 units),
validation, and the plate itself as an image. Images are drawn by the same engine as
openvan.camp/en/license-plates — the plate typeface is inside
as vector outlines, so there are no fonts to install.
The simplest integration is a plain image:
plate.png?width=800 — PNG, 200–2000 px wide, transparent background
- Look-alike Latin letters are normalized (
A123BC → А123ВС on Russian plates)
- A number outside the country format returns
422; add custom=1 to draw any text (e.g. a name)
- Images are served
Cache-Control: public, max-age=31536000, immutable; image URLs returned by the API
carry v=<engine version>, so an engine update arrives under a new URL
Plate types — special plates have their own colour and number format. GET /api/plates/{code}/types
lists them (on Russian plates: private, diplomatic red, police blue, military black, taxi_bus yellow,
motorcycle, trailer, tractor, export_transit), each with an example number. Pass type to the image,
/random and /validate; the response says which type was used:
To draw plates in the browser yourself (e.g. an interactive generator), load the scripts listed in
data.engine.scripts of /api/plates/{code} in order and call
Plates.render(code, number, region) → {svg} (an SVG element) or {error}.
Images and the engine are available for countries whose plate typeface may be redistributed
(glyphs_license: free or sharealike); for the rest the data endpoints still work.
Rate limit: 60 requests/minute for images and /random, 120 for the rest.
Roadbook — /api/roadbook/from-places
A whole trip plan — the same roadbook people build in the wizard: route, driving days and overnights, budget (fuel, tolls, vignettes, ferries), and for every country on the way the entry and vehicle rules for the given passports and plates, holidays, safety and power. Identical requests return the same roadbook.
10 roadbooks per minute per IP. The MCP tool plan_road_trip does all of this and returns the plan itself.
Holidays, Hazards, Power Plugs, Customs
Trip-planning data for a country you are about to drive into. Every list endpoint has a
/countries index; pass locale for translated names.
- A country without holiday or customs data returns an error that says so — it does not mean
"no holidays" or "nothing is restricted"
- Hazards describe the situation now, not a forecast; fire data for a new area may return
"being loaded, retry in a minute" on the first request
Response Format
All JSON endpoints follow a consistent envelope:
Every response includes an _attribution object:
Errors:
If you call without Accept: application/json, some error responses may return HTML. Always send the header:
Rate Limiting
120 requests per minute per IP. Please be responsible:
- Cache fuel prices for at least 6 hours
- Cache currency rates for at least 1 hour
- Cache stories/events for at least 15 minutes
Attribution
Attribution is required by the CC BY 4.0 license. Wherever you show the data — website, app, bot, dashboard, article — place a visible link next to it:
The same snippet comes in every response as _attribution.attribution_html, and in the X-Attribution-Required response header.
Ferries are the exception: lines and ports from /api/ferries are an OpenStreetMap derivative under ODbL — credit "© OpenStreetMap contributors" as well, and timetables carry the license of their GTFS feed (_attribution and sources name it).
Building with an AI coding agent? Tell it to keep this link in the UI it generates — or just let it read _attribution.instructions from any response.
Identify your integration
Pass ?source=yoursite.com with any request — no registration needed. Your value is echoed back as _attribution.your_source so you can verify it's working:
This helps us understand how the data is being used and acknowledge active projects.
Built with OpenVan
Public projects using the API:
Built something with the data? Open a pull request adding it to this table, or tell us in Discussions.
Badge for your README:
[Data: OpenVan.camp]
JavaScript / TypeScript SDK
ESM-native, fully typed (TypeScript included), works in Node.js ≥ 18, browser, Cloudflare Workers, Deno, Bun. No API key.
npm: @openvancamp/sdk · Full SDK docs →
Resources
The same data on the site
Fuel prices by country ·
Passport & visa checker ·
Roadbook trip planner ·
VanSky weather ·
Food cost index ·
Vanlife events ·
Vanlife news