OpenVan.camp Public API

MCP serverDev tools

Your AI can look up fuel, weather, currency, events, and news for vanlife and RV travel once this integration is added. It draws on openvan travel data to help with trip planning and staying informed on the road.

Use OpenVan.camp Public API in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add OpenVan.camp Public API and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use OpenVan.camp Public API to get fuel prices

Details

Available today. Use it from your connected AI after setup.

After adding it, try asking your AI about fuel, weather, currency, events, or news for an upcoming trip.

OpenVan.camp Public APIStart free

What your AI can do with it

  • Look up fuel information for a trip
  • Check weather conditions
  • Get currency exchange rates
  • Find events
  • Read vanlife and travel news

Install OpenVan.camp Public API

The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.

  • Claude Code

    claude mcp add --transport http --scope user openvan-camp-public-api 'https://mcp.openvan.camp/mcp'

    Run it once in your project, then open /mcp to approve any sign-in the server asks for.

  • Claude Desktop

    https://mcp.openvan.camp/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=openvan-camp-public-api&config=eyJ1cmwiOiJodHRwczovL21jcC5vcGVudmFuLmNhbXAvbWNwIn0=

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://mcp.openvan.camp/mcp

    In Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.

  • Codex

    codex mcp add openvan-camp-public-api --url 'https://mcp.openvan.camp/mcp'

    Run it once, then sign in with codex mcp login openvan-camp-public-api if the server asks for an account.

From the project's README

As published by openvancamp/openvan-camp-public-api in README.md.

Free, no-auth API for vanlife data: fuel prices, route fuel cost, 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

JavaScript/TypeScript SDK: @openvancamp/sdk — npm install @openvancamp/sdk. Zero-config, typed, Node.js / browser / edge. SDK docs →

MCP Server (for AI agents): mcp-server/ — 20 read-only tools, 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 MCP server; no API key is required.

Custom GPT: OpenVan Travel Assistant — live in ChatGPT GPT Store.


What is authoritative

ResourcePurpose
This READMEQuick overview and code examples
/docsInteractive documentation with "Try it out"
/docs.openapiFull OpenAPI 3.0 contract (always up to date)
/docs.postmanPostman collection

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

EndpointDescriptionCoverage
GET /api/fuel/pricesRetail fuel prices (gasoline, diesel, LPG, E85)160+ countries
POST /api/route-costFuel cost for a route of 2–10 waypoints, per-country prices—
GET /api/tolls/countriesToll roads by country: payment system, per-km rates by vehicle class, vignettes84 countries
GET /api/tolls/routeToll cost for a route of 2–10 place names (car, van, heavy), EUR range—
GET /api/currency/ratesExchange rates relative to EUR150+ currencies
GET /api/vanbasket/countriesFood price index relative to world average (100 = world avg)90+ countries
GET /api/vanbasket/compare?from=DE&to=TRCompare food costs between two countries—
GET /api/vanbasket/countries/{code}Single country + historical snapshots—
GET /api/vansky/weatherVanlife weather suitability scores (0–100) with 7-day forecast160+ countries
GET /api/vansky/weather/{code}One country, with marine and solar data—
GET /api/visa/check?passport=RU&destination=TREntry rules: entry mode, length of stay, how days are counted, vehicle import199 destinations
GET /api/visa/route?t=RU,GE,TR&p=RUVisa rules for a whole route, up to 10 passports—
GET /api/visa/passport/{code}All destinations for one passport—
GET /api/visa/vehicle/{place}Temporary vehicle import rules for a country—
GET /api/eventsVanlife events: expos, festivals, meetups, road trips1,100+ events
GET /api/event/{slug}Full event details with geo coordinates—
GET /api/event/{slug}/articlesSource articles linked to an event—
GET /api/storiesNews stories aggregated from 200+ publishers31,000+ stories
GET /api/story/{slug}Full story with all source articles and direct links—
GET /api/news/search?q=...Semantic search over stories—
GET /api/platesLicense plates of the world: formats, region codes, example plates199 countries
GET /api/plates/{code}/plate.svgReady plate image (also .png) — drop into <img src>—

Quick Start

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

# Currency rates (EUR-based)
curl https://openvan.camp/api/currency/rates

