Guía · Estado del comprobante

Estado de un comprobante electrónico: ¿webhook o consulta?

Cuando emitís, Hacienda no responde aceptado al instante: valida de forma asíncrona. Mucha gente asume que necesita un webhook para enterarse del resultado. Con Plaxp no lo necesitás, y en esta página te explicamos por qué —siendo honestos con cómo funciona de verdad.

¿Plaxp manda webhooks del estado?

No. Y es a propósito. Plaxp no expone webhooks salientes. En su lugar hacemos polling interno contra Hacienda: nuestro backend consulta el estado del comprobante de forma periódica (cada ~5 minutos, con backoff) hasta que Hacienda responde, y guarda el resultado. Vos leés ese resultado cuando querés, consultando por la clave.

Lo que te ahorrás

No tenés que exponer un endpoint público para recibir webhooks, ni asegurarlo, ni reintentar entregas fallidas, ni implementar tu propio polling contra Hacienda. Nosotros hacemos el polling; vos solo consultás por la clave.

¿Cómo consulto el estado, entonces?

Con un GET a /api/consultar/:clave, usando la clave numérica de 50 dígitos que recibiste al emitir. Te devuelve el estado que Hacienda ya nos confirmó:

consultar.sh
curl 'https://api.plaxp.com/api/consultar/<clave-de-50-digitos>' \
  -H "X-API-Key: $PLAXP_API_KEY"
# → { estado_hacienda: "aceptado" | "rechazado" | "procesando",
#     mensaje_hacienda, respuesta_xml_hacienda }

Mientras Hacienda no responde, el estado es procesando. Cuando resuelve, pasa a aceptado o rechazado —y ese cambio lo detectamos nosotros por vos, no vos preguntándole a Hacienda.

¿Qué patrón uso en mi integración?

Como emitir devuelve HTTP 202 (asíncrono), guardás la clave y consultás el estado un rato después. Dos formas típicas:

patron.js
// 1) Emitís → guardás la clave del 202
const { data } = await emitir(venta);         // { clave, consecutivo }
await db.save({ clave: data.clave, estado: 'procesando' });

// 2) Consultás por la clave cuando la necesitás:
//    - al abrir el detalle de la venta, o
//    - con un cron liviano de tu lado (cada X min) sobre las claves 'procesando'
const { estado_hacienda } = await consultar(data.clave);
if (estado_hacienda !== 'procesando') {
  await db.update({ clave: data.clave, estado: estado_hacienda });
}

La diferencia con un webhook

Un webhook empuja el estado a tu servidor; nuestro modelo hace que vos tirés del estado cuando lo necesitás. Como el polling contra Hacienda ya lo hicimos nosotros, tu consulta es instantánea (lee lo que guardamos), no una llamada lenta a Hacienda.

¿Y si sale rechazado?

El estado rechazado viene con el mensaje_hacienda y el XML de respuesta, que traen el código de rechazo. Qué significa cada código y cómo evitarlo está en el catálogo de . Para el resto del flujo de emisión, mirá la .

¿Integrando la consulta de estado?

Te damos credenciales de sandbox y te acompañamos en la integración. Escribinos y arrancamos hoy.

Solicitar acceso a la API

Te acompañamos en la puesta en marcha · soporte rápido de gente real · fácil de usar para todo tu equipo. Somos gente ayudando gente.