Amounts
Breadbox uses the Plaid sign convention. It applies everywhere β REST, MCP, and the admin UI.- Positive amount β money leaving the account (debits, purchases, fees, payments out).
- Negative amount β money entering the account (credits, deposits, refunds, transfers in).
-2500.00.
Every amount field ships with an iso_currency_code sibling ("USD", "EUR", etc.). Agents summing amounts must filter to one currency first β the server does not convert between them.
Compact IDs
Entity IDs returned by MCP tools are 8-character base62 strings:id with the sibling short_id value, and drops the short_id field to save tokens. The REST API returns both unchanged.
Tool inputs accept either form. transaction_id: "k7Xm9pQ2" and transaction_id: "a1b2c3d4-..." resolve to the same row.
Dates and date ranges
- All dates are
YYYY-MM-DDstrings. No timezones β dates align with how the institution posted the transaction. - Where a tool takes
start_dateandend_date,start_dateis inclusive andend_dateis exclusive. January 2025 in full isstart_date=2025-01-01&end_date=2025-02-01. - Some tools have sensible defaults β
transaction_summarydefaults to the last 30 days;merchant_summarydefaults to the last 90 days. See the toolβs reference page.
Cursor pagination
Tools that return lists (query_transactions, list_transaction_rules) use opaque cursor pagination:
has_more is true, pass the returned next_cursor on the next call to get the next page. When itβs false, next_cursor is null and thereβs nothing more to fetch.
Cursors are bound to the query shape β changing filters mid-pagination will produce meaningless results. Start a new query if you need to change filters.
session_id and reason
Every write tool requires two fields:session_idβ obtained once at the start of a task viacreate_session.reasonβ a brief, per-call rationale.
Compound operations
update_transactions is Breadboxβs preferred write primitive. One call carries up to 50 per-transaction operations, and each operation is a bundle: set a category, add tags, remove tags, and attach a comment β all in one atomic database transaction per row. Every change lands as a single linked annotation in the activity timeline.
Compared to calling categorize_transaction + add_transaction_tag + remove_transaction_tag + add_transaction_comment separately, compound ops:
- Write fewer annotations (one linked event per operation, not four independent events).
- Round-trip once instead of four times.
- Give you per-row success/failure accounting in the response.
When to use single-action tools.
add_transaction_tag / remove_transaction_tag / add_transaction_comment / categorize_transaction still exist for one-off edits and for clients that donβt need compound semantics. The rule of thumb: if youβre touching more than one transaction or doing more than one thing to one transaction, reach for update_transactions.Error shape
Tool errors come back as an MCP call result withisError: true and a text content block carrying JSON:
{"error": {"code": "..."}}; MCP clients match on the message string or the presence of isError.
Amount filters and sign
Filters likemin_amount and max_amount follow the same sign convention as the stored amounts.
- Find debits over $100:
min_amount=100. - Find credits only:
max_amount=-0.01. - Find everything between 500 debits:
min_amount=10&max_amount=500.
min_amount=0 actually filters, rather than being treated as βunsetβ.
Search modes
Tools that acceptsearch also accept search_mode:
contains(default) β plain substring match.starmatchesStarbucks.wordsβ all words must appear, word-boundary aware.century linkmatchesCenturyLink.fuzzyβ trigram similarity, tolerates typos.starbuksmatchesStarbucks.
search are ORed. search=starbucks,dunkin matches either.
exclude_search uses the same syntax to filter results out.
Tag filters
query_transactions and count_transactions accept two tag filters:
tagsβ array, AND semantics. All tags must be present.any_tagβ array, OR semantics. At least one tag must match.
tags=["needs-review"].
Fields aliases
query_transactions accepts a fields parameter to prune the response:
minimalβname,amount,datecoreβid,date,amount,name,iso_currency_codecategoryβcategory,category_primary_raw,category_detailed_rawtimestampsβcreated_at,updated_at,datetime,authorized_datetime
id is always included. Comma-separate aliases and custom field names: fields=core,category.
Limits
- List tools default to
limit=50, max 500. update_transactionscaps at 50 operations per call.batch_categorize_transactionscaps at 500 items.batch_create_rulescaps at 100 items.