# Answer a dispute

URL: /systems/finance/answer-a-dispute · Id: `guide:answer-a-dispute`

> Say "answer this chargeback" and your agent sends the order and delivery records to the bank before the deadline.

When a customer disputes a charge, the money is held until the bank decides. Your agent answers the [Dispute](/business/nouns/dispute) with your own records as proof, before the deadline.

Needs: [Open a bank account](/systems/finance/open-a-bank-account)

**Before real money moves**

- Who says yes: You. Your agent shows you the run and waits for your [Approval](/business/nouns/approval).
- You leave the chat: Never: it all happens in the chat.

## What you get
- 1 answer to the chargeback, sent before its deadline (Dispute)
- 2 records sent as proof: the order and its delivery (Order)

## Your agent does
**For agents**

- Guide: `guide:answer-a-dispute`, status `beta`. Page: [/systems/finance/answer-a-dispute.md](/systems/finance/answer-a-dispute.md).
- Approval: ask the founder first. Show the run, then wait for their Approval; a refusal ends it.
- Leaves the chat: never.
- Needs first: [Open a bank account](/systems/finance/open-a-bank-account).
- Run: call the steps in order, each through the API, SDK, CLI or MCP tab below; a later step passes the `$id` an earlier one returns. Each value marked example is the sample business’s: pass the founder’s own.

| Step | Verb | Inputs (type, required, this guide’s value) | Returns |
| --- | --- | --- | --- |
| 1 | [`Dispute.answer`](/business/nouns/dispute/answer) (`verb:Dispute.answer`) | `dispute` Dispute (an id), required: example `"dispute_harbor_1"`; `evidence` Evidence[] (ids), required: example `["evidence_order_harbor","evidence_delivery_harbor"]` | `dispute` Dispute |

Returns: the last call answers with `dispute` and its `action`, whose `status` is `done`, `pending` (waiting on an Approval or a Worker), `failed`, `canceled` or `refused`:

```json
{
  "api": "https://api.sb/leaseline.app",
  "dispute": {
    "$id": "https://api.sb/leaseline.app/disputes/dispute_harbor_1",
    "$type": "Dispute",
    "status": "answered"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Dispute.answer",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Accept it and refund instead”, or “Answer every dispute under $50 without asking me”.

Calls: `Dispute.answer`

Ask:

```text
Answer this chargeback.
A customer disputed a charge.
Fight the chargeback with our records.
```

API:

```bash
# Dispute.answer
curl -X POST https://api.sb/leaseline.app/disputes/dispute_harbor_1/answer \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"evidence":["evidence_order_harbor","evidence_delivery_harbor"]}'
```

SDK:

```ts
import { $ } from 'startup-builder'

await $.Dispute.answer({ dispute: 'dispute_harbor_1', evidence: ['evidence_order_harbor', 'evidence_delivery_harbor'] })
```

CLI:

```bash
npx startup-builder do Dispute.answer --json '{"dispute":"dispute_harbor_1","evidence":["evidence_order_harbor","evidence_delivery_harbor"]}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Dispute.answer({ dispute: 'dispute_harbor_1', evidence: ['evidence_order_harbor', 'evidence_delivery_harbor'] })"
  }
}
```

## Change it
- Accept it and refund instead.
- Answer every dispute under $50 without asking me.

## Under the hood
- Systems: [Billing](/systems/billing)
- Nouns: [Dispute](/business/nouns/dispute)
- Events: [`Dispute.answered`](/business/events/Dispute.answered)