Inbox and uploads

mail.drafts.update

Save reviewed company financial facts with current message and draft revisions.

POST/api/v1/accounting/mail.drafts.update

Permissions

mail:readmail:write

Who can call it

admin, finance

Retries

Idempotency key required, with expectedRevision

MCP

accounting_mail_drafts_update

Fields

  • idstring (ID)Required

    The record's ID.

  • expectedRevisionintegerRequired

    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–160 characters

  • messageRevisionintegerRequired

    The related record's current revision, from the last time you read it.

    at most 9007199254740991 · greater than 0

  • factsobjectRequired

    No other fields

Example

curl https://app.getoatmilk.com/api/v1/accounting/mail.drafts.update \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "expectedRevision": 3,
  "messageRevision": 3,
  "facts": {
    "receipts": [
      {
        "merchant": "example",
        "date": "2026-09-30",
        "currency": "CAD",
        "total": "1.5",
        "subtotal": "1.5",
        "tax": "1.5",
        "tip": "1.5",
        "discount": "1.5",
        "type": "expense",
        "invoiceNumber": "example",
        "description": "Synthetic example from the docs",
        "taxes": [
          {
            "label": "example",
            "amount": "1.5"
          }
        ],
        "sourceEvidenceIds": [
          "7f0f6c1e-1c1f-4b5e-9c8d-2f5e8e3c1a10"
        ],
        "warnings": [
          "example"
        ],
        "documentKind": "receipt",
        "paymentState": "paid"
      }
    ],
    "warnings": [
      "example"
    ]
  }
}'
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/mail.drafts.update
curl https://app.getoatmilk.com/api/v1/accounting/mail.drafts.update \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "expectedRevision": 3,
  "messageRevision": 3,
  "facts": {
    "receipts": [
      {
        "merchant": "example",
        "date": "2026-09-30",
        "currency": "CAD",
        "total": "1.5",
        "subtotal": "1.5",
        "tax": "1.5",
        "tip": "1.5",
        "discount": "1.5",
        "type": "expense",
        "invoiceNumber": "example",
        "description": "Synthetic example from the docs",
        "taxes": [
          {
            "label": "example",
            "amount": "1.5"
          }
        ],
        "sourceEvidenceIds": [
          "7f0f6c1e-1c1f-4b5e-9c8d-2f5e8e3c1a10"
        ],
        "warnings": [
          "example"
        ],
        "documentKind": "receipt",
        "paymentState": "paid"
      }
    ],
    "warnings": [
      "example"
    ]
  }
}'

More in Inbox and uploads.