# accountant.work.preview

Resolve an exact transaction or a financial report line, total, account, general ledger, uncategorized scope or reconciliation component to its current original record IDs/revisions. Returns an immutable preview, exact saved records, currency-separated totals and unavailable or omitted source blockers. No work is assigned and no notification is sent. A report amount alone never establishes record membership.

`GET | POST /api/v1/accounting/accountant.work.preview`

Permissions: `accounting:read` · Roles: 

MCP tool: `accounting_accountant_work_preview`

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `kind` | enum | Yes | Which kind of record or job this is. One of: `classify`, `reconcile`. |
| `source` | object | Yes | Where the record came from. |
| `source.type` | "entry" | Yes |  |
| `source.entryId` | string (ID) | Yes | The ID of an accounting entry, from entries.list or attention.mine. |
| `source.expectedRevision` | integer | Yes | The record's current revision, from the last time you read it. If someone changed the record since, the request is refused with a conflict so you can reload and check before trying again. at most 9007199254740991; greater than 0. |
| `source.type` | "bank_transaction" | Yes |  |
| `source.transactionId` | string (ID) | Yes | The ID of a bank or card transaction, from transactions.list. |
| `source.expectedRevision` | integer | Yes | The record's current revision, from the last time you read it. If someone changed the record since, the request is refused with a conflict so you can reload and check before trying again. at most 9007199254740991; greater than 0. |
| `source.type` | "records" | Yes |  |
| `source.entries` | array of objects |  | at most 100 items. Default `[]`. |
| `source.entries[].id` | string (ID) | Yes | The record's ID. |
| `source.entries[].revision` | integer | Yes | at most 9007199254740991; greater than 0. |
| `source.transactions` | array of objects |  | at most 100 items. Default `[]`. |
| `source.transactions[].id` | string (ID) | Yes | The record's ID. |
| `source.transactions[].revision` | integer | Yes | at most 9007199254740991; greater than 0. |
| `source.period` | object |  | The period to cover. No other fields. |
| `source.period.kind` | "corporate" | Yes | Which kind of record or job this is. |
| `source.period.from` | string | Yes | The first date to include, as YYYY-MM-DD. |
| `source.period.to` | string | Yes | The last date to include, as YYYY-MM-DD. |
| `source.label` | string |  | at most 200 characters. |
| `source.filters` | object |  | No other fields. |
| `source.filters.search` | string |  | Text to search for. at most 200 characters. |
| `source.filters.status` | string |  | Only include records with this status. at most 40 characters. |
| `source.filters.from` | string |  | The first date to include, as YYYY-MM-DD. |
| `source.filters.to` | string |  | The last date to include, as YYYY-MM-DD. |
| `source.filters.categoryId` | string |  | The ID of a category, from categories.list. at most 200 characters. |
| `source.filters.accountId` | string |  | The ID of a bank, card or payment account, from accounts.list. at most 200 characters. |
| `source.filters.currency` | string |  | Three-letter currency code, such as CAD or USD. exactly 3 characters. |
| `source.type` | "report" | Yes |  |
| `source.period` | object | Yes | The period to cover. No other fields. |
| `source.period.kind` | "corporate" | Yes | Which kind of record or job this is. |
| `source.period.from` | string | Yes | The first date to include, as YYYY-MM-DD. |
| `source.period.to` | string | Yes | The last date to include, as YYYY-MM-DD. |
| `source.reportKind` | enum | Yes | One of: `balance_sheet`, `income_statement`, `trial_balance`, `general_ledger`, `uncategorized`, `reconciliation`. |
| `source.scope` | object | Yes | No other fields. |
| `source.scope.type` | enum | Yes | One of: `all`, `line`, `account`, `component`, `total`. |
| `source.scope.key` | string |  | 1–300 characters. |
| `source.expectedSnapshotFingerprint` | string |  | SHA-256 hash as 64 lowercase hex characters. |
| `source.expectedSourceFingerprint` | string |  | SHA-256 hash as 64 lowercase hex characters. |

## Example request

```bash
curl https://app.getoatmilk.com/api/v1/accounting/accountant.work.preview \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "classify",
  "source": {
    "type": "entry",
    "entryId": "7f0f6c1e-1c1f-4b5e-9c8d-2f5e8e3c1a10",
    "expectedRevision": 3
  }
}'
```

Reference page: https://app.getoatmilk.com/docs/api/accountant.work.preview
