API
The numbers of the table as JSON. Every response carries the source and the caveats; please pass them on wherever you show the numbers. Machine-readable description: openapi.json.
Authentication and limits
- Send your key in the
X-API-Keyheader. No key or an unknown key →401. Request a key. - 60 requests per minute per key →
429withRetry-Afterbeyond that. - Slugs are case-insensitive; umlauts may be written as ae/oe/ue (
ag-koeln).
GET /score
Parameters: court and/or airline (slugs from /courts and
/airlines). With only court you get the court over all airlines, with only
airline the airline over all courts. Neither → 400. An unknown slug →
404 with the closest valid slugs.
curl -H "X-API-Key: $KEY" "https://claim-pricing.vitersoft.com/score?court=ag-koeln"
{
"airline": null,
"court": "AG Köln",
"n_total": 89,
"n_decided": 84,
"share_claimant_success": 0.5952,
"share_dismissed": 0.4048,
"share_default_or_ack": 0.0119,
"median_duration_days": 187,
"n_with_dates": 9,
"median_amount_eur": 500,
"date_range": ["2006-04-05", "2026-02-04"],
"caveats": [ … ],
"source": "Open Legal Data (de.openlegaldata.io), ODbL; pipeline v0.1, data dump 2026-05"
}
Fewer than 10 decided cases → 200 with
{"status": "insufficient_data", "n_decided": 4, …}. This is the answer for every airline today:
courts anonymise the defendant (see how we count).
GET /courts, GET /airlines
All valid slugs with n_total, the number of decisions behind them.
curl -H "X-API-Key: $KEY" "https://claim-pricing.vitersoft.com/courts"
GET /health
No key. {"status": "ok", …} with the data version.
Errors
| Status | Body |
|---|---|
| 400 | {"error": "missing_parameter", "message": …} |
| 401 | {"error": "unauthorized", "message": …} |
| 404 | {"error": "unknown_court" | "unknown_airline", "message": …, "suggestions": [ … ]} |
| 429 | {"error": "rate_limited", "message": …}, header Retry-After: 60 |
Statistics from published decisions, not legal advice and not a prediction for an individual claim.