Introduction
Open data API for fuel prices, currency rates and vanlife events. Free to use with attribution (CC BY 4.0).
Welcome to the **OpenVan.camp Public API** — open data for fuel prices, currency rates and vanlife events across 70+ countries.
## License
All data is available under **[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)**.
You are free to use it in your apps, bots, and articles — please cite **OpenVan.camp (openvan.camp)** as the source.
## Base URL
All endpoints are available at `https://openvan.camp`.
## Authentication
No authentication required. All endpoints are public.
## Rate Limits
No strict rate limits. Data is cached — please don't poll more often than every 10 minutes.
<aside>Code examples are shown in the right panel. Switch language with the tabs at the top right.</aside>
Authenticating requests
This API is not authenticated.
Currency Rates
Get currency rates
Returns exchange rates for 150+ currencies relative to EUR. Data is fetched from multiple open-source APIs with automatic fallback. Cached for 1 hour.
Example request:
curl --request GET \
--get "https://openvan.camp/api/currency/rates" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://openvan.camp/api/currency/rates"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://openvan.camp/api/currency/rates'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Success):
{
"success": true,
"rates": {
"EUR": 1,
"USD": 1.08,
"GBP": 0.85,
"RUB": 98.5,
"TRY": 35.2,
"GEL": 2.95,
"KZT": 520,
"UAH": 42.5
},
"cached": true,
"updated_at": "2026-03-15T09:00:00+00:00"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Events
List events
Returns a paginated list of vanlife events (exhibitions, festivals, meetups, road trips). Filter by status, type, country, or search by name.
Example request:
curl --request GET \
--get "https://openvan.camp/api/events?locale=en&status=upcoming&type=festival&country=DE&search=Nauticampo&page=1&limit=30" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://openvan.camp/api/events"
);
const params = {
"locale": "en",
"status": "upcoming",
"type": "festival",
"country": "DE",
"search": "Nauticampo",
"page": "1",
"limit": "30",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://openvan.camp/api/events'
params = {
'locale': 'en',
'status': 'upcoming',
'type': 'festival',
'country': 'DE',
'search': 'Nauticampo',
'page': '1',
'limit': '30',
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Success):
{
"events": [
{
"id": 42,
"slug": "nauticampo-2026",
"event_name": "Nauticampo 2026",
"event_type": "festival",
"start_date": "2026-03-11",
"end_date": "2026-03-15",
"city": "Lisbon",
"country_code": "PT",
"country": {
"code": "pt",
"name": "Portugal",
"flag_emoji": "🇵🇹"
},
"status": "published",
"url": "https://openvan.camp/en/event/nauticampo-2026"
}
],
"pagination": {
"total": 48,
"page": 1,
"limit": 30,
"pages": 2
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get event details
Returns full details for a single vanlife event by slug, including location, description, and social links.
Example request:
curl --request GET \
--get "https://openvan.camp/api/event/nauticampo-2026?locale=en" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://openvan.camp/api/event/nauticampo-2026"
);
const params = {
"locale": "en",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://openvan.camp/api/event/nauticampo-2026'
params = {
'locale': 'en',
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Success):
{
"id": 42,
"slug": "nauticampo-2026",
"event_name": "Nauticampo 2026",
"event_type": "festival",
"start_date": "2026-03-11",
"end_date": "2026-03-15",
"city": "Lisbon",
"country_code": "PT",
"description": "Annual vanlife and camping festival...",
"official_url": "https://nauticampo.pt",
"image_url": "https://...",
"status": "published",
"url": "https://openvan.camp/en/event/nauticampo-2026"
}
Example response (404, Not found):
{
"message": "No query results for model [App\\Models\\Event]."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get event articles
Returns news articles (sources) linked to this event, filtered by locale.
Example request:
curl --request GET \
--get "https://openvan.camp/api/event/nauticampo-2026/articles?locale=en" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://openvan.camp/api/event/nauticampo-2026/articles"
);
const params = {
"locale": "en",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://openvan.camp/api/event/nauticampo-2026/articles'
params = {
'locale': 'en',
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Success):
[
{
"id": 1001,
"title": "Nauticampo 2026 opens its doors",
"image_url": "https://...",
"published_at": "2026-03-11T10:00:00+00:00",
"source_name": "CamperVan Magazine",
"original_url": "https://...",
"language": "en"
}
]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Fuel Prices
Get fuel prices
Returns current retail fuel prices (gasoline, diesel, LPG) for 70+ countries. Data is updated weekly from GlobalPetrolPrices and regional government sources.
License: CC BY 4.0 — free to use with attribution to OpenVan.camp.
Example request:
curl --request GET \
--get "https://openvan.camp/api/fuel/prices" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://openvan.camp/api/fuel/prices"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://openvan.camp/api/fuel/prices'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Success):
{
"success": true,
"data": {
"DE": {
"country_code": "DE",
"country_name": "Germany",
"region": "europe",
"currency": "EUR",
"prices": {
"gasoline": 1.79,
"diesel": 1.65,
"lpg": 0.82,
"e85": null,
"premium": null
},
"fetched_at": "2026-03-15T09:31:25+03:00",
"source": "GlobalPetrolPrices.com"
}
},
"meta": {
"total_countries": 72,
"updated_at": "2026-03-15 09:33:33",
"cache_ttl_hours": 6
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.