Wallet & Board API

This reference covers both Wallet and Board APIs. Both follow the same conventions, documented here once. Endpoint-by-endpoint and field-by-field specifics live in each flavor's OpenAPI spec (linked below): most endpoints are shared, while some are exclusive to one app (goals are Wallet-only; contacts, orders and the record fields contactId/orderId are Board-only).

Getting Started

Wallet

Wallet

Base URL:

https://rest.budgetbakers.com/wallet

OpenAPI Spec:

Swagger UI

Get API Token:

Wallet Settings

Board

Board

Base URL:

https://rest.budgetbakers.com/board

OpenAPI Spec:

Swagger UI

Get API Token:

Board Settings

Authentication

All endpoints require an API token (Premium plan required). Add it to the Authorization header:

Authorization: Bearer <your_api_token>

Pagination

All User Data endpoints support pagination:

ParameterDefaultMaxDescription
limit30200Items per page
offset0-Items to skip

Response includes nextOffset when more results are available.

Rate Limiting

The API uses Token Bucket rate limiting: a sustained hourly budget plus a small burst allowance, so short bursts pass while the average rate is enforced.

HeaderExampleDescription
X-RateLimit-Limit300Maximum sustained request capacity
X-RateLimit-Remaining287Remaining capacity

Query Filter Prefixes

Some parameters require filter prefixes: prefix.value

Example: amount=gte.100 → amount ≥ 100

Text Filters

PrefixMeaningExample
eq.Exact matchpayee=eq.Amazon
contains.Contains (case-sensitive)note=contains.Bill
contains-i.Contains (case-insensitive)note=contains-i.grocery

Text filters can be specified up to 2 times for AND logic, e.g. note=contains-i.grocery&note=contains-i.market.

Range Filters

For numeric and datetime fields:

PrefixMeaningNumericDatetime
eq.Equalsamount=eq.100createdAt=eq.2024-01-15T10:30:00Z
gt.Greater thanamount=gt.100createdAt=gt.2024-01-01T00:00:00Z
gte.amount=gte.100createdAt=gte.2024-01-01T00:00:00Z
lt.Less thanamount=lt.500createdAt=lt.2024-12-31T23:59:59Z
lte.amount=lte.500createdAt=lte.2024-12-31T23:59:59Z
Date-only values

When date-only (no time) is provided, whole-day UTC semantics apply:

FilterEquivalentMeaning
gt.2025-01-14gte.2025-01-15T00:00:00ZFrom Jan 15
gte.2025-01-14gte.2025-01-14T00:00:00ZFrom Jan 14
lt.2025-01-15lt.2025-01-15T00:00:00ZBefore Jan 15
lte.2025-01-15lt.2025-01-16T00:00:00ZThrough Jan 15
eq.2025-01-13gte...<lt...Entire Jan 13

Range filters support up to 2 conditions (AND logic):

Data Synchronization

User data is synchronized from the app. Changes may not appear immediately via API.

Initial Sync

Sync begins when you generate your first API key. Until complete, requests return 409 Conflict:

{
  "error": "init_sync_in_progress",
  "message": "Data synchronization in progress. Please retry later.",
  "retry_after_minutes": 5
}

Ongoing Sync

After the initial sync, data is always returned, but recent changes in the app may not appear immediately. These response headers indicate sync status:

HeaderExampleDescription
X-Last-Data-Change-At2024-01-28T14:23:45ZTimestamp of last data modification
X-Last-Data-Change-Revr1234Revision counter. Compare values to detect changes.
X-Sync-In-ProgressfalseIf true, the response is valid but more changes may follow shortly.

Write Operations

Every write endpoint — create, patch, delete, on both flavors and both protocols — answers the same envelope:

{
  "summary": { "total": 2, "succeeded": 1, "clientErrors": 1,
               "serverErrors": 0, "documentsWritten": 1 },
  "results": [ { "inputIndex": 0, "id": "…", "success": true,  … },
               { "inputIndex": 1, "id": "…", "success": false,
                 "error": "…", "errorType": "client_error", "fields": ["name"] } ]
}

Agent Hints

Advisory, typed notes for AI agents, carried in an agentHints array. On REST, enable with agentHints=true; on MCP they are always on. Each hint has a stable type, a severity (info/warning/instruction), human-readable text, and structured data. Examples:

TypeWhen
pagination.has_moreMore results are available than returned
result.partial_matchSome requested ids were not found
result.emptyNo records match the filters
transfer.mirror_failedA paired transfer's mirror could not be written
category.defaulted_unknownRecords created without a category defaulted to Unknown
budget.spent_nettedIncome-signed records netted a budget's spent to 0

The full registry — every type, its severity, data fields and emitting tools — is served to MCP clients as the reference://agent-hints resource and via get_client_profile help: ["agent-hints"]. Hint types are stable and safe to branch on; hint text is not.

Report a Bug


When filling the form