# Food price index
curl https://openvan.camp/api/vanbasket/countries

# Upcoming vanlife events in Germany
curl "https://openvan.camp/api/events?country=DE&status=upcoming&locale=en"

# Latest vanlife news stories in English
curl "https://openvan.camp/api/stories?locale=en"

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.

curl https://openvan.camp/api/fuel/prices
{
  "success": true,
  "data": {
    "DE": {
      "country_code": "DE",
      "country_name": "Germany",
      "region": "europe",
      "currency": "EUR",
      "local_currency": "EUR",
      "unit": "liter",
      "prices": {
        "gasoline": 1.79,
        "diesel": 1.69,
        "lpg": 0.89,
        "e85": null,
        "premium": null
      },
      "price_changes": { "gasoline": -0.02, "diesel": 0.01, "lpg": 0.0 },
      "fetched_at": "2026-04-05T10:00:00+00:00",
      "sources": ["EU Weekly Oil Bulletin", "Fuelo.net"],
      "sources_count": 2,
      "is_excluded": false
    }
  },
  "meta": {
    "total_countries": 121,
    "updated_at": "2026-04-05 10:00:00",
    "cache_ttl_hours": 6
  }
}

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.

curl https://openvan.camp/api/currency/rates
{
  "success": true,
  "rates": {
    "EUR": 1,
    "USD": 1.08,
    "GBP": 0.85,
    "TRY": 38.5,
    "GEL": 2.95,
    "KZT": 510,
    "RUB": 98.5
  },
  "cached": true,
  "updated_at": "2026-04-08T07:00:00+00:00"
}

Convert to any currency:

const priceInUSD = (priceEUR / rates.EUR) * rates.USD;
const priceInTRY = (priceEUR / rates.EUR) * rates.TRY;

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

# 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 historical snapshots
curl https://openvan.camp/api/vanbasket/countries/DE
{
  "success": true,
  "data": {
    "CH": { "country_code": "CH", "country_name": "Switzerland", "vanbasket_index": 162.3, "pct_vs_world": 62.3 },
    "DE": { "country_code": "DE", "country_name": "Germany",     "vanbasket_index": 118.7, "pct_vs_world": 18.7 },
    "TR": { "country_code": "TR", "country_name": "Turkey",      "vanbasket_index":  82.4, "pct_vs_world": -17.6 },
    "GE": { "country_code": "GE", "country_name": "Georgia",     "vanbasket_index":  64.1, "pct_vs_world": -35.9 }
  },
  "meta": {
    "total_countries": 92,
    "world_avg": 100,
    "base_year": 2021,
    "source": "World Bank ICP 2021",
    "license": "CC BY 4.0"
  }
}

Compare response:

{
  "success": true,
  "data": {
    "from": { "country_code": "DE", "country_name": "Germany", "vanbasket_index": 118.7 },
    "to":   { "country_code": "TR", "country_name": "Turkey",  "vanbasket_index":  82.4 },
    "diff_percent": -30.6,
    "budget_100": 69,
    "cheaper": true
  }
}

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:

ParamValuesDefault
localeen ru de fr es pt tren
statusupcoming ongoing past allupcoming
typeexpo festival forum meetup roadtrip—
countryISO 3166-1 alpha-2—
searchtext—
pageinteger1
limitinteger (max 100)30
# Upcoming events in Germany
curl "https://openvan.camp/api/events?country=DE&status=upcoming&locale=en"

# Event details
curl "https://openvan.camp/api/event/fit-camper-2026?locale=en"

# Source articles linked to an event
curl "https://openvan.camp/api/event/fit-camper-2026/articles?locale=en"
{
  "events": [
    {
      "id": 493,
      "slug": "fit-camper-2026",
      "event_name": "Fit Your Camper",
      "event_type": "expo",
      "event_type_label": "Exhibition",
      "start_date": "2026-04-09",
      "end_date": "2026-04-12",
      "city": "Bologna",
      "country_code": "IT",
      "country": { "code": "it", "name": "Italy", "flag_emoji": "🇮🇹" },
      "venue_name": "BolognaFiere",
      "status": "upcoming",
      "articles_count": 7,
      "url": "https://openvan.camp/en/event/fit-camper-2026"
    }
  ],
  "pagination": { "total": 48, "page": 1, "limit": 30, "pages": 2 }
}

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:

ParamValuesDefault
localeen ru de fr es pt tren
categorycategory slug (e.g. camping, travel, gear, incident)—
countryISO 3166-1 alpha-2—
searchtext—
pageinteger1
limitinteger (max 50)20
# Latest stories in English
curl "https://openvan.camp/api/stories?locale=en"

# German vanlife news in Germany
curl "https://openvan.camp/api/stories?locale=de&country=DE"

# Full story with all source links
curl "https://openvan.camp/api/story/free-overnight-parking-netherlands?locale=en"
{
  "slug": "free-overnight-parking-netherlands",
  "title": "Free Overnight Parking for Motorhomes in the Netherlands",
  "summary": "The Dutch motorhome community is pushing for more designated free overnight spots...",
  "image_url": "https://...",
  "category": { "slug": "travel", "name": "Travel" },
  "countries": [{ "code": "nl", "name": "Netherlands", "flag_emoji": "🇳🇱" }],
  "first_published_at": "2026-04-01T10:00:00+00:00",
  "last_updated_at": "2026-04-03T08:00:00+00:00",
  "articles_count": 5,
  "url": "https://openvan.camp/en/news/travel/free-overnight-parking-netherlands",
  "sources": [
    {
      "title": "Gratis overnachten in je camper: de beste plekken",
      "original_url": "https://www.campermagazine.nl/overnachten/gratis-plaatsen",
      "source_name": "CamperMagazine.nl",
      "published_at": "2026-04-01T10:00:00+00:00",
      "language": "nl",
      "image_url": "https://..."
    }
  ]
}

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:

<img src="https://openvan.camp/api/plates/ru/plate.svg?number=A123BC&region=77" alt="A123BC 77">
  • 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
curl https://openvan.camp/api/plates                                        # countries
curl "https://openvan.camp/api/plates/ru?locale=en"                         # format, regions, codes, engine
curl "https://openvan.camp/api/plates/ru/validate?number=A123BC&region=799" # valid? which region?
curl https://openvan.camp/api/plates/ru/random                              # random plate + image URLs

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.


Response Format

All JSON endpoints follow a consistent envelope:

{ "success": true, "data": { ... }, "meta": { ... }, "_attribution": { ... } }

Every response includes an _attribution object:

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

Errors:

{ "success": false, "error": "Description of the error." }

If you call without Accept: application/json, some error responses may return HTML. Always send the header:

Accept: application/json

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

Required by CC BY 4.0. Suggested format:

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

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:

curl "https://openvan.camp/api/fuel/prices?source=myapp.com"
{
  "success": true,
  "data": { "..." },
  "meta": { "..." },
  "_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"
  }
}

This helps us understand how the data is being used and acknowledge active projects.


JavaScript / TypeScript SDK

npm install @openvancamp/sdk
# or: pnpm add @openvancamp/sdk
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 });

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

Tools it offers (25)

What this server listed when Ahel dialed its public endpoint in Oct 2026, with no key and no account of yours. The names are the server’s own.

  • get_fuel_prices
  • compare_fuel_prices
  • find_cheapest_fuel
  • get_country_travel_weather
  • list_best_weather_countries
  • list_events
  • get_event
  • search_stories
  • compare_food_prices
  • get_country_food_prices
  • get_currency_rate
  • check_visa_rules
  • get_route_visa_rules
  • get_vehicle_import_rules
  • get_toll_rates
  • estimate_route_tolls
  • get_holidays
  • get_travel_hazards
  • get_active_fires
  • get_power_plugs
  • get_customs_rules
  • list_license_plate_countries
  • get_license_plate_country
  • check_license_plate
  • get_license_plate_image

Signals

Last commit
Oct 2026
Weekly_downloads
1k weekly_downloads

Ahel review

  • S4low
    published under kopaev's namespace; repository belongs to openvancamp

Automated review, not a security audit. Ruleset v1.

Advanced
Delivery
openvan-travel MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
Item type
mcp-server
Key
io-github-kopaev-openvan-travel
Source
github.com/openvancamp/openvan-camp-public-api
Hosted endpoint
https://mcp.openvan.camp/mcp