# personalTax.grants.prepare

Prepare an exact browser review of allowing named accountants to view one of your live organization consents. Include consentId, accountantUserIds, expiry, expectedRevision and idempotencyKey. Each accountant also needs current organization tax_numbers access. Preparing a review grants nothing.

`POST /api/v1/accounting/personalTax.grants.prepare`

Permissions: `accounting:read`, `accounting:write` · Roles: admin, finance, contributor, accountant · Idempotency key required · Send `expectedRevision`

MCP tool: `accounting_personal_tax_grants_prepare`

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `consentId` | string (ID) | Yes | The ID of the related record. |
| `accountantUserIds` | array of strings | Yes | A list of record IDs. 1–20 items; each 1–200 characters. |
| `expiresAt` | string (date-time) or null | Yes | When this stops working, as an ISO 8601 date and time. |
| `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. 0 to 9007199254740991. |
| `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/personalTax.grants.prepare \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "consentId": "7f0f6c1e-1c1f-4b5e-9c8d-2f5e8e3c1a10",
  "accountantUserIds": [
    "example"
  ],
  "expiresAt": "2026-09-30T14:00:00Z",
  "expectedRevision": 3
}'
```

Reference page: https://app.getoatmilk.com/docs/api/personalTax.grants.prepare
