needs-review tag that marks transactions for triage. Each tag has a stable slug (machine identifier) and a human-readable display_name. The REST tag endpoints mirror the list_tags, add_transaction_tag, and remove_transaction_tag MCP tools.
See also Tags for conceptual background and Review workflow for how the needs-review tag drives the default review loop.
Tag record CRUD (creating, updating, deleting tag records themselves) is currently dashboard-only and MCP-only (
create_tag, update_tag, delete_tag). REST endpoints for tag CRUD are not yet exposed — the tag endpoints below operate on the assignment between tags and transactions.List tags
Response
Attach a tag to a transaction
already_present: true instead of erroring.
An annotation of kind tag_added is written to the transaction’s activity timeline and carries the actor identity (API key name) and the optional note.
Auth: Write (full-access key)
Path parameters
The transaction’s Breadbox UUID or 8-character short ID.
Request body
The tag slug to attach (e.g.,
"needs-review", "subscription", "disputed"). Trimmed; must be non-empty. Unknown slugs are auto-created.Optional free-text note recorded on the
tag_added annotation. Useful for explaining why the tag is being applied.Response
added is false and already_present is true.
Detach a tag from a transaction
tag_removed is written with the optional note (useful for recording review resolution: “verified as legitimate, not a duplicate”). Idempotent: if the tag wasn’t attached, already_absent: true is returned.
Auth: Write (full-access key)
Path parameters
The transaction’s Breadbox UUID or 8-character short ID.
The tag slug to detach.
Query parameters
Optional free-text note to record on the
tag_removed annotation. If you prefer a JSON body, pass {"note":"..."} instead — both forms are accepted.Response
Filtering transactions by tag
The/api/v1/transactions and /api/v1/transactions/count endpoints accept two tag-filter query parameters. Both take a comma-separated list of slugs:
tags=a,b,c— AND semantics. Only transactions that carry every listed tag match.any_tag=a,b,c— OR semantics. Transactions carrying at least one of the listed tags match.
Response fields
Breadbox-assigned UUID. Use this to reference the tag in other API calls.
8-character base62 alias. Accepted interchangeably with
id where tag IDs are used.Stable machine identifier, e.g.
"needs-review". Used for filtering transactions and in annotations. Auto-generated from display_name if not provided at creation.Human-readable label shown in the admin dashboard.
Optional description surfaced in tooltips and tag-detail views.
Optional CSS color for dashboard styling. May be
null.Optional icon name (e.g.,
"flag", "sparkles"). May be null.Timestamp when this tag record was first created.
Timestamp when this tag record was last updated.
Error codes
| Condition | Status | Code |
|---|---|---|
Missing X-API-Key header | 401 | MISSING_API_KEY |
| Key revoked or invalid | 403 | INVALID_API_KEY |
| Write called with a read-only key | 403 | FORBIDDEN |
| Transaction not found | 404 | NOT_FOUND |
Missing or empty slug | 400 | INVALID_PARAMETER |
| Unexpected server error | 500 | INTERNAL_ERROR |