FISCALISTO / API
Lotes de facturas
Timbre hasta 1,000 facturas de un emisor con una sola solicitud, revisadas todas antes de empezar.
Un lote sirve para lo que se factura de golpe: las cuotas del mes de un condominio, las colegiaturas, las ventas del día de un marketplace. En lugar de mil solicitudes y sus límites, manda una.
curl https://api.fiscalisto.com/v1/invoice_batches \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Idempotency-Key: cuotas-2026-10" \
-H "Content-Type: application/json" \
-d '{
"name": "Cuotas de octubre",
"invoices": [
{
"reference": "depto-101",
"customer": "cus_OufpKqnrvx9p1",
"payment_form": "03",
"items": [{ "product": "prd_OufpKqnrvx9p1" }]
},
{
"reference": "depto-102",
"customer": { "tax_id": "ICV060329BY0", "legal_name": "INMOBILIARIA CVA", "tax_system": "601", "zip": "33826" },
"payment_form": "03",
"items": [{ "description": "Cuota de mantenimiento", "product_key": "80131500", "unit_price": 1500 }]
}
]
}'Cada factura del lote es el mismo cuerpo de POST /v1/invoices, sin issuer (el lote es de un emisor), sin type ni global (son facturas de ingreso) y con reference en lugar de metadata: su identificador de esa factura, que vuelve en el resultado.
Cómo se timbra
- Se revisan todas antes de empezar. Si una no pasa la revisión, la API responde
422batch_invalidconparamen la factura y el campo (invoices.3.items.0.unit_price) y no se timbra ninguna. Corríjala y mande el lote otra vez. - Se responde
202de inmediato, con el lote enstatus: "processing". - Se timbran en segundo plano, a la velocidad que permite el PAC. Cada factura timbrada manda su
invoice.stamped, como cualquier otra. - Al terminar llega
invoice_batch.completedy el lote quedacompleted, con cuántas se timbraron (stamped) y cuántas no (failed).
{
"id": "bat_OufpKqnrvx9p4hMdcoapAo5aaGJEme7mXj",
"object": "invoice_batch",
"status": "completed",
"total": 2,
"stamped": 1,
"failed": 1,
"processing": 0,
"invoices": [
{ "index": 0, "reference": "depto-101", "status": "valid", "invoice": "inv_OufpKqnrvx9p0mn7VjQ6JlfipKAkHWstOK", "uuid": "DB494B07-D6DE-4F70-8ED0-C8B864FF8717", "total": 1740, "error": null },
{ "index": 1, "reference": "depto-102", "status": "failed", "invoice": null, "uuid": null, "total": 1740, "error": "El SAT no reconoce el nombre del cliente. Escríbalo exactamente como en su constancia de situación fiscal, en mayúsculas y sin «S.A. de C.V.» ni otro régimen de capital." }
]
}Una factura puede fallar aunque pasó la revisión, si el SAT la rechaza (casi siempre por los datos del cliente). Esas no usan timbre: corríjalas y timbre cada una con POST /v1/invoices.
Consultar el avance
GET /v1/invoice_batches/{id} dice cuántas van y el estado de cada una. Si no usa webhooks, consúltelo cada pocos segundos hasta que diga completed.
Timbres
Cada factura timbrada usa un timbre, al timbrarse. Antes de mandar un lote grande revise que le alcancen con GET /v1/balance: si se acaban a la mitad, las que faltan quedan failed con el motivo en error. Después de comprar, mándelas en otro lote, con otra Idempotency-Key.
Repetirlo
Mandar el mismo lote con la misma Idempotency-Key contesta el lote que ya existe (202, como la primera vez, con idempotent-replayed: true), sin timbrar nada otra vez.