Un cliente solicita su factura desde tu tienda. La pantalla tarda en responder y vuelve a presionar el botón. Mientras tanto, tu sistema también intenta repetir la solicitud porque no recibió una respuesta a tiempo.
Si cada intento inicia una emisión independiente, una sola operación puede terminar con más de una factura.
Para reducir este riesgo, tu integración necesita reconocer qué está intentando facturar, recordar lo que ya procesó y manejar las respuestas inciertas. Estas recomendaciones te ayudan a diseñar ese flujo con tu equipo de desarrollo.
Una falla de conexión no confirma que la factura haya fallado
Cuando tu sistema envía una solicitud, pueden ocurrir dos cosas distintas: que el servicio no alcance a procesarla o que sí la procese, pero la respuesta no llegue de regreso.
Desde la pantalla de tu cliente, ambas situaciones pueden parecer iguales: la operación tarda y aparece un mensaje de error.
No recibir una respuesta no basta para concluir que debes emitir otra factura.
El estándar HTTP recomienda evitar reintentos automáticos de operaciones que puedan producir efectos adicionales, salvo que exista una forma de saber que repetirlas es seguro o que la solicitud original no se aplicó. En facturación, este principio ayuda a plantear cómo actuar ante una respuesta incierta.
1. Identifica la operación antes de enviar la solicitud
Asigna una referencia estable a la solicitud de facturación y guárdala antes de comunicarte con la API.
Por ejemplo, puedes relacionarla con:
- La empresa que emitirá el comprobante.
- El pedido, ticket o servicio correspondiente.
- El tipo de documento que necesitas generar.
- La solicitud específica de facturación.
Usar únicamente el número de pedido puede quedarse corto si administras varias tiendas o empresas que comparten numeraciones.
También conviene definir qué ocurre cuando una operación requiere varios comprobantes legítimos. El control debe detectar repeticiones de la misma solicitud sin bloquear documentos distintos que sí correspondan.
Estas son decisiones de diseño de tu integración: documentarlas desde el inicio facilita el desarrollo y el soporte.
2. Guarda el avance y controla las solicitudes simultáneas
Tu sistema debería poder distinguir entre una solicitud nueva, una que está en proceso y otra cuyo resultado necesita revisión.
Puedes utilizar estados internos como:
- Pendiente: todavía no se ha enviado.
- En proceso: existe un intento activo.
- Confirmada: recibiste y guardaste la confirmación de emisión.
- Por verificar: hubo una interrupción y falta confirmar el resultado.
- Rechazada: recibiste un rechazo explícito que requiere atención.
Estos nombres son una propuesta para tu aplicación, no estados oficiales del SAT ni etiquetas de FacturaLink.
Desactivar el botón mientras se procesa la solicitud mejora la experiencia, pero también necesitas un control en el servidor. Dos pestañas abiertas o dos procesos automáticos pueden intentar facturar al mismo tiempo.
Pide a tu equipo que la comprobación y la reserva de la solicitud se realicen como una sola operación en la base de datos. Revisar primero y guardar después, sin protección frente a solicitudes simultáneas, puede dejar pasar duplicados.

3. Define qué hacer cuando no conoces el resultado
Ante una interrupción, conserva la referencia de la operación y evita lanzar de inmediato otra emisión.
Un flujo de revisión puede ser:
- Registrar la hora del intento y el resultado de la conexión.
- Consultar los comprobantes mediante las opciones disponibles en la API.
- Comparar la información encontrada con la operación original.
- Recuperar la relación con el comprobante si confirmas que ya se generó.
- Dejar el caso pendiente de revisión si todavía no puedes determinar qué ocurrió.
La documentación de FacturaLink incluye consultas de CFDI por UID, UUID y folio, además de un listado de comprobantes. La consulta que puedas utilizar dependerá de los identificadores que hayas alcanzado a guardar. UID y UUID son identificadores diferentes, por lo que conviene conservarlos en campos separados.
Si perdiste la respuesta antes de recibir esos identificadores, puede ser necesario revisar el listado o solicitar apoyo para localizar el documento. No concluyas que dos comprobantes corresponden a la misma operación solo porque coinciden el cliente y el total.
4. Distingue emitir de entregar
Considera este caso: la factura se generó correctamente, pero falló el correo que debía recibir tu cliente.
La emisión y la entrega tienen resultados distintos. Tu aplicación necesita recordarlos por separado para que una falla de envío no termine activando otra solicitud de creación.
Una vez confirmada la emisión, guarda su relación con el pedido. Si después necesitas recuperar archivos o repetir la entrega, trabaja sobre ese comprobante.
También ayuda mostrar mensajes claros: “Estamos verificando tu solicitud” explica mejor una situación incierta que un aviso genérico que invite a intentar facturar otra vez.
5. Prueba las situaciones que suelen causar repeticiones
Antes de activar la integración, prepara pruebas que vayan más allá de una emisión exitosa:
- Dos clics seguidos en el botón de facturar.
- El mismo pedido abierto en dos pestañas.
- Dos procesos que reciben la misma solicitud.
- Una respuesta que tarda más de lo esperado.
- Una emisión confirmada seguida de una falla en la entrega.
FacturaLink dispone de un entorno sandbox que simula su API y genera CFDI sin validez fiscal. Puedes utilizarlo para probar tu integración; los cortes y retrasos también pueden requerir simulaciones controladas en tu propia aplicación.
El objetivo es comprobar que tu sistema conserva el contexto, identifica intentos repetidos y deja visibles los casos que necesitan revisión.
Automatiza con un proceso que puedas seguir
Una integración confiable necesita responder tres preguntas: qué operación estás facturando, qué ocurrió con la solicitud y cómo recuperar su resultado.
Con esas respuestas, tu equipo puede atender incidencias con más información y reducir las emisiones repetidas causadas por reintentos.
FacturaLink ofrece una API REST para conectar la facturación con sistemas propios. Si estás preparando una integración, consulta su documentación y revisa las operaciones disponibles para diseñar tu flujo de emisión y consulta. Los controles internos descritos en esta guía deben implementarse y validarse en tu aplicación.
Información revisada el 29 de octubre de 2026.