Facturación asincrónica por Lotes (encolada)
Utilizá la API de facturación electrónica de TusFacturas.app, para enviar a procesar lotes y obtener una respuesta asincrónica de su procesamiento, acelerando los tiempos de envío.
Una vez configurada tu cuenta y creado tu CUIT+PDV, podrás comenzar a emitir facturas electrónicas. Te sugerimos revisar el apartado de ¿Cómo empiezo? si es la primera vez que utilizas nuestros servicios

Podes enviar a facturar comprobantes de tipo A,B,C, M y comprobantes de tipo Factura de crédito electrónica MiPyme; ya sean facturas, notas de crédito, notas de débito y hasta facturas-recibos, pero no podrás enviar comprobantes de tipo E en ésta modalidad.
Tenés alguna duda del servicio? chequea las API FAQs, y si no encontrás lo que buscabas, contáctanos por los canales de atención que tenemos disponibles en la plataforma web www.tusfacturas.app
Al utilizar éste servicio los comprobantes que envíes quedarán en una cola de procesamiento. A medida que se van procesando, se te enviará un webhook para que puedas obtener la información generada.
Antes de comenzar, te sugerimos leer :
- 1.
- 2.La documentación "Webhooks (notificaciones)" para conocer cómo funciona el servicio de notificaciones.
post
https://www.tusfacturas.app/app/api
/v2/facturacion/lotes_encola
Facturación por Lotes asincrónica (encolada). Max: 100 requests por lote.
"requests debe ser un array (en JSON) que contiene cada uno de los comprobantes a emitir, según se define en la documentación de "Facturación".
- La cantidad máxima de requests por lote es de 100 comprobantes, pero debes tener en cuenta que por cuestiones de seguridad, nuestra plataforma funciona limitando su tiempo de procesamiento y podes llegar a obtener una respuesta de timeout (524). En caso de recibir un 524, los requests que enviaste, seguirán siendo procesados en background, y recibirás un hook con la respuesta de éxito o error de su encolamiento.
- Podes enviar en un mismo lote comprobantes de diferente tipo de comprobante. Ej: Podes enviar en el mismo lote Facturas A Y FACTURAS B.
- La fecha que envíes en cada comprobante determina cuándo será enviado a procesar, por lo que puedes enviar comprobantes a la cola de procesamiento con fecha posterior a hoy.
- Los request deben venir con el campo número en cero (0).
- Debes enviar un "external_reference" de manera obligatoria y debería ser único. TusFacturasAPP no realiza ésta validación, por lo que si envias +1 request con el mismo external_reference, tendrás problemas de tu lado para procesar las respuestas.
- Tu CUIT + PDV, debe tener una dirección de webhook definida, de manera obligatoria, ya que sin ella, no se podrán enviar a procesar los lotes y serán rechazados de manera instantánea.
- Al momento del envío del lote, la suscripción de tu espacio de trabajo debe encontrarse vigente, activa y con cupo disponible para emitir la cantidad de comprobante que estás enviando en el lote.
- Si se detecta al menos un (1) error de validación de datos, el lote se procesará parcialmente. De aquellos comprobantes con error obtendrás la respuesta al instante, no por un webhook.
La estructura de cada "request" debe ser acorde a los siguientes tipos de comprobante a generar (comprobantes de tipo A, comprobantes de tipo B, comprobantes de tipo C , Comprobantes de tipo Factura de crédito electrónica MiPyme) .
JSON
{
"apitoken": "xxxx",
"apikey": "xxxx",
"usertoken": "xxxxx",
"requests": [{
"apitoken": "xxxxx",
"apikey": "xxxxx",
"usertoken": "xxxxx",
"cliente": {
"documento_tipo": "DNI",
"condicion_iva": "CF",
"domicilio": "Av Sta Fe 23132",
"condicion_pago": "211",
"documento_nro": "71229384",
"razon_social": "Juan",
"provincia": "2",
"email": "[email protected]",
"envia_por_mail": "N"
},
"comprobante": {
"external_reference": "AAAA",
"rubro": "Sevicios web",
"percepciones_iva": 0,
"tipo": "FACTURA B",
"numero": 0,
"percepciones_iibb": 0,
"bonificacion": 0,
"operacion": "V",
"detalle": [{
"cantidad": 1,
"producto": {
"descripcion": "Hosting pagina web ",
"codigo": 37,
"lista_precios": "standard",
"leyenda": "",
"unidad_bulto": 1,
"alicuota": 21,
"precio_unitario_sin_iva": 114.88
}
}],
"fecha": "28/03/2022",
"rubro_grupo_contable": "Sevicios",
"total": 139.0,
"cotizacion": 1,
"moneda": "PES",
"punto_venta": 3,
"tributos": [],
"exentos": "0",
"impuestos_internos": "0",
"impuestos_internos_base": "0",
"impuestos_internos_alicuota": "0"
}
},
{
"apitoken": "xxxxx",
"apikey": "xxxxx",
"usertoken": "xxxxx",
"cliente": {
"documento_tipo": "CUIT",
"condicion_iva": "RI",
"domicilio": "XXX",
"condicion_pago": "211",
"documento_nro": "30712252430",
"razon_social": "JUAN SA",
"provincia": "2",
"email": "[email protected]",
"envia_por_mail": "N"
},
"comprobante": {
"rubro": "Sevicios web",
"percepciones_iva": 0,
"tipo": "FACTURA A",
"external_reference": "ABC124",
"numero": 0,
"percepciones_iibb": 0,
"bonificacion": 0,
"operacion": "V",
"detalle": [{
"cantidad": 1,
"producto": {
"descripcion": "Hosting pagina web ",
"codigo": 37,
"lista_precios": "standard",
"leyenda": "",
"unidad_bulto": 1,
"alicuota": 21,
"precio_unitario_sin_iva": 114.88
}
}],
"fecha": "28/03/2022",
"rubro_grupo_contable": "Sevicios",
"total": 139.0,
"cotizacion": 1,
"moneda": "PES",
"punto_venta": 3,
"tributos": [],
"exentos": "0",
"impuestos_internos": "0",
"impuestos_internos_base": "0",
"impuestos_internos_alicuota": "0"
}
},
{
"apitoken": "xxxxx",
"apikey": "xxxxx",
"usertoken": "xxxxx",
"cliente": {
"documento_tipo": "OTRO",
"condicion_iva": "CF",
"domicilio": "Av Sta Fe 23132",
"condicion_pago": "211",
"documento_nro": "0",
"razon_social": "Consumidor final",
"provincia": "2",
"email": "[email protected]",
"envia_por_mail": "N"
},
"comprobante": {
"rubro": "Sevicios web",
"percepciones_iva": 0,
"tipo": "FACTURA B",
"external_reference": "ABC125",
"numero": 0,
"percepciones_iibb": 0,
"bonificacion": 0,
"operacion": "V",
"detalle": [{
"cantidad": 1,
"producto": {
"descripcion": "Hosting pagina web ",
"codigo": 37,
"lista_precios": "standard",
"leyenda": "",
"unidad_bulto": 1,
"alicuota": 21,
"precio_unitario_sin_iva": 114.88
}
}],
"fecha": "28/03/2022",
"rubro_grupo_contable": "Sevicios",
"total": 139.0,
"cotizacion": 1,
"moneda": "PES",
"punto_venta": 3,
"tributos": [],
"exentos": "0",
"impuestos_internos": "0",
"impuestos_internos_base": "0",
"impuestos_internos_alicuota": "0"
}
}
]
}on
Si enviasjsonsons un lote que no cumple con los requisitos básicos, detallados a continuación:
- La cantidad de requests supera el máximo permitido.
- No has enviado ningún request a procesar en el bloque de "requests"
- Tu CUIT+PDV no posee una dirección de webhook válida
Ten en cuenta que el lote no se procesará, obtendrás la respuesta al instante y no se te notificará vía webhook.
Ejemplo de una llamada con 300 requests, que superan el máximo establecido:
JSON
{
"error": "S",
"errores": [
"Esta enviando 300 requests, cuando el limite permitido es 100. El lote no se procesara.",
"El lote no se procesara ya que contiene errores en todos sus requests. Se enviaron a procesar: 3 requests y se aceptaron procesar: 0. "
],
"error_cod": [],
"error_details": [],
"response": []
}
En cambio, si existen errores en algunos requests, el lote se procesará parcialmente y se te irá notificando vía webhook de su procesamiento.
Ej: un lote con 3 requests, donde el primero no tiene una external_reference definida, puede arrojarte una respuesta al instante, de éste estilo:
{
"error": "S",
"errores": [
"El lote se procesara parcialmente ya que contiene errores en alguno de sus requests. Se enviaron a procesar: 3 requests y se aceptaron procesar: 2. "
],
"error_cod": [],
"error_details": [],
"response": [
{
"error": "N",
"errores": [],
"cae": " ",
"cae_vencimiento": null,
"observaciones": "",
"envio_x_mail": "N",
"envio_x_mail_direcciones": "",
"tfc_generacion_tipo": 3,
"external_reference": "M170_502",
"rta": "El comprobante se ha guardado correctamente ",
"vencimiento_cae": "01\/01\/2000",
"vencimiento_pago": "13\/05\/2022",
"comprobante_nro": "00010-00000000",
"comprobante_tipo": "FACTURA B",
"afip_codigo_barras": "",
"afip_qr": "",
"comprobante_pdf_url": ""
},
{
"error": "N",
"errores": [],
"cae": " ",
"cae_vencimiento": null,
"observaciones": "",
"envio_x_mail": "N",
"envio_x_mail_direcciones": "",
"tfc_generacion_tipo": 3,
"external_reference": "M170503",
"rta": "El comprobante se ha guardado correctamente ",
"vencimiento_cae": "01\/01\/2000",
"vencimiento_pago": "11\/04\/2022",
"comprobante_nro": "00010-00000000",
"comprobante_tipo": "FACTURA A",
"micrositios": {
"cliente": "url-del-micrositio",
"descarga":"url-del-micrositio"
},
"afip_codigo_barras": "",
"afip_qr": "",
"comprobante_pdf_url": ""
},
{
"error": "S",
"errores": [
"El request enviado en el orden 0 (comenzando en 0) incluye un comprobante con un external_reference no valido. Este request no se procesara."
],
"external_reference": "% 'M17051",
"rta": "Eror. No se procesara"
}
]
}
y a su vez, enviarte los siguientes webhooks:
{
"creado": "24\/05\/2022 16:46:39",
"evento": "encolado",
"recurso": "facturacion",
"external_reference": "M170_502",
"intento": 1,
"msg": [],
"hook_id": "xxxx"
}
{
"creado": "24\/05\/2022 16:46:39",
"evento": "error",
"recurso": "facturacion",
"external_reference": "% 'M17051",
"intento": 1,
"msg": ["El request enviado en el orden 0 (comenzando en 0) incluye un comprobante con un external_reference no valido. Este request no se procesara."],
"hook_id": "xxxx"
}
{
"creado": "24\/05\/2022 16:46:39",
"evento": "encolado",
"recurso": "facturacion",
"external_reference": "M170503",
"intento": 1,
"msg": [],
"hook_id": "xxxx"
}
{
"creado": "24\/05\/2022 16:47:06",
"evento": "error",
"recurso": "facturacion",
"external_reference": "M170503",
"intento": 1,
"msg": [" AFIP Factura electronica, informa el siguiente error: Cod. Error: #6661145.10016 - El numero o fecha del comprobante no se corresponde con el proximo a autorizar. Consultar metodo FECompUltimoAutorizado. Si necesitas ayuda, contactanos", " AFIP Factura electronica, informa el siguiente error: Cod. Error: #6661145.0 - AFIP rechazo la generacion del comprobante Si necesitas ayuda, contactanos ", "AFIP No devolvio el CAE asociado. (Cod. Error #6661141.S1254)", "AFIP No devolvio el CAE asociado. (Cod. Error #6661141.S1278)"],
"hook_id": "xxxx"
}
{
"creado": "24\/05\/2022 16:47:10",
"evento": "error",
"recurso": "facturacion",
"external_reference": "M170_502",
"intento": 1,
"msg": [" AFIP Factura electronica, informa el siguiente error: Cod. Error: #6661145.10016 - El numero o fecha del comprobante no se corresponde con el proximo a autorizar. Consultar metodo FECompUltimoAutorizado. Si necesitas ayuda, contactanos", " AFIP Factura electronica, informa el siguiente error: Cod. Error: #6661145.0 - AFIP rechazo la generacion del comprobante Si necesitas ayuda, contactanos", "AFIP No devolvio el CAE asociado. (Cod. Error #6661141.S1254)", "AFIP No devolvio el CAE asociado. (Cod. Error #6661141.S1278)"],
"hook_id": "xxxx"
}
En caso que no se detecten errores tempranos en la etapa de validación de los datos enviados en el lote, obtendrás la respuesta a cada request enviado, en su mismo orden y luego de enviarte ésta información, recibirás un webhook por cada request enviado, para informarte que se ha encolado, como se explica a continuación.
Ejemplo de un lote enviado con 3 requests:
{
"error": "N",
"errores": [],
"response": [
{
"error": "N",
"errores": [],
"cae": " ",
"cae_vencimiento": null,
"observaciones": "",
"envio_x_mail": "N",
"envio_x_mail_direcciones": "",
"tfc_generacion_tipo": 3,
"external_reference": 17032,
"rta": "El comprobante se ha guardado correctamente ",
"vencimiento_cae": "01\/01\/2000",
"vencimiento_pago": "16\/03\/2022",
"comprobante_nro": "00010-00000000",
"comprobante_tipo": "FACTURA A",
"afip_codigo_barras": "",
"micrositios": {
"cliente": "url-del-micrositio",
"descarga":"url-del-micrositio"
},
"afip_qr": "",
"comprobante_pdf_url": ""
},
{
"error": "N",
"errores": [],
"cae": " ",
"cae_vencimiento": null,
"observaciones": "",
"envio_x_mail": "N",
"envio_x_mail_direcciones": "",
"tfc_generacion_tipo": 3,
"external_reference": "1453_01",
"rta": "El comprobante se ha guardado correctamente ",
"vencimiento_cae": "01\/01\/2000",
"vencimiento_pago": "18\/03\/2022",
"comprobante_nro": "00010-00000000",
"comprobante_tipo": "FACTURA B",
"micrositios": {
"cliente": "url-del-micrositio",
"descarga":"url-del-micrositio"
},
"afip_codigo_barras": "",
"afip_qr": "",
"comprobante_pdf_url": ""
},
{
"error": "N",
"errores": [],
"cae": " ",
"cae_vencimiento": null,
"observaciones": "",
"envio_x_mail": "N",
"envio_x_mail_direcciones": "",
"tfc_generacion_tipo": 3,
"external_reference": "1453_02",
"rta": "El comprobante se ha guardado correctamente ",
"vencimiento_cae": "01\/01\/2000",
"vencimiento_pago": "18\/03\/2022",
"comprobante_nro": "00010-00000000",
"comprobante_tipo": "FACTURA A",
"micrositios": {
"cliente": "url-del-micrositio",
"descarga":"url-del-micrositio"
},
"afip_codigo_barras": "",
"afip_qr": "",
"comprobante_pdf_url": ""
}
]
}
Existen 3 tipos de evento posible, para el recurso de facturación que podes recibir en ésta instancia: "encolado", "emitido" y "error". Te sugerimos conocer más sobre los webhooks, en la documentación de Webhooks (notificaciones).
recurso | evento |
---|---|
facturacion | encolado |
El hook de "encolado", te informa que el request ha sido aceptado para su procesamiento. Mientras un comprobante se encuentre dentro de la cola de procesamiento, puedes realizar las siguientes operaciones: Cambiar fecha del comprobante o eliminar el comprobante de la cola de procesamiento.
El JSON que recibirás será similar al siguiente ejemplo:
{
"creado": "18/03/2022 15:58:11",
"evento": "encolado",
"recurso": "facturacion",
"external_reference": "17032",
"intento": 1,
"msg": [],
"hook_id": "xxxxx"
}
recurso | evento |
---|---|
facturacion | emitido |
El hook de "emido", te informa que el request ha sido procesado con éxito y se ha emitido el comprobante correctamente. Una vez recibido éste hook, podrás realizar una consulta avanzada por external_reference, para obtener los datos generados de éste comprobante.
El JSON que recibirás será similar al siguiente ejemplo:
{
"creado": "18/03/2022 15:58:11",
"evento": "emitido",
"recurso": "facturacion",
"external_reference": "17032",
"intento": 1,
"msg": [],
"hook_id": "xxx"
}
recurso | evento |
---|---|
facturacion | error |
El hook de "error", te informa que el request ha sido procesado, pero se han detectado errores y no se podrá facturar. Si un comprobante se encuentra procesado con error dentro de la cola de procesamiento, puedes realizar las siguientes operaciones: Cambiar fecha del comprobante, re-enviar el comprobante a la cola de procesamiento o eliminar el comprobante de la cola de procesamiento.
El JSON que recibirás será similar al siguiente ejemplo y a diferencia de los anteriores, obtendrás la lista de errores detectados, dentro del campo "msg".
{
"creado": "18/03/2022 15:58:11",
"evento": "error",
"recurso": "facturacion",
"external_reference": "17032",
"intento": 1,
"msg": [
" AFIP Factura electronica, informa el siguiente error: Cod. Error: #6661145.0 - AFIP rechazo la generacion del comprobante Si necesitas ayuda, contactanos en [email protected]",
" AFIP Factura electronica, informa el siguiente error: Cod. Error: #6661145.10036 - El campo FchVtoPago no puede ser anterior a la fecha del comprobante. Si necesitas ayuda, contactanos en [email protected]",
"AFIP No devolvio el CAE asociado. (Cod. Error #6661141.S1254)",
"AFIP No devolvio el CAE asociado. (Cod. Error #6661141.S1278)"
],
"hook_id": "xxx"
}
Última actualización 1mo ago