Para enviar el XML TicketBAI desde Stripe, necesito un conector que lo genere, lo firme y lo presente ante la Hacienda Foral correspondiente. Cobrar en Stripe no basta: también debo emitir la factura con su identificador TicketBAI y su QR.
Lo organizo en 3 pasos:
- Reviso la factura y los datos fiscales. Uso
invoice.finalizedsi facturo en Stripe opayment_intent.succeededsi solo gestiono el cobro, evitando duplicados. - Genero, firmo y envío el XML. Compruebo los requisitos de Álava, Bizkaia o Gipuzkoa; en Bizkaia, también los de Batuz y el LROE. Reviso la respuesta fiscal: un HTTP 200 no confirma la aceptación.
- Entrego el PDF con QR y guardo los registros. Desactivo el envío automático de Stripe para evitar copias sin QR y conservo el XML firmado, la respuesta y la factura.
Antes de empezar, compruebo el certificado y pruebo el flujo. Si hay rechazos o devoluciones, sigo el procedimiento correspondiente: <u>no sobrescribo una factura emitida</u>.

De Stripe a TicketBAI: flujo de envío del XML
Paso 1: comprueba la factura en Stripe
Finaliza la factura y revisa los datos fiscales
Revisa el borrador antes de finalizarlo. Mientras la factura esté en estado draft, comprueba las líneas, cantidades, descuentos e IVA. La serie y el número deben coincidir con los gestionados en Stripe: el registro TicketBAI debe conservar ambos datos.
Una vez validada, la factura pasa del panel de Stripe al flujo TicketBAI sin cambiar tu trabajo diario. El webhook debe usar esa factura validada como única entrada del flujo.
Facturar y cobrar son procesos distintos. Aunque el pago falle, la factura finalizada sigue siendo válida. Si solo usas Stripe para cobrar, genera la factura fiscal en el conector y desactiva el envío automático de Stripe. Así, el cliente recibirá el PDF de la factura con QR.
Procesa los eventos de Stripe sin duplicados
Da una función distinta a cada evento. Usa invoice.finalized para iniciar el proceso e invoice.paid solo para confirmar el cobro. En los pagos directos, payment_intent.succeeded activa la generación de la factura correspondiente.
Valida el webhook con Stripe-Signature y la clave secreta del endpoint. Guarda el Event ID y el Invoice ID para evitar que se procese de nuevo la misma factura. La cola del conector gestiona los eventos pendientes o que llegan fuera de orden. Con ambos identificadores registrados, el conector puede generar el XML una sola vez.
sbb-itb-b01fb3c
Paso 2: genera, firma y envía el XML
Una vez registrados la factura o el cobro, el conector genera, firma y envía el XML sin cambiar tu flujo en Stripe.
Mapea los datos de Stripe al XML TicketBAI
Con la factura validada, el conector convierte los datos de Stripe al XML TicketBAI y comprueba el archivo contra el esquema foral antes de firmarlo.
| Origen del dato | Destino en TicketBAI | Validación | Si falta |
|---|---|---|---|
| Número de factura y serie de Stripe | NumSerieFactura | Numeración correlativa y coincidente con la factura | Detener la generación; no inventar una numeración |
| Datos fiscales del negocio y del cliente | Campos de identificación fiscal | NIF y datos obligatorios correctos | Completar los datos |
| Desglose fiscal de Stripe | DesgloseIVA | Coherencia entre tipos, bases y cuotas | Revisar Stripe Tax o la configuración fiscal |
| Total, moneda y fecha de expedición | ImporteTotal y FechaExpedicionFactura | Importes que cuadren y formato del esquema foral | Resolver las diferencias antes de firmar |
| Huella y encadenamiento | Enlace con el registro anterior | Continuidad del historial | No generar una nueva cadena |
Si Stripe cobra en otra moneda, el conector debe convertirla al formato fiscal exigido.
Una vez validado el XML, el siguiente paso es firmarlo y presentarlo. Puedes ver cómo funciona este proceso en la demo del conector Stripe–VeriFactu.
Firma y envía el XML
Comprueba que el certificado esté vigente y que exista habilitación como colaborador social. Si el proveedor actúa como colaborador social, debe firmar y presentar el XML con su certificado, siguiendo la norma foral. Firmar no equivale a obtener la aceptación.
Envía el XML a la Hacienda Foral correspondiente. En Bizkaia, intégralo en Batuz mediante el LROE. Guarda el XML firmado, el identificador de factura, la fecha y hora de envío, la referencia de integridad y la respuesta completa.
Resuelve rechazos y fallos de envío
Si Hacienda rechaza el XML, localiza la fase en la que se ha producido el fallo:
| Etapa | Resultado esperado | Qué significa el fallo | Acción |
|---|---|---|---|
| Generación | XML completo | Faltan datos fiscales o están mal mapeados | Corregir el origen del dato |
| Validación | Esquema y reglas correctos | El formato o el contenido no son compatibles | Revisar los campos y la documentación foral |
| Firma | XML firmado | El certificado ha caducado o falta habilitación | Resolver el problema del certificado o de la representación |
| Transmisión | Respuesta del servicio | Hay un error de conexión o el destino es incorrecto | Verificar el canal y gestionar el reintento |
| Aceptación | Confirmación de Hacienda | Hay un rechazo fiscal; un HTTP 200 no basta | Leer el código y seguir el procedimiento indicado |
Si se produce un timeout, comprueba primero si la Hacienda Foral ha recibido el registro. Después, reintenta desde la cola con el mismo ID y registra tanto la respuesta como el estado de comunicación. Si el fallo está en otra fase, corrígelo antes de reintentar, también sin cambiar el ID.
Los reembolsos y las notas de crédito deben activar una factura rectificativa o el proceso de cancelación que corresponda. Nunca sobrescribas un registro emitido.
Paso 3: entrega la factura con QR y automatiza el flujo
Añade el identificador TicketBAI y el código QR
Una vez aceptado el XML, el conector añade el identificador TicketBAI y el código QR al PDF final de Stripe. Antes de enviarlo al cliente, comprueba que el QR lleva al entorno de verificación de la Hacienda correspondiente.
Desactiva el envío automático de correos de facturas de Stripe. Así evitas que el cliente reciba una copia sin QR o dos correos. Cuando el PDF final esté generado, el conector se encarga del envío y del registro en Stripe.
Configura el conector de Stripe de ITCONS
El Stripe Verifactu Connector de Stripe invoicing and tax compliance in Spain recoge los datos de facturas y cobros para generar el PDF final. No necesitas programar ni configurar la API manualmente. Puedes consultar el estado, los códigos y el PDF final desde Stripe.
Antes de activarlo, comprueba que el IVA y los impuestos estén bien desglosados en Stripe. Personaliza también la plantilla desde Branding: el conector usará ese diseño.
Guarda los registros y prueba antes de empezar
Guarda en Stripe la factura, el XML firmado, la respuesta y el PDF con QR. Antes de pasar a producción, comprueba en el entorno de pruebas la configuración del emisor y el manejo del certificado.
Conclusión: comprueba el registro TicketBAI completo
Comprueba el estado del envío en Stripe y la respuesta de la Hacienda foral para confirmar que el registro se ha recibido y aceptado. Un pago completado no significa que el trámite esté resuelto: si el envío sigue pendiente o ha sido rechazado, el ciclo TicketBAI en Stripe aún no está cerrado.
Cuando se acepte, guarda todas las evidencias del expediente: el XML válido, la firma, la respuesta del envío y el identificador TicketBAI del PDF con QR. Revisa que los datos de la factura emitida coincidan con el XML, sobre todo el desglose del IVA.
Repite esta comprobación en los movimientos rectificativos y de devolución para mantener la coherencia del registro y su sincronización con Hacienda.
FAQs
¿Cómo sé qué Hacienda Foral me corresponde?
Identifica el territorio histórico en el que tu empresa tiene su domicilio fiscal o donde desarrollas tu actividad económica. Las diputaciones de Álava, Bizkaia y Gipuzkoa gestionan TicketBAI de forma independiente.
Si tu empresa opera en el País Vasco, tu sistema de facturación debe ajustarse a la normativa de la Hacienda Foral que te corresponda e integrarse con ella para enviar correctamente los registros de facturación.
¿Cómo gestiono TicketBAI en las suscripciones de Stripe?
Un conector especializado automatiza TicketBAI en las suscripciones de Stripe sin que tengas que cambiar tu forma de trabajar ni el código. Detecta cada renovación en tiempo real y recoge los datos de la factura y del pago.
El conector firma digitalmente el registro, lo envía a la Hacienda correspondiente y entrega al cliente un PDF con el QR obligatorio. Puedes consultar el estado del envío y el código TicketBAI directamente en la factura o en el pago de Stripe.
¿Puedo emitir facturas si Hacienda no responde?
Sí, puedes emitir facturas aunque Hacienda no responda de inmediato. Si el registro no se valida o procesa correctamente por falta de respuesta o por errores, Stripe Verifactu Connector registra la incidencia y reintenta el envío automáticamente.
Si no recibes el CSV al emitir una factura, revisa el estado del envío para descartar fallos de conexión o errores en los datos. Comprueba también que tu certificado digital esté vigente.

