Skip to main content
AZComply API-Referenz
v1Zuletzt aktualisiert 2026-03-25

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

https://api.azcomply.eu/v1

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.

X-API-Key: az_live_YOUR_SECRET_KEY
⚠️
Halten Sie Ihren API-Schlüssel geheim. Setzen Sie ihn niemals in clientseitigem Code, öffentlichen Repos oder Logs ein. Widerrufen Sie ihn bei Kompromittierung sofort im Dashboard → API-Schlüssel.

Schlüsseltypen

PräfixTypVerhalten
az_live_*LiveEchte Klassifizierung, verbraucht Credits auf /v1/assess
az_test_*SandboxKein 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

Antwort · JSON
{
  "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"
}
gate_pass: false bedeutet, dass das System unerfüllte Pflichten hatverwenden Sie obligations_count und fine_exposure, um Abhilfemaßnahmen zu priorisieren. Führen Sie POST /v1/assess aus, um das vollständige Aktionsplan-Narrativ zu erhalten.

POST /v1/classify

POST
/v1/classify

Deterministische 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.

💡
Bereich erforderlich: 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

ParameterTypPflichtfeldBeschreibung
descriptionstringPflichtfeldPlain-text description of the AI system (10–14,000 chars)e.g. "CV ranking AI used in HR"
system_namestringOptionalHuman-readable name for the systeme.g. "HireBot v2"
jurisdictionsstring[]OptionalISO-2 country codes. Loads national law context.e.g. ["FR", "BE"]

Modus B — Strukturierte Fakten

ParameterTypPflichtfeldBeschreibung
factsobjectPflichtfeldPre-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"]
  }'
Antwort · JSON
{
  "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

ParameterTypPflichtfeldBeschreibung
risk_levelstringPflichtfeldPROHIBITED | HIGH_RISK | LIMITED_RISK | MINIMAL_RISK | GPAI | GPAI_SYSTEMIC | UNCODED
operator_rolestringPflichtfeldPROVIDER | DEPLOYER | IMPORTER | DISTRIBUTOR
annex_iii_categorystring | nullPflichtfeldMatched Annex III category if HIGH_RISK, e.g. "Employment & HR — Annex III §4(a)"
obligations_countintegerPflichtfeldNumber of EU AI Act obligations applicable to this system
fria_requiredbooleanPflichtfeldWhether a Fundamental Rights Impact Assessment is required (Art. 27)
national_law_flagsstring[]PflichtfeldNational law indicators detected, e.g. ["CAO_39_BE", "CNIL_FR"]
compliance_deadlinestring | nullPflichtfeldISO 8601 date of applicable compliance deadline
fine_exposureobjectPflichtfeld{ max_tier: string, max_eur: integer } — maximum fine under EU AI Act
gate_passbooleanPflichtfeldTrue only if no obligations detected (MINIMAL_RISK with no flags)
engine_versionstringPflichtfeldClassification engine version from /v1/systems/engine-info
sandboxbooleanPflichtfeldTrue 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

POST
/v1/assess

Vollstä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.

💡
Bereich erforderlich: assess (standardmäßig nicht enthalten — aktivieren Sie ihn beim Erstellen Ihres Schlüssels). Kosten: 1 Credit, nur nach erfolgreichem Abschluss der Pipeline abgezogen.

Anfragetext

ParameterTypPflichtfeldBeschreibung
descriptionstringPflichtfeldPlain-text description of the AI system (20–14,000 chars)
languagestringOptionalReport language: en, fr, nl, de, it, es. Default: en
jurisdictionsstring[]OptionalISO-2 country codes for national law context
webhook_urlstringOptionalHTTPS URL to receive classification.completed / classification.failed events
webhook_secretstringOptionalSecret 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"
  }'
Antwort · JSON
{
  "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"
StatusBedeutungAktion
queuedAuftrag empfangen, warte auf einen WorkerWarten und erneut abfragen
processingPipeline läuft (LLM-Personas aktiv)Warten und erneut abfragen
completedAlle Stufen abgeschlossen, Ergebnis verfügbar/result abrufen
failedPipeline-Fehler — das Feld error enthält DetailsFehler prüfen und erneut versuchen

Ergebnis

Wenn status === completed, rufen Sie das vollständige Ergebnis ab:

GET
/v1/jobs/{job_id}/result

Gibt den vollständigen JSON-Bericht zurück, wenn der Auftrag abgeschlossen ist

Antwort · JSON
{
  "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

POST
/v1/workpapers

Bezahltes 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.

💡
Bereich erforderlich: assess. Kosten: 1 Credit, nur nach erfolgreichem Abschluss des Workpapers finalisiert. Verwenden Sie Idempotency-Key bei Wiederholungsversuchen, um doppelte Reservierungen zu vermeiden.

Anfragetext

ParameterTypPflichtfeldBeschreibung
descriptionstringPflichtfeldPlain-text description of the AI system (20-14,000 chars)
system_namestringOptionalDisplay name used in the generated workpaper
jurisdictionsstring[]OptionalISO-2 country codes for national law context
brief_scopeauto | single | composite | portfolioOptionalUse composite for independently operable component suites
componentsobject[]OptionalComponent boundaries for composite-system workpapers
include_coverage_overlaybooleanOptionalAdds 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" }
    ]
  }'
Antwort · JSON
{
  "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

EreignisWannDatenfelder
classification.completedPipeline erfolgreichjob_id, risk_level, obligations_count, fria_required, compliance_deadline
classification.failedPipeline fehlgeschlagen (Credit freigegeben)job_id, error

Header bei jeder Zustellung

X-AZComply-Signature: sha256=<HMAC-SHA256(body, secret)>
X-AZComply-Event: classification.completed
X-AZComply-Timestamp: 1711365000
Content-Type: application/json

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 "", 200

Wiederholungslogik

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).

⚠️
Ihr Endpoint muss innerhalb von 10 Sekunden. Geben Sie sofort 200 zurück und verarbeiten Sie den Payload asynchron — führen Sie im Webhook-Handler niemals langsame Operationen synchron durch.

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

POST
/v1/keys

JWT-Auth · Erstellt Schlüssel · Rohschlüssel EINMALIG zurückgegeben

⚠️
Der rohe Schlüssel wird nur einmal in der Erstellungsantwort zurückgegeben und niemals gespeichert. Speichern Sie ihn sofort in einem Secret Manager — er kann nicht erneut abgerufen werden.
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

GET
/v1/keys

JWT-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

DELETE
/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 Content

Fehler

CodeNameBedeutung
200OKRequest succeeded
201CreatedResource created (POST /v1/keys)
202AcceptedJob queued (POST /v1/assess)
401UnauthorizedMissing, invalid, or revoked API key
402Payment RequiredInsufficient credits for /v1/assess
403ForbiddenKey exists but lacks required scope
404Not FoundJob ID not found or belongs to different key
409ConflictJob failed — error field contains details
410GoneJob expired (results retained 7 days)
422UnprocessableValidation error — missing required fields
425Too EarlyJob result not yet ready — retry after Retry-After seconds
429Too Many RequestsDaily rate limit exceeded — see X-RateLimit-* headers
500Server ErrorInternal error — transient, retry with backoff

Fehlerformat

Alle Fehler geben einen JSON-Body mit einem detail-Feld zurück:

Antwort · JSON
// 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.

EndpointStandard-TageslimitHinweise
POST /v1/classify500 / key / dayKostenlos, nur Engine. Keine Credit-Kosten.
POST /v1/assess500 / key / dayAuch credit-limitiert. Es gilt der niedrigere Wert.
GET /v1/jobs/*500 / key / dayIn Intervallen von ≤5 Sekunden abfragen.

Ratelimit-Header

Jede Antwort enthält diese Header:

X-RateLimit-Limit: 500
X-RateLimit-Remaining: 342
Retry-After: 3600 # only on 429

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.

API Reference - AZComply