Skip to main content

Submit a beneficiary screening decision

POST 

/v1/transfers/:transfer_id/screening-decisions

Approve, reject or extend a transfer that is waiting for beneficiary screening. Requires scope connector:transfers:screening-decide.

Who calls it, and when. Beneficiary screening applies to INTERBANK and BANK_ROUTED transfers when it is enabled on the network. After the sending bank's transfer passes liquidity selection, the transfer enters AWAITING_SCREENING and the receiving (beneficiary) bank is sent a beneficiary.screening.requested webhook. Only that receiving bank can decide; for any other caller the transfer is reported as not found (404). Nothing is written to the ledger until the transfer is approved.

Decisions.

  • APPROVE: the transfer moves to PROCESSING and continues to the ledger (and then to the sending bank's checker review).
  • REJECT: the transfer ends REJECTED; its operation gets result_code SCREENING_REJECTED. Nothing is written to the ledger.
  • EXTEND: the transfer stays AWAITING_SCREENING and its deadline moves out by extend_ttl_seconds (default: one screening window). EXTEND is refused until the webhook delivery has been confirmed.

Screening window. The window (5 seconds by default; the length is network configuration) starts when the webhook is delivered to the receiving bank, not when the transfer was accepted. A decision is on time if it reaches the Lyriq Connector before the deadline; the time the platform then takes to apply it does not count. If no decision arrives in time the transfer ends EXPIRED (result_code SCREENING_EXPIRED). Extensions can never push the deadline beyond the screening ceiling (2 hours by default) measured from the moment the transfer entered screening. If the webhook cannot be delivered the transfer ends FAILED (SCREENING_UNDELIVERABLE, or SCREENING_NOT_STARTED when delivery is never confirmed).

Response. 202 Accepted returns a new operation for the decision itself (operation_type SCREENING_DECISION_CREATE, resource_family transfers); it has no relationships. The decision is applied asynchronously: that operation ends SUCCEEDED once the transfer has moved, or FAILED (for example result_code STATE_CONFLICT) if it could not be applied. Follow the transfer itself with GET /v1/transfers/{transfer_id}.

Idempotency. Idempotency-Key is required. The same key and body return the original 202; the same key with a different body returns 409 IDEMPOTENCY_CONFLICT.

Errors.

StatuscodeWhen
400(none)extend_ttl_seconds sent with APPROVE or REJECT, or not positive; missing Idempotency-Key; the transfer is no longer AWAITING_SCREENING (title Transfer is no longer awaiting screening, current operation state is <STATE>, where a decision after the deadline reports EXPIRED); EXTEND before the window opened (title screening window has not opened yet, so it cannot be extended).
403UNAUTHORIZED_SCOPEThe token lacks connector:transfers:screening-decide.
404(none)The transfer does not exist, or the calling bank is not its receiving bank (title resource not found).
409IDEMPOTENCY_CONFLICT, IDEMPOTENCY_PENDINGIdempotency-Key reuse.
422(none)The body does not match the schema, for example an unknown decision (title Invalid request body).
503OUTBOUND_HALTED, READ_ONLY, OPERATIONAL_STATE_UNKNOWNThe network is not fully operational; decisions are refused.

A duplicate or conflicting decision on a transfer that has already left AWAITING_SCREENING is rejected and leaves the transfer unchanged.

Request​

Responses​

Decision accepted. data is the operation that applies the decision; it has no relationships or links.