Skip to main content
La emision masiva es la tercera modalidad de emision del SIAT. Abris un lote sobre un punto de venta, emitis normalmente, y al cerrar el lote todas las facturas viajan juntas al SIAT comprimidas en uno o mas paquetes. Sirve cuando emitis mucho volumen y no necesitas la confirmacion del SIAT factura por factura: en vez de una llamada por documento, se hace una por paquete. El lote es multi-sector: acepta facturas de cualquier sector que tu empresa tenga autorizado, y al cerrarlo se arma un paquete por cada combinacion de sector y tipo de documento. Un solo lote alcanza para emitir de todos tus sectores.
No confundir con /invoices/batch. Ese endpoint manda hasta 20 facturas en un request, pero cada una se envia al SIAT por separado y en linea. La emision masiva es otra modalidad ante el SIAT, con su propio codigo de emision y su propio ciclo.

Las tres modalidades

La masiva se emite en linea: necesita el SIAT operativo. Si el punto de venta entra en contingencia, las facturas nuevas salen como contingencia aunque haya un lote abierto; las que ya entraron al lote quedan intactas y se envian cuando lo cierres. Para contingencia, ver Contingencia.

Ciclo de un lote

1

Abrir el lote

POST /api/v1/massive sobre el punto de venta.
2

Emitir normalmente

Las facturas se crean con POST /api/v1/invoices como siempre. Mientras el lote este abierto quedan en estado MASSIVE_PENDING — con su CUF definitivo, listas para imprimir y entregar — pero todavia no viajaron al SIAT.
3

Cerrar el lote

POST /api/v1/massive/end. Se arman los paquetes, se envian y se validan. Cada factura queda ACCEPTED o REJECTED con su motivo.
4

Rectificar, si hubo rechazos

POST /api/v1/massive/rectify regenera las rechazadas y las devuelve a la cola. Despues volves a cerrar.

Abrir un lote

POST /api/v1/massive Es idempotente: si el punto de venta ya tiene un lote abierto, la llamada devuelve ese lote en vez de crear otro. Un punto de venta no puede tener dos lotes abiertos a la vez.
Respuesta 201
El lote no lleva sector. El sector lo trae cada factura al emitirse, y ahi es donde se valida: si no esta soportado o tu empresa no lo tiene autorizado ante el SIN, el 422 (SECTOR_NOT_SUPPORTED / SECTOR_NOT_AUTHORIZED) lo devuelve POST /api/v1/invoices, no la apertura del lote.
Hasta la version anterior el lote fijaba sector e invoiceType al abrirse y todo el lote viajaba a ese sector. Si los seguis mandando en el body, se ignoran.

Cerrar el lote

POST /api/v1/massive/end
En lotes grandes esta llamada puede tardar varios minutos: envia y valida cada paquete contra el SIAT. Configura el timeout de tu cliente HTTP en consecuencia.
Es reentrante. Si un cierre se corta a mitad, volver a llamarlo retoma donde quedo: los paquetes ya validados no se reenvian.

Repeticiones (certificacion)

repeticiones manda el mismo paquete N veces al SIAT: el archivo se arma una sola vez y se reenvia tal cual. Es lo que pide Impuestos para certificar la modalidad masiva, igual que en el reenvio del paquete de contingencia. No cambia el resultado fiscal: cada repeticion recibe su propio codigoRecepcion y las facturas se marcan una sola vez. Decide la primera repeticion que valida, y el paquete se queda con su codigoRecepcion: las siguientes rebotan con [1000] EL CUF ENVIADO YA EXISTE EN LA BASE DE DATOS DEL SIN, que es lo esperado (el SIAT ya ingesto el paquete) y no un rechazo. En operacion normal se omite.
Respuesta 200
El message distingue cuatro desenlaces que no hay que confundir:
  • Sin facturas — el lote se cerro vacio, no habia nada que enviar.
  • Todo aceptado — facturasRechazadas, packsRechazados y packsPendientes en 0.
  • Pendiente de validacion — packsPendientes mayor a 0 y sin rechazos: el SIAT recibio los paquetes pero todavia los esta procesando (codigo 901).
  • Con rechazos — parte del lote quedo REJECTED; hay que rectificar.
Un paquete pendiente no es un rechazo: no lo rectifiques. Con paquetes grandes el SIAT suele contestar 901 a la validacion inmediata porque todavia esta procesando. El paquete queda en SENT, sus facturas en ACCEPTED, y el reconciliador las valida por CUF en los minutos siguientes. /massive/rectify les regeneraria el CUF a facturas que el SIAT ya tiene, y las duplicaria.
Mira siempre paquetes[]: con un lote multi-sector, “2 de 13 paquetes rechazados” no te dice que sectores no entraron. Cada entrada trae su sector, su estado y el motivo del SIAT si lo hubo.

Ver el lote

GET /api/v1/massive/{posId} Devuelve el lote abierto del punto de venta con el detalle de cada paquete: cuantas facturas lleva, el receptionCode que devolvio el SIAT y su estado.
Respuesta 200
Estados de un paquete:

Rectificar rechazos

POST /api/v1/massive/rectify A las facturas que el SIAT rechazo se les regenera el CUF, el XML, la firma y el QR contra el CUFD vigente, y vuelven a la cola del lote. Despues hay que cerrar de nuevo con /massive/end para reenviarlas. Las facturas ya aceptadas no se tocan: su CUF esta validado por el SIAT y regenerarlo cambiaria un documento fiscal firme.
Respuesta 200

Estados de la factura en masiva

Una factura en MASSIVE_PENDING ya tiene su CUF definitivo y su QR: podes entregarla e imprimirla. El SIAT validara ese mismo documento cuando cierres el lote.

Limites

Al cerrar, las facturas se agrupan primero por sector y tipo de documento — un paquete SIAT tiene que ser homogeneo en esa combinacion — y cada grupo se parte despues en tantos paquetes de 500 como haga falta.