TUSFACTURAS.APP / API V2
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

¿Cómo funciona el modo asincrónico, de facturación por lote?

¿Qué puedo facturar por lote?

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. No podrás enviar comprobantes de tipo E en ésta modalidad.
¿No sabes qué tipo de comprobante debes emitir? Consultalo desde aquí
Tenés alguna duda del servicio? checkea las API FAQs, y si no encontrás lo que buscabas, contactanos por los canales de atención que tenemos disponibles en la plataforma web www.tusfacturas.app

Facturación asincrónica por Lote

Al utilizar éste servicio, los comprobantes que emitas, 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.
Te sugerimos leer primero:
  1. 1.
    La documentación de "Facturación", para conocer cómo debe componerse el request que envíes
  2. 2.
    La documentación "Webhooks (notificaciones)" para conocer cómo funciona el servicio de notificaciones.

A donde debes enviar el request?

post
https://www.tusfacturas.app/app/api
/v2/facturacion/lotes_encola
Facturación por Lotes asincrónica (encolada). Max: 100 requests por lote.

Estructura del bloque: "requests"

"requests debe ser un array, que contiene cada uno de los comprobantes a emitir, según se define en la documentación de "Facturación".

Datos a tener en cuenta:

  • 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 puedes 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.
  • Puedes enviar en un mismo lote, comprobantes de diferente tipo de comprobante. Ej: Puedes 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.
  • No podrás enviar comprobantes de tipo E en ésta modalidad.
  • Al momento del envío del lote, la suscripción de tu espacio de trabajo se encuentra vigente, activa y posee 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 no se mandará a procesar y 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) .

Ejemplo de JSON a enviar

JSON
{
"apitoken": "xxxx",
"apikey": "xxxx",
"usertoken": "xxxxx",
"requests": [{
"apitoken": "xxxxx",
"apikey": "xxxxx",
"usertoken": "xxxxx",
"cliente": {
"documento_tipo": "CUIT",
"condicion_iva": "M",
"domicilio": "Av Sta Fe 23132",
"condicion_pago": "211",
"documento_nro": "3071229384",
"razon_social": "VOUSYS",
"provincia": "2",
"email": "[email protected]",
"envia_por_mail": "N"
},
"comprobante": {
"external_reference": "AAAA",
"rubro": "Sevicios web",
"percepciones_iva": 0,
"tipo": "FACTURA B",
"numero": 1,
"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,
"percepciones_iibb": "0",
"percepciones_iibb_base": "0",
"percepciones_iibb_alicuota": "0",
"percepciones_iva": "0",
"percepciones_iva_base": "0",
"percepciones_iva_alicuota": "0",
"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": "VYAR SRL",
"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,
"percepciones_iibb": "0",
"percepciones_iibb_base": "0",
"percepciones_iibb_alicuota": "0",
"percepciones_iva": "0",
"percepciones_iva_base": "0",
"percepciones_iva_alicuota": "0",
"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": "M",
"domicilio": "Av Sta Fe 23132",
"condicion_pago": "211",
"documento_nro": "3071229384",
"razon_social": "VOUSYS",
"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,
"percepciones_iibb": "0",
"percepciones_iibb_base": "0",
"percepciones_iibb_alicuota": "0",
"percepciones_iva": "0",
"percepciones_iva_base": "0",
"percepciones_iva_alicuota": "0",
"exentos": "0",
"impuestos_internos": "0",
"impuestos_internos_base": "0",
"impuestos_internos_alicuota": "0"
}
}
]
}

¿Que te retornaremos ?

🔴
Error de validación de los datos enviados en el lote:

Si enviás 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"
}

🟢
Cuando el lote se ha aceptado para su procesamiento:

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": ""
}
]
}

Webhooks de respuesta

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).

🟣
Hook de "encolado"

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"
}

🟢
Hook de "emitido"

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"
}

🔴
Hook de "error"

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"
}
Copiar enlace
Esquema
¿Cómo funciona el modo asincrónico, de facturación por lote?
¿Qué puedo facturar por lote?
Facturación asincrónica por Lote
post
Facturación por Lotes asincrónica (encolada). Max: 100 requests por lote.
¿Que te retornaremos ?
Webhooks de respuesta
Hook de "encolado"
Hook de "emitido"
Hook de "error"