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

MethodPathPurpose
GET/api/v1/account/locations ?include_inactive=trueList all granted locations
GET/api/v1/locations/{location_id}Location master data
GET/api/v1/locations/{location_id}/classesOffered license classes
GET/api/v1/account/prices ?ids=loc_a,loc_bPublished prices in bulk (max 100 locations per request)
GET/api/v1/locations/{location_id}/pricesPublished price board for one location
GET/api/v1/location-eventsLifecycle 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

  1. Store the key server-side
  2. Load locations via GET /api/v1/account/locations
  3. Load prices in bulk via GET /api/v1/account/prices (chunk ids by 100 for large schools)
  4. 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.