Contractors

contractorOps.payments.update

Administrators set a contractor's payment method (Wise email, bank transfer, Interac, or other), currency, and payment details. Omitted detail fields keep their saved values; null clears them. Responses are masked, the audit log records only which fields changed, the saved Wise recipient is reset, and approved payouts must be approved again. When the saved details can't be read (the profile's paymentDetailsState isn't readable), nothing changes unless the details sent are a complete set for the method; with an encryption key that isn't set any more, that also needs replaceUnreadable: true.

POST/api/v1/accounting/contractorOps.payments.update

Permissions

accounting:readaccounting:writeaccounting:admin

Who can call it

admin

Retries

Idempotency key required, with expectedRevision

MCP

Not offered over MCP: Replacing unreadable saved bank details needs an administrator in the dashboard.

Fields

  • contractorIdstring (ID)Required

    The ID of a contractor, from contractors.list.

  • expectedRevisioninteger

    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.

    at most 9007199254740991 · greater than 0

  • idempotencyKeystringRequired

    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

  • methodenumRequired
    wise_emailbank_transferinteracother
  • currencystringRequired

    Three-letter currency code, such as CAD or USD.

  • detailsobjectRequired

    No other fields

  • replaceUnreadableboolean

Example

curl https://app.getoatmilk.com/api/v1/accounting/contractorOps.payments.update \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "contractorId": "4d5e6f7a-8b9c-4d0e-8f1a-2b3c4d5e6f7a",
  "method": "wise_email",
  "currency": "CAD",
  "details": {}
}'
Response
{
  "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/accounting/contractorOps.payments.update
curl https://app.getoatmilk.com/api/v1/accounting/contractorOps.payments.update \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "contractorId": "4d5e6f7a-8b9c-4d0e-8f1a-2b3c4d5e6f7a",
  "method": "wise_email",
  "currency": "CAD",
  "details": {}
}'

More in Contractors.