Ucotron Cortex
Guías por flujo

Onboarding

Del token a la primera llamada, en tres minutos.

Los tokens

El sandbox publica tres credenciales. No son secretos: son placeholders en un entorno fixture-only sin datos reales, y ninguno se carga de Secrets Manager.

TokenPara qué
ucotron_fixture_token_non_secretAcceso completo, reset incluido
ucotron_fixture_token_readonlySólo lectura — ejercita los 403
ucotron_fixture_token_other_tenantOtra organización — ejercita el 404 cross-tenant

Hay tres y no uno a propósito. Si sólo pudieras ejercitar el camino feliz, escribirías el manejo de errores mirando esta página, y te enterarías de que estaba mal el día que un cliente real pierde un permiso.

Diagrama: OnboardingSecuencia entre el integrador y sbox.ucotron.com: obtiene el dataset sembrado con el token fixture, lista carteras autenticado, y el intento cross-tenant termina en 404.sbox.ucotron.comIntegradorsbox.ucotron.comIntegradorGET /v1/sbox/fixtures (Bearer token)200 · dataset sembrado completoGET /v1/portfolios?limit=1200 · { data, page }GET /v1/portfolios (sin Authorization)401 · missing_bearer_credential
Diagrama: OnboardingSecuencia entre el integrador y sbox.ucotron.com: obtiene el dataset sembrado con el token fixture, lista carteras autenticado, y el intento cross-tenant termina en 404.sbox.ucotron.comIntegradorsbox.ucotron.comIntegradorGET /v1/sbox/fixtures (Bearer token)200 · dataset sembrado completoGET /v1/portfolios?limit=1200 · { data, page }GET /v1/portfolios (sin Authorization)401 · missing_bearer_credential
Fuente del diagrama (mermaid)
sequenceDiagram
    participant I as Integrador
    participant S as sbox.ucotron.com
    I->>S: GET /v1/sbox/fixtures (Bearer token)
    S-->>I: 200 · dataset sembrado completo
    I->>S: GET /v1/portfolios?limit=1
    S-->>I: 200 · { data, page }
    I->>S: GET /v1/portfolios (sin Authorization)
    S-->>I: 401 · missing_bearer_credential

Primera llamada

bash
export SBOX=https://sbox.ucotron.com
export TOKEN=ucotron_fixture_token_non_secret

curl -sS "$SBOX/v1/sbox/fixtures" -H "authorization: Bearer $TOKEN"

Devuelve el dataset entero: carteras, lotes, clientes, pólizas, eventos, detecciones, siniestros, peritajes, reportes, alertas y webhooks. Es el mapa de todo lo que podés ejercitar.

Tenancy

El header x-ucotron-tenant-id es opcional. Si viene, tiene que coincidir con la organización de la credencial: un header que la sobreescribiera sería el propio bypass.

Modelo de tenancy: por qué el cross-tenant es 404 y no 403 Cada organización vive en un tenant aislado; el tenant sale de los claims verificados del token, nunca de un header. Una consulta del tenant A sobre un recurso propio responde 200. La misma consulta sobre un recurso del tenant B responde 404, no 403: un 403 confirmaría que el recurso existe, y esa confirmación alcanza para enumerar carteras ajenas sin leer un byte. Cliente Bearer token → tenant A Tenant A — tu organización portfolio_sbox_norte aoi_sbox_lote_11 Tenant B — otra organización portfolio ajeno para el token A, este universo directamente no existe GET propio → 200 GET ajeno → 404 Un 403 confirmaría que el recurso existe, y con eso alcanza para enumerar carteras ajenas sin leer un byte. Tratá el 404 cross-tenant como "no existe".

Lo que se rompe

bash
# Otra organización: 404, NUNCA 403.
curl -sS "$SBOX/v1/portfolios" -H "authorization: Bearer ucotron_fixture_token_other_tenant"

Un 403 confirmaría que el recurso existe en algún lado, y esa confirmación alcanza para enumerar carteras ajenas sin leer un byte de ellas. Si tu cliente trata 404 y 403 distinto, tratá el 404 cross-tenant como "no existe".

Reset

reset.sh
curl -sS "$SBOX/v1/sbox/reset" -X POST \
  -H "authorization: Bearer $TOKEN" \
  -H "idempotency-key: reset-$(date +%s)" \
  -H "content-type: application/json" \
  -d '{"reason":"volver el sandbox al estado sembrado"}'

reason pide 12 caracteres mínimo: el reset queda en la auditoría y un motivo vacío no explica nada seis meses después.

Endpoints de esta guía

On this page