Referencia de endpoints y respuestas
POST/api/shop/sessiongenerar — secreto Bearer
DELETE/api/shop/session/:tokenrevocar — secreto Bearer
En esta demo, la generación pasa por el proxy en las rutas de arriba. En producción, la sesión se genera en el núcleo de ADITUS — el contrato es idéntico. Ambas llamadas son servidor a servidor: tu backend se autentica con el secreto de generación de tu cliente (generado en la consola de administración de ADITUS) como token Bearer. Una generación por inicio de sesión es el patrón normal; el browser nunca ve más que el token resultante.
Puedes probar este mismo flujo con tus propias credenciales en el probador de integración — generar, montar, recorrer el recorrido.
Generar una sesión — petición
CabeceraValorSignificado
AuthorizationBearer <mint-secret>El secreto de mint de tu cliente, generado en la consola de administración de ADITUS. Solo en el servidor — nunca debe enviarse a un navegador o a un bundle de aplicación.
Content-Typeapplication/jsonEl cuerpo es un objeto JSON.
Campo del bodyTipoSignificado
publicKeystring · obligatorioLa clave publicable PARA la que se genera la sesión. Debe ser la misma clave con la que monta el micro-frontend — cada llamada de tienda posterior se comprueba contra ella (403 si no coincide). El secreto Bearer debe pertenecer al cliente de esta clave.
emailstring · optionalEl usuario de la tienda como el que actúa la sesión. Tómalo de TU sesión de servidor autenticada (cookie de login/SSO o JWT) — nunca de la petición del navegador, o un visitante podría obtener la sesión de otra persona. OMITIDO se genera una sesión ANÓNIMA: el visitante puede navegar y llenar el carrito, pero el micro-frontend bloquea el paso más allá del carrito hasta que tu callback onUserRequired proporcione una sesión ligada a un usuario (ver el flujo de usuario opcional). Un correo presente pero mal formado sigue siendo rechazado (400).
externalUserIdstring · optionalTu propio identificador de usuario, almacenado con la sesión como metadato (útil para el soporte y la correlación de registros). ADITUS no lo interpreta.
ttlSecondsnumber · optionalDuración de la sesión en segundos. Por defecto 20 minutos, con un tope de 24 horas. Al expirar, las llamadas de tienda devuelven 401 session_expired — genera entonces un token nuevo (p. ej. mediante el hook onSessionExpired).
eventSlugstring · optionalFija el PUNTO DE ENTRADA del recorrido en el servidor: definido, el micro-frontend arranca directamente en la selección de artículos de este evento; omitido, arranca en el resumen de eventos. Como forma parte de la sesión generada, el navegador no puede manipularlo. Caracteres inválidos devuelven 400 invalid_event_slug; un slug que no corresponde a ningún evento en vivo vuelve al resumen de eventos.
Generar una sesión — respuesta (200)
CampoTipoSignificado
sessionTokenstringToken opaco (sess_…). Entrégalo al navegador y pásalo a mount() como sessionToken; el micro-frontend lo envía como X-Aditus-Session en cada llamada de tienda. No contiene datos de usuario y no se puede decodificar.
expiresAtnumberVencimiento como marca de tiempo Unix en milisegundos. Puramente informativo para tu propia planificación — el micro-frontend reacciona por sí mismo al 401.
Revocar una sesión
DELETE /api/shop/session/:token con el mismo secreto Bearer — el secreto debe pertenecer al cliente para el que se generó la sesión. Llámalo al cerrar sesión para que el token muera junto con tu propia sesión. Respuesta: { "revoked": true } (o false si la sesión ya había expirado). La revocación es idempotente y se puede enviar en fire-and-forget.
Los errores son explícitos
EstadoCódigoSignificado
503session_not_configuredminting is disabled for this client: no mint secret has been generated in the admin console yet.
401unauthorizedthe mint secret is wrong or missing. Check that the secret belongs to the client of exactly this public key (rotated secrets invalidate the old one immediately).
400invalid_public_keythe public key is malformed or not registered. It must look like pk_… and belong to a configured client.
400invalid_emailthe shop user email is missing or not a valid address.
400invalid_tokenthe session token in the revoke call is malformed. Pass exactly the sessionToken returned by the mint call.
429rate_limitedtoo many mint/revoke calls from your IP. Wait a minute and try again.
403public_key_invalidthe X-Aditus-Public-Key header is malformed. It must look like pk_… exactly as issued during onboarding.
403public_key_unknownthe X-Aditus-Public-Key is well-formed but not registered (or deactivated). Check for typos and that the key's client is active.
403public_key_origin_unresolvedthe request carried a publicKey but no usable Origin/Referer header, so the domain whitelist cannot be checked. Browsers send Origin automatically; server-side calls must not use the publicKey header.
403public_key_domain_not_allowedthe request's origin domain is not on this publicKey's whitelist. Add the domain during onboarding (or in the admin console) before going live on it.
401invalid_sessionthe shop call carried a malformed X-Aditus-Session token — never a silent fall-back to the demo user. Pass exactly the sessionToken (sess_…) returned by the mint call.
401session_expiredthe X-Aditus-Session token is unknown, revoked or expired — never a silent fall-back to the demo user. Mint a fresh session server-to-server.
403session_requires_public_keya session was sent without its X-Aditus-Public-Key header (origin pinning is mandatory once a session is in play).
403session_key_mismatchthe X-Aditus-Public-Key does not match the key the session was minted for.
403anonymous_sessionthe session was minted WITHOUT an email (anonymous) and only allows browsing and the cart. Registration, payment and checkout require a user-bound session — mint one via onUserRequired.