# Piixan Coupons > Documentación pública de la API de datos v1: eventos, decisiones, ejecución y lotes. - [Introducción](https://piixan.mintlify.app/guias/introduccion.md): Qué hace el motor de decisión de cupones y cómo se integra un CRM con él. - [Modelo mental](https://piixan.mintlify.app/guias/modelo-mental.md): Cómo piensa el motor: eventos, decisiones, ejecución y aprendizaje, y por qué cada paso importa. - [Autenticación](https://piixan.mintlify.app/guias/autenticacion.md): Credenciales por sistema, tokens de 15 minutos, ámbitos mínimos y rotación. - [Alta del inquilino](https://piixan.mintlify.app/guias/alta-del-inquilino.md): Los pasos desde la cuenta hasta producción, y qué exige cada uno. - [Contrato de eventos v1](https://piixan.mintlify.app/guias/contrato-eventos.md): Los seis tipos de evento que el CRM publica en POST /v1/eventos, campo a campo, con ejemplos. - [Validador](https://piixan.mintlify.app/guias/validador.md): Comprueba tus ficheros de eventos v1 antes de enviarlos: esquema, cobertura, IVA, cupones y huecos. - [Carga de histórico](https://piixan.mintlify.app/guias/carga-de-historico.md): El modelo canónico de origen: las ocho tablas que pedimos a cualquier CRM y cómo se transforman en eventos v1. - [Decisiones en línea](https://piixan.mintlify.app/guias/decisiones.md): POST /v1/decisiones: una decisión por cliente en menos de 100 ms, con propensión, motivo y caducidad. - [Confirmar la ejecución](https://piixan.mintlify.app/guias/ejecucion.md): POST /v1/decisiones/{id}/ejecucion: obligatorio para que el motor aprenda de sus decisiones. - [Lotes de decisiones](https://piixan.mintlify.app/guias/lotes.md): POST /v1/lotes-decision: una campaña entera, con resultado descargable y aviso por webhook. - [Webhooks](https://piixan.mintlify.app/guias/webhooks.md): lote.completado: aviso firmado con HMAC cuando termina un lote, y cómo verificarlo. - [Idempotencia](https://piixan.mintlify.app/guias/idempotencia.md): Reintentar es seguro: eventos por event_id, decisiones por Idempotency-Key. - [Respaldo](https://piixan.mintlify.app/guias/respaldo.md): Qué hacer cuando el motor no responde: tu regla, registrada como decisión de respaldo. - [Errores](https://piixan.mintlify.app/guias/errores.md): Catálogo cerrado de códigos de error: estado HTTP, causa y cómo corregirlo. - [Límites](https://piixan.mintlify.app/guias/limites.md): Ritmo, ráfagas, cuotas y qué pasa al superarlos. - [SDK Python](https://piixan.mintlify.app/guias/sdk-python.md): Instalación y uso del cliente Python: eventos, decisiones, ejecución, lotes y respaldo. - [SDK de JavaScript / TypeScript](https://piixan.mintlify.app/guias/sdk-js.md): Cliente fino sin dependencias para Node ≥ 20 y navegadores, con token, reintentos, respaldo, lotes y webhooks. - [Cambios](https://piixan.mintlify.app/guias/changelog.md): Historial de versiones de la API de datos. - [Definir una campaña](https://piixan.mintlify.app/api-reference/decisiones/definir-una-campaña.md): Canal y presupuesto (envíos o descuento esperado) que el decisor aplica antes de aleatorizar (ADR-03). - [Sustituir el catálogo de acciones](https://piixan.mintlify.app/api-reference/decisiones/sustituir-el-catálogo-de-acciones.md): El menú de cupones con su coste y descuento (§9.1). Una acción nueva empieza sin soporte: recibe exploración dirigida hasta tenerlo (§10.4). - [Pedir una decisión en línea](https://piixan.mintlify.app/api-reference/decisiones/pedir-una-decisión-en-línea.md): Decide para un cliente ahora (menos de 100 ms). Con `Idempotency-Key`, repetir la petición devuelve **la misma decisión** durante 24 horas (ADR-21). Un cliente con una ventana de recompensa abierta recibe «nada» con la decisión abierta (ADR-09). Con el ámbito `explicar:leer`, la respuesta incluye μ… - [Registrar una decisión de respaldo](https://piixan.mintlify.app/api-reference/decisiones/registrar-una-decisión-de-respaldo.md): El SDK la envía cuando aplicó la regla del cliente porque el motor no respondió o estaba en pausa. Así el registro sigue completo (propensión 1). - [Confirmar la ejecución](https://piixan.mintlify.app/api-reference/decisiones/confirmar-la-ejecución.md): Obligatorio para que el aprendizaje sea válido (§9.1 c, ADR-11). Una sola confirmación por decisión, dentro de los 7 días de `caduca_en`. Un `decision_id` alterado, ajeno o desconocido responde «no existe». - [Pedir un lote de decisiones](https://piixan.mintlify.app/api-reference/decisiones/pedir-un-lote-de-decisiones.md): Una campaña entera. Un trabajo en curso por inquilino. Al terminar, el resultado (JSONL, una decisión por línea) se sirve en `/v1/lotes-decision/{job_id}/resultado` y se avisa por webhook `lote.completado` firmado. - [Estado de un lote](https://piixan.mintlify.app/api-reference/decisiones/estado-de-un-lote.md): `en_cola` → `en_curso` → `completado` (o `fallido`). Con `completado`, el resultado se descarga en `GET /v1/lotes-decision/{job_id}/resultado`; el webhook `lote.completado` avisa sin necesidad de consultar. - [Resultado de un lote](https://piixan.mintlify.app/api-reference/decisiones/resultado-de-un-lote.md): JSONL: una decisión por línea, con el mismo cuerpo que `POST /v1/decisiones`. - [Borrar un cliente](https://piixan.mintlify.app/api-reference/clientes/borrar-un-cliente.md): Derecho al olvido (ARCO). El borrado se programa y un trabajo lo aplica a eventos, decisiones, ficheros analíticos y copias según la retención. - [Exportar un cliente](https://piixan.mintlify.app/api-reference/clientes/exportar-un-cliente.md): Derecho de acceso (ARCO): todo lo que el motor guarda de un `cliente_ref`. Cada consulta queda en la bitácora de accesos. - [Publicar eventos](https://piixan.mintlify.app/api-reference/eventos/publicar-eventos.md): Hasta 1.000 eventos y 1 MB por lote. Idempotente por `event_id`: reenviar un lote no duplica nada. La respuesta dice cuántos se aceptaron, cuántos eran duplicados y cuáles se rechazaron, con posición, campo y motivo. - [Obtener un token](https://piixan.mintlify.app/api-reference/autenticación/obtener-un-token.md): Intercambia las credenciales del sistema por un token de 15 minutos. Un secreto incorrecto, una credencial revocada o caducada responden igual. ## OpenAPI Specs - [v1](/openapi/v1.json)