VanLife
OpenVan.campβ World of motorhomes — here

OpenVan.camp Public API

Open data for fuel prices, currency rates and vanlife events. Free to use in your apps, bots, and articles under CC BY 4.0.

CC BY 4.0 License — You are free to use, share and adapt this data in any medium or format, as long as you give appropriate credit to OpenVan.camp. creativecommons.org →
For AI Agents & LLM Tools
  • 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.com to 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

GET /api/fuel/prices 117 countries

Current retail fuel prices (gasoline, diesel, LPG) for 117 countries. Updated weekly from official government sources (EU Oil Bulletin, Statistics Norway, EIA, ANP, NRCan and others). Cached 6 hours. Fuel data last updated: 27 April 2026.

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",          // "gallon" for US and Ecuador
      "prices": {
        "gasoline": 2.13,
        "diesel": 2.28,
        "lpg": 1.11,
        "e85": null,
        "premium": null
      },
      "price_changes": { "gasoline": -0.02, "diesel": 0.01, "lpg": 0.0 },
      "fetched_at": "2026-03-28T13:59:57+03:00",
      "sources": ["Fuelo.net", "EU Weekly Oil Bulletin", "Cargopedia.net"],
      "sources_count": 3,
      "is_excluded": false      // true for heavily subsidized countries
    }
  },
  "meta": { "total_countries": 87, "updated_at": "2026-03-28 13:59:57", "cache_ttl_hours": 6 }
}
GET /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"
}
GET /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
GET /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=Nauticampo&locale=ru"

# Event details + linked source articles
curl "https://openvan.camp/api/event/nauticampo-2026?locale=en"
curl "https://openvan.camp/api/event/nauticampo-2026/articles?locale=en"
locale — one of 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.
Params: locale status type country search page limit Full docs →
GET /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=camping&country=DE"

# Full story with all source articles
curl "https://openvan.camp/api/story/vanlife-festival-germany-2026?locale=en"

Example response for /api/story/{slug}:

{
  "slug": "vanlife-festival-germany-2026",
  "title": "VanLife Festival Germany 2026",
  "summary": "The largest vanlife gathering in Germany returns this summer.",
  "image_url": "https://...",
  "category": { "slug": "events", "name": "Events" },
  "countries": [{ "code": "de", "name": "Germany", "flag_emoji": "🇩🇪" }],
  "first_published_at": "2026-04-01T10:00:00+00:00",
  "last_updated_at": "2026-04-03T08:00:00+00:00",
  "articles_count": 8,
  "url": "https://openvan.camp/en/news/events/vanlife-festival-germany-2026",
  "sources": [
    {
      "title": "Germany's biggest van life festival is back",
      "original_url": "https://campermag.de/festival-2026",
      "source_name": "CamperMag.de",
      "published_at": "2026-04-01T10:00:00+00:00",
      "language": "de",
      "image_url": "https://..."
    }
  ]
}
locale — one of 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.
Params: locale category country search page limit Full docs

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 →

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

Install OpenVan.camp

Get quick access and offline reading.

Install on iOS

  1. 1 Tap Share in Safari.
  2. 2 Choose "Add to Home Screen".
  3. 3 Confirm by tapping Add.

Already installed

The app is already installed on this device.

Install from browser menu

Use your browser menu to install or add to home screen.