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 isPOST /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
- Create a Payout:
POST /v1/payouts - Bulk-create Payouts:
POST /v1/payouts/bulk - List Payouts:
GET /v1/payouts - Retrieve a Payout:
GET /v1/payouts/{payoutId} - Approve a Payout:
POST /v1/payouts/{payoutId}/approve - Reject a Payout:
POST /v1/payouts/{payoutId}/reject - Submit a Decision:
POST /v1/payouts/{payoutId}/decisions - List Decisions:
GET /v1/payouts/{payoutId}/decisions