Autopilot
What needs a person, Autopilot runs, receipt reminders and the investigator.
30 actions
Give an AI assistant only these actions with the autopilot MCP toolset.
https://app.getoatmilk.com/api/mcp?toolset=autopilotattention
- GET
attention.listList what needs a person, grouped by the one action required (find a receipt, choose a category, confirm business use, confirm income or tax, match a payout, approve), with the newest items and the reason for each. - GET
attention.mineList purchases on the caller's own cards that still need a receipt, newest first, with the card's last four digits, a page at a time: pass the returned nextCursor as cursor for the next page. total counts them all. A purchase someone already added a receipt for is left out while that receipt is matched. Finance assigns cardholders on each card; any member can read their own list and upload the receipts, with uploads.prepare receiptFor set to the purchase.
autopilot
- POST
autopilot.classifyRun the Autopilot rules, classifier, evidence and tax checks for up to 25 entries now. With apply false it returns what Oatmilk would do without writing anything; with apply true it saves the result like a normal Autopilot pass. - GET
autopilot.explainExplain an entry's Autopilot state: the classification and its source, evidence and tax status, the single action a person needs to take, and every step Oatmilk already tried. - GET
autopilot.statusSummarize Autopilot for the organization: bank lines not yet in the books, transactions waiting for AI, how many need a person, and the most recent jobs. - GET
autopilot.summaryA light Autopilot summary for Home: whether Autopilot is on, and how many transactions it finished in total and this week. Cheap to call; use autopilot.status for the full backlog.
autopilot.jobs
- POST
autopilot.jobs.cancelCancel a queued or running Autopilot job. Work already applied stays applied. - GET
autopilot.jobs.getRead one Autopilot job with its progress: processed, finished automatically, needing a person, and failures. - GET
autopilot.jobs.listList recent Autopilot jobs with status, progress counts and timing. - POST
autopilot.jobs.startStart an Autopilot job. kind autopilot processes everything new or changed; kind rerun re-evaluates every transaction in an optional date range, account list or entry list, and onlyOpen skips finished ones. Transactions a person already finished or corrected are never overwritten. Returns the queued job.
autopilot.rules
- GET
autopilot.rules.listList the merchant category rules Oatmilk learned from people's corrections, with the category, how many times a person confirmed it, and whether it is on. - POST
autopilot.rules.updateTurn a learned merchant rule on or off, or change its category, with id, expectedRevision and idempotencyKey. Future Autopilot passes use the change; finished transactions stay as they are.
autopilot.settings
- GET
autopilot.settings.getRead the organization's Autopilot policy: whether AI runs after each sync, whether confident transactions are finished automatically, the smallest purchase that gets a receipt request, and how many days Oatmilk searches before asking. - POST
autopilot.settings.updateChange the Autopilot policy with expectedRevision and idempotencyKey: enabled, autoComplete, runAfterSync, receiptRequestMinimumMinor (minor units), evidenceGraceDays, and stripeMissingTax (ask, or no_tax to treat Stripe payments without any tax record as having no GST/HST). Changes that let Oatmilk finish more re-check open transactions.
chase.preferences
- GET
chase.preferences.getRead your own receipt reminders in this organization: status (active, paused or stopped) and pausedUntil. They're the emails listing purchases on your cards that still need a receipt. A pause that has run out reads as active. - POST
chase.preferences.updateChange your own receipt reminders, like the links in every reminder: action pause (with days, 1 to 90, default 30), stop to turn them off, or resume to turn them back on, with idempotencyKey. It changes only your reminders, never anyone else's, and never the organization's reminder settings.
chase
- GET
chase.previewPreview receipt reminders to cardholders without sending anything: the settings, each cardholder with purchases on their cards still missing receipts (how many, the oldest, the next tax deadline those purchases count toward, how often they're reminded right now, whether one is due today or when the next one goes out, and whether they paused or turned reminders off), the last reminders sent and the last replies with what the agent found in them. - POST
chase.runSend receipt reminders that are due now, or send one cardholder theirs now with userId. Each person gets at most one reminder a day, and never while they've paused or turned reminders off. Returns how many were sent and the refreshed preview.
investigator
- POST
investigator.acceptAccept an investigator proposal with id, expectedRevision and idempotencyKey: applies its category, if any, and adds a note with the answer and its source to the entry through the normal entry update, then lets Autopilot recheck the entry. - POST
investigator.dismissDismiss an investigator proposal or open investigation with id, expectedRevision and idempotencyKey. The entry keeps its normal ask for a person. - POST
investigator.financialIssueInvestigate one current financial-report component using its exact period, componentKey, expectedSourceFingerprint and idempotencyKey. Reads scoped originals and completed source facts before one proposal-only AI call. Existing settings, tenant AI access and limits apply; connected-inbox searches additionally require existing caller consent and mailboxes:search access. Returns evidence, attempted reads, a purpose explanation if supported, and the precise fact a person must confirm. Never changes financial fields, accepts proposals, sends email, imports receipts or approves accounting treatment. Same-key replay rechecks current report and source generations. - GET
investigator.forEntryRead the investigation for one entry (entryId), if any: its status (awaiting the member, queued, running, proposed, no answer, accepted, dismissed or failed), what was tried, and the proposal with its answer, confidence, summary and evidence references (sender, subject, date and a short quote). - GET
investigator.overviewRead the investigator: the caller's own consent to have their connected inbox searched and whether they have one connected, and for finance and administrators the organization's settings (on or off, email first or automatic, sources, lookback window in days, confidence needed to propose, maximum investigations a day, which asks it works on) and the 20 most recent investigations with their status and proposals. - POST
investigator.runRun the investigator now for the organization, or investigate one entry (entryId) immediately. Members' consent and the daily limit still apply.
investigator.consent
investigator.settings
requests
- POST
requests.createAsk an eligible person to resolve a record, optionally with a personal message. Find the eligible people and their assigneeUserId with requests.people first. Creates their personal task immediately and batches their notification email after ten minutes. Requires an idempotency key; one open request per record and recipient. - GET
requests.listList personal action requests, by default your open tasks. With mine false, list visible requests you sent or finance-visible requests for one record. - GET
requests.peopleList the eligible people (possible assignees) for one record: active people who can access it and help resolve its next action, each with the userId that requests.create takes as assigneeUserId. Includes the bound contractor for their own timesheet or profile. - POST
requests.updateComplete your assigned request or cancel a request you sent. Administrators may resolve or cancel visible requests. Requires the current revision and an idempotency key.