Technical documentation
Partner API for integrators
Read a driving school’s location data with an API key issued by that school. Read-only — no writes, no other schools.
Authentication
Every request needs the API key in the Authorization header. Store the key server-side only.
Authorization: Bearer fdh_live_…
- The key only covers the issuing school and the granted scopes/locations.
- Rate limit: 600 requests per minute per key.
- Current schema version: school_api.v1
Endpoints
| Method | Path | Purpose |
|---|---|---|
| GET | /api/v1/account/locations ?include_inactive=true | List all granted locations |
| GET | /api/v1/locations/{location_id} | Location master data |
| GET | /api/v1/locations/{location_id}/classes | Offered license classes |
| GET | /api/v1/account/prices ?ids=loc_a,loc_b | Published prices in bulk (max 100 locations per request) |
| GET | /api/v1/locations/{location_id}/prices | Published price board for one location |
| GET | /api/v1/location-events | Lifecycle events (closure, merge, …) |
Example
Replace the placeholder with the key you received from the school.
curl -sS -H "Authorization: Bearer IHR_API_SCHLUESSEL" \ https://fahrschuldaten.de/api/v1/account/locations
Recommended flow
- Store the key server-side
- Load locations via GET /api/v1/account/locations
- Load prices in bulk via GET /api/v1/account/prices (chunk ids by 100 for large schools)
- Track changes via location-events
Notes
- Read-only — creating or changing data is not possible.
- Prices include published stands only, never drafts.
- Price rows follow fahrschuldaten.price-item.v1 — including priceStatus, transparencyCategory, trainingMode, and scheduleScope (e.g. intensive vs holiday course).
- Never put the key in public frontend code.
- Always use location_id from the API, not internal database IDs.
Questions about the key or granted data: contact the issuing school.