Payout Intent Close
Close a stuck payout intent (global admin). Body: {tenant, payout_id, action, reason, transfer_id?}.
link the transfer EXISTS at Stripe (transfer_id, read by GET /transfers/{id}). It must be PROVABLY this intent's: its transfer_group equals the intent's, or its metadata.payout_id AND metadata.tenant name this intent — a same-amount transfer of another payout line is refused (transfer_not_this_intent), as is a transfer already booked/linked anywhere in the ledger (transfer_already_booked). Plus same destination, amount and currency. Then book it — one SB + the payout event — and close. abandon no transfer exists: close with a required reason. Refused when the intent has no transfer_group (cannot be verified at Stripe), while the transfer_group lookup finds a transfer (link it instead) or when it cannot be done. The held amount goes back to the seller's payable balance; the next run pays it under a new seq.
NOT gated on AGENT_MDX_PAYOUTS (#1279 G2): a close never creates a transfer (link books one that already exists at Stripe, abandon proves none exists), and after a rollback (payouts switched off with intents still open) the admin must still be able to clean them up. Still 409 self_billing_wording_pending in live mode while the D4 note is a placeholder (link issues an SB).
Emits marketplace.seller.payout_intent_closed {tenant, payout_id, outcome, reason, by, transfer_id}. Idempotent: closing an already-closed intent the same way returns it unchanged (already_closed); a different close is 409. Takes the payout run lock (409 while a run is on).
Request
- Base URL: https://api-docs.session-exchange.com (the document declares no server; this is the origin it was published from)
- URL: https://api-docs.session-exchange.com/billing/payouts/intents/close
- Auth: none declared
Response
Successful Response
Changes
No recorded changes to this operation across all 2 revisions of this API.