Openvan Travel

io.github.openvancamp由 GitHub 帳號 openvancamp 發布v0.12.0更新於 Oct 30, 2026

Vanlife & RV data: roadbooks, fuel, tolls, ferries, visas, holidays, hazards, weather. openvan.camp

發布方自己的服務:travel.art

已驗證Streamable HTTP可網頁執行位置與生活網頁搜尋與抓取金融

概覽

AI 產生的概覽

OpenVan Travel 讓助理取得露營車與公路旅行資料:涵蓋 200 多個國家的路書、油價、過路費、簽證、渡輪、天氣、假期與風險資訊。

可以做什麼
  • 規劃 2-10 個地點之間的完整公路行程:逐日路書、預算、各國入境與車輛規定
  • 查詢國家旅遊簡報、簽證與車輛臨時進口規則、海關、過路費與通行貼、假期和電源插頭
  • 查詢油價、跨國比較與排序,並估算路線過路費
  • 取得國家與城市的露營車天氣評分、任一日的典型氣候與最佳天氣排名
  • 尋找渡輪與過河航線及時刻表、目前火災與旅遊風險
  • 瀏覽露營車活動、新聞、匯率換算、食品價格指數與車牌格式
適用情境
適合在規劃或研究跨國露營車、自駕旅行時使用,希望在同一處取得費用、邊境與車輛規定、天氣、渡輪與安全等實用資訊。也適合追問單一國家的油價、過路費、假期或插頭等細節。
執行需求
可作為免驗證的遠端端點使用,也可透過 npm 套件以 npx 在本機執行。未宣告任何 API 金鑰或環境變數。需要能連上該服務的網路;伺服器要求助理傳入與使用者語言相符的 locale。
安裝前請注意
工具為唯讀資料查詢,但路書工具會在供應商網站上建立可分享的行程頁面。資料採 CC BY 4.0 授權,顯示時必須標示出處;渡輪資料為 ODbL,還需註明 OpenStreetMap。缺少資料只代表沒有資料,不代表規則不適用;價格應標為約略值並附上來源連結。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Openvan Travel,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.openvancamp%2Fopenvan-travel/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "openvan-travel": {
      "type": "http",
      "url": "https://mcp.openvan.camp/mcp"
    }
  }
}

README

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

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)170+ countries
POST /api/route-costFuel cost for a route of 2–10 waypoints, per-country prices—
POST /api/roadbook/from-placesWhole-trip roadbook from 2–10 place names: day-by-day plan, budget, per-country entry and vehicle rules; returns a shareable page—
GET /api/roadbook/{code}/statusBuild status of a roadbook (poll until ready)—
GET /api/tolls/countriesToll roads by country: payment system, per-km rates by vehicle class, vignettes80+ countries
GET /api/tolls/routeToll cost for a route of 2–10 place names (car, van, heavy), EUR range—
GET /api/holidays/countries/{code}?from=&to=Public holidays, school holidays (regional) and peak traffic days210+ countries
GET /api/hazards/countries/{code}UK FCDO travel advice level and current GDACS natural disasters—
GET /api/hazards/fires?bbox=NASA FIRMS active fires of the last 48 hours in a bounding box (up to 10°×10°)worldwide
GET /api/ferries?bbox=Ferry and river crossing lines and ports (GeoJSON, OpenStreetMap, ODbL) with hand-checked operator sites and booking linksworldwide
GET /api/ferries/{id}/scheduleTimetable digest from open GTFS feeds: next departures, weekdays, rhythm, travel time820 crossings (Oct 2026)
GET /api/electricity/countries/{code}Plug types, mains voltage and frequency, campsite hook-up (CEE17)220+ countries
GET /api/customs/countries/{code}?from=Customs rules on entry by car: food, cash, alcohol, tobacco, fuel canister—
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/vansky/weather/{code}/{city}One city as on its page: today and the week, place in the country, per-day score breakdown, worst day, air quality, recommendations (include=hourly for 3-hour steps)—
GET /api/vansky/weather/{code}/citiesCities of a country ranked by the week score (as on the site) or today—
GET /api/vansky/rankingCountries ranked by the week score or today, by region160+ countries
GET /api/vansky/methodologyHow the VanSky score is calculated: curves, weights, adjustments — recompute it yourself—
GET /api/vansky/climate?lat=&lng=&date=Typical weather on any day of the year anywhere (ERA5 2021–2025): temperature, precipitation days, sky, sea, solar, VanSky index, months, best monthworldwide
GET /api/vansky/climate/{code}/{city}The same for a VanSky city—
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/news/digestToday's news digest—
GET /api/platesLicense plates of the world: formats, region codes, example plates199 countries
GET /api/plates/{code}/typesPlate types of a country (private, taxi, motorcycle, diplomatic…); empty where not broken down—
GET /api/plates/{code}/plate.svgReady plate image (also .png) — drop into <img src>—

