# company.facts.apply

Save the details a person chose from company.facts.review into the company profile, in one change: picks ([{ documentId, key }], one record per detail, from the options shown), checked (the ids of the records whose findings the person saw, so the ones they left aren't asked about again), expectedRevision (the review's revision) and idempotencyKey. Only call it after the person confirmed the values. Each saved detail notes its record as the source. A GST/HST number, registration date or filing frequency also marks the company as registered for GST/HST; a GST/HST number has to start with the business number. A changed profile is refused with CONFLICT: read the review again. Returns the saved profile and revision, applied and checked. Run accounting_compliance_refresh afterwards to rebuild the tax deadlines from the new details.

`POST /api/v1/accounting/company.facts.apply`

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

MCP tool: `accounting_company_facts_apply`

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `picks` | array of objects | Yes | at most 60 items. |
| `picks[].documentId` | string (ID) | Yes | The ID of the related record. |
| `picks[].key` | enum | Yes | One of: `legalName`, `operatingName`, `businessNumber`, `corporationNumber`, `incorporationDate`, `jurisdiction`, `entityCountry`, `formationJurisdiction`, `legalForm`, `usFederalTaxClassification`, `registration`, `gstHstAccount`, `gstHstEffectiveDate`, `gstHstFrequency`, `fiscalYearEnd`, `registeredOffice`, `directors`, `officers`, `shareholders`. |
| `checked` | array of strings (ID) |  | at most 50 items. Default `[]`. |
| `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 1000000000. |
| `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–180 characters. |

## Example request

```bash
curl https://app.getoatmilk.com/api/v1/accounting/company.facts.apply \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "picks": [
    {
      "documentId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
      "key": "legalName"
    }
  ],
  "expectedRevision": 3
}'
```

Reference page: https://app.getoatmilk.com/docs/api/company.facts.apply
