Skip to main content
Un ID de referencia externo es tu propio identificador para un usuario de Fluz. Te permite operar la API de Fluz usando los IDs que ya tienes en tu sistema, sin almacenar ni pasar el userId y accountId internos de Fluz para cada usuario. Cuando un usuario autoriza tu aplicación, adjuntas tu identificador a ese grant. Fluz almacena el emparejamiento entre tu identificador y la cuenta de Fluz del usuario, con alcance a tu aplicación. A partir de ese momento puedes referenciar al usuario por tu propio ID al generar tokens, enviar transferencias y conciliar eventos de webhooks. La ganancia práctica: nunca tienes que construir una tabla de consulta de IDs de Fluz. Llega un webhook, lleva tu ID de usuario, lo enrutas. Sin joins, sin caché, sin trabajos de conciliación.

Un valor, tres nombres de campo

El mismo valor aparece con un nombre diferente según la superficie. Esta es la fuente más común de confusión en esta página, así que vale la pena memorizarlo antes de empezar. Debido a que está incrustado en el token de acceso, la asociación sobrevive a las renovaciones de tokens: lo asignas una vez, en el momento del grant, y persiste.

Elegir un identificador

Nunca uses PII. No direcciones de correo, números de teléfono ni nombres.Dos razones, ambas concretas. Primero, cambian: la gente cambia de email y de número, y tu mapeo se rompe permanentemente porque el valor es inmutable una vez definido. Segundo, este valor viaja en query strings y claims de JWT, lo que significa que termina en el historial del navegador, headers de referer, logs de proxies y en los logs de tu propia aplicación. No pongas datos personales ahí.
El error más costoso es darle el alcance equivocado. Un ID de referencia externo identifica a una persona, de forma permanente — no a una transacción, una corrida de pagos, una sesión o una orden. Si pasas un identificador por transacción, la primera transferencia funciona y la segunda crea un segundo mapeo al mismo humano, y bifurcaste a un usuario en muchos sin forma de fusionarlos.Si te encuentras generando un valor nuevo por operación, lo que quieres es una clave de idempotencia, no un ID de referencia externo.

Las reglas


Asignar uno

Aplicaciones OAuth estándar

Anexa external_id a la URL de autorización cuando envíes al usuario a consentir (ver Flujo de grant orientado al cliente):
Cuando el usuario completa el grant, Fluz registra usr_8f3d2a91 contra esa autorización de tu aplicación. Opcional aquí, pero muy recomendado. Adoptarlo después implica rellenar grants una reautorización a la vez.

Aplicaciones de Widget

Obligatorio. Todos los tipos de aplicaciones de widget — depósito, retiro, pay-in, tarjeta virtual, catálogo de tarjetas de regalo, pago de facturas y payout externo — requieren un ID de referencia externo para establecer una sesión de usuario. Sin uno, la solicitud es rechazada:
Para widgets, el valor viaja como el claim externalId dentro del token firmado de transacción preaprobada, junto con el monto y el tipo de transacción. Lo generas del lado del servidor; no es una opción de inicialización del cliente. Ver Configura tu servidor.
externalId y jti están uno junto al otro en el mismo token y responden a preguntas diferentes. externalId es quién — estable durante la vida del usuario. jti es qué transacción — nuevo cada vez. Reutilizar jti rompe la idempotencia; cambiar externalId bifurca a tu usuario.

Usar uno

Direccionar destinos de transferencia

Al crear una transferencia de billetera a otra cuenta de Fluz (ver Transferir a otra billetera de Fluz), identifica el destino por tu propio ID en lugar de un ID de cuenta de Fluz:
Proporciona destination.accountId o destination.externalReferenceId — nunca ambos. El usuario destino debe haber autorizado tu aplicación, o la transferencia se rechaza.

Hacer match de eventos de webhook con tus usuarios

Las cargas de los webhooks llevan externalReferenceId, para que puedas enrutar eventos sin una tabla de consulta:
Maneja el caso de que el campo esté ausente. externalReferenceId se omite cuando el grant del usuario no tiene un ID de referencia externo asociado, o cuando el evento está marcado como privado. Un handler que asume que el campo siempre está presente lanzará errores en esas entregas — y un webhook handler que lanza errores es un webhook que no procesaste.
Consulta Configurar App Widget para la configuración de webhooks.

Obtener tokens con alcance de usuario

generateUserAccessToken no acepta un externalReferenceId: identifica al usuario por userId y accountId (ver Generar un token de acceso de usuario). Para usuarios que referencias por tu propio ID, usa el flujo de OAuth en su lugar. El grant ya lleva tu identificador, y los tokens que obtienes al intercambiar el código de autorización en /token/exchange se emiten para ese usuario con la asociación incrustada. Ver Intercambiar un código de autorización de OAuth.

De extremo a extremo

Un usuario, un identificador, cuatro superficies.
1

Tu sistema ya conoce a esta persona

El usuario usr_8f3d2a91 en tu base de datos hace clic en Conectar Fluz.
2

Asignar en el consentimiento

Rediriges a /authorize con external_id=usr_8f3d2a91. Inicia sesión, verifica si es necesario y aprueba tus scopes. Fluz vincula usr_8f3d2a91 a su cuenta, solo para tu aplicación.
3

Intercambiar

Tu callback intercambia el code por un accessToken y refreshToken. La asociación está incrustada, por lo que sobrevive a cada futura renovación. Almacenas los tokens contra usr_8f3d2a91 — sin UUIDs de Fluz en tu esquema.
4

Operar

Le pagas usando destination: { externalReferenceId: "usr_8f3d2a91" }, utilizando tu propio ID como dirección.
5

Conciliar

Llega el webhook de finalización con externalReferenceId: "usr_8f3d2a91". Lo enrutas directamente al registro de ese usuario y marcas el pago como liquidado. Sin joins, sin consultas de lookup, sin caché.

Ciclo de vida

Rellenar un grant existente

Si un usuario autorizó tu aplicación antes de que adoptaras IDs de referencia externos, proporciona uno en una autorización posterior y Fluz lo rellenará en el grant existente, siempre que el grant no tenga ya uno. Un valor existente nunca se sobrescribe.

Reautorizar con un valor diferente

Dado que un valor existente nunca se sobrescribe, pasar un external_id diferente para un usuario que ya tiene uno no cambia el mapeo. Considera que el primer valor es permanente. Si tus IDs de usuario son inestables, genera un ID inmutable dedicado para Fluz en lugar de reutilizar algo que puedas migrar.

Eliminar usuarios de tu lado

Nunca recicles un identificador. Si eliminas por completo a un usuario y luego vuelves a emitir la misma clave primaria a otra persona, esa persona nueva hereda el mapeo anterior — y la cuenta de Fluz de la persona anterior. Usa UUIDs, o una secuencia monótona que nunca reinicies.

Reglas de validación y errores

Solución de problemas


Lo que un ID de referencia externo no es

  • No es un userId o accountId de Fluz. Esos son UUIDs emitidos por Fluz; este lo emites tú.
  • No es una clave de idempotencia. Esa es idempotencyKey en llamadas de API y jti en tokens de widget, y es única por operación. Este es único por persona.
  • No es el parámetro state en el flujo de OAuth. state es protección CSRF por intento de autorización y no se almacena.
  • No son los identificadores de cuenta externa que aparecen en los registros de retiros o en fuentes de fondos vinculadas. Esos hacen referencia a registros bancarios y de procesadores, no a usuarios.

Próximos pasos

Flujo de grant

Dónde asignas el identificador para apps OAuth.

Configura tu servidor

Dónde lo asignas para apps de widget.

Transferir a otra billetera de Fluz

Direccionar transferencias con tu propio ID.

Configurar webhooks de la app

Recibir eventos que lo traen de vuelta.