AZComply Referencia API
La API de AZComply le proporciona acceso programático al único motor de clasificación determinista del Reglamento IA de la UE del mundo. Integre la detección de riesgos regulatorios directamente en sus pipelines CI/CD, flujos de trabajo de cumplimiento o aplicaciones empresariales.
Dos niveles: POST /v1/classify ejecuta el motor Python puro en <100 ms sin créditos ni LLM. POST /v1/assess ejecuta la pipeline LLM completa de 9 personas de forma asíncrona para análisis narrativo, planes de acción e informes listos para PDF (1 crédito por evaluación).
/v1/classify
Síncrono · Gratuito · <100 ms · Solo motor
/v1/assess
Asíncrono · 1 crédito · ~60 s · Pipeline completa
Claves API
az_live_* / az_test_* · SHA-256 almacenado
URL base
Todas las solicitudes deben usar HTTPS. Las conexiones HTTP serán rechazadas.
Control de versiones
La API tiene control de versiones mediante la ruta URL (/v1/). Los cambios incompatibles se publicarán bajo un nuevo prefijo de versión (p. ej. /v2/) con un aviso de obsolescencia de 12 meses. La versión del motor del Reglamento IA de la UE se devuelve en cada respuesta como engine_version.
Autenticación
La API de AZComply utiliza claves API para la autenticación. Incluya su clave en cada solicitud mediante la cabecera HTTP X-API-Key.
Tipos de clave
| Prefijo | Tipo | Comportamiento |
|---|---|---|
az_live_* | Producción | Clasificación real, consume créditos en /v1/assess |
az_test_* | Sandbox | Sin LLM, sin créditos. /v1/assess devuelve al instante un resultado simulado determinista |
Modo sandbox
Utilice claves az_test_* en su entorno de desarrollo y CI/CD. Las llamadas a POST /v1/assess devuelven de inmediato un resultado determinista (sin LLM, sin trabajo en segundo plano, sin coste de créditos). El indicador sandbox: true siempre está presente en las respuestas de sandbox.
Inicio rápido
Realice su primera llamada a la API en menos de 2 minutos.
1. Crear una clave
Acceda al Panel → Claves API y haga clic en Crear clave. La clave completa se muestra una sola vez — guárdela en su gestor de secretos (AWS Secrets Manager, GitHub Secrets, Vault, etc.).
2. Realizar la primera llamada
Clasifique la descripción de un sistema de IA. Sin créditos consumidos.
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. Interpretar la respuesta
{
"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/classifyClasificación determinista · Sin créditos · <100 ms
Clasifica un sistema de IA según el Reglamento IA UE 2024/1689 utilizando el motor Python determinista. Cero coste de LLM. Devuelve el nivel de riesgo, el recuento de obligaciones, el requisito FRIA, la exposición a multas y el plazo de cumplimiento en menos de 100 ms.
classify (incluido en todas las claves por defecto). Este endpoint es gratuito — el motor es Python puro y no cuesta nada ejecutarlo.Cuerpo de la solicitud
Dos modos de entrada — proporcione description (texto libre) o facts (estructurado).
Modo A — Texto libre
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
description | string | Obligatorio | Plain-text description of the AI system (10–14,000 chars)e.g. "CV ranking AI used in HR" |
system_name | string | Opcional | Human-readable name for the systeme.g. "HireBot v2" |
jurisdictions | string[] | Opcional | ISO-2 country codes. Loads national law context.e.g. ["FR", "BE"] |
Modo B — Hechos estructurados
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
facts | object | Obligatorio | Pre-structured SystemFacts fields. Useful for CI/CD where you know the system properties.e.g. {"is_hr_tool": true, "operator_role": "DEPLOYER"} |
Respuesta
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"
}Campos de respuesta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
risk_level | string | Obligatorio | PROHIBITED | HIGH_RISK | LIMITED_RISK | MINIMAL_RISK | GPAI | GPAI_SYSTEMIC | UNCODED |
operator_role | string | Obligatorio | PROVIDER | DEPLOYER | IMPORTER | DISTRIBUTOR |
annex_iii_category | string | null | Obligatorio | Matched Annex III category if HIGH_RISK, e.g. "Employment & HR — Annex III §4(a)" |
obligations_count | integer | Obligatorio | Number of EU AI Act obligations applicable to this system |
fria_required | boolean | Obligatorio | Whether a Fundamental Rights Impact Assessment is required (Art. 27) |
national_law_flags | string[] | Obligatorio | National law indicators detected, e.g. ["CAO_39_BE", "CNIL_FR"] |
compliance_deadline | string | null | Obligatorio | ISO 8601 date of applicable compliance deadline |
fine_exposure | object | Obligatorio | { max_tier: string, max_eur: integer } — maximum fine under EU AI Act |
gate_pass | boolean | Obligatorio | True only if no obligations detected (MINIMAL_RISK with no flags) |
engine_version | string | Obligatorio | Classification engine version from /v1/systems/engine-info |
sandbox | boolean | Obligatorio | True if request was made with an az_test_* key |
Modo estructurado (CI/CD)
Proporcione las propiedades del sistema preextraídas como hechos estructurados para obtener resultados deterministas en pipelines automatizadas:
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/assessPipeline LLM completa de 9 personas · 1 crédito · ~60 s · Async 202
Ejecuta la pipeline de evaluación completa: extracción de hechos, clasificación determinista, 9 personas LLM (crítico lógico, asesor FRIA, arquitecto del plan de acción, redactor de informes, etc.) y devuelve un narrativo completo con plan de acción. Devuelve de inmediato 202 Accepted con un job_id.
assess (no incluido por defecto — actívelo al crear su clave). Coste: 1 crédito, descontado solo tras la finalización correcta de la pipeline.Cuerpo de la solicitud
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
description | string | Obligatorio | Plain-text description of the AI system (20–14,000 chars) |
language | string | Opcional | Report language: en, fr, nl, de, it, es. Default: en |
jurisdictions | string[] | Opcional | ISO-2 country codes for national law context |
webhook_url | string | Opcional | HTTPS URL to receive classification.completed / classification.failed events |
webhook_secret | string | Opcional | 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
}Sondeo de trabajo
docs.assess.pollingDesc La cabecera Retry-After indica el intervalo de sondeo recomendado.
# 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"| Estado | Significado | Acción |
|---|---|---|
queued | Trabajo recibido, esperando a un worker | Espere, sondee de nuevo |
processing | Pipeline en ejecución (personas LLM activas) | Espere, sondee de nuevo |
completed | Todas las etapas completadas, resultado disponible | Obtenga /result |
failed | Error de pipeline — el campo error contiene los detalles | Compruebe el error y vuelva a intentarlo |
Resultado
Cuando status === completed, obtenga el resultado completo:
/v1/jobs/{job_id}/resultDevuelve el informe JSON completo cuando el trabajo está completado
{
"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/workpapersWorkpaper Markdown de pago · 1 crédito · Async 202 · Transporte API/MCP
Genera un workpaper Markdown de calidad de pago para clientes API headless y agentes MCP. Utiliza el mismo flujo de extracción QAE alojada, clasificación determinista, reserva de crédito, sondeo de trabajos y retención de resultados que la ruta de informes API de pago, pero devuelve un resultado de trabajo legible por máquina que contiene markdown en lugar de un artefacto de informe PDF.
assess. Coste: 1 crédito, finalizado solo tras la finalización correcta del workpaper. Utilice Idempotency-Key en los reintentos para evitar reservas duplicadas.Cuerpo de la solicitud
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
description | string | Obligatorio | Plain-text description of the AI system (20-14,000 chars) |
system_name | string | Opcional | Display name used in the generated workpaper |
jurisdictions | string[] | Opcional | ISO-2 country codes for national law context |
brief_scope | auto | single | composite | portfolio | Opcional | Use composite for independently operable component suites |
components | object[] | Opcional | Component boundaries for composite-system workpapers |
include_coverage_overlay | boolean | Opcional | 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
}Resultado
docs.workpapers.resultDesc
Webhooks
Configure una URL de webhook en POST /v1/assess para recibir notificaciones en tiempo real cuando una evaluación se complete o falle. AZComply firma cada entrega con HMAC-SHA256 — verifique siempre la firma antes de procesar.
Eventos
| Evento | Cuándo | campos de datos |
|---|---|---|
classification.completed | Pipeline correcta | job_id, risk_level, obligations_count, fria_required, compliance_deadline |
classification.failed | Pipeline fallida (crédito liberado) | job_id, error |
Cabeceras en cada entrega
Verificar firma
Verifique siempre la cabecera X-AZComply-Signature antes de procesar los payloads de webhook.
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 "", 200Lógica de reintento
AZComply reintenta las entregas fallidas hasta 3 veces con backoff exponencial: 2 s → 4 s → 8 s. Tras 3 intentos fallidos el evento se descarta — compruebe la disponibilidad de su endpoint. Las respuestas 4xx no se reintentan (trátelas como fallos permanentes en su extremo).
Gestión de claves
Gestione las claves API a través de la API REST o el Panel. Los endpoints de gestión de claves utilizan autenticación JWT bearer (su token de sesión de usuario) — no la autenticación por clave API.
Crear clave
/v1/keysAuth JWT · Crea clave · Clave sin procesar devuelta UNA VEZ
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."
}Listar claves
/v1/keysAuth JWT · Devuelve todas las claves de su cuenta
curl https://api.azcomply.eu/v1/keys \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Revocar clave
/v1/keys/{key_id}Auth JWT · Revocación inmediata · Idempotente
curl -X DELETE https://api.azcomply.eu/v1/keys/KEY_ID \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
# Returns 204 No ContentErrores
| Código | Nombre | Significado |
|---|---|---|
| 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 |
Formato de error
Todos los errores devuelven un cuerpo JSON con un campo detail:
// 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
}Límites de velocidad
Los límites de velocidad son por clave API y se reinician diariamente a las 00:00 UTC. El límite predeterminado es de 500 llamadas/día. Los contadores mensuales se reinician el día 1 de cada mes.
| Endpoint | Límite diario predeterminado | Notas |
|---|---|---|
POST /v1/classify | 500 / key / day | Gratuito, solo motor. Sin coste de créditos. |
POST /v1/assess | 500 / key / day | También limitado por créditos. Se aplica el límite más bajo. |
GET /v1/jobs/* | 500 / key / day | Sondee a intervalos de ≤5 segundos. |
Cabeceras de límite de velocidad
Cada respuesta incluye estas cabeceras:
Estrategia de backoff
Si recibe un 429, espere el número de segundos indicado en la cabecera Retry-After antes de volver a intentarlo.
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")Motor current · UE 2024/1689 · Residencia de datos RGPD: europe-west4
© 2026 AZComply — Herramienta de detección, no asesoramiento jurídico.