Autenticación
Una llave por cuenta, en el encabezado Authorization. No hay OAuth, ni tokens que
expiren, ni refresh: una llave vive hasta que la revocas.
otk_
y se enseñan una sola vez, al crearlas: guardamos su
huella, no la llave.
El esquema es obligatorio
Authorization: Bearer <llave>, con la palabra
Bearer
y un espacio. Una llave suelta en el encabezado contesta
unauthorized
aunque sea
correcta: aceptarla sería una segunda forma de entrar, sin documentar, que después habría que mantener funcionando.
La llave es de la cuenta, no de una persona
Pertenece al despacho. Quien la creó puede irse y la integración sigue funcionando, que es justo lo que se quiere de una credencial de servidor. En la bitácora las acciones hechas con llave quedan a nombre de la llave.
Una cuenta puede tener varias, y conviene: una por integración, para poder revocar la de un proveedor sin tumbar las demás. Revocar es inmediato y no se deshace.
Qué emisor factura
La llave dice la cuenta; el emisor lo dice cada llamada, con issuer_id. Un despacho con
ciento cuarenta contribuyentes usa una sola llave y nombra el emisor en cada factura. Si la cuenta tiene uno solo,
puedes omitirlo.
Límites
600 peticiones cada 5 minutos por llave, y 300 cada 5 minutos por dirección IP. Si pasas cualquiera de los dos te
contestamos 429
con rate_limited
y el encabezado Retry-After, en segundos. Espera ese tiempo antes de volver a llamar.
Con el plan Básico, la API timbra hasta 100 facturas al mes. Cuentan todas las que la cuenta timbró ese mes,
también las del panel. La siguiente se contesta con 429,
invoice_limit_reached
y un Retry-After
que llega al día
1 del mes siguiente, hora del centro de México. El plan Pro no tiene ese límite. Leer, cancelar y repetir una
llamada con la misma Idempotency-Key
siguen funcionando.
Versión y estado
Todas las respuestas de /v1
traen el encabezado X-Oden-Tax-Api-Version: v1.
GET /v1/health
no pide llave. Contesta 200
con status, version
y time.
Sirve para saber si la API está arriba, no si tu llave funciona.
Errores
- unauthorized
- Falta la llave, no viene con el esquema Bearer, o fue revocada. 401.
- payment_required
- La cuenta tiene un pago pendiente. 402: no es que no puedas, es que nos debes.
- rate_limited
- Pasaste el límite de peticiones. 429, con Retry-After en segundos.