{"openapi":"3.1.0","info":{"title":"Every Dollar Budget App Reporting API","version":"1.0.0-reporting","description":"Read-only subset of the Every Dollar Budget App API with exactly 30 GET operations for budget reporting and AI assistants.\n\nUse this spec when your tool limits OpenAPI operation count (e.g. ChatGPT custom actions).\nThe full API including writes is at `/api/v1/openapi.json`.\n\n## Authentication\nSend your API key as a Bearer token:\n```\nAuthorization: Bearer bud_live_...\n```\n\nCreate keys in **Settings → API Keys** with read scopes for the sections you need.\nThe **Read-only assistant** preset covers most endpoints in this spec.\n\n## Response format\n```json\n{ \"data\": { ... }, \"meta\": { \"account_id\": 1, \"api_key_id\": \"...\" } }\n```\n\n## Typical workflow\n1. `GET /me` — verify key and scopes\n2. `GET /dashboard` or `GET /reports/net-worth` — overview\n3. `GET /categories`, `GET /accounts`, `GET /transactions` — detail\n4. `GET /export?sections=...` — bulk export when needed\n\n## Rate limits\nDefault limits per API key: 120 requests/minute and 10000 requests/day.\n\n## Full API\n- OpenAPI: `/api/v1/openapi.json`\n- Interactive docs: `/api/v1/docs`","contact":{"name":"Every Dollar Budget App Support"}},"servers":[{"url":"https://budget-app-one-lime.vercel.app","description":"Current environment"}],"tags":[{"name":"Accounts"},{"name":"Backup"},{"name":"Categories"},{"name":"Credit Cards"},{"name":"Goals"},{"name":"Income"},{"name":"Income Buffer"},{"name":"Loans"},{"name":"Meta"},{"name":"Non-cash Assets"},{"name":"Pending Checks"},{"name":"Recurring Transactions"},{"name":"Reports"},{"name":"Transactions"}],"paths":{"/api/v1/me":{"get":{"operationId":"getMe","tags":["Meta"],"summary":"Get API key metadata","description":"Returns the authenticated key name, granted scopes, available scope sections, and the full endpoint catalog.\n\nAny valid premium API key.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/MeResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/dashboard":{"get":{"operationId":"getDashboard","tags":["Reports"],"summary":"Dashboard summary","description":"High-level budget totals: cash, envelopes, credit cards, pending checks, savings, and income.\n\nRequired scope: `reports:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/DashboardSummary"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/reports/dashboard":{"get":{"operationId":"getReportsDashboard","tags":["Reports"],"summary":"Reports dashboard summary","description":"Aggregate counts and balances for accounts, credit cards, categories, and recent activity.\n\nRequired scope: `reports:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/ReportsDashboardSummary"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/reports/net-worth":{"get":{"operationId":"getReportsNetWorth","tags":["Reports"],"summary":"Net worth report","description":"Current net worth breakdown and optional 30-day change from snapshots.\n\nRequired scope: `reports:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/NetWorthReport"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/net-worth/snapshots":{"get":{"operationId":"getNetWorthSnapshots","tags":["Reports"],"summary":"List net worth snapshots","description":"Historical net worth snapshots for trend analysis.\n\nRequired scope: `reports:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NetWorthSnapshot"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/export":{"get":{"operationId":"getExport","tags":["Backup"],"summary":"Export account data","description":"Returns a full or partial account export (same shape as backups). Use the sections query param to limit output to scopes your key can read.\n\nRequired scope: `backup:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"sections","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scope sections, e.g. transactions,categories,accounts"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/AccountExportData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/accounts":{"get":{"operationId":"getAccounts","tags":["Accounts"],"summary":"GET /api/v1/accounts","description":"Required scope: `accounts:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Account"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/accounts/{id}":{"get":{"operationId":"getAccountsById","tags":["Accounts"],"summary":"GET /api/v1/accounts/{id}","description":"Required scope: `accounts:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Account"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/accounts/{id}/balance-history":{"get":{"operationId":"getAccountsByIdBalanceHistory","tags":["Accounts"],"summary":"GET /api/v1/accounts/{id}/balance-history","description":"Required scope: `accounts:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BalanceAuditEntry"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/credit-cards":{"get":{"operationId":"getCreditCards","tags":["Credit Cards"],"summary":"GET /api/v1/credit-cards","description":"Required scope: `credit_cards:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CreditCard"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/credit-cards/{id}":{"get":{"operationId":"getCreditCardsById","tags":["Credit Cards"],"summary":"GET /api/v1/credit-cards/{id}","description":"Required scope: `credit_cards:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/CreditCard"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/credit-cards/{id}/balance-history":{"get":{"operationId":"getCreditCardsByIdBalanceHistory","tags":["Credit Cards"],"summary":"GET /api/v1/credit-cards/{id}/balance-history","description":"Required scope: `credit_cards:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BalanceAuditEntry"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/loans":{"get":{"operationId":"getLoans","tags":["Loans"],"summary":"GET /api/v1/loans","description":"Required scope: `loans:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Loan"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/loans/{id}":{"get":{"operationId":"getLoansById","tags":["Loans"],"summary":"GET /api/v1/loans/{id}","description":"Required scope: `loans:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Loan"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/non-cash-assets":{"get":{"operationId":"getNonCashAssets","tags":["Non-cash Assets"],"summary":"GET /api/v1/non-cash-assets","description":"Required scope: `non_cash_assets:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NonCashAsset"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/non-cash-assets/{id}":{"get":{"operationId":"getNonCashAssetsById","tags":["Non-cash Assets"],"summary":"GET /api/v1/non-cash-assets/{id}","description":"Required scope: `non_cash_assets:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/NonCashAsset"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/categories":{"get":{"operationId":"getCategories","tags":["Categories"],"summary":"GET /api/v1/categories","description":"Required scope: `categories:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Category"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/categories/{id}":{"get":{"operationId":"getCategoriesById","tags":["Categories"],"summary":"GET /api/v1/categories/{id}","description":"Required scope: `categories:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Category"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/categories/monthly-funding":{"get":{"operationId":"getCategoriesMonthlyFunding","tags":["Categories"],"summary":"Category monthly funding","description":"Required scope: `categories:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"month","in":"query","schema":{"type":"string"},"description":"YYYY-MM"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CategoryMonthlyFunding"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/transactions":{"get":{"operationId":"getTransactions","tags":["Transactions"],"summary":"List transactions","description":"Required scope: `transactions:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":50,"maximum":200}},{"name":"startDate","in":"query","schema":{"type":"string","format":"date"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date"}},{"name":"q","in":"query","schema":{"type":"string"},"description":"Search description or merchant"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TransactionWithSplits"}},"meta":{"$ref":"#/components/schemas/PaginatedResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/transactions/{id}":{"get":{"operationId":"getTransactionsById","tags":["Transactions"],"summary":"GET /api/v1/transactions/{id}","description":"Required scope: `transactions:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/TransactionWithSplits"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/transactions/search":{"get":{"operationId":"getTransactionsSearch","tags":["Transactions"],"summary":"Search transactions","description":"Required scope: `transactions:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":3}},{"name":"limit","in":"query","schema":{"type":"integer","default":10}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TransactionWithSplits"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/transactions/duplicates":{"get":{"operationId":"getTransactionsDuplicates","tags":["Transactions"],"summary":"GET /api/v1/transactions/duplicates","description":"Required scope: `transactions:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/DuplicateGroupsResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/goals":{"get":{"operationId":"getGoals","tags":["Goals"],"summary":"GET /api/v1/goals","description":"Required scope: `goals:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Goal"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/goals/{id}/progress":{"get":{"operationId":"getGoalsByIdProgress","tags":["Goals"],"summary":"Goal progress","description":"Progress metrics for a savings or debt payoff goal.\n\nRequired scope: `goals:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/GoalProgressResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/income/streams":{"get":{"operationId":"getIncomeStreams","tags":["Income"],"summary":"GET /api/v1/income/streams","description":"Required scope: `income:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IncomeStream"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/income/settings":{"get":{"operationId":"getIncomeSettings","tags":["Income"],"summary":"GET /api/v1/income/settings","description":"Required scope: `income:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IncomeSettings"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/income-buffer/status":{"get":{"operationId":"getIncomeBufferStatus","tags":["Income Buffer"],"summary":"Income buffer status","description":"Current buffer balance, monthly budget, and runway months.\n\nRequired scope: `income_buffer:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/IncomeBufferStatus"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/recurring-transactions":{"get":{"operationId":"getRecurringTransactions","tags":["Recurring Transactions"],"summary":"GET /api/v1/recurring-transactions","description":"Required scope: `recurring_transactions:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RecurringTransaction"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/pending-checks":{"get":{"operationId":"getPendingChecks","tags":["Pending Checks"],"summary":"GET /api/v1/pending-checks","description":"Required scope: `pending_checks:read`. Write implies read for the same section.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PendingCheck"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/InvalidApiKey"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimitExceeded"},"500":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"API key created in Settings → API Keys. Format: bud_test_... (dev) or bud_live_... (production)."}},"schemas":{"ResponseMeta":{"type":"object","required":["account_id","api_key_id"],"properties":{"account_id":{"type":"integer"},"api_key_id":{"type":"string","format":"uuid"}}},"PaginatedResponseMeta":{"allOf":[{"$ref":"#/components/schemas/ResponseMeta"},{"type":"object","properties":{"page":{"type":"integer","description":"Present on paginated list endpoints such as GET /transactions"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"}}}]},"SuccessResult":{"type":"object","required":["success"],"properties":{"success":{"type":"boolean","const":true}}},"UpdatedCountResult":{"type":"object","required":["success","updated"],"properties":{"success":{"type":"boolean","const":true},"updated":{"type":"integer"}}},"ApiScope":{"type":"string","enum":["transactions:read","transactions:write","recurring_transactions:read","recurring_transactions:write","categories:read","categories:write","accounts:read","accounts:write","credit_cards:read","credit_cards:write","loans:read","loans:write","non_cash_assets:read","non_cash_assets:write","pending_checks:read","pending_checks:write","goals:read","goals:write","income:read","income:write","income_buffer:read","income_buffer:write","imports:read","imports:write","merchants:read","merchants:write","tags:read","tags:write","reports:read","reports:write","notifications:read","notifications:write","settings:read","settings:write","collaborators:read","collaborators:write","backup:read","backup:write"]},"ApiScopeSection":{"type":"object","required":["section","label","description"],"properties":{"section":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}}},"ApiEndpoint":{"type":"object","required":["method","path","scope"],"properties":{"method":{"type":"string","example":"GET|POST"},"path":{"type":"string","example":"/api/v1/categories"},"scope":{"type":"string","example":"categories:read"}}},"MeResponse":{"type":"object","required":["key_name","permissions","available_sections","all_scopes","endpoints","documentation"],"properties":{"key_name":{"type":"string"},"permissions":{"type":"array","items":{"$ref":"#/components/schemas/ApiScope"}},"available_sections":{"type":"array","items":{"$ref":"#/components/schemas/ApiScopeSection"}},"all_scopes":{"type":"array","items":{"$ref":"#/components/schemas/ApiScope"}},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/ApiEndpoint"}},"documentation":{"type":"object","required":["openapi","interactive","reporting_openapi","reporting_interactive"],"properties":{"openapi":{"type":"string","example":"/api/v1/openapi.json"},"interactive":{"type":"string","example":"/api/v1/docs"},"reporting_openapi":{"type":"string","example":"/api/v1/openapi-reporting.json"},"reporting_interactive":{"type":"string","example":"/api/v1/docs-reporting"}}}}},"Category":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"monthly_amount":{"type":"number"},"current_balance":{"type":"number"},"sort_order":{"type":"integer"},"is_system":{"type":"boolean"},"is_archived":{"type":"boolean","nullable":true},"is_buffer":{"type":"boolean","nullable":true},"is_goal":{"type":"boolean","nullable":true},"notes":{"type":"string","nullable":true},"category_type":{"type":"string","enum":["monthly_expense","accumulation","target_balance"]},"priority":{"type":"integer","nullable":true},"monthly_target":{"type":"number","nullable":true},"annual_target":{"type":"number","nullable":true},"target_balance":{"type":"number","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Account":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"balance":{"type":"number"},"account_type":{"type":"string","enum":["checking","savings","cash"]},"include_in_totals":{"type":"boolean"},"sort_order":{"type":"integer"},"linked_goal_id":{"type":"integer","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"CreditCard":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"credit_limit":{"type":"number"},"available_credit":{"type":"number"},"current_balance":{"type":"number"},"include_in_totals":{"type":"boolean"},"sort_order":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Loan":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"balance":{"type":"number"},"interest_rate":{"type":"number","nullable":true},"minimum_payment":{"type":"number","nullable":true},"payment_due_date":{"type":"integer","nullable":true},"open_date":{"type":"string","format":"date","nullable":true},"starting_balance":{"type":"number","nullable":true},"institution":{"type":"string","nullable":true},"maturity_date":{"type":"string","format":"date","nullable":true},"include_in_net_worth":{"type":"boolean"},"linked_non_cash_asset_id":{"type":"integer","nullable":true},"sort_order":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"NonCashAsset":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"asset_type":{"type":"string","enum":["investment","real_estate","vehicle","art","insurance","collectibles","cryptocurrency","other"]},"current_value":{"type":"number"},"estimated_return_percentage":{"type":"number"},"address":{"type":"string","nullable":true},"vin":{"type":"string","nullable":true},"is_rmd_qualified":{"type":"boolean"},"is_liquid":{"type":"boolean"},"sort_order":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"PendingCheck":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"description":{"type":"string"},"amount":{"type":"number"},"type":{"type":"string","enum":["expense","income"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Goal":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"target_amount":{"type":"number"},"target_date":{"type":"string","format":"date","nullable":true},"goal_type":{"type":"string","enum":["envelope","account-linked","debt-paydown"]},"monthly_contribution":{"type":"number"},"linked_account_id":{"type":"integer","nullable":true},"linked_category_id":{"type":"integer","nullable":true},"linked_credit_card_id":{"type":"integer","nullable":true},"linked_loan_id":{"type":"integer","nullable":true},"status":{"type":"string","enum":["active","completed","overdue","paused"]},"sort_order":{"type":"integer"},"notes":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"TransactionSplit":{"type":"object","properties":{"id":{"type":"integer"},"transaction_id":{"type":"integer"},"category_id":{"type":"integer"},"amount":{"type":"number"},"user_id":{"type":"string","format":"uuid","nullable":true},"created_at":{"type":"string","format":"date-time"}}},"Transaction":{"type":"object","properties":{"id":{"type":"integer"},"budget_account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"date":{"type":"string","format":"date"},"description":{"type":"string"},"total_amount":{"type":"number"},"amount":{"type":"number","description":"Alias used on create; stored as total_amount"},"transaction_type":{"type":"string","enum":["income","expense"]},"merchant":{"type":"string","nullable":true},"merchant_group_id":{"type":"integer","nullable":true},"merchant_override_id":{"type":"integer","nullable":true},"account_id":{"type":"integer","nullable":true},"credit_card_id":{"type":"integer","nullable":true},"category_id":{"type":"integer","nullable":true},"notes":{"type":"string","nullable":true},"is_historical":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"TransactionWithSplits":{"allOf":[{"$ref":"#/components/schemas/Transaction"},{"type":"object","properties":{"transaction_splits":{"type":"array","items":{"$ref":"#/components/schemas/TransactionSplit"}}}}]},"RecurringTransaction":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"merchant_group_id":{"type":"integer","nullable":true},"frequency":{"type":"string"},"expected_amount":{"type":"number"},"category_id":{"type":"integer","nullable":true},"is_active":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"IncomeStream":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"name":{"type":"string"},"annual_income":{"type":"number"},"tax_rate":{"type":"number"},"pay_frequency":{"type":"string","enum":["weekly","bi-weekly","semi-monthly","monthly","quarterly","annually"]},"include_extra_paychecks":{"type":"boolean"},"pre_tax_deduction_items":{"type":"array","items":{"type":"object","properties":{}}},"include_in_budget":{"type":"boolean"},"sort_order":{"type":"integer"},"linked_non_cash_asset_id":{"type":"integer","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"IncomeSettings":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"PreTaxDeduction":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Tag":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"color":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"TagRule":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"tag_id":{"type":"integer"},"rule_type":{"type":"string","enum":["category","merchant","description","amount"]},"rule_value":{"type":"string"},"priority":{"type":"integer"},"is_active":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"MerchantGroup":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"display_name":{"type":"string"},"global_merchant_id":{"type":"integer","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"MerchantMapping":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"merchant_group_id":{"type":"integer","nullable":true},"pattern":{"type":"string"},"normalized_pattern":{"type":"string"},"is_automatic":{"type":"boolean"},"confidence_score":{"type":"number"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"MerchantCategoryRule":{"type":"object","properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"merchant_group_id":{"type":"integer","nullable":true},"category_id":{"type":"integer"},"confidence_score":{"type":"number"},"usage_count":{"type":"integer"},"last_used":{"type":"string","format":"date-time"},"pattern":{"type":"string","nullable":true},"normalized_pattern":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"MerchantRecommendation":{"type":"object","additionalProperties":true,"properties":{}},"CsvImportTemplate":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"AutomaticImportSetup":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"name":{"type":"string"},"is_active":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"QueuedImport":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"status":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Notification":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer"},"account_id":{"type":"integer"},"user_id":{"type":"string","format":"uuid"},"type":{"type":"string"},"title":{"type":"string"},"message":{"type":"string"},"is_read":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"}}},"BalanceAuditEntry":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer"},"account_id":{"type":"integer","nullable":true},"credit_card_id":{"type":"integer","nullable":true},"balance":{"type":"number"},"change_amount":{"type":"number"},"reason":{"type":"string"},"created_at":{"type":"string","format":"date-time"}}},"NetWorthSnapshot":{"type":"object","properties":{"id":{"type":"integer"},"budget_account_id":{"type":"integer"},"snapshot_date":{"type":"string","format":"date"},"total_accounts":{"type":"number"},"total_credit_cards":{"type":"number"},"total_loans":{"type":"number"},"total_assets":{"type":"number"},"net_worth":{"type":"number"},"created_at":{"type":"string","format":"date-time"}}},"CategoryMonthlyFunding":{"type":"object","properties":{"id":{"type":"integer"},"category_id":{"type":"integer"},"month":{"type":"string","format":"date"},"funded_amount":{"type":"number"},"categories":{"type":"object","nullable":true,"properties":{"name":{"type":"string"}}}}},"DashboardSummary":{"type":"object","properties":{"total_monies":{"type":"number"},"total_envelopes":{"type":"number"},"buffer_balance":{"type":"number"},"total_credit_card_balances":{"type":"number"},"total_pending_checks":{"type":"number"},"current_savings":{"type":"number"},"has_negative_envelopes":{"type":"boolean"},"monthly_net_income":{"type":"number"},"total_monthly_budget":{"type":"number"}}},"ReportsDashboardSummary":{"type":"object","properties":{"totalCash":{"type":"number"},"totalCreditCardDebt":{"type":"number"},"totalCategoryBalance":{"type":"number"},"accountCount":{"type":"integer"},"creditCardCount":{"type":"integer"},"categoryCount":{"type":"integer"},"recentTransactionCount":{"type":"integer"}}},"NetWorthBreakdown":{"type":"object","properties":{"totalAccounts":{"type":"number"},"totalCreditCards":{"type":"number"},"totalLoans":{"type":"number"},"totalAssets":{"type":"number"},"netWorth":{"type":"number"}}},"NetWorthChange":{"type":"object","properties":{"amount":{"type":"number"},"percent":{"type":"number"},"baselineDate":{"type":"string","format":"date"},"baselineNetWorth":{"type":"number"}}},"NetWorthReport":{"type":"object","properties":{"current":{"$ref":"#/components/schemas/NetWorthBreakdown"},"change30Days":{"oneOf":[{"$ref":"#/components/schemas/NetWorthChange"},{"type":"null"}]},"snapshotCount":{"type":"integer"}}},"GoalProgress":{"type":"object","properties":{"progress_percentage":{"type":"number"},"remaining_amount":{"type":"number"},"months_remaining":{"type":"integer","nullable":true},"required_monthly_contribution":{"type":"number"},"projected_completion_date":{"type":"string","format":"date","nullable":true},"is_on_track":{"type":"boolean"}}},"GoalProgressResponse":{"type":"object","properties":{"goal":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"target_amount":{"type":"number"},"target_date":{"type":"string","format":"date","nullable":true},"monthly_contribution":{"type":"number"},"current_balance":{"type":"number"}}},"progress":{"$ref":"#/components/schemas/GoalProgress"}}},"IncomeBufferStatus":{"type":"object","properties":{"enabled":{"type":"boolean"},"balance":{"type":"number"},"monthsOfRunway":{"type":"number"},"monthlyBudget":{"type":"number"}}},"IncomeBufferMutationResult":{"type":"object","properties":{"success":{"type":"boolean","const":true},"newBalance":{"type":"number"},"amountAdded":{"type":"number"},"amountWithdrawn":{"type":"number"}}},"ManualAllocationResult":{"type":"object","properties":{"success":{"type":"boolean","const":true},"category":{"$ref":"#/components/schemas/Category"},"allocation":{"type":"object","properties":{"amount":{"type":"number"},"month":{"type":"string","description":"YYYY-MM-01"},"fundingTracked":{"type":"boolean"}}}}},"DuplicateTransaction":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer"},"date":{"type":"string","format":"date"},"description":{"type":"string"},"total_amount":{"type":"number"},"transaction_type":{"type":"string","enum":["income","expense"]},"splits":{"type":"array","items":{"type":"object","properties":{}}}}},"DuplicateGroup":{"type":"object","properties":{"amount":{"type":"number"},"transactions":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateTransaction"}}}},"DuplicateGroupsResponse":{"type":"object","properties":{"duplicateGroups":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateGroup"}}}},"RecurringPattern":{"type":"object","properties":{"merchantGroupId":{"type":"integer","nullable":true},"merchantName":{"type":"string","nullable":true},"frequency":{"type":"string"},"expectedAmount":{"type":"number"},"amountVariance":{"type":"number"},"transactionType":{"type":"string","enum":["income","expense"]},"categoryId":{"type":"integer","nullable":true},"accountId":{"type":"integer","nullable":true},"creditCardId":{"type":"integer","nullable":true},"confidenceScore":{"type":"number"},"occurrenceCount":{"type":"integer"},"lastOccurrenceDate":{"type":"string","format":"date","nullable":true},"nextExpectedDate":{"type":"string","format":"date","nullable":true},"transactionIds":{"type":"array","items":{"type":"integer"}}}},"RecurringDetectResponse":{"type":"object","properties":{"patterns":{"type":"array","items":{"$ref":"#/components/schemas/RecurringPattern"}},"saved":{"type":"integer"},"skipped":{"type":"integer"},"errors":{"type":"integer"},"message":{"type":"string"}}},"SettingsMap":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value map of account settings","properties":{}},"FeaturesMap":{"type":"object","additionalProperties":{"type":"boolean"},"description":"Feature flag name to enabled state","properties":{}},"NotificationPreference":{"type":"object","properties":{"emailEnabled":{"type":"boolean"},"inAppEnabled":{"type":"boolean"},"settings":{"type":"object","additionalProperties":true,"properties":{}}}},"NotificationPreferencesMap":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/NotificationPreference"},"properties":{}},"UnreadCountResponse":{"type":"object","properties":{"unreadCount":{"type":"integer"}}},"BulkAssignResult":{"type":"object","properties":{"success":{"type":"boolean","const":true},"updated_count":{"type":"integer"}}},"ImportApproveResult":{"type":"object","properties":{"imported":{"type":"integer"}}},"CollaboratorsResponse":{"type":"object","properties":{"account":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"}}},"members":{"type":"array","items":{"type":"object","properties":{"user_id":{"type":"string","format":"uuid"},"role":{"type":"string","enum":["owner","editor","viewer"]},"status":{"type":"string"},"accepted_at":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time"}}}},"invitations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["editor","viewer"]},"invited_by":{"type":"string","format":"uuid"},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"}}}}}},"BackupListItem":{"type":"object","properties":{"id":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"storage_path":{"type":"string","nullable":true}}},"BackupsListResponse":{"type":"object","properties":{"backups":{"type":"array","items":{"$ref":"#/components/schemas/BackupListItem"}},"isPremium":{"type":"boolean"}}},"BackupCreatedResponse":{"type":"object","properties":{"backup":{"type":"object","properties":{"id":{"type":"integer"},"created_at":{"type":"string","format":"date-time"}}}}},"BudgetAccount":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"AccountExportData":{"type":"object","description":"Full account export (same structure as backups). AI conversations are excluded from the external API.","properties":{"version":{"type":"string","example":"2.0"},"created_at":{"type":"string","format":"date-time"},"created_by":{"type":"string","format":"uuid"},"account":{"$ref":"#/components/schemas/BudgetAccount"},"account_users":{"type":"array","items":{"type":"object","properties":{}}},"account_invitations":{"type":"array","items":{"type":"object","properties":{}}},"accounts":{"type":"array","items":{"$ref":"#/components/schemas/Account"}},"categories":{"type":"array","items":{"$ref":"#/components/schemas/Category"}},"credit_cards":{"type":"array","items":{"$ref":"#/components/schemas/CreditCard"}},"loans":{"type":"array","items":{"$ref":"#/components/schemas/Loan"}},"non_cash_assets":{"type":"array","items":{"$ref":"#/components/schemas/NonCashAsset"}},"transactions":{"type":"array","items":{"$ref":"#/components/schemas/Transaction"}},"transaction_splits":{"type":"array","items":{"$ref":"#/components/schemas/TransactionSplit"}},"pending_checks":{"type":"array","items":{"$ref":"#/components/schemas/PendingCheck"}},"goals":{"type":"array","items":{"$ref":"#/components/schemas/Goal"}},"income_streams":{"type":"array","items":{"$ref":"#/components/schemas/IncomeStream"}},"income_settings":{"type":"array","items":{"$ref":"#/components/schemas/IncomeSettings"}},"pre_tax_deductions":{"type":"array","items":{"$ref":"#/components/schemas/PreTaxDeduction"}},"settings":{"type":"array","items":{"type":"object","properties":{}}},"merchant_groups":{"type":"array","items":{"$ref":"#/components/schemas/MerchantGroup"}},"merchant_mappings":{"type":"array","items":{"$ref":"#/components/schemas/MerchantMapping"}},"merchant_category_rules":{"type":"array","items":{"$ref":"#/components/schemas/MerchantCategoryRule"}},"tags":{"type":"array","items":{"$ref":"#/components/schemas/Tag"}},"tag_rules":{"type":"array","items":{"$ref":"#/components/schemas/TagRule"}},"recurring_transactions":{"type":"array","items":{"$ref":"#/components/schemas/RecurringTransaction"}},"notifications":{"type":"array","items":{"$ref":"#/components/schemas/Notification"}},"csv_import_templates":{"type":"array","items":{"$ref":"#/components/schemas/CsvImportTemplate"}},"automatic_import_setups":{"type":"array","items":{"$ref":"#/components/schemas/AutomaticImportSetup"}},"queued_imports":{"type":"array","items":{"$ref":"#/components/schemas/QueuedImport"}},"net_worth_snapshots":{"type":"array","items":{"$ref":"#/components/schemas/NetWorthSnapshot"}}}},"RetirementForecastSettings":{"type":"object","additionalProperties":true,"description":"Retirement forecast settings keyed by setting name (values may be strings or parsed JSON)","properties":{}},"CreateTransactionRequest":{"type":"object","required":["description","amount","date"],"properties":{"description":{"type":"string"},"amount":{"type":"number"},"date":{"type":"string","format":"date"},"account_id":{"type":"integer","nullable":true},"credit_card_id":{"type":"integer","nullable":true},"category_id":{"type":"integer","nullable":true},"merchant":{"type":"string","nullable":true},"transaction_type":{"type":"string","enum":["income","expense"]},"notes":{"type":"string","nullable":true},"splits":{"type":"array","items":{"type":"object","properties":{"category_id":{"type":"integer"},"amount":{"type":"number"}}}}}},"ApiError":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_api_key","premium_required","insufficient_scope","validation_error","not_found","rate_limit_exceeded","internal_error"]},"message":{"type":"string"},"required_scope":{"type":"string"},"retry_after_seconds":{"type":"integer"}}}}},"CreateCategoryRequest":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"monthly_amount":{"type":"number"},"current_balance":{"type":"number"},"sort_order":{"type":"integer"},"notes":{"type":"string","nullable":true},"is_archived":{"type":"boolean"},"category_type":{"type":"string","enum":["monthly_expense","accumulation","target_balance"]},"priority":{"type":"integer"},"monthly_target":{"type":"number"},"annual_target":{"type":"number"},"target_balance":{"type":"number"}}},"UpdateCategoryRequest":{"type":"object","properties":{"name":{"type":"string"},"monthly_amount":{"type":"number"},"current_balance":{"type":"number"},"sort_order":{"type":"integer"},"notes":{"type":"string","nullable":true},"is_archived":{"type":"boolean"},"category_type":{"type":"string","enum":["monthly_expense","accumulation","target_balance"]},"priority":{"type":"integer"},"monthly_target":{"type":"number"},"annual_target":{"type":"number"},"target_balance":{"type":"number"}}},"ReorderCategoriesRequest":{"type":"object","required":["categoryOrders"],"properties":{"categoryOrders":{"type":"array","items":{"type":"object","required":["id","sort_order"],"properties":{"id":{"type":"integer"},"sort_order":{"type":"integer"}}}}}},"BulkArchiveCategoriesRequest":{"type":"object","required":["categoryIds"],"properties":{"categoryIds":{"type":"array","items":{"type":"integer"}},"is_archived":{"type":"boolean","default":true}}},"ManualAllocationRequest":{"type":"object","required":["categoryId","amount"],"properties":{"categoryId":{"type":"integer"},"amount":{"type":"number","minimum":0,"exclusiveMinimum":true},"month":{"type":"string","description":"YYYY-MM-01 format"}}},"CreateAccountRequest":{"type":"object","required":["name","balance","account_type"],"properties":{"name":{"type":"string"},"balance":{"type":"number"},"account_type":{"type":"string","enum":["checking","savings","cash"]},"include_in_totals":{"type":"boolean"},"sort_order":{"type":"integer"}}},"UpdateAccountRequest":{"type":"object","properties":{"name":{"type":"string"},"balance":{"type":"number"},"account_type":{"type":"string","enum":["checking","savings","cash"]},"include_in_totals":{"type":"boolean"},"sort_order":{"type":"integer"}}},"CreateCreditCardRequest":{"type":"object","required":["name","credit_limit","available_credit"],"properties":{"name":{"type":"string"},"credit_limit":{"type":"number"},"available_credit":{"type":"number"},"include_in_totals":{"type":"boolean"},"sort_order":{"type":"integer"}}},"UpdateCreditCardRequest":{"type":"object","properties":{"name":{"type":"string"},"credit_limit":{"type":"number"},"available_credit":{"type":"number"},"include_in_totals":{"type":"boolean"},"sort_order":{"type":"integer"}}},"UpdateTransactionRequest":{"type":"object","properties":{"description":{"type":"string"},"amount":{"type":"number"},"date":{"type":"string","format":"date"},"account_id":{"type":"integer","nullable":true},"credit_card_id":{"type":"integer","nullable":true},"category_id":{"type":"integer","nullable":true},"merchant":{"type":"string","nullable":true},"transaction_type":{"type":"string","enum":["income","expense"]},"notes":{"type":"string","nullable":true}}},"CreateGoalRequest":{"type":"object","required":["name","goal_type","monthly_contribution"],"properties":{"name":{"type":"string"},"target_amount":{"type":"number"},"target_date":{"type":"string","format":"date","nullable":true},"goal_type":{"type":"string","enum":["envelope","account-linked","debt-paydown"]},"monthly_contribution":{"type":"number"},"linked_account_id":{"type":"integer","nullable":true},"linked_category_id":{"type":"integer","nullable":true},"linked_credit_card_id":{"type":"integer","nullable":true},"linked_loan_id":{"type":"integer","nullable":true},"notes":{"type":"string","nullable":true}}},"UpdateGoalRequest":{"type":"object","properties":{"name":{"type":"string"},"target_amount":{"type":"number"},"target_date":{"type":"string","format":"date","nullable":true},"monthly_contribution":{"type":"number"},"status":{"type":"string","enum":["active","completed","overdue","paused"]},"notes":{"type":"string","nullable":true},"sort_order":{"type":"integer"}}},"CreateLoanRequest":{"type":"object","required":["name","balance"],"properties":{"name":{"type":"string"},"balance":{"type":"number"},"interest_rate":{"type":"number","nullable":true},"minimum_payment":{"type":"number","nullable":true},"institution":{"type":"string","nullable":true},"include_in_net_worth":{"type":"boolean"}}},"UpdateLoanRequest":{"type":"object","properties":{"name":{"type":"string"},"balance":{"type":"number"},"interest_rate":{"type":"number","nullable":true},"minimum_payment":{"type":"number","nullable":true},"institution":{"type":"string","nullable":true},"include_in_net_worth":{"type":"boolean"}}},"CreateNonCashAssetRequest":{"type":"object","required":["name","asset_type"],"properties":{"name":{"type":"string"},"asset_type":{"type":"string"},"current_value":{"type":"number"},"estimated_return_percentage":{"type":"number"},"is_rmd_qualified":{"type":"boolean"},"is_liquid":{"type":"boolean"}}},"UpdateNonCashAssetRequest":{"type":"object","properties":{"name":{"type":"string"},"asset_type":{"type":"string"},"current_value":{"type":"number"},"estimated_return_percentage":{"type":"number"},"is_rmd_qualified":{"type":"boolean"},"is_liquid":{"type":"boolean"}}},"CreatePendingCheckRequest":{"type":"object","required":["description","amount"],"properties":{"description":{"type":"string"},"amount":{"type":"number"},"type":{"type":"string","enum":["expense","income"]}}},"UpdatePendingCheckRequest":{"type":"object","properties":{"description":{"type":"string"},"amount":{"type":"number"},"type":{"type":"string","enum":["expense","income"]}}},"CreateRecurringTransactionRequest":{"type":"object","additionalProperties":true,"properties":{}},"UpdateRecurringTransactionRequest":{"type":"object","additionalProperties":true,"properties":{}},"DetectRecurringTransactionsRequest":{"type":"object","properties":{"lookbackMonths":{"type":"integer","default":24}}},"CreateIncomeStreamRequest":{"type":"object","required":["name","annual_income"],"properties":{"name":{"type":"string"},"annual_income":{"type":"number"},"tax_rate":{"type":"number"},"pay_frequency":{"type":"string"},"include_in_budget":{"type":"boolean"}}},"UpdateIncomeStreamRequest":{"type":"object","additionalProperties":true,"properties":{}},"CreateIncomeSettingsRequest":{"type":"object","additionalProperties":true,"properties":{}},"CreatePreTaxDeductionRequest":{"type":"object","additionalProperties":true,"properties":{}},"IncomeBufferAmountRequest":{"type":"object","required":["amount"],"properties":{"amount":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"CreateTagRequest":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"color":{"type":"string","nullable":true},"description":{"type":"string","nullable":true}}},"UpdateTagRequest":{"type":"object","properties":{"name":{"type":"string"},"color":{"type":"string","nullable":true},"description":{"type":"string","nullable":true}}},"CreateTagRuleRequest":{"type":"object","required":["tag_id","rule_type","rule_value"],"properties":{"tag_id":{"type":"integer"},"rule_type":{"type":"string","enum":["category","merchant","description","amount"]},"rule_value":{"type":"string"},"priority":{"type":"integer"},"is_active":{"type":"boolean"}}},"BulkAssignTagsRequest":{"type":"object","required":["transaction_ids","tag_ids"],"properties":{"transaction_ids":{"type":"array","items":{"type":"integer"}},"tag_ids":{"type":"array","items":{"type":"integer"}}}},"CreateMerchantGroupRequest":{"type":"object","required":["display_name"],"properties":{"display_name":{"type":"string"}}},"UpdateMerchantGroupRequest":{"type":"object","properties":{"display_name":{"type":"string"}}},"CreateMerchantMappingRequest":{"type":"object","additionalProperties":true,"properties":{}},"CreateMerchantCategoryRuleRequest":{"type":"object","additionalProperties":true,"properties":{}},"UpdateMerchantCategoryRuleRequest":{"type":"object","additionalProperties":true,"properties":{}},"CreateCsvImportTemplateRequest":{"type":"object","additionalProperties":true,"properties":{}},"CreateAutomaticImportSetupRequest":{"type":"object","additionalProperties":true,"properties":{}},"UpdateAutomaticImportSetupRequest":{"type":"object","additionalProperties":true,"properties":{}},"UpdateQueuedImportRequest":{"type":"object","additionalProperties":true,"properties":{}},"ApproveBatchImportsRequest":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"integer"}}}},"UpdateSettingsRequest":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value settings to upsert","properties":{}},"UpdateNotificationRequest":{"type":"object","properties":{"is_read":{"type":"boolean"}}},"UpdateNotificationPreferencesRequest":{"type":"object","additionalProperties":{"type":"object","properties":{"emailEnabled":{"type":"boolean"},"inAppEnabled":{"type":"boolean"},"settings":{"type":"object","properties":{}}}},"properties":{}},"UpdateRetirementForecastSettingsRequest":{"type":"object","additionalProperties":true,"properties":{}}},"responses":{"InvalidApiKey":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"Forbidden":{"description":"Premium required or insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"ValidationError":{"description":"Invalid request parameters or body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"NotFound":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"InternalError":{"description":"Unexpected server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"RateLimitExceeded":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}