Skip to main content
POST
Resolve an open dispute (tenant-scoped)
Records the operator’s decision on an open dispute and closes it. Accepting (the default) moves the dispute to resolved; rejecting moves it to rejected. Either way the optional note is stored on the dispute and resolved_at is set. Only an open dispute can be resolved — a dispute that is already closed returns 404. On accept you may also issue an adjustment credit note against the disputed invoice with issue_credit: true. The credit goes through the ordinary credit-note create path — fully ledgered, reason dispute_resolution, type adjustment — and is issued before the dispute is closed: if the credit fails, the dispute stays open for a clean retry, never a resolved dispute with no promised credit. Maker-checker applies: a credit issued by a non-admin user lands in pending_approval; API keys and admin/owner users issue directly. Find open disputes with List Disputes and read one with Get Dispute.

Path Parameters

Request Body

The body is optional; an empty body accepts the dispute with no note and no credit.

Example Request

Response

The response is a bare object — not wrapped in data. status is resolved on accept and rejected on reject. credit_note is present only when a credit was issued.
A rejection, or an accept without a credit, returns just the status:

Fields

Errors

Errors use the standard envelope — see Errors.

Authorizations

Authorization
string
header
required

Tenant API key obtained from POST /auth/register or POST /v1/developer/keys.

Path Parameters

id
string<uuid>
required

Dispute ID.

Body

application/json

Optional; an empty body accepts the dispute with no note and no credit.

outcome
enum<string>
default:accept

accept (default) closes the dispute in the customer's favor (status → resolved); reject declines it (status → rejected).

Available options:
accept,
reject
note
string

Optional admin resolution note.

issue_credit
boolean
default:false

Accept only. When true, issues an adjustment credit note (reason dispute_resolution) against the disputed invoice before the dispute is closed. Ignored on reject.

credit_amount
integer<int64>

Credit amount in minor units. 0 or omitted means the invoice's amount still due (falling back to its total). Must not exceed the invoice total (today that violation surfaces as 500, not 400; 400 covers only a malformed body, an unknown outcome, or a negative credit_amount).

Required range: x >= 0

Response

Dispute resolved. Action-shape {status} object (not the Dispute resource, not wrapped in data); credit_note is present only when a credit was issued.

status
enum<string>
Available options:
resolved,
rejected
Example:

"resolved"

credit_note
object

Present only when issue_credit was true on accept.