---
title: "Payout Intent Close"
method: POST
path: "/billing/payouts/intents/close"
---

# Payout Intent Close

`POST /billing/payouts/intents/close`

## 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

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).

## Response `200`

Successful Response

- unknown

---

[API](https://skmtc.dev/session-exchange/apis/a4sx.md) · [All operations](https://skmtc.dev/session-exchange/apis/a4sx/llms.txt) · [OpenAPI document](https://skmtc.dev/session-exchange/apis/a4sx/revisions/abaefc33dfc7?raw)
