budgets.obligations.save
Create or edit a tax, GST/HST, accountant or other payment plan, keeping filing and payment dates separate and distinguishing an estimate from a confirmed amount. A negative amount is an expected refund and never offsets another obligation. Recording paidMinor is a planning note, not a bank payment or filed return. Link a complianceItemId to replace its automatic funding plan.
/api/v1/accounting/budgets.obligations.savePermissions
Who can call it
Retries
MCP
accounting_budgets_obligations_saveFields
idstring (ID)The 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.
0 to 9007199254740991
idempotencyKeystringRequiredAny 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
namestringRequiredA display name.
1–160 characters
kindenumRequiredWhich kind of record or job this is.
gst_hstincome_taxaccountantotheramountMinorstring or nullRequiredAn amount in cents (the currency's smallest unit), written as a whole-number string such as "1250" for $12.50.
amountBasisenumRequiredestimateconfirmedpaidMinorstringRequiredAn amount in cents (the currency's smallest unit), written as a whole-number string such as "1250" for $12.50.
Matches ^\d{1,15}$
currencystringRequiredThree-letter currency code, such as CAD or USD.
periodFromstring (date) or nullRequiredperiodTostring (date) or nullRequiredfilingDueOnstring (date) or nullRequiredpaymentDueOnstring (date) or nullRequiredaccountIdstring (ID) or nullRequiredThe ID of a bank, card or payment account, from accounts.list.
reminderDaysintegerRequired0 to 365
notestringRequiredA short note, kept with the record.
at most 2000 characters
activebooleanRequiredWhether the record is turned on.
complianceItemIdstring (ID) or nullDefault null
Example
curl https://app.getoatmilk.com/api/v1/accounting/budgets.obligations.save \
-H "Authorization: Bearer $OATMILK_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"expectedRevision": 3,
"name": "Synthetic Ventures Inc.",
"kind": "gst_hst",
"amountMinor": "1",
"amountBasis": "estimate",
"paidMinor": "1250",
"currency": "CAD",
"periodFrom": "2026-09-01",
"periodTo": "2026-09-01",
"filingDueOn": "2026-09-01",
"paymentDueOn": "2026-09-01",
"accountId": "4d5e6f7a-8b9c-4d0e-8f1a-2b3c4d5e6f7a",
"reminderDays": 7,
"note": "Synthetic example from the docs",
"active": true,
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"
}'{
"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/budgets.obligations.save \
-H "Authorization: Bearer $OATMILK_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"expectedRevision": 3,
"name": "Synthetic Ventures Inc.",
"kind": "gst_hst",
"amountMinor": "1",
"amountBasis": "estimate",
"paidMinor": "1250",
"currency": "CAD",
"periodFrom": "2026-09-01",
"periodTo": "2026-09-01",
"filingDueOn": "2026-09-01",
"paymentDueOn": "2026-09-01",
"accountId": "4d5e6f7a-8b9c-4d0e-8f1a-2b3c4d5e6f7a",
"reminderDays": 7,
"note": "Synthetic example from the docs",
"active": true,
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"
}'More in Budgets and reserves.