AZComply API-Referenz
Die AZComply API bietet Ihnen programmatischen Zugang zur einzigen deterministischen EU-KI-Verordnung-Klassifizierungs-Engine der Welt. Integrieren Sie die regulatorische Risikoerkennung direkt in Ihre CI/CD-Pipelines, Compliance-Workflows oder Unternehmensanwendungen.
Zwei Stufen: POST /v1/classify führt die reine Python-Engine in <100 ms ohne Credits und ohne LLM aus. POST /v1/assess führt die vollständige 9-Persona-LLM-Pipeline asynchron für narrative Analysen, Aktionspläne und PDF-fertige Berichte aus (1 Credit pro Bewertung).
/v1/classify
Synchron · Kostenlos · <100 ms · Nur Engine
/v1/assess
Asynchron · 1 Credit · ~60 s · Vollständige Pipeline
API-Schlüssel
az_live_* / az_test_* · SHA-256 gespeichert
Basis-URL
Alle Anfragen müssen HTTPS verwenden. HTTP-Verbindungen werden abgelehnt.
Versionierung
Die API wird über den URL-Pfad versioniert (/v1/). Brechende Änderungen werden unter einem neuen Versions-Präfix (z. B. /v2/) mit einer 12-monatigen Kündigungsfrist veröffentlicht. Die Version der EU-KI-Verordnung-Engine wird in jeder Antwort zurückgegeben als engine_version.
Authentifizierung
Die AZComply API verwendet API-Schlüssel zur Authentifizierung. Fügen Sie Ihren Schlüssel in jede Anfrage über den HTTP-Header X-API-Key ein.
Schlüsseltypen
| Präfix | Typ | Verhalten |
|---|---|---|
az_live_* | Live | Echte Klassifizierung, verbraucht Credits auf /v1/assess |
az_test_* | Sandbox | Kein LLM, keine Credits. /v1/assess gibt sofort ein deterministisches Mock-Ergebnis zurück |
Sandbox-Modus
Verwenden Sie az_test_*-Schlüssel in Ihrer Entwicklungs- und CI/CD-Umgebung. Aufrufe an POST /v1/assess geben sofort ein deterministisches Ergebnis zurück (kein LLM, kein Hintergrundjob, keine Credit-Kosten). Das Flag sandbox: true ist in Sandbox-Antworten stets gesetzt.
Schnellstart
Führen Sie Ihren ersten API-Aufruf in weniger als 2 Minuten durch.
1. Schlüssel erstellen
Gehen Sie zu Dashboard → API-Schlüssel und klicken Sie auf Schlüssel erstellen. Der vollständige Schlüssel wird einmalig angezeigt — speichern Sie ihn in Ihrem Secret Manager (AWS Secrets Manager, GitHub Secrets, Vault usw.).
2. Ersten Aufruf durchführen
Klassifizieren Sie eine KI-Systembeschreibung. Keine Credits verbraucht.
curl -X POST https://api.azcomply.eu/v1/classify \
-H "X-API-Key: az_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "AI system that automatically ranks job applicants by scoring their CVs before human review",
"jurisdictions": ["FR"]
}'3. Antwort interpretieren
{
"risk_code": "HIGH_RISK",
"ci_status": "block",
"gate_pass": false,
"verdict": {
"classification": "HIGH",
"obligations_count": 9,
"fine_exposure": "€15,000,000 or 3% of global annual turnover"
},
"compliance_deadline": "2027-12-02",
"engine_version": "current",
"classified_at": "2026-03-25T14:30:00Z"
}POST /v1/classify
/v1/classifyDeterministische Klassifizierung · Keine Credits · <100 ms
Klassifiziert ein KI-System gemäß EU AI Act 2024/1689 mit der deterministischen Python-Engine. Null LLM-Kosten. Gibt Risikoniveau, Anzahl der Pflichten, FRIA-Anforderung, Bußgeld-Exposition und Compliance-Frist in unter 100 ms zurück.
classify (standardmäßig auf allen Schlüsseln enthalten). Dieser Endpoint ist kostenlos — die Engine ist reines Python und kostet nichts im Betrieb.Anfragetext
Zwei Eingabemodi — geben Sie entweder description (Freitext) oder facts (strukturiert) an.
Modus A — Freitext
| Parameter | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
description | string | Pflichtfeld | Plain-text description of the AI system (10–14,000 chars)e.g. "CV ranking AI used in HR" |
system_name | string | Optional | Human-readable name for the systeme.g. "HireBot v2" |
jurisdictions | string[] | Optional | ISO-2 country codes. Loads national law context.e.g. ["FR", "BE"] |
Modus B — Strukturierte Fakten
| Parameter | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
facts | object | Pflichtfeld | Pre-structured SystemFacts fields. Useful for CI/CD where you know the system properties.e.g. {"is_hr_tool": true, "operator_role": "DEPLOYER"} |
Antwort
curl -X POST https://api.azcomply.eu/v1/classify \
-H "X-API-Key: az_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "AI system that automatically ranks job applicants by scoring their CVs before human review",
"jurisdictions": ["FR"]
}'{
"risk_code": "HIGH_RISK",
"ci_status": "block",
"gate_pass": false,
"verdict": {
"classification": "HIGH",
"obligations_count": 9,
"fine_exposure": "€15,000,000 or 3% of global annual turnover"
},
"compliance_deadline": "2027-12-02",
"engine_version": "current",
"classified_at": "2026-03-25T14:30:00Z"
}Antwortfelder
| Parameter | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
risk_level | string | Pflichtfeld | PROHIBITED | HIGH_RISK | LIMITED_RISK | MINIMAL_RISK | GPAI | GPAI_SYSTEMIC | UNCODED |
operator_role | string | Pflichtfeld | PROVIDER | DEPLOYER | IMPORTER | DISTRIBUTOR |
annex_iii_category | string | null | Pflichtfeld | Matched Annex III category if HIGH_RISK, e.g. "Employment & HR — Annex III §4(a)" |
obligations_count | integer | Pflichtfeld | Number of EU AI Act obligations applicable to this system |
fria_required | boolean | Pflichtfeld | Whether a Fundamental Rights Impact Assessment is required (Art. 27) |
national_law_flags | string[] | Pflichtfeld | National law indicators detected, e.g. ["CAO_39_BE", "CNIL_FR"] |
compliance_deadline | string | null | Pflichtfeld | ISO 8601 date of applicable compliance deadline |
fine_exposure | object | Pflichtfeld | { max_tier: string, max_eur: integer } — maximum fine under EU AI Act |
gate_pass | boolean | Pflichtfeld | True only if no obligations detected (MINIMAL_RISK with no flags) |
engine_version | string | Pflichtfeld | Classification engine version from /v1/systems/engine-info |
sandbox | boolean | Pflichtfeld | True if request was made with an az_test_* key |
Strukturierter Modus (CI/CD)
Übergeben Sie vorab extrahierte Systemeigenschaften als strukturierte Fakten für deterministische Ergebnisse in automatisierten Pipelines:
curl -X POST https://api.azcomply.eu/v1/classify \
-H "X-API-Key: az_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"facts": {
"system_name": "CV Ranking Engine",
"system_description": "Scores and ranks job applicants",
"operator_role": "DEPLOYER",
"jurisdictions": ["FR"],
"is_hr_tool": true,
"employee_count": 250,
"uses_gpai_model": false
}
}'POST /v1/assess
/v1/assessVollständige 9-Persona-LLM-Pipeline · 1 Credit · ~60 s · Async 202
Führt die vollständige Bewertungs-Pipeline aus: Faktenextraktion, deterministische Klassifizierung, 9 LLM-Personas (Logik-Kritiker, FRIA-Berater, Aktionsplan-Architekt, Berichtsautor usw.) und gibt ein vollständiges Narrativ mit Aktionsplan zurück. Gibt sofort 202 Accepted mit einer job_id zurück.
assess (standardmäßig nicht enthalten — aktivieren Sie ihn beim Erstellen Ihres Schlüssels). Kosten: 1 Credit, nur nach erfolgreichem Abschluss der Pipeline abgezogen.Anfragetext
| Parameter | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
description | string | Pflichtfeld | Plain-text description of the AI system (20–14,000 chars) |
language | string | Optional | Report language: en, fr, nl, de, it, es. Default: en |
jurisdictions | string[] | Optional | ISO-2 country codes for national law context |
webhook_url | string | Optional | HTTPS URL to receive classification.completed / classification.failed events |
webhook_secret | string | Optional | Secret for HMAC-SHA256 signature verification |
curl -X POST https://api.azcomply.eu/v1/assess \
-H "X-API-Key: az_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "Document describing our AI-powered credit scoring system...",
"language": "en",
"jurisdictions": ["BE"],
"webhook_url": "https://hooks.yourcompany.com/azcomply",
"webhook_secret": "your-webhook-secret"
}'{
"job_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "queued",
"poll_url": "/v1/jobs/3fa85f64-5717-4562-b3fc-2c963f66afa6",
"estimated_seconds": 60
}Job-Abfrage
docs.assess.pollingDesc Der Retry-After-Header gibt das empfohlene Abfrageintervall an.
# Poll for completion (every 5 seconds)
curl https://api.azcomply.eu/v1/jobs/3fa85f64-5717-4562-b3fc-2c963f66afa6 \
-H "X-API-Key: az_live_YOUR_KEY"
# Fetch result once status == "completed"
curl https://api.azcomply.eu/v1/jobs/3fa85f64-5717-4562-b3fc-2c963f66afa6/result \
-H "X-API-Key: az_live_YOUR_KEY"| Status | Bedeutung | Aktion |
|---|---|---|
queued | Auftrag empfangen, warte auf einen Worker | Warten und erneut abfragen |
processing | Pipeline läuft (LLM-Personas aktiv) | Warten und erneut abfragen |
completed | Alle Stufen abgeschlossen, Ergebnis verfügbar | /result abrufen |
failed | Pipeline-Fehler — das Feld error enthält Details | Fehler prüfen und erneut versuchen |
Ergebnis
Wenn status === completed, rufen Sie das vollständige Ergebnis ab:
/v1/jobs/{job_id}/resultGibt den vollständigen JSON-Bericht zurück, wenn der Auftrag abgeschlossen ist
{
"job_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"risk_level": "HIGH_RISK",
"operator_role": "DEPLOYER",
"obligations_count": 11,
"fria_required": true,
"national_law_flags": ["CAO_39_BE", "CAO_9_BE"],
"compliance_deadline": "2027-12-02",
"fine_exposure": { "max_tier": "TIER_2_HIGH_RISK", "max_eur": 15000000 },
"gate_pass": false,
"validation_score": 94,
"fallacy_flags": [],
"bias_flags": [],
"fria_analysis": "A Fundamental Rights Impact Assessment is required under Art. 27...",
"action_plan": "Phase 1 (0–3 months): Establish AI governance framework...",
"narrative": "This credit scoring system presents significant regulatory risk...",
"completed_at": "2026-03-25T14:31:03Z"
}POST /v1/workpapers
/v1/workpapersBezahltes Markdown-Workpaper · 1 Credit · Async 202 · API/MCP-Transport
Erstellt ein Markdown-Workpaper in bezahlter Qualität für Headless-API-Clients und MCP-Agenten. Es verwendet denselben gehosteten QAE-Extraktions-, deterministischen Klassifizierungs-, Credit-Reservierungs-, Job-Polling- und Ergebnisaufbewahrungsablauf wie der bezahlte API-Berichtspfad, gibt aber ein maschinenlesbares Job-Ergebnis mit Markdown statt eines PDF-Berichtsartefakts zurück.
assess. Kosten: 1 Credit, nur nach erfolgreichem Abschluss des Workpapers finalisiert. Verwenden Sie Idempotency-Key bei Wiederholungsversuchen, um doppelte Reservierungen zu vermeiden.Anfragetext
| Parameter | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
description | string | Pflichtfeld | Plain-text description of the AI system (20-14,000 chars) |
system_name | string | Optional | Display name used in the generated workpaper |
jurisdictions | string[] | Optional | ISO-2 country codes for national law context |
brief_scope | auto | single | composite | portfolio | Optional | Use composite for independently operable component suites |
components | object[] | Optional | Component boundaries for composite-system workpapers |
include_coverage_overlay | boolean | Optional | Adds deterministic coverage matrix rows |
curl -X POST https://api.azcomply.eu/v1/workpapers \
-H "X-API-Key: az_live_YOUR_KEY" \
-H "Idempotency-Key: hospital-suite-2026-05-30" \
-H "Content-Type: application/json" \
-d '{
"system_name": "Hospital Operations Suite",
"description": "Integrated hospital AI suite with triage, scheduling, diagnostics, kiosk, and facilities components...",
"jurisdictions": ["BE"],
"brief_scope": "composite",
"components": [
{ "name": "Patient Triage", "description": "Assigns urgency scores and appointment priority" }
]
}'{
"job_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "queued",
"poll_url": "/v1/jobs/3fa85f64-5717-4562-b3fc-2c963f66afa6",
"estimated_seconds": 60
}Ergebnis
docs.workpapers.resultDesc
Webhooks
Konfigurieren Sie eine Webhook-URL auf POST /v1/assess, um Echtzeit-Benachrichtigungen zu erhalten, wenn eine Bewertung abgeschlossen wird oder fehlschlägt. AZComply signiert jede Zustellung mit HMAC-SHA256 — überprüfen Sie immer die Signatur vor der Verarbeitung.
Ereignisse
| Ereignis | Wann | Datenfelder |
|---|---|---|
classification.completed | Pipeline erfolgreich | job_id, risk_level, obligations_count, fria_required, compliance_deadline |
classification.failed | Pipeline fehlgeschlagen (Credit freigegeben) | job_id, error |
Header bei jeder Zustellung
Signatur prüfen
Überprüfen Sie immer den X-AZComply-Signature-Header, bevor Sie Webhook-Payloads verarbeiten.
import hmac, hashlib, json
def verify_azcomply_signature(
body: bytes,
signature_header: str,
secret: str,
) -> bool:
"""
Verify X-AZComply-Signature header on incoming webhook.
signature_header looks like: sha256=<hex_digest>
"""
expected = "sha256=" + hmac.new(
key=secret.encode(),
msg=body,
digestmod=hashlib.sha256,
).hexdigest()
return hmac.compare_digest(expected, signature_header)
# Flask example
from flask import Flask, request, abort
app = Flask(__name__)
WEBHOOK_SECRET = "your-webhook-secret"
@app.route("/webhook", methods=["POST"])
def handle_webhook():
sig = request.headers.get("X-AZComply-Signature", "")
if not verify_azcomply_signature(request.data, sig, WEBHOOK_SECRET):
abort(401)
payload = request.get_json()
event = payload["event"] # "classification.completed"
job_id = payload["data"]["job_id"]
risk_level = payload["data"]["risk_level"]
# ... handle event
return "", 200Wiederholungslogik
AZComply wiederholt fehlgeschlagene Zustellungen bis zu 3 Mal mit exponentiellem Backoff: 2 s → 4 s → 8 s. Nach 3 fehlgeschlagenen Versuchen wird das Ereignis verworfen — prüfen Sie die Verfügbarkeit Ihres Endpoints. 4xx-Antworten werden nicht wiederholt (behandeln Sie sie als dauerhafte Fehler auf Ihrer Seite).
Schlüsselverwaltung
Verwalten Sie API-Schlüssel über die REST API oder das Dashboard. Schlüsselverwaltungs-Endpoints verwenden JWT-Bearer-Authentifizierung (Ihr Benutzersitzungs-Token) — keine API-Schlüssel-Authentifizierung.
Schlüssel erstellen
/v1/keysJWT-Auth · Erstellt Schlüssel · Rohschlüssel EINMALIG zurückgegeben
curl -X POST https://api.azcomply.eu/v1/keys \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "CI/CD Pipeline",
"scopes": ["classify", "assess"],
"sandbox": false
}'
# Response (key shown ONCE — store it now):
{
"key_id": "...",
"raw_key": "az_live_FULL_KEY_SHOWN_ONCE_STORE_NOW",
"key_prefix": "az_live_abcd...",
"name": "CI/CD Pipeline",
"scopes": ["classify", "assess"],
"sandbox": false,
"created_at": "2026-03-25T14:00:00Z",
"warning": "Store this key securely. It will not be shown again."
}Schlüssel auflisten
/v1/keysJWT-Auth · Gibt alle Schlüssel Ihres Kontos zurück
curl https://api.azcomply.eu/v1/keys \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Schlüssel widerrufen
/v1/keys/{key_id}JWT-Auth · Sofortiger Widerruf · Idempotent
curl -X DELETE https://api.azcomply.eu/v1/keys/KEY_ID \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
# Returns 204 No ContentFehler
| Code | Name | Bedeutung |
|---|---|---|
| 200 | OK | Request succeeded |
| 201 | Created | Resource created (POST /v1/keys) |
| 202 | Accepted | Job queued (POST /v1/assess) |
| 401 | Unauthorized | Missing, invalid, or revoked API key |
| 402 | Payment Required | Insufficient credits for /v1/assess |
| 403 | Forbidden | Key exists but lacks required scope |
| 404 | Not Found | Job ID not found or belongs to different key |
| 409 | Conflict | Job failed — error field contains details |
| 410 | Gone | Job expired (results retained 7 days) |
| 422 | Unprocessable | Validation error — missing required fields |
| 425 | Too Early | Job result not yet ready — retry after Retry-After seconds |
| 429 | Too Many Requests | Daily rate limit exceeded — see X-RateLimit-* headers |
| 500 | Server Error | Internal error — transient, retry with backoff |
Fehlerformat
Alle Fehler geben einen JSON-Body mit einem detail-Feld zurück:
// 401 Unauthorized
{
"detail": "Invalid or revoked API key."
}
// 402 Payment Required
{
"detail": "Insufficient credits. Purchase more at https://azcomply.eu/pricing"
}
// 422 Validation Error
{
"detail": "Provide either 'description' (free-text) or 'facts' (structured dict)."
}
// 429 Rate Limit
{
"detail": "Daily rate limit of 500 calls exceeded. Resets at midnight UTC.",
// Headers also set:
// Retry-After: 3600
// X-RateLimit-Limit: 500
// X-RateLimit-Remaining: 0
}Ratenlimits
Ratenlimits gelten pro API-Schlüssel und werden täglich um 00:00 UTC zurückgesetzt. Das Standardlimit beträgt 500 Aufrufe/Tag. Monatliche Zähler werden am 1. jedes Monats zurückgesetzt.
| Endpoint | Standard-Tageslimit | Hinweise |
|---|---|---|
POST /v1/classify | 500 / key / day | Kostenlos, nur Engine. Keine Credit-Kosten. |
POST /v1/assess | 500 / key / day | Auch credit-limitiert. Es gilt der niedrigere Wert. |
GET /v1/jobs/* | 500 / key / day | In Intervallen von ≤5 Sekunden abfragen. |
Ratelimit-Header
Jede Antwort enthält diese Header:
Backoff-Strategie
Wenn Sie ein 429 erhalten, warten Sie die im Retry-After-Header angegebene Anzahl von Sekunden, bevor Sie es erneut versuchen.
import time, requests
def classify_with_backoff(description: str, api_key: str) -> dict:
for attempt in range(3):
r = requests.post(
"https://api.azcomply.eu/v1/classify",
headers={"X-API-Key": api_key},
json={"description": description},
)
if r.status_code == 429:
wait = int(r.headers.get("Retry-After", 60))
print(f"Rate limited. Retrying in {wait}s...")
time.sleep(wait)
continue
r.raise_for_status()
return r.json()
raise Exception("Rate limit exceeded after 3 attempts")Engine current · EU 2024/1689 · DSGVO-Datenresidenz: europe-west4
© 2026 AZComply — Erkennungswerkzeug, keine Rechtsberatung.