Skip to content

Feature map

Where each feature lives. Every route in runway/server/routes.py is listed with its handler, the web app files that call it, the tests that exercise it and the docs page that describes it. The same data, for tools and agents, is in docs/feature-map.json. make feature-map regenerates both; make check and CI fail when they are out of date, or when a route has no test and isn’t on tools/feature_map_allowlist.txt (a list that only shrinks).

189 routes; 27 have no test yet.

A route counts as tested when a file in tests/ names its handler, or calls its address (with its method, when the test writes one). A web app caller is an api( or apiCall( call with a literal address; one built in a variable isn’t seen.

Route Handler Web app Tests Docs
GET /api/backup backups.py:api_backup - test_applock.py, test_backup.py, test_http_pinned.py start/deployment
POST /api/backup/inspect backups.py:api_backup_inspect lib/components/settings/BackupSection.svelte test_backup.py, test_http_pinned.py start/deployment
POST /api/restore backups.py:api_restore lib/components/settings/BackupSection.svelte test_backup.py, test_hardening.py, test_http_pinned.py start/deployment
POST /api/sync connections.py:api_sync lib/app.svelte.ts, lib/components/settings/PlaidLink.svelte, lib/components/settings/SimpleFinSetup.svelte test_api_handlers.py, test_http_pinned.py, test_monitoring.py using/settings
POST /api/sync/auto connections.py:api_sync_auto lib/app.svelte.ts test_http_pinned.py, test_http_server.py using/settings
POST /api/investments/sync investments.py:api_investments_sync - test_http_pinned.py using/investments
GET /api/investments/stream investments.py:api_quote_stream lib/components/investments/live.ts test_http_pinned.py, test_investments.py using/investments
GET /api/merchants/{id}/logo merchants.py:api_merchant_logo_file - test_brands.py, test_categorize.py, test_hardening.py, test_http_pinned.py, test_merchants.py, test_monitoring.py, test_recurring.py using/transactions
GET /api/carta/capture equity.py:api_carta_capture - test_http_pinned.py using/net-worth
GET /api/retail/extension.zip retail.py:api_extension_zip - test_http_pinned.py using/browser-extension
GET /api/state state.py:api_state lib/app.svelte.ts test_api_handlers.py, test_api_queries.py, test_api_validation.py, test_applock.py, test_backup.py, test_categorize.py, test_churn_found.py, test_finnhub.py, test_http_pinned.py, test_http_server.py, test_mcp.py, test_monitoring.py, test_security.py, test_server.py using/overview
GET /api/overview state.py:api_overview lib/prefetch.ts, pages/Transactions.svelte test_api_handlers.py, test_api_validation.py, test_applock.py, test_categorize.py, test_forecast_cycles.py, test_http_pinned.py, test_http_server.py using/overview
GET /api/accounts accounts.py:api_accounts lib/accounts.ts test_api_contract.py, test_api_handlers.py, test_api_queries.py, test_http_pinned.py, test_routes.py, test_statements.py using/settings
POST /api/accounts/{id} accounts.py:api_account_update lib/components/settings/AccountRow.svelte, lib/components/settings/LoanTerms.svelte, lib/components/settings/PlaidLink.svelte, pages/NetWorth.svelte test_api_handlers.py, test_api_validation.py, test_mcp.py, test_networth.py using/settings
GET /api/accounts/{id}/logo-options accounts.py:api_account_logo_options - test_brands.py using/settings
POST /api/accounts/{id}/logo accounts.py:api_account_logo - test_brands.py, test_mcp.py using/settings
POST /api/accounts/{id}/statements accounts.py:api_statement_add lib/components/settings/CardStatement.svelte test_statements.py using/settings
POST /api/accounts/{id}/statements/{id}/remove accounts.py:api_statement_remove lib/components/settings/CardStatement.svelte test_routes.py, test_statements.py using/settings
GET /api/accounts/{id}/removal accounts.py:api_account_removal lib/components/settings/AccountRow.svelte test_deleted_accounts.py using/settings
POST /api/accounts/{id}/remove accounts.py:api_account_remove lib/components/settings/AccountRow.svelte test_deleted_accounts.py, test_mcp.py using/settings
GET /api/accounts/deleted accounts.py:api_accounts_deleted lib/components/settings/AccountsSection.svelte test_deleted_accounts.py, test_routes.py using/settings
POST /api/accounts/{id}/restore accounts.py:api_account_restore lib/components/settings/AccountsSection.svelte test_deleted_accounts.py, test_mcp.py using/settings
GET /api/transactions transactions.py:api_transactions lib/components/overview/ThisMonth.svelte, lib/components/recurring/RecurringItem.svelte, lib/components/transactions/txList.svelte.ts test_api_contract.py, test_api_handlers.py, test_api_validation.py, test_applock.py, test_categorize.py, test_merchants.py, test_retail.py, test_routes.py, test_search.py, test_security.py, test_server_errors.py, test_splits.py, test_tx_edits.py using/transactions
POST /api/transactions transactions.py:api_tx_create lib/components/transactions/TxAdd.svelte test_api_contract.py, test_api_validation.py, test_mcp.py, test_routes.py, test_server_errors.py, test_tx_edits.py using/transactions
POST /api/transactions/bulk transactions.py:api_tx_bulk lib/components/transactions/ReviewGroups.svelte, lib/components/transactions/TxTable.svelte, lib/components/transactions/restore.ts, lib/components/transactions/review.svelte.ts test_api_validation.py, test_bulk.py, test_categorize.py, test_mcp.py, test_retail.py, test_routes.py, test_rules.py, test_splits.py, test_tx_edits.py using/transactions
POST /api/transactions/bulk-delete transactions.py:api_tx_bulk_delete lib/components/transactions/TxTable.svelte test_api_contract.py, test_forecast_deleted.py, test_mcp.py, test_tx_edits.py using/transactions
POST /api/transactions/import transactions.py:api_tx_import - test_mcp.py, test_tx_edits.py using/transactions
POST /api/transactions/{id}/category transactions.py:api_tx_category lib/components/transactions/remember.svelte.ts, pages/Transactions.svelte test_api_validation.py, test_bulk.py, test_monitoring.py, test_retail.py, test_splits.py using/transactions
POST /api/transactions/{id}/accept transactions.py:api_tx_accept pages/Transactions.svelte test_rules.py using/transactions
POST /api/transactions/{id}/split transactions.py:api_tx_split lib/components/transactions/SplitEditor.svelte none (allowed) using/transactions
POST /api/transactions/{id}/name transactions.py:api_tx_brand_name lib/components/transactions/TxDetail.svelte test_categorize.py using/transactions
POST /api/transactions/{id}/recurring recurring.py:api_tx_recurring lib/components/recurring/LinkPicker.svelte, lib/components/transactions/RecurringPicker.svelte test_api_validation.py, test_categories_recurring_pinned.py, test_recurring.py using/transactions
POST /api/transactions/{id} transactions.py:api_tx_update lib/components/transactions/TxDetail.svelte test_tx_edits.py using/transactions
DELETE /api/transactions/{id} transactions.py:api_tx_delete lib/components/transactions/TxAdd.svelte, lib/components/transactions/TxDelete.svelte test_api_contract.py, test_forecast_deleted.py, test_tx_edits.py using/transactions
POST /api/overrides state.py:api_override_set lib/components/MissedAlert.svelte, lib/components/overview/CardsTable.svelte, lib/components/overview/EventsList.svelte, lib/components/recurring/RecurringItem.svelte test_api_handlers.py, test_api_validation.py, test_recurring.py using/overview
DELETE /api/overrides state.py:api_override_delete lib/components/MissedAlert.svelte, lib/components/overview/CardsTable.svelte, lib/components/overview/EventsList.svelte, lib/components/recurring/RecurringItem.svelte test_api_handlers.py, test_mcp.py, test_recurring.py using/overview
GET /api/push notifications.py:api_push lib/components/settings/NotificationsSection.svelte test_api_handlers.py, test_mcp.py, test_notify.py using/settings
POST /api/push/subscribe notifications.py:api_push_subscribe lib/components/settings/NotificationsSection.svelte none (allowed) using/settings
POST /api/push/unsubscribe notifications.py:api_push_unsubscribe lib/components/settings/NotificationsSection.svelte test_notify.py using/settings
POST /api/push/prefs notifications.py:api_push_prefs lib/components/settings/NotificationsSection.svelte test_notify.py using/settings
POST /api/push/test notifications.py:api_push_test lib/components/settings/NotificationsSection.svelte test_mcp.py, test_notify.py, test_routes.py using/settings
GET /api/lock lock.py:api_lock lib/components/settings/AppLockCard.svelte test_api_contract.py, test_applock.py, test_mcp.py contributing/development, reference/architecture
POST /api/lock/challenge lock.py:api_lock_challenge lib/components/settings/AppLockCard.svelte, lib/lock.svelte.ts test_api_contract.py, test_applock.py start/deployment
POST /api/lock/register lock.py:api_lock_register lib/components/settings/AppLockCard.svelte test_api_contract.py, test_applock.py, test_mcp.py start/deployment
POST /api/lock/unlock lock.py:api_lock_unlock lib/lock.svelte.ts test_api_contract.py, test_applock.py, test_mcp.py start/deployment
POST /api/lock/engage lock.py:api_lock_engage lib/lock.svelte.ts test_api_contract.py, test_applock.py, test_mcp.py start/deployment
POST /api/lock/settings lock.py:api_lock_settings lib/components/settings/AppLockCard.svelte test_api_contract.py, test_applock.py start/deployment
POST /api/lock/key-share lock.py:api_lock_key_share lib/deviceCache.ts test_api_contract.py, test_applock.py contributing/development, reference/architecture
DELETE /api/lock lock.py:api_lock_off lib/components/settings/AppLockCard.svelte test_api_contract.py, test_applock.py, test_mcp.py contributing/development, reference/architecture
GET /api/budget budget.py:api_budget lib/components/budget/BudgetView.svelte, lib/components/overview/ThisMonth.svelte test_api_contract.py, test_api_handlers.py, test_budget_months.py, test_categorize.py, test_forecast_schedule.py, test_http_server.py, test_routes.py, test_splits.py using/budget
POST /api/budget budget.py:api_budget_set lib/components/budget/BudgetRow.svelte, lib/components/budget/BudgetSuggest.svelte, lib/components/budget/BudgetView.svelte test_api_contract.py, test_api_handlers.py, test_api_validation.py, test_budget_months.py, test_categorize.py, test_http_server.py, test_routes.py using/budget
GET /api/budget/suggestions budget_suggest.py:api_budget_suggestions lib/components/budget/BudgetSuggest.svelte test_api_contract.py, test_budget_suggest.py using/budget
POST /api/ai/suggest transactions.py:api_ai_suggest lib/components/transactions/AiSuggest.svelte none (allowed) using/transactions
POST /api/ai/apply transactions.py:api_ai_apply lib/components/transactions/AiSuggest.svelte test_api_handlers.py, test_api_validation.py, test_bulk.py, test_mcp.py, test_networth.py, test_rules.py using/transactions
GET /api/ai/log transactions.py:api_ai_log lib/components/transactions/AiLog.svelte, lib/components/transactions/AiLogTable.svelte test_api_handlers.py using/transactions
GET /api/categories categories.py:api_categories lib/categories.svelte.ts test_bulk.py, test_categories_recurring_pinned.py, test_http_pinned.py, test_security.py, test_server.py, test_server_errors.py using/transactions
POST /api/categories categories.py:api_category_add lib/components/settings/CategoryRow.svelte, lib/components/settings/categories.ts test_api_validation.py, test_applock.py, test_http_server.py, test_server.py, test_server_errors.py using/transactions
POST /api/categories/rename categories.py:api_category_rename lib/components/settings/CategoryRow.svelte test_api_validation.py using/transactions
POST /api/categories/remove categories.py:api_category_remove lib/components/settings/CategoryRow.svelte test_api_validation.py, test_http_server.py, test_mcp.py using/transactions
POST /api/categories/move categories.py:api_category_move lib/components/settings/CategoryRow.svelte test_api_validation.py using/transactions
POST /api/categories/look categories.py:api_category_look lib/components/settings/CategoryRow.svelte, lib/components/settings/LookPicker.svelte test_mcp_protocol.py using/transactions
POST /api/categories/pay-with categories.py:api_category_pay_with lib/components/settings/CategoryRow.svelte test_categories_recurring_pinned.py using/transactions
GET /api/cashflow reports.py:api_cashflow lib/components/reports/Cashflow.svelte test_categorize.py, test_http_server.py, test_routes.py, test_splits.py using/overview
GET /api/month_pace reports.py:api_month_pace lib/components/overview/ThisMonth.svelte none (allowed) using/overview
GET /api/reports/spending reports.py:api_report_spending lib/components/reports/Trends.svelte test_routes.py using/reports
GET /api/reports/income reports.py:api_report_income lib/components/reports/Income.svelte test_api_validation.py using/reports
GET /api/reports/merchants reports.py:api_report_merchants lib/components/reports/Merchants.svelte test_reports.py using/reports
GET /api/reports/merchant reports.py:api_report_merchant lib/components/reports/MerchantDetail.svelte test_routes.py using/reports
GET /api/reports/breakdown reports.py:api_report_breakdown lib/components/reports/Breakdown.svelte test_api_validation.py using/reports
GET /api/reports/transactions reports.py:api_report_transactions lib/components/reports/Breakdown.svelte none (allowed) using/reports
GET /api/rules categories.py:api_rules pages/Settings.svelte test_categories_recurring_pinned.py, test_http_server.py, test_mcp_protocol.py using/transactions
POST /api/rules categories.py:api_rule_add lib/components/settings/RuleEditor.svelte, lib/components/settings/RulesSection.svelte test_api_validation.py, test_http_server.py, test_splits.py using/transactions
POST /api/rules/preview categories.py:api_rule_preview lib/components/settings/RuleEditor.svelte, lib/components/settings/ruleApply.svelte.ts none (allowed) using/transactions
DELETE /api/rules/{id} categories.py:api_rule_delete lib/components/settings/RulesSection.svelte test_api_validation.py, test_categories_recurring_pinned.py, test_mcp.py using/transactions
POST /api/rules/{id} categories.py:api_rule_update lib/components/settings/RuleEditor.svelte test_http_server.py, test_mcp.py using/transactions
POST /api/rules/{id}/apply categories.py:api_rule_apply lib/components/settings/ruleApply.svelte.ts test_bulk.py, test_http_server.py, test_mcp.py using/transactions
GET /api/recurring recurring.py:api_recurring lib/components/recurring/RecurringItem.svelte, lib/components/recurring/load.ts test_api_queries.py, test_categories_recurring_pinned.py, test_categorize.py, test_recurring.py, test_recurring_suggestions.py using/recurring
POST /api/recurring recurring.py:api_recurring_add lib/components/recurring/RecurringView.svelte test_api_validation.py, test_categories_recurring_pinned.py, test_forecast_schedule.py, test_http_server.py, test_recurring.py, test_recurring_suggestions.py using/recurring
GET /api/recurring/suggestions recurring.py:api_recurring_suggestions lib/components/recurring/RecurringView.svelte test_recurring_suggestions.py using/recurring
POST /api/recurring/suggestions/dismiss recurring.py:api_recurring_suggestion_dismiss lib/components/recurring/RecurringView.svelte test_recurring_suggestions.py using/recurring
GET /api/recurring/suggestions/dismissed recurring.py:api_recurring_suggestions_dismissed lib/components/recurring/RecurringView.svelte test_recurring_suggestions.py using/recurring
POST /api/recurring/suggestions/restore recurring.py:api_recurring_suggestion_restore lib/components/recurring/RecurringView.svelte test_recurring_suggestions.py using/recurring
GET /api/recurring/missed recurring.py:api_recurring_missed - none (allowed) using/recurring
POST /api/recurring/dismiss recurring.py:api_recurring_dismiss lib/components/recurring/LinkPicker.svelte test_api_validation.py, test_categories_recurring_pinned.py, test_mcp.py using/recurring
POST /api/recurring/preview recurring.py:api_recurring_preview lib/components/recurring/RecurringPreview.svelte test_categories_recurring_pinned.py using/recurring
POST /api/recurring/{id}/match recurring.py:api_recurring_add_text lib/components/recurring/LinkPicker.svelte, lib/components/transactions/remember.svelte.ts test_recurring.py using/recurring
GET /api/recurring/{id}/candidates recurring.py:api_recurring_candidates lib/components/recurring/LinkPicker.svelte test_recurring.py using/recurring
POST /api/recurring/{id}/amount recurring.py:api_recurring_amount lib/components/overview/EventsList.svelte test_recurring.py using/recurring
POST /api/recurring/{id}/skip-missed recurring.py:api_recurring_skip_missed lib/components/recurring/MissedGroup.svelte test_mcp.py, test_recurring.py using/recurring
POST /api/recurring/{id}/end recurring.py:api_recurring_end lib/components/recurring/MissedGroup.svelte test_mcp.py, test_recurring.py using/recurring
POST /api/recurring/{id} recurring.py:api_recurring_update lib/components/recurring/RecurringItem.svelte test_api_validation.py, test_categories_recurring_pinned.py, test_recurring.py using/recurring
DELETE /api/recurring/{id} recurring.py:api_recurring_delete lib/components/recurring/RecurringItem.svelte, lib/components/recurring/RecurringView.svelte test_api_validation.py, test_categories_recurring_pinned.py, test_recurring.py using/recurring
POST /api/connect connections.py:api_connect lib/components/settings/SimpleFinSetup.svelte test_mcp.py using/settings
GET /api/plaid/status connections.py:api_plaid_status lib/components/investments/InvestmentsView.svelte, lib/components/settings/AccountsSection.svelte, lib/components/settings/PlaidCard.svelte test_plaidbank.py using/settings
POST /api/plaid/settings connections.py:api_plaid_settings lib/components/settings/PlaidKeys.svelte none (allowed) using/settings
POST /api/plaid/link_token connections.py:api_plaid_link_token lib/components/settings/plaid.svelte.ts test_plaidbank.py using/settings
POST /api/plaid/exchange connections.py:api_plaid_exchange lib/components/settings/plaid.svelte.ts test_investments.py using/settings
POST /api/plaid/items/{id}/sync connections.py:api_plaid_item_sync lib/components/settings/PlaidItemRow.svelte, lib/components/settings/plaid.svelte.ts test_plaidbank.py using/settings
POST /api/plaid/items/{id}/remove connections.py:api_plaid_item_remove lib/components/settings/PlaidItemRow.svelte test_mcp.py using/settings
POST /api/plaid/items/{id}/refresh connections.py:api_plaid_item_refresh lib/components/settings/PlaidItemRow.svelte test_api_contract.py, test_plaidbank.py using/settings
POST /api/plaid/match connections.py:api_plaid_match lib/components/settings/plaid.svelte.ts test_plaidbank.py using/settings
GET /api/plaid/oauth_resume connections.py:api_plaid_oauth_resume lib/components/settings/plaid.svelte.ts test_plaidbank.py using/settings
GET /api/investments investments.py:api_investments lib/components/investments/InvestmentsView.svelte, lib/components/networth/RetirementView.svelte none (allowed) using/investments
GET /api/investments/summary investments.py:api_investments_summary lib/components/overview/InvestmentsCard.svelte test_api_contract.py, test_investments.py using/investments
GET /api/investments/holding/{id} investments.py:api_investments_holding lib/components/investments/HoldingDetail.svelte test_api_contract.py, test_investments.py using/investments
GET /api/networth networth.py:api_networth lib/components/overview/SummaryTiles.svelte, pages/NetWorth.svelte test_networth.py using/net-worth
POST /api/assets networth.py:api_asset_add lib/components/networth/AssetForm.svelte none (allowed) using/net-worth
POST /api/assets/{id} networth.py:api_asset_update lib/components/networth/AssetCard.svelte, lib/components/networth/AssetForm.svelte test_networth.py using/net-worth
POST /api/assets/{id}/remove networth.py:api_asset_remove lib/components/networth/AssetCard.svelte none (allowed) using/net-worth
POST /api/assets/{id}/refresh networth.py:api_asset_refresh lib/components/networth/AssetCard.svelte test_routes.py using/net-worth
POST /api/realie/settings networth.py:api_realie_settings lib/components/settings/HomeValuesCard.svelte test_mcp.py using/net-worth
POST /api/finnhub/settings investments.py:api_finnhub_settings lib/components/settings/FinnhubCard.svelte test_finnhub.py, test_mcp.py using/investments
GET /api/finnhub/status investments.py:api_finnhub_status lib/components/settings/FinnhubCard.svelte test_finnhub.py using/investments
POST /api/logodev/settings merchants.py:api_logodev_settings lib/components/settings/LogoDevCard.svelte test_merchants.py using/transactions
GET /api/logodev/status merchants.py:api_logodev_status lib/components/settings/LogoDevCard.svelte none (allowed) using/transactions
GET /api/merchants/logo-options merchants.py:api_merchant_logo_options - test_api_validation.py using/transactions
POST /api/merchants/logo merchants.py:api_merchant_logo - test_api_validation.py, test_mcp.py using/transactions
GET /api/investments/logo-options merchants.py:api_holding_logo_options - test_merchants.py using/investments
POST /api/investments/logo merchants.py:api_holding_logo - test_mcp.py, test_merchants.py using/investments
POST /api/logodev/fetch merchants.py:api_logodev_fetch lib/components/settings/LogoDevCard.svelte test_mcp.py using/transactions
GET /api/investments/live investments.py:api_live_quotes lib/components/investments/live.ts test_routes.py using/investments
POST /api/investments/plan investments.py:api_plan_save lib/components/investments/RetirementPlanner.svelte none (allowed) using/investments
GET /api/tracked/{id} investments.py:api_tracked_get lib/components/investments/TrackedEditor.svelte test_simplefin_invest.py using/investments
POST /api/tracked/{id} investments.py:api_tracked_save lib/components/investments/TrackedEditor.svelte none (allowed) using/investments
POST /api/investments/cost investments.py:api_cost_basis lib/components/investments/CostBasisEditor.svelte test_simplefin_invest.py using/investments
POST /api/settings state.py:api_settings lib/components/overview/ForecastSettings.svelte, lib/components/overview/SetupChecklist.svelte, lib/components/settings/AccountRow.svelte, lib/components/settings/AiCard.svelte, pages/Overview.svelte test_api_handlers.py, test_api_validation.py, test_categorize.py, test_churn_found.py, test_http_pinned.py, test_http_server.py, test_mcp.py, test_security.py using/settings
GET /api/equity equity.py:api_equity lib/components/networth/EquityView.svelte, lib/components/settings/CartaCard.svelte none (allowed) using/net-worth
POST /api/equity/companies equity.py:api_equity_company_add lib/components/networth/EquityView.svelte none (allowed) using/net-worth
POST /api/equity/companies/{id} equity.py:api_equity_company_update - none (allowed) using/net-worth
POST /api/equity/companies/{id}/remove equity.py:api_equity_company_remove - none (allowed) using/net-worth
POST /api/equity/companies/{id}/grants equity.py:api_equity_grant_add lib/components/networth/EquityView.svelte none (allowed) using/net-worth
POST /api/equity/grants/{id} equity.py:api_equity_grant_update lib/components/networth/EquityView.svelte none (allowed) using/net-worth
POST /api/equity/grants/{id}/remove equity.py:api_equity_grant_remove - none (allowed) using/net-worth
GET /api/churning churning.py:api_churning pages/Churning.svelte test_churning_api.py, test_mcp.py using/churning
GET /api/churning/best churning.py:api_churning_best - test_churning_api.py using/churning
GET /api/churning/found churning.py:api_churning_found pages/Churning.svelte test_churn_found.py using/churning
POST /api/churning/found/{id}/dismiss churning.py:api_churn_found_dismiss - test_churn_found.py using/churning
POST /api/churning/found/{id}/undismiss churning.py:api_churn_found_undismiss - test_churn_found.py using/churning
POST /api/churning/suggest churning.py:api_churn_suggest lib/components/churning/cardSuggest.svelte.ts test_churn_found.py using/churning
POST /api/churning/cards churning.py:api_churn_card_add lib/components/churning/CardForm.svelte test_churning_api.py using/churning
POST /api/churning/cards/{id} churning.py:api_churn_card_update lib/components/churning/CardForm.svelte, lib/components/churning/cardSuggest.svelte.ts test_churning_api.py using/churning
POST /api/churning/cards/{id}/remove churning.py:api_churn_card_remove lib/components/churning/CardForm.svelte test_churning_api.py using/churning
POST /api/churning/cards/{id}/rates churning.py:api_churn_rate - test_churning_api.py using/churning
POST /api/churning/cards/{id}/plan/done churning.py:api_churn_plan_done - test_churning_api.py using/churning
POST /api/churning/cards/{id}/plan/undo churning.py:api_churn_plan_undo - test_churning_api.py using/churning
POST /api/churning/cards/{id}/benefits churning.py:api_churn_benefit_add lib/components/churning/BenefitForm.svelte, lib/components/churning/CardBenefits.svelte, lib/components/churning/cardSuggest.svelte.ts test_churning_api.py using/churning
POST /api/churning/benefits/{id} churning.py:api_churn_benefit_update lib/components/churning/BenefitForm.svelte test_churning_api.py using/churning
POST /api/churning/benefits/{id}/remove churning.py:api_churn_benefit_remove lib/components/churning/BenefitForm.svelte test_churning_api.py using/churning
POST /api/churning/benefits/{id}/use churning.py:api_churn_benefit_use - test_churning_api.py using/churning
POST /api/churning/benefits/{id}/unuse churning.py:api_churn_benefit_unuse - test_churning_api.py using/churning
POST /api/churning/currencies churning.py:api_churn_currency lib/components/churning/Rewards.svelte test_churning_api.py using/churning
POST /api/churning/currencies/{id}/remove churning.py:api_churn_currency_remove lib/components/churning/Rewards.svelte test_churning_api.py using/churning
POST /api/churning/balances churning.py:api_churn_balance lib/components/churning/Rewards.svelte test_churning_api.py using/churning
POST /api/churning/tasks churning.py:api_churn_task_add lib/components/churning/Upcoming.svelte test_churning_api.py using/churning
POST /api/churning/tasks/{id} churning.py:api_churn_task_update - test_churning_api.py using/churning
POST /api/churning/tasks/{id}/remove churning.py:api_churn_task_remove - test_churning_api.py using/churning
POST /api/churning/tasks/{id}/snooze churning.py:api_churn_task_snooze - test_churning_api.py using/churning
POST /api/churning/wishlist churning.py:api_churn_wish_add lib/components/churning/WishForm.svelte test_churning_api.py using/churning
POST /api/churning/wishlist/{id} churning.py:api_churn_wish_update lib/components/churning/Planned.svelte, lib/components/churning/WishForm.svelte test_churning_api.py using/churning
POST /api/churning/wishlist/{id}/remove churning.py:api_churn_wish_remove lib/components/churning/Planned.svelte, lib/components/churning/WishForm.svelte test_churning_api.py using/churning
POST /api/churning/wishlist/{id}/applied churning.py:api_churn_wish_applied lib/components/churning/Planned.svelte test_churning_api.py using/churning
POST /api/churning/scores churning.py:api_churn_score lib/components/churning/Planned.svelte test_churning_api.py using/churning
POST /api/churning/bank churning.py:api_bank_bonus_add lib/components/churning/BankForm.svelte test_churning_api.py using/churning
POST /api/churning/bank/{id} churning.py:api_bank_bonus_update lib/components/churning/BankForm.svelte test_churning_api.py using/churning
POST /api/churning/bank/{id}/remove churning.py:api_bank_bonus_remove lib/components/churning/BankForm.svelte test_churning_api.py using/churning
POST /api/carta/settings equity.py:api_carta_settings lib/components/settings/CartaCard.svelte none (allowed) using/net-worth
POST /api/carta/connect equity.py:api_carta_connect lib/components/settings/CartaCard.svelte test_mcp.py using/net-worth
POST /api/carta/sync equity.py:api_carta_sync lib/components/networth/EquityView.svelte, lib/components/settings/CartaCard.svelte test_routes.py using/net-worth
POST /api/carta/disconnect equity.py:api_carta_disconnect lib/components/settings/CartaCard.svelte none (allowed) using/net-worth
GET /api/retail retail.py:api_retail lib/components/settings/RetailCard.svelte test_retail.py, test_retail_tokens.py using/browser-extension
GET /api/mcp-settings mcp.py:api_mcp_settings lib/components/settings/McpCard.svelte test_mcp.py using/mcp
POST /api/mcp-settings/writes mcp.py:api_mcp_writes lib/components/settings/McpCard.svelte test_api_validation.py, test_mcp.py using/mcp
POST /api/mcp-settings/categorize mcp.py:api_mcp_categorize lib/components/settings/McpCard.svelte test_api_validation.py, test_mcp.py using/mcp
POST /api/mcp-settings/all mcp.py:api_mcp_all lib/components/settings/McpCard.svelte test_api_validation.py, test_mcp.py, test_mcp_protocol.py using/mcp
POST /api/mcp-settings/connections/{id}/revoke mcp.py:api_mcp_revoke lib/components/settings/McpCard.svelte test_api_validation.py, test_mcp.py using/mcp
POST /api/retail/token retail.py:api_retail_token lib/components/settings/RetailCard.svelte test_mcp.py, test_retail_tokens.py using/browser-extension
POST /api/retail/token/remove retail.py:api_retail_token_remove lib/components/settings/RetailCard.svelte test_mcp.py, test_retail_tokens.py using/browser-extension
POST /api/retail/settings retail.py:api_retail_settings lib/components/settings/RetailCard.svelte test_mcp.py using/browser-extension
POST /api/retail/match retail.py:api_retail_match lib/components/settings/RetailCard.svelte test_mcp.py using/browser-extension
GET /api/retail/orders/{id} retail.py:api_retail_order lib/components/orders/OrderDetail.svelte none (allowed) using/browser-extension
POST /api/retail/items/{id} retail.py:api_retail_item lib/components/orders/OrderDetail.svelte test_retail.py, test_retail_stores.py using/browser-extension
POST /api/retail/items/{id}/restore retail.py:api_retail_item_restore - test_mcp.py, test_retail.py using/browser-extension
POST /api/retail/orders/{id}/suggest retail.py:api_retail_suggest lib/components/orders/OrderDetail.svelte none (allowed) using/browser-extension
POST /api/retail/charges/{id}/unlink retail.py:api_retail_unlink - test_retail.py using/browser-extension
POST /api/retail/charges/{id}/link retail.py:api_retail_link - none (allowed) using/browser-extension
POST /api/retail/charges/{id}/apply retail.py:api_retail_apply - test_retail.py using/browser-extension
POST /api/retail/charges/{id}/restore retail.py:api_retail_charge_restore - test_retail.py using/browser-extension
GET /api/retail/charges/{id}/candidates retail.py:api_retail_candidates - none (allowed) using/browser-extension
POST /api/recategorize transactions.py:api_recategorize - test_api_handlers.py, test_mcp.py using/transactions