signatures.prepare
Start signing an agreement in your own portal session. Only you can, interactively; agents can't sign for you.
POST
/api/v1/contractor/signatures.prepareINTERACTIVE_SIGNATURE_REQUIRED. The contractor signs or declines in their own portal session. API and MCP calls are refused with a portalUrl to the agreement.
Permissions
contractor:readcontractor:write
Who can call it
contractor
Retries
No idempotency key, with expectedRevision
MCP
Not offered over MCP: The named contractor signs or declines in person, after verifying again.
Fields
idstring (ID)RequiredThe record's ID.
expectedRevisionintegerRequiredThe 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
Example
curl https://app.getoatmilk.com/api/v1/contractor/signatures.prepare \
-H "Authorization: Bearer $OATMILK_OAUTH_TOKEN" \
-H "X-Accounting-Organization: $OATMILK_ORGANIZATION_ID" \
-H "Content-Type: application/json" \
-d '{
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"expectedRevision": 3
}'{
"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.
POST/api/v1/contractor/signatures.prepare
curl https://app.getoatmilk.com/api/v1/contractor/signatures.prepare \
-H "Authorization: Bearer $OATMILK_OAUTH_TOKEN" \
-H "X-Accounting-Organization: $OATMILK_ORGANIZATION_ID" \
-H "Content-Type: application/json" \
-d '{
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"expectedRevision": 3
}'More in Contractor portal.