Public API for Czech Legislation
Access laws, court decisions, EU law and parliamentary data programmatically. Free. No registration limits.
Quick Start in 60 Seconds
Generate your API token in your profile
Name your token and copy it.
Make your first request
Bearer token in the header — and you have data.
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://ceskezakony.cz/api/v1/laws/89/2012
{
"data": {
"id": 12345,
"number": 89,
"year": 2012,
"title": "Občanský zákoník",
"collection_code": "sb",
"effective_from": "2014-01-01",
"status": "effective",
"stale_url": "/sb/2012/89"
}
}
Why Use Our API
Free Forever
No paid plans, no registration limits
Complete Coverage
Collection of Laws, Supreme and Constitutional Court decisions, EU law, parliamentary bills
Daily Updates
Automatic sync from official sources
All Data in JSON
Standard REST, cursor pagination
OpenAPI 3.1 Specification
Swagger UI and client generators
High Rate Limits
5,000 requests per day for registered users
What Is in the API
Laws
Czech Collection of Laws — statutes, decrees, government regulations. Current text, version history, text fragments and cross-references.
- GET /api/v1/laws
- GET /api/v1/laws/{číslo}/{rok}
- GET /api/v1/laws/{číslo}/{rok}/fragments
- GET /api/v1/laws/{číslo}/{rok}/amendments
Case Law
Court decisions from the Supreme Court, Administrative Court, Constitutional Court and others from Justice.cz. Full-text search, filtering by court and keywords.
- GET /api/v1/decisions
- GET /api/v1/decisions/{id}
- GET /api/v1/courts
- GET /api/v1/decision-keywords
EU Law
EU regulations and directives from EUR-Lex. Overview of transpositions into Czech law and implementation status.
- GET /api/v1/eu-laws
- GET /api/v1/eu-laws/{celex}
- GET /api/v1/eu-laws/{celex}/transpositions
Parliament
Parliamentary bills, deputies, votes and sessions from PSP.cz. Track the legislative process in real time.
- GET /api/v1/parliament/bills
- GET /api/v1/parliament/deputies
- GET /api/v1/parliament/votes
- GET /api/v1/parliament/sessions
Your Account & API Management
User Info & Rate Limits, statistiky využití, správa API tokenů and webhook subscriptions.
- GET /api/v1/me — User Info & Rate Limits
- GET /api/v1/me/usage — Usage Statistics
- GET /api/v1/me/tokens — API Token Management
- GET /api/v1/me/webhooks — Webhook Subscription Management
Bulk Export
Download entire datasets at once — laws, case law, EU legislation, parliamentary bills. Daily-generated JSON.gz archives.
- GET /api/v1/bulk/laws — All Laws (JSON.gz)
- GET /api/v1/bulk/decisions — All Decisions
- GET /api/v1/bulk/eu-laws — EU Legislation
- GET /api/v1/bulk/parliament-bills — Parliamentary Bills
Code Examples
curl -s \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json" \
https://ceskezakony.cz/api/v1/laws/89/2012
$response = Http::withToken('YOUR_TOKEN')
->acceptJson()
->get('https://ceskezakony.cz/api/v1/laws/89/2012');
$law = $response->json('data');
import requests
response = requests.get(
'https://ceskezakony.cz/api/v1/laws/89/2012',
headers={
'Authorization': 'Bearer YOUR_TOKEN',
'Accept': 'application/json',
}
)
law = response.json()['data']
const response = await fetch(
'https://ceskezakony.cz/api/v1/laws/89/2012',
{
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'Accept': 'application/json',
}
}
);
const { data: law } = await response.json();
curl -s \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json" \
"https://ceskezakony.cz/api/v1/decisions?q=bezdůvodné+obohacení&court=NS"
$response = Http::withToken('YOUR_TOKEN')
->acceptJson()
->get('https://ceskezakony.cz/api/v1/decisions', [
'q' => 'bezdůvodné obohacení',
'court' => 'NS',
]);
$decisions = $response->json('data');
response = requests.get(
'https://ceskezakony.cz/api/v1/decisions',
params={'q': 'bezdůvodné obohacení', 'court': 'NS'},
headers={'Authorization': 'Bearer YOUR_TOKEN', 'Accept': 'application/json'},
)
decisions = response.json()['data']
const params = new URLSearchParams({ q: 'bezdůvodné obohacení', court: 'NS' });
const response = await fetch(
`https://ceskezakony.cz/api/v1/decisions?${params}`,
{ headers: { 'Authorization': 'Bearer YOUR_TOKEN', 'Accept': 'application/json' } }
);
const { data: decisions } = await response.json();
curl -s \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json" \
"https://ceskezakony.cz/api/v1/parliament/bills?period=10&status=active"
$response = Http::withToken('YOUR_TOKEN')
->acceptJson()
->get('https://ceskezakony.cz/api/v1/parliament/bills', [
'period' => 10,
'status' => 'active',
]);
$bills = $response->json('data');
response = requests.get(
'https://ceskezakony.cz/api/v1/parliament/bills',
params={'period': 10, 'status': 'active'},
headers={'Authorization': 'Bearer YOUR_TOKEN', 'Accept': 'application/json'},
)
bills = response.json()['data']
const params = new URLSearchParams({ period: 10, status: 'active' });
const response = await fetch(
`https://ceskezakony.cz/api/v1/parliament/bills?${params}`,
{ headers: { 'Authorization': 'Bearer YOUR_TOKEN', 'Accept': 'application/json' } }
);
const { data: bills } = await response.json();
Authentication
The API uses Bearer token authentication:
Authorization: Bearer YOUR_API_TOKEN
- Generate your token in your profile after logging in: Profile → API
- Never share your API token — treat it like a password.
- All requests must go through HTTPS.
Rate Limits and Fair Use
| Access type | Daily limit | Burst limit |
|---|---|---|
| Registered users | 5 000 / den | 5 req/s |
Response Format
- All responses are in JSON format
- Field names use snake_case
-
Dates are in ISO 8601 format (např.
2024-01-01T00:00:00Z) - Large collections use cursor pagination
-
Send the header
Accept-Languagefor translated content.
Error response structure
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Retry after 60s.",
"retry_after": 60
}
}
Cursor pagination
{
"data": [ ... ],
"meta": {
"cursor": "eyJpZCI6MTIzNH0",
"per_page": 25,
"has_more": true
}
}
Advanced Features
Webhook Notifications
Subscribe to real-time events: law amendments, new decisions, bill progress through the legislative process. HMAC-SHA256 signed payloads.
Bulk Export
Download entire datasets at once — laws, case law, EU legislation, parliamentary bills. Daily-generated JSON.gz archives.
HTTP Caching (ETag)
Efficient caching via ETag and Cache-Control headers. Immutable data (specific law versions, decisions) can be cached for 24 hours.
Per-user Rate Limits
Need higher limits for academic research or a public service? Contact us and we will set a custom quota for you at no charge.
Full API Reference
Complete reference documentation for all endpoints in Swagger UI — interactive testing directly in the browser, client generation in dozens of languages.
Start Building — It's Free
Registration takes 30 seconds. No credit card required.