Status: ✅ IMPLEMENTOVÁNO Datum: 2026-01-25
API Key authentication zabezpečuje gateway - každý request musí obsahovat platný API klíč.
Výhody: - ✅ Bezpečný přístup (jen autorizovaní uživatelé) - ✅ Rate limiting (ochrana před zneužitím) - ✅ Usage tracking (statistiky použití) - ✅ Expirable keys (časově omezené klíče)
# Tyto endpointy jsou veřejné - API klíč NENÍ potřeba
GET / # Gateway info
GET /health # Health check
GET /metrics # Prometheus metrics
GET /docs # Swagger UI
GET /redoc # ReDoc dokumentace
GET /openapi.json # OpenAPI schema
# Všechny ostatní endpointy vyžadují API klíč
GET /api/services # Seznam služeb
GET /api/agents # Seznam agentů
POST /api/banking/loan_assessment
POST /api/aml/company_screening
... (všech 88 agentů)
# 1. Vygeneruj nový klíč (admin only)
curl -X POST https://api.czechai.io/admin/keys/generate \
-H "X-Admin-Key: czai_admin_secret_key_change_me" \
-H "Content-Type: application/json" \
-d '{
"name": "Production Client",
"description": "Klíč pro produkční klienta",
"owner": "jan.novak@firma.cz",
"expires_days": 365,
"rate_limit": 10000,
"requests_per_minute": 100
}'
# Response:
{
"success": true,
"key_data": {
"key": "czai_xyzABC123...", # ⚠️ ULOŽIT! Zobrazí se jen jednou
"id": 1,
"prefix": "czai_xyzABC1",
"name": "Production Client",
"created_at": "2026-01-25T11:30:00",
"expires_at": "2027-01-25T11:30:00",
"rate_limit": 10000,
"requests_per_minute": 100
},
"warning": "Save this key! It will not be shown again."
}
⚠️ DŮLEŽITÉ: API klíč se zobrazí JEN JEDNOU při generování!
curl -X POST https://api.czechai.io/api/banking/loan_assessment \
-H "X-API-Key: czai_xyzABC123..." \
-H "Content-Type: application/json" \
-d '{"amount": 5000000, "income": 80000}'
curl -X POST https://api.czechai.io/api/banking/loan_assessment \
-H "Authorization: Bearer czai_xyzABC123..." \
-H "Content-Type: application/json" \
-d '{"amount": 5000000, "income": 80000}'
curl https://api.czechai.io/admin/keys/list \
-H "X-Admin-Key: czai_admin_secret_key_change_me"
# Response:
{
"count": 3,
"keys": [
{
"id": 1,
"prefix": "czai_xyzABC1",
"name": "Production Client",
"description": "Klíč pro produkční klienta",
"owner": "jan.novak@firma.cz",
"created_at": "2026-01-25 11:30:00",
"expires_at": "2027-01-25 11:30:00",
"is_active": true
},
...
]
}
curl "https://api.czechai.io/admin/keys/usage/1?days=7" \
-H "X-Admin-Key: czai_admin_secret_key_change_me"
# Response:
{
"key_id": 1,
"stats": {
"total_requests": 1542,
"by_endpoint": [
{"endpoint": "/api/banking/loan_assessment", "count": 450},
{"endpoint": "/api/aml/company_screening", "count": 380},
...
],
"by_status": {
"200": 1480,
"400": 42,
"500": 20
},
"period_days": 7
}
}
curl -X POST https://api.czechai.io/admin/keys/revoke/1 \
-H "X-Admin-Key: czai_admin_secret_key_change_me"
# Response:
{
"success": true,
"message": "Key 1 revoked"
}
Každý API klíč má dva limity:
Vrací HTTP 429 při překročení
Daily rate limit (default: 10,000/den)
Příklad rate limit error:
# Po překročení limitu
curl -X POST https://api.czechai.io/api/banking/loan_assessment \
-H "X-API-Key: czai_xyzABC123..."
# Response: 429 Too Many Requests
{
"error": "Rate limit exceeded",
"limit": 100,
"window": "1 minute"
}
# Default admin key (ZMĚNIT V PRODUKCI!)
ADMIN_API_KEY=czai_admin_secret_key_change_me
# Nastavit environment variable:
export ADMIN_API_KEY="tvůj_silný_admin_klíč"
czai_<32-char-random-string>
Příklad: czai_xyzABC123def456GHI789jkl012MNO345pqr678STU
Soubor: api_keys.db (SQLite)
Tabulky:
rate_limit, requests_per_minute
api_usage - Usage log
timestamp
rate_limits - Rate limiting tracking
import requests
API_KEY = "czai_xyzABC123..."
BASE_URL = "https://api.czechai.io"
# Loan assessment
response = requests.post(
f"{BASE_URL}/api/banking/loan_assessment",
headers={"X-API-Key": API_KEY},
json={
"amount": 5000000,
"monthly_income": 80000,
"property_value": 8000000
}
)
print(response.json())
const API_KEY = "czai_xyzABC123...";
const BASE_URL = "https://api.czechai.io";
// AML screening
fetch(`${BASE_URL}/api/aml/company_screening`, {
method: "POST",
headers: {
"X-API-Key": API_KEY,
"Content-Type": "application/json"
},
body: JSON.stringify({
ico: "12345678",
name: "ACME s.r.o."
})
})
.then(res => res.json())
.then(data => console.log(data));
| Status | Error | Meaning |
|---|---|---|
| 401 | API key required | Chybí X-API-Key header |
| 403 | Invalid or expired API key | Neplatný/expirovaný klíč |
| 429 | Rate limit exceeded | Překročen rate limit |
ADMIN_API_KEY (nastavit ENV variable)api_keys.db databázeVytvořeno: 2026-01-25 Autor: CzechAI Team
© 2026 CzechAI | router.czechai.io | API Docs