{"openapi":"3.0.3","info":{"title":"Wesley API","version":"1.0.0","description":"748 endpoints are auto-discovered from pages/api and documented with method-specific auth, parameters, request metadata, and exported Zod contracts where available. Start at /docs/reference/api-keys (Markdown: /llms.mdx/docs/reference/api-keys). Personal keys call existing APIs as their owner; look for x-wesley-personal-api-key: true. Filter this specification with ?path=/api/users/me or ?tag=Transactions. Inferred fields are optional unless the contract marks them required; follow endpoint descriptions and validation errors."},"servers":[{"url":"https://www.wesley-ai.co","description":"Current request origin"},{"url":"http://localhost:3000","description":"Local development"}],"tags":[{"name":"Account Types"},{"name":"Accounting Firms"},{"name":"Accounts"},{"name":"Admin"},{"name":"Agent"},{"name":"Ai"},{"name":"Ai Agent"},{"name":"Ap"},{"name":"Ar"},{"name":"Ask Client Activity"},{"name":"Audit Logs"},{"name":"Bank Statement Imports"},{"name":"Banking Unified Upload"},{"name":"Bill Com"},{"name":"Blob Upload Token"},{"name":"Cal Com"},{"name":"Chart Of Accounts"},{"name":"Chat Credits"},{"name":"Check Items"},{"name":"Checks"},{"name":"Classes"},{"name":"Clerk"},{"name":"Client Emails"},{"name":"Client Links"},{"name":"Client Onboarding"},{"name":"Client Portal"},{"name":"Client Presence"},{"name":"Client Tasks"},{"name":"Client Work"},{"name":"Codex"},{"name":"Companies"},{"name":"Company Comment Reads"},{"name":"Company Comments"},{"name":"Converted Documents"},{"name":"Custom Domain Auth"},{"name":"Document Action Proposals"},{"name":"Document Conversion Files"},{"name":"Document Links"},{"name":"Document Review Answers"},{"name":"Document Upload Session"},{"name":"Employees"},{"name":"Entity Groups"},{"name":"Experiment Access"},{"name":"External Transactions"},{"name":"Feature Usage"},{"name":"Finance"},{"name":"Fixed Assets"},{"name":"Integration Link"},{"name":"Integrations"},{"name":"Intercom Jwt"},{"name":"Intercom Latest Conversation"},{"name":"Internal"},{"name":"Invitations"},{"name":"Issue Board"},{"name":"Journal Entries"},{"name":"Journal Entry Applications"},{"name":"Journal Inspection"},{"name":"Journal Lines"},{"name":"Journal Period Locks"},{"name":"Journal Templates"},{"name":"Kpi"},{"name":"Locations"},{"name":"Marketing"},{"name":"Master Data"},{"name":"Mcp"},{"name":"Monthly Close Runs"},{"name":"Observability"},{"name":"Operational Errors"},{"name":"Payees"},{"name":"Payroll"},{"name":"Plaid"},{"name":"Private Blob Upload Token"},{"name":"Private Blob Upload Tokens"},{"name":"Processor Reconciliation"},{"name":"Processor Settlements"},{"name":"Projects"},{"name":"Public"},{"name":"Quickbooks"},{"name":"Quickbooks Desktop"},{"name":"Quickbooks Payroll"},{"name":"Receipt Integrations"},{"name":"Reconciliations"},{"name":"Recurring Journal Entries"},{"name":"Referrals"},{"name":"Reports"},{"name":"Review Books"},{"name":"Rules"},{"name":"Setup Guide Interactions"},{"name":"Shared Files"},{"name":"Shopify"},{"name":"Smartvault"},{"name":"Square"},{"name":"Stripe"},{"name":"Tags"},{"name":"Tax Line Mappings"},{"name":"Tax Lines"},{"name":"Team"},{"name":"Tiktok Shop"},{"name":"Timecards"},{"name":"Transaction Suggestions"},{"name":"Transactions"},{"name":"Tutorials"},{"name":"Users"},{"name":"Vendors"},{"name":"W9 Requests"},{"name":"Watch Tower"},{"name":"Webhooks"},{"name":"Wesley Chat"},{"name":"Workspace Search"},{"name":"Xero"}],"components":{"securitySchemes":{"personalApiKey":{"type":"http","scheme":"bearer","bearerFormat":"wsy_user_...","description":"Personal API key. Executes as its owner with their current permissions; never send the key in a URL."},"sessionCookie":{"type":"apiKey","in":"cookie","name":"__session","description":"Interactive Clerk browser session."},"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"basicAuth":{"type":"http","scheme":"basic","description":"Power BI Web connector credentials: username `wesley`, password set to the firm feed key."},"integrationKeyHeader":{"type":"apiKey","in":"header","name":"x-wesley-api-key","description":"Firm-scoped Wesley integration key."}},"schemas":{"DocumentSummary":{"type":"object","properties":{"id":{"type":"string","description":"Unique document identifier"},"name":{"type":"string"},"original_name":{"type":"string"},"folder_id":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"tags":{"type":"array","items":{"type":"string"}}}},"AnalyzeRequest":{"type":"object","required":["selectedDataSources"],"properties":{"prompt":{"type":["string","null"],"description":"Free-form request for the AI analysis workflow"},"templateId":{"type":["string","null"],"description":"Identifier of a saved AI template prompt"},"selectedDataSources":{"type":"array","items":{"type":"string"},"description":"Account and document identifiers that power the analysis"}}},"AnalyzeResponse":{"type":"object","properties":{"analysis":{"type":"string","description":"HTML or markdown string generated by the Gemini model"},"data_summary":{"type":"object","properties":{"accounts_analyzed":{"type":"integer"},"total_balance":{"type":"number"},"institutions":{"type":"array","items":{"type":"string"}},"transactions_analyzed":{"type":"integer"},"date_range":{"type":"string"}}}}}}},"paths":{"/api/transactions":{"get":{"operationId":"get_transactions","tags":["Transactions"],"summary":"Retrieve Transactions","description":"Retrieve Transactions.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `action_filter`, `activity_days`, `activity_unit`, `activity_value`, `actor_filters`, `all`, `amount_filter`, `amount_search`, `category_account_ids`, `class_ids`, `companyId`, `count_only`, ....\n\nSource handler: `pages/api/transactions.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"x-wesley-response-contract":{"kind":"collection","shouldIncludePagination":true,"shouldIncludeSummary":true,"agentGuidance":"Use summary/count/aggregate metadata before fetching list pages. Do not compute firm-wide totals by reading all raw rows when a summary endpoint or summary parameter exists."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"action_filter","in":"query","required":false,"description":"Action Filter filter or option.","schema":{"type":"string","description":"Action Filter filter or option."}},{"name":"activity_days","in":"query","required":false,"description":"Activity Days filter or option.","schema":{"type":"string","description":"Activity Days filter or option."}},{"name":"activity_unit","in":"query","required":false,"description":"Activity Unit filter or option.","schema":{"type":"string","description":"Activity Unit filter or option."}},{"name":"activity_value","in":"query","required":false,"description":"Activity Value filter or option.","schema":{"type":"string","description":"Activity Value filter or option."}},{"name":"actor_filters","in":"query","required":false,"description":"Actor Filters filter or option.","schema":{"type":"string","description":"Actor Filters filter or option."}},{"name":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All filter or option."}},{"name":"amount_filter","in":"query","required":false,"description":"Amount Filter filter or option.","schema":{"type":"string","description":"Amount Filter filter or option."}},{"name":"amount_search","in":"query","required":false,"description":"Amount Search filter or option.","schema":{"type":"string","description":"Amount Search filter or option."}},{"name":"category_account_ids","in":"query","required":false,"description":"Category Account Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Category Account Ids. Use identifiers returned by Wesley."}},{"name":"class_ids","in":"query","required":false,"description":"Class Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Class Ids. Use identifiers returned by Wesley."}},{"name":"count_only","in":"query","required":false,"description":"Count Only filter or option.","schema":{"type":"string","description":"Count Only filter or option."}},{"name":"cursor","in":"query","required":false,"description":"Cursor filter or option.","schema":{"type":"string","description":"Cursor filter or option."}},{"name":"customer_ids","in":"query","required":false,"description":"Customer Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Customer Ids. Use identifiers returned by Wesley."}},{"name":"date_basis","in":"query","required":false,"description":"Date Basis filter or option.","schema":{"type":"string","description":"Date Basis filter or option."}},{"name":"debug_logs","in":"query","required":false,"description":"Debug Logs filter or option.","schema":{"type":"string","description":"Debug Logs filter or option."}},{"name":"disable_pagination","in":"query","required":false,"description":"Disable Pagination filter or option.","schema":{"type":"string","description":"Disable Pagination filter or option."}},{"name":"document_export_bundle","in":"query","required":false,"description":"Document Export Bundle filter or option.","schema":{"type":"string","description":"Document Export Bundle filter or option."}},{"name":"document_export_mode","in":"query","required":false,"description":"Document Export Mode filter or option.","schema":{"type":"string","description":"Document Export Mode filter or option."}},{"name":"employee_ids","in":"query","required":false,"description":"Employee Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Employee Ids. Use identifiers returned by Wesley."}},{"name":"end_date","in":"query","required":false,"description":"End Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"End Date in YYYY-MM-DD format."}},{"name":"experimental_suggestion_job_id","in":"query","required":false,"description":"Experimental Suggestion Job Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Experimental Suggestion Job Id. Use an identifier returned by Wesley."}},{"name":"experimental_suggestion_read_only","in":"query","required":false,"description":"Experimental Suggestion Read Only filter or option.","schema":{"type":"string","description":"Experimental Suggestion Read Only filter or option."}},{"name":"export","in":"query","required":false,"description":"Export filter or option.","schema":{"type":"string","description":"Export filter or option."}},{"name":"export_csv","in":"query","required":false,"description":"Export Csv filter or option.","schema":{"type":"string","description":"Export Csv filter or option."}},{"name":"export_source","in":"query","required":false,"description":"Export Source filter or option.","schema":{"type":"string","description":"Export Source filter or option."}},{"name":"external_transaction_id","in":"query","required":false,"description":"External Transaction Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"External Transaction Id. Use an identifier returned by Wesley."}},{"name":"external_transaction_ids","in":"query","required":false,"description":"External Transaction Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"External Transaction Ids. Use identifiers returned by Wesley."}},{"name":"group_by","in":"query","required":false,"description":"Group By filter or option.","schema":{"type":"string","description":"Group By filter or option."}},{"name":"group_key","in":"query","required":false,"description":"Group Key filter or option.","schema":{"type":"string","description":"Group Key filter or option."}},{"name":"include_book_balance","in":"query","required":false,"description":"Include Book Balance flag.","schema":{"type":"boolean","description":"Include Book Balance flag."}},{"name":"include_duplicate_candidates","in":"query","required":false,"description":"Include Duplicate Candidates flag.","schema":{"type":"boolean","description":"Include Duplicate Candidates flag."}},{"name":"include_ledger_only","in":"query","required":false,"description":"Include Ledger Only flag.","schema":{"type":"boolean","description":"Include Ledger Only flag."}},{"name":"include_marked_duplicates","in":"query","required":false,"description":"Include Marked Duplicates flag.","schema":{"type":"boolean","description":"Include Marked Duplicates flag."}},{"name":"include_reconciliation_status","in":"query","required":false,"description":"Include Reconciliation Status flag.","schema":{"type":"boolean","description":"Include Reconciliation Status flag."}},{"name":"include_suggestions","in":"query","required":false,"description":"Include Suggestions flag.","schema":{"type":"boolean","description":"Include Suggestions flag."}},{"name":"include_total_count","in":"query","required":false,"description":"Include Total Count flag.","schema":{"type":"boolean","description":"Include Total Count flag."}},{"name":"location_ids","in":"query","required":false,"description":"Location Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Location Ids. Use identifiers returned by Wesley."}},{"name":"offset","in":"query","required":false,"description":"Offset filter or option.","schema":{"type":"integer","description":"Offset filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"page_size","in":"query","required":false,"description":"Page Size filter or option.","schema":{"type":"integer","description":"Page Size filter or option."}},{"name":"project_ids","in":"query","required":false,"description":"Project Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Project Ids. Use identifiers returned by Wesley."}},{"name":"recent_activity_only","in":"query","required":false,"description":"Recent Activity Only filter or option.","schema":{"type":"string","description":"Recent Activity Only filter or option."}},{"name":"recommendation_path","in":"query","required":false,"description":"Recommendation Path filter or option.","schema":{"type":"string","description":"Recommendation Path filter or option."}},{"name":"reconciliation_filter","in":"query","required":false,"description":"Reconciliation Filter filter or option.","schema":{"type":"string","description":"Reconciliation Filter filter or option."}},{"name":"reference_max","in":"query","required":false,"description":"Reference Max filter or option.","schema":{"type":"string","description":"Reference Max filter or option."}},{"name":"reference_min","in":"query","required":false,"description":"Reference Min filter or option.","schema":{"type":"string","description":"Reference Min filter or option."}},{"name":"request_purpose","in":"query","required":false,"description":"Request Purpose filter or option.","schema":{"type":"string","description":"Request Purpose filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"search_field","in":"query","required":false,"description":"Search Field filter or option.","schema":{"type":"string","description":"Search Field filter or option."}},{"name":"sort_direction","in":"query","required":false,"description":"Sort Direction filter or option.","schema":{"type":"string","description":"Sort Direction filter or option."}},{"name":"sort_field","in":"query","required":false,"description":"Sort Field filter or option.","schema":{"type":"string","description":"Sort Field filter or option."}},{"name":"source_group","in":"query","required":false,"description":"Source Group filter or option.","schema":{"type":"string","description":"Source Group filter or option."}},{"name":"source_groups","in":"query","required":false,"description":"Source Groups filter or option.","schema":{"type":"string","description":"Source Groups filter or option."}},{"name":"start_date","in":"query","required":false,"description":"Start Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Start Date in YYYY-MM-DD format."}},{"name":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}},{"name":"suggestion_sources","in":"query","required":false,"description":"Suggestion Sources filter or option.","schema":{"type":"string","description":"Suggestion Sources filter or option."}},{"name":"transaction_type_filters","in":"query","required":false,"description":"Transaction Type Filters filter or option.","schema":{"type":"string","description":"Transaction Type Filters filter or option."}},{"name":"vendor_ids","in":"query","required":false,"description":"Vendor Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Vendor Ids. Use identifiers returned by Wesley."}}]}},"/api/transactions/bulk-suggestions":{"post":{"operationId":"post_transactions_bulk_suggestions","tags":["Transactions"],"summary":"Generate Transactions Bulk Suggestions","description":"Generate Transactions Bulk Suggestions.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nBulk operation that can affect multiple records in one request.\n\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/transactions/bulk-suggestions.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/transactions/bulk-suggestions-flash":{"post":{"operationId":"post_transactions_bulk_suggestions_flash","tags":["Transactions"],"summary":"Generate Transactions Bulk Suggestions Flash","description":"Generate Transactions Bulk Suggestions Flash.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nBulk operation that can affect multiple records in one request.\n\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/transactions/bulk-suggestions-flash.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/transactions/decision-board":{"post":{"operationId":"post_transactions_decision_board","tags":["Transactions"],"summary":"Execute Transactions Decision Board","description":"Execute Transactions Decision Board.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nSource handler: `pages/api/transactions/decision-board.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/transactions/duplicate-count":{"get":{"operationId":"get_transactions_duplicate_count","tags":["Transactions"],"summary":"Get Transactions Duplicate Count","description":"Get Transactions Duplicate Count.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCommon query parameters: `end_date`, `start_date`.\n\nSource handler: `pages/api/transactions/duplicate-count.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"end_date","in":"query","required":false,"description":"End Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"End Date in YYYY-MM-DD format."}},{"name":"start_date","in":"query","required":false,"description":"Start Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Start Date in YYYY-MM-DD format."}}]}},"/api/transactions/external-accounts":{"get":{"operationId":"get_transactions_external_accounts","tags":["Transactions"],"summary":"Get Transactions External Accounts","description":"Get Transactions External Accounts.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCommon query parameters: `includeCategorizedCount`, `includeHiddenLinked`, `includeTransactionCount`, `include_hidden_linked`, `search`, `skipActivity`, `skip_activity`, `view`.\n\nSource handler: `pages/api/transactions/external-accounts.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"includeCategorizedCount","in":"query","required":false,"description":"IncludeCategorizedCount flag.","schema":{"type":"boolean","description":"IncludeCategorizedCount flag."}},{"name":"includeHiddenLinked","in":"query","required":false,"description":"IncludeHiddenLinked flag.","schema":{"type":"boolean","description":"IncludeHiddenLinked flag."}},{"name":"includeTransactionCount","in":"query","required":false,"description":"IncludeTransactionCount flag.","schema":{"type":"boolean","description":"IncludeTransactionCount flag."}},{"name":"include_hidden_linked","in":"query","required":false,"description":"Include Hidden Linked flag.","schema":{"type":"boolean","description":"Include Hidden Linked flag."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"skipActivity","in":"query","required":false,"description":"SkipActivity flag.","schema":{"type":"boolean","description":"SkipActivity flag."}},{"name":"skip_activity","in":"query","required":false,"description":"Skip Activity flag.","schema":{"type":"boolean","description":"Skip Activity flag."}},{"name":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]}},"/api/transactions/outstanding-checks":{"get":{"operationId":"get_transactions_outstanding_checks","tags":["Transactions"],"summary":"Retrieve Transactions Outstanding Checks","description":"Retrieve Transactions Outstanding Checks.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `accountId`, `account_id`, `all`, `end_date`, `start_date`.\n\nSource handler: `pages/api/transactions/outstanding-checks.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"x-wesley-response-contract":{"kind":"collection","shouldIncludePagination":true,"shouldIncludeSummary":true,"agentGuidance":"Use summary/count/aggregate metadata before fetching list pages. Do not compute firm-wide totals by reading all raw rows when a summary endpoint or summary parameter exists."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"accountId","in":"query","required":false,"description":"AccountId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountId. Use an identifier returned by Wesley."}},{"name":"account_id","in":"query","required":false,"description":"Account Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Account Id. Use an identifier returned by Wesley."}},{"name":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All filter or option."}},{"name":"end_date","in":"query","required":false,"description":"End Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"End Date in YYYY-MM-DD format."}},{"name":"start_date","in":"query","required":false,"description":"Start Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Start Date in YYYY-MM-DD format."}}]}},"/api/transactions/pending-count":{"get":{"operationId":"get_transactions_pending_count","tags":["Transactions"],"summary":"Get Transactions Pending Count","description":"Get Transactions Pending Count.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCommon query parameters: `includeWorkflow`.\n\nSource handler: `pages/api/transactions/pending-count.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"includeWorkflow","in":"query","required":false,"description":"IncludeWorkflow flag.","schema":{"type":"boolean","description":"IncludeWorkflow flag."}}]}},"/api/transactions/pending-outside-period-count":{"get":{"operationId":"get_transactions_pending_outside_period_count","tags":["Transactions"],"summary":"Get Transactions Pending Outside Period Count","description":"Get Transactions Pending Outside Period Count.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCommon query parameters: `end_date`, `source_group`, `start_date`.\n\nSource handler: `pages/api/transactions/pending-outside-period-count.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"end_date","in":"query","required":false,"description":"End Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"End Date in YYYY-MM-DD format."}},{"name":"source_group","in":"query","required":false,"description":"Source Group filter or option.","schema":{"type":"string","description":"Source Group filter or option."}},{"name":"start_date","in":"query","required":false,"description":"Start Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Start Date in YYYY-MM-DD format."}}]}},"/api/transactions/review-account-dates":{"get":{"operationId":"get_transactions_review_account_dates","tags":["Transactions"],"summary":"Get Transactions Review Account Dates","description":"Get Transactions Review Account Dates.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCommon query parameters: `accountId`, `today`.\n\nSource handler: `pages/api/transactions/review-account-dates.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"accountId","in":"query","required":false,"description":"AccountId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountId. Use an identifier returned by Wesley."}},{"name":"today","in":"query","required":false,"description":"Today filter or option.","schema":{"type":"string","description":"Today filter or option."}}]},"patch":{"operationId":"patch_transactions_review_account_dates","tags":["Transactions"],"summary":"Update Transactions Review Account Dates","description":"Update Transactions Review Account Dates.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCommon query parameters: `accountId`, `today`.\n\nSource handler: `pages/api/transactions/review-account-dates.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"accountId","in":"query","required":false,"description":"AccountId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountId. Use an identifier returned by Wesley."}},{"name":"today","in":"query","required":false,"description":"Today filter or option.","schema":{"type":"string","description":"Today filter or option."}}]}},"/api/transactions/source-group-account":{"patch":{"operationId":"patch_transactions_source_group_account","tags":["Transactions"],"summary":"Update Transactions Source Group Account","description":"Update Transactions Source Group Account.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nJSON body keys used by this method: `accountId`, `account_id`, `sourceGroup`, `source_group`.\n\nSource handler: `pages/api/transactions/source-group-account.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `accountId`, `account_id`, `sourceGroup`, `source_group`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","description":"AccountId. Use an identifier returned by Wesley."},"account_id":{"type":"string","description":"Account Id. Use an identifier returned by Wesley."},"sourceGroup":{"type":"string","description":"SourceGroup payload field."},"source_group":{"type":"string","description":"Source Group payload field."}},"additionalProperties":true}}}}}},"/api/transactions/summary":{"get":{"operationId":"get_transactions_summary","tags":["Transactions"],"summary":"Get Transactions Summary","description":"Get Transactions Summary.\n\nRequires authenticated user context.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nRequires company context. Provide one of: header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCommon query parameters: `bucketLimit`, `endDate`, `end_date`, `source`, `startDate`, `start_date`, `status`, `statuses`, `transactionType`, `transaction_type`.\n\nSource handler: `pages/api/transactions/summary.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[{"sessionCookie":[]},{"personalApiKey":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":true,"x-wesley-required-context":{"company_id":true,"description":"Supply company_id to the MCP tool; it is sent as x-company-id."},"parameters":[{"name":"x-company-id","in":"header","required":false,"description":"Company context UUID. Required when this operation declares required company context.","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"Company context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_id","in":"query","required":false,"description":"Company context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"bucketLimit","in":"query","required":false,"description":"BucketLimit filter or option.","schema":{"type":"string","description":"BucketLimit filter or option."}},{"name":"endDate","in":"query","required":false,"description":"EndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"EndDate in YYYY-MM-DD format."}},{"name":"end_date","in":"query","required":false,"description":"End Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"End Date in YYYY-MM-DD format."}},{"name":"source","in":"query","required":false,"description":"Source filter or option.","schema":{"type":"string","description":"Source filter or option."}},{"name":"startDate","in":"query","required":false,"description":"StartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}},{"name":"start_date","in":"query","required":false,"description":"Start Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Start Date in YYYY-MM-DD format."}},{"name":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}},{"name":"statuses","in":"query","required":false,"description":"Statuses filter or option.","schema":{"type":"string","description":"Statuses filter or option."}},{"name":"transactionType","in":"query","required":false,"description":"TransactionType filter or option.","schema":{"type":"string","description":"TransactionType filter or option."}},{"name":"transaction_type","in":"query","required":false,"description":"Transaction Type filter or option.","schema":{"type":"string","description":"Transaction Type filter or option."}}]}}}}