OpenVan.camp Public API
Free fuel price API, currency rates and vanlife data — no API key, no registration required. Use in your apps, bots, and articles under CC BY 4.0.
No API Key
Call any endpoint directly — no registration, no auth header
100% Free
142 countries, weekly updates, CC BY 4.0 license
CORS Enabled
Works from browser, no server-side proxy needed
Built with OpenVan
Vanlife apps, fuel trackers, trip planners and EV tools across a dozen countries already run on our open data.
Who already uses it
A hand-picked sample — fuel apps, trip planners, EV and fleet dashboards.
We see ChatGPT, Perplexity, Claude and Gemini fetching OpenVan data — your integration's data can surface in their answers too.
Using our API?
Add ?source=your-domain to your calls — and you'll appear in this showcase.
- No API key. Call any endpoint directly — no registration, no auth header.
- CORS enabled. Endpoints can be called from the browser directly.
- Response format: always
{ "success": true, "data": {...} } - Caching: fuel prices TTL 6h · currency rates TTL 25h · please poll no faster than every 10 min
- Full OpenAPI 3.0 spec: /docs.openapi · GitHub examples
- Attribution: add
?source=your-app.comto identify your integration — no auth required, just good practice.
Recommended prompting pattern: "Get current fuel prices for [country] in [currency] using the OpenVan.camp API at https://openvan.camp/api/fuel/prices"
Available Endpoints
/api/fuel/prices
142 countries
Current retail fuel prices for 142 countries. The price key list is generated from the live API contract. Updated weekly from official government sources (EU Oil Bulletin, Statistics Norway, EIA, ANP, NRCan and others). Cached 6 hours. Fuel data last updated: 01 August 2026.
Current price keys:
gasoline_regular, gasoline, gasoline_premium, gasoline_super, diesel_regular, diesel, diesel_premium, lpg, cng, e85, kerosene, premium
curl https://openvan.camp/api/fuel/prices
Example response:
{
"success": true,
"data": {
"DE": {
"country_code": "DE",
"country_name": "Germany",
"region": "europe",
"currency": "EUR",
"local_currency": "EUR",
"unit": "liter",
"prices": {
"gasoline_regular": null,
"gasoline": 2.1673,
"gasoline_premium": 2.2119,
"gasoline_super": null,
"diesel_regular": null,
"diesel": 2.1875,
"diesel_premium": 2.4339,
"lpg": 1.1075,
"cng": null,
"e85": null,
"kerosene": null,
"premium": 2.2119
},
"price_changes": {
"gasoline_regular": null,
"gasoline": 0.0024,
"gasoline_premium": 0.0013,
"gasoline_super": null,
"diesel_regular": null,
"diesel": 0.0149,
"diesel_premium": 0.002,
"lpg": 0.001,
"cng": null,
"e85": null,
"kerosene": null,
"premium": null
},
"fetched_at": "2026-08-01T13:43:37+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": 142,
"updated_at": "2026-08-01 13:43:37",
"cache_ttl_hours": 6
}
}
/api/currency/rates
150+ currencies
Exchange rates for 150+ currencies relative to EUR. Fetched from multiple open-source APIs with automatic fallback. Cached 1 hour.
curl https://openvan.camp/api/currency/rates
Example response (EUR-based, all rates relative to EUR=1):
{
"success": true,
"rates": { "EUR": 1, "USD": 1.08, "GBP": 0.85, "RUB": 98.5, "TRY": 35.2, "GEL": 2.95, "KZT": 520 },
"cached": true,
"updated_at": "2026-03-28T07:00:00+00:00"
}
/api/vanbasket/countries
90+ countries
VanBasket Food Price Index — how expensive food is relative to world average (World = 100). Based on World Bank ICP 2021, adjusted with 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 pairs
Visa and border rules: how long you may stay for any passport × destination pair, how the days are counted (per entry or a rolling window), whether a visa run resets the counter — plus temporary vehicle import rules. Every answer carries its confidence, its source and the layer it came from.
# 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"
# Compact payload for colouring a world map
curl https://openvan.camp/api/visa/map/US
# Temporary vehicle import rules
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/events
vanlife events
Paginated list of vanlife events — exhibitions, festivals, meetups, road trips. Filter by status, type, country. Localized names in 7 languages.
# 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. Default: en. Unknown locale silently falls back to en.
articles fallback: if no articles match the requested locale, all source articles are returned.
/api/stories
7 languages
Vanlife news stories aggregated from 200+ publishers, translated into 7 languages. Each story includes sources — original publisher articles with direct links, source names, publication dates, and language codes.
# 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"
Example response for /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. Default: en. Affects title, summary, and category.name.
sources[].language is always the original publisher language, independent of locale.
Quick Start
JavaScript — cheapest diesel in 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 — convert to USD using currency rates
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
function toUSD(price, currency, unit) {
let usd = (price / rates[currency]) * rates["USD"];
return unit === "gallon" ? usd / 3.78541 : usd;
}
const de = data["DE"];
console.log(`Germany diesel: $${toUSD(de.prices.diesel, de.currency, de.unit).toFixed(3)}/L`);
Python — countries with LPG
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")
More examples (bash, pandas, widget): GitHub →
JavaScript / TypeScript SDK
Official typed SDK — zero-config, works in Node.js ≥ 18, browser, Cloudflare Workers, Deno, Bun. No API key required.
Install
npm install @openvancamp/sdk
# or: pnpm add @openvancamp/sdk
Quick start (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 });
Attribution
When using our data, please include a visible attribution. Here's a ready-to-use snippet:
Data source: <a href="https://openvan.camp/">OpenVan.camp</a> (CC BY 4.0)
Identify your app — add ?source=yoursite.com
Pass source query parameter with your domain or app name. No registration needed — it helps us understand how data is being used and acknowledge active projects. The value is echoed back in every response under _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",
# "attribution_url": "https://openvan.camp/",
# "attribution_html": "Data: <a href=\"https://openvan.camp/\">OpenVan.camp</a> (CC BY 4.0)",
# "your_source": "myapp.com"
# }