clawsettle
Settlement rail adapter service.
GET /healthPOST /v1/stripe/webhookPOST /v1/stripe/forwarding/retry(admin)POST /v1/payouts/connect/onboardPOST /v1/payouts(idempotency required)GET /v1/payouts?account_did=...&from=...&to=...&cursor=...&limit=...(admin)GET /v1/payouts/:idPOST /v1/payouts/:id/retry(admin)GET /v1/payouts/ops/stuck(admin)GET /v1/payouts/ops/failed(admin)GET /v1/reconciliation/payouts/daily?date=YYYY-MM-DD&format=json|csv(admin)POST /v1/netting/runs(admin, idempotency required)GET /v1/netting/runs/:id(admin)GET /v1/netting/runs/:id/report?format=json|csv(admin)POST /v1/loss-events(admin, idempotency required)POST /v1/loss-events/:id/resolve(admin, idempotency required)GET /v1/loss-events(admin or SETTLE_LOSS_READ_TOKEN)GET /v1/loss-events/:id(admin or SETTLE_LOSS_READ_TOKEN)GET /v1/loss-events/outbox?operation=apply|resolve(admin or SETTLE_LOSS_READ_TOKEN)POST /v1/loss-events/ops/retry(admin)
Stripe dispute automation (ECON-RISK-MAX-003)
Dispute events received via POST /v1/stripe/webhook are automatically bridged to the loss-event pipeline:
charge.dispute.created→ creates loss event (apply freeze)charge.dispute.closed(status=won) → resolves loss event (unfreeze)charge.dispute.closed(status=lost) → marks permanent loss (stays frozen)charge.dispute.updated→ updates bridge metadata (no state change)