TF Fiscal

Plataforma e integraciones

SSO

2 endpoints

Base URL (Producción)
https://api.tffiscal.com
Autenticación
Headers: sign, timestamp, token
Validez del Ticket
60 segundos — uso único

SSO (Single Sign-On) permite que su ERP genere un enlace de acceso directo a TFiscal para el usuario, ya autenticado en la empresa correspondiente y en el idioma deseado, sin que tenga que ingresar credenciales.

Cómo funciona:
  • El ERP llama a POST /api/sso/create_ticket enviando el token de la empresa.
  • TFiscal devuelve un redirectUrl con un ticket opaco de uso único.
  • El ERP redirige el navegador del usuario a esa URL.
  • La página consume el ticket y el usuario entra al panel de la empresa.
⚠️ Seguridad: el token real de la empresa nunca aparece en la URL. Sólo el ticket efímero (válido por 60 segundos y de uso único) se expone al navegador.
POST/api/sso/create_ticket

Generar enlace de inicio automático

Genera un ticket de uso único válido por 60 segundos para iniciar sesión automáticamente al usuario en el panel de la empresa correspondiente al token.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa (el mismo usado para emitir NF-e)
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Campos

CampoObligatorioTipoDescripción
tokenSístringToken de la empresa (w_company.token) — el mismo usado en /api/invoice/create
languageNostringIdioma de la interfaz: br, en, zh, es, ja, ko. Default: br
pageNostringPágina de destino después del login. Valores aceptados: emitir_nfe. Vacío o ausente abre el panel por defecto (/company/kanban).

Campos de la respuesta

CampoTipoDescripción
successbooleantrue cuando el ticket se generó con éxito
ticketstringTicket opaco (aleatorio, 32 bytes base64url)
redirectUrlstringURL completa a la que el ERP debe redirigir el navegador
expiresInSecondsnumberValidez en segundos (siempre 60)
expiresAtstringFecha/hora UTC de expiración (ISO 8601)

Respuestas de error

MensajeCausa
Token es obligatorioEl campo token no fue enviado en el body
Token inválidoEl token no corresponde a ninguna empresa registrada
Este token está vinculado a múltiples empresas. Envíe el token de la empresa a la que desea acceder.Token de integrador con más de una empresa — envíe el token específico de la empresa
Rate limit exceededMás de 30 llamadas por minuto para el mismo token
POST/api/sso/consume_ticket

Consumir ticket SSO

Intercambia el ticket generado por /api/sso/create_ticket por el JWT de sesión de TFiscal. Este endpoint es llamado por el frontend (ruta /sso) y no requiere headers sign/timestamp — el propio ticket opaco es la credencial. Cada ticket puede consumirse solo una vez y expira en 60 segundos.

Body

CampoTipoDescripción
ticket *stringTicket devuelto por create_ticket

* Campo obligatorio.

Campos de la respuesta

CampoTipoDescripción
access_tokenstringJWT de sesión (validez de 365 días). Úselo en el header Authorization de las llamadas TFiscal
typestringTipo de usuario (user, admin, etc.)
uidintID interno del usuario
company_idintID de la empresa seleccionada en create_ticket
languagestringIdioma elegido en create_ticket (siempre normalizado)
pagestringPágina de destino (o string vacío si no se define)

Respuestas de error

MensajeCausa
Ticket inválidoBody sin campo ticket
Ticket inválido ou expiradoEl ticket no existe, ya fue consumido o pasó los 60 segundos
Rate limit exceededMás de 60 consumos por minuto desde la misma IP
Sessão inválidaEl usuario vinculado al ticket ya no existe

Características del ticket

CaracterísticaValor
Validez60 segundos después de generado
UsoÚnico — una vez consumido no se puede reutilizar
Rate limit30 tickets/minuto por token · 60 consumos/minuto por IP
AlmacenamientoMongoDB con TTL automático — tickets expirados se eliminan

Restricciones de navegación

Los usuarios autenticados vía SSO tienen acceso solamente a las pantallas de la empresa correspondiente (/invoice/company/*). Los intentos de acceder a otras áreas (paneles de distribuidor, reportes generales, administración) son redirigidos automáticamente al panel de la empresa.

Sesión después del login

Después de intercambiar el ticket por un JWT, el usuario tiene una sesión normal en TFiscal (JWT válido por 365 días, igual que el login tradicional). Los 60 segundos son sólo la ventana entre generar el ticket y abrir el enlace — después el usuario permanece conectado normalmente hasta cerrar sesión.

⚠️ Importante: el create_ticket debe ser llamado exclusivamente server-side por el ERP. Nunca llame a este endpoint directamente desde el navegador — expondría el token de la empresa en el front-end.