List transactions
AND logic.
Auth: Read
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
account_id | string (UUID) | — | Filter to transactions from a single account. |
user_id | string (UUID) | — | Filter to transactions from all accounts owned by a family member. Uses attribution-aware logic: COALESCE(attributed_user_id, account.user_id). |
category_slug | string | — | Filter by category slug (e.g., food-and-drink-groceries). |
start_date | string (YYYY-MM-DD) | — | Inclusive lower bound on the transaction date. |
end_date | string (YYYY-MM-DD) | — | Exclusive upper bound on the transaction date. A transaction on end_date is excluded — use this to express calendar months without overlap (e.g., start_date=2025-01-01&end_date=2025-02-01 returns all of January). |
min_amount | number | — | Inclusive lower bound on amount. Uses Plaid convention (positive = debit). To find all debits over $100: min_amount=100. |
max_amount | number | — | Inclusive upper bound on amount. To find all credits: max_amount=-0.01. |
search | string | — | Case-insensitive search on name and merchant_name. Comma-separate values for OR logic. Minimum 2 characters. |
exclude_search | string | — | Exclude transactions where name or merchant_name matches this term. Minimum 2 characters. |
search_mode | string | contains | How the search term is matched. One of: contains (default substring), words (word-boundary match), fuzzy (trigram similarity). |
pending | boolean | — | true returns only pending transactions; false returns only posted. Omit to return both. |
sort_by | string | date | Sort field. One of: date, amount, name. Cursor pagination only works with date sort. |
sort_order | string | desc | Sort direction. One of: desc, asc. |
fields | string | — | Field selection preset. One of: minimal, core, category, timestamps. Returns a subset of fields to reduce response size. |
cursor | string | — | Opaque pagination cursor from a previous response. Omit to fetch the first page. Only works with date sort. |
limit | integer | 50 | Results per page. Minimum 1, maximum 500. |
Response
Examples
Count transactions
cursor, limit, sort_by, sort_order, and fields).
Auth: Read
Response
Summarize transactions
group_by parameter controls the aggregation dimension.
Response
Merchant statistics
Response
Get a single transaction
Path parameters
The transaction’s Breadbox UUID or 8-character short ID.
Response
Set category override
category_override: true in their response.
Auth: Write
Path parameters
The transaction’s Breadbox UUID or short ID.
Request body
The slug of the category to assign. Must be an existing category slug from
GET /api/v1/categories.Reset category override
Path parameters
The transaction’s Breadbox UUID or short ID.
Batch categorize
Request body
List of transaction UUIDs or short IDs to categorize. Maximum 500 per request.
The category slug to assign to all listed transactions.
Response
Bulk recategorize
Request body
The same filter parameters accepted by
GET /api/v1/transactions (e.g., account_id, search, start_date, end_date, category_slug). All matching transactions are recategorized.The category slug to assign to all matching transactions.
Response
Transaction response fields
Breadbox-assigned UUID for this transaction.
8-character base62 alias. Accepted interchangeably with
id in path parameters.UUID of the account this transaction belongs to. May be
null if the parent account was removed.The transaction ID assigned by the provider (e.g., Plaid’s
transaction_id). Unique within a provider item.If this posted transaction replaced a pending one, this field holds the
external_transaction_id of the original pending transaction. Use this to link posted and pending records. null otherwise.Transaction amount. Positive = money out (debit). Negative = money in (credit). Stored as
NUMERIC(12,2).ISO 4217 currency code (e.g.,
"USD"). null when an unofficial currency code is used.Posted date for settled transactions; pending date for pending transactions.
Full timestamp of the transaction, if provided by the institution.
null for most transactions.Date the transaction was authorized. May differ from
date. null when not provided.Raw transaction name from the institution (e.g.,
"WHOLE FOODS MARKET #10452").Cleaned merchant name as classified by the provider (e.g.,
"Whole Foods Market"). null if the provider could not identify the merchant.High-level category in
UPPER_SNAKE_CASE (e.g., "FOOD_AND_DRINK"). May reflect a manual override.Granular subcategory (e.g.,
"FOOD_AND_DRINK_GROCERIES"). May reflect a manual override.true if the category was set by a manual override and is protected from rule and sync changes.How the transaction was made. One of:
"in store", "online", "other". null when not reported.true if the transaction has not yet posted. Pending transactions may be updated or replaced.Error codes
| Condition | Status | Code |
|---|---|---|
| Missing or invalid API key | 401 | MISSING_API_KEY / INVALID_API_KEY |
limit out of range | 400 | INVALID_PARAMETER |
Date not in YYYY-MM-DD format | 400 | INVALID_PARAMETER |
start_date is after end_date | 400 | INVALID_PARAMETER |
Invalid UUID for account_id or user_id | 400 | INVALID_PARAMETER |
search shorter than 2 characters | 400 | INVALID_PARAMETER |
Malformed or expired cursor | 400 | INVALID_CURSOR |
| Transaction not found | 404 | NOT_FOUND |
Invalid category_slug | 422 | VALIDATION_ERROR |