{"openapi":"3.1.0","info":{"title":"Lunch Money (BYOK) API","version":"0.1.0","description":"Lunch Money (BYOK) lets an AI assistant read your own Lunch Money data through the Lunch Money API with a key you supply (Lunch Money access token). Read-only: 10 tools (get_me, list_manual_accounts, list_plaid_accounts, list_transactions, get_transaction, list_categories, list_tags, list_recurring_items, get_budget_settings, get_summary). The BYOK key travels with each request, is used for that...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-lunchmoney.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-lunchmoney/docs"},"termsOfService":"https://connectorbay.com/byok-lunchmoney/terms"},"servers":[{"url":"https://byok-lunchmoney.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-lunchmoney/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_me":{"post":{"operationId":"get_me","summary":"Get the Lunch Money user behind the token: name, user and account ID, budget name and primary currency (email is left ou","description":"Get the Lunch Money user behind the token: name, user and account ID, budget name and primary currency (email is left out). Use for \"Which Lunch Money budget and currency am I using\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_meArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_manual_accounts":{"post":{"operationId":"list_manual_accounts","summary":"List manually tracked accounts with institution, type, balance, currency, converted balance, status and last update. Use","description":"List manually tracked accounts with institution, type, balance, currency, converted balance, status and last update. Use for \"What are the balances of my manual accounts in Lunch Money\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_manual_accountsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_plaid_accounts":{"post":{"operationId":"list_plaid_accounts","summary":"List bank accounts synced through Plaid with institution, type, balance, currency, converted balance, sync status and la","description":"List bank accounts synced through Plaid with institution, type, balance, currency, converted balance, sync status and last import time (account mask is left out). Use for \"Which of my synced bank accounts in Lunch Money need relinking\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_plaid_accountsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_transactions":{"post":{"operationId":"list_transactions","summary":"List transactions (newest first) with date, amount, currency, payee, category, account, tags, status and source; filter ","description":"List transactions (newest first) with date, amount, currency, payee, category, account, tags, status and source; filter by date range, account, category, tag or status (notes are left out). Use for \"What did I spend on groceries in Lunch Money last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First date (YYYY-MM-DD). If given, end_date is required.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last date (YYYY-MM-DD). Required if start_date is given.","title":"End Date"},"category_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only this category ID (also matches category groups). Use 0 for uncategorised.","title":"Category Id"},"manual_account_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only this manual account ID (0 excludes manual account transactions).","title":"Manual Account Id"},"plaid_account_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only this Plaid account ID (0 excludes Plaid transactions).","title":"Plaid Account Id"},"recurring_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only transactions matched to this recurring item ID.","title":"Recurring Id"},"tag_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only transactions with this tag ID.","title":"Tag Id"},"status":{"anyOf":[{"enum":["reviewed","unreviewed","delete_pending"],"type":"string"},{"type":"null"}],"default":null,"description":"Only transactions with this review status.","title":"Status"},"include_pending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Also return pending transactions.","title":"Include Pending"},"updated_since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only transactions updated after this date or ISO 8601 time.","title":"Updated Since"},"limit":{"anyOf":[{"maximum":2000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum number of transactions to return (1 to 2000).","title":"Limit"},"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of transactions to skip, for paging when has_more is true.","title":"Offset"}},"title":"list_transactionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_transaction":{"post":{"operationId":"get_transaction","summary":"Get one transaction by ID with date, amount, currency, payee, category, account, tags, status and source (notes are left","description":"Get one transaction by ID with date, amount, currency, payee, category, account, tags, status and source (notes are left out). Use for \"What is Lunch Money transaction 1234\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"transaction_id":{"description":"Transaction ID.","maxLength":200,"title":"Transaction Id","type":"string"}},"required":["transaction_id"],"title":"get_transactionArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_categories":{"post":{"operationId":"list_categories","summary":"List budget categories and category groups with income and budget flags, group membership and archive state. Use for \"Wh","description":"List budget categories and category groups with income and budget flags, group membership and archive state. Use for \"Which categories do I have in Lunch Money\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"format":{"anyOf":[{"enum":["nested","flattened"],"type":"string"},{"type":"null"}],"default":"flattened","description":"nested groups children under category groups; flattened returns one flat list.","title":"Format"},"is_group":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"true returns only category groups, false only categories outside a group.","title":"Is Group"}},"title":"list_categoriesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tags":{"post":{"operationId":"list_tags","summary":"List tags with ID, name, description and archive state. Use for \"Which tags exist in my Lunch Money budget\".","description":"List tags with ID, name, description and archive state. Use for \"Which tags exist in my Lunch Money budget\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_recurring_items":{"post":{"operationId":"list_recurring_items","summary":"List recurring items (subscriptions, bills, income) with status, cadence, payee, expected amount and currency. Use for \"","description":"List recurring items (subscriptions, bills, income) with status, cadence, payee, expected amount and currency. Use for \"What recurring bills does Lunch Money know about\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range used to match occurrences (YYYY-MM-DD). Needs end_date.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range (YYYY-MM-DD). Needed if start_date is given.","title":"End Date"},"include_suggested":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Also include suggested (unreviewed) recurring items.","title":"Include Suggested"}},"title":"list_recurring_itemsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_budget_settings":{"post":{"operationId":"get_budget_settings","summary":"Get the budget period settings: period length, anchor date, income option and rollover behaviour. Use for \"How is my Lun","description":"Get the budget period settings: period length, anchor date, income option and rollover behaviour. Use for \"How is my Lunch Money budget period set up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_budget_settingsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_summary":{"post":{"operationId":"get_summary","summary":"Get the budget spending summary for a date range: whether periods are aligned and total inflow and outflow split into re","description":"Get the budget spending summary for a date range: whether periods are aligned and total inflow and outflow split into recurring and other activity. Use for \"How much did I spend versus earn in Lunch Money in January\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"Start of the range (YYYY-MM-DD).","maxLength":10,"title":"Start Date","type":"string"},"end_date":{"description":"End of the range (YYYY-MM-DD).","maxLength":10,"title":"End Date","type":"string"},"include_totals":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"Include the inflow and outflow totals section.","title":"Include Totals"}},"required":["start_date","end_date"],"title":"get_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}