Apply the antifraud partner's final decision to a transfer in analysis
Applies the antifraud partner’s final decision to a transfer that the partner left in analysis (status=FRAUD_ANALYSIS). The caller is the client’s integration, with the editor role.
The body is {"analysisId", "decision", "reasons"}: decision is ALLOW or DENY, and analysisId is the id the partner received with its REVIEW. A malformed reasons is dropped and the decision still applies; valid reasons are recorded on the check, replacing the ones the evaluation recorded (the score stays the evaluation’s), and appear in the events and the read API; the body is at most 16 KiB.
| Decision | Result |
|---|---|
DENY | Accepted at any time while the transfer is in analysis: REJECTED with TED-0050, the hold is cancelled and the limit returned. |
ALLOW on a TED, before the analysis deadline and inside the operating window | Sent to the STR; the response carries the new status. |
ALLOW on a TED with the window closed | Refused like a DENY, with TED-0020 or TED-0021. If the window cannot be determined: 503 TED-0022, nothing written. |
ALLOW on an internal transfer | Records that side; once every evaluated side is allowed, the transfer is SETTLED. |
409 TED-0060 is final, do not repeat: the transfer already left the analysis, the analysisId matches no open check, the check is already resolved, the transfer is already on its way to the STR, or an ALLOW arrived after the analysis deadline.
503 is temporary, repeat with the same X-Idempotency: TED-0053 when the decision arrived before the analysis was recorded, or when the same key is still processing (never 409); TED-9002 when the audit trail cannot record the decision. Every 503 carries Retry-After.
X-Idempotency is required and must be <analysisId>:<decision>; X-Idempotency-Replayed: true indicates a replay.
Autorizaciones
JWT token that the Lerian Access Manager issues for your institution. Send it in Authorization: Bearer <token> on every call (except the public health probes). The tenant never comes from the body, the query, or the path. Each operation requires a role with the matching permission (see the API overview). Without it, 403 TED-0071. Missing, invalid, or expired token: 401 TED-0070.
Encabezados
Replay window of the idempotency key, in seconds. Default 300 (5 minutes) when missing or invalid; values outside 30 s to 7 days are adjusted to these limits. Only the value of the FIRST request for a key counts. A change to X-TTL on retries has no effect. Within the window, the original response is replayed byte for byte.
x >= 1Required: <analysisId>:<decision>, for example an-7f3c91:ALLOW. Repeat a 5xx with the SAME key and the SAME body, byte for byte. Same key + same body returns the original response with X-Idempotency-Replayed: true. Same key + different body responds 422 TED-0012. Same key still in processing responds 503 TED-0053 with Retry-After, never 409. Missing or in the wrong format: 400 TED-0011.
Correlation identifier of this request (UUID). Optional: when you omit it, or when the value is not a well-formed UUID, the platform creates a UUID and returns it in the X-Request-Id header of the response. The resolved identifier goes to the logs, spans, and audit events of this request. Keep it to open a support ticket.
Cuerpo
Respuesta
Decision applied; status is the transfer's new state. If X-Idempotency-Replayed: true, this is the replay of an earlier decision.
Representation of an outgoing (TED) or internal transfer. The create, query, and list operations return it, and so do the cancel and unblock actions. Track the lifecycle through the status field and the instants reservedAt/submittedAt/settledAt. When status=REJECTED, rejection tells you who refused it and why.
Current state (published as a free string: handle unknown values with tolerance). Current values: CREATED, RESERVED, SUBMITTED, PENDING_STR, SETTLED, REJECTED, CANCELLED, AWAITING_RECONCILIATION, EXHAUSTED, FRAUD_ANALYSIS. TED: CREATED → RESERVED (amount + fee on hold) → SUBMITTED (sent to the STR) → SETTLED | REJECTED; PENDING_STR when the STR keeps the entry pending; AWAITING_RECONCILIATION and EXHAUSTED when the outcome could not be confirmed automatically; CANCELLED on a cancellation before submission or of a confirmed pending entry; RESERVED → FRAUD_ANALYSIS when the antifraud partner asks for a review (the hold stays), then SUBMITTED, REJECTED or CANCELLED. INTERNAL: CREATED → SETTLED | REJECTED in the same call, or it stays CREATED when the ledger response was undetermined (the reconciliation worker resolves it); CREATED → FRAUD_ANALYSIS when the antifraud partner asks for a review (the payer's amount is held at the ledger), then SETTLED, REJECTED or CANCELLED. Terminal: SETTLED, REJECTED, CANCELLED.
Time (UTC) of the last write to the record. This is not always a status change. ⚠️ An INTERNAL transfer can stay in CREATED because the ledger response was undetermined. In that case, the reprocessor uses updatedAt as the queue position on each new attempt, and it moves a transfer whose resend window expired one hour ahead: updatedAt CAN BE IN THE FUTURE (up to 1 h after the current time). Do not use it as a transition time.
Antifraud analysis of the transfer: the deadline and one check per antifraud flow enabled when it was created. null when it was created with every antifraud flow off. While status=FRAUD_ANALYSIS the analysis runs until the partner decides, you cancel or decideBy passes. A TED's amount is already held; an INTERNAL transfer's payer amount is held at the ledger right after entering the analysis, and a ledger refusal (insufficient balance) can still reject it.
Identifier of the entry assigned by the STR (20 characters, XXXAAAAMMDDnnnnnnnnn), present after the STR settles the entry. It can be absent even with status=SETTLED, on a TED settled by reconciliation when the rail query does not give the number. Correlate by nuop in that case. A settlement fact that arrives later fills the field.
^[A-Za-z0-9]{20}$
