Skip to main content
The Breadbox REST API gives you programmatic access to your household’s financial data — accounts, transactions, categories, rules, and more. All endpoints follow a consistent JSON request/response structure, use API key authentication, and return errors in a machine-readable envelope.

Base URL

All API endpoints are served relative to your Breadbox host under the /api/v1/ prefix:
For a local installation the full base URL is typically http://localhost:8080/api/v1/. Replace localhost:8080 with your actual host and port in all examples.
The curl snippets throughout this reference use http://localhost:8080 as a stand-in for your Breadbox host. Substitute your real host and port before running them — if you’re exposing Breadbox beyond your local machine, see Remote hosting for guidance on picking a URL.
The health check and version endpoints are exceptions — they sit outside the versioned prefix:

Authentication

Every /api/v1/ endpoint requires an API key passed in the X-API-Key request header. See the Authentication page for full details on key scopes and management.

Response format

All successful responses return JSON with a Content-Type: application/json header. List endpoints use one of two shapes depending on whether the endpoint is cursor-paginated:
  • Small, finite lists (GET /accounts, GET /categories, GET /connections, GET /users, GET /reports) return a top-level JSON array. No pagination is applied — all matching records fit in a single response.
  • Cursor-paginated lists (GET /transactions, GET /rules) wrap results in a resource-named array alongside next_cursor and has_more. See Pagination for the full iteration contract.
Single-resource endpoints return the object directly.

Error format

Every error response — regardless of HTTP status code — uses the same JSON envelope:
The code field is stable and machine-readable; match against it in client code. The message field is for humans and may change without notice.

Error codes

Amount convention

Breadbox uses the Plaid sign convention for all monetary amounts:
  • Positive amount — money leaving the account (debits, purchases, fees, payments)
  • Negative amount — money entering the account (credits, deposits, refunds)
A grocery purchase of 42.50appearsas42.50.Adirectdepositof42.50 appears as `42.50`. A direct deposit of 2,500 appears as -2500.00. Every amount field is accompanied by an iso_currency_code field (e.g., "USD"). Never aggregate amounts across different currencies — always filter to a single iso_currency_code before summing.

HTTP status codes

Last modified on April 24, 2026