# accountant.changes.request

Accountants with corrections access only: ask the company to attach an existing receipt to a bank record (attach_receipt with entryId and receiptEntryId), match a receipt to a same-currency bank payment (settle_match with entryId and transactionId), or check which contractor a payment belongs to (contractor_attribution with contractorId and transactionId), with a reason and idempotency key. Nothing changes until a company administrator approves it; payouts, agreements and settings are never offered.

`POST /api/v1/accounting/accountant.changes.request`

Permissions: `accounting:read`, `accounting:write` · Roles:  · Idempotency key required

Not available over MCP: Accountants' corrections grant isn't offered over MCP yet: phase 1 is read and comment only.

## Fields

#### kind: "attach_receipt"

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `kind` | "attach_receipt" | Yes | Which kind of record or job this is. |
| `entryId` | string (ID) | Yes | The ID of an accounting entry, from entries.list or attention.mine. |
| `receiptEntryId` | string (ID) | Yes | The ID of the related record. |
| `reason` | string | Yes | A short note saying why, kept in the record's history. 10–1000 characters. |
| `idempotencyKey` | string | Yes | Any unique text you generate once per intended change, so a retried request only happens once. Send it as the Idempotency-Key header instead if you prefer; if you send both they must match. 8–200 characters. |

#### kind: "settle_match"

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `kind` | "settle_match" | Yes | Which kind of record or job this is. |
| `entryId` | string (ID) | Yes | The ID of an accounting entry, from entries.list or attention.mine. |
| `transactionId` | string (ID) | Yes | The ID of a bank or card transaction, from transactions.list. |
| `reason` | string | Yes | A short note saying why, kept in the record's history. 10–1000 characters. |
| `idempotencyKey` | string | Yes | Any unique text you generate once per intended change, so a retried request only happens once. Send it as the Idempotency-Key header instead if you prefer; if you send both they must match. 8–200 characters. |

#### kind: "contractor_attribution"

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `kind` | "contractor_attribution" | Yes | Which kind of record or job this is. |
| `contractorId` | string | Yes | The ID of a contractor, from contractors.list. 1–200 characters. |
| `transactionId` | string (ID) | Yes | The ID of a bank or card transaction, from transactions.list. |
| `reason` | string | Yes | A short note saying why, kept in the record's history. 10–1000 characters. |
| `idempotencyKey` | string | Yes | Any unique text you generate once per intended change, so a retried request only happens once. Send it as the Idempotency-Key header instead if you prefer; if you send both they must match. 8–200 characters. |

## Example request

```bash
curl https://app.getoatmilk.com/api/v1/accounting/accountant.changes.request \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "kind": "attach_receipt",
  "entryId": "7f0f6c1e-1c1f-4b5e-9c8d-2f5e8e3c1a10",
  "receiptEntryId": "7f0f6c1e-1c1f-4b5e-9c8d-2f5e8e3c1a10",
  "reason": "Synthetic example from the docs"
}'
```

Reference page: https://app.getoatmilk.com/docs/api/accountant.changes.request
