> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coupons.piixan.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK Python

> Instalación y uso del cliente Python: eventos, decisiones, ejecución, lotes y respaldo.

```sh theme={null}
uv add motor-decision-sdk   # o pip install motor-decision-sdk
```

```python theme={null}
from motor_decision_sdk import Motor

motor = Motor(
    "https://api.coupons.piixan.ai",
    client_id="cred_…",
    client_secret=os.environ["MOTOR_SECRET"],
    respaldo=lambda ref, ctx: 0,   # tu regla cuando el motor no responde
    timeout_s=0.3,
)

# 1. Publicar eventos (en lotes de 1.000, idempotente)
resumen = motor.publicar_eventos(eventos)          # {"aceptados", "duplicados", "rechazados"}

# 2. Decidir en línea
d = motor.decidir("c_9f1e…", canal="push", campana_id="camp-2026-11")
aplicar(d.accion)
motor.confirmar_ejecucion(d.decision_id, ejecutada=True)

# 3. Una campaña entera
job = motor.pedir_lote("camp-2026-11", todos=True)
motor.esperar_lote(job)
for decision in motor.resultado_lote(job):
    ...
```

Lo que hace por ti: renueva el token, reintenta con espera exponencial y *jitter*
respetando `Retry-After`, mantiene la misma `Idempotency-Key` entre reintentos,
aplica y registra el respaldo, y verifica webhooks (`verificar_webhook`).
`motor.metricas` expone peticiones, reintentos, respaldos y esperas para tu
monitorización.
