The API, on one page.
This page is for connecting ChatGPT the long way. The list below is generated from the same rules that check every request: if it’s here, it’s real. Most people can skip it and use the setup page.
llms.txt: orientation, written for agents
openapi.json: the same 257 operations, machine-readable
https://mcp.mintro.money/mcp: MCP, same bearer key
Start here
- Base URL
https://api.mintro.money
- Auth
Authorization: Bearer <your api key>. A key comes from the app, under Settings. - Budget
defaultworks in place of a budget id while you have one open budget. - Money
Integer cents, signed. Spending is negative. Never a float.
- Retries
Send
Idempotency-Keyon a write and a retry cannot happen twice. - Errors
Always
{ error: { code, message } }. Any call can answer 401 (the key), 429 (slow down, seeRetry-After) or 500 (retry once). Each operation lists the rest.
That answers who the key is, what it may do, and which budgets it sees. Open any operation below for its parameters, body, what it returns, and a call you can paste.
Me
The calling key: who it is, its scopes, budgets and limits; preferences and API keys.
- get/v1/keysThe account's agent keys (never their secrets)
- post/v1/keysMint a key for one agent; the secret is in this response and never again
- delete/v1/keys/{id}Revoke a key
- post/v1/keys/{id}/rotateRotate a key: a successor with the same name and scopes, the old one ended
- get/v1/preferencesHow this caller likes the live app: notes on, auto-hide, for how long, the Community door, and cashflow on Budget
- patch/v1/preferencesChange how the live app shows itself to this caller
- get/v1/me/profileThis person's Community profile: on or off, username, the line, the counts they show
- patch/v1/me/profileTurn Community on or off, set the username, the line, and whether counts show
- get/v1/me/founder-claimThe founder seat this budget holds, and whether it is on the wall as you
- post/v1/me/founder-claimPut your name on the wall: claim this budget's founder seat onto your profile
- delete/v1/me/founder-claimTake your name off the seat; the number stays on the wall
- get/v1/meWho this key is: scopes, budgets, plan limits, rate limit
Budgets
The top-level container: create, copy, export, set up, templates.
- get/v1/budgets/{budget_id}/templatesStarter envelope templates
- post/v1/budgets/{budget_id}/templates/{id}/applyCreate the template's envelopes that do not already exist
- post/v1/budgets/{budget_id}/copy/previewWhat starting a budget from this one would bring, without writing anything
- post/v1/budgets/{budget_id}/copyStart a new budget as a selective copy of this one
- get/v1/budgets/{budget_id}/setupWhere setup stands: mode, the current step, what is done, skipped or empty
- patch/v1/budgets/{budget_id}/setupMove setup along: choose the mode, set the step, skip a step, finish or reopen
- get/v1/budgetsEvery budget on the account
- post/v1/budgetsStart a new budget
- get/v1/budgets/{budget_id}One-call budget snapshot
- patch/v1/budgets/{budget_id}Rename a budget, close/reopen it, set its currency or time zone, or set All cash's Alarm and Warning
- get/v1/budgets/{budget_id}/exportOne budget as a single JSON document
- get/v1/exportEvery budget in the household as one JSON document
Envelopes
Envelopes and the categories that group them, targets included.
- get/v1/budgets/{budget_id}/categoriesList categories in render order
- post/v1/budgets/{budget_id}/categoriesCreate a category
- patch/v1/budgets/{budget_id}/categories/{id}Rename a category or change its position
- delete/v1/budgets/{budget_id}/categories/{id}Delete a category; its envelopes survive, uncategorized
- put/v1/budgets/{budget_id}/envelopes/orderBulk placement: reorder categories and envelopes in one call
- post/v1/budgets/{budget_id}/envelopesCreate an envelope
- get/v1/budgets/{budget_id}/envelopesList envelopes
- get/v1/budgets/{budget_id}/envelopes/{id}Envelope with recent entries
- patch/v1/budgets/{budget_id}/envelopes/{id}Rename, close (force for entries, settle for money available), set or clear target, choose what the cashflow line projects
- delete/v1/budgets/{budget_id}/envelopes/{id}Delete a closed envelope; what it held goes back where it came from
Assigning
The month view, ready to assign, and giving money a job.
- post/v1/budgets/{budget_id}/assignmentsGive money a job: assign, move, record income, cover overspending
- get/v1/budgets/{budget_id}/incomeEvery income row of a month: what made ready to assign
- delete/v1/budgets/{budget_id}/income/{id}Reverse an income row: ready to assign goes down, no balance moves
- get/v1/budgets/{budget_id}/monthThe month view: ready to assign, and available per envelope
- post/v1/budgets/{budget_id}/auto-assignFund the month: YNAB's whole auto-assign menu, in one call
- post/v1/budgets/{budget_id}/assignments/batchMove money between envelopes several times at once, all or none
Entries
Filing transactions into envelopes, splits included.
Transactions
The bank's rows: inbox, import, edits, transfers, matches.
- get/v1/inboxUnfiled, unexpired transactions, newest first
- get/v1/transactionsStored transactions: the register
- post/v1/transactions/importManual import: the agent brings normalized transactions (spending negative); idempotent per identical row
- post/v1/transactions/import/csvImport a bank export as written: Mintro reads the CSV (YNAB's register, RBC, Chase, Amex, TD/CIBC without a header, or any headed file) and converts to cents; dry_run previews
- patch/v1/transactions/{id}Edit a manually entered transaction
- delete/v1/transactions/{id}Delete a manually imported transaction
- get/v1/transactions/{id}Transaction with its entries
- post/v1/transactions/{id}/matchThis bank row is the bill or row I already entered
- post/v1/transactions/{id}/unlockTake one reconciled row out of its lock
- post/v1/transactions/{id}/loan-paymentThis bank row paid a loan
- delete/v1/transactions/{id}/loan-paymentThis row did not pay that loan after all
- post/v1/transactions/{id}/holding-tradeThis bank row bought into, or sold out of, a holding
- delete/v1/transactions/{id}/holding-tradeThis row did not trade that holding after all
- post/v1/transfersMove money between the person's own accounts
- post/v1/transfers/confirmThese two existing rows are a transfer (you said so)
- delete/v1/transfers/{id}Remove both legs of a transfer
Accounts
Accounts, reconciliation, cleared state, forecasts.
- post/v1/accountsAdd an account by hand
- get/v1/accountsEvery account in the budget
- get/v1/accounts/{id}/reconciliationWhere this account stands against the bank
- patch/v1/accounts/{id}/clearedTick transactions on or off the cleared list
- get/v1/accounts/{id}/forecastProject this account's cash through a horizon
- post/v1/accounts/{id}/reconcileCompare cleared rows against a statement, and lock if they agree
- patch/v1/accounts/{id}Rename an account, point a credit account at its payment envelope, set its Alarm and Warning lines, or give a card its terms
- delete/v1/accounts/{id}Delete a manual account and everything imported into it
- post/v1/accounts/{id}/adoptThis bank account is my account: pair it with the one kept by hand
- post/v1/accounts/{id}/unlinkStop syncing this account and keep it by hand; its history stays
Connections
Bank connections through Plaid, and the rows a bank sends waiting for a person.
- get/v1/connections/{id}/bank-accountsThe accounts a linked bank shared, with the bank's balances and what each is mapped to
- get/v1/bank-accountsEvery bank account in staging, across all linked banks
- put/v1/bank-accounts/{id}Say what a bank account is: one of your accounts, a new one, one of your loans, or don't sync
- get/v1/bank-accounts/{id}/rowsWhat the bank sent for this account, each staged row with a suggestion
- post/v1/bank-accounts/{id}/landLand, match or skip staged bank rows, as the human decided
- get/v1/bank-activityWhat the bank and people did to each bank row, newest first, kept thirteen months
- post/v1/bank-activity/{id}/undoUndo one thing sync or a person did to a bank row
- get/v1/connectionsLinked banks
- post/v1/connections/linkHosted Plaid link URL to hand to the human; only they authenticate
- post/v1/connections/{id}/relinkHosted link URL in update mode
- get/v1/connections/duplicatesBanks linked twice
- post/v1/connections/{id}/mergeKeep this link; move the other link's settings here and remove it
- delete/v1/connections/{id}Remove the bank at Plaid, keeping your history or deleting it
Payees
Clean names for where money went, and the rules that name and file by them.
- get/v1/payeesEvery payee, with how many rules and transactions carry it and when it was last used
- post/v1/payeesMake a payee (or find the one with that name)
- get/v1/payees/unnamedNames on transactions that have no payee yet
- post/v1/payees/adoptKeep names as payees
- patch/v1/payees/{id}Rename a payee everywhere; onto an existing name, merge into it
- delete/v1/payees/{id}Delete a payee and its rules; its transactions keep the bank's words
- post/v1/payees/{id}/mergeMerge this payee into another
- get/v1/payee-rulesEvery payee rule, in the order they are tried
- post/v1/payee-rulesAdd a payee rule, only after the human agreed and after previewing it
- post/v1/payee-rules/previewTest a rule before saving it: what it would name and file. Writes nothing
- post/v1/payee-rules/suggestA first-guess rule from bank text: the words without store numbers or how-it-moved words
- put/v1/payee-rules/orderSet the order rules are tried in; the first match wins
- get/v1/payee-rules/{id}One payee rule
- patch/v1/payee-rules/{id}Change a payee rule
- delete/v1/payee-rules/{id}Delete a payee rule; rows it named keep their payee
- post/v1/payee-rules/{id}/applyApply one rule to transactions already in the budget
Recurring
Bills and income that repeat, and entering them.
- post/v1/budgets/{budget_id}/recurring/{id}/enterEnter a bill: write it, file it, move to its next date
- post/v1/budgets/{budget_id}/recurring/enter-dueEnter every auto_enter bill that is due
- get/v1/budgets/{budget_id}/recurring/matchesWhich bill an inbox row looks like
- post/v1/budgets/{budget_id}/recurring/{id}/enter-from-bankThis bank row is the bill: file it and move the bill on
- get/v1/budgets/{budget_id}/recurringBills you know are coming
- post/v1/budgets/{budget_id}/recurringDeclare a recurring bill
- patch/v1/budgets/{budget_id}/recurring/{id}Change or pause a recurring bill
- delete/v1/budgets/{budget_id}/recurring/{id}Remove a recurring bill
- post/v1/budgets/{budget_id}/recurring/{id}/advanceMove a recurring bill on to its next occurrence
- post/v1/budgets/{budget_id}/recurring/{id}/moveChange when a recurring bill's next date enters
Reports
Spending reports, age of money, cash flow, net worth.
- get/v1/budgets/{budget_id}/reportSpending and funding across a window of months
- get/v1/budgets/{budget_id}/reports/spendingWhere the money went, by category, envelope or payee
- get/v1/budgets/{budget_id}/reports/planPlan against what happened, an envelope at a time
- get/v1/budgets/{budget_id}/reports/incomeIncome against spending, savings rate, card debt and repeating bills
- get/v1/budgets/{budget_id}/reports/insightsThe few facts worth saying about a window
- get/v1/budgets/{budget_id}/pictureThe entire picture: accounts, holdings, loans, net, aim projection
- get/v1/budgets/{budget_id}/net-worthNet worth over the last months, computed on read
- get/v1/budgets/{budget_id}/found-moneyWhere money is sitting that could be moving toward the first goal
- get/v1/cashflow/alertsThe budget's cashflow alerts and where each line stands
- post/v1/cashflow/alertsMake a cashflow alert
- get/v1/cashflow/alerts/{id}One cashflow alert
- patch/v1/cashflow/alerts/{id}Change a cashflow alert
- delete/v1/cashflow/alerts/{id}Remove a cashflow alert
- post/v1/cashflow/alerts/{id}/dismissHide one crossing's banner
- post/v1/cashflow/alerts/{id}/muteMute one line of an alert until it clears
- get/v1/cashflow/alert-kindsThe two alert kinds: payday missed and bill bigger than usual
- get/v1/cashflow/alert-kinds/{kind}One alert kind
- patch/v1/cashflow/alert-kinds/{kind}Turn an alert kind on or off, or change where it is heard
- post/v1/cashflow/alert-kinds/{kind}/dismissHide one notice's banner
- post/v1/cashflow/alert-kinds/{kind}/muteMute one notice until it clears
- get/v1/cashflow/digestThe person's weekly cashflow digest
- patch/v1/cashflow/digestTurn the weekly cashflow digest on or off, pick its day
- post/v1/unsubscribe/{token}Turn off a weekly cashflow digest from its email
- post/v1/cashflow/previewWhat if: the cashflow line with a purchase, an income or a moved bill. Writes nothing
- get/v1/budgets/{budget_id}/cashflow-plans/chartThe plan every cashflow chart shows for this person
- put/v1/budgets/{budget_id}/cashflow-plans/chartChoose the plan every cashflow chart shows
- get/v1/budgets/{budget_id}/cashflow-plans/currentThe current cashflow plan: what you agreed to do and how it is going
- get/v1/budgets/{budget_id}/cashflow-plansThe cashflow plans in a budget
- post/v1/budgets/{budget_id}/cashflow-plansSave a cashflow plan
- get/v1/budgets/{budget_id}/cashflow-plans/{id}One cashflow plan
- patch/v1/budgets/{budget_id}/cashflow-plans/{id}Rename a cashflow plan, change its line or moves, or change when it ends
- delete/v1/budgets/{budget_id}/cashflow-plans/{id}Delete a cashflow plan
- post/v1/budgets/{budget_id}/cashflow-plans/{id}/copyStart a new cashflow plan from this one
- get/v1/budgets/{budget_id}/cashflow-plans/{id}/lineA cashflow plan on its line: the what-if preview of its moves
- get/v1/budgets/{budget_id}/cashflow-plans/{id}/applyWhat applying a cashflow plan would do
- post/v1/budgets/{budget_id}/cashflow-plans/{id}/applyApply a cashflow plan: move its bills, set the targets asked for, keep its reminders
- post/v1/budgets/{budget_id}/cashflow-plans/{id}/undoUndo an applied cashflow plan
- post/v1/budgets/{budget_id}/cashflow-plans/{id}/moved-moneyPut back, or leave, money an older apply moved to Ready to assign
- post/v1/budgets/{budget_id}/cashflow-plans/{id}/stopStop an applied cashflow plan today
- post/v1/budgets/{budget_id}/cashflow-plans/{id}/reminders/doneMark a lump-sum reminder done
- get/v1/cashflow/mostThe most you could put in on a day and keep your balance above $0
- get/v1/cashflow/accuracyForecast against what happened: did the cashflow line come true?
- get/v1/cashflow/envelopes-vs-cashIs the money in the envelopes in the bank accounts before the next pay
- get/v1/cashflow/envelopes-vs-cash/fixWhich money moves between envelopes would back every envelope before the next pay
- get/v1/budgets/{budget_id}/cashflow-plans/{id}/checkWhat in a cashflow plan does not add up
- get/v1/age-of-moneyHow long the money you are spending sat here first
- get/v1/cashflowProjected cash: posted history plus declared recurrences
- get/v1/streaksClerk-work streaks, computed on read, off until asked
- patch/v1/streaksSet streaks to off, quiet, or on
Holdings
What you own that is not an account, and exchange rates.
- get/v1/budgets/{budget_id}/holdingsList holdings on this budget
- post/v1/budgets/{budget_id}/holdingsDeclare a holding; look up a public price when a symbol is given
- get/v1/budgets/{budget_id}/holdings/{id}One holding, and what it is expected to be worth in a month
- patch/v1/budgets/{budget_id}/holdings/{id}Rename, close, change symbol or quantity
- delete/v1/budgets/{budget_id}/holdings/{id}Delete a holding and its valuations
- post/v1/budgets/{budget_id}/holdings/{id}/refreshLook up a public price and append a valuation if found
- get/v1/budgets/{budget_id}/holdings/{id}/valuationsThe holding's history: every price and trade, with the bank row beside each trade (newest first, cap 100)
- post/v1/budgets/{budget_id}/holdings/{id}/valuationsSet the unit price by hand and append a valuation
- post/v1/budgets/{budget_id}/holdings/{id}/buyBuy more: money leaves an account and the row is linked as the buy
- get/v1/budgets/{budget_id}/fxThe exchange rates this budget's picture converts with
- put/v1/budgets/{budget_id}/fxSet an exchange rate by hand
- post/v1/budgets/{budget_id}/fx/refreshFetch today's rates (and month-ends back five years) for every currency in use
Loans
Loans, their balances and payments, and debt payoff.
- get/v1/budgets/{budget_id}/loansList installment loans on this budget
- post/v1/budgets/{budget_id}/loansDeclare an installment loan; optionally against a holding and a paying account
- get/v1/budgets/{budget_id}/loans/{id}One loan
- patch/v1/budgets/{budget_id}/loans/{id}Rename, retarget a holding or paying account, change terms, or agree remaining
- delete/v1/budgets/{budget_id}/loans/{id}Delete a loan and its balance events
- get/v1/budgets/{budget_id}/loans/{id}/balancesThe loan's history: every payment with the bank row that made it (newest first, cap 100)
- post/v1/budgets/{budget_id}/loans/{id}/paymentsRecord a payment with no bank row: a lender-charged fee, or history from before Mintro
- post/v1/budgets/{budget_id}/loans/{id}/pay-from-accountPay the loan from an account: write the outflow and link it as the payment
- get/v1/budgets/{budget_id}/debt-payoffThe debt payoff: order, extra, lump sums, and when each debt ends
- put/v1/budgets/{budget_id}/debt-payoffSet the payoff: strategy, extra a month, custom order, lump sums, freed payments
- post/v1/budgets/{budget_id}/debt-payoff/applyApply the payoff to the budget: each paired envelope's target
Aims
The aim, its outlook, and scenarios.
- get/v1/budgets/{budget_id}/aimsEvery goal on this budget, in priority order, with where each stands
- post/v1/budgets/{budget_id}/aimsAdd a goal
- put/v1/budgets/{budget_id}/aims/orderSet the priority order
- post/v1/budgets/{budget_id}/aims/previewSee where a draft goal would stand, without writing it
- get/v1/budgets/{budget_id}/aims/{id}One goal with its standing
- patch/v1/budgets/{budget_id}/aims/{id}Change a goal
- delete/v1/budgets/{budget_id}/aims/{id}Remove a goal; the contribution envelope and its money stay
- get/v1/budgets/{budget_id}/aimDeprecated: the headline goal. Use GET /aims.
- put/v1/budgets/{budget_id}/aimDeprecated: set or replace the headline goal. Use POST /aims and PATCH /aims/{id}.
- delete/v1/budgets/{budget_id}/aimDeprecated: remove the headline goal. Use DELETE /aims/{id}.
- post/v1/budgets/{budget_id}/aim/previewDeprecated: preview the headline goal. Use POST /aims/preview.
- get/v1/budgets/{budget_id}/outlookThe assumptions behind every projection, with the defaults applied
- put/v1/budgets/{budget_id}/outlookSet the assumptions
- get/v1/budgets/{budget_id}/outlook/projectionNet worth to the end of the plan at three rates, with milestones and the history before it
- get/v1/budgets/{budget_id}/scenariosThe scenarios: the baseline and every named what-if
- post/v1/budgets/{budget_id}/scenariosAdd a what-if
- get/v1/budgets/{budget_id}/scenarios/compareEvery scenario side by side
- get/v1/budgets/{budget_id}/scenarios/{id}One scenario
- patch/v1/budgets/{budget_id}/scenarios/{id}Change a scenario
- delete/v1/budgets/{budget_id}/scenarios/{id}Remove a scenario
Events and webhooks
The change feed, live stream and webhook endpoints.
- get/v1/eventsWhat changed on this account: after a cursor, or filtered and newest first
- get/v1/events/summaryHow much changed, who changed it, and what needs a look
- get/v1/events/streamThe same rows as they happen, as Server-Sent Events
- post/v1/webhook-endpointsRegister an endpoint (secret returned once)
- get/v1/webhook-endpointsList endpoints with their delivery health
- delete/v1/webhook-endpoints/{id}Delete an endpoint
- post/v1/webhook-endpoints/{id}/testQueue a ping event and show exactly what will be delivered
Billing
Plans, checkout and the billing portal.
- post/v1/billing/checkoutStart a Stripe Checkout for a plan; returns the URL for the human
- post/v1/billing/portalA Stripe Customer Portal URL: cards, invoices, cancel, the add-on quantity
- get/v1/billing/connectionsBanks included, bought and in use, and what one more costs
- put/v1/billing/connectionsSet how many extra banks the tenant pays for (session principals only)
- get/v1/plansEvery plan, what it unlocks, its price and its included bank connections
Community
The forum, profiles and the Founders wall.
- get/v1/profiles/{username}Anyone's Community page by username
- get/v1/foundersThe Founders wall: every seat sold, by number
- get/v1/community/boardsThe forum's boards, with how many topics each holds
- get/v1/community/topicsTopics, newest or most upvoted, by board, kind, idea state, author, or search
- post/v1/community/topicsStart a topic
- get/v1/community/topics/{id}One topic and every reply, as a tree in reading order
- patch/v1/community/topics/{id}Edit a topic, accept a reply, or (a moderator) hide it or set an idea's state
- delete/v1/community/topics/{id}Remove a topic (the author, or a moderator)
- post/v1/community/topics/{id}/repliesReply to a topic, or to a reply in it
- patch/v1/community/replies/{id}Edit a reply, or (a moderator) hide it
- delete/v1/community/replies/{id}Remove a reply (the author, or a moderator)
- put/v1/community/votes/{kind}/{id}Upvote a topic or a reply
- delete/v1/community/votes/{kind}/{id}Take an upvote back
- put/v1/community/reactions/{kind}/{id}React to a topic or a reply with an emoji
- delete/v1/community/reactions/{kind}/{id}Take a reaction back
- get/v1/community/peoplePeople with Community on, by the start of their username (for @mentions)
- post/v1/community/flagsFlag a post that breaks a rule
- get/v1/me/community/votesWhat this person upvoted and reacted to in one topic
- get/v1/me/community/flagsOpen flags, for a moderator
- patch/v1/me/community/flags/{id}Resolve a flag: dismiss it, or hide the post
- get/v1/me/community/moderatorsWho moderates the forum
- put/v1/me/community/moderators/{username}Make someone a moderator
- delete/v1/me/community/moderators/{username}Remove a moderator someone granted
- get/v1/me/community/suspensionsRunning suspensions
- post/v1/me/community/suspensionsSuspend a member: they read but cannot post, reply, flag, vote or react
- delete/v1/me/community/suspensions/{id}Lift a suspension
- get/v1/me/community/actionsThe moderation log: every moderator act, newest first
- get/v1/me/community/blocksThe people this person has blocked
- put/v1/me/community/blocks/{username}Block someone
- delete/v1/me/community/blocks/{username}Unblock someone
- get/v1/me/community/notesYour Community notes: replies to you, mentions of you, and threads you watch
- get/v1/me/community/notes/countHow many Community notes are unread
- post/v1/me/community/notes/readMark Community notes read: some, a thread's, or all
- get/v1/me/community/unreadIs there anything new in Community since you last looked
- post/v1/me/community/seenSay you have looked at Community: nothing before now is new
- get/v1/me/community/watchesThreads you watch
- put/v1/me/community/watches/{id}Watch a thread: hear about every new reply
- delete/v1/me/community/watches/{id}Stop watching a thread
- post/v1/me/community/imagesUpload an image for a Community post
- get/v1/me/community/gifsSearch GIPHY for a GIF to put in a Community post
Meta
Liveness, this document, llms.txt and security.txt. No key needed.
Or skip this page: hand ChatGPT the setup page and let it read the docs. That’s rather the point.