# contractorOps.terms.set

Set a contractor's agreement terms without a signature (for example a daily or weekly hour limit, or terms of an agreement signed elsewhere), with contractorId, terms, effectiveFrom, optional jobRoleId and idempotencyKey. A titled agreement must link to an active matching job role; a unique match is resolved when jobRoleId is omitted. They take effect from effectiveFrom: hour limits apply to every timesheet entry from then on, and role, rate, pay schedule and dates update the profile. A blank rate keeps the rate already agreed (the previous version's, or the profile's). Pass basisTermsId (the version in effect when you read it, or null for none) to be refused when someone else changed the agreement since. A first version can't start after hours that are waiting to be paid.

`POST /api/v1/accounting/contractorOps.terms.set`

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

MCP tool: `accounting_contractor_ops_terms_set`

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `contractorId` | string (ID) | Yes | The ID of a contractor, from contractors.list. |
| `terms` | any | Yes |  |
| `effectiveFrom` | string (date) | Yes |  |
| `jobRoleId` | string (ID) |  | The ID of the related record. |
| `note` | string |  | A short note, kept with the record. at most 2000 characters. |
| `basisTermsId` | string (ID) or null |  |  |
| `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/contractorOps.terms.set \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "contractorId": "4d5e6f7a-8b9c-4d0e-8f1a-2b3c4d5e6f7a",
  "terms": null,
  "effectiveFrom": "2026-09-01"
}'
```

Reference page: https://app.getoatmilk.com/docs/api/contractorOps.terms.set