Quick Start

bash
# Fuel pricescurl https://openvan.camp/api/fuel/prices
# Currency rates (EUR-based)curl https://openvan.camp/api/currency/rates
# Food price indexcurl https://openvan.camp/api/vanbasket/countries
# Upcoming vanlife events in Germanycurl "https://openvan.camp/api/events?country=DE&status=upcoming&locale=en"
# Latest vanlife news stories in Englishcurl "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.

bash
curl https://openvan.camp/api/fuel/prices
json
{  "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.

bash
curl https://openvan.camp/api/currency/rates
json
{  "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:

js
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

bash
# All countriescurl https://openvan.camp/api/vanbasket/countries
# Compare two countriescurl "https://openvan.camp/api/vanbasket/compare?from=DE&to=TR"
# Single country with historical snapshotscurl https://openvan.camp/api/vanbasket/countries/DE
json
{  "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:

json
{  "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
bash
# Upcoming events in Germanycurl "https://openvan.camp/api/events?country=DE&status=upcoming&locale=en"
# Event detailscurl "https://openvan.camp/api/event/fit-camper-2026?locale=en"
# Source articles linked to an eventcurl "https://openvan.camp/api/event/fit-camper-2026/articles?locale=en"
json
{  "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
bash
# Latest stories in Englishcurl "https://openvan.camp/api/stories?locale=en"
# German vanlife news in Germanycurl "https://openvan.camp/api/stories?locale=de&country=DE"
# Full story with all source linkscurl "https://openvan.camp/api/story/free-overnight-parking-netherlands?locale=en"
json
{  "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:

html
<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
bash
curl https://openvan.camp/api/plates                                        # countriescurl "https://openvan.camp/api/plates/ru?locale=en"                         # format, regions, codes, enginecurl "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

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:

bash
curl "https://openvan.camp/api/plates/ru/random?type=police"                # a valid blue police plate + image URLscurl "https://openvan.camp/api/plates/ru/validate?number=У7962&region=790&type=police"
html
<img src="https://openvan.camp/api/plates/ru/plate.svg?number=190Т307&region=23&type=diplomatic" alt="190 Т 307 23">

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.

bash
# 1. Create (all inputs are optional)curl -X POST "https://openvan.camp/api/roadbook/from-places?source=your-app" \  -H "Content-Type: application/json" \  -d '{"places":["Munich","Venice"],"locale":"en","inputs":{"travelers":["DE"],"cons":10,"fuel":"diesel"}}'# → {"code":"wqhk8","url":"/en/roadbook/wqhk8-munich-venice","status":"pending","points":[...]}
# 2. Poll until "ready" (long routes take up to a minute), then open https://openvan.camp + urlcurl https://openvan.camp/api/roadbook/wqhk8/status

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.

bash
# Public, school (with ISO 3166-2 regions) and peak traffic days; kind=public|school|trafficcurl "https://openvan.camp/api/holidays/countries/FR?from=2026-10-01&to=2026-11-15"
# FCDO travel advice level + current GDACS disasters (flood, earthquake, cyclone, wildfire…)curl https://openvan.camp/api/hazards/countries/TR
# NASA FIRMS fire detections of the last 48 h; bbox = minLon,minLat,maxLon,maxLat, up to 10°×10°curl "https://openvan.camp/api/hazards/fires?bbox=-1,38,1,40"
# Ferry and river crossing lines and ports in a box; zoom sets geometry detail (ODbL)curl "https://openvan.camp/api/ferries?bbox=4.9,58.8,6.2,59.4&zoom=9"
# One crossing with both ends, then its timetable digest in the operator's local timecurl https://openvan.camp/api/ferries/r5958961curl https://openvan.camp/api/ferries/r5958961/schedule
# Plug types, voltage, frequency, campsite hook-up connectorcurl https://openvan.camp/api/electricity/countries/GB
# Customs rules on entry by car, optionally from a given country; each rule quotes the official sourcecurl "https://openvan.camp/api/customs/countries/NO?from=DE"
  • 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:

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

Every response includes an _attribution object:

json
"_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. ..."}

Errors:

json
{ "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

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:

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

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:

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

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


Built with OpenVan

Public projects using the API:

ProjectWhat it doesUses
cyfuelFuel-price map that ranks an "efficient fill": tank cost plus the fuel burned driving there (cyfuel.cybush.uk)fuel prices
DriveLogDriving and fuel log web appfuel prices
E-LogisticLogistics platform with EU diesel prices by countryfuel prices

Built something with the data? Open a pull request adding it to this table, or tell us in Discussions.

Badge for your README:

markdown
[![Data: OpenVan.camp](https://img.shields.io/badge/data-OpenVan.camp-467187)](https://openvan.camp/)

[Data: OpenVan.camp]


JavaScript / TypeScript SDK

bash
npm install @openvancamp/sdk# or: pnpm add @openvancamp/sdk
ts
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 nowconst 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

來源:README.md,提交 544b830

工具

32

plan_road_trip

Plan A 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.

輸入參數fuelkidspetstanklocaleplatesweightcurrencypassportsresidencewaypoints必填round_trip另有 5 個

get_country_travel_brief

Country Road-Trip Briefing

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.

輸入參數localepassportcountry_code必填

get_fuel_prices

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.

輸入參數localecountry_code

compare_fuel_prices

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.

輸入參數localefuel_typecountry_codes必填

find_cheapest_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.

輸入參數limitorderlocaleregionfuel_type

get_country_travel_weather

Travel Weather In A Country

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.

輸入參數localecountry_code必填

get_city_travel_weather

Travel Weather In A City

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.

輸入參數city必填localecountry_code

get_city_climate

Typical Weather On Any Date

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.

輸入參數latlngcitydatelocalecountry_code

list_best_weather_countries

Countries With The Best Travel Weather

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.

輸入參數sortlimitlocaleperiodregion

list_events

List Vanlife Events

List vanlife events: expos (Caravan Salon), festivals, meetups, forums, road trips. Filter by status, type, country, or free-text search.

輸入參數typelimitlocalesearchstatuscountry

get_event

Get Event Details

Get full details for a single vanlife event by its slug.

輸入參數slug必填locale

search_stories

Search Vanlife News

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.

輸入參數limitlocalesearchcountrycategory

compare_food_prices

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.

輸入參數to必填from必填locale

get_country_food_prices

Get Food Price Index

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.

輸入參數localecountry_code必填

rank_food_prices

Rank Countries By 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.

輸入參數limitorderlocaleregion

get_currency_rate

Convert Currency

Convert an amount between two currencies using live rates (150+ currencies, daily updates). Use it for exchange rates and converting an amount between currencies.

輸入參數to必填from必填amountlocale

check_visa_rules

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.

輸入參數platelocaleweightpassport必填destination必填

get_route_visa_rules

Visa Rules For A Route

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.

輸入參數localeweightcountries必填passports

get_vehicle_import_rules

Temporary 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.

輸入參數localecountry必填

get_toll_rates

Toll Road Rates By Country

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.

輸入參數localecountry_code必填

estimate_route_tolls

Estimate Tolls For A Route

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.

輸入參數localewaypoints必填vehicle_class

get_holidays

Holidays And Peak Traffic Days

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.

輸入參數tofromkindlocalecountry_code必填

get_travel_hazards

Travel Hazards In A Country

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.

輸入參數localecountry_code必填

get_active_fires

Active Fires In An Area

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

輸入參數bbox必填locale

get_power_plugs

Power Plugs And Voltage

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.

輸入參數localecountry_code必填

find_ferries

Ferry Crossings In An Area

Ferry and river crossing lines in a bounding box from OpenStreetMap: name, operator, countries, whether cars are carried, crossing time, the operator site checked by hand and a booking link where confirmed, and whether an open timetable exists. bbox is west,south,east,north in degrees — longitude first (Adriatic ≈ 12,39,20,46). Narrow with query (port or operator) or country_code. Use it for which ferries go to an island or across a sea, strait or river, and to get the id for get_ferry_schedule.

輸入參數bbox必填querylocalecars_onlycountry_code

get_ferry_schedule

Ferry Timetable

One ferry line by id from find_ferries: both ends with country, operator site and booking link, and a timetable digest from open GTFS feeds — next departures today in local time, sailings per day, daytime and night rhythm, weekdays over the next 8 days, crossing time. available: false means no open timetable is matched, not that the ferry does not run. Use it for when the next ferry leaves, how often it runs and how long the crossing takes.

輸入參數id必填locale

get_customs_rules

Customs Rules On Entry By Car

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.

輸入參數fromlocalecountry_code必填

list_license_plate_countries

License Plate Countries

Countries whose license plates are available: international code, number of regions and an example plate.

輸入參數locale

get_license_plate_country

License Plate Format And Region Codes

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.

輸入參數localecountry必填

check_license_plate

Check A 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.

輸入參數typelocalenumber必填regioncountry必填

get_license_plate_image

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.

輸入參數localenumber必填regioncountry必填

版本歷史

5
  1. v0.12.0最新Oct 29, 2026
  2. v0.11.0Oct 26, 2026
  3. v0.10.0Oct 25, 2026
  4. v0.9.7Oct 23, 2026
  5. v0.9.6Oct 18, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Travel 整合