Saltar al contenido principal
TED Lerian es la interfaz sobre Lerian SPB, el conector de mensajería propio de Lerian hacia el STR. Tu institución usa su API para enviar TEDs, hacer transferencias internas, seguir las TEDs recibidas y operar devoluciones, colas y políticas, todo sobre el ledger Midaz de la institución. En una TED, el dinero sale de la cuenta solo cuando el STR liquida. Cada operación con efecto es idempotente, así que puedes reenviar después de un timeout.

Conceptos


Integra en cuatro pasos


1

Configura la institución

Haz esto una vez, con el rol editor. Define los límites de uso con PUT /v1/policy/limits; son obligatorios antes de la primera TED. Para las TEDs recibidas, define las vinculaciones de ISPB a organización con PUT /v1/policy/ispb-bindings. De forma opcional, define un horario de corte con PUT /v1/policy/window.
2

Envía la TED

Envía X-Account-Id (la cuenta debitada) y X-Idempotency (una clave nueva para cada pago). Para mostrar la comisión antes de confirmar, llama a POST /v1/transfers/fee-quotes con los mismos campos.
El envío devuelve 201 con el estado que la TED alcanzó en esta llamada, normalmente SUBMITTED.
3

Síguela hasta la liquidación

Consulta GET /v1/transfers/{transferId} hasta que status llegue a SETTLED, REJECTED o CANCELLED, o suscríbete a los eventos transfer.*. En REJECTED, rejection.source y rejection.code te dicen quién la rechazó y por qué.
4

Gestiona las TEDs recibidas

Lístalas con GET /v1/incoming-transfers. El crédito al cliente es automático. Solo status=MANUAL_REVIEW requiere una decisión de un operador (POST /v1/incoming-transfers/{incomingTransferId}/resolve-review), y POST /v1/incoming-transfers/{incomingTransferId}/return devuelve una TED que ya está acreditada.

Estados


Una TED enviada pasa por estos estados. Los estados finales son SETTLED, REJECTED y CANCELLED. Una TED recibida pasa de RECEIVED (decisión en curso) a CREDITED (acreditada al cliente), RECORDED (cuenta propia de la institución, final), RETURN_REQUESTED (TED Lerian no puede acreditarla) o MANUAL_REVIEW (espera a un operador; consulta reviewReason). Pasa de RETURN_REQUESTED a RETURNED cuando se devuelve. slaDeadlineAt es el plazo regulatorio de 60 minutos contado desde la liquidación interbancaria.

Autenticación y permisos


Cada llamada, excepto los health checks públicos, envía Authorization: Bearer <token> emitido por Access Manager. Los roles predeterminados son editor (todas las operaciones), operator (todas las operaciones excepto las escrituras de políticas y de vinculaciones de ISPB) y viewer (lecturas, excepto las lecturas de conciliación). Sin el permiso, o con una licencia del producto que no es válida para la organización: 403 TED-0071. Token ausente o inválido: 401 TED-0070.

Convenciones


  • Tenant. Nunca de la ruta, del query ni del cuerpo.
  • Montos. Strings decimales en BRL con dos decimales ("1500.00"), nunca números JSON.
  • Fechas. RFC 3339 en UTC (2026-10-22T13:05:12Z); los días como YYYY-MM-DD. La ventana operativa usa la zona horaria de la institución (America/Sao_Paulo).
  • Idempotencia. Cada operación con efecto requiere X-Idempotency (de 1 a 128 caracteres ASCII; usa un UUID). La misma clave con el mismo cuerpo devuelve la respuesta original con X-Idempotency-Replayed: true y sin nuevo efecto. Un cuerpo diferente devuelve 422 TED-0012. Si la primera solicitud todavía se está procesando, recibes 409 TED-0013 (reintenta después de Retry-After). La repetición dura X-TTL segundos (300 de forma predeterminada). En POST /v1/transfers, la clave queda vinculada a la transferencia que creó.
  • Protección contra duplicados. POST /v1/transfers puede rechazar con 409 TED-0014 una solicitud materialmente idéntica enviada poco después de otra, incluso con una clave diferente. Consulta la transferencia existente.
  • Paginación. Las listas devuelven items, limit, next_cursor y prev_cursor. Pide hasta limit=100 (20 de forma predeterminada) y sigue next_cursor hasta que sea null. El cursor es opaco.
  • Correlación. Envía X-Request-Id (UUID) o recibe uno generado. Vuelve en cada respuesta e identifica la llamada para soporte.
  • Eventos. Cada transición se publica como un CloudEvent con ce-type studio.lerian.br-ted.<resource>.<event>: transfer.*, incoming_transfer.* e incoming_return.*. La entrega es al menos una vez; deduplica por ce-id.
  • Entornos. La URL base es por instalación (BYOC o Lerian Cloud), y Lerian la proporciona.

Errores


Cada error es application/problem+json (RFC 9457) con un code estable. Gestiona los errores por code. errors lista los campos inválidos de un 422. Un 503 significa que la solicitud no tuvo efecto: reintenta más tarde con el mismo X-Idempotency. Hay tres excepciones:
  • TED-1000: el ledger no confirmó el resultado, y la operación ya puede estar en el ledger. Lee el estado del recurso antes de volver a actuar.
  • TED-0080 en un envío: la transferencia ya puede existir. Búscala con GET /v1/transfers antes de enviarla de nuevo.
  • TED-1010 en una cancelación: la respuesta del conector del STR es desconocida, y la solicitud de cancelación sigue registrada. Reintenta con el mismo X-Idempotency y el mismo reason.
Una llamada limitada por el rate limit devuelve 429 con Retry-After: gestiónala por el estado y espera ese tiempo antes de reintentar. En un envío, TED-0031, TED-1001, TED-1011 y TED-1013 nunca llegan como respuesta de error. Llegan en rejection.code de una transferencia con estado REJECTED, en la respuesta 201 o en una consulta posterior. La lista de errores muestra cada código con su causa y su corrección.