mintro

The API, on one page.

Everything below is generated from the same schemas that validate every request — if it's here, it's real. Agents should read the machine feeds; this page is for the humans checking their work.

llms.txt — orientation, written for agents

openapi.json — the full document (OpenAPI 3.1)

https://mcp.mintro.money/mcp — MCP, same bearer key, 19 tools

Auth: Authorization: Bearer <your api key> · errors: { error: { code, message } } · money: integer cents · mutations accept Idempotency-Key

post /v1/budgets/{budget_id}/assignments · `budget:write`.

Give money a job: assign, move, record income, cover overspending

get /v1/budgets/{budget_id}/month · `budget:read`.

The month view: ready to assign, and available per envelope

post /v1/budgets/{budget_id}/auto-assign · `budget:write`.

Fund the month: YNAB's whole auto-assign menu, in one call

post /v1/budgets/{budget_id}/recurring/{id}/enter · `budget:write`.

Enter a bill: write it, file it, move to its next date

get /v1/budgets/{budget_id}/report · `budget:read`.

Spending and funding across a window of months

get /v1/budgets/{budget_id}/recurring · `budget:read`.

Bills you know are coming

post /v1/budgets/{budget_id}/recurring · `budget:write`.

Declare a recurring bill

patch /v1/budgets/{budget_id}/recurring/{id} · `budget:write`.

Change or pause a recurring bill

delete /v1/budgets/{budget_id}/recurring/{id} · `budget:write`.

Remove a recurring bill

post /v1/budgets/{budget_id}/recurring/{id}/advance · `budget:write`.

Move a recurring bill on to its next occurrence

get /v1/budgets/{budget_id}/categories · `budget:read`.

List categories in render order

post /v1/budgets/{budget_id}/categories · `budget:write`.

Create a category

patch /v1/budgets/{budget_id}/categories/{id} · `budget:write`.

Rename a category or change its position

delete /v1/budgets/{budget_id}/categories/{id} · `budget:write`.

Delete a category; its envelopes survive, uncategorized

put /v1/budgets/{budget_id}/envelopes/order · `budget:write`.

Bulk placement: reorder categories and envelopes in one call

get /v1/budgets/{budget_id}/entries · `budget:read`.

Filed history — search entries

post /v1/budgets/{budget_id}/entries · `budget:write`.

File a transaction into envelopes (splits = several elements)

patch /v1/budgets/{budget_id}/entries/{id} · `budget:write`.

Move or adjust an entry

delete /v1/budgets/{budget_id}/entries/{id} · `budget:write`.

Undo an entry

post /v1/budgets/{budget_id}/envelopes · `budget:write`.

Create an envelope

get /v1/budgets/{budget_id}/envelopes · `budget:read`.

List envelopes

get /v1/budgets/{budget_id}/envelopes/{id} · `budget:read`.

Envelope with recent entries

patch /v1/budgets/{budget_id}/envelopes/{id} · `budget:write`.

Rename, close (force for non-zero), set or clear target

get /v1/budgets/{budget_id}/papers · `budget:read`.

List papers (contents omitted)

get /v1/budgets/{budget_id}/papers/{slug} · `budget:read`.

Read a paper verbatim

put /v1/budgets/{budget_id}/papers/{slug} · `budget:write`.

Create or replace a paper (last write wins)

delete /v1/budgets/{budget_id}/papers/{slug} · `budget:write`.

Delete a paper

get /v1/budgets/{budget_id}/templates · `budget:read`.

Starter envelope templates

post /v1/budgets/{budget_id}/templates/{id}/apply · `budget:write`.

Create the template's envelopes that do not already exist

get /v1/budgets/{budget_id}/holdings · `budget:read`.

List holdings on this budget

post /v1/budgets/{budget_id}/holdings · `budget:write`.

Declare a holding; look up a public price when a symbol is given

get /v1/budgets/{budget_id}/holdings/{id} · `budget:read`.

One holding

patch /v1/budgets/{budget_id}/holdings/{id} · `budget:write`.

Rename, close, change symbol or quantity

delete /v1/budgets/{budget_id}/holdings/{id} · `budget:write`.

Delete a holding and its valuations

post /v1/budgets/{budget_id}/holdings/{id}/refresh · `budget:write`.

Look up a public price and append a valuation if found

get /v1/budgets/{budget_id}/holdings/{id}/valuations · `budget:read`.

Price history for one holding (newest first, cap 100)

post /v1/budgets/{budget_id}/holdings/{id}/valuations · `budget:write`.

Set the unit price by hand and append a valuation

post /v1/budgets/{budget_id}/holdings/{id}/buy · `budget:write`.

Buy more: money leaves an account, quantity is added

get /v1/budgets/{budget_id}/picture · `budget:read`.

The entire picture: accounts, holdings, loans, net, aim projection

get /v1/budgets/{budget_id}/loans · `budget:read`.

List installment loans on this budget

post /v1/budgets/{budget_id}/loans · `budget:write`.

Declare an installment loan; optionally against a holding and a paying account

get /v1/budgets/{budget_id}/loans/{id} · `budget:read`.

One loan

patch /v1/budgets/{budget_id}/loans/{id} · `budget:write`.

Rename, retarget a holding or paying account, change terms, or agree remaining

delete /v1/budgets/{budget_id}/loans/{id} · `budget:write`.

Delete a loan and its balance events

get /v1/budgets/{budget_id}/loans/{id}/balances · `budget:read`.

Payment history for one loan (newest first, cap 100)

post /v1/budgets/{budget_id}/loans/{id}/payments · `budget:write`.

Record a payment: split from the terms, update remaining

post /v1/budgets/{budget_id}/loans/{id}/pay-from-account · `budget:write`.

Pay the loan from an account: write the outflow and the estimated split

get /v1/budgets/{budget_id}/aim · `budget:read`.

What this budget is for, plus this month's progress

put /v1/budgets/{budget_id}/aim · `budget:write`.

Set or replace what you want this budget to do

delete /v1/budgets/{budget_id}/aim · `budget:write`.

Clear the aim; the contribution envelope stays

post /v1/budgets/{budget_id}/aim/preview · `budget:read`.

See what this plan would do, without writing it

get /v1/health

Liveness plus instance feature flags

get /openapi.json

This document

get /llms.txt

Plaintext orientation for agents

get /v1/plans

Every plan, its price and its included bank connections

get /v1/me · `budget:read`.

Who this key is: scopes, budgets, plan limits, rate limit

get /v1/budgets · `budget:read`.

Every budget on the account

post /v1/budgets · `budget:write`.

Start a new budget

get /v1/budgets/{budget_id} · `budget:read`.

One-call budget snapshot

patch /v1/budgets/{budget_id} · `budget:write`.

Rename a budget, or close/reopen it

get /v1/budgets/{budget_id}/export · `budget:read`.

One budget as a single JSON document

get /v1/inbox · `budget:read`.

Unfiled, unexpired transactions, newest first

get /v1/transactions · `budget:read`.

Stored transactions: the register

post /v1/transactions/import · `budget:write`.

Manual import: the agent brings normalized transactions (spending negative); idempotent per identical row

patch /v1/transactions/{id} · `budget:write`.

Edit a manually entered transaction

delete /v1/transactions/{id} · `budget:write`.

Delete a manually imported transaction

get /v1/transactions/{id} · `budget:read`.

Transaction with its entries

post /v1/transactions/{id}/match · `budget:write`.

This bank row is the bill I already entered

post /v1/accounts · `budget:write`.

Add an account by hand

get /v1/accounts · `budget:read`.

Every account on the tenant

post /v1/transfers · `budget:write`.

Move money between the person's own accounts

post /v1/transfers/confirm · `budget:write`.

These two existing rows are a transfer — you said so

delete /v1/transfers/{id} · `budget:write`.

Remove both legs of a transfer

get /v1/age-of-money · `budget:read`.

How long the money you are spending sat here first

get /v1/cashflow · `budget:read`.

Projected cash: posted history plus declared recurrences

get /v1/streaks · `budget:read`.

Clerk-work streaks, computed on read, off until asked

patch /v1/streaks · `budget:write`.

Set streaks to off, quiet, or on

get /v1/accounts/{id}/reconciliation · `budget:read`.

Where this account stands against the bank

patch /v1/accounts/{id}/cleared · `budget:write`.

Tick transactions on or off the cleared list

get /v1/accounts/{id}/forecast · `budget:read`.

Project this account's cash through a horizon

post /v1/accounts/{id}/reconcile · `budget:write`.

Compare cleared rows against a statement, and lock if they agree

patch /v1/accounts/{id} · `budget:write`.

Point a credit account at its payment envelope, and/or set the forecast warn-below

delete /v1/accounts/{id} · `budget:write`.

Delete a manual account and everything imported into it

get /v1/connections · `connections:read`.

Linked banks

post /v1/connections/link · `connections:write`.

Hosted Plaid link URL — hand it to the human; only they authenticate

post /v1/connections/{id}/relink · `connections:write`.

Hosted link URL in update mode

delete /v1/connections/{id} · `connections:write`.

Remove the bank; the budgets and filed transactions survive

post /v1/webhook-endpoints · `webhooks:manage`.

Register an endpoint (secret returned once)

get /v1/webhook-endpoints · `webhooks:manage`.

List endpoints with their delivery health

delete /v1/webhook-endpoints/{id} · `webhooks:manage`.

Delete an endpoint

post /v1/webhook-endpoints/{id}/test · `webhooks:manage`.

Queue a ping event and show exactly what will be delivered

Request and response shapes live in openapi.json. Or skip all of this: hand your agent the setup page and let it read the docs. That's rather the point.