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
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
Anexaexternal_id a la URL de autorización cuando envíes al usuario a consentir (ver Flujo de grant orientado al cliente):
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
Para widgets, el valor viaja como el claimexternalId 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: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 llevanexternalReferenceId, para que puedas enrutar eventos sin una tabla de consulta:
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 unexternal_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
userIdoaccountIdde Fluz. Esos son UUIDs emitidos por Fluz; este lo emites tú. - No es una clave de idempotencia. Esa es
idempotencyKeyen llamadas de API yjtien tokens de widget, y es única por operación. Este es único por persona. - No es el parámetro
stateen el flujo de OAuth.statees 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.