contractors.create
Add a contractor with displayName, legalName, email (unique in the organization), an optional two-letter country, an optional jobRoleId (an active role from contractorOps.roles.list; add one with contractorOps.roles.save) and idempotencyKey. No invitation is sent: invite them with contractors.invite, or share the link from contractors.invitations.link.
/api/v1/accounting/contractors.createPermissions
Who can call it
Retries
MCP
accounting_contractors_createFields
displayNamestringRequired1–200 characters
legalNamestringRequired1–300 characters
emailstring (email)RequiredAn email address.
at most 320 characters
countrystringTwo-letter country or province code
jobRoleIdstring (ID) or nullidempotencyKeystringRequiredAny 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–150 characters
Example
curl https://app.getoatmilk.com/api/v1/accounting/contractors.create \
-H "Authorization: Bearer $OATMILK_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"displayName": "Synthetic Ventures Inc.",
"legalName": "Synthetic Ventures Inc.",
"email": "finance@example.com"
}'{
"data": { … }
}Try it
Try it
Checks your input with this action’s real schema and answers like the API, with synthetic data. No key needed, and nothing changes.
curl https://app.getoatmilk.com/api/v1/accounting/contractors.create \
-H "Authorization: Bearer $OATMILK_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"displayName": "Synthetic Ventures Inc.",
"legalName": "Synthetic Ventures Inc.",
"email": "finance@example.com"
}'More in Contractors.