European Transit API

One endpoint. 12 countries. Real-time departures.

GET /departures?lat=52.52&lon=13.40

Try it live
12
Countries
46+
Cities
20
APIs unified
<500ms
Response time

How It Works

📍

Send coordinates

Pass any latitude/longitude in Europe. That's all you need.

🔀

Smart routing

The API detects the region and queries the right local transit source.

📋

Unified JSON

Get a clean, normalized response — same format for every city.

Interactive Playground

Click a city marker or anywhere on the map to fetch live departures.

Response Ready
Click a city or point on the map to see live results.

Quick Start

curl "https://pebble-transit-api.scharf.workers.dev/departures?lat=52.52&lon=13.405"
const res = await fetch(
  "https://pebble-transit-api.scharf.workers.dev/departures?lat=52.52&lon=13.405"
);
const data = await res.json();

console.log(data.region);      // "Berlin/Brandenburg"
console.log(data.departures);  // [{ line: "U2", direction: "Pankow", time: "3 min", ... }]
import requests

resp = requests.get(
    "https://pebble-transit-api.scharf.workers.dev/departures",
    params={"lat": 52.52, "lon": 13.405}
)
data = resp.json()

print(data["region"])      # "Berlin/Brandenburg"
print(data["departures"])  # [{"line": "U2", "direction": "Pankow", "time": "3 min", ...}]

Coverage

🇩🇪 Germany
Berlin Hamburg München Köln Düsseldorf Frankfurt Nürnberg Leipzig Dresden
🇦🇹 Austria
Wien Graz Salzburg Innsbruck Linz
🇨🇭 Switzerland
Zürich Basel Bern Genève
🇩🇰 Denmark
København
🇧🇪 Belgium
Bruxelles Antwerpen
🇵🇱 Poland
Warszawa Kraków
🇸🇪 Sweden
Stockholm Göteborg Malmö
🇪🇸 Spain
Barcelona Madrid Valencia Sevilla Málaga Bilbao Zaragoza San Sebastián Santander Murcia Cádiz Alicante
🇳🇱 Netherlands
Amsterdam Rotterdam Den Haag Utrecht
🇫🇷 France
Paris Lyon Marseille Toulouse Bordeaux Lille Nice Strasbourg Nantes
🇬🇧 United Kingdom
London