uindocs

idType · usá tu propio ID de cuenta

Un flag opcional para mandar tu external_id directo en los endpoints de cuenta, sin el paso previo de traducción

8 jul 2026 · API

Todos los endpoints de la API que referencian una cuenta por ID ahora aceptan un flag opcional idType. Con idType=EXTERNAL mandás el ID que ya usás en tu sistema y BehaviorOS lo resuelve —y crea la cuenta si es nueva— en la misma request.

Por defecto idType es INTERNAL. Si no lo mandás, todo se comporta exactamente como antes: no hay nada que cambiar en tu integración salvo que quieras aprovechar la nueva capacidad.

El cambio

Antes, para registrar un evento tenías que traducir tu ID al UUID interno en una llamada aparte, y recién ahí mandar el evento — dos idas y vueltas por cada acción.

Antes — 2 llamadas

// 1 · obtener el UUID interno de la cuenta
// → { "id": "3f2a9c14-…-8b7e" }

// 2 · mandar el evento con ese UUID
POST /gamification/triggers
{ "accountId": "3f2a9c14-…-8b7e", "event": "purchase" }

Ahora — 1 llamada

POST /gamification/triggers
{ "accountId": "user-4821", "idType": "EXTERNAL", "event": "purchase" }
// BehaviorOS resuelve tu ID y crea la cuenta si no existe

Los dos valores

ValorCómo se interpreta el IDSi la cuenta no existe
INTERNAL (por defecto)Es nuestro UUID interno. Se valida el formato: un ID malformado devuelve 400 limpio, no un 500.404 — nunca se crea.
EXTERNAL (nuevo)Es tu external_id, el que ya usás en tu sistema.Se crea automáticamente, de forma segura ante requests concurrentes.

Dónde va el flag

Depende de cómo el endpoint recibe hoy el ID de la cuenta.

Query param — por defecto

La mayoría de los endpoints lo leen del query string:

GET /accounts/user-4821/points?idType=EXTERNAL

Aplica a:

MétodoEndpoint
GETaccounts/:id/points
GETaccounts/:id/points/history
GETprogress/:id
GETcompleted/:id
GETmy-rewards/:id
GETaccount/:id (feed de engagement)
GET:accountId (redenciones)
GETtournaments/account/:id
GETtournaments/:tid/predictions/:id
POSTtournaments/:tid/predictions/:id
GETaccount/:id (leaderboard)

En el body — solo 4 endpoints

Los endpoints que ya reciben un body JSON lo llevan como un campo más:

{ "accountId": "user-4821", "idType": "EXTERNAL" }
MétodoEndpoint
POST/gamification/triggers
POST/gamification/triggers/async
POSTpublications/redeem/:id
POSTproducts/:id/redeem

El valor es case-insensitive (external funciona). Vacío o ausente ⇒ INTERNAL. Cualquier otra cosa ⇒ 400 "idType must be either INTERNAL or EXTERNAL".

Cambio de comportamiento en triggers

Solo afecta el hot path de triggers. Antes, un POST /gamification/triggers sobre una cuenta desconocida era un 200 silencioso (no-op). Ahora el resultado es explícito:

  • INTERNAL + UUID válido pero desconocido ⇒ 404
  • EXTERNAL + ID desconocido ⇒ se crea la cuenta

El accountId se normaliza en el punto de entrada, así que un ID externo nunca queda persistido en registros internos (idempotencia, asignaciones de misión, evento emitido): aguas abajo siempre viaja el ID interno.

Referencia

Los docs de cada endpoint se actualizan solos desde el código. Vas a ver el parámetro idType en cada endpoint del Swagger.

On this page