Skip to main content
A Payout represents a single instruction to move funds from a Business’s Cleff account to a Beneficiary. Every Payout belongs to exactly one Business and one environment (sandbox or production) and is identified by a server-issued payout_id.

Lifecycle

A Payout flows through an explicit state machine: See ADR-0010 for the state-machine and disbursement-attempt model. The Payout response surfaces only the convenience triple from the latest DisbursementAttempt; the attempts list itself is intentionally not exposed.

Idempotency

POST /v1/payouts is idempotent on (Business, environment, idempotency_key) within a 24-hour window. A replay returns the original Payout with HTTP 200 instead of 201.

Decisions

A ValidatorDecision records an approve/reject outcome by an actor (human or automated). The canonical write path is POST /v1/payouts/{payoutId}/decisions; approve and reject are convenience aliases that synthesise a Decision under the hood and share the same idempotency and state-machine guarantees.

Endpoints