{"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/account-types":{"get":{"operationId":"get_account_types","tags":["Account Types"],"summary":"Get Account Types","description":"Get Account Types.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/account-types.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/accounting-firms/account-group-template-clients":{"get":{"operationId":"get_accounting_firms_account_group_template_clients","tags":["Accounting Firms"],"summary":"Get Accounting Firms Account Group Template Clients","description":"Get Accounting Firms Account Group Template Clients.\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\nCommon query parameters: `templateId`.\n\nSource handler: `pages/api/accounting-firms/account-group-template-clients.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,"parameters":[{"name":"templateId","in":"query","required":false,"description":"TemplateId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"TemplateId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_account_group_template_clients","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Account Group Template Clients","description":"Execute Accounting Firms Account Group Template Clients.\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\nCommon query parameters: `templateId`.\n\nSource handler: `pages/api/accounting-firms/account-group-template-clients.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,"parameters":[{"name":"templateId","in":"query","required":false,"description":"TemplateId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"TemplateId. Use an identifier returned by Wesley."}}]}},"/api/accounting-firms/account-group-templates":{"get":{"operationId":"get_accounting_firms_account_group_templates","tags":["Accounting Firms"],"summary":"Get Accounting Firms Account Group Templates","description":"Get Accounting Firms Account Group Templates.\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\nCommon query parameters: `id`.\n\nSource handler: `pages/api/accounting-firms/account-group-templates.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,"parameters":[{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_account_group_templates","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Account Group Templates","description":"Execute Accounting Firms Account Group Templates.\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\nJSON body keys used by this method: `action`, `companyId`, `groups`, `name`.\n\nCommon query parameters: `id`.\n\nSource handler: `pages/api/accounting-firms/account-group-templates.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,"parameters":[{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `companyId`, `groups`, `name`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"groups":{"type":"string","description":"Groups payload field."},"name":{"type":"string","description":"Name payload field."}},"additionalProperties":true}}}}}},"/api/accounting-firms/account-groups":{"get":{"operationId":"get_accounting_firms_account_groups","tags":["Accounting Firms"],"summary":"Get Accounting Firms Account Groups","description":"Get Accounting Firms Account Groups.\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\nCommon query parameters: `companyId`, `id`.\n\nSource handler: `pages/api/accounting-firms/account-groups.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_account_groups","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Account Groups","description":"Execute Accounting Firms Account Groups.\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\nJSON body keys used by this method: `action`, `templateContext`.\n\nCommon query parameters: `companyId`, `id`.\n\nSource handler: `pages/api/accounting-firms/account-groups.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `templateContext`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"templateContext":{"type":"string","description":"TemplateContext payload field."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_accounting_firms_account_groups","tags":["Accounting Firms"],"summary":"Update Accounting Firms Account Groups","description":"Update Accounting Firms Account Groups.\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\nJSON body keys used by this method: `action`, `templateContext`.\n\nCommon query parameters: `companyId`, `id`.\n\nSource handler: `pages/api/accounting-firms/account-groups.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `templateContext`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"templateContext":{"type":"string","description":"TemplateContext payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_accounting_firms_account_groups","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Account Groups","description":"Delete Accounting Firms Account Groups.\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\nJSON body keys used by this method: `action`, `templateContext`.\n\nCommon query parameters: `companyId`, `id`.\n\nSource handler: `pages/api/accounting-firms/account-groups.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `templateContext`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"templateContext":{"type":"string","description":"TemplateContext payload field."}},"additionalProperties":true}}}}}},"/api/accounting-firms/account-organization-template":{"get":{"operationId":"get_accounting_firms_account_organization_template","tags":["Accounting Firms"],"summary":"Get Accounting Firms Account Organization Template","description":"Get Accounting Firms Account Organization Template.\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\nSource handler: `pages/api/accounting-firms/account-organization-template.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},"post":{"operationId":"post_accounting_firms_account_organization_template","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Account Organization Template","description":"Execute Accounting Firms Account Organization Template.\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\nJSON body keys used by this method: `action`.\n\nSource handler: `pages/api/accounting-firms/account-organization-template.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."}},"additionalProperties":true}}}}}},"/api/accounting-firms/asset-upload-token":{"post":{"operationId":"post_accounting_firms_asset_upload_token","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Asset Upload Token","description":"Execute Accounting Firms Asset Upload Token.\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\nSource handler: `pages/api/accounting-firms/asset-upload-token.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}},"/api/accounting-firms/assets":{"get":{"operationId":"get_accounting_firms_assets","tags":["Accounting Firms"],"summary":"Get Accounting Firms Assets","description":"Get Accounting Firms Assets.\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\nSource handler: `pages/api/accounting-firms/assets.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},"post":{"operationId":"post_accounting_firms_assets","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Assets","description":"Execute Accounting Firms Assets.\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\nJSON body keys used by this method: `fileSizeBytes`, `mimeType`, `name`, `url`.\n\nSource handler: `pages/api/accounting-firms/assets.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `fileSizeBytes`, `mimeType`, `name`, `url`.","content":{"application/json":{"schema":{"type":"object","properties":{"fileSizeBytes":{"type":"string","description":"FileSizeBytes payload field."},"mimeType":{"type":"string","description":"MimeType payload field."},"name":{"type":"string","description":"Name payload field."},"url":{"type":"string","description":"Url payload field."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_accounting_firms_assets","tags":["Accounting Firms"],"summary":"Update Accounting Firms Assets","description":"Update Accounting Firms Assets.\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\nJSON body keys used by this method: `fileSizeBytes`, `mimeType`, `name`, `url`.\n\nSource handler: `pages/api/accounting-firms/assets.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `fileSizeBytes`, `mimeType`, `name`, `url`.","content":{"application/json":{"schema":{"type":"object","properties":{"fileSizeBytes":{"type":"string","description":"FileSizeBytes payload field."},"mimeType":{"type":"string","description":"MimeType payload field."},"name":{"type":"string","description":"Name payload field."},"url":{"type":"string","description":"Url payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_accounting_firms_assets","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Assets","description":"Delete Accounting Firms Assets.\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\nJSON body keys used by this method: `fileSizeBytes`, `mimeType`, `name`, `url`.\n\nSource handler: `pages/api/accounting-firms/assets.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `fileSizeBytes`, `mimeType`, `name`, `url`.","content":{"application/json":{"schema":{"type":"object","properties":{"fileSizeBytes":{"type":"string","description":"FileSizeBytes payload field."},"mimeType":{"type":"string","description":"MimeType payload field."},"name":{"type":"string","description":"Name payload field."},"url":{"type":"string","description":"Url payload field."}},"additionalProperties":true}}}}}},"/api/accounting-firms/billing":{"get":{"operationId":"get_accounting_firms_billing","tags":["Accounting Firms"],"summary":"Get Accounting Firms Billing","description":"Get Accounting Firms Billing.\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\nCommon query parameters: `view`.\n\nSource handler: `pages/api/accounting-firms/billing/index.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,"parameters":[{"name":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]}},"/api/accounting-firms/billing/accept-sales-offer":{"post":{"operationId":"post_accounting_firms_billing_accept_sales_offer","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Billing Accept Sales Offer","description":"Execute Accounting Firms Billing Accept Sales Offer.\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\nSource handler: `pages/api/accounting-firms/billing/accept-sales-offer.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}},"/api/accounting-firms/billing/create-checkout-session":{"post":{"operationId":"post_accounting_firms_billing_create_checkout_session","tags":["Accounting Firms"],"summary":"Create Accounting Firms Billing Create Checkout Session","description":"Create Accounting Firms Billing Create Checkout Session.\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\nJSON body keys used by this method: `billingPeriod`, `endTrial`, `planCode`, `seatQuantity`, `skipTrial`.\n\nSource handler: `pages/api/accounting-firms/billing/create-checkout-session.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `billingPeriod`, `endTrial`, `planCode`, `seatQuantity`, `skipTrial`.","content":{"application/json":{"schema":{"type":"object","properties":{"billingPeriod":{"type":"string","description":"BillingPeriod payload field."},"endTrial":{"type":"string","description":"EndTrial payload field."},"planCode":{"type":"string","description":"PlanCode payload field."},"seatQuantity":{"type":"string","description":"SeatQuantity payload field."},"skipTrial":{"type":"boolean","description":"SkipTrial flag."}},"additionalProperties":true}}}}}},"/api/accounting-firms/billing/create-credit-checkout-session":{"post":{"operationId":"post_accounting_firms_billing_create_credit_checkout_session","tags":["Accounting Firms"],"summary":"Create Accounting Firms Billing Create Credit Checkout Session","description":"Create Accounting Firms Billing Create Credit Checkout Session.\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\nJSON body keys used by this method: `packageCode`.\n\nSource handler: `pages/api/accounting-firms/billing/create-credit-checkout-session.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `packageCode`.","content":{"application/json":{"schema":{"type":"object","properties":{"packageCode":{"type":"string","description":"PackageCode payload field."}},"additionalProperties":true}}}}}},"/api/accounting-firms/billing/end-trial":{"post":{"operationId":"post_accounting_firms_billing_end_trial","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Billing End Trial","description":"Execute Accounting Firms Billing End Trial.\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\nSource handler: `pages/api/accounting-firms/billing/end-trial.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}},"/api/accounting-firms/billing/manage-subscription":{"post":{"operationId":"post_accounting_firms_billing_manage_subscription","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Billing Manage Subscription","description":"Execute Accounting Firms Billing Manage Subscription.\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\nSource handler: `pages/api/accounting-firms/billing/manage-subscription.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}},"/api/accounting-firms/billing/webhook":{"post":{"operationId":"post_accounting_firms_billing_webhook","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Billing Webhook","description":"Execute Accounting Firms Billing Webhook.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/accounting-firms/billing/webhook.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/accounting-firms/bookkeeping-pace":{"get":{"operationId":"get_accounting_firms_bookkeeping_pace","tags":["Accounting Firms"],"summary":"Get Accounting Firms Bookkeeping Pace","description":"Get Accounting Firms Bookkeeping Pace.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/accounting-firms/bookkeeping-pace.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]},"put":{"operationId":"put_accounting_firms_bookkeeping_pace","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Bookkeeping Pace","description":"Replace Accounting Firms Bookkeeping Pace.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/accounting-firms/bookkeeping-pace.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/accounting-firms/client-groups":{"get":{"operationId":"get_accounting_firms_client_groups","tags":["Accounting Firms"],"summary":"Get Accounting Firms Client Groups","description":"Get Accounting Firms Client Groups.\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\nSource handler: `pages/api/accounting-firms/client-groups.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},"post":{"operationId":"post_accounting_firms_client_groups","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Client Groups","description":"Execute Accounting Firms Client Groups.\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\nSource handler: `pages/api/accounting-firms/client-groups.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},"put":{"operationId":"put_accounting_firms_client_groups","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Client Groups","description":"Replace Accounting Firms Client Groups.\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\nSource handler: `pages/api/accounting-firms/client-groups.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},"patch":{"operationId":"patch_accounting_firms_client_groups","tags":["Accounting Firms"],"summary":"Update Accounting Firms Client Groups","description":"Update Accounting Firms Client Groups.\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\nSource handler: `pages/api/accounting-firms/client-groups.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}},"/api/accounting-firms/client-lifecycle":{"get":{"operationId":"get_accounting_firms_client_lifecycle","tags":["Accounting Firms"],"summary":"Get Accounting Firms Client Lifecycle","description":"Get Accounting Firms Client Lifecycle.\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\nSource handler: `pages/api/accounting-firms/client-lifecycle.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},"post":{"operationId":"post_accounting_firms_client_lifecycle","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Client Lifecycle","description":"Execute Accounting Firms Client Lifecycle.\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\nSource handler: `pages/api/accounting-firms/client-lifecycle.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},"patch":{"operationId":"patch_accounting_firms_client_lifecycle","tags":["Accounting Firms"],"summary":"Update Accounting Firms Client Lifecycle","description":"Update Accounting Firms Client Lifecycle.\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\nSource handler: `pages/api/accounting-firms/client-lifecycle.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},"delete":{"operationId":"delete_accounting_firms_client_lifecycle","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Client Lifecycle","description":"Delete Accounting Firms Client Lifecycle.\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\nSource handler: `pages/api/accounting-firms/client-lifecycle.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}},"/api/accounting-firms/client-lifecycle-templates":{"post":{"operationId":"post_accounting_firms_client_lifecycle_templates","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Client Lifecycle Templates","description":"Execute Accounting Firms Client Lifecycle Templates.\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\nSource handler: `pages/api/accounting-firms/client-lifecycle-templates.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},"patch":{"operationId":"patch_accounting_firms_client_lifecycle_templates","tags":["Accounting Firms"],"summary":"Update Accounting Firms Client Lifecycle Templates","description":"Update Accounting Firms Client Lifecycle Templates.\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\nSource handler: `pages/api/accounting-firms/client-lifecycle-templates.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},"delete":{"operationId":"delete_accounting_firms_client_lifecycle_templates","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Client Lifecycle Templates","description":"Delete Accounting Firms Client Lifecycle Templates.\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\nSource handler: `pages/api/accounting-firms/client-lifecycle-templates.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}},"/api/accounting-firms/client-payments":{"get":{"operationId":"get_accounting_firms_client_payments","tags":["Accounting Firms"],"summary":"Get Accounting Firms Client Payments","description":"Get Accounting Firms Client Payments.\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\nSource handler: `pages/api/accounting-firms/client-payments/index.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}},"/api/accounting-firms/client-payments/customers":{"get":{"operationId":"get_accounting_firms_client_payments_customers","tags":["Accounting Firms"],"summary":"Get Accounting Firms Client Payments Customers","description":"Get Accounting Firms Client Payments Customers.\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\nSource handler: `pages/api/accounting-firms/client-payments/customers.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},"post":{"operationId":"post_accounting_firms_client_payments_customers","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Client Payments Customers","description":"Execute Accounting Firms Client Payments Customers.\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\nSource handler: `pages/api/accounting-firms/client-payments/customers.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}},"/api/accounting-firms/client-payments/invoices":{"post":{"operationId":"post_accounting_firms_client_payments_invoices","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Client Payments Invoices","description":"Execute Accounting Firms Client Payments Invoices.\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\nSource handler: `pages/api/accounting-firms/client-payments/invoices.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}},"/api/accounting-firms/client-payments/stripe-customers":{"get":{"operationId":"get_accounting_firms_client_payments_stripe_customers","tags":["Accounting Firms"],"summary":"Get Accounting Firms Client Payments Stripe Customers","description":"Get Accounting Firms Client Payments Stripe Customers.\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\nCommon query parameters: `startingAfter`.\n\nSource handler: `pages/api/accounting-firms/client-payments/stripe-customers.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,"parameters":[{"name":"startingAfter","in":"query","required":false,"description":"StartingAfter filter or option.","schema":{"type":"string","description":"StartingAfter filter or option."}}]},"post":{"operationId":"post_accounting_firms_client_payments_stripe_customers","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Client Payments Stripe Customers","description":"Execute Accounting Firms Client Payments Stripe Customers.\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\nCommon query parameters: `startingAfter`.\n\nSource handler: `pages/api/accounting-firms/client-payments/stripe-customers.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,"parameters":[{"name":"startingAfter","in":"query","required":false,"description":"StartingAfter filter or option.","schema":{"type":"string","description":"StartingAfter filter or option."}}]}},"/api/accounting-firms/client-payments/stripe/callback":{"get":{"operationId":"get_accounting_firms_client_payments_stripe_callback","tags":["Accounting Firms"],"summary":"Get Accounting Firms Client Payments Stripe Callback","description":"Get Accounting Firms Client Payments Stripe Callback.\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\nCommon query parameters: `code`, `error`, `state`.\n\nSource handler: `pages/api/accounting-firms/client-payments/stripe/callback.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,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/accounting-firms/client-payments/stripe/connect":{"post":{"operationId":"post_accounting_firms_client_payments_stripe_connect","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Client Payments Stripe Connect","description":"Execute Accounting Firms Client Payments Stripe Connect.\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\nSource handler: `pages/api/accounting-firms/client-payments/stripe/connect.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}},"/api/accounting-firms/client-payments/subscriptions":{"post":{"operationId":"post_accounting_firms_client_payments_subscriptions","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Client Payments Subscriptions","description":"Execute Accounting Firms Client Payments Subscriptions.\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\nSource handler: `pages/api/accounting-firms/client-payments/subscriptions.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}},"/api/accounting-firms/clients":{"get":{"operationId":"get_accounting_firms_clients","tags":["Accounting Firms"],"summary":"Get Accounting Firms Clients","description":"Get Accounting Firms Clients.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nCommon query parameters: `assigned_memberships`, `assigned_to_me`, `bank_feed_through`, `bank_feed_through_gte`, `company_scope`, `docs_to_review_only`, `include_integrations`, `include_journal_counts`, `include_metrics`, `include_reconciliation`, `include_reconciliation_progress`, `include_team_summary`, ....\n\nSource handler: `pages/api/accounting-firms/clients.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"assigned_memberships","in":"query","required":false,"description":"Assigned Memberships filter or option.","schema":{"type":"string","description":"Assigned Memberships filter or option."}},{"name":"assigned_to_me","in":"query","required":false,"description":"Assigned To Me filter or option.","schema":{"type":"string","description":"Assigned To Me filter or option."}},{"name":"bank_feed_through","in":"query","required":false,"description":"Bank Feed Through filter or option.","schema":{"type":"string","description":"Bank Feed Through filter or option."}},{"name":"bank_feed_through_gte","in":"query","required":false,"description":"Bank Feed Through Gte filter or option.","schema":{"type":"string","description":"Bank Feed Through Gte filter or option."}},{"name":"company_scope","in":"query","required":false,"description":"Company Scope filter or option.","schema":{"type":"string","description":"Company Scope filter or option."}},{"name":"docs_to_review_only","in":"query","required":false,"description":"Docs To Review Only filter or option.","schema":{"type":"string","description":"Docs To Review Only filter or option."}},{"name":"include_integrations","in":"query","required":false,"description":"Include Integrations flag.","schema":{"type":"boolean","description":"Include Integrations flag."}},{"name":"include_journal_counts","in":"query","required":false,"description":"Include Journal Counts flag.","schema":{"type":"boolean","description":"Include Journal Counts flag."}},{"name":"include_metrics","in":"query","required":false,"description":"Include Metrics flag.","schema":{"type":"boolean","description":"Include Metrics flag."}},{"name":"include_reconciliation","in":"query","required":false,"description":"Include Reconciliation flag.","schema":{"type":"boolean","description":"Include Reconciliation flag."}},{"name":"include_reconciliation_progress","in":"query","required":false,"description":"Include Reconciliation Progress flag.","schema":{"type":"boolean","description":"Include Reconciliation Progress flag."}},{"name":"include_team_summary","in":"query","required":false,"description":"Include Team Summary flag.","schema":{"type":"boolean","description":"Include Team Summary flag."}},{"name":"industry","in":"query","required":false,"description":"Industry filter or option.","schema":{"type":"string","description":"Industry filter or option."}},{"name":"journal_through","in":"query","required":false,"description":"Journal Through filter or option.","schema":{"type":"string","description":"Journal Through filter or option."}},{"name":"journal_through_gte","in":"query","required":false,"description":"Journal Through Gte filter or option.","schema":{"type":"string","description":"Journal Through Gte filter or option."}},{"name":"metrics_scopes","in":"query","required":false,"description":"Metrics Scopes filter or option.","schema":{"type":"string","description":"Metrics Scopes filter or option."}},{"name":"no_bank_tx_since","in":"query","required":false,"description":"No Bank Tx Since filter or option.","schema":{"type":"string","description":"No Bank Tx Since filter or option."}},{"name":"no_bank_tx_start","in":"query","required":false,"description":"No Bank Tx Start filter or option.","schema":{"type":"string","description":"No Bank Tx Start filter or option."}},{"name":"no_journal_since","in":"query","required":false,"description":"No Journal Since filter or option.","schema":{"type":"string","description":"No Journal Since filter or option."}},{"name":"no_journal_start","in":"query","required":false,"description":"No Journal Start filter or option.","schema":{"type":"string","description":"No Journal Start 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":"pending_only","in":"query","required":false,"description":"Pending Only filter or option.","schema":{"type":"string","description":"Pending Only filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}},{"name":"summary_only","in":"query","required":false,"description":"Summary Only filter or option.","schema":{"type":"string","description":"Summary Only filter or option."}},{"name":"tasks_open_only","in":"query","required":false,"description":"Tasks Open Only filter or option.","schema":{"type":"string","description":"Tasks Open Only filter or option."}},{"name":"tax_season_status","in":"query","required":false,"description":"Tax Season Status filter or option.","schema":{"type":"string","description":"Tax Season Status filter or option."}}]}},"/api/accounting-firms/clients-bulk-email":{"get":{"operationId":"get_accounting_firms_clients_bulk_email","tags":["Accounting Firms"],"summary":"Get Accounting Firms Clients Bulk Email","description":"Get Accounting Firms Clients Bulk Email.\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\nBulk operation that can affect multiple records in one request.\n\nCommon query parameters: `clientIds`.\n\nSource handler: `pages/api/accounting-firms/clients-bulk-email.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,"parameters":[{"name":"clientIds","in":"query","required":false,"description":"ClientIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"ClientIds. Use identifiers returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_clients_bulk_email","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Clients Bulk Email","description":"Execute Accounting Firms Clients Bulk Email.\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\nBulk operation that can affect multiple records in one request.\n\nCommon query parameters: `clientIds`.\n\nSource handler: `pages/api/accounting-firms/clients-bulk-email.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,"parameters":[{"name":"clientIds","in":"query","required":false,"description":"ClientIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"ClientIds. Use identifiers returned by Wesley."}}]}},"/api/accounting-firms/clients/{clientId}/assignments":{"get":{"operationId":"get_accounting_firms_clients_clientid_assignments","tags":["Accounting Firms"],"summary":"Get Accounting Firms Clients By ClientId Assignments","description":"Get Accounting Firms Clients By ClientId Assignments.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nCommon query parameters: `includeAuditContributors`.\n\nSource handler: `pages/api/accounting-firms/clients/[clientId]/assignments.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,"parameters":[{"name":"clientId","in":"path","required":true,"description":"Path identifier: clientId","schema":{"type":"string"}},{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"includeAuditContributors","in":"query","required":false,"description":"IncludeAuditContributors flag.","schema":{"type":"boolean","description":"IncludeAuditContributors flag."}}]},"put":{"operationId":"put_accounting_firms_clients_clientid_assignments","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Clients By ClientId Assignments","description":"Replace Accounting Firms Clients By ClientId Assignments.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nCommon query parameters: `includeAuditContributors`.\n\nSource handler: `pages/api/accounting-firms/clients/[clientId]/assignments.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,"parameters":[{"name":"clientId","in":"path","required":true,"description":"Path identifier: clientId","schema":{"type":"string"}},{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"includeAuditContributors","in":"query","required":false,"description":"IncludeAuditContributors flag.","schema":{"type":"boolean","description":"IncludeAuditContributors flag."}}]}},"/api/accounting-firms/clients/assignments/bulk":{"post":{"operationId":"post_accounting_firms_clients_assignments_bulk","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Clients Assignments Bulk","description":"Execute Accounting Firms Clients Assignments Bulk.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nBulk operation that can affect multiple records in one request.\n\nSource handler: `pages/api/accounting-firms/clients/assignments/bulk.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/accounting-firms/clients/external-activity":{"get":{"operationId":"get_accounting_firms_clients_external_activity","tags":["Accounting Firms"],"summary":"Get Accounting Firms Clients External Activity","description":"Get Accounting Firms Clients External Activity.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nCommon query parameters: `companyId`, `company_id`, `days`.\n\nSource handler: `pages/api/accounting-firms/clients/external-activity.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"company_id","in":"query","required":false,"description":"Company Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Company Id. Use an identifier returned by Wesley."}},{"name":"days","in":"query","required":false,"description":"Days filter or option.","schema":{"type":"string","description":"Days filter or option."}}]}},"/api/accounting-firms/clients/summary":{"get":{"operationId":"get_accounting_firms_clients_summary","tags":["Accounting Firms"],"summary":"Get Accounting Firms Clients Summary","description":"Get Accounting Firms Clients 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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nCommon query parameters: `bucketLimit`.\n\nSource handler: `pages/api/accounting-firms/clients/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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm 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."}}]}},"/api/accounting-firms/clients/through-activity":{"get":{"operationId":"get_accounting_firms_clients_through_activity","tags":["Accounting Firms"],"summary":"Get Accounting Firms Clients Through Activity","description":"Get Accounting Firms Clients Through Activity.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nCommon query parameters: `companyId`, `company_id`.\n\nSource handler: `pages/api/accounting-firms/clients/through-activity.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"company_id","in":"query","required":false,"description":"Company Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Company Id. Use an identifier returned by Wesley."}}]}},"/api/accounting-firms/close-workspace":{"get":{"operationId":"get_accounting_firms_close_workspace","tags":["Accounting Firms"],"summary":"Get Accounting Firms Close Workspace","description":"Get Accounting Firms Close Workspace.\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\nSource handler: `pages/api/accounting-firms/close-workspace.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}},"/api/accounting-firms/create":{"post":{"operationId":"post_accounting_firms_create","tags":["Accounting Firms"],"summary":"Create Accounting Firms Create","description":"Create Accounting Firms Create.\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\nJSON body keys used by this method: `description`, `name`.\n\nSource handler: `pages/api/accounting-firms/create.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `description`, `name`.","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","description":"Description payload field."},"name":{"type":"string","description":"Name payload field."}},"additionalProperties":true}}}}}},"/api/accounting-firms/custom-domains":{"get":{"operationId":"get_accounting_firms_custom_domains","tags":["Accounting Firms"],"summary":"Get Accounting Firms Custom Domains","description":"Get Accounting Firms Custom Domains.\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\nCommon query parameters: `target`.\n\nSource handler: `pages/api/accounting-firms/custom-domains.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,"parameters":[{"name":"target","in":"query","required":false,"description":"Target filter or option.","schema":{"type":"string","description":"Target filter or option."}}]},"post":{"operationId":"post_accounting_firms_custom_domains","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Custom Domains","description":"Execute Accounting Firms Custom Domains.\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\nJSON body keys used by this method: `hostname`, `target`.\n\nCommon query parameters: `target`.\n\nSource handler: `pages/api/accounting-firms/custom-domains.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,"parameters":[{"name":"target","in":"query","required":false,"description":"Target filter or option.","schema":{"type":"string","description":"Target filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `hostname`, `target`.","content":{"application/json":{"schema":{"type":"object","properties":{"hostname":{"type":"string","description":"Hostname payload field."},"target":{"type":"string","description":"Target payload field."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_accounting_firms_custom_domains","tags":["Accounting Firms"],"summary":"Update Accounting Firms Custom Domains","description":"Update Accounting Firms Custom Domains.\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\nJSON body keys used by this method: `hostname`, `target`.\n\nCommon query parameters: `target`.\n\nSource handler: `pages/api/accounting-firms/custom-domains.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,"parameters":[{"name":"target","in":"query","required":false,"description":"Target filter or option.","schema":{"type":"string","description":"Target filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `hostname`, `target`.","content":{"application/json":{"schema":{"type":"object","properties":{"hostname":{"type":"string","description":"Hostname payload field."},"target":{"type":"string","description":"Target payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_accounting_firms_custom_domains","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Custom Domains","description":"Delete Accounting Firms Custom Domains.\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\nJSON body keys used by this method: `hostname`, `target`.\n\nCommon query parameters: `target`.\n\nSource handler: `pages/api/accounting-firms/custom-domains.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,"parameters":[{"name":"target","in":"query","required":false,"description":"Target filter or option.","schema":{"type":"string","description":"Target filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `hostname`, `target`.","content":{"application/json":{"schema":{"type":"object","properties":{"hostname":{"type":"string","description":"Hostname payload field."},"target":{"type":"string","description":"Target payload field."}},"additionalProperties":true}}}}}},"/api/accounting-firms/delete":{"delete":{"operationId":"delete_accounting_firms_delete","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Delete","description":"Delete Accounting Firms Delete.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/accounting-firms/delete.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/accounting-firms/entity-groups":{"get":{"operationId":"get_accounting_firms_entity_groups","tags":["Accounting Firms"],"summary":"Get Accounting Firms Entity Groups","description":"Get Accounting Firms Entity Groups.\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\nCommon query parameters: `accountingFirmId`.\n\nSource handler: `pages/api/accounting-firms/entity-groups.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,"parameters":[{"name":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_entity_groups","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Entity Groups","description":"Execute Accounting Firms Entity Groups.\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\nJSON body keys used by this method: `accountingFirmId`, `config`.\n\nCommon query parameters: `accountingFirmId`.\n\nSource handler: `pages/api/accounting-firms/entity-groups.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,"parameters":[{"name":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `accountingFirmId`, `config`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountingFirmId":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."},"config":{"type":"string","description":"Config payload field."}},"additionalProperties":true}}}}}},"/api/accounting-firms/firm-ledger":{"get":{"operationId":"get_accounting_firms_firm_ledger","tags":["Accounting Firms"],"summary":"Get Accounting Firms Firm Ledger","description":"Get Accounting Firms Firm Ledger.\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\nSource handler: `pages/api/accounting-firms/firm-ledger.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},"post":{"operationId":"post_accounting_firms_firm_ledger","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Firm Ledger","description":"Execute Accounting Firms Firm Ledger.\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\nSource handler: `pages/api/accounting-firms/firm-ledger.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},"put":{"operationId":"put_accounting_firms_firm_ledger","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Firm Ledger","description":"Replace Accounting Firms Firm Ledger.\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\nSource handler: `pages/api/accounting-firms/firm-ledger.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}},"/api/accounting-firms/firm-vendors":{"get":{"operationId":"get_accounting_firms_firm_vendors","tags":["Accounting Firms"],"summary":"Get Accounting Firms Firm Vendors","description":"Get Accounting Firms Firm Vendors.\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\nCommon query parameters: `companyId`, `firmVendorId`, `mode`, `search`, `vendorId`.\n\nSource handler: `pages/api/accounting-firms/firm-vendors.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"firmVendorId","in":"query","required":false,"description":"FirmVendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"FirmVendorId. Use an identifier returned by Wesley."}},{"name":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"vendorId","in":"query","required":false,"description":"VendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_firm_vendors","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Firm Vendors","description":"Execute Accounting Firms Firm Vendors.\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\nCommon query parameters: `companyId`, `firmVendorId`, `mode`, `search`, `vendorId`.\n\nSource handler: `pages/api/accounting-firms/firm-vendors.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"firmVendorId","in":"query","required":false,"description":"FirmVendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"FirmVendorId. Use an identifier returned by Wesley."}},{"name":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"vendorId","in":"query","required":false,"description":"VendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."}}]}},"/api/accounting-firms/firm-vendors/w9-file":{"get":{"operationId":"get_accounting_firms_firm_vendors_w9_file","tags":["Accounting Firms"],"summary":"Get Accounting Firms Firm Vendors W9 File","description":"Get Accounting Firms Firm Vendors W9 File.\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\nCommon query parameters: `firmVendorId`.\n\nSource handler: `pages/api/accounting-firms/firm-vendors/w9-file.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,"parameters":[{"name":"firmVendorId","in":"query","required":false,"description":"FirmVendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"FirmVendorId. Use an identifier returned by Wesley."}}]}},"/api/accounting-firms/gmail/callback":{"get":{"operationId":"get_accounting_firms_gmail_callback","tags":["Accounting Firms"],"summary":"Get Accounting Firms Gmail Callback","description":"Get Accounting Firms Gmail Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `code`, `error`, `error_description`, `state`.\n\nSource handler: `pages/api/accounting-firms/gmail/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"error_description","in":"query","required":false,"description":"Error Description filter or option.","schema":{"type":"string","description":"Error Description filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/accounting-firms/gmail/connect":{"get":{"operationId":"get_accounting_firms_gmail_connect","tags":["Accounting Firms"],"summary":"Get Accounting Firms Gmail Connect","description":"Get Accounting Firms Gmail Connect.\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\nCommon query parameters: `confirm`, `returnTo`.\n\nSource handler: `pages/api/accounting-firms/gmail/connect.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,"parameters":[{"name":"confirm","in":"query","required":false,"description":"Confirm filter or option.","schema":{"type":"string","description":"Confirm filter or option."}},{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}}]}},"/api/accounting-firms/gmail/connection":{"get":{"operationId":"get_accounting_firms_gmail_connection","tags":["Accounting Firms"],"summary":"Get Accounting Firms Gmail Connection","description":"Get Accounting Firms Gmail Connection.\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\nSource handler: `pages/api/accounting-firms/gmail/connection.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},"delete":{"operationId":"delete_accounting_firms_gmail_connection","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Gmail Connection","description":"Delete Accounting Firms Gmail Connection.\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\nSource handler: `pages/api/accounting-firms/gmail/connection.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}},"/api/accounting-firms/gmail/send":{"post":{"operationId":"post_accounting_firms_gmail_send","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Gmail Send","description":"Execute Accounting Firms Gmail Send.\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\nSource handler: `pages/api/accounting-firms/gmail/send.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}},"/api/accounting-firms/gmail/sender-options":{"get":{"operationId":"get_accounting_firms_gmail_sender_options","tags":["Accounting Firms"],"summary":"Get Accounting Firms Gmail Sender Options","description":"Get Accounting Firms Gmail Sender Options.\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\nSource handler: `pages/api/accounting-firms/gmail/sender-options.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}},"/api/accounting-firms/integrations/assembly":{"get":{"operationId":"get_accounting_firms_integrations_assembly","tags":["Accounting Firms"],"summary":"Get Accounting Firms Integrations Assembly","description":"Get Accounting Firms Integrations Assembly.\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\nCommon query parameters: `companies`, `companyId`, `companyMappingId`, `ledgerPortalGrantId`, `mappingId`, `portalLinkId`.\n\nSource handler: `pages/api/accounting-firms/integrations/assembly.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,"parameters":[{"name":"companies","in":"query","required":false,"description":"Companies filter or option.","schema":{"type":"string","description":"Companies filter or option."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"companyMappingId","in":"query","required":false,"description":"CompanyMappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyMappingId. Use an identifier returned by Wesley."}},{"name":"ledgerPortalGrantId","in":"query","required":false,"description":"LedgerPortalGrantId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"LedgerPortalGrantId. Use an identifier returned by Wesley."}},{"name":"mappingId","in":"query","required":false,"description":"MappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"MappingId. Use an identifier returned by Wesley."}},{"name":"portalLinkId","in":"query","required":false,"description":"PortalLinkId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"PortalLinkId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_integrations_assembly","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Integrations Assembly","description":"Execute Accounting Firms Integrations Assembly.\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\nJSON body keys used by this method: `action`, `wesleyUserId`.\n\nCommon query parameters: `companies`, `companyId`, `companyMappingId`, `ledgerPortalGrantId`, `mappingId`, `portalLinkId`.\n\nSource handler: `pages/api/accounting-firms/integrations/assembly.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,"parameters":[{"name":"companies","in":"query","required":false,"description":"Companies filter or option.","schema":{"type":"string","description":"Companies filter or option."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"companyMappingId","in":"query","required":false,"description":"CompanyMappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyMappingId. Use an identifier returned by Wesley."}},{"name":"ledgerPortalGrantId","in":"query","required":false,"description":"LedgerPortalGrantId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"LedgerPortalGrantId. Use an identifier returned by Wesley."}},{"name":"mappingId","in":"query","required":false,"description":"MappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"MappingId. Use an identifier returned by Wesley."}},{"name":"portalLinkId","in":"query","required":false,"description":"PortalLinkId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"PortalLinkId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `wesleyUserId`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"wesleyUserId":{"type":"string","description":"WesleyUserId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"put":{"operationId":"put_accounting_firms_integrations_assembly","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Integrations Assembly","description":"Replace Accounting Firms Integrations Assembly.\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\nJSON body keys used by this method: `action`, `wesleyUserId`.\n\nCommon query parameters: `companies`, `companyId`, `companyMappingId`, `ledgerPortalGrantId`, `mappingId`, `portalLinkId`.\n\nSource handler: `pages/api/accounting-firms/integrations/assembly.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,"parameters":[{"name":"companies","in":"query","required":false,"description":"Companies filter or option.","schema":{"type":"string","description":"Companies filter or option."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"companyMappingId","in":"query","required":false,"description":"CompanyMappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyMappingId. Use an identifier returned by Wesley."}},{"name":"ledgerPortalGrantId","in":"query","required":false,"description":"LedgerPortalGrantId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"LedgerPortalGrantId. Use an identifier returned by Wesley."}},{"name":"mappingId","in":"query","required":false,"description":"MappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"MappingId. Use an identifier returned by Wesley."}},{"name":"portalLinkId","in":"query","required":false,"description":"PortalLinkId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"PortalLinkId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `wesleyUserId`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"wesleyUserId":{"type":"string","description":"WesleyUserId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_accounting_firms_integrations_assembly","tags":["Accounting Firms"],"summary":"Update Accounting Firms Integrations Assembly","description":"Update Accounting Firms Integrations Assembly.\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\nJSON body keys used by this method: `action`, `wesleyUserId`.\n\nCommon query parameters: `companies`, `companyId`, `companyMappingId`, `ledgerPortalGrantId`, `mappingId`, `portalLinkId`.\n\nSource handler: `pages/api/accounting-firms/integrations/assembly.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,"parameters":[{"name":"companies","in":"query","required":false,"description":"Companies filter or option.","schema":{"type":"string","description":"Companies filter or option."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"companyMappingId","in":"query","required":false,"description":"CompanyMappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyMappingId. Use an identifier returned by Wesley."}},{"name":"ledgerPortalGrantId","in":"query","required":false,"description":"LedgerPortalGrantId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"LedgerPortalGrantId. Use an identifier returned by Wesley."}},{"name":"mappingId","in":"query","required":false,"description":"MappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"MappingId. Use an identifier returned by Wesley."}},{"name":"portalLinkId","in":"query","required":false,"description":"PortalLinkId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"PortalLinkId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `wesleyUserId`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"wesleyUserId":{"type":"string","description":"WesleyUserId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_accounting_firms_integrations_assembly","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Integrations Assembly","description":"Delete Accounting Firms Integrations Assembly.\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\nJSON body keys used by this method: `action`, `wesleyUserId`.\n\nCommon query parameters: `companies`, `companyId`, `companyMappingId`, `ledgerPortalGrantId`, `mappingId`, `portalLinkId`.\n\nSource handler: `pages/api/accounting-firms/integrations/assembly.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,"parameters":[{"name":"companies","in":"query","required":false,"description":"Companies filter or option.","schema":{"type":"string","description":"Companies filter or option."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"companyMappingId","in":"query","required":false,"description":"CompanyMappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyMappingId. Use an identifier returned by Wesley."}},{"name":"ledgerPortalGrantId","in":"query","required":false,"description":"LedgerPortalGrantId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"LedgerPortalGrantId. Use an identifier returned by Wesley."}},{"name":"mappingId","in":"query","required":false,"description":"MappingId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"MappingId. Use an identifier returned by Wesley."}},{"name":"portalLinkId","in":"query","required":false,"description":"PortalLinkId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"PortalLinkId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `wesleyUserId`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"wesleyUserId":{"type":"string","description":"WesleyUserId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/accounting-firms/integrations/financial-cents":{"get":{"operationId":"get_accounting_firms_integrations_financial_cents","tags":["Accounting Firms"],"summary":"Get Accounting Firms Integrations Financial Cents","description":"Get Accounting Firms Integrations Financial Cents.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/financial-cents.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_integrations_financial_cents","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Integrations Financial Cents","description":"Execute Accounting Firms Integrations Financial Cents.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/financial-cents.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]},"put":{"operationId":"put_accounting_firms_integrations_financial_cents","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Integrations Financial Cents","description":"Replace Accounting Firms Integrations Financial Cents.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/financial-cents.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]},"delete":{"operationId":"delete_accounting_firms_integrations_financial_cents","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Integrations Financial Cents","description":"Delete Accounting Firms Integrations Financial Cents.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/financial-cents.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/accounting-firms/integrations/power-bi":{"get":{"operationId":"get_accounting_firms_integrations_power_bi","tags":["Accounting Firms"],"summary":"Get Accounting Firms Integrations Power Bi","description":"Get Accounting Firms Integrations Power Bi.\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\nSource handler: `pages/api/accounting-firms/integrations/power-bi.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},"post":{"operationId":"post_accounting_firms_integrations_power_bi","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Integrations Power Bi","description":"Execute Accounting Firms Integrations Power Bi.\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\nSource handler: `pages/api/accounting-firms/integrations/power-bi.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},"delete":{"operationId":"delete_accounting_firms_integrations_power_bi","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Integrations Power Bi","description":"Delete Accounting Firms Integrations Power Bi.\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\nSource handler: `pages/api/accounting-firms/integrations/power-bi.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}},"/api/accounting-firms/integrations/power-bi/callback":{"get":{"operationId":"get_accounting_firms_integrations_power_bi_callback","tags":["Accounting Firms"],"summary":"Get Accounting Firms Integrations Power Bi Callback","description":"Get Accounting Firms Integrations Power Bi Callback.\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\nCommon query parameters: `code`, `error`, `state`.\n\nSource handler: `pages/api/accounting-firms/integrations/power-bi/callback.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,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/accounting-firms/integrations/power-bi/connect":{"post":{"operationId":"post_accounting_firms_integrations_power_bi_connect","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Integrations Power Bi Connect","description":"Execute Accounting Firms Integrations Power Bi Connect.\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\nSource handler: `pages/api/accounting-firms/integrations/power-bi/connect.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}},"/api/accounting-firms/integrations/power-bi/starter-kit":{"get":{"operationId":"get_accounting_firms_integrations_power_bi_starter_kit","tags":["Accounting Firms"],"summary":"Get Accounting Firms Integrations Power Bi Starter Kit","description":"Get Accounting Firms Integrations Power Bi Starter Kit.\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\nSource handler: `pages/api/accounting-firms/integrations/power-bi/starter-kit.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}},"/api/accounting-firms/integrations/smartvault":{"get":{"operationId":"get_accounting_firms_integrations_smartvault","tags":["Accounting Firms"],"summary":"Get Accounting Firms Integrations Smartvault","description":"Get Accounting Firms Integrations Smartvault.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/smartvault.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_integrations_smartvault","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Integrations Smartvault","description":"Execute Accounting Firms Integrations Smartvault.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/smartvault.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]},"delete":{"operationId":"delete_accounting_firms_integrations_smartvault","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Integrations Smartvault","description":"Delete Accounting Firms Integrations Smartvault.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/smartvault.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/accounting-firms/integrations/smartvault/callback":{"get":{"operationId":"get_accounting_firms_integrations_smartvault_callback","tags":["Accounting Firms"],"summary":"Get Accounting Firms Integrations Smartvault Callback","description":"Get Accounting Firms Integrations Smartvault Callback.\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\nCommon query parameters: `code`, `error`, `state`.\n\nSource handler: `pages/api/accounting-firms/integrations/smartvault/callback.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,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/accounting-firms/integrations/smartvault/connect":{"post":{"operationId":"post_accounting_firms_integrations_smartvault_connect","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Integrations Smartvault Connect","description":"Execute Accounting Firms Integrations Smartvault Connect.\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\nSource handler: `pages/api/accounting-firms/integrations/smartvault/connect.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}},"/api/accounting-firms/integrations/taxdome":{"get":{"operationId":"get_accounting_firms_integrations_taxdome","tags":["Accounting Firms"],"summary":"Get Accounting Firms Integrations Taxdome","description":"Get Accounting Firms Integrations Taxdome.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/taxdome.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_accounting_firms_integrations_taxdome","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Integrations Taxdome","description":"Execute Accounting Firms Integrations Taxdome.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/taxdome.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]},"put":{"operationId":"put_accounting_firms_integrations_taxdome","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Integrations Taxdome","description":"Replace Accounting Firms Integrations Taxdome.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/taxdome.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]},"delete":{"operationId":"delete_accounting_firms_integrations_taxdome","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Integrations Taxdome","description":"Delete Accounting Firms Integrations Taxdome.\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\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/accounting-firms/integrations/taxdome.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,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/accounting-firms/integrations/zapier":{"get":{"operationId":"get_accounting_firms_integrations_zapier","tags":["Accounting Firms"],"summary":"Get Accounting Firms Integrations Zapier","description":"Get Accounting Firms Integrations Zapier.\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\nSource handler: `pages/api/accounting-firms/integrations/zapier.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},"post":{"operationId":"post_accounting_firms_integrations_zapier","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Integrations Zapier","description":"Execute Accounting Firms Integrations Zapier.\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\nSource handler: `pages/api/accounting-firms/integrations/zapier.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},"put":{"operationId":"put_accounting_firms_integrations_zapier","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Integrations Zapier","description":"Replace Accounting Firms Integrations Zapier.\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\nSource handler: `pages/api/accounting-firms/integrations/zapier.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},"delete":{"operationId":"delete_accounting_firms_integrations_zapier","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Integrations Zapier","description":"Delete Accounting Firms Integrations Zapier.\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\nSource handler: `pages/api/accounting-firms/integrations/zapier.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}},"/api/accounting-firms/mail-templates":{"get":{"operationId":"get_accounting_firms_mail_templates","tags":["Accounting Firms"],"summary":"Get Accounting Firms Mail Templates","description":"Get Accounting Firms Mail Templates.\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\nSource handler: `pages/api/accounting-firms/mail-templates.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},"patch":{"operationId":"patch_accounting_firms_mail_templates","tags":["Accounting Firms"],"summary":"Update Accounting Firms Mail Templates","description":"Update Accounting Firms Mail Templates.\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\nSource handler: `pages/api/accounting-firms/mail-templates.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}},"/api/accounting-firms/monthly-close-runs":{"get":{"operationId":"get_accounting_firms_monthly_close_runs","tags":["Accounting Firms"],"summary":"Get Accounting Firms Monthly Close Runs","description":"Get Accounting Firms Monthly Close Runs.\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\nCommon query parameters: `periodEnd`, `periodStart`.\n\nSource handler: `pages/api/accounting-firms/monthly-close-runs.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,"parameters":[{"name":"periodEnd","in":"query","required":false,"description":"PeriodEnd filter or option.","schema":{"type":"string","description":"PeriodEnd filter or option."}},{"name":"periodStart","in":"query","required":false,"description":"PeriodStart filter or option.","schema":{"type":"string","description":"PeriodStart filter or option."}}]}},"/api/accounting-firms/outlook/callback":{"get":{"operationId":"get_accounting_firms_outlook_callback","tags":["Accounting Firms"],"summary":"Get Accounting Firms Outlook Callback","description":"Get Accounting Firms Outlook Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `code`, `error`, `error_description`, `state`.\n\nSource handler: `pages/api/accounting-firms/outlook/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"error_description","in":"query","required":false,"description":"Error Description filter or option.","schema":{"type":"string","description":"Error Description filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/accounting-firms/outlook/connect":{"get":{"operationId":"get_accounting_firms_outlook_connect","tags":["Accounting Firms"],"summary":"Get Accounting Firms Outlook Connect","description":"Get Accounting Firms Outlook Connect.\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\nCommon query parameters: `confirm`, `returnTo`.\n\nSource handler: `pages/api/accounting-firms/outlook/connect.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,"parameters":[{"name":"confirm","in":"query","required":false,"description":"Confirm filter or option.","schema":{"type":"string","description":"Confirm filter or option."}},{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}}]}},"/api/accounting-firms/outlook/connection":{"get":{"operationId":"get_accounting_firms_outlook_connection","tags":["Accounting Firms"],"summary":"Get Accounting Firms Outlook Connection","description":"Get Accounting Firms Outlook Connection.\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\nSource handler: `pages/api/accounting-firms/outlook/connection.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},"delete":{"operationId":"delete_accounting_firms_outlook_connection","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Outlook Connection","description":"Delete Accounting Firms Outlook Connection.\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\nSource handler: `pages/api/accounting-firms/outlook/connection.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}},"/api/accounting-firms/outlook/send":{"post":{"operationId":"post_accounting_firms_outlook_send","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Outlook Send","description":"Execute Accounting Firms Outlook Send.\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\nSource handler: `pages/api/accounting-firms/outlook/send.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}},"/api/accounting-firms/pending-transaction-counts":{"get":{"operationId":"get_accounting_firms_pending_transaction_counts","tags":["Accounting Firms"],"summary":"Get Accounting Firms Pending Transaction Counts","description":"Get Accounting Firms Pending Transaction Counts.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/accounting-firms/pending-transaction-counts.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/accounting-firms/recommendation-quality":{"get":{"operationId":"get_accounting_firms_recommendation_quality","tags":["Accounting Firms"],"summary":"Get Accounting Firms Recommendation Quality","description":"Get Accounting Firms Recommendation Quality.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nCommon query parameters: `company_ids`, `end_date`, `group_by`, `recommendation_source`, `start_date`, `time_zone`.\n\nSource handler: `pages/api/accounting-firms/recommendation-quality.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"company_ids","in":"query","required":false,"description":"Company Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Company 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":"group_by","in":"query","required":false,"description":"Group By filter or option.","schema":{"type":"string","description":"Group By filter or option."}},{"name":"recommendation_source","in":"query","required":false,"description":"Recommendation Source filter or option.","schema":{"type":"string","description":"Recommendation Source 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":"time_zone","in":"query","required":false,"description":"Time Zone filter or option.","schema":{"type":"string","description":"Time Zone filter or option."}}]}},"/api/accounting-firms/referrals":{"get":{"operationId":"get_accounting_firms_referrals","tags":["Accounting Firms"],"summary":"Get Accounting Firms Referrals","description":"Get Accounting Firms Referrals.\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\nCommon query parameters: `page`, `period`.\n\nSource handler: `pages/api/accounting-firms/referrals.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,"parameters":[{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"period","in":"query","required":false,"description":"Period filter or option.","schema":{"type":"string","description":"Period filter or option."}}]},"post":{"operationId":"post_accounting_firms_referrals","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Referrals","description":"Execute Accounting Firms Referrals.\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\nCommon query parameters: `page`, `period`.\n\nSource handler: `pages/api/accounting-firms/referrals.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,"parameters":[{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"period","in":"query","required":false,"description":"Period filter or option.","schema":{"type":"string","description":"Period filter or option."}}]}},"/api/accounting-firms/statement-upload-clients":{"get":{"operationId":"get_accounting_firms_statement_upload_clients","tags":["Accounting Firms"],"summary":"List writable clients for statement uploads","description":"Get Accounting Firms Statement Upload Clients.\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\nSource handler: `pages/api/accounting-firms/statement-upload-clients.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,"parameters":[{"name":"accountingFirmId","in":"query","required":true,"description":"Accounting firm to search.","schema":{"type":"string","format":"uuid"}},{"name":"clients","in":"query","required":false,"description":"Comma-separated selected client UUIDs. Only accessible selected clients are returned.","schema":{"type":"string"}}]}},"/api/accounting-firms/support-issue-attachment":{"get":{"operationId":"get_accounting_firms_support_issue_attachment","tags":["Accounting Firms"],"summary":"Get Accounting Firms Support Issue Attachment","description":"Get Accounting Firms Support Issue Attachment.\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\nCommon query parameters: `attachmentId`, `inline`, `issueId`.\n\nSource handler: `pages/api/accounting-firms/support-issue-attachment.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,"parameters":[{"name":"attachmentId","in":"query","required":false,"description":"AttachmentId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AttachmentId. Use an identifier returned by Wesley."}},{"name":"inline","in":"query","required":false,"description":"Inline filter or option.","schema":{"type":"string","description":"Inline filter or option."}},{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}}]}},"/api/accounting-firms/support-issue-upload":{"post":{"operationId":"post_accounting_firms_support_issue_upload","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Support Issue Upload","description":"Execute Accounting Firms Support Issue Upload.\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\nSource handler: `pages/api/accounting-firms/support-issue-upload.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}},"/api/accounting-firms/support-issues":{"get":{"operationId":"get_accounting_firms_support_issues","tags":["Accounting Firms"],"summary":"Get Accounting Firms Support Issues","description":"Get Accounting Firms Support Issues.\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\nCommon query parameters: `archived`, `clientId`, `clientSearch`, `clientSearchMode`, `export`, `images`, `issueId`, `unreadOnly`.\n\nSource handler: `pages/api/accounting-firms/support-issues.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,"parameters":[{"name":"archived","in":"query","required":false,"description":"Archived filter or option.","schema":{"type":"string","description":"Archived filter or option."}},{"name":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"clientSearch","in":"query","required":false,"description":"ClientSearch filter or option.","schema":{"type":"string","description":"ClientSearch filter or option."}},{"name":"clientSearchMode","in":"query","required":false,"description":"ClientSearchMode filter or option.","schema":{"type":"string","description":"ClientSearchMode filter or option."}},{"name":"export","in":"query","required":false,"description":"Export filter or option.","schema":{"type":"string","description":"Export filter or option."}},{"name":"images","in":"query","required":false,"description":"Images filter or option.","schema":{"type":"string","description":"Images filter or option."}},{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"unreadOnly","in":"query","required":false,"description":"UnreadOnly filter or option.","schema":{"type":"string","description":"UnreadOnly filter or option."}}]},"post":{"operationId":"post_accounting_firms_support_issues","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Support Issues","description":"Execute Accounting Firms Support Issues.\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\nCommon query parameters: `archived`, `clientId`, `clientSearch`, `clientSearchMode`, `export`, `images`, `issueId`, `unreadOnly`.\n\nSource handler: `pages/api/accounting-firms/support-issues.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,"parameters":[{"name":"archived","in":"query","required":false,"description":"Archived filter or option.","schema":{"type":"string","description":"Archived filter or option."}},{"name":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"clientSearch","in":"query","required":false,"description":"ClientSearch filter or option.","schema":{"type":"string","description":"ClientSearch filter or option."}},{"name":"clientSearchMode","in":"query","required":false,"description":"ClientSearchMode filter or option.","schema":{"type":"string","description":"ClientSearchMode filter or option."}},{"name":"export","in":"query","required":false,"description":"Export filter or option.","schema":{"type":"string","description":"Export filter or option."}},{"name":"images","in":"query","required":false,"description":"Images filter or option.","schema":{"type":"string","description":"Images filter or option."}},{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"unreadOnly","in":"query","required":false,"description":"UnreadOnly filter or option.","schema":{"type":"string","description":"UnreadOnly filter or option."}}]},"patch":{"operationId":"patch_accounting_firms_support_issues","tags":["Accounting Firms"],"summary":"Update Accounting Firms Support Issues","description":"Update Accounting Firms Support Issues.\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\nCommon query parameters: `archived`, `clientId`, `clientSearch`, `clientSearchMode`, `export`, `images`, `issueId`, `unreadOnly`.\n\nSource handler: `pages/api/accounting-firms/support-issues.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,"parameters":[{"name":"archived","in":"query","required":false,"description":"Archived filter or option.","schema":{"type":"string","description":"Archived filter or option."}},{"name":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"clientSearch","in":"query","required":false,"description":"ClientSearch filter or option.","schema":{"type":"string","description":"ClientSearch filter or option."}},{"name":"clientSearchMode","in":"query","required":false,"description":"ClientSearchMode filter or option.","schema":{"type":"string","description":"ClientSearchMode filter or option."}},{"name":"export","in":"query","required":false,"description":"Export filter or option.","schema":{"type":"string","description":"Export filter or option."}},{"name":"images","in":"query","required":false,"description":"Images filter or option.","schema":{"type":"string","description":"Images filter or option."}},{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"unreadOnly","in":"query","required":false,"description":"UnreadOnly filter or option.","schema":{"type":"string","description":"UnreadOnly filter or option."}}]}},"/api/accounting-firms/team":{"get":{"operationId":"get_accounting_firms_team","tags":["Accounting Firms"],"summary":"Get Accounting Firms Team","description":"Get Accounting Firms Team.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/accounting-firms/team/index.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/accounting-firms/team/members/{id}":{"get":{"operationId":"get_accounting_firms_team_members_id","tags":["Accounting Firms"],"summary":"Get Accounting Firms Team Members By Id","description":"Get Accounting Firms Team Members By Id.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/accounting-firms/team/members/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]},"put":{"operationId":"put_accounting_firms_team_members_id","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Team Members By Id","description":"Replace Accounting Firms Team Members By Id.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nJSON body keys used by this method: `companyAccessLevel`, `company_access_level`, `defaultCompanyAccessLevel`, `default_company_access_level`, `membershipType`, `membership_type`, `role`.\n\nSource handler: `pages/api/accounting-firms/team/members/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `companyAccessLevel`, `company_access_level`, `defaultCompanyAccessLevel`, `default_company_access_level`, `membershipType`, `membership_type`, `role`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyAccessLevel":{"type":"string","description":"CompanyAccessLevel payload field."},"company_access_level":{"type":"string","description":"Company Access Level payload field."},"defaultCompanyAccessLevel":{"type":"string","description":"DefaultCompanyAccessLevel payload field."},"default_company_access_level":{"type":"string","description":"Default Company Access Level payload field."},"membershipType":{"type":"string","description":"MembershipType payload field."},"membership_type":{"type":"string","description":"Membership Type payload field."},"role":{"type":"string","description":"Role payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_accounting_firms_team_members_id","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Team Members By Id","description":"Delete Accounting Firms Team Members By Id.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nJSON body keys used by this method: `companyAccessLevel`, `company_access_level`, `defaultCompanyAccessLevel`, `default_company_access_level`, `membershipType`, `membership_type`, `role`.\n\nSource handler: `pages/api/accounting-firms/team/members/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `companyAccessLevel`, `company_access_level`, `defaultCompanyAccessLevel`, `default_company_access_level`, `membershipType`, `membership_type`, `role`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyAccessLevel":{"type":"string","description":"CompanyAccessLevel payload field."},"company_access_level":{"type":"string","description":"Company Access Level payload field."},"defaultCompanyAccessLevel":{"type":"string","description":"DefaultCompanyAccessLevel payload field."},"default_company_access_level":{"type":"string","description":"Default Company Access Level payload field."},"membershipType":{"type":"string","description":"MembershipType payload field."},"membership_type":{"type":"string","description":"Membership Type payload field."},"role":{"type":"string","description":"Role payload field."}},"additionalProperties":true}}}}}},"/api/accounting-firms/team/members/{id}/company-access":{"put":{"operationId":"put_accounting_firms_team_members_id_company_access","tags":["Accounting Firms"],"summary":"Replace Accounting Firms Team Members By Id Company Access","description":"Replace Accounting Firms Team Members By Id Company Access.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nJSON body keys used by this method: `accessLevel`, `access_level`, `companyId`, `company_id`.\n\nSource handler: `pages/api/accounting-firms/team/members/[id]/company-access.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `accessLevel`, `access_level`, `companyId`, `company_id`.","content":{"application/json":{"schema":{"type":"object","properties":{"accessLevel":{"type":"string","description":"AccessLevel payload field."},"access_level":{"type":"string","description":"Access Level payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"company_id":{"type":"string","description":"Company Id. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/accounting-firms/universal-coa":{"get":{"operationId":"get_accounting_firms_universal_coa","tags":["Accounting Firms"],"summary":"Get Accounting Firms Universal Coa","description":"Get Accounting Firms Universal Coa.\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\nSource handler: `pages/api/accounting-firms/universal-coa.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},"post":{"operationId":"post_accounting_firms_universal_coa","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Universal Coa","description":"Execute Accounting Firms Universal Coa.\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\nJSON body keys used by this method: `accounts`, `action`, `code`, `description`, `expectedUpdatedAt`, `id`, `isActive`, `name`, `sourceCompanyId`, `typeId`.\n\nSource handler: `pages/api/accounting-firms/universal-coa.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `accounts`, `action`, `code`, `description`, `expectedUpdatedAt`, `id`, `isActive`, `name`, `sourceCompanyId`, `typeId`.","content":{"application/json":{"schema":{"type":"object","properties":{"accounts":{"type":"string","description":"Accounts payload field."},"action":{"type":"string","description":"Action payload field."},"code":{"type":"string","description":"Code payload field."},"description":{"type":"string","description":"Description payload field."},"expectedUpdatedAt":{"type":"string","format":"date-time","description":"ExpectedUpdatedAt as an ISO 8601 date-time."},"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."},"isActive":{"type":"boolean","description":"IsActive flag."},"name":{"type":"string","description":"Name payload field."},"sourceCompanyId":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."},"typeId":{"type":"string","description":"TypeId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_accounting_firms_universal_coa","tags":["Accounting Firms"],"summary":"Update Accounting Firms Universal Coa","description":"Update Accounting Firms Universal Coa.\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\nJSON body keys used by this method: `accounts`, `action`, `code`, `description`, `expectedUpdatedAt`, `id`, `isActive`, `name`, `sourceCompanyId`, `typeId`.\n\nSource handler: `pages/api/accounting-firms/universal-coa.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `accounts`, `action`, `code`, `description`, `expectedUpdatedAt`, `id`, `isActive`, `name`, `sourceCompanyId`, `typeId`.","content":{"application/json":{"schema":{"type":"object","properties":{"accounts":{"type":"string","description":"Accounts payload field."},"action":{"type":"string","description":"Action payload field."},"code":{"type":"string","description":"Code payload field."},"description":{"type":"string","description":"Description payload field."},"expectedUpdatedAt":{"type":"string","format":"date-time","description":"ExpectedUpdatedAt as an ISO 8601 date-time."},"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."},"isActive":{"type":"boolean","description":"IsActive flag."},"name":{"type":"string","description":"Name payload field."},"sourceCompanyId":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."},"typeId":{"type":"string","description":"TypeId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_accounting_firms_universal_coa","tags":["Accounting Firms"],"summary":"Delete Accounting Firms Universal Coa","description":"Delete Accounting Firms Universal Coa.\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\nJSON body keys used by this method: `accounts`, `action`, `code`, `description`, `expectedUpdatedAt`, `id`, `isActive`, `name`, `sourceCompanyId`, `typeId`.\n\nSource handler: `pages/api/accounting-firms/universal-coa.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `accounts`, `action`, `code`, `description`, `expectedUpdatedAt`, `id`, `isActive`, `name`, `sourceCompanyId`, `typeId`.","content":{"application/json":{"schema":{"type":"object","properties":{"accounts":{"type":"string","description":"Accounts payload field."},"action":{"type":"string","description":"Action payload field."},"code":{"type":"string","description":"Code payload field."},"description":{"type":"string","description":"Description payload field."},"expectedUpdatedAt":{"type":"string","format":"date-time","description":"ExpectedUpdatedAt as an ISO 8601 date-time."},"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."},"isActive":{"type":"boolean","description":"IsActive flag."},"name":{"type":"string","description":"Name payload field."},"sourceCompanyId":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."},"typeId":{"type":"string","description":"TypeId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/accounting-firms/unlinked-payee-review":{"get":{"operationId":"get_accounting_firms_unlinked_payee_review","tags":["Accounting Firms"],"summary":"Get Accounting Firms Unlinked Payee Review","description":"Get Accounting Firms Unlinked Payee Review.\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\nCommon query parameters: `accountingFirmId`, `clientId`, `page`.\n\nSource handler: `pages/api/accounting-firms/unlinked-payee-review.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,"parameters":[{"name":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}},{"name":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}}]}},"/api/accounting-firms/update":{"post":{"operationId":"post_accounting_firms_update","tags":["Accounting Firms"],"summary":"Execute Accounting Firms Update","description":"Execute Accounting Firms Update.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/accounting-firms/update.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]},"patch":{"operationId":"patch_accounting_firms_update","tags":["Accounting Firms"],"summary":"Update Accounting Firms Update","description":"Update Accounting Firms Update.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/accounting-firms/update.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/accounts":{"get":{"operationId":"get_accounts","tags":["Accounts"],"summary":"Get Accounts","description":"Get 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: `type`.\n\nSource handler: `pages/api/accounts/index.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":"type","in":"query","required":false,"description":"Type filter or option.","schema":{"type":"string","description":"Type filter or option."}}]},"post":{"operationId":"post_accounts","tags":["Accounts"],"summary":"Execute Accounts","description":"Execute 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\nSource handler: `pages/api/accounts/index.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"}}]},"patch":{"operationId":"patch_accounts","tags":["Accounts"],"summary":"Update Accounts","description":"Update 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\nJSON body keys used by this method: `account_id`, `account_name`, `expected_account_name`, `unlink_journal_account`.\n\nSource handler: `pages/api/accounts/index.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: `account_id`, `account_name`, `expected_account_name`, `unlink_journal_account`.","content":{"application/json":{"schema":{"type":"object","properties":{"account_id":{"type":"string","description":"Account Id. Use an identifier returned by Wesley."},"account_name":{"type":"string","description":"Account Name payload field."},"expected_account_name":{"type":"string","description":"Expected Account Name payload field."},"unlink_journal_account":{"type":"string","description":"Unlink Journal Account payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_accounts","tags":["Accounts"],"summary":"Delete Accounts","description":"Delete 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\nJSON body keys used by this method: `confirmDeletePostedTransactions`, `confirmDeleteSupportingReferences`, `deleteLinkedJournalAccountIds`, `expectedSnapshotToken`, `id`, `ids`.\n\nSource handler: `pages/api/accounts/index.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: `confirmDeletePostedTransactions`, `confirmDeleteSupportingReferences`, `deleteLinkedJournalAccountIds`, `expectedSnapshotToken`, `id`, `ids`.","content":{"application/json":{"schema":{"type":"object","properties":{"confirmDeletePostedTransactions":{"type":"string","description":"ConfirmDeletePostedTransactions payload field."},"confirmDeleteSupportingReferences":{"type":"string","description":"ConfirmDeleteSupportingReferences payload field."},"deleteLinkedJournalAccountIds":{"type":"array","items":{"type":"string"},"description":"DeleteLinkedJournalAccountIds. Use identifiers returned by Wesley."},"expectedSnapshotToken":{"type":"string","description":"ExpectedSnapshotToken payload field."},"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."},"ids":{"type":"string","description":"Ids payload field."}},"additionalProperties":true}}}}}},"/api/accounts/account-groups":{"put":{"operationId":"put_accounts_account_groups","tags":["Accounts"],"summary":"Replace Accounts Account Groups","description":"Replace Accounts Account Groups.\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/accounts/account-groups.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/accounts/banking-source-mapping":{"get":{"operationId":"get_accounts_banking_source_mapping","tags":["Accounts"],"summary":"Get Accounts Banking Source Mapping","description":"Get Accounts Banking Source Mapping.\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: `account_id`.\n\nSource handler: `pages/api/accounts/banking-source-mapping.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":"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."}}]}},"/api/accounts/company-coa-preview":{"get":{"operationId":"get_accounts_company_coa_preview","tags":["Accounts"],"summary":"Get Accounts Company Coa Preview","description":"Get Accounts Company Coa Preview.\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\nPreview endpoint used to inspect impact before committing changes.\n\nCommon query parameters: `sourceCompanyId`, `sourceType`, `targetCompanyId`.\n\nSource handler: `pages/api/accounts/company-coa-preview.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,"parameters":[{"name":"sourceCompanyId","in":"query","required":false,"description":"SourceCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}},{"name":"sourceType","in":"query","required":false,"description":"SourceType filter or option.","schema":{"type":"string","description":"SourceType filter or option."}},{"name":"targetCompanyId","in":"query","required":false,"description":"TargetCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"TargetCompanyId. Use an identifier returned by Wesley."}}]}},"/api/accounts/delete-impact":{"post":{"operationId":"post_accounts_delete_impact","tags":["Accounts"],"summary":"Execute Accounts Delete Impact","description":"Execute Accounts Delete Impact.\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: `accountIds`.\n\nSource handler: `pages/api/accounts/delete-impact.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: `accountIds`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountIds":{"type":"array","items":{"type":"string"},"description":"AccountIds. Use identifiers returned by Wesley."}},"additionalProperties":true}}}}}},"/api/accounts/import-company-coa":{"post":{"operationId":"post_accounts_import_company_coa","tags":["Accounts"],"summary":"Import Accounts Import Company Coa","description":"Import Accounts Import Company Coa.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/accounts/import-company-coa.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}},"/api/accounts/import-company-journals":{"post":{"operationId":"post_accounts_import_company_journals","tags":["Accounts"],"summary":"Import Accounts Import Company Journals","description":"Import Accounts Import Company Journals.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nJSON body keys used by this method: `accountOverrides`, `journalEndDate`, `journal_end_date`, `sourceCompanyId`, `source_company_id`.\n\nSource handler: `pages/api/accounts/import-company-journals.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: `accountOverrides`, `journalEndDate`, `journal_end_date`, `sourceCompanyId`, `source_company_id`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountOverrides":{"type":"string","description":"AccountOverrides payload field."},"journalEndDate":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."},"journal_end_date":{"type":"string","format":"date","description":"Journal End Date in YYYY-MM-DD format."},"sourceCompanyId":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."},"source_company_id":{"type":"string","description":"Source Company Id. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/accounts/import-ledger-coa":{"post":{"operationId":"post_accounts_import_ledger_coa","tags":["Accounts"],"summary":"Import Accounts Import Ledger Coa","description":"Import Accounts Import Ledger Coa.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nAccepts multipart form uploads for file-based workflows.\n\nSource handler: `pages/api/accounts/import-ledger-coa.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":"Multipart upload payload for file-processing workflows.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"files":{"type":"array","items":{"type":"string","format":"binary"}}},"additionalProperties":true}},"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}},"/api/accounts/import-ledger-journals":{"post":{"operationId":"post_accounts_import_ledger_journals","tags":["Accounts"],"summary":"Import Accounts Import Ledger Journals","description":"Import Accounts Import Ledger Journals.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nAccepts multipart form uploads for file-based workflows.\n\nSource handler: `pages/api/accounts/import-ledger-journals.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":"Multipart upload payload for file-processing workflows.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"files":{"type":"array","items":{"type":"string","format":"binary"}}},"additionalProperties":true}},"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}},"/api/accounts/import-qbo-coa":{"get":{"operationId":"get_accounts_import_qbo_coa","tags":["Accounts"],"summary":"Get Accounts Import Qbo Coa","description":"Get Accounts Import Qbo Coa.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/accounts/import-qbo-coa.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_accounts_import_qbo_coa","tags":["Accounts"],"summary":"Import Accounts Import Qbo Coa","description":"Import Accounts Import Qbo Coa.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/accounts/import-qbo-coa.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/accounts/import-qbo-journals":{"get":{"operationId":"get_accounts_import_qbo_journals","tags":["Accounts"],"summary":"Get Accounts Import Qbo Journals","description":"Get Accounts Import Qbo Journals.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/accounts/import-qbo-journals.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_accounts_import_qbo_journals","tags":["Accounts"],"summary":"Import Accounts Import Qbo Journals","description":"Import Accounts Import Qbo Journals.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/accounts/import-qbo-journals.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/accounts/manual-banking":{"post":{"operationId":"post_accounts_manual_banking","tags":["Accounts"],"summary":"Execute Accounts Manual Banking","description":"Execute Accounts Manual Banking.\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/accounts/manual-banking.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"}}]},"patch":{"operationId":"patch_accounts_manual_banking","tags":["Accounts"],"summary":"Update Accounts Manual Banking","description":"Update Accounts Manual Banking.\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/accounts/manual-banking.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"}}]},"delete":{"operationId":"delete_accounts_manual_banking","tags":["Accounts"],"summary":"Delete Accounts Manual Banking","description":"Delete Accounts Manual Banking.\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/accounts/manual-banking.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/accounts/merge":{"post":{"operationId":"post_accounts_merge","tags":["Accounts"],"summary":"Execute Accounts Merge","description":"Execute Accounts Merge.\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: `expectedSourceUpdatedAt`, `expectedTargetUpdatedAt`, `sourceAccountId`, `targetAccountId`, `taxMappingResolutions`.\n\nSource handler: `pages/api/accounts/merge.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: `expectedSourceUpdatedAt`, `expectedTargetUpdatedAt`, `sourceAccountId`, `targetAccountId`, `taxMappingResolutions`.","content":{"application/json":{"schema":{"type":"object","properties":{"expectedSourceUpdatedAt":{"type":"string","format":"date-time","description":"ExpectedSourceUpdatedAt as an ISO 8601 date-time."},"expectedTargetUpdatedAt":{"type":"string","format":"date-time","description":"ExpectedTargetUpdatedAt as an ISO 8601 date-time."},"sourceAccountId":{"type":"string","description":"SourceAccountId. Use an identifier returned by Wesley."},"targetAccountId":{"type":"string","description":"TargetAccountId. Use an identifier returned by Wesley."},"taxMappingResolutions":{"type":"string","description":"TaxMappingResolutions payload field."}},"additionalProperties":true}}}}}},"/api/accounts/prepare-qbo-import":{"post":{"operationId":"post_accounts_prepare_qbo_import","tags":["Accounts"],"summary":"Import Accounts Prepare Qbo Import","description":"Import Accounts Prepare Qbo Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nAccepts multipart form uploads for file-based workflows.\n\nSource handler: `pages/api/accounts/prepare-qbo-import.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":"Multipart upload payload for file-processing workflows.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"files":{"type":"array","items":{"type":"string","format":"binary"}}},"additionalProperties":true}},"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}},"/api/accounts/statement-setup-recovery":{"post":{"operationId":"post_accounts_statement_setup_recovery","tags":["Accounts"],"summary":"Execute Accounts Statement Setup Recovery","description":"Execute Accounts Statement Setup Recovery.\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/accounts/statement-setup-recovery.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/accounts/validate-company-journals-import":{"post":{"operationId":"post_accounts_validate_company_journals_import","tags":["Accounts"],"summary":"Import Accounts Validate Company Journals Import","description":"Import Accounts Validate Company Journals Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nJSON body keys used by this method: `journalEndDate`, `journal_end_date`, `sourceCompanyId`, `source_company_id`.\n\nSource handler: `pages/api/accounts/validate-company-journals-import.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: `journalEndDate`, `journal_end_date`, `sourceCompanyId`, `source_company_id`.","content":{"application/json":{"schema":{"type":"object","properties":{"journalEndDate":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."},"journal_end_date":{"type":"string","format":"date","description":"Journal End Date in YYYY-MM-DD format."},"sourceCompanyId":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."},"source_company_id":{"type":"string","description":"Source Company Id. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/accounts/validate-ledger-import":{"post":{"operationId":"post_accounts_validate_ledger_import","tags":["Accounts"],"summary":"Import Accounts Validate Ledger Import","description":"Import Accounts Validate Ledger Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nAccepts multipart form uploads for file-based workflows.\n\nSource handler: `pages/api/accounts/validate-ledger-import.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":"Multipart upload payload for file-processing workflows.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"files":{"type":"array","items":{"type":"string","format":"binary"}}},"additionalProperties":true}},"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}},"/api/accounts/validate-qbo-import":{"post":{"operationId":"post_accounts_validate_qbo_import","tags":["Accounts"],"summary":"Import Accounts Validate Qbo Import","description":"Import Accounts Validate Qbo Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nAccepts multipart form uploads for file-based workflows.\n\nSource handler: `pages/api/accounts/validate-qbo-import.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":"Multipart upload payload for file-processing workflows.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"files":{"type":"array","items":{"type":"string","format":"binary"}}},"additionalProperties":true}},"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}},"/api/admin/accounting-firm-read-access":{"get":{"operationId":"get_admin_accounting_firm_read_access","tags":["Admin"],"summary":"Get Admin Accounting Firm Read Access","description":"Get Admin Accounting Firm Read Access.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/accounting-firm-read-access.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},"post":{"operationId":"post_admin_accounting_firm_read_access","tags":["Admin"],"summary":"Execute Admin Accounting Firm Read Access","description":"Execute Admin Accounting Firm Read Access.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/accounting-firm-read-access.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},"delete":{"operationId":"delete_admin_accounting_firm_read_access","tags":["Admin"],"summary":"Delete Admin Accounting Firm Read Access","description":"Delete Admin Accounting Firm Read Access.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/accounting-firm-read-access.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}},"/api/admin/accounting-firms":{"get":{"operationId":"get_admin_accounting_firms","tags":["Admin"],"summary":"Get Admin Accounting Firms","description":"Get Admin Accounting Firms.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `access`, `clientCountMax`, `clientCountMin`, `externalMembersOverSeats`, `memberCountMax`, `memberCountMin`, `page`, `pageSize`, `search`, `sortBy`, `sortOrder`, `stripeCouponsOnly`.\n\nSource handler: `pages/api/admin/accounting-firms.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,"parameters":[{"name":"access","in":"query","required":false,"description":"Access filter or option.","schema":{"type":"string","description":"Access filter or option."}},{"name":"clientCountMax","in":"query","required":false,"description":"ClientCountMax filter or option.","schema":{"type":"string","description":"ClientCountMax filter or option."}},{"name":"clientCountMin","in":"query","required":false,"description":"ClientCountMin filter or option.","schema":{"type":"string","description":"ClientCountMin filter or option."}},{"name":"externalMembersOverSeats","in":"query","required":false,"description":"ExternalMembersOverSeats filter or option.","schema":{"type":"string","description":"ExternalMembersOverSeats filter or option."}},{"name":"memberCountMax","in":"query","required":false,"description":"MemberCountMax filter or option.","schema":{"type":"string","description":"MemberCountMax filter or option."}},{"name":"memberCountMin","in":"query","required":false,"description":"MemberCountMin filter or option.","schema":{"type":"string","description":"MemberCountMin filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"pageSize","in":"query","required":false,"description":"PageSize filter or option.","schema":{"type":"integer","description":"PageSize filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"sortBy","in":"query","required":false,"description":"SortBy filter or option.","schema":{"type":"string","description":"SortBy filter or option."}},{"name":"sortOrder","in":"query","required":false,"description":"SortOrder filter or option.","schema":{"type":"string","description":"SortOrder filter or option."}},{"name":"stripeCouponsOnly","in":"query","required":false,"description":"StripeCouponsOnly filter or option.","schema":{"type":"string","description":"StripeCouponsOnly filter or option."}}]},"post":{"operationId":"post_admin_accounting_firms","tags":["Admin"],"summary":"Execute Admin Accounting Firms","description":"Execute Admin Accounting Firms.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `access`, `clientCountMax`, `clientCountMin`, `externalMembersOverSeats`, `memberCountMax`, `memberCountMin`, `page`, `pageSize`, `search`, `sortBy`, `sortOrder`, `stripeCouponsOnly`.\n\nSource handler: `pages/api/admin/accounting-firms.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,"parameters":[{"name":"access","in":"query","required":false,"description":"Access filter or option.","schema":{"type":"string","description":"Access filter or option."}},{"name":"clientCountMax","in":"query","required":false,"description":"ClientCountMax filter or option.","schema":{"type":"string","description":"ClientCountMax filter or option."}},{"name":"clientCountMin","in":"query","required":false,"description":"ClientCountMin filter or option.","schema":{"type":"string","description":"ClientCountMin filter or option."}},{"name":"externalMembersOverSeats","in":"query","required":false,"description":"ExternalMembersOverSeats filter or option.","schema":{"type":"string","description":"ExternalMembersOverSeats filter or option."}},{"name":"memberCountMax","in":"query","required":false,"description":"MemberCountMax filter or option.","schema":{"type":"string","description":"MemberCountMax filter or option."}},{"name":"memberCountMin","in":"query","required":false,"description":"MemberCountMin filter or option.","schema":{"type":"string","description":"MemberCountMin filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"pageSize","in":"query","required":false,"description":"PageSize filter or option.","schema":{"type":"integer","description":"PageSize filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"sortBy","in":"query","required":false,"description":"SortBy filter or option.","schema":{"type":"string","description":"SortBy filter or option."}},{"name":"sortOrder","in":"query","required":false,"description":"SortOrder filter or option.","schema":{"type":"string","description":"SortOrder filter or option."}},{"name":"stripeCouponsOnly","in":"query","required":false,"description":"StripeCouponsOnly filter or option.","schema":{"type":"string","description":"StripeCouponsOnly filter or option."}}]}},"/api/admin/accounting-firms/{accountingFirmId}/billing":{"get":{"operationId":"get_admin_accounting_firms_accountingfirmid_billing","tags":["Admin"],"summary":"Get Admin Accounting Firms By AccountingFirmId Billing","description":"Get Admin Accounting Firms By AccountingFirmId Billing.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/accounting-firms/[accountingFirmId]/billing.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,"parameters":[{"name":"accountingFirmId","in":"path","required":true,"description":"Path identifier: accountingFirmId","schema":{"type":"string"}}]},"put":{"operationId":"put_admin_accounting_firms_accountingfirmid_billing","tags":["Admin"],"summary":"Replace Admin Accounting Firms By AccountingFirmId Billing","description":"Replace Admin Accounting Firms By AccountingFirmId Billing.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/accounting-firms/[accountingFirmId]/billing.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,"parameters":[{"name":"accountingFirmId","in":"path","required":true,"description":"Path identifier: accountingFirmId","schema":{"type":"string"}}]}},"/api/admin/accounting-firms/{accountingFirmId}/experimental-features":{"put":{"operationId":"put_admin_accounting_firms_accountingfirmid_experimental_features","tags":["Admin"],"summary":"Replace Admin Accounting Firms By AccountingFirmId Experimental Features","description":"Replace Admin Accounting Firms By AccountingFirmId Experimental Features.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/accounting-firms/[accountingFirmId]/experimental-features.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,"parameters":[{"name":"accountingFirmId","in":"path","required":true,"description":"Path identifier: accountingFirmId","schema":{"type":"string"}}]}},"/api/admin/accounting-firms/{accountingFirmId}/invitations":{"post":{"operationId":"post_admin_accounting_firms_accountingfirmid_invitations","tags":["Admin"],"summary":"Execute Admin Accounting Firms By AccountingFirmId Invitations","description":"Execute Admin Accounting Firms By AccountingFirmId Invitations.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/accounting-firms/[accountingFirmId]/invitations.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,"parameters":[{"name":"accountingFirmId","in":"path","required":true,"description":"Path identifier: accountingFirmId","schema":{"type":"string"}}]}},"/api/admin/accounting-firms/{accountingFirmId}/members":{"post":{"operationId":"post_admin_accounting_firms_accountingfirmid_members","tags":["Admin"],"summary":"Execute Admin Accounting Firms By AccountingFirmId Members","description":"Execute Admin Accounting Firms By AccountingFirmId Members.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/accounting-firms/[accountingFirmId]/members.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,"parameters":[{"name":"accountingFirmId","in":"path","required":true,"description":"Path identifier: accountingFirmId","schema":{"type":"string"}}]},"delete":{"operationId":"delete_admin_accounting_firms_accountingfirmid_members","tags":["Admin"],"summary":"Delete Admin Accounting Firms By AccountingFirmId Members","description":"Delete Admin Accounting Firms By AccountingFirmId Members.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/accounting-firms/[accountingFirmId]/members.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,"parameters":[{"name":"accountingFirmId","in":"path","required":true,"description":"Path identifier: accountingFirmId","schema":{"type":"string"}}]}},"/api/admin/accounting-firms/{accountingFirmId}/referral":{"get":{"operationId":"get_admin_accounting_firms_accountingfirmid_referral","tags":["Admin"],"summary":"Get Admin Accounting Firms By AccountingFirmId Referral","description":"Get Admin Accounting Firms By AccountingFirmId Referral.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `search`.\n\nSource handler: `pages/api/admin/accounting-firms/[accountingFirmId]/referral.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,"parameters":[{"name":"accountingFirmId","in":"path","required":true,"description":"Path identifier: accountingFirmId","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]},"put":{"operationId":"put_admin_accounting_firms_accountingfirmid_referral","tags":["Admin"],"summary":"Replace Admin Accounting Firms By AccountingFirmId Referral","description":"Replace Admin Accounting Firms By AccountingFirmId Referral.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `search`.\n\nSource handler: `pages/api/admin/accounting-firms/[accountingFirmId]/referral.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,"parameters":[{"name":"accountingFirmId","in":"path","required":true,"description":"Path identifier: accountingFirmId","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]}},"/api/admin/agent-desktops/{path}":{"get":{"operationId":"get_admin_agent_desktops_path","tags":["Admin"],"summary":"Retrieve Admin Agent Desktops By Path","description":"Retrieve Admin Agent Desktops By Path.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/agent-desktops/[[...path]].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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"path","in":"path","required":true,"description":"Path identifier: path","schema":{"type":"string"}}]},"post":{"operationId":"post_admin_agent_desktops_path","tags":["Admin"],"summary":"Execute Admin Agent Desktops By Path","description":"Execute Admin Agent Desktops By Path.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `hours`, `requestId`, `resumeSessionId`.\n\nSource handler: `pages/api/admin/agent-desktops/[[...path]].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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"path","in":"path","required":true,"description":"Path identifier: path","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `hours`, `requestId`, `resumeSessionId`.","content":{"application/json":{"schema":{"type":"object","properties":{"hours":{"type":"string","description":"Hours payload field."},"requestId":{"type":"string","description":"RequestId. Use an identifier returned by Wesley."},"resumeSessionId":{"type":"string","description":"ResumeSessionId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_admin_agent_desktops_path","tags":["Admin"],"summary":"Delete Admin Agent Desktops By Path","description":"Delete Admin Agent Desktops By Path.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `hours`, `requestId`, `resumeSessionId`.\n\nSource handler: `pages/api/admin/agent-desktops/[[...path]].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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"path","in":"path","required":true,"description":"Path identifier: path","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `hours`, `requestId`, `resumeSessionId`.","content":{"application/json":{"schema":{"type":"object","properties":{"hours":{"type":"string","description":"Hours payload field."},"requestId":{"type":"string","description":"RequestId. Use an identifier returned by Wesley."},"resumeSessionId":{"type":"string","description":"ResumeSessionId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/admin/analytics/ga4-product-metrics-cron":{"get":{"operationId":"get_admin_analytics_ga4_product_metrics_cron","tags":["Admin"],"summary":"Retrieve Admin Analytics Ga4 Product Metrics Cron","description":"Retrieve Admin Analytics Ga4 Product Metrics Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/analytics/ga4-product-metrics-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_analytics_ga4_product_metrics_cron","tags":["Admin"],"summary":"Execute Admin Analytics Ga4 Product Metrics Cron","description":"Execute Admin Analytics Ga4 Product Metrics Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/analytics/ga4-product-metrics-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/analytics/ga4-product-metrics-image":{"get":{"operationId":"get_admin_analytics_ga4_product_metrics_image","tags":["Admin"],"summary":"Retrieve Admin Analytics Ga4 Product Metrics Image","description":"Retrieve Admin Analytics Ga4 Product Metrics Image.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `index`, `reportKey`, `sig`.\n\nSource handler: `pages/api/admin/analytics/ga4-product-metrics-image.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"index","in":"query","required":false,"description":"Index filter or option.","schema":{"type":"string","description":"Index filter or option."}},{"name":"reportKey","in":"query","required":false,"description":"ReportKey filter or option.","schema":{"type":"string","description":"ReportKey filter or option."}},{"name":"sig","in":"query","required":false,"description":"Sig filter or option.","schema":{"type":"string","description":"Sig filter or option."}}]}},"/api/admin/analytics/ga4-product-metrics-oauth":{"post":{"operationId":"post_admin_analytics_ga4_product_metrics_oauth","tags":["Admin"],"summary":"Execute Admin Analytics Ga4 Product Metrics Oauth","description":"Execute Admin Analytics Ga4 Product Metrics Oauth.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `code`.\n\nSource handler: `pages/api/admin/analytics/ga4-product-metrics-oauth.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `code`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Code payload field."}},"additionalProperties":true}}}}}},"/api/admin/announcements":{"get":{"operationId":"get_admin_announcements","tags":["Admin"],"summary":"Retrieve Admin Announcements","description":"Retrieve Admin Announcements.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/admin/announcements/index.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-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."}},"post":{"operationId":"post_admin_announcements","tags":["Admin"],"summary":"Execute Admin Announcements","description":"Execute Admin Announcements.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/announcements/index.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}},"/api/admin/announcements/{id}":{"get":{"operationId":"get_admin_announcements_id","tags":["Admin"],"summary":"Retrieve Admin Announcements By Id","description":"Retrieve Admin Announcements By Id.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/announcements/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"patch":{"operationId":"patch_admin_announcements_id","tags":["Admin"],"summary":"Update Admin Announcements By Id","description":"Update Admin Announcements By Id.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/announcements/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"delete":{"operationId":"delete_admin_announcements_id","tags":["Admin"],"summary":"Delete Admin Announcements By Id","description":"Delete Admin Announcements By Id.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/announcements/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/admin/api-keys":{"get":{"operationId":"get_admin_api_keys","tags":["Admin"],"summary":"Retrieve Admin Api Keys","description":"Retrieve Admin Api Keys.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/admin/api-keys/index.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-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."}}},"/api/admin/api-keys/notifications-cron":{"get":{"operationId":"get_admin_api_keys_notifications_cron","tags":["Admin"],"summary":"Retrieve Admin Api Keys Notifications Cron","description":"Retrieve Admin Api Keys Notifications Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/api-keys/notifications-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/billing/weekly-metrics-cron":{"get":{"operationId":"get_admin_billing_weekly_metrics_cron","tags":["Admin"],"summary":"Retrieve Admin Billing Weekly Metrics Cron","description":"Retrieve Admin Billing Weekly Metrics Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/billing/weekly-metrics-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_billing_weekly_metrics_cron","tags":["Admin"],"summary":"Execute Admin Billing Weekly Metrics Cron","description":"Execute Admin Billing Weekly Metrics Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/billing/weekly-metrics-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/blogs":{"get":{"operationId":"get_admin_blogs","tags":["Admin"],"summary":"Retrieve Admin Blogs","description":"Retrieve Admin Blogs.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `search`, `status`.\n\nSource handler: `pages/api/admin/blogs/index.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-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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"post":{"operationId":"post_admin_blogs","tags":["Admin"],"summary":"Execute Admin Blogs","description":"Execute Admin Blogs.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `search`, `status`.\n\nSource handler: `pages/api/admin/blogs/index.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,"parameters":[{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]}},"/api/admin/blogs/{id}":{"get":{"operationId":"get_admin_blogs_id","tags":["Admin"],"summary":"Retrieve Admin Blogs By Id","description":"Retrieve Admin Blogs By Id.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/blogs/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"patch":{"operationId":"patch_admin_blogs_id","tags":["Admin"],"summary":"Update Admin Blogs By Id","description":"Update Admin Blogs By Id.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/blogs/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"delete":{"operationId":"delete_admin_blogs_id","tags":["Admin"],"summary":"Delete Admin Blogs By Id","description":"Delete Admin Blogs By Id.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/blogs/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/admin/bookkeeping-pace/cron":{"get":{"operationId":"get_admin_bookkeeping_pace_cron","tags":["Admin"],"summary":"Retrieve Admin Bookkeeping Pace Cron","description":"Retrieve Admin Bookkeeping Pace Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/bookkeeping-pace/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_bookkeeping_pace_cron","tags":["Admin"],"summary":"Execute Admin Bookkeeping Pace Cron","description":"Execute Admin Bookkeeping Pace Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/bookkeeping-pace/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/client-tasks/cron":{"get":{"operationId":"get_admin_client_tasks_cron","tags":["Admin"],"summary":"Retrieve Admin Client Tasks Cron","description":"Retrieve Admin Client Tasks Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `limit`.\n\nSource handler: `pages/api/admin/client-tasks/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"post":{"operationId":"post_admin_client_tasks_cron","tags":["Admin"],"summary":"Execute Admin Client Tasks Cron","description":"Execute Admin Client Tasks Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nJSON body keys used by this method: `limit`.\n\nCommon query parameters: `limit`.\n\nSource handler: `pages/api/admin/client-tasks/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `limit`.","content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Limit payload field."}},"additionalProperties":true}}}}}},"/api/admin/client-tasks/daily-digest":{"get":{"operationId":"get_admin_client_tasks_daily_digest","tags":["Admin"],"summary":"Retrieve Admin Client Tasks Daily Digest","description":"Retrieve Admin Client Tasks Daily Digest.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `date`.\n\nSource handler: `pages/api/admin/client-tasks/daily-digest.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"date","in":"query","required":false,"description":"Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Date in YYYY-MM-DD format."}}]},"post":{"operationId":"post_admin_client_tasks_daily_digest","tags":["Admin"],"summary":"Execute Admin Client Tasks Daily Digest","description":"Execute Admin Client Tasks Daily Digest.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `date`.\n\nSource handler: `pages/api/admin/client-tasks/daily-digest.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"date","in":"query","required":false,"description":"Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Date in YYYY-MM-DD format."}}]}},"/api/admin/companies/search":{"get":{"operationId":"get_admin_companies_search","tags":["Admin"],"summary":"Retrieve Admin Companies Search","description":"Retrieve Admin Companies Search.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `limit`, `search`.\n\nSource handler: `pages/api/admin/companies/search.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-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":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]}},"/api/admin/company-deletions/cron":{"get":{"operationId":"get_admin_company_deletions_cron","tags":["Admin"],"summary":"Retrieve Admin Company Deletions Cron","description":"Retrieve Admin Company Deletions Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/company-deletions/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_company_deletions_cron","tags":["Admin"],"summary":"Execute Admin Company Deletions Cron","description":"Execute Admin Company Deletions Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/company-deletions/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/company-profile/cron":{"get":{"operationId":"get_admin_company_profile_cron","tags":["Admin"],"summary":"Retrieve Admin Company Profile Cron","description":"Retrieve Admin Company Profile Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/company-profile/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_company_profile_cron","tags":["Admin"],"summary":"Execute Admin Company Profile Cron","description":"Execute Admin Company Profile Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/company-profile/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/company-read-access":{"get":{"operationId":"get_admin_company_read_access","tags":["Admin"],"summary":"Retrieve Admin Company Read Access","description":"Retrieve Admin Company Read Access.\n\nRequires authenticated internal-admin privileges.\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\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/admin/company-read-access.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"}}]},"post":{"operationId":"post_admin_company_read_access","tags":["Admin"],"summary":"Execute Admin Company Read Access","description":"Execute Admin Company Read Access.\n\nRequires authenticated internal-admin privileges.\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\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/company-read-access.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"}}]},"delete":{"operationId":"delete_admin_company_read_access","tags":["Admin"],"summary":"Delete Admin Company Read Access","description":"Delete Admin Company Read Access.\n\nRequires authenticated internal-admin privileges.\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\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/company-read-access.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/admin/customer-history":{"get":{"operationId":"get_admin_customer_history","tags":["Admin"],"summary":"Retrieve Admin Customer History","description":"Retrieve Admin Customer History.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/customer-history.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},"post":{"operationId":"post_admin_customer_history","tags":["Admin"],"summary":"Execute Admin Customer History","description":"Execute Admin Customer History.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/customer-history.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}},"/api/admin/customer-outreach":{"get":{"operationId":"get_admin_customer_outreach","tags":["Admin"],"summary":"Retrieve Admin Customer Outreach","description":"Retrieve Admin Customer Outreach.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/customer-outreach.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},"post":{"operationId":"post_admin_customer_outreach","tags":["Admin"],"summary":"Execute Admin Customer Outreach","description":"Execute Admin Customer Outreach.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `action`.\n\nSource handler: `pages/api/admin/customer-outreach.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."}},"additionalProperties":true}}}}}},"/api/admin/customer-outreach/cron":{"get":{"operationId":"get_admin_customer_outreach_cron","tags":["Admin"],"summary":"Retrieve Admin Customer Outreach Cron","description":"Retrieve Admin Customer Outreach Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `limit`.\n\nSource handler: `pages/api/admin/customer-outreach/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"post":{"operationId":"post_admin_customer_outreach_cron","tags":["Admin"],"summary":"Execute Admin Customer Outreach Cron","description":"Execute Admin Customer Outreach Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nJSON body keys used by this method: `limit`.\n\nCommon query parameters: `limit`.\n\nSource handler: `pages/api/admin/customer-outreach/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `limit`.","content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Limit payload field."}},"additionalProperties":true}}}}}},"/api/admin/docs-reader/deletion-retry-cron":{"get":{"operationId":"get_admin_docs_reader_deletion_retry_cron","tags":["Admin"],"summary":"Retrieve Admin Docs Reader Deletion Retry Cron","description":"Retrieve Admin Docs Reader Deletion Retry Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/docs-reader/deletion-retry-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_docs_reader_deletion_retry_cron","tags":["Admin"],"summary":"Execute Admin Docs Reader Deletion Retry Cron","description":"Execute Admin Docs Reader Deletion Retry Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/docs-reader/deletion-retry-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/document-conversion-files":{"get":{"operationId":"get_admin_document_conversion_files","tags":["Admin"],"summary":"Retrieve Admin Document Conversion Files","description":"Retrieve Admin Document Conversion Files.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `company_id`, `limit`, `search`, `status`.\n\nSource handler: `pages/api/admin/document-conversion-files.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-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":"company_id","in":"query","required":false,"description":"Company Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Company Id. Use an identifier returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]}},"/api/admin/document-conversion-files/{id}/confirm":{"post":{"operationId":"post_admin_document_conversion_files_id_confirm","tags":["Admin"],"summary":"Execute Admin Document Conversion Files By Id Confirm","description":"Execute Admin Document Conversion Files By Id Confirm.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `secondaryCsvContent`, `transactions`.\n\nSource handler: `pages/api/admin/document-conversion-files/[id]/confirm.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `secondaryCsvContent`, `transactions`.","content":{"application/json":{"schema":{"type":"object","properties":{"secondaryCsvContent":{"type":"string","description":"SecondaryCsvContent payload field."},"transactions":{"type":"string","description":"Transactions payload field."}},"additionalProperties":true}}}}}},"/api/admin/document-conversion-files/{id}/extract":{"get":{"operationId":"get_admin_document_conversion_files_id_extract","tags":["Admin"],"summary":"Retrieve Admin Document Conversion Files By Id Extract","description":"Retrieve Admin Document Conversion Files By Id Extract.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/document-conversion-files/[id]/extract.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"post":{"operationId":"post_admin_document_conversion_files_id_extract","tags":["Admin"],"summary":"Execute Admin Document Conversion Files By Id Extract","description":"Execute Admin Document Conversion Files By Id Extract.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/document-conversion-files/[id]/extract.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/admin/document-conversion-files/{id}/incremental-cache":{"get":{"operationId":"get_admin_document_conversion_files_id_incremental_cache","tags":["Admin"],"summary":"Retrieve Admin Document Conversion Files By Id Incremental Cache","description":"Retrieve Admin Document Conversion Files By Id Incremental Cache.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/document-conversion-files/[id]/incremental-cache.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"delete":{"operationId":"delete_admin_document_conversion_files_id_incremental_cache","tags":["Admin"],"summary":"Delete Admin Document Conversion Files By Id Incremental Cache","description":"Delete Admin Document Conversion Files By Id Incremental Cache.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/document-conversion-files/[id]/incremental-cache.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/admin/document-conversion-files/{id}/incremental-extract":{"post":{"operationId":"post_admin_document_conversion_files_id_incremental_extract","tags":["Admin"],"summary":"Execute Admin Document Conversion Files By Id Incremental Extract","description":"Execute Admin Document Conversion Files By Id Incremental Extract.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/document-conversion-files/[id]/incremental-extract.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/admin/document-conversion-files/{id}/preview":{"get":{"operationId":"get_admin_document_conversion_files_id_preview","tags":["Admin"],"summary":"Retrieve Admin Document Conversion Files By Id Preview","description":"Retrieve Admin Document Conversion Files By Id Preview.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nPreview endpoint used to inspect impact before committing changes.\n\nSource handler: `pages/api/admin/document-conversion-files/[id]/preview.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/admin/document-conversions/confirm-cron":{"get":{"operationId":"get_admin_document_conversions_confirm_cron","tags":["Admin"],"summary":"Retrieve Admin Document Conversions Confirm Cron","description":"Retrieve Admin Document Conversions Confirm Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/document-conversions/confirm-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_document_conversions_confirm_cron","tags":["Admin"],"summary":"Execute Admin Document Conversions Confirm Cron","description":"Execute Admin Document Conversions Confirm Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/document-conversions/confirm-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/experiment-targets":{"get":{"operationId":"get_admin_experiment_targets","tags":["Admin"],"summary":"Retrieve Admin Experiment Targets","description":"Retrieve Admin Experiment Targets.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `experimentKey`.\n\nSource handler: `pages/api/admin/experiment-targets/index.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-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":"experimentKey","in":"query","required":false,"description":"ExperimentKey filter or option.","schema":{"type":"string","description":"ExperimentKey filter or option."}}]},"put":{"operationId":"put_admin_experiment_targets","tags":["Admin"],"summary":"Replace Admin Experiment Targets","description":"Replace Admin Experiment Targets.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `experimentKey`.\n\nSource handler: `pages/api/admin/experiment-targets/index.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,"parameters":[{"name":"experimentKey","in":"query","required":false,"description":"ExperimentKey filter or option.","schema":{"type":"string","description":"ExperimentKey filter or option."}}]},"delete":{"operationId":"delete_admin_experiment_targets","tags":["Admin"],"summary":"Delete Admin Experiment Targets","description":"Delete Admin Experiment Targets.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `experimentKey`.\n\nSource handler: `pages/api/admin/experiment-targets/index.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,"parameters":[{"name":"experimentKey","in":"query","required":false,"description":"ExperimentKey filter or option.","schema":{"type":"string","description":"ExperimentKey filter or option."}}]}},"/api/admin/experiment-targets/search":{"get":{"operationId":"get_admin_experiment_targets_search","tags":["Admin"],"summary":"Retrieve Admin Experiment Targets Search","description":"Retrieve Admin Experiment Targets Search.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `scope`, `search`.\n\nSource handler: `pages/api/admin/experiment-targets/search.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-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":"scope","in":"query","required":false,"description":"Scope filter or option.","schema":{"type":"string","description":"Scope filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]}},"/api/admin/experiments":{"get":{"operationId":"get_admin_experiments","tags":["Admin"],"summary":"Retrieve Admin Experiments","description":"Retrieve Admin Experiments.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/admin/experiments/index.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-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."}},"post":{"operationId":"post_admin_experiments","tags":["Admin"],"summary":"Execute Admin Experiments","description":"Execute Admin Experiments.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/experiments/index.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},"patch":{"operationId":"patch_admin_experiments","tags":["Admin"],"summary":"Update Admin Experiments","description":"Update Admin Experiments.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/experiments/index.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},"delete":{"operationId":"delete_admin_experiments","tags":["Admin"],"summary":"Delete Admin Experiments","description":"Delete Admin Experiments.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/experiments/index.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}},"/api/admin/fixed-assets/auto-post-cron":{"get":{"operationId":"get_admin_fixed_assets_auto_post_cron","tags":["Admin"],"summary":"Retrieve Admin Fixed Assets Auto Post Cron","description":"Retrieve Admin Fixed Assets Auto Post Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `companyId`, `force`, `periodDate`.\n\nSource handler: `pages/api/admin/fixed-assets/auto-post-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"force","in":"query","required":false,"description":"Force flag.","schema":{"type":"boolean","description":"Force flag."}},{"name":"periodDate","in":"query","required":false,"description":"PeriodDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"PeriodDate in YYYY-MM-DD format."}}]},"post":{"operationId":"post_admin_fixed_assets_auto_post_cron","tags":["Admin"],"summary":"Execute Admin Fixed Assets Auto Post Cron","description":"Execute Admin Fixed Assets Auto Post Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `companyId`, `force`, `periodDate`.\n\nSource handler: `pages/api/admin/fixed-assets/auto-post-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"force","in":"query","required":false,"description":"Force flag.","schema":{"type":"boolean","description":"Force flag."}},{"name":"periodDate","in":"query","required":false,"description":"PeriodDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"PeriodDate in YYYY-MM-DD format."}}]}},"/api/admin/inbox-updates":{"get":{"operationId":"get_admin_inbox_updates","tags":["Admin"],"summary":"Retrieve Admin Inbox Updates","description":"Retrieve Admin Inbox Updates.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/admin/inbox-updates/index.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-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."}}},"/api/admin/inbox-updates/{slug}":{"get":{"operationId":"get_admin_inbox_updates_slug","tags":["Admin"],"summary":"Retrieve Admin Inbox Updates By Slug","description":"Retrieve Admin Inbox Updates By Slug.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/inbox-updates/[slug].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,"parameters":[{"name":"slug","in":"path","required":true,"description":"Path identifier: slug","schema":{"type":"string"}}]},"patch":{"operationId":"patch_admin_inbox_updates_slug","tags":["Admin"],"summary":"Update Admin Inbox Updates By Slug","description":"Update Admin Inbox Updates By Slug.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/inbox-updates/[slug].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,"parameters":[{"name":"slug","in":"path","required":true,"description":"Path identifier: slug","schema":{"type":"string"}}]},"delete":{"operationId":"delete_admin_inbox_updates_slug","tags":["Admin"],"summary":"Delete Admin Inbox Updates By Slug","description":"Delete Admin Inbox Updates By Slug.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/inbox-updates/[slug].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,"parameters":[{"name":"slug","in":"path","required":true,"description":"Path identifier: slug","schema":{"type":"string"}}]}},"/api/admin/llm-usage/cron":{"get":{"operationId":"get_admin_llm_usage_cron","tags":["Admin"],"summary":"Retrieve Admin Llm Usage Cron","description":"Retrieve Admin Llm Usage Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/llm-usage/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_llm_usage_cron","tags":["Admin"],"summary":"Execute Admin Llm Usage Cron","description":"Execute Admin Llm Usage Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/llm-usage/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/marketing-leads":{"get":{"operationId":"get_admin_marketing_leads","tags":["Admin"],"summary":"Retrieve Admin Marketing Leads","description":"Retrieve Admin Marketing Leads.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/admin/marketing-leads.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-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."}},"patch":{"operationId":"patch_admin_marketing_leads","tags":["Admin"],"summary":"Update Admin Marketing Leads","description":"Update Admin Marketing Leads.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `action`, `id`.\n\nSource handler: `pages/api/admin/marketing-leads.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `id`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/admin/marketing-leads/retry-cron":{"get":{"operationId":"get_admin_marketing_leads_retry_cron","tags":["Admin"],"summary":"Retrieve Admin Marketing Leads Retry Cron","description":"Retrieve Admin Marketing Leads Retry Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/marketing-leads/retry-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/plaid/auto-sync-cron":{"get":{"operationId":"get_admin_plaid_auto_sync_cron","tags":["Admin"],"summary":"Retrieve Admin Plaid Auto Sync Cron","description":"Retrieve Admin Plaid Auto Sync Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `accountId`, `companyId`, `includeUnsynced`, `limit`.\n\nSource handler: `pages/api/admin/plaid/auto-sync-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"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":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"includeUnsynced","in":"query","required":false,"description":"IncludeUnsynced flag.","schema":{"type":"boolean","description":"IncludeUnsynced flag."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"post":{"operationId":"post_admin_plaid_auto_sync_cron","tags":["Admin"],"summary":"Sync Admin Plaid Auto Sync Cron","description":"Sync Admin Plaid Auto Sync Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `accountId`, `companyId`, `includeUnsynced`, `limit`.\n\nSource handler: `pages/api/admin/plaid/auto-sync-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"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":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"includeUnsynced","in":"query","required":false,"description":"IncludeUnsynced flag.","schema":{"type":"boolean","description":"IncludeUnsynced flag."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]}},"/api/admin/plaid/initial-import-cron":{"get":{"operationId":"get_admin_plaid_initial_import_cron","tags":["Admin"],"summary":"Retrieve Admin Plaid Initial Import Cron","description":"Retrieve Admin Plaid Initial Import Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/admin/plaid/initial-import-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/plaid/statements-cron":{"get":{"operationId":"get_admin_plaid_statements_cron","tags":["Admin"],"summary":"Retrieve Admin Plaid Statements Cron","description":"Retrieve Admin Plaid Statements Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/plaid/statements-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/quickbooks/clearing-status-backfill":{"post":{"operationId":"post_admin_quickbooks_clearing_status_backfill","tags":["Admin"],"summary":"Execute Admin Quickbooks Clearing Status Backfill","description":"Execute Admin Quickbooks Clearing Status Backfill.\n\nRequires authenticated internal-admin privileges.\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\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/quickbooks/clearing-status-backfill.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/admin/quickbooks/import-existing-receivables":{"post":{"operationId":"post_admin_quickbooks_import_existing_receivables","tags":["Admin"],"summary":"Import Admin Quickbooks Import Existing Receivables","description":"Import Admin Quickbooks Import Existing Receivables.\n\nRequires authenticated internal-admin privileges.\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\nInternal operations endpoint intended for admin workflows.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/admin/quickbooks/import-existing-receivables.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/admin/quickbooks/import-live":{"post":{"operationId":"post_admin_quickbooks_import_live","tags":["Admin"],"summary":"Import Admin Quickbooks Import Live","description":"Import Admin Quickbooks Import Live.\n\nRequires authenticated internal-admin privileges.\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\nInternal operations endpoint intended for admin workflows.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/admin/quickbooks/import-live.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/admin/quickbooks/migration-tests":{"get":{"operationId":"get_admin_quickbooks_migration_tests","tags":["Admin"],"summary":"Retrieve Admin Quickbooks Migration Tests","description":"Retrieve Admin Quickbooks Migration Tests.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `runId`.\n\nSource handler: `pages/api/admin/quickbooks/migration-tests.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-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":"runId","in":"query","required":false,"description":"RunId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RunId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_admin_quickbooks_migration_tests","tags":["Admin"],"summary":"Execute Admin Quickbooks Migration Tests","description":"Execute Admin Quickbooks Migration Tests.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `runId`.\n\nSource handler: `pages/api/admin/quickbooks/migration-tests.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,"parameters":[{"name":"runId","in":"query","required":false,"description":"RunId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RunId. Use an identifier returned by Wesley."}}]}},"/api/admin/quickbooks/post-journals":{"post":{"operationId":"post_admin_quickbooks_post_journals","tags":["Admin"],"summary":"Execute Admin Quickbooks Post Journals","description":"Execute Admin Quickbooks Post Journals.\n\nRequires authenticated internal-admin privileges.\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\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/quickbooks/post-journals.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/admin/quickbooks/rollback-created-import-entries":{"post":{"operationId":"post_admin_quickbooks_rollback_created_import_entries","tags":["Admin"],"summary":"Create Admin Quickbooks Rollback Created Import Entries","description":"Create Admin Quickbooks Rollback Created Import Entries.\n\nRequires authenticated internal-admin privileges.\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\nInternal operations endpoint intended for admin workflows.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/admin/quickbooks/rollback-created-import-entries.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/admin/quickbooks/token-refresh-cron":{"get":{"operationId":"get_admin_quickbooks_token_refresh_cron","tags":["Admin"],"summary":"Retrieve Admin Quickbooks Token Refresh Cron","description":"Retrieve Admin Quickbooks Token Refresh Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `companyId`, `limit`.\n\nSource handler: `pages/api/admin/quickbooks/token-refresh-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"post":{"operationId":"post_admin_quickbooks_token_refresh_cron","tags":["Admin"],"summary":"Execute Admin Quickbooks Token Refresh Cron","description":"Execute Admin Quickbooks Token Refresh Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `companyId`, `limit`.\n\nSource handler: `pages/api/admin/quickbooks/token-refresh-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]}},"/api/admin/recommendation-quality":{"get":{"operationId":"get_admin_recommendation_quality","tags":["Admin"],"summary":"Retrieve Admin Recommendation Quality","description":"Retrieve Admin Recommendation Quality.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nCommon query parameters: `accounting_firm_id`, `company_ids`, `end_date`, `group_by`, `historic_basis`, `metric`, `start_date`, `time_zone`.\n\nSource handler: `pages/api/admin/recommendation-quality.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,"parameters":[{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting Firm Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Accounting Firm Id. Use an identifier returned by Wesley."}},{"name":"company_ids","in":"query","required":false,"description":"Company Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Company 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":"group_by","in":"query","required":false,"description":"Group By filter or option.","schema":{"type":"string","description":"Group By filter or option."}},{"name":"historic_basis","in":"query","required":false,"description":"Historic Basis filter or option.","schema":{"type":"string","description":"Historic Basis filter or option."}},{"name":"metric","in":"query","required":false,"description":"Metric filter or option.","schema":{"type":"string","description":"Metric 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":"time_zone","in":"query","required":false,"description":"Time Zone filter or option.","schema":{"type":"string","description":"Time Zone filter or option."}}]}},"/api/admin/recommendation-quality/clients":{"get":{"operationId":"get_admin_recommendation_quality_clients","tags":["Admin"],"summary":"Retrieve Admin Recommendation Quality Clients","description":"Retrieve Admin Recommendation Quality Clients.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `accounting_firm_id`, `search`.\n\nSource handler: `pages/api/admin/recommendation-quality/clients.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-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":"accounting_firm_id","in":"query","required":false,"description":"Accounting Firm Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Accounting Firm Id. Use an identifier returned by Wesley."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]}},"/api/admin/recommendation-quality/cron":{"get":{"operationId":"get_admin_recommendation_quality_cron","tags":["Admin"],"summary":"Retrieve Admin Recommendation Quality Cron","description":"Retrieve Admin Recommendation Quality Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/admin/recommendation-quality/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_recommendation_quality_cron","tags":["Admin"],"summary":"Generate Admin Recommendation Quality Cron","description":"Generate Admin Recommendation Quality Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/admin/recommendation-quality/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/recommendation-quality/simulate":{"post":{"operationId":"post_admin_recommendation_quality_simulate","tags":["Admin"],"summary":"Generate Admin Recommendation Quality Simulate","description":"Generate Admin Recommendation Quality Simulate.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nJSON body keys used by this method: `companyId`.\n\nSource handler: `pages/api/admin/recommendation-quality/simulate.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `companyId`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/admin/recurring-bills/cron":{"get":{"operationId":"get_admin_recurring_bills_cron","tags":["Admin"],"summary":"Retrieve Admin Recurring Bills Cron","description":"Retrieve Admin Recurring Bills Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/recurring-bills/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/recurring-invoices/cron":{"get":{"operationId":"get_admin_recurring_invoices_cron","tags":["Admin"],"summary":"Retrieve Admin Recurring Invoices Cron","description":"Retrieve Admin Recurring Invoices Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `asOfDate`, `companyId`, `limit`.\n\nSource handler: `pages/api/admin/recurring-invoices/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"asOfDate","in":"query","required":false,"description":"AsOfDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"AsOfDate in YYYY-MM-DD format."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"post":{"operationId":"post_admin_recurring_invoices_cron","tags":["Admin"],"summary":"Execute Admin Recurring Invoices Cron","description":"Execute Admin Recurring Invoices Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `asOfDate`, `companyId`, `limit`.\n\nSource handler: `pages/api/admin/recurring-invoices/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"asOfDate","in":"query","required":false,"description":"AsOfDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"AsOfDate in YYYY-MM-DD format."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]}},"/api/admin/recurring-journal-entries/cron":{"get":{"operationId":"get_admin_recurring_journal_entries_cron","tags":["Admin"],"summary":"Retrieve Admin Recurring Journal Entries Cron","description":"Retrieve Admin Recurring Journal Entries Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `asOfDate`, `companyId`, `limit`.\n\nSource handler: `pages/api/admin/recurring-journal-entries/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"asOfDate","in":"query","required":false,"description":"AsOfDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"AsOfDate in YYYY-MM-DD format."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"post":{"operationId":"post_admin_recurring_journal_entries_cron","tags":["Admin"],"summary":"Execute Admin Recurring Journal Entries Cron","description":"Execute Admin Recurring Journal Entries Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `asOfDate`, `companyId`, `limit`.\n\nSource handler: `pages/api/admin/recurring-journal-entries/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"asOfDate","in":"query","required":false,"description":"AsOfDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"AsOfDate in YYYY-MM-DD format."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]}},"/api/admin/referrals":{"get":{"operationId":"get_admin_referrals","tags":["Admin"],"summary":"Retrieve Admin Referrals","description":"Retrieve Admin Referrals.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `period`.\n\nSource handler: `pages/api/admin/referrals.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-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":"period","in":"query","required":false,"description":"Period filter or option.","schema":{"type":"string","description":"Period filter or option."}}]}},"/api/admin/retention-analysis":{"get":{"operationId":"get_admin_retention_analysis","tags":["Admin"],"summary":"Retrieve Admin Retention Analysis","description":"Retrieve Admin Retention Analysis.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `accountingFirmId`.\n\nSource handler: `pages/api/admin/retention-analysis.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-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":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}}]}},"/api/admin/retention-analysis/human-action-cohort-mrr":{"get":{"operationId":"get_admin_retention_analysis_human_action_cohort_mrr","tags":["Admin"],"summary":"Retrieve Admin Retention Analysis Human Action Cohort Mrr","description":"Retrieve Admin Retention Analysis Human Action Cohort Mrr.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `accountingFirmId`.\n\nSource handler: `pages/api/admin/retention-analysis/human-action-cohort-mrr.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,"parameters":[{"name":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}}]}},"/api/admin/retention-analysis/human-action-cohorts":{"get":{"operationId":"get_admin_retention_analysis_human_action_cohorts","tags":["Admin"],"summary":"Retrieve Admin Retention Analysis Human Action Cohorts","description":"Retrieve Admin Retention Analysis Human Action Cohorts.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `accountingFirmId`.\n\nSource handler: `pages/api/admin/retention-analysis/human-action-cohorts.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-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":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}}]}},"/api/admin/square/token-refresh-cron":{"get":{"operationId":"get_admin_square_token_refresh_cron","tags":["Admin"],"summary":"Retrieve Admin Square Token Refresh Cron","description":"Retrieve Admin Square Token Refresh Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `companyId`, `limit`.\n\nSource handler: `pages/api/admin/square/token-refresh-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"post":{"operationId":"post_admin_square_token_refresh_cron","tags":["Admin"],"summary":"Execute Admin Square Token Refresh Cron","description":"Execute Admin Square Token Refresh Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `companyId`, `limit`.\n\nSource handler: `pages/api/admin/square/token-refresh-cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]}},"/api/admin/support-agent-controls":{"post":{"operationId":"post_admin_support_agent_controls","tags":["Admin"],"summary":"Execute Admin Support Agent Controls","description":"Execute Admin Support Agent Controls.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `action`, `assigneeSlackId`, `attachments`, `inquiryId`, `instructions`, `requestId`.\n\nSource handler: `pages/api/admin/support-agent-controls.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":[]}],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `assigneeSlackId`, `attachments`, `inquiryId`, `instructions`, `requestId`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"assigneeSlackId":{"type":"string","description":"AssigneeSlackId. Use an identifier returned by Wesley."},"attachments":{"type":"string","description":"Attachments payload field."},"inquiryId":{"type":"string","description":"InquiryId. Use an identifier returned by Wesley."},"instructions":{"type":"string","description":"Instructions payload field."},"requestId":{"type":"string","description":"RequestId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/admin/support-agent-inquiry":{"patch":{"operationId":"patch_admin_support_agent_inquiry","tags":["Admin"],"summary":"Update Admin Support Agent Inquiry","description":"Update Admin Support Agent Inquiry.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `disposition`, `inquiryId`, `workflowStatus`.\n\nSource handler: `pages/api/admin/support-agent-inquiry.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":[]}],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `disposition`, `inquiryId`, `workflowStatus`.","content":{"application/json":{"schema":{"type":"object","properties":{"disposition":{"type":"string","description":"Disposition payload field."},"inquiryId":{"type":"string","description":"InquiryId. Use an identifier returned by Wesley."},"workflowStatus":{"type":"string","description":"WorkflowStatus payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_admin_support_agent_inquiry","tags":["Admin"],"summary":"Delete Admin Support Agent Inquiry","description":"Delete Admin Support Agent Inquiry.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `disposition`, `inquiryId`, `workflowStatus`.\n\nSource handler: `pages/api/admin/support-agent-inquiry.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":[]}],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `disposition`, `inquiryId`, `workflowStatus`.","content":{"application/json":{"schema":{"type":"object","properties":{"disposition":{"type":"string","description":"Disposition payload field."},"inquiryId":{"type":"string","description":"InquiryId. Use an identifier returned by Wesley."},"workflowStatus":{"type":"string","description":"WorkflowStatus payload field."}},"additionalProperties":true}}}}}},"/api/admin/support-agent-runs":{"get":{"operationId":"get_admin_support_agent_runs","tags":["Admin"],"summary":"Retrieve Admin Support Agent Runs","description":"Retrieve Admin Support Agent Runs.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `days`, `disposition`, `id`, `inquiryId`, `issueId`, `metricPeriods`, `operationalStates`, `page`, `runKey`, `simulation`, `snapshot`, `source`, ....\n\nSource handler: `pages/api/admin/support-agent-runs.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":[]}],"x-wesley-personal-api-key":false,"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":"days","in":"query","required":false,"description":"Days filter or option.","schema":{"type":"string","description":"Days filter or option."}},{"name":"disposition","in":"query","required":false,"description":"Disposition filter or option.","schema":{"type":"string","description":"Disposition filter or option."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"inquiryId","in":"query","required":false,"description":"InquiryId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"InquiryId. Use an identifier returned by Wesley."}},{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"metricPeriods","in":"query","required":false,"description":"MetricPeriods filter or option.","schema":{"type":"string","description":"MetricPeriods filter or option."}},{"name":"operationalStates","in":"query","required":false,"description":"OperationalStates filter or option.","schema":{"type":"string","description":"OperationalStates filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"runKey","in":"query","required":false,"description":"RunKey filter or option.","schema":{"type":"string","description":"RunKey filter or option."}},{"name":"simulation","in":"query","required":false,"description":"Simulation filter or option.","schema":{"type":"string","description":"Simulation filter or option."}},{"name":"snapshot","in":"query","required":false,"description":"Snapshot filter or option.","schema":{"type":"string","description":"Snapshot filter or option."}},{"name":"source","in":"query","required":false,"description":"Source filter or option.","schema":{"type":"string","description":"Source filter or option."}},{"name":"stage","in":"query","required":false,"description":"Stage filter or option.","schema":{"type":"string","description":"Stage filter or option."}}]}},"/api/admin/support-agent-upload":{"post":{"operationId":"post_admin_support_agent_upload","tags":["Admin"],"summary":"Execute Admin Support Agent Upload","description":"Execute Admin Support Agent Upload.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/support-agent-upload.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":[]}],"x-wesley-personal-api-key":false}},"/api/admin/support-assignment-rules":{"get":{"operationId":"get_admin_support_assignment_rules","tags":["Admin"],"summary":"Retrieve Admin Support Assignment Rules","description":"Retrieve Admin Support Assignment Rules.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `refreshUsers`.\n\nSource handler: `pages/api/admin/support-assignment-rules.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":[]}],"x-wesley-personal-api-key":false,"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":"refreshUsers","in":"query","required":false,"description":"RefreshUsers filter or option.","schema":{"type":"string","description":"RefreshUsers filter or option."}}]},"post":{"operationId":"post_admin_support_assignment_rules","tags":["Admin"],"summary":"Execute Admin Support Assignment Rules","description":"Execute Admin Support Assignment Rules.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `policy`, `requestId`.\n\nCommon query parameters: `refreshUsers`.\n\nSource handler: `pages/api/admin/support-assignment-rules.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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"refreshUsers","in":"query","required":false,"description":"RefreshUsers filter or option.","schema":{"type":"string","description":"RefreshUsers filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `policy`, `requestId`.","content":{"application/json":{"schema":{"type":"object","properties":{"policy":{"type":"string","description":"Policy payload field."},"requestId":{"type":"string","description":"RequestId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/admin/support-inquiry-categories":{"get":{"operationId":"get_admin_support_inquiry_categories","tags":["Admin"],"summary":"Retrieve Admin Support Inquiry Categories","description":"Retrieve Admin Support Inquiry Categories.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `endDate`, `startDate`.\n\nSource handler: `pages/api/admin/support-inquiry-categories.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":[]}],"x-wesley-personal-api-key":false,"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":"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":"startDate","in":"query","required":false,"description":"StartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}}]},"post":{"operationId":"post_admin_support_inquiry_categories","tags":["Admin"],"summary":"Execute Admin Support Inquiry Categories","description":"Execute Admin Support Inquiry Categories.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `endDate`, `startDate`.\n\nSource handler: `pages/api/admin/support-inquiry-categories.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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"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":"startDate","in":"query","required":false,"description":"StartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}}]}},"/api/admin/support-inquiry-firms":{"post":{"operationId":"post_admin_support_inquiry_firms","tags":["Admin"],"summary":"Execute Admin Support Inquiry Firms","description":"Execute Admin Support Inquiry Firms.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `inquiryIds`.\n\nSource handler: `pages/api/admin/support-inquiry-firms.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":[]}],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `inquiryIds`.","content":{"application/json":{"schema":{"type":"object","properties":{"inquiryIds":{"type":"array","items":{"type":"string"},"description":"InquiryIds. Use identifiers returned by Wesley."}},"additionalProperties":true}}}}}},"/api/admin/support-product-audit":{"get":{"operationId":"get_admin_support_product_audit","tags":["Admin"],"summary":"Retrieve Admin Support Product Audit","description":"Retrieve Admin Support Product Audit.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nSource handler: `pages/api/admin/support-product-audit.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":[]}],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_support_product_audit","tags":["Admin"],"summary":"Execute Admin Support Product Audit","description":"Execute Admin Support Product Audit.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `action`, `capturedAt`, `category`, `query`.\n\nSource handler: `pages/api/admin/support-product-audit.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":[]}],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `capturedAt`, `category`, `query`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"capturedAt":{"type":"string","format":"date-time","description":"CapturedAt as an ISO 8601 date-time."},"category":{"type":"string","description":"Category payload field."},"query":{"type":"string","description":"Query payload field."}},"additionalProperties":true}}}}}},"/api/admin/support-weekly-summary":{"get":{"operationId":"get_admin_support_weekly_summary","tags":["Admin"],"summary":"Get Admin Support Weekly Summary","description":"Get Admin Support Weekly Summary.\n\nRequires authenticated user context.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `endDate`, `startDate`.\n\nSource handler: `pages/api/admin/support-weekly-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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"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":"startDate","in":"query","required":false,"description":"StartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}}]}},"/api/admin/users/search":{"get":{"operationId":"get_admin_users_search","tags":["Admin"],"summary":"Retrieve Admin Users Search","description":"Retrieve Admin Users Search.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `auditUserIds`.\n\nSource handler: `pages/api/admin/users/search.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,"parameters":[{"name":"auditUserIds","in":"query","required":false,"description":"AuditUserIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"AuditUserIds. Use identifiers returned by Wesley."}}]}},"/api/admin/w9-follow-ups/cron":{"get":{"operationId":"get_admin_w9_follow_ups_cron","tags":["Admin"],"summary":"Retrieve Admin W9 Follow Ups Cron","description":"Retrieve Admin W9 Follow Ups Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/w9-follow-ups/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_admin_w9_follow_ups_cron","tags":["Admin"],"summary":"Execute Admin W9 Follow Ups Cron","description":"Execute Admin W9 Follow Ups Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nSource handler: `pages/api/admin/w9-follow-ups/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/admin/workspace-support-inactivity/cron":{"get":{"operationId":"get_admin_workspace_support_inactivity_cron","tags":["Admin"],"summary":"Retrieve Admin Workspace Support Inactivity Cron","description":"Retrieve Admin Workspace Support Inactivity Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nCommon query parameters: `limit`.\n\nSource handler: `pages/api/admin/workspace-support-inactivity/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"post":{"operationId":"post_admin_workspace_support_inactivity_cron","tags":["Admin"],"summary":"Execute Admin Workspace Support Inactivity Cron","description":"Execute Admin Workspace Support Inactivity Cron.\n\nNo user authentication is explicitly enforced in this handler.\n\nInternal operations endpoint intended for admin workflows.\n\nScheduled-task endpoint intended for background automation.\n\nJSON body keys used by this method: `limit`.\n\nCommon query parameters: `limit`.\n\nSource handler: `pages/api/admin/workspace-support-inactivity/cron.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `limit`.","content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Limit payload field."}},"additionalProperties":true}}}}}},"/api/admin/workspace-support-issue-groups":{"get":{"operationId":"get_admin_workspace_support_issue_groups","tags":["Admin"],"summary":"Retrieve Admin Workspace Support Issue Groups","description":"Retrieve Admin Workspace Support Issue Groups.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `issueId`, `search`, `ticketSearch`.\n\nSource handler: `pages/api/admin/workspace-support-issue-groups.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-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":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"ticketSearch","in":"query","required":false,"description":"TicketSearch filter or option.","schema":{"type":"string","description":"TicketSearch filter or option."}}]},"post":{"operationId":"post_admin_workspace_support_issue_groups","tags":["Admin"],"summary":"Execute Admin Workspace Support Issue Groups","description":"Execute Admin Workspace Support Issue Groups.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `issueId`, `search`, `ticketSearch`.\n\nSource handler: `pages/api/admin/workspace-support-issue-groups.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,"parameters":[{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"ticketSearch","in":"query","required":false,"description":"TicketSearch filter or option.","schema":{"type":"string","description":"TicketSearch filter or option."}}]},"delete":{"operationId":"delete_admin_workspace_support_issue_groups","tags":["Admin"],"summary":"Delete Admin Workspace Support Issue Groups","description":"Delete Admin Workspace Support Issue Groups.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCommon query parameters: `issueId`, `search`, `ticketSearch`.\n\nSource handler: `pages/api/admin/workspace-support-issue-groups.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,"parameters":[{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"ticketSearch","in":"query","required":false,"description":"TicketSearch filter or option.","schema":{"type":"string","description":"TicketSearch filter or option."}}]}},"/api/admin/workspace-support-issues":{"get":{"operationId":"get_admin_workspace_support_issues","tags":["Admin"],"summary":"Retrieve Admin Workspace Support Issues","description":"Retrieve Admin Workspace Support Issues.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `archived`, `capabilities`, `clientSearch`, `issueId`, `page`, `readOnly`, `search`, `unreadOnly`, `workspaceId`, `workspaceSearch`.\n\nSource handler: `pages/api/admin/workspace-support-issues.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-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":"archived","in":"query","required":false,"description":"Archived filter or option.","schema":{"type":"string","description":"Archived filter or option."}},{"name":"capabilities","in":"query","required":false,"description":"Capabilities filter or option.","schema":{"type":"string","description":"Capabilities filter or option."}},{"name":"clientSearch","in":"query","required":false,"description":"ClientSearch filter or option.","schema":{"type":"string","description":"ClientSearch filter or option."}},{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"readOnly","in":"query","required":false,"description":"ReadOnly filter or option.","schema":{"type":"string","description":"ReadOnly filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"unreadOnly","in":"query","required":false,"description":"UnreadOnly filter or option.","schema":{"type":"string","description":"UnreadOnly filter or option."}},{"name":"workspaceId","in":"query","required":false,"description":"WorkspaceId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"WorkspaceId. Use an identifier returned by Wesley."}},{"name":"workspaceSearch","in":"query","required":false,"description":"WorkspaceSearch filter or option.","schema":{"type":"string","description":"WorkspaceSearch filter or option."}}]},"post":{"operationId":"post_admin_workspace_support_issues","tags":["Admin"],"summary":"Execute Admin Workspace Support Issues","description":"Execute Admin Workspace Support Issues.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `accountingFirmId`, `action`, `assignedToUserId`, `body`, `clientIds`, `commentId`, `description`, `fileName`, `parentCommentId`, `pathname`, `scopeType`, `status`, ....\n\nCommon query parameters: `archived`, `capabilities`, `clientSearch`, `issueId`, `page`, `readOnly`, `search`, `unreadOnly`, `workspaceId`, `workspaceSearch`.\n\nSource handler: `pages/api/admin/workspace-support-issues.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,"parameters":[{"name":"archived","in":"query","required":false,"description":"Archived filter or option.","schema":{"type":"string","description":"Archived filter or option."}},{"name":"capabilities","in":"query","required":false,"description":"Capabilities filter or option.","schema":{"type":"string","description":"Capabilities filter or option."}},{"name":"clientSearch","in":"query","required":false,"description":"ClientSearch filter or option.","schema":{"type":"string","description":"ClientSearch filter or option."}},{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"readOnly","in":"query","required":false,"description":"ReadOnly filter or option.","schema":{"type":"string","description":"ReadOnly filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"unreadOnly","in":"query","required":false,"description":"UnreadOnly filter or option.","schema":{"type":"string","description":"UnreadOnly filter or option."}},{"name":"workspaceId","in":"query","required":false,"description":"WorkspaceId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"WorkspaceId. Use an identifier returned by Wesley."}},{"name":"workspaceSearch","in":"query","required":false,"description":"WorkspaceSearch filter or option.","schema":{"type":"string","description":"WorkspaceSearch filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `accountingFirmId`, `action`, `assignedToUserId`, `body`, `clientIds`, `commentId`, `description`, `fileName`, `parentCommentId`, `pathname`, `scopeType`, `status`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"accountingFirmId":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."},"action":{"type":"string","description":"Action payload field."},"assignedToUserId":{"type":"string","description":"AssignedToUserId. Use an identifier returned by Wesley."},"body":{"type":"string","description":"Body payload field."},"clientIds":{"type":"array","items":{"type":"string"},"description":"ClientIds. Use identifiers returned by Wesley."},"commentId":{"type":"string","description":"CommentId. Use an identifier returned by Wesley."},"description":{"type":"string","description":"Description payload field."},"fileName":{"type":"string","description":"FileName payload field."},"parentCommentId":{"type":"string","description":"ParentCommentId. Use an identifier returned by Wesley."},"pathname":{"type":"string","description":"Pathname payload field."},"scopeType":{"type":"string","description":"ScopeType payload field."},"status":{"type":"string","description":"Status payload field."},"title":{"type":"string","description":"Title payload field."},"urgent":{"type":"string","description":"Urgent payload field."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_admin_workspace_support_issues","tags":["Admin"],"summary":"Update Admin Workspace Support Issues","description":"Update Admin Workspace Support Issues.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nInternal operations endpoint intended for admin workflows.\n\nJSON body keys used by this method: `accountingFirmId`, `action`, `assignedToUserId`, `body`, `clientIds`, `commentId`, `description`, `fileName`, `parentCommentId`, `pathname`, `scopeType`, `status`, ....\n\nCommon query parameters: `archived`, `capabilities`, `clientSearch`, `issueId`, `page`, `readOnly`, `search`, `unreadOnly`, `workspaceId`, `workspaceSearch`.\n\nSource handler: `pages/api/admin/workspace-support-issues.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,"parameters":[{"name":"archived","in":"query","required":false,"description":"Archived filter or option.","schema":{"type":"string","description":"Archived filter or option."}},{"name":"capabilities","in":"query","required":false,"description":"Capabilities filter or option.","schema":{"type":"string","description":"Capabilities filter or option."}},{"name":"clientSearch","in":"query","required":false,"description":"ClientSearch filter or option.","schema":{"type":"string","description":"ClientSearch filter or option."}},{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"readOnly","in":"query","required":false,"description":"ReadOnly filter or option.","schema":{"type":"string","description":"ReadOnly filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"unreadOnly","in":"query","required":false,"description":"UnreadOnly filter or option.","schema":{"type":"string","description":"UnreadOnly filter or option."}},{"name":"workspaceId","in":"query","required":false,"description":"WorkspaceId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"WorkspaceId. Use an identifier returned by Wesley."}},{"name":"workspaceSearch","in":"query","required":false,"description":"WorkspaceSearch filter or option.","schema":{"type":"string","description":"WorkspaceSearch filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `accountingFirmId`, `action`, `assignedToUserId`, `body`, `clientIds`, `commentId`, `description`, `fileName`, `parentCommentId`, `pathname`, `scopeType`, `status`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"accountingFirmId":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."},"action":{"type":"string","description":"Action payload field."},"assignedToUserId":{"type":"string","description":"AssignedToUserId. Use an identifier returned by Wesley."},"body":{"type":"string","description":"Body payload field."},"clientIds":{"type":"array","items":{"type":"string"},"description":"ClientIds. Use identifiers returned by Wesley."},"commentId":{"type":"string","description":"CommentId. Use an identifier returned by Wesley."},"description":{"type":"string","description":"Description payload field."},"fileName":{"type":"string","description":"FileName payload field."},"parentCommentId":{"type":"string","description":"ParentCommentId. Use an identifier returned by Wesley."},"pathname":{"type":"string","description":"Pathname payload field."},"scopeType":{"type":"string","description":"ScopeType payload field."},"status":{"type":"string","description":"Status payload field."},"title":{"type":"string","description":"Title payload field."},"urgent":{"type":"string","description":"Urgent payload field."}},"additionalProperties":true}}}}}},"/api/agent/attachments/prepare-shared-files":{"post":{"operationId":"post_agent_attachments_prepare_shared_files","tags":["Agent"],"summary":"Execute Agent Attachments Prepare Shared Files","description":"Execute Agent Attachments Prepare Shared Files.\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/agent/attachments/prepare-shared-files.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":true,"description":"Resolve files already uploaded with the current AI Agent turn into verified Shared Files inputs. Prefer the attachment IDs listed by the broker; if an older broker lists only filenames, send their exact names in `attachmentNames`. Pass the returned `files` unchanged to POST /api/shared-files with action `create-files`; never send file bytes or data URLs. Source handler: `pages/api/agent/attachments/prepare-shared-files.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"attachmentIds":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":120}},"attachmentNames":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":255}}},"required":["companyId"],"additionalProperties":false}}}}}},"/api/agent/browser-access/approve":{"post":{"operationId":"post_agent_browser_access_approve","tags":["Agent"],"summary":"Execute Agent Browser Access Approve","description":"Execute Agent Browser Access Approve.\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\nSource handler: `pages/api/agent/browser-access/approve.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}},"/api/agent/browser-access/deny":{"post":{"operationId":"post_agent_browser_access_deny","tags":["Agent"],"summary":"Execute Agent Browser Access Deny","description":"Execute Agent Browser Access Deny.\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\nSource handler: `pages/api/agent/browser-access/deny.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}},"/api/agent/browser-access/handoff":{"post":{"operationId":"post_agent_browser_access_handoff","tags":["Agent"],"summary":"Execute Agent Browser Access Handoff","description":"Execute Agent Browser Access Handoff.\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\nSource handler: `pages/api/agent/browser-access/handoff.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}},"/api/agent/browser-access/handoff/claim":{"post":{"operationId":"post_agent_browser_access_handoff_claim","tags":["Agent"],"summary":"Execute Agent Browser Access Handoff Claim","description":"Execute Agent Browser Access Handoff Claim.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/agent/browser-access/handoff/claim.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/agent/browser-access/inspect":{"get":{"operationId":"get_agent_browser_access_inspect","tags":["Agent"],"summary":"Retrieve Agent Browser Access Inspect","description":"Retrieve Agent Browser Access Inspect.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `token`.\n\nSource handler: `pages/api/agent/browser-access/inspect.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"token","in":"query","required":false,"description":"Token filter or option.","schema":{"type":"string","description":"Token filter or option."}}]}},"/api/agent/browser-access/request":{"post":{"operationId":"post_agent_browser_access_request","tags":["Agent"],"summary":"Execute Agent Browser Access Request","description":"Execute Agent Browser Access Request.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/agent/browser-access/request.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/agent/browser-access/token":{"post":{"operationId":"post_agent_browser_access_token","tags":["Agent"],"summary":"Execute Agent Browser Access Token","description":"Execute Agent Browser Access Token.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/agent/browser-access/token.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/agent/browser-access/verify":{"get":{"operationId":"get_agent_browser_access_verify","tags":["Agent"],"summary":"Retrieve Agent Browser Access Verify","description":"Retrieve Agent Browser Access Verify.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/agent/browser-access/verify.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/agent/emails/send":{"post":{"operationId":"post_agent_emails_send","tags":["Agent"],"summary":"Execute Agent Emails Send","description":"Execute Agent Emails Send.\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\nSource handler: `pages/api/agent/emails/send.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,"requestBody":{"required":true,"description":"Send one published Loops transactional email to one recipient. This is an external side effect: call it only after the user explicitly asks to send the email. Supply every required, case-sensitive template variable in `dataVariables`. A stable, unique `idempotencyKey` is required for the intended send so retries cannot deliver duplicates. This endpoint never adds the recipient to the Loops marketing audience. Source handler: `pages/api/agent/emails/send.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":320,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"transactionalId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]+$"},"dataVariables":{"default":{},"type":"object","additionalProperties":{"anyOf":[{"anyOf":[{"type":"string","maxLength":10000},{"type":"number"}]},{"maxItems":100,"type":"array","items":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","maxLength":10000},{"type":"number"}]}}}]}},"idempotencyKey":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9._:-]+$"}},"required":["email","transactionalId","idempotencyKey"]}}}}}},"/api/agent/payroll-history":{"get":{"operationId":"get_agent_payroll_history","tags":["Agent"],"summary":"Retrieve Agent Payroll History","description":"Retrieve Agent Payroll History.\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: `maxEntries`, `max_entries`, `scanLimit`, `scan_limit`, `targetDate`, `target_date`.\n\nSource handler: `pages/api/agent/payroll-history.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":"maxEntries","in":"query","required":false,"description":"MaxEntries filter or option.","schema":{"type":"string","description":"MaxEntries filter or option."}},{"name":"max_entries","in":"query","required":false,"description":"Max Entries filter or option.","schema":{"type":"string","description":"Max Entries filter or option."}},{"name":"scanLimit","in":"query","required":false,"description":"ScanLimit filter or option.","schema":{"type":"string","description":"ScanLimit filter or option."}},{"name":"scan_limit","in":"query","required":false,"description":"Scan Limit filter or option.","schema":{"type":"string","description":"Scan Limit filter or option."}},{"name":"targetDate","in":"query","required":false,"description":"TargetDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"TargetDate in YYYY-MM-DD format."}},{"name":"target_date","in":"query","required":false,"description":"Target Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Target Date in YYYY-MM-DD format."}}]}},"/api/agent/read-query":{"post":{"operationId":"post_agent_read_query","tags":["Agent"],"summary":"Execute Agent Read Query","description":"Execute Agent Read Query.\n\nRequires authenticated user context.\n\nSource handler: `pages/api/agent/read-query.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":[]}],"x-wesley-personal-api-key":false}},"/api/ai-agent/chat":{"post":{"operationId":"post_ai_agent_chat","tags":["Ai Agent"],"summary":"Execute Ai Agent Chat","description":"Execute Ai Agent Chat.\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\nSource handler: `pages/api/ai-agent/chat.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}},"/api/ai-agent/conversation-list":{"post":{"operationId":"post_ai_agent_conversation_list","tags":["Ai Agent"],"summary":"Execute Ai Agent Conversation List","description":"Execute Ai Agent Conversation List.\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\nSource handler: `pages/api/ai-agent/conversation-list.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}},"/api/ai/client-report-template":{"post":{"operationId":"post_ai_client_report_template","tags":["Ai"],"summary":"Execute Ai Client Report Template","description":"Execute Ai Client Report Template.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/client-report-template.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}},"/api/ai/custom-report":{"post":{"operationId":"post_ai_custom_report","tags":["Ai"],"summary":"Execute Ai Custom Report","description":"Execute Ai Custom Report.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/custom-report.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}},"/api/ai/group-vendor-names":{"post":{"operationId":"post_ai_group_vendor_names","tags":["Ai"],"summary":"Execute Ai Group Vendor Names","description":"Execute Ai Group Vendor Names.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/group-vendor-names.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/ai/infer-company-profile":{"post":{"operationId":"post_ai_infer_company_profile","tags":["Ai"],"summary":"Generate Ai Infer Company Profile","description":"Generate Ai Infer Company Profile.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/infer-company-profile.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/ai/prefill-external-account":{"post":{"operationId":"post_ai_prefill_external_account","tags":["Ai"],"summary":"Execute Ai Prefill External Account","description":"Execute Ai Prefill External 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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/prefill-external-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}},"/api/ai/recommend-check-categories":{"post":{"operationId":"post_ai_recommend_check_categories","tags":["Ai"],"summary":"Generate Ai Recommend Check Categories","description":"Generate Ai Recommend Check Categories.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/recommend-check-categories.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/ai/recommend-vendor":{"post":{"operationId":"post_ai_recommend_vendor","tags":["Ai"],"summary":"Generate Ai Recommend Vendor","description":"Generate Ai Recommend Vendor.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/recommend-vendor.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/ai/resolve-client-filters":{"post":{"operationId":"post_ai_resolve_client_filters","tags":["Ai"],"summary":"Generate Ai Resolve Client Filters","description":"Generate Ai Resolve Client Filters.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nJSON body keys used by this method: `availableAssignees`, `availableIndustries`, `currentFilters`, `prompt`, `timezone`, `today`.\n\nSource handler: `pages/api/ai/resolve-client-filters.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `availableAssignees`, `availableIndustries`, `currentFilters`, `prompt`, `timezone`, `today`.","content":{"application/json":{"schema":{"type":"object","properties":{"availableAssignees":{"type":"string","description":"AvailableAssignees payload field."},"availableIndustries":{"type":"string","description":"AvailableIndustries payload field."},"currentFilters":{"type":"string","description":"CurrentFilters payload field."},"prompt":{"type":"string","description":"Prompt payload field."},"timezone":{"type":"string","description":"Timezone payload field."},"today":{"type":"string","description":"Today payload field."}},"additionalProperties":true}}}}}},"/api/ai/resolve-report-period":{"post":{"operationId":"post_ai_resolve_report_period","tags":["Ai"],"summary":"Generate Ai Resolve Report Period","description":"Generate Ai Resolve Report Period.\n\nNo user authentication is explicitly enforced in this handler.\n\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/resolve-report-period.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/ai/resolve-transaction-filters":{"post":{"operationId":"post_ai_resolve_transaction_filters","tags":["Ai"],"summary":"Generate Ai Resolve Transaction Filters","description":"Generate Ai Resolve Transaction Filters.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nJSON body keys used by this method: `availableSourceGroups`, `currentFilters`, `prompt`, `timezone`, `today`.\n\nSource handler: `pages/api/ai/resolve-transaction-filters.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `availableSourceGroups`, `currentFilters`, `prompt`, `timezone`, `today`.","content":{"application/json":{"schema":{"type":"object","properties":{"availableSourceGroups":{"type":"string","description":"AvailableSourceGroups payload field."},"currentFilters":{"type":"string","description":"CurrentFilters payload field."},"prompt":{"type":"string","description":"Prompt payload field."},"timezone":{"type":"string","description":"Timezone payload field."},"today":{"type":"string","description":"Today payload field."}},"additionalProperties":true}}}}}},"/api/ai/response-feedback":{"post":{"operationId":"post_ai_response_feedback","tags":["Ai"],"summary":"Execute Ai Response Feedback","description":"Execute Ai Response Feedback.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/response-feedback.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}},"/api/ai/review-issued-check-payee":{"post":{"operationId":"post_ai_review_issued_check_payee","tags":["Ai"],"summary":"Execute Ai Review Issued Check Payee","description":"Execute Ai Review Issued Check Payee.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/review-issued-check-payee.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/ai/statement-spreadsheet-mapping":{"post":{"operationId":"post_ai_statement_spreadsheet_mapping","tags":["Ai"],"summary":"Execute Ai Statement Spreadsheet Mapping","description":"Execute Ai Statement Spreadsheet Mapping.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nJSON body keys used by this method: `companyId`, `documentType`, `fileName`, `rows`, `sheetName`.\n\nSource handler: `pages/api/ai/statement-spreadsheet-mapping.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `companyId`, `documentType`, `fileName`, `rows`, `sheetName`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"documentType":{"type":"string","description":"DocumentType payload field."},"fileName":{"type":"string","description":"FileName payload field."},"rows":{"type":"string","description":"Rows payload field."},"sheetName":{"type":"string","description":"SheetName payload field."}},"additionalProperties":true}}}}}},"/api/ai/suggest-coa-account":{"post":{"operationId":"post_ai_suggest_coa_account","tags":["Ai"],"summary":"Generate Ai Suggest Coa Account","description":"Generate Ai Suggest Coa 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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/ai/suggest-coa-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}},"/api/ai/suggest-industries":{"get":{"operationId":"get_ai_suggest_industries","tags":["Ai"],"summary":"Retrieve Ai Suggest Industries","description":"Retrieve Ai Suggest Industries.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `q`.\n\nSource handler: `pages/api/ai/suggest-industries.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-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":"q","in":"query","required":false,"description":"Q filter or option.","schema":{"type":"string","description":"Q filter or option."}}]}},"/api/ap/check-runs/create":{"post":{"operationId":"post_ap_check_runs_create","tags":["Ap"],"summary":"Create Ap Check Runs Create","description":"Create Ap Check Runs Create.\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/ap/check-runs/create.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/ap/checks/{id}/print":{"get":{"operationId":"get_ap_checks_id_print","tags":["Ap"],"summary":"Retrieve Ap Checks By Id Print","description":"Retrieve Ap Checks By Id Print.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/ap/checks/[id]/print.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"post":{"operationId":"post_ap_checks_id_print","tags":["Ap"],"summary":"Execute Ap Checks By Id Print","description":"Execute Ap Checks By Id Print.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/ap/checks/[id]/print.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/ap/checks/create":{"post":{"operationId":"post_ap_checks_create","tags":["Ap"],"summary":"Create Ap Checks Create","description":"Create Ap Checks Create.\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/ap/checks/create.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/ap/documents":{"get":{"operationId":"get_ap_documents","tags":["Ap"],"summary":"Retrieve Ap Documents","description":"Retrieve Ap Documents.\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: `document_type`, `end_date`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `start_date`, `status`, `view`.\n\nSource handler: `pages/api/ap/documents.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":"document_type","in":"query","required":false,"description":"Document Type filter or option.","schema":{"type":"string","description":"Document Type 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":"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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"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":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]}},"/api/ap/documents/{id}":{"get":{"operationId":"get_ap_documents_id","tags":["Ap"],"summary":"Retrieve Ap Documents By Id","description":"Retrieve Ap Documents By Id.\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/ap/documents/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"put":{"operationId":"put_ap_documents_id","tags":["Ap"],"summary":"Replace Ap Documents By Id","description":"Replace Ap Documents By Id.\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/ap/documents/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"delete":{"operationId":"delete_ap_documents_id","tags":["Ap"],"summary":"Delete Ap Documents By Id","description":"Delete Ap Documents By Id.\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/ap/documents/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/ap/documents/{id}/void":{"get":{"operationId":"get_ap_documents_id_void","tags":["Ap"],"summary":"Retrieve Ap Documents By Id Void","description":"Retrieve Ap Documents By Id Void.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/ap/documents/[id]/void.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"post":{"operationId":"post_ap_documents_id_void","tags":["Ap"],"summary":"Execute Ap Documents By Id Void","description":"Execute Ap Documents By Id Void.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/ap/documents/[id]/void.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/ap/documents/create":{"post":{"operationId":"post_ap_documents_create","tags":["Ap"],"summary":"Create Ap Documents Create","description":"Create Ap Documents Create.\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/ap/documents/create.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/ap/documents/defaults":{"get":{"operationId":"get_ap_documents_defaults","tags":["Ap"],"summary":"Retrieve Ap Documents Defaults","description":"Retrieve Ap Documents Defaults.\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: `vendor_id`.\n\nSource handler: `pages/api/ap/documents/defaults.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":"vendor_id","in":"query","required":false,"description":"Vendor Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Vendor Id. Use an identifier returned by Wesley."}}]}},"/api/ap/payments/apply":{"get":{"operationId":"get_ap_payments_apply","tags":["Ap"],"summary":"Retrieve Ap Payments Apply","description":"Retrieve Ap Payments Apply.\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/ap/payments/apply.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"}}]},"post":{"operationId":"post_ap_payments_apply","tags":["Ap"],"summary":"Execute Ap Payments Apply","description":"Execute Ap Payments Apply.\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/ap/payments/apply.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/ap/payments/create":{"post":{"operationId":"post_ap_payments_create","tags":["Ap"],"summary":"Create Ap Payments Create","description":"Create Ap Payments Create.\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/ap/payments/create.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/ap/recurring-bills":{"get":{"operationId":"get_ap_recurring_bills","tags":["Ap"],"summary":"List recurring A/P bills","description":"Company-scoped templates with exact pagination and total template count. Does not post bills.\n\nRetrieve Ap Recurring Bills.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/ap/recurring-bills/index.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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":"page","in":"query","description":"Page number (1-based).","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","description":"Templates per page (maximum 100).","schema":{"type":"integer","default":50}}]},"post":{"operationId":"post_ap_recurring_bills","tags":["Ap"],"summary":"Create a recurring A/P bill template","description":"Stores a schedule without posting a bill or paying the vendor.\n\nExecute Ap Recurring Bills.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/ap/recurring-bills/index.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"requestBody":{"required":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/ap/recurring-bills/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"vendorId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"payableAccountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"lineItems":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"object","properties":{"productServiceId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"type":"string","minLength":1,"maxLength":2000},"amount":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":999999999.99,"multipleOf":0.01},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"classId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"locationId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["description","amount","accountId"],"additionalProperties":{}}},"memo":{"nullable":true,"type":"string","maxLength":4000},"notes":{"nullable":true,"type":"string","maxLength":10000},"frequency":{"type":"string","enum":["weekly","biweekly","monthly","quarterly","yearly"]},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"nextRunDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"nullable":true,"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"dueDays":{"type":"integer","minimum":0,"maximum":3650},"status":{"type":"string","enum":["active","paused"]}},"required":["name","vendorId","payableAccountId","lineItems","memo","notes","frequency","startDate","nextRunDate","endDate","dueDays","status"],"additionalProperties":false}}}}}},"/api/ap/recurring-bills/{id}":{"get":{"operationId":"get_ap_recurring_bills_id","tags":["Ap"],"summary":"Read a recurring A/P bill template","description":"Retrieve Ap Recurring Bills By Id.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/ap/recurring-bills/[id].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"put":{"operationId":"put_ap_recurring_bills_id","tags":["Ap"],"summary":"Edit or pause a recurring bill","description":"Requires expectedUpdatedAt. Changes affect future bills only.\n\nReplace Ap Recurring Bills By Id.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/ap/recurring-bills/[id].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/ap/recurring-bills/[id].ts`.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"expectedUpdatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"status":{"type":"string","enum":["active","paused"]}},"required":["expectedUpdatedAt","status"],"additionalProperties":false},{"type":"object","properties":{"expectedUpdatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"name":{"type":"string","minLength":1,"maxLength":200},"vendorId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"payableAccountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"lineItems":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"object","properties":{"productServiceId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"type":"string","minLength":1,"maxLength":2000},"amount":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":999999999.99,"multipleOf":0.01},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"classId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"locationId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["description","amount","accountId"],"additionalProperties":{}}},"memo":{"nullable":true,"type":"string","maxLength":4000},"notes":{"nullable":true,"type":"string","maxLength":10000},"frequency":{"type":"string","enum":["weekly","biweekly","monthly","quarterly","yearly"]},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"nextRunDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"nullable":true,"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"dueDays":{"type":"integer","minimum":0,"maximum":3650},"status":{"type":"string","enum":["active","paused"]}},"required":["expectedUpdatedAt","name","vendorId","payableAccountId","lineItems","memo","notes","frequency","startDate","nextRunDate","endDate","dueDays","status"],"additionalProperties":false}]}}}}},"delete":{"operationId":"delete_ap_recurring_bills_id","tags":["Ap"],"summary":"Delete a recurring bill template","description":"Stops future creation and preserves previously posted bills.\n\nDelete Ap Recurring Bills By Id.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/ap/recurring-bills/[id].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/ap/recurring-bills/[id].ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"expectedUpdatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["expectedUpdatedAt"],"additionalProperties":false}}}}}},"/api/ap/recurring-bills/{id}/run":{"post":{"operationId":"post_ap_recurring_bills_id_run","tags":["Ap"],"summary":"Create the next recurring A/P bill","description":"Posts one due occurrence as an unpaid bill. Retrying the same occurrence returns the original result.\n\nExecute Ap Recurring Bills By Id Run.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/ap/recurring-bills/[id]/run.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/ap/recurring-bills/[id]/run.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"scheduledFor":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"expectedUpdatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["scheduledFor","expectedUpdatedAt"],"additionalProperties":false}}}}}},"/api/ar/customers":{"get":{"operationId":"get_ar_customers","tags":["Ar"],"summary":"Retrieve Ar Customers","description":"Retrieve Ar Customers.\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: `active_only`, `include_stats`, `limit`, `page`, `page_size`, `search`.\n\nSource handler: `pages/api/ar/customers.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":"active_only","in":"query","required":false,"description":"Active Only filter or option.","schema":{"type":"string","description":"Active Only filter or option."}},{"name":"include_stats","in":"query","required":false,"description":"Include Stats flag.","schema":{"type":"boolean","description":"Include Stats flag."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]},"post":{"operationId":"post_ar_customers","tags":["Ar"],"summary":"Execute Ar Customers","description":"Execute Ar Customers.\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: `active_only`, `include_stats`, `limit`, `page`, `page_size`, `search`.\n\nSource handler: `pages/api/ar/customers.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":"active_only","in":"query","required":false,"description":"Active Only filter or option.","schema":{"type":"string","description":"Active Only filter or option."}},{"name":"include_stats","in":"query","required":false,"description":"Include Stats flag.","schema":{"type":"boolean","description":"Include Stats flag."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}],"requestBody":{"required":true,"description":"Create a customer in the selected company, including a firm's own ledger. Phone numbers are text and preserve country codes, leading zeros, formatting, and extensions. A name already owned by another payee returns 409 PAYEE_NAME_ALREADY_EXISTS with conflicts; review the existing record rather than retrying unchanged or creating a duplicate. Source handler: `pages/api/ar/customers.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":500},"email":{"nullable":true,"type":"string"},"defaultAccountId":{"description":"Default coding account for this payee. Any active chart account in the same company is allowed, including liabilities and equity. Defaults fill empty account selections; they do not recode existing entries.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"phone":{"nullable":true,"type":"string","maxLength":100},"alternatePhone":{"nullable":true,"type":"string","maxLength":100},"billingAddressLine1":{"nullable":true,"type":"string"},"billingAddressLine2":{"nullable":true,"type":"string"},"billingCity":{"nullable":true,"type":"string"},"billingState":{"nullable":true,"type":"string"},"billingPostalCode":{"nullable":true,"type":"string"},"billingCountry":{"nullable":true,"type":"string"}},"required":["displayName"]}}}}}},"/api/ar/customers/{id}":{"get":{"operationId":"get_ar_customers_id","tags":["Ar"],"summary":"Retrieve Ar Customers By Id","description":"Retrieve Ar Customers By Id.\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: `include_stats`.\n\nSource handler: `pages/api/ar/customers/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"include_stats","in":"query","required":false,"description":"Include Stats flag.","schema":{"type":"boolean","description":"Include Stats flag."}}]},"patch":{"operationId":"patch_ar_customers_id","tags":["Ar"],"summary":"Update Ar Customers By Id","description":"Update Ar Customers By Id.\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: `include_stats`.\n\nSource handler: `pages/api/ar/customers/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"include_stats","in":"query","required":false,"description":"Include Stats flag.","schema":{"type":"boolean","description":"Include Stats flag."}}],"requestBody":{"required":true,"description":"Update the selected customer. Omitted fields remain unchanged; pass null or an empty string to clear a phone number. Source handler: `pages/api/ar/customers/[id].ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":500},"email":{"nullable":true,"type":"string"},"defaultAccountId":{"description":"Default coding account for this payee. Any active chart account in the same company is allowed, including liabilities and equity. Defaults fill empty account selections; they do not recode existing entries.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"phone":{"nullable":true,"type":"string","maxLength":100},"alternatePhone":{"nullable":true,"type":"string","maxLength":100},"billingAddressLine1":{"nullable":true,"type":"string"},"billingAddressLine2":{"nullable":true,"type":"string"},"billingCity":{"nullable":true,"type":"string"},"billingState":{"nullable":true,"type":"string"},"billingPostalCode":{"nullable":true,"type":"string"},"billingCountry":{"nullable":true,"type":"string"},"isActive":{"type":"boolean"}}}}}}}},"/api/ar/customers/{id}/deletion":{"get":{"operationId":"get_ar_customers_id_deletion","tags":["Ar"],"summary":"Retrieve Ar Customers By Id Deletion","description":"Retrieve Ar Customers By Id Deletion.\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: `view`.\n\nSource handler: `pages/api/ar/customers/[id]/deletion.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]},"post":{"operationId":"post_ar_customers_id_deletion","tags":["Ar"],"summary":"Execute Ar Customers By Id Deletion","description":"Execute Ar Customers By Id Deletion.\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: `view`.\n\nSource handler: `pages/api/ar/customers/[id]/deletion.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]}},"/api/ar/customers/merge":{"post":{"operationId":"post_ar_customers_merge","tags":["Ar"],"summary":"Execute Ar Customers Merge","description":"Execute Ar Customers Merge.\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/ar/customers/merge.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/ar/deposits":{"get":{"operationId":"get_ar_deposits","tags":["Ar"],"summary":"Retrieve Ar Deposits","description":"Retrieve Ar Deposits.\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\nSource handler: `pages/api/ar/deposits/index.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"}}]},"post":{"operationId":"post_ar_deposits","tags":["Ar"],"summary":"Execute Ar Deposits","description":"Execute Ar Deposits.\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/ar/deposits/index.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/ar/deposits/{id}":{"delete":{"operationId":"delete_ar_deposits_id","tags":["Ar"],"summary":"Delete Ar Deposits By Id","description":"Delete Ar Deposits By Id.\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/ar/deposits/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/ar/documents":{"get":{"operationId":"get_ar_documents","tags":["Ar"],"summary":"Retrieve Ar Documents","description":"Retrieve Ar Documents.\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: `document_type`, `end_date`, `import_mode`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `source_system`, `start_date`, `status`, `view`.\n\nSource handler: `pages/api/ar/documents.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":"document_type","in":"query","required":false,"description":"Document Type filter or option.","schema":{"type":"string","description":"Document Type 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":"import_mode","in":"query","required":false,"description":"Import Mode filter or option.","schema":{"type":"string","description":"Import Mode 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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_system","in":"query","required":false,"description":"Source System filter or option.","schema":{"type":"string","description":"Source System 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":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]}},"/api/ar/documents/{id}":{"get":{"operationId":"get_ar_documents_id","tags":["Ar"],"summary":"Retrieve Ar Documents By Id","description":"Retrieve Ar Documents By Id.\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/ar/documents/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"put":{"operationId":"put_ar_documents_id","tags":["Ar"],"summary":"Replace Ar Documents By Id","description":"Replace Ar Documents By Id.\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/ar/documents/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"delete":{"operationId":"delete_ar_documents_id","tags":["Ar"],"summary":"Delete Ar Documents By Id","description":"Delete Ar Documents By Id.\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/ar/documents/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/ar/documents/{id}/delete":{"delete":{"operationId":"delete_ar_documents_id_delete","tags":["Ar"],"summary":"Delete Ar Documents By Id Delete","description":"Delete Ar Documents By Id Delete.\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/ar/documents/[id]/delete.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/ar/documents/{id}/refresh":{"post":{"operationId":"post_ar_documents_id_refresh","tags":["Ar"],"summary":"Execute Ar Documents By Id Refresh","description":"Execute Ar Documents By Id Refresh.\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/ar/documents/[id]/refresh.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/ar/documents/{id}/send":{"post":{"operationId":"post_ar_documents_id_send","tags":["Ar"],"summary":"Execute Ar Documents By Id Send","description":"Execute Ar Documents By Id Send.\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/ar/documents/[id]/send.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/ar/documents/{id}/void":{"post":{"operationId":"post_ar_documents_id_void","tags":["Ar"],"summary":"Execute Ar Documents By Id Void","description":"Execute Ar Documents By Id Void.\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: `localVoid`, `recordExternalStripeVoid`, `stripeVoidConfirmed`, `voidDate`.\n\nSource handler: `pages/api/ar/documents/[id]/void.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `localVoid`, `recordExternalStripeVoid`, `stripeVoidConfirmed`, `voidDate`.","content":{"application/json":{"schema":{"type":"object","properties":{"localVoid":{"type":"string","description":"LocalVoid payload field."},"recordExternalStripeVoid":{"type":"string","description":"RecordExternalStripeVoid payload field."},"stripeVoidConfirmed":{"type":"string","description":"StripeVoidConfirmed payload field."},"voidDate":{"type":"string","format":"date","description":"VoidDate in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/ar/documents/create":{"post":{"operationId":"post_ar_documents_create","tags":["Ar"],"summary":"Create Ar Documents Create","description":"Create Ar Documents Create.\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/ar/documents/create.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/ar/documents/defaults":{"get":{"operationId":"get_ar_documents_defaults","tags":["Ar"],"summary":"Retrieve Ar Documents Defaults","description":"Retrieve Ar Documents Defaults.\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: `customer_id`.\n\nSource handler: `pages/api/ar/documents/defaults.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":"customer_id","in":"query","required":false,"description":"Customer Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Customer Id. Use an identifier returned by Wesley."}}]}},"/api/ar/documents/next-number":{"get":{"operationId":"get_ar_documents_next_number","tags":["Ar"],"summary":"Retrieve Ar Documents Next Number","description":"Retrieve Ar Documents Next Number.\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/ar/documents/next-number.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/ar/invoice-template/analyze-reference":{"post":{"operationId":"post_ar_invoice_template_analyze_reference","tags":["Ar"],"summary":"Execute Ar Invoice Template Analyze Reference","description":"Execute Ar Invoice Template Analyze Reference.\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\nSource handler: `pages/api/ar/invoice-template/analyze-reference.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}},"/api/ar/payments/apply":{"get":{"operationId":"get_ar_payments_apply","tags":["Ar"],"summary":"Retrieve Ar Payments Apply","description":"Retrieve Ar Payments Apply.\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/ar/payments/apply.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"}}]},"post":{"operationId":"post_ar_payments_apply","tags":["Ar"],"summary":"Execute Ar Payments Apply","description":"Execute Ar Payments Apply.\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/ar/payments/apply.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/ar/payments/create":{"post":{"operationId":"post_ar_payments_create","tags":["Ar"],"summary":"Create Ar Payments Create","description":"Create Ar Payments Create.\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/ar/payments/create.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/ar/payments/receive":{"post":{"operationId":"post_ar_payments_receive","tags":["Ar"],"summary":"Execute Ar Payments Receive","description":"Execute Ar Payments Receive.\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/ar/payments/receive.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/ar/products-services":{"get":{"operationId":"get_ar_products_services","tags":["Ar"],"summary":"Retrieve Ar Products Services","description":"Retrieve Ar Products Services.\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: `active_only`, `limit`, `search`.\n\nSource handler: `pages/api/ar/products-services.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":"active_only","in":"query","required":false,"description":"Active Only filter or option.","schema":{"type":"string","description":"Active Only filter or option."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]},"post":{"operationId":"post_ar_products_services","tags":["Ar"],"summary":"Execute Ar Products Services","description":"Execute Ar Products Services.\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: `active_only`, `limit`, `search`.\n\nSource handler: `pages/api/ar/products-services.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":"active_only","in":"query","required":false,"description":"Active Only filter or option.","schema":{"type":"string","description":"Active Only filter or option."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]},"put":{"operationId":"put_ar_products_services","tags":["Ar"],"summary":"Replace Ar Products Services","description":"Replace Ar Products Services.\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: `active_only`, `limit`, `search`.\n\nSource handler: `pages/api/ar/products-services.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":"active_only","in":"query","required":false,"description":"Active Only filter or option.","schema":{"type":"string","description":"Active Only filter or option."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]},"patch":{"operationId":"patch_ar_products_services","tags":["Ar"],"summary":"Update Ar Products Services","description":"Update Ar Products Services.\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: `active_only`, `limit`, `search`.\n\nSource handler: `pages/api/ar/products-services.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":"active_only","in":"query","required":false,"description":"Active Only filter or option.","schema":{"type":"string","description":"Active Only filter or option."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]}},"/api/ar/recurring-invoices":{"get":{"operationId":"get_ar_recurring_invoices","tags":["Ar"],"summary":"Retrieve Ar Recurring Invoices","description":"Retrieve Ar Recurring Invoices.\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\nSource handler: `pages/api/ar/recurring-invoices/index.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"}}]},"post":{"operationId":"post_ar_recurring_invoices","tags":["Ar"],"summary":"Execute Ar Recurring Invoices","description":"Execute Ar Recurring Invoices.\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/ar/recurring-invoices/index.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/ar/recurring-invoices/{id}":{"get":{"operationId":"get_ar_recurring_invoices_id","tags":["Ar"],"summary":"Retrieve Ar Recurring Invoices By Id","description":"Retrieve Ar Recurring Invoices By Id.\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/ar/recurring-invoices/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"put":{"operationId":"put_ar_recurring_invoices_id","tags":["Ar"],"summary":"Replace Ar Recurring Invoices By Id","description":"Replace Ar Recurring Invoices By Id.\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: `customerBillingAddressLine1`, `customerBillingAddressLine2`, `customerBillingCity`, `customerBillingCountry`, `customerBillingPostalCode`, `customerBillingState`, `customerEmail`, `customerId`, `customerName`, `deliveryMode`, `dueDays`, `endDate`, ....\n\nSource handler: `pages/api/ar/recurring-invoices/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `customerBillingAddressLine1`, `customerBillingAddressLine2`, `customerBillingCity`, `customerBillingCountry`, `customerBillingPostalCode`, `customerBillingState`, `customerEmail`, `customerId`, `customerName`, `deliveryMode`, `dueDays`, `endDate`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"customerBillingAddressLine1":{"type":"string","description":"CustomerBillingAddressLine1 payload field."},"customerBillingAddressLine2":{"type":"string","description":"CustomerBillingAddressLine2 payload field."},"customerBillingCity":{"type":"string","description":"CustomerBillingCity payload field."},"customerBillingCountry":{"type":"string","description":"CustomerBillingCountry payload field."},"customerBillingPostalCode":{"type":"string","description":"CustomerBillingPostalCode payload field."},"customerBillingState":{"type":"string","description":"CustomerBillingState payload field."},"customerEmail":{"type":"string","format":"email","description":"CustomerEmail payload field."},"customerId":{"type":"string","description":"CustomerId. Use an identifier returned by Wesley."},"customerName":{"type":"string","description":"CustomerName payload field."},"deliveryMode":{"type":"string","description":"DeliveryMode payload field."},"dueDays":{"type":"string","description":"DueDays payload field."},"endDate":{"type":"string","format":"date","description":"EndDate in YYYY-MM-DD format."},"expectedUpdatedAt":{"type":"string","format":"date-time","description":"ExpectedUpdatedAt as an ISO 8601 date-time."},"frequency":{"type":"string","description":"Frequency payload field."},"lineItems":{"type":"string","description":"LineItems payload field."},"memo":{"type":"string","description":"Memo payload field."},"name":{"type":"string","description":"Name payload field."},"nextRunDate":{"type":"string","format":"date","description":"NextRunDate in YYYY-MM-DD format."},"notes":{"type":"string","description":"Notes payload field."},"receivableAccountId":{"type":"string","description":"ReceivableAccountId. Use an identifier returned by Wesley."},"salesTaxBehavior":{"type":"string","description":"SalesTaxBehavior payload field."},"salesTaxCode":{"type":"string","description":"SalesTaxCode payload field."},"salesTaxEnabled":{"type":"string","description":"SalesTaxEnabled payload field."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."},"status":{"type":"string","description":"Status payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_ar_recurring_invoices_id","tags":["Ar"],"summary":"Delete Ar Recurring Invoices By Id","description":"Delete Ar Recurring Invoices By Id.\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: `customerBillingAddressLine1`, `customerBillingAddressLine2`, `customerBillingCity`, `customerBillingCountry`, `customerBillingPostalCode`, `customerBillingState`, `customerEmail`, `customerId`, `customerName`, `deliveryMode`, `dueDays`, `endDate`, ....\n\nSource handler: `pages/api/ar/recurring-invoices/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `customerBillingAddressLine1`, `customerBillingAddressLine2`, `customerBillingCity`, `customerBillingCountry`, `customerBillingPostalCode`, `customerBillingState`, `customerEmail`, `customerId`, `customerName`, `deliveryMode`, `dueDays`, `endDate`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"customerBillingAddressLine1":{"type":"string","description":"CustomerBillingAddressLine1 payload field."},"customerBillingAddressLine2":{"type":"string","description":"CustomerBillingAddressLine2 payload field."},"customerBillingCity":{"type":"string","description":"CustomerBillingCity payload field."},"customerBillingCountry":{"type":"string","description":"CustomerBillingCountry payload field."},"customerBillingPostalCode":{"type":"string","description":"CustomerBillingPostalCode payload field."},"customerBillingState":{"type":"string","description":"CustomerBillingState payload field."},"customerEmail":{"type":"string","format":"email","description":"CustomerEmail payload field."},"customerId":{"type":"string","description":"CustomerId. Use an identifier returned by Wesley."},"customerName":{"type":"string","description":"CustomerName payload field."},"deliveryMode":{"type":"string","description":"DeliveryMode payload field."},"dueDays":{"type":"string","description":"DueDays payload field."},"endDate":{"type":"string","format":"date","description":"EndDate in YYYY-MM-DD format."},"expectedUpdatedAt":{"type":"string","format":"date-time","description":"ExpectedUpdatedAt as an ISO 8601 date-time."},"frequency":{"type":"string","description":"Frequency payload field."},"lineItems":{"type":"string","description":"LineItems payload field."},"memo":{"type":"string","description":"Memo payload field."},"name":{"type":"string","description":"Name payload field."},"nextRunDate":{"type":"string","format":"date","description":"NextRunDate in YYYY-MM-DD format."},"notes":{"type":"string","description":"Notes payload field."},"receivableAccountId":{"type":"string","description":"ReceivableAccountId. Use an identifier returned by Wesley."},"salesTaxBehavior":{"type":"string","description":"SalesTaxBehavior payload field."},"salesTaxCode":{"type":"string","description":"SalesTaxCode payload field."},"salesTaxEnabled":{"type":"string","description":"SalesTaxEnabled payload field."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."},"status":{"type":"string","description":"Status payload field."}},"additionalProperties":true}}}}}},"/api/ar/recurring-invoices/{id}/run":{"post":{"operationId":"post_ar_recurring_invoices_id_run","tags":["Ar"],"summary":"Execute Ar Recurring Invoices By Id Run","description":"Execute Ar Recurring Invoices By Id Run.\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: `scheduledFor`.\n\nSource handler: `pages/api/ar/recurring-invoices/[id]/run.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `scheduledFor`.","content":{"application/json":{"schema":{"type":"object","properties":{"scheduledFor":{"type":"string","description":"ScheduledFor payload field."}},"additionalProperties":true}}}}}},"/api/ar/stripe/callback":{"get":{"operationId":"get_ar_stripe_callback","tags":["Ar"],"summary":"Retrieve Ar Stripe Callback","description":"Retrieve Ar Stripe Callback.\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\nCommon query parameters: `code`, `error`, `state`.\n\nSource handler: `pages/api/ar/stripe/callback.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,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/ar/stripe/connect":{"post":{"operationId":"post_ar_stripe_connect","tags":["Ar"],"summary":"Execute Ar Stripe Connect","description":"Execute Ar Stripe Connect.\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/ar/stripe/connect.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/ar/stripe/connection":{"get":{"operationId":"get_ar_stripe_connection","tags":["Ar"],"summary":"Retrieve Ar Stripe Connection","description":"Retrieve Ar Stripe Connection.\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/ar/stripe/connection.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"}}]},"delete":{"operationId":"delete_ar_stripe_connection","tags":["Ar"],"summary":"Delete Ar Stripe Connection","description":"Delete Ar Stripe Connection.\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/ar/stripe/connection.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/ar/stripe/webhook":{"post":{"operationId":"post_ar_stripe_webhook","tags":["Ar"],"summary":"Execute Ar Stripe Webhook","description":"Execute Ar Stripe Webhook.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/ar/stripe/webhook.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/ar/undeposited-funds-review":{"get":{"operationId":"get_ar_undeposited_funds_review","tags":["Ar"],"summary":"Retrieve Ar Undeposited Funds Review","description":"Retrieve Ar Undeposited Funds Review.\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/ar/undeposited-funds-review.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/ask-client-activity/opened":{"post":{"operationId":"post_ask_client_activity_opened","tags":["Ask Client Activity"],"summary":"Execute Ask Client Activity Opened","description":"Execute Ask Client Activity Opened.\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\nSource handler: `pages/api/ask-client-activity/opened.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}},"/api/audit-logs":{"get":{"operationId":"get_audit_logs","tags":["Audit Logs"],"summary":"Retrieve Audit Logs","description":"Retrieve Audit Logs.\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`, `actorType`, `actorUserId`, `batchId`, `context`, `endDate`, `end_date`, `entityId`, `entityType`, `entryEndDate`, `entryStartDate`, `entry_end_date`, ....\n\nSource handler: `pages/api/audit-logs/index.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","in":"query","required":false,"description":"Action filter or option.","schema":{"type":"string","description":"Action filter or option."}},{"name":"actorType","in":"query","required":false,"description":"ActorType filter or option.","schema":{"type":"string","description":"ActorType filter or option."}},{"name":"actorUserId","in":"query","required":false,"description":"ActorUserId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ActorUserId. Use an identifier returned by Wesley."}},{"name":"batchId","in":"query","required":false,"description":"BatchId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"BatchId. Use an identifier returned by Wesley."}},{"name":"context","in":"query","required":false,"description":"Context filter or option.","schema":{"type":"string","description":"Context 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":"entityId","in":"query","required":false,"description":"EntityId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"EntityId. Use an identifier returned by Wesley."}},{"name":"entityType","in":"query","required":false,"description":"EntityType filter or option.","schema":{"type":"string","description":"EntityType filter or option."}},{"name":"entryEndDate","in":"query","required":false,"description":"EntryEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"EntryEndDate in YYYY-MM-DD format."}},{"name":"entryStartDate","in":"query","required":false,"description":"EntryStartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"EntryStartDate in YYYY-MM-DD format."}},{"name":"entry_end_date","in":"query","required":false,"description":"Entry End Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Entry End Date in YYYY-MM-DD format."}},{"name":"entry_start_date","in":"query","required":false,"description":"Entry Start Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Entry Start Date in YYYY-MM-DD format."}},{"name":"includeLinkedTransactions","in":"query","required":false,"description":"IncludeLinkedTransactions flag.","schema":{"type":"boolean","description":"IncludeLinkedTransactions flag."}},{"name":"journalEntryEndDate","in":"query","required":false,"description":"JournalEntryEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalEntryEndDate in YYYY-MM-DD format."}},{"name":"journalEntryId","in":"query","required":false,"description":"JournalEntryId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"JournalEntryId. Use an identifier returned by Wesley."}},{"name":"journalEntryStartDate","in":"query","required":false,"description":"JournalEntryStartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalEntryStartDate in YYYY-MM-DD format."}},{"name":"journal_entry_end_date","in":"query","required":false,"description":"Journal Entry End Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Journal Entry End Date in YYYY-MM-DD format."}},{"name":"journal_entry_start_date","in":"query","required":false,"description":"Journal Entry Start Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Journal Entry Start Date in YYYY-MM-DD format."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"pageMode","in":"query","required":false,"description":"PageMode filter or option.","schema":{"type":"string","description":"PageMode filter or option."}},{"name":"pageSize","in":"query","required":false,"description":"PageSize filter or option.","schema":{"type":"integer","description":"PageSize filter or option."}},{"name":"requestId","in":"query","required":false,"description":"RequestId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RequestId. Use an identifier returned by Wesley."}},{"name":"sort","in":"query","required":false,"description":"Sort filter or option.","schema":{"type":"string","description":"Sort 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."}}]}},"/api/audit-logs/summary":{"get":{"operationId":"get_audit_logs_summary","tags":["Audit Logs"],"summary":"Get Audit Logs Summary","description":"Get Audit Logs 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\nSupports optional company scoping via header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nCommon query parameters: `action`, `actorType`, `actorUserId`, `bucketLimit`, `endDate`, `end_date`, `entityType`, `startDate`, `start_date`.\n\nSource handler: `pages/api/audit-logs/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,"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":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"action","in":"query","required":false,"description":"Action filter or option.","schema":{"type":"string","description":"Action filter or option."}},{"name":"actorType","in":"query","required":false,"description":"ActorType filter or option.","schema":{"type":"string","description":"ActorType filter or option."}},{"name":"actorUserId","in":"query","required":false,"description":"ActorUserId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ActorUserId. Use an identifier returned by Wesley."}},{"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":"entityType","in":"query","required":false,"description":"EntityType filter or option.","schema":{"type":"string","description":"EntityType 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."}}]}},"/api/bank-statement-imports":{"post":{"operationId":"post_bank_statement_imports","tags":["Bank Statement Imports"],"summary":"Import Bank Statement Imports","description":"Import Bank Statement Imports.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nAccepts multipart form uploads for file-based workflows.\n\nSource handler: `pages/api/bank-statement-imports.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":"Multipart upload payload for file-processing workflows.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"files":{"type":"array","items":{"type":"string","format":"binary"}}},"additionalProperties":true}},"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}},"/api/banking-unified-upload":{"get":{"operationId":"get_banking_unified_upload","tags":["Banking Unified Upload"],"summary":"Retrieve Banking Unified Upload","description":"Retrieve Banking Unified Upload.\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\nSupports optional company scoping via header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCommon query parameters: `batchId`, `view`.\n\nSource handler: `pages/api/banking-unified-upload.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,"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":"batchId","in":"query","required":false,"description":"BatchId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"BatchId. Use an identifier returned by Wesley."}},{"name":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]},"post":{"operationId":"post_banking_unified_upload","tags":["Banking Unified Upload"],"summary":"Execute Banking Unified Upload","description":"Execute Banking Unified Upload.\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\nSupports optional company scoping via header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nCommon query parameters: `batchId`, `view`.\n\nSource handler: `pages/api/banking-unified-upload.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,"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":"batchId","in":"query","required":false,"description":"BatchId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"BatchId. Use an identifier returned by Wesley."}},{"name":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]}},"/api/bill-com/connection":{"get":{"operationId":"get_bill_com_connection","tags":["Bill Com"],"summary":"Retrieve Bill Com Connection","description":"Retrieve Bill Com Connection.\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/bill-com/connection.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"}}]},"post":{"operationId":"post_bill_com_connection","tags":["Bill Com"],"summary":"Execute Bill Com Connection","description":"Execute Bill Com Connection.\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: `organizationId`, `syncTokenName`, `syncTokenValue`.\n\nSource handler: `pages/api/bill-com/connection.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: `organizationId`, `syncTokenName`, `syncTokenValue`.","content":{"application/json":{"schema":{"type":"object","properties":{"organizationId":{"type":"string","description":"OrganizationId. Use an identifier returned by Wesley."},"syncTokenName":{"type":"string","description":"SyncTokenName payload field."},"syncTokenValue":{"type":"string","description":"SyncTokenValue payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_bill_com_connection","tags":["Bill Com"],"summary":"Delete Bill Com Connection","description":"Delete Bill Com Connection.\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: `organizationId`, `syncTokenName`, `syncTokenValue`.\n\nSource handler: `pages/api/bill-com/connection.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: `organizationId`, `syncTokenName`, `syncTokenValue`.","content":{"application/json":{"schema":{"type":"object","properties":{"organizationId":{"type":"string","description":"OrganizationId. Use an identifier returned by Wesley."},"syncTokenName":{"type":"string","description":"SyncTokenName payload field."},"syncTokenValue":{"type":"string","description":"SyncTokenValue payload field."}},"additionalProperties":true}}}}}},"/api/bill-com/sync":{"get":{"operationId":"get_bill_com_sync","tags":["Bill Com"],"summary":"Retrieve Bill Com Sync","description":"Retrieve Bill Com Sync.\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/bill-com/sync.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"}}]},"post":{"operationId":"post_bill_com_sync","tags":["Bill Com"],"summary":"Sync Bill Com Sync","description":"Sync Bill Com Sync.\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/bill-com/sync.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/blob-upload-token":{"post":{"operationId":"post_blob_upload_token","tags":["Blob Upload Token"],"summary":"Execute Blob Upload Token","description":"Execute Blob Upload Token.\n\nNo user authentication is explicitly enforced in this handler.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nSource handler: `pages/api/blob-upload-token.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":true}},"/api/cal-com/webhook":{"post":{"operationId":"post_cal_com_webhook","tags":["Cal Com"],"summary":"Execute Cal Com Webhook","description":"Execute Cal Com Webhook.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/cal-com/webhook.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/chart-of-accounts":{"get":{"operationId":"get_chart_of_accounts","tags":["Chart Of Accounts"],"summary":"List chart of accounts","description":"Returns accounts for the selected company. Optional include flags add inactive accounts, usage counts, creation origins, or current balances. includeExpenseBalances=true adds net posted expense balances for the client's current fiscal YTD, with current_balance_period identifying the inclusive date range.\n\nGet Chart Of 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: `includeCreationOrigins`, `includeCurrentBalances`, `includeExpenseBalances`, `includeInactive`, `includeUsage`.\n\nSource handler: `pages/api/chart-of-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":"includeCreationOrigins","in":"query","required":false,"description":"IncludeCreationOrigins flag.","schema":{"type":"boolean","description":"IncludeCreationOrigins flag."}},{"name":"includeCurrentBalances","in":"query","required":false,"description":"IncludeCurrentBalances flag.","schema":{"type":"boolean","description":"IncludeCurrentBalances flag."}},{"name":"includeExpenseBalances","in":"query","required":false,"description":"Include expense fiscal YTD balances and their date range. Balance-sheet accounts retain their as-of balances.","schema":{"type":"boolean","default":false}},{"name":"includeInactive","in":"query","required":false,"description":"IncludeInactive flag.","schema":{"type":"boolean","description":"IncludeInactive flag."}},{"name":"includeUsage","in":"query","required":false,"description":"IncludeUsage flag.","schema":{"type":"boolean","description":"IncludeUsage flag."}}]},"post":{"operationId":"post_chart_of_accounts","tags":["Chart Of Accounts"],"summary":"Create a chart-of-accounts account","description":"Create a custom account in the selected company. Read account types first and use a returned type ID. Preserve idempotencyKey when retrying the same creation.\n\nExecute Chart Of 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\nJSON body keys used by this method: `accounting_provider_account_subtype`, `creationSource`, `is_posting_enabled`, `required_transaction_fields`.\n\nSource handler: `pages/api/chart-of-accounts.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"201":{"description":"Account created."},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"409":{"description":"The code or idempotency key conflicts with an existing account."},"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":true,"description":"Account fields. code, name, and typeId are required; all other fields are optional. Source handler: `pages/api/chart-of-accounts.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"required_transaction_fields":{"description":"Required text fields keyed by stable field key. Each definition contains label and type: text. Empty object clears requirements.","type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["text"]}},"required":["label","type"],"additionalProperties":false}},"code":{"type":"string","minLength":1,"description":"Account code, unique within the selected company."},"name":{"type":"string","minLength":1,"description":"Account display name."},"typeId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Account type ID returned by Wesley."},"description":{"description":"Optional account description; null clears it.","nullable":true,"type":"string"},"is_active":{"description":"Whether the account is active. Defaults to true when creating.","type":"boolean"},"is_posting_enabled":{"description":"Allow direct posting. False makes this a summary-only account; existing entries remain unchanged.","type":"boolean"},"show_in_banking":{"description":"Whether the account is shown in banking workflows.","type":"boolean"},"is_reconcilable":{"description":"Whether the account can be reconciled.","type":"boolean"},"is_qbo_reclassification_account":{"description":"Whether the account is used for QuickBooks reclassification.","type":"boolean"},"parent_account_id":{"description":"Parent account ID returned by Wesley; null makes this a top-level account.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accounting_provider_account_subtype":{"description":"Optional accounting-provider subtype; null clears it.","nullable":true,"type":"string","maxLength":100},"full_name":{"description":"Optional precomputed full account name.","nullable":true,"type":"string","minLength":1},"idempotencyKey":{"description":"Stable UUID for safe retries of this creation.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"creationSource":{"description":"Optional creation-source label used by supported workflows.","type":"string"}},"required":["code","name","typeId"]}}}}},"put":{"operationId":"put_chart_of_accounts","tags":["Chart Of Accounts"],"summary":"Update a chart-of-accounts account","description":"Updates only supplied fields on a custom account. Optional expected values provide optimistic concurrency protection.\n\nReplace Chart Of 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\nJSON body keys used by this method: `expectedAccountIdentity`, `expectedBankingOwnership`, `expectedUpdatedAt`, `id`, `is_posting_enabled`, `required_transaction_fields`.\n\nSource handler: `pages/api/chart-of-accounts.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The supplied account fields are invalid."},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"409":{"description":"The account is in use, changed, duplicated, or has a protected banking connection."},"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":true,"description":"Account ID plus the fields to change. Unspecified fields remain unchanged. Source handler: `pages/api/chart-of-accounts.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Account ID returned by Wesley."},"required_transaction_fields":{"description":"Required text fields keyed by stable field key. Each definition contains label and type: text. Empty object clears requirements.","type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["text"]}},"required":["label","type"],"additionalProperties":false}},"code":{"type":"string","minLength":1,"description":"Account code, unique within the selected company."},"name":{"type":"string","minLength":1,"description":"Account display name."},"typeId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Account type ID returned by Wesley."},"description":{"description":"Optional account description; null clears it.","nullable":true,"type":"string"},"is_active":{"description":"Whether the account is active. Defaults to true when creating.","type":"boolean"},"is_posting_enabled":{"description":"Allow direct posting. False makes this a summary-only account; existing entries remain unchanged.","type":"boolean"},"show_in_banking":{"description":"Whether the account is shown in banking workflows.","type":"boolean"},"is_reconcilable":{"description":"Whether the account can be reconciled.","type":"boolean"},"is_qbo_reclassification_account":{"description":"Whether the account is used for QuickBooks reclassification.","type":"boolean"},"parent_account_id":{"description":"Parent account ID returned by Wesley; null makes this a top-level account.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accounting_provider_account_subtype":{"description":"Optional accounting-provider subtype; null clears it.","nullable":true,"type":"string","maxLength":100},"category":{"type":"string","enum":["Assets","Liabilities","Equity","Revenue","Expenses"]},"report_type":{"type":"string","enum":["profit_and_loss","balance_sheet"]},"expectedAccountIdentity":{"type":"object","properties":{"code":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"typeId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"parentAccountId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["code","name","typeId","parentAccountId"]},"expectedBankingOwnership":{"type":"object","properties":{"bankingConnectionType":{"nullable":true,"type":"string"},"plaidItemId":{"nullable":true,"type":"string"},"plaidAccountId":{"nullable":true,"type":"string"}},"required":["bankingConnectionType","plaidItemId","plaidAccountId"]},"expectedUpdatedAt":{"nullable":true,"type":"string","minLength":1}},"required":["id"]}}}}},"delete":{"operationId":"delete_chart_of_accounts","tags":["Chart Of Accounts"],"summary":"Delete a chart-of-accounts account","description":"Deletes a custom account only when it has no protected journal, document, rule, or external-account dependencies. Read the account list with includeUsage=true first and do not attempt deletion when has_journal_lines is true. Supply the account ID in either query.id or body.id.\n\nDelete Chart Of 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\nJSON body keys used by this method: `id`, `is_posting_enabled`, `required_transaction_fields`.\n\nCommon query parameters: `id`.\n\nSource handler: `pages/api/chart-of-accounts.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Company/account ID is missing, or the account has journal lines and cannot be deleted."},"401":{"description":"Authentication required"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"409":{"description":"The account is still in use or its protected connection state changed."},"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-required-arguments":[{"description":"Supply the account ID returned by Wesley in query.id or body.id.","anyOf":["query.id","body.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":"id","in":"query","required":false,"description":"Account ID returned by Wesley. Required here when body.id is omitted.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"description":"Optional JSON alternative to the id query parameter. Source handler: `pages/api/chart-of-accounts.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"Account ID returned by Wesley; required when query.id is omitted.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}}}}}}},"/api/chart-of-accounts/merge":{"post":{"operationId":"post_chart_of_accounts_merge","tags":["Chart Of Accounts"],"summary":"Execute Chart Of Accounts Merge","description":"Execute Chart Of Accounts Merge.\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: `sourceAccountId`, `targetAccountId`, `taxMappingResolutions`.\n\nSource handler: `pages/api/chart-of-accounts/merge.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: `sourceAccountId`, `targetAccountId`, `taxMappingResolutions`.","content":{"application/json":{"schema":{"type":"object","properties":{"sourceAccountId":{"type":"string","description":"SourceAccountId. Use an identifier returned by Wesley."},"targetAccountId":{"type":"string","description":"TargetAccountId. Use an identifier returned by Wesley."},"taxMappingResolutions":{"type":"string","description":"TaxMappingResolutions payload field."}},"additionalProperties":true}}}}}},"/api/chart-of-accounts/safe-delete":{"get":{"operationId":"get_chart_of_accounts_safe_delete","tags":["Chart Of Accounts"],"summary":"Get Chart Of Accounts Safe Delete","description":"Get Chart Of Accounts Safe Delete.\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`.\n\nSource handler: `pages/api/chart-of-accounts/safe-delete.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."}}]},"delete":{"operationId":"delete_chart_of_accounts_safe_delete","tags":["Chart Of Accounts"],"summary":"Delete Chart Of Accounts Safe Delete","description":"Delete Chart Of Accounts Safe Delete.\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: `id`.\n\nCommon query parameters: `accountId`.\n\nSource handler: `pages/api/chart-of-accounts/safe-delete.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."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `id`.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/chat-credits":{"get":{"operationId":"get_chat_credits","tags":["Chat Credits"],"summary":"Retrieve Chat Credits","description":"Retrieve Chat Credits.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/chat-credits/index.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-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."}}},"/api/chat-credits/webhook":{"post":{"operationId":"post_chat_credits_webhook","tags":["Chat Credits"],"summary":"Execute Chat Credits Webhook","description":"Execute Chat Credits Webhook.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/chat-credits/webhook.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/check-items/outstanding":{"get":{"operationId":"get_check_items_outstanding","tags":["Check Items"],"summary":"Retrieve Check Items Outstanding","description":"Retrieve Check Items Outstanding.\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/check-items/outstanding.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"}}]},"post":{"operationId":"post_check_items_outstanding","tags":["Check Items"],"summary":"Execute Check Items Outstanding","description":"Execute Check Items Outstanding.\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/check-items/outstanding.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"}}]},"patch":{"operationId":"patch_check_items_outstanding","tags":["Check Items"],"summary":"Update Check Items Outstanding","description":"Update Check Items Outstanding.\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/check-items/outstanding.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/checks/{id}/print":{"get":{"operationId":"get_checks_id_print","tags":["Checks"],"summary":"Retrieve Checks By Id Print","description":"Retrieve Checks By Id Print.\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: `context`, `micrX`, `micrY`, `placement`, `printCheckNumber`, `standardSlot`, `stockType`, `voucherLayout`.\n\nSource handler: `pages/api/checks/[id]/print.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"context","in":"query","required":false,"description":"Context filter or option.","schema":{"type":"string","description":"Context filter or option."}},{"name":"micrX","in":"query","required":false,"description":"MicrX filter or option.","schema":{"type":"string","description":"MicrX filter or option."}},{"name":"micrY","in":"query","required":false,"description":"MicrY filter or option.","schema":{"type":"string","description":"MicrY filter or option."}},{"name":"placement","in":"query","required":false,"description":"Placement filter or option.","schema":{"type":"string","description":"Placement filter or option."}},{"name":"printCheckNumber","in":"query","required":false,"description":"PrintCheckNumber filter or option.","schema":{"type":"string","description":"PrintCheckNumber filter or option."}},{"name":"standardSlot","in":"query","required":false,"description":"StandardSlot filter or option.","schema":{"type":"string","description":"StandardSlot filter or option."}},{"name":"stockType","in":"query","required":false,"description":"StockType filter or option.","schema":{"type":"string","description":"StockType filter or option."}},{"name":"voucherLayout","in":"query","required":false,"description":"VoucherLayout filter or option.","schema":{"type":"string","description":"VoucherLayout filter or option."}}]},"post":{"operationId":"post_checks_id_print","tags":["Checks"],"summary":"Execute Checks By Id Print","description":"Execute Checks By Id Print.\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: `context`, `micrX`, `micrY`, `placement`, `printCheckNumber`, `standardSlot`, `stockType`, `voucherLayout`.\n\nSource handler: `pages/api/checks/[id]/print.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"context","in":"query","required":false,"description":"Context filter or option.","schema":{"type":"string","description":"Context filter or option."}},{"name":"micrX","in":"query","required":false,"description":"MicrX filter or option.","schema":{"type":"string","description":"MicrX filter or option."}},{"name":"micrY","in":"query","required":false,"description":"MicrY filter or option.","schema":{"type":"string","description":"MicrY filter or option."}},{"name":"placement","in":"query","required":false,"description":"Placement filter or option.","schema":{"type":"string","description":"Placement filter or option."}},{"name":"printCheckNumber","in":"query","required":false,"description":"PrintCheckNumber filter or option.","schema":{"type":"string","description":"PrintCheckNumber filter or option."}},{"name":"standardSlot","in":"query","required":false,"description":"StandardSlot filter or option.","schema":{"type":"string","description":"StandardSlot filter or option."}},{"name":"stockType","in":"query","required":false,"description":"StockType filter or option.","schema":{"type":"string","description":"StockType filter or option."}},{"name":"voucherLayout","in":"query","required":false,"description":"VoucherLayout filter or option.","schema":{"type":"string","description":"VoucherLayout filter or option."}}]}},"/api/checks/{id}/void":{"post":{"operationId":"post_checks_id_void","tags":["Checks"],"summary":"Execute Checks By Id Void","description":"Execute Checks By Id Void.\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/checks/[id]/void.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/checks/account-details":{"get":{"operationId":"get_checks_account_details","tags":["Checks"],"summary":"Get Checks Account Details","description":"Get Checks Account Details.\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`.\n\nSource handler: `pages/api/checks/account-details.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."}}]},"put":{"operationId":"put_checks_account_details","tags":["Checks"],"summary":"Replace Checks Account Details","description":"Replace Checks Account Details.\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: `accountNumber`, `confirmed`, `routingNumber`.\n\nCommon query parameters: `accountId`.\n\nSource handler: `pages/api/checks/account-details.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."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `accountNumber`, `confirmed`, `routingNumber`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountNumber":{"type":"string","description":"AccountNumber payload field."},"confirmed":{"type":"string","description":"Confirmed payload field."},"routingNumber":{"type":"string","description":"RoutingNumber payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_checks_account_details","tags":["Checks"],"summary":"Delete Checks Account Details","description":"Delete Checks Account Details.\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: `accountNumber`, `confirmed`, `routingNumber`.\n\nCommon query parameters: `accountId`.\n\nSource handler: `pages/api/checks/account-details.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."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `accountNumber`, `confirmed`, `routingNumber`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountNumber":{"type":"string","description":"AccountNumber payload field."},"confirmed":{"type":"string","description":"Confirmed payload field."},"routingNumber":{"type":"string","description":"RoutingNumber payload field."}},"additionalProperties":true}}}}}},"/api/checks/batch-print":{"get":{"operationId":"get_checks_batch_print","tags":["Checks"],"summary":"Retrieve Checks Batch Print","description":"Retrieve Checks Batch Print.\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: `context`, `externalIds`, `ids`, `micrX`, `micrY`, `placement`, `printCheckNumber`, `stockType`, `voucherLayout`.\n\nSource handler: `pages/api/checks/batch-print.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":"context","in":"query","required":false,"description":"Context filter or option.","schema":{"type":"string","description":"Context filter or option."}},{"name":"externalIds","in":"query","required":false,"description":"ExternalIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"ExternalIds. Use identifiers returned by Wesley."}},{"name":"ids","in":"query","required":false,"description":"Ids filter or option.","schema":{"type":"string","description":"Ids filter or option."}},{"name":"micrX","in":"query","required":false,"description":"MicrX filter or option.","schema":{"type":"string","description":"MicrX filter or option."}},{"name":"micrY","in":"query","required":false,"description":"MicrY filter or option.","schema":{"type":"string","description":"MicrY filter or option."}},{"name":"placement","in":"query","required":false,"description":"Placement filter or option.","schema":{"type":"string","description":"Placement filter or option."}},{"name":"printCheckNumber","in":"query","required":false,"description":"PrintCheckNumber filter or option.","schema":{"type":"string","description":"PrintCheckNumber filter or option."}},{"name":"stockType","in":"query","required":false,"description":"StockType filter or option.","schema":{"type":"string","description":"StockType filter or option."}},{"name":"voucherLayout","in":"query","required":false,"description":"VoucherLayout filter or option.","schema":{"type":"string","description":"VoucherLayout filter or option."}}]},"post":{"operationId":"post_checks_batch_print","tags":["Checks"],"summary":"Execute Checks Batch Print","description":"Execute Checks Batch Print.\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: `context`, `externalIds`, `ids`, `micrX`, `micrY`, `placement`, `printCheckNumber`, `stockType`, `voucherLayout`.\n\nSource handler: `pages/api/checks/batch-print.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":"context","in":"query","required":false,"description":"Context filter or option.","schema":{"type":"string","description":"Context filter or option."}},{"name":"externalIds","in":"query","required":false,"description":"ExternalIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"ExternalIds. Use identifiers returned by Wesley."}},{"name":"ids","in":"query","required":false,"description":"Ids filter or option.","schema":{"type":"string","description":"Ids filter or option."}},{"name":"micrX","in":"query","required":false,"description":"MicrX filter or option.","schema":{"type":"string","description":"MicrX filter or option."}},{"name":"micrY","in":"query","required":false,"description":"MicrY filter or option.","schema":{"type":"string","description":"MicrY filter or option."}},{"name":"placement","in":"query","required":false,"description":"Placement filter or option.","schema":{"type":"string","description":"Placement filter or option."}},{"name":"printCheckNumber","in":"query","required":false,"description":"PrintCheckNumber filter or option.","schema":{"type":"string","description":"PrintCheckNumber filter or option."}},{"name":"stockType","in":"query","required":false,"description":"StockType filter or option.","schema":{"type":"string","description":"StockType filter or option."}},{"name":"voucherLayout","in":"query","required":false,"description":"VoucherLayout filter or option.","schema":{"type":"string","description":"VoucherLayout filter or option."}}]}},"/api/checks/create":{"post":{"operationId":"post_checks_create","tags":["Checks"],"summary":"Create Checks Create","description":"Create Checks Create.\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/checks/create.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/checks/external/{id}/print":{"get":{"operationId":"get_checks_external_id_print","tags":["Checks"],"summary":"Retrieve Checks External By Id Print","description":"Retrieve Checks External By Id Print.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/checks/external/[id]/print.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"post":{"operationId":"post_checks_external_id_print","tags":["Checks"],"summary":"Execute Checks External By Id Print","description":"Execute Checks External By Id Print.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/checks/external/[id]/print.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/checks/next-number":{"get":{"operationId":"get_checks_next_number","tags":["Checks"],"summary":"Retrieve Checks Next Number","description":"Retrieve Checks Next Number.\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: `bankAccountId`.\n\nSource handler: `pages/api/checks/next-number.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":"bankAccountId","in":"query","required":false,"description":"BankAccountId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"BankAccountId. Use an identifier returned by Wesley."}}]}},"/api/checks/preview":{"get":{"operationId":"get_checks_preview","tags":["Checks"],"summary":"Retrieve Checks Preview","description":"Retrieve Checks Preview.\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\nPreview endpoint used to inspect impact before committing changes.\n\nCommon query parameters: `micrX`, `micrY`, `placement`, `printCheckNumber`, `standardSlot`, `stockType`, `voucherLayout`.\n\nSource handler: `pages/api/checks/preview.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":"micrX","in":"query","required":false,"description":"MicrX filter or option.","schema":{"type":"string","description":"MicrX filter or option."}},{"name":"micrY","in":"query","required":false,"description":"MicrY filter or option.","schema":{"type":"string","description":"MicrY filter or option."}},{"name":"placement","in":"query","required":false,"description":"Placement filter or option.","schema":{"type":"string","description":"Placement filter or option."}},{"name":"printCheckNumber","in":"query","required":false,"description":"PrintCheckNumber filter or option.","schema":{"type":"string","description":"PrintCheckNumber filter or option."}},{"name":"standardSlot","in":"query","required":false,"description":"StandardSlot filter or option.","schema":{"type":"string","description":"StandardSlot filter or option."}},{"name":"stockType","in":"query","required":false,"description":"StockType filter or option.","schema":{"type":"string","description":"StockType filter or option."}},{"name":"voucherLayout","in":"query","required":false,"description":"VoucherLayout filter or option.","schema":{"type":"string","description":"VoucherLayout filter or option."}}]},"post":{"operationId":"post_checks_preview","tags":["Checks"],"summary":"Execute Checks Preview","description":"Execute Checks Preview.\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\nPreview endpoint used to inspect impact before committing changes.\n\nJSON body keys used by this method: `printMicr`, `printSignature`.\n\nCommon query parameters: `micrX`, `micrY`, `placement`, `printCheckNumber`, `standardSlot`, `stockType`, `voucherLayout`.\n\nSource handler: `pages/api/checks/preview.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":"micrX","in":"query","required":false,"description":"MicrX filter or option.","schema":{"type":"string","description":"MicrX filter or option."}},{"name":"micrY","in":"query","required":false,"description":"MicrY filter or option.","schema":{"type":"string","description":"MicrY filter or option."}},{"name":"placement","in":"query","required":false,"description":"Placement filter or option.","schema":{"type":"string","description":"Placement filter or option."}},{"name":"printCheckNumber","in":"query","required":false,"description":"PrintCheckNumber filter or option.","schema":{"type":"string","description":"PrintCheckNumber filter or option."}},{"name":"standardSlot","in":"query","required":false,"description":"StandardSlot filter or option.","schema":{"type":"string","description":"StandardSlot filter or option."}},{"name":"stockType","in":"query","required":false,"description":"StockType filter or option.","schema":{"type":"string","description":"StockType filter or option."}},{"name":"voucherLayout","in":"query","required":false,"description":"VoucherLayout filter or option.","schema":{"type":"string","description":"VoucherLayout filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `printMicr`, `printSignature`.","content":{"application/json":{"schema":{"type":"object","properties":{"printMicr":{"type":"string","description":"PrintMicr payload field."},"printSignature":{"type":"string","description":"PrintSignature payload field."}},"additionalProperties":true}}}}}},"/api/checks/routing-lookup":{"post":{"operationId":"post_checks_routing_lookup","tags":["Checks"],"summary":"Execute Checks Routing Lookup","description":"Execute Checks Routing Lookup.\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: `bankName`, `region`.\n\nSource handler: `pages/api/checks/routing-lookup.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: `bankName`, `region`.","content":{"application/json":{"schema":{"type":"object","properties":{"bankName":{"type":"string","description":"BankName payload field."},"region":{"type":"string","description":"Region payload field."}},"additionalProperties":true}}}}}},"/api/checks/signature":{"get":{"operationId":"get_checks_signature","tags":["Checks"],"summary":"Retrieve Checks Signature","description":"Retrieve Checks Signature.\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`.\n\nSource handler: `pages/api/checks/signature.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."}}]},"put":{"operationId":"put_checks_signature","tags":["Checks"],"summary":"Replace Checks Signature","description":"Replace Checks Signature.\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`.\n\nSource handler: `pages/api/checks/signature.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."}}]},"delete":{"operationId":"delete_checks_signature","tags":["Checks"],"summary":"Delete Checks Signature","description":"Delete Checks Signature.\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`.\n\nSource handler: `pages/api/checks/signature.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."}}]}},"/api/classes":{"get":{"operationId":"get_classes","tags":["Classes"],"summary":"Retrieve Classes","description":"Retrieve Classes.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/classes.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"post":{"operationId":"post_classes","tags":["Classes"],"summary":"Execute Classes","description":"Execute Classes.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/classes.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"put":{"operationId":"put_classes","tags":["Classes"],"summary":"Replace Classes","description":"Replace Classes.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/classes.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"delete":{"operationId":"delete_classes","tags":["Classes"],"summary":"Delete Classes","description":"Delete Classes.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/classes.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]}},"/api/classes/{id}":{"get":{"operationId":"get_classes_id","tags":["Classes"],"summary":"Retrieve Classes By Id","description":"Retrieve Classes By Id.\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: `as_of_date`, `entries_page`, `entries_page_size`.\n\nSource handler: `pages/api/classes/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"as_of_date","in":"query","required":false,"description":"As Of Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"As Of Date in YYYY-MM-DD format."}},{"name":"entries_page","in":"query","required":false,"description":"Entries Page filter or option.","schema":{"type":"string","description":"Entries Page filter or option."}},{"name":"entries_page_size","in":"query","required":false,"description":"Entries Page Size filter or option.","schema":{"type":"string","description":"Entries Page Size filter or option."}}]}},"/api/clerk/webhook":{"post":{"operationId":"post_clerk_webhook","tags":["Clerk"],"summary":"Execute Clerk Webhook","description":"Execute Clerk Webhook.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/clerk/webhook.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/client-emails/send":{"post":{"operationId":"post_client_emails_send","tags":["Client Emails"],"summary":"Execute Client Emails Send","description":"Execute Client Emails Send.\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/client-emails/send.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/client-links":{"get":{"operationId":"get_client_links","tags":["Client Links"],"summary":"Retrieve Client Links","description":"Retrieve Client Links.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `id`, `usageSource`.\n\nSource handler: `pages/api/client-links/index.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-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":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"usageSource","in":"query","required":false,"description":"UsageSource filter or option.","schema":{"type":"string","description":"UsageSource filter or option."}}]},"post":{"operationId":"post_client_links","tags":["Client Links"],"summary":"Execute Client Links","description":"Execute Client Links.\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\nJSON body keys used by this method: `id`, `usageSource`.\n\nCommon query parameters: `id`, `usageSource`.\n\nSource handler: `pages/api/client-links/index.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,"parameters":[{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"usageSource","in":"query","required":false,"description":"UsageSource filter or option.","schema":{"type":"string","description":"UsageSource filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `id`, `usageSource`.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."},"usageSource":{"type":"string","description":"UsageSource payload field."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_client_links","tags":["Client Links"],"summary":"Update Client Links","description":"Update Client Links.\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\nJSON body keys used by this method: `id`, `usageSource`.\n\nCommon query parameters: `id`, `usageSource`.\n\nSource handler: `pages/api/client-links/index.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,"parameters":[{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"usageSource","in":"query","required":false,"description":"UsageSource filter or option.","schema":{"type":"string","description":"UsageSource filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `id`, `usageSource`.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."},"usageSource":{"type":"string","description":"UsageSource payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_client_links","tags":["Client Links"],"summary":"Delete Client Links","description":"Delete Client Links.\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\nJSON body keys used by this method: `id`, `usageSource`.\n\nCommon query parameters: `id`, `usageSource`.\n\nSource handler: `pages/api/client-links/index.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,"parameters":[{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"usageSource","in":"query","required":false,"description":"UsageSource filter or option.","schema":{"type":"string","description":"UsageSource filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `id`, `usageSource`.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."},"usageSource":{"type":"string","description":"UsageSource payload field."}},"additionalProperties":true}}}}}},"/api/client-links/preview":{"post":{"operationId":"post_client_links_preview","tags":["Client Links"],"summary":"Execute Client Links Preview","description":"Execute Client Links Preview.\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\nPreview endpoint used to inspect impact before committing changes.\n\nSource handler: `pages/api/client-links/preview.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}},"/api/client-onboarding":{"get":{"operationId":"get_client_onboarding","tags":["Client Onboarding"],"summary":"Retrieve Client Onboarding","description":"Retrieve Client Onboarding.\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: `mode`.\n\nSource handler: `pages/api/client-onboarding.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":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}}]},"put":{"operationId":"put_client_onboarding","tags":["Client Onboarding"],"summary":"Replace Client Onboarding","description":"Replace Client Onboarding.\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: `accountKeys`, `action`, `companyId`, `confirmedNoExistingBooks`, `cutoffDate`, `dismissedFrom`, `source`, `startDate`.\n\nCommon query parameters: `mode`.\n\nSource handler: `pages/api/client-onboarding.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":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `accountKeys`, `action`, `companyId`, `confirmedNoExistingBooks`, `cutoffDate`, `dismissedFrom`, `source`, `startDate`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountKeys":{"type":"string","description":"AccountKeys payload field."},"action":{"type":"string","description":"Action payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"confirmedNoExistingBooks":{"type":"string","description":"ConfirmedNoExistingBooks payload field."},"cutoffDate":{"type":"string","format":"date","description":"CutoffDate in YYYY-MM-DD format."},"dismissedFrom":{"type":"string","description":"DismissedFrom payload field."},"source":{"type":"string","description":"Source payload field."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/client-onboarding/bookkeeping-guide":{"get":{"operationId":"get_client_onboarding_bookkeeping_guide","tags":["Client Onboarding"],"summary":"Retrieve Client Onboarding Bookkeeping Guide","description":"Retrieve Client Onboarding Bookkeeping Guide.\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/client-onboarding/bookkeeping-guide.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"}}]},"put":{"operationId":"put_client_onboarding_bookkeeping_guide","tags":["Client Onboarding"],"summary":"Replace Client Onboarding Bookkeeping Guide","description":"Replace Client Onboarding Bookkeeping Guide.\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: `confirmedDurable`, `content`, `expectedUpdatedAt`, `guide`, `reason`, `section`.\n\nSource handler: `pages/api/client-onboarding/bookkeeping-guide.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: `confirmedDurable`, `content`, `expectedUpdatedAt`, `guide`, `reason`, `section`.","content":{"application/json":{"schema":{"type":"object","properties":{"confirmedDurable":{"type":"string","description":"ConfirmedDurable payload field."},"content":{"type":"string","description":"Content payload field."},"expectedUpdatedAt":{"type":"string","format":"date-time","description":"ExpectedUpdatedAt as an ISO 8601 date-time."},"guide":{"type":"string","description":"Guide payload field."},"reason":{"type":"string","description":"Reason payload field."},"section":{"type":"string","description":"Section payload field."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_client_onboarding_bookkeeping_guide","tags":["Client Onboarding"],"summary":"Update Client Onboarding Bookkeeping Guide","description":"Update Client Onboarding Bookkeeping Guide.\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: `confirmedDurable`, `content`, `expectedUpdatedAt`, `guide`, `reason`, `section`.\n\nSource handler: `pages/api/client-onboarding/bookkeeping-guide.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: `confirmedDurable`, `content`, `expectedUpdatedAt`, `guide`, `reason`, `section`.","content":{"application/json":{"schema":{"type":"object","properties":{"confirmedDurable":{"type":"string","description":"ConfirmedDurable payload field."},"content":{"type":"string","description":"Content payload field."},"expectedUpdatedAt":{"type":"string","format":"date-time","description":"ExpectedUpdatedAt as an ISO 8601 date-time."},"guide":{"type":"string","description":"Guide payload field."},"reason":{"type":"string","description":"Reason payload field."},"section":{"type":"string","description":"Section payload field."}},"additionalProperties":true}}}}}},"/api/client-onboarding/complete-cold-start":{"post":{"operationId":"post_client_onboarding_complete_cold_start","tags":["Client Onboarding"],"summary":"Execute Client Onboarding Complete Cold Start","description":"Execute Client Onboarding Complete Cold Start.\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: `accounts`, `approvalMode`, `bookkeepingGuide`, `completionMode`, `deferBookkeepingGuide`, `groupDraft`, `openingBalance`.\n\nSource handler: `pages/api/client-onboarding/complete-cold-start.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: `accounts`, `approvalMode`, `bookkeepingGuide`, `completionMode`, `deferBookkeepingGuide`, `groupDraft`, `openingBalance`.","content":{"application/json":{"schema":{"type":"object","properties":{"accounts":{"type":"string","description":"Accounts payload field."},"approvalMode":{"type":"string","description":"ApprovalMode payload field."},"bookkeepingGuide":{"type":"string","description":"BookkeepingGuide payload field."},"completionMode":{"type":"string","description":"CompletionMode payload field."},"deferBookkeepingGuide":{"type":"string","description":"DeferBookkeepingGuide payload field."},"groupDraft":{"type":"string","description":"GroupDraft payload field."},"openingBalance":{"type":"string","description":"OpeningBalance payload field."}},"additionalProperties":true}}}}}},"/api/client-onboarding/create-blank":{"post":{"operationId":"post_client_onboarding_create_blank","tags":["Client Onboarding"],"summary":"Create Client Onboarding Create Blank","description":"Create Client Onboarding Create Blank.\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: `companyId`.\n\nSource handler: `pages/api/client-onboarding/create-blank.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: `companyId`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/client-onboarding/digits":{"post":{"operationId":"post_client_onboarding_digits","tags":["Client Onboarding"],"summary":"Execute Client Onboarding Digits","description":"Execute Client Onboarding Digits.\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/client-onboarding/digits.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/client-onboarding/essentials":{"get":{"operationId":"get_client_onboarding_essentials","tags":["Client Onboarding"],"summary":"Retrieve Client Onboarding Essentials","description":"Retrieve Client Onboarding Essentials.\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\nSource handler: `pages/api/client-onboarding/essentials.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"}}]},"post":{"operationId":"post_client_onboarding_essentials","tags":["Client Onboarding"],"summary":"Execute Client Onboarding Essentials","description":"Execute Client Onboarding Essentials.\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: `groups`.\n\nSource handler: `pages/api/client-onboarding/essentials.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: `groups`.","content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"string","description":"Groups payload field."}},"additionalProperties":true}}}}}},"/api/client-onboarding/existing-books":{"get":{"operationId":"get_client_onboarding_existing_books","tags":["Client Onboarding"],"summary":"Retrieve Client Onboarding Existing Books","description":"Retrieve Client Onboarding Existing Books.\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: `mode`.\n\nSource handler: `pages/api/client-onboarding/existing-books.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":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}}]},"post":{"operationId":"post_client_onboarding_existing_books","tags":["Client Onboarding"],"summary":"Execute Client Onboarding Existing Books","description":"Execute Client Onboarding Existing Books.\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: `action`, `companyId`, `confirmed`, `snapshot`.\n\nCommon query parameters: `mode`.\n\nSource handler: `pages/api/client-onboarding/existing-books.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":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `companyId`, `confirmed`, `snapshot`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"confirmed":{"type":"string","description":"Confirmed payload field."},"snapshot":{"type":"string","description":"Snapshot payload field."}},"additionalProperties":true}}}}}},"/api/client-onboarding/firm-template":{"get":{"operationId":"get_client_onboarding_firm_template","tags":["Client Onboarding"],"summary":"Retrieve Client Onboarding Firm Template","description":"Retrieve Client Onboarding Firm Template.\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: `companyId`, `mode`, `sourceCompanyId`.\n\nSource handler: `pages/api/client-onboarding/firm-template.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":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}},{"name":"sourceCompanyId","in":"query","required":false,"description":"SourceCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_client_onboarding_firm_template","tags":["Client Onboarding"],"summary":"Execute Client Onboarding Firm Template","description":"Execute Client Onboarding Firm Template.\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: `companyId`, `sourceCompanyId`.\n\nCommon query parameters: `companyId`, `mode`, `sourceCompanyId`.\n\nSource handler: `pages/api/client-onboarding/firm-template.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":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}},{"name":"sourceCompanyId","in":"query","required":false,"description":"SourceCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `companyId`, `sourceCompanyId`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"sourceCompanyId":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/client-onboarding/review-upload":{"post":{"operationId":"post_client_onboarding_review_upload","tags":["Client Onboarding"],"summary":"Execute Client Onboarding Review Upload","description":"Execute Client Onboarding Review Upload.\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: `filename`, `pathname`.\n\nSource handler: `pages/api/client-onboarding/review-upload.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: `filename`, `pathname`.","content":{"application/json":{"schema":{"type":"object","properties":{"filename":{"type":"string","description":"Filename payload field."},"pathname":{"type":"string","description":"Pathname payload field."}},"additionalProperties":true}}}}}},"/api/client-portal/access/{accessId}/request-emails":{"post":{"operationId":"post_client_portal_access_accessid_request_emails","tags":["Client Portal"],"summary":"Execute Client Portal Access By AccessId Request Emails","description":"Execute Client Portal Access By AccessId Request Emails.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/client-portal/access/[accessId]/request-emails.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"accessId","in":"path","required":true,"description":"Path identifier: accessId","schema":{"type":"string"}}]}},"/api/client-portal/access/{accessId}/revoke":{"post":{"operationId":"post_client_portal_access_accessid_revoke","tags":["Client Portal"],"summary":"Execute Client Portal Access By AccessId Revoke","description":"Execute Client Portal Access By AccessId Revoke.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/client-portal/access/[accessId]/revoke.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"accessId","in":"path","required":true,"description":"Path identifier: accessId","schema":{"type":"string"}}]}},"/api/client-portal/accessible-clients":{"get":{"operationId":"get_client_portal_accessible_clients","tags":["Client Portal"],"summary":"Retrieve Client Portal Accessible Clients","description":"Retrieve Client Portal Accessible Clients.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/client-portal/accessible-clients.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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."}}},"/api/client-portal/account-groups":{"get":{"operationId":"get_client_portal_account_groups","tags":["Client Portal"],"summary":"Get Client Portal Account Groups","description":"Get Client Portal Account Groups.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/account-groups.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/ask-ai":{"post":{"operationId":"post_client_portal_ask_ai","tags":["Client Portal"],"summary":"Execute Client Portal Ask Ai","description":"Execute Client Portal Ask Ai.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/client-portal/ask-ai.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/client-portal/chart-of-accounts":{"get":{"operationId":"get_client_portal_chart_of_accounts","tags":["Client Portal"],"summary":"Get Client Portal Chart Of Accounts","description":"Get Client Portal Chart Of Accounts.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/chart-of-accounts.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/company-info":{"get":{"operationId":"get_client_portal_company_info","tags":["Client Portal"],"summary":"Retrieve Client Portal Company Info","description":"Retrieve Client Portal Company Info.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/company-info.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/embed/config":{"get":{"operationId":"get_client_portal_embed_config","tags":["Client Portal"],"summary":"Retrieve Client Portal Embed Config","description":"Retrieve Client Portal Embed Config.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `connectionId`.\n\nSource handler: `pages/api/client-portal/embed/config.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"connectionId","in":"query","required":false,"description":"ConnectionId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ConnectionId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/embed/session":{"get":{"operationId":"get_client_portal_embed_session","tags":["Client Portal"],"summary":"Retrieve Client Portal Embed Session","description":"Retrieve Client Portal Embed Session.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/client-portal/embed/session.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/client-portal/invitations":{"post":{"operationId":"post_client_portal_invitations","tags":["Client Portal"],"summary":"Execute Client Portal Invitations","description":"Execute Client Portal Invitations.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/client-portal/invitations.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/client-portal/invitations/{invitationId}/accept":{"post":{"operationId":"post_client_portal_invitations_invitationid_accept","tags":["Client Portal"],"summary":"Execute Client Portal Invitations By InvitationId Accept","description":"Execute Client Portal Invitations By InvitationId Accept.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/client-portal/invitations/[invitationId]/accept.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"invitationId","in":"path","required":true,"description":"Path identifier: invitationId","schema":{"type":"string"}}]}},"/api/client-portal/invitations/{invitationId}/cancel":{"post":{"operationId":"post_client_portal_invitations_invitationid_cancel","tags":["Client Portal"],"summary":"Execute Client Portal Invitations By InvitationId Cancel","description":"Execute Client Portal Invitations By InvitationId Cancel.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/client-portal/invitations/[invitationId]/cancel.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"invitationId","in":"path","required":true,"description":"Path identifier: invitationId","schema":{"type":"string"}}]}},"/api/client-portal/invitations/{invitationId}/resend":{"post":{"operationId":"post_client_portal_invitations_invitationid_resend","tags":["Client Portal"],"summary":"Execute Client Portal Invitations By InvitationId Resend","description":"Execute Client Portal Invitations By InvitationId Resend.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/client-portal/invitations/[invitationId]/resend.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"invitationId","in":"path","required":true,"description":"Path identifier: invitationId","schema":{"type":"string"}}]}},"/api/client-portal/invoice-profile":{"get":{"operationId":"get_client_portal_invoice_profile","tags":["Client Portal"],"summary":"Retrieve Client Portal Invoice Profile","description":"Retrieve Client Portal Invoice Profile.\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/client-portal/invoice-profile.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"}}]},"put":{"operationId":"put_client_portal_invoice_profile","tags":["Client Portal"],"summary":"Replace Client Portal Invoice Profile","description":"Replace Client Portal Invoice Profile.\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/client-portal/invoice-profile.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/client-portal/invoice-settings":{"get":{"operationId":"get_client_portal_invoice_settings","tags":["Client Portal"],"summary":"Retrieve Client Portal Invoice Settings","description":"Retrieve Client Portal Invoice Settings.\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\nSupports optional company scoping via 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\nSource handler: `pages/api/client-portal/invoice-settings.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-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"}}]},"put":{"operationId":"put_client_portal_invoice_settings","tags":["Client Portal"],"summary":"Replace Client Portal Invoice Settings","description":"Replace Client Portal Invoice Settings.\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\nSupports optional company scoping via header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nSource handler: `pages/api/client-portal/invoice-settings.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,"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/client-portal/invoices":{"get":{"operationId":"get_client_portal_invoices","tags":["Client Portal"],"summary":"Retrieve Client Portal Invoices","description":"Retrieve Client Portal Invoices.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/client-portal/invoices.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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."}},"post":{"operationId":"post_client_portal_invoices","tags":["Client Portal"],"summary":"Execute Client Portal Invoices","description":"Execute Client Portal Invoices.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/client-portal/invoices.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/client-portal/journal-entries":{"get":{"operationId":"get_client_portal_journal_entries","tags":["Client Portal"],"summary":"Retrieve Client Portal Journal Entries","description":"Retrieve Client Portal Journal Entries.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `companyId`, `end_date`, `page`, `page_size`, `search`, `sort_direction`, `start_date`.\n\nSource handler: `pages/api/client-portal/journal-entries.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier 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":"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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"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/client-portal/journey":{"post":{"operationId":"post_client_portal_journey","tags":["Client Portal"],"summary":"Execute Client Portal Journey","description":"Execute Client Portal Journey.\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\nSource handler: `pages/api/client-portal/journey.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}},"/api/client-portal/pending-invitations":{"get":{"operationId":"get_client_portal_pending_invitations","tags":["Client Portal"],"summary":"Retrieve Client Portal Pending Invitations","description":"Retrieve Client Portal Pending Invitations.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/client-portal/pending-invitations.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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."}}},"/api/client-portal/requested-integrations":{"get":{"operationId":"get_client_portal_requested_integrations","tags":["Client Portal"],"summary":"Retrieve Client Portal Requested Integrations","description":"Retrieve Client Portal Requested Integrations.\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\nSource handler: `pages/api/client-portal/requested-integrations.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"}}]}},"/api/client-portal/users":{"get":{"operationId":"get_client_portal_users","tags":["Client Portal"],"summary":"Retrieve Client Portal Users","description":"Retrieve Client Portal Users.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/users.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/visibility":{"get":{"operationId":"get_client_portal_visibility","tags":["Client Portal"],"summary":"Retrieve Client Portal Visibility","description":"Retrieve Client Portal Visibility.\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: `manage`.\n\nSource handler: `pages/api/client-portal/visibility.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":"manage","in":"query","required":false,"description":"Manage filter or option.","schema":{"type":"string","description":"Manage filter or option."}}]},"put":{"operationId":"put_client_portal_visibility","tags":["Client Portal"],"summary":"Replace Client Portal Visibility","description":"Replace Client Portal Visibility.\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: `settings`.\n\nCommon query parameters: `manage`.\n\nSource handler: `pages/api/client-portal/visibility.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":"manage","in":"query","required":false,"description":"Manage filter or option.","schema":{"type":"string","description":"Manage filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `settings`.","content":{"application/json":{"schema":{"type":"object","properties":{"settings":{"type":"string","description":"Settings payload field."}},"additionalProperties":true}}}}}},"/api/client-portal/work":{"get":{"operationId":"get_client_portal_work","tags":["Client Portal"],"summary":"Retrieve Client Portal Work","description":"Retrieve Client Portal Work.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `companyId`, `page`, `page_size`, `status`.\n\nSource handler: `pages/api/client-portal/work.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"post":{"operationId":"post_client_portal_work","tags":["Client Portal"],"summary":"Execute Client Portal Work","description":"Execute Client Portal Work.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`, `page`, `page_size`, `status`.\n\nSource handler: `pages/api/client-portal/work.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"patch":{"operationId":"patch_client_portal_work","tags":["Client Portal"],"summary":"Update Client Portal Work","description":"Update Client Portal Work.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`, `page`, `page_size`, `status`.\n\nSource handler: `pages/api/client-portal/work.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]}},"/api/client-portal/work/{workItemId}":{"get":{"operationId":"get_client_portal_work_workitemid","tags":["Client Portal"],"summary":"Retrieve Client Portal Work By WorkItemId","description":"Retrieve Client Portal Work By WorkItemId.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/work/[workItemId].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/work/{workItemId}/comments":{"post":{"operationId":"post_client_portal_work_workitemid_comments","tags":["Client Portal"],"summary":"Execute Client Portal Work By WorkItemId Comments","description":"Execute Client Portal Work By WorkItemId Comments.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/work/[workItemId]/comments.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/work/{workItemId}/journal-review-classifications":{"patch":{"operationId":"patch_client_portal_work_workitemid_journal_review_classifications","tags":["Client Portal"],"summary":"Update Client Portal Work By WorkItemId Journal Review Classifications","description":"Update Client Portal Work By WorkItemId Journal Review Classifications.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/work/[workItemId]/journal-review-classifications.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/work/{workItemId}/journal-review-notes":{"patch":{"operationId":"patch_client_portal_work_workitemid_journal_review_notes","tags":["Client Portal"],"summary":"Update Client Portal Work By WorkItemId Journal Review Notes","description":"Update Client Portal Work By WorkItemId Journal Review Notes.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/work/[workItemId]/journal-review-notes.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/work/{workItemId}/reads":{"post":{"operationId":"post_client_portal_work_workitemid_reads","tags":["Client Portal"],"summary":"Execute Client Portal Work By WorkItemId Reads","description":"Execute Client Portal Work By WorkItemId Reads.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/work/[workItemId]/reads.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/work/{workItemId}/transaction-review-note":{"patch":{"operationId":"patch_client_portal_work_workitemid_transaction_review_note","tags":["Client Portal"],"summary":"Update Client Portal Work By WorkItemId Transaction Review Note","description":"Update Client Portal Work By WorkItemId Transaction Review Note.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/client-portal/work/[workItemId]/transaction-review-note.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/client-portal/write-access":{"get":{"operationId":"get_client_portal_write_access","tags":["Client Portal"],"summary":"Retrieve Client Portal Write Access","description":"Retrieve Client Portal Write Access.\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\nSource handler: `pages/api/client-portal/write-access.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"}}]},"put":{"operationId":"put_client_portal_write_access","tags":["Client Portal"],"summary":"Replace Client Portal Write Access","description":"Replace Client Portal Write Access.\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/client-portal/write-access.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/client-presence/accounting-firms":{"get":{"operationId":"get_client_presence_accounting_firms","tags":["Client Presence"],"summary":"Get Client Presence Accounting Firms","description":"Get Client Presence Accounting Firms.\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\nCommon query parameters: `includeClientsFor`.\n\nSource handler: `pages/api/client-presence/accounting-firms.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,"parameters":[{"name":"includeClientsFor","in":"query","required":false,"description":"IncludeClientsFor flag.","schema":{"type":"boolean","description":"IncludeClientsFor flag."}}]}},"/api/client-presence/heartbeat":{"post":{"operationId":"post_client_presence_heartbeat","tags":["Client Presence"],"summary":"Execute Client Presence Heartbeat","description":"Execute Client Presence Heartbeat.\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\nSource handler: `pages/api/client-presence/heartbeat.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},"delete":{"operationId":"delete_client_presence_heartbeat","tags":["Client Presence"],"summary":"Delete Client Presence Heartbeat","description":"Delete Client Presence Heartbeat.\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\nSource handler: `pages/api/client-presence/heartbeat.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}},"/api/client-tasks":{"get":{"operationId":"get_client_tasks","tags":["Client Tasks"],"summary":"Retrieve Client Tasks","description":"Retrieve Client Tasks.\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: `page`, `page_size`, `statuses`.\n\nSource handler: `pages/api/client-tasks/index.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":"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":"statuses","in":"query","required":false,"description":"Statuses filter or option.","schema":{"type":"string","description":"Statuses filter or option."}}]},"post":{"operationId":"post_client_tasks","tags":["Client Tasks"],"summary":"Execute Client Tasks","description":"Execute Client Tasks.\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: `usageSource`.\n\nCommon query parameters: `page`, `page_size`, `statuses`.\n\nSource handler: `pages/api/client-tasks/index.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":"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":"statuses","in":"query","required":false,"description":"Statuses filter or option.","schema":{"type":"string","description":"Statuses filter or option."}}],"requestBody":{"required":true,"description":"JSON payload generated from exported Zod schema `createTasksSchema` used by `pages/api/client-tasks/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"taskType":{"default":"books_close","type":"string","enum":["books_close"]},"title":{"type":"string","minLength":1,"maxLength":300},"description":{"nullable":true,"type":"string","maxLength":5000},"dueDate":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"priority":{"default":"normal","type":"string","enum":["low","normal","high"]},"recurrenceFrequency":{"default":"none","type":"string","enum":["none","weekly","monthly","quarterly","yearly"]},"recurrenceInterval":{"default":1,"type":"integer","minimum":1,"maximum":52},"recurrenceEndDate":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"assigneeUserId":{"nullable":true,"type":"string"},"automation":{"type":"object","properties":{"enabled":{"type":"boolean"},"automationType":{"default":"manual","type":"string","enum":["manual","condition","agent"]},"instruction":{"type":"string","minLength":1,"maxLength":2000},"condition":{"nullable":true,"type":"object","properties":{"combinator":{"default":"all","type":"string","enum":["all","any"]},"predicates":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"metric":{"type":"string","enum":["pending_transactions","documents_to_review","reconciliation_issues","bank_statements_queued","pending_rules","bulk_suggestions","latest_bank_transaction_date","latest_journal_entry_date"]},"operator":{"type":"string","enum":["eq","lte","gte"]},"value":{"anyOf":[{"type":"number"},{"type":"string"}]}},"required":["metric","operator","value"]}}},"required":["predicates"]},"schedule":{"nullable":true,"type":"object","properties":{"version":{"type":"number","enum":[1]},"referenceDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"repeat":{"type":"object","properties":{"unit":{"type":"string","enum":["day","week","month","quarter","year"]},"interval":{"type":"integer","minimum":1,"maximum":52}},"required":["unit","interval"]},"anchor":{"type":"string","enum":["period_start","period_end"]},"adjustments":{"default":[],"maxItems":8,"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["add"]},"unit":{"type":"string","enum":["day","week"]},"value":{"type":"integer","minimum":-62,"maximum":62}},"required":["type","unit","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["weekdays"]},"value":{"type":"integer","minimum":-45,"maximum":45}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["start_of_week"]},"offsetWeeks":{"default":0,"type":"integer","minimum":-12,"maximum":12}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["end_of_week"]},"offsetWeeks":{"default":0,"type":"integer","minimum":-12,"maximum":12}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["weekday"]},"weekday":{"type":"integer","minimum":0,"maximum":6},"direction":{"type":"string","enum":["on_or_after","after","on_or_before","before"]}},"required":["type","weekday","direction"]},{"type":"object","properties":{"type":{"type":"string","enum":["day_of_month"]},"day":{"type":"integer","minimum":1,"maximum":31}},"required":["type","day"]},{"type":"object","properties":{"type":{"type":"string","enum":["business_day"]},"direction":{"type":"string","enum":["next","previous"]}},"required":["type","direction"]}]}},"localTime":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"weekStartsOn":{"default":1,"type":"integer","minimum":0,"maximum":6}},"required":["version","referenceDate","repeat","anchor","localTime"]},"checkFrequency":{"type":"string","enum":["once","daily","weekly","monthly","quarterly","yearly"]},"checkInterval":{"type":"integer","minimum":1,"maximum":52},"checkTimezone":{"type":"string","minLength":1,"maxLength":100},"nextCheckAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"notifyOnFailure":{"type":"boolean"}},"required":["enabled","instruction","condition","schedule","checkFrequency","checkInterval","checkTimezone","nextCheckAt","notifyOnFailure"]},"clientPortalRequest":{"nullable":true,"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":5000},"recipientEmailsByCompanyId":{"type":"object","additionalProperties":{"maxItems":50,"type":"array","items":{"type":"string","maxLength":320,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}}},"includeClientPortalLink":{"type":"boolean"},"sendEmail":{"type":"boolean"},"notificationTiming":{"type":"string","enum":["on_task_created","on_task_run"]},"followUp":{"nullable":true,"type":"object","properties":{"intervalDays":{"type":"integer","minimum":1,"maximum":90},"method":{"type":"string","enum":["same","email","client_portal_request"]}},"required":["intervalDays","method"]}},"required":["title","body","recipientEmailsByCompanyId","includeClientPortalLink","sendEmail"]},"delegation":{"nullable":true,"type":"object","properties":{"task":{"type":"string","minLength":1,"maxLength":5000},"successCondition":{"type":"string","minLength":1,"maxLength":2000}},"required":["task","successCondition"]},"reminder":{"nullable":true,"type":"object","properties":{"recipientUserIds":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"daysBeforeDueDate":{"type":"integer","minimum":0,"maximum":365},"localTime":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"timezone":{"type":"string","minLength":1,"maxLength":100},"channels":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]}},"required":["recipientUserIds","daysBeforeDueDate","localTime","timezone","channels"]}},"required":["companyIds","title"]}}}}}},"/api/client-tasks/{taskId}":{"patch":{"operationId":"patch_client_tasks_taskid","tags":["Client Tasks"],"summary":"Update Client Tasks By TaskId","description":"Update Client Tasks By TaskId.\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\nJSON body keys used by this method: `recurrenceEndDate`, `recurrenceFrequency`, `recurrenceInterval`, `status`, `usageSource`.\n\nSource handler: `pages/api/client-tasks/[taskId].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,"parameters":[{"name":"taskId","in":"path","required":true,"description":"Path identifier: taskId","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"JSON payload generated from exported Zod schema `updateTaskSchema` used by `pages/api/client-tasks/[taskId].ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"description":{"nullable":true,"type":"string","maxLength":5000},"dueDate":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"priority":{"type":"string","enum":["low","normal","high"]},"recurrenceFrequency":{"type":"string","enum":["none","weekly","monthly","quarterly","yearly"]},"recurrenceInterval":{"type":"integer","minimum":1,"maximum":52},"recurrenceEndDate":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"status":{"type":"string","enum":["open","completed","archived"]},"assigneeUserId":{"nullable":true,"type":"string"}}}}}}},"delete":{"operationId":"delete_client_tasks_taskid","tags":["Client Tasks"],"summary":"Delete Client Tasks By TaskId","description":"Delete Client Tasks By TaskId.\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\nJSON body keys used by this method: `recurrenceEndDate`, `recurrenceFrequency`, `recurrenceInterval`, `status`, `usageSource`.\n\nSource handler: `pages/api/client-tasks/[taskId].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,"parameters":[{"name":"taskId","in":"path","required":true,"description":"Path identifier: taskId","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"JSON payload generated from exported Zod schema `updateTaskSchema` used by `pages/api/client-tasks/[taskId].ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"description":{"nullable":true,"type":"string","maxLength":5000},"dueDate":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"priority":{"type":"string","enum":["low","normal","high"]},"recurrenceFrequency":{"type":"string","enum":["none","weekly","monthly","quarterly","yearly"]},"recurrenceInterval":{"type":"integer","minimum":1,"maximum":52},"recurrenceEndDate":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"status":{"type":"string","enum":["open","completed","archived"]},"assigneeUserId":{"nullable":true,"type":"string"}}}}}}}},"/api/client-tasks/{taskId}/run":{"post":{"operationId":"post_client_tasks_taskid_run","tags":["Client Tasks"],"summary":"Execute Client Tasks By TaskId Run","description":"Execute Client Tasks By TaskId Run.\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\nSource handler: `pages/api/client-tasks/[taskId]/run.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,"parameters":[{"name":"taskId","in":"path","required":true,"description":"Path identifier: taskId","schema":{"type":"string"}}]}},"/api/client-work":{"get":{"operationId":"get_client_work","tags":["Client Work"],"summary":"Retrieve Client Work","description":"Retrieve Client Work.\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: `externalTransactionId`, `journalEntryId`, `page`, `page_size`, `status`, `statuses`.\n\nSource handler: `pages/api/client-work/index.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":"externalTransactionId","in":"query","required":false,"description":"ExternalTransactionId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ExternalTransactionId. Use an identifier returned by Wesley."}},{"name":"journalEntryId","in":"query","required":false,"description":"JournalEntryId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"JournalEntryId. Use an identifier returned by Wesley."}},{"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":"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."}}]},"post":{"operationId":"post_client_work","tags":["Client Work"],"summary":"Execute Client Work","description":"Execute Client Work.\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: `externalTransactionId`, `journalEntryId`, `page`, `page_size`, `status`, `statuses`.\n\nSource handler: `pages/api/client-work/index.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":"externalTransactionId","in":"query","required":false,"description":"ExternalTransactionId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ExternalTransactionId. Use an identifier returned by Wesley."}},{"name":"journalEntryId","in":"query","required":false,"description":"JournalEntryId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"JournalEntryId. Use an identifier returned by Wesley."}},{"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":"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."}}],"requestBody":{"required":true,"description":"JSON payload generated from exported Zod schema `bulkDeleteSchema` used by `pages/api/client-work/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":5000},"requestType":{"type":"string","enum":["w9_request"]},"w9VendorIds":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"w9AutoFollowUp":{"type":"boolean"},"externalTransactionId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"journalEntryId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"journalEntryIds":{"nullable":true,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"transactionEmailPreview":{"nullable":true,"type":"object","properties":{"totalCount":{"type":"integer","minimum":1,"maximum":100000},"rows":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"date":{"type":"string","minLength":1,"maxLength":40},"description":{"type":"string","minLength":1,"maxLength":300},"sourceAccount":{"type":"string","maxLength":300},"amount":{"type":"string","maxLength":80}},"required":["date","description","sourceAccount","amount"]}}},"required":["totalCount","rows"]},"gmailSenderType":{"nullable":true,"type":"string","enum":["manual","personal","wesley"]},"journalEntryGroup":{"nullable":true,"type":"object","properties":{"accountIds":{"nullable":true,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"accountName":{"nullable":true,"type":"string","maxLength":300},"accountCode":{"nullable":true,"type":"string","maxLength":80},"accountCategory":{"nullable":true,"type":"string","maxLength":120},"rangeStart":{"nullable":true,"type":"string","maxLength":20},"rangeEnd":{"nullable":true,"type":"string","maxLength":20},"source":{"nullable":true,"type":"string","enum":["journals","reports"]},"entryCount":{"nullable":true,"type":"integer","minimum":0,"maximum":100000},"lineCount":{"nullable":true,"type":"integer","minimum":0,"maximum":100000},"reviewRows":{"nullable":true,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"targetLineIds":{"nullable":true,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"date":{"nullable":true,"type":"string","maxLength":20},"description":{"nullable":true,"type":"string","maxLength":300},"amount":{"nullable":true,"type":"number"},"moneyIn":{"nullable":true,"type":"number"},"moneyOut":{"nullable":true,"type":"number"},"otherAccounts":{"nullable":true,"type":"string","maxLength":2000},"prompt":{"nullable":true,"type":"string","maxLength":300}},"required":["entryId"]}}}},"assigneeUserId":{"nullable":true,"type":"string"},"recipientEmails":{"maxItems":50,"type":"array","items":{"type":"string","maxLength":320,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"includeClientPortalLink":{"default":false,"type":"boolean"},"askClientEntryPoint":{"nullable":true,"type":"string","enum":["transaction_more","transaction_bulk","journals","reports","client_work","generic_checks"]}},"required":["companyId","title","body"]}}}}},"patch":{"operationId":"patch_client_work","tags":["Client Work"],"summary":"Update Client Work","description":"Update Client Work.\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: `externalTransactionId`, `journalEntryId`, `page`, `page_size`, `status`, `statuses`.\n\nSource handler: `pages/api/client-work/index.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":"externalTransactionId","in":"query","required":false,"description":"ExternalTransactionId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ExternalTransactionId. Use an identifier returned by Wesley."}},{"name":"journalEntryId","in":"query","required":false,"description":"JournalEntryId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"JournalEntryId. Use an identifier returned by Wesley."}},{"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":"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."}}],"requestBody":{"required":true,"description":"JSON payload generated from exported Zod schema `bulkDeleteSchema` used by `pages/api/client-work/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":5000},"requestType":{"type":"string","enum":["w9_request"]},"w9VendorIds":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"w9AutoFollowUp":{"type":"boolean"},"externalTransactionId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"journalEntryId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"journalEntryIds":{"nullable":true,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"transactionEmailPreview":{"nullable":true,"type":"object","properties":{"totalCount":{"type":"integer","minimum":1,"maximum":100000},"rows":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"date":{"type":"string","minLength":1,"maxLength":40},"description":{"type":"string","minLength":1,"maxLength":300},"sourceAccount":{"type":"string","maxLength":300},"amount":{"type":"string","maxLength":80}},"required":["date","description","sourceAccount","amount"]}}},"required":["totalCount","rows"]},"gmailSenderType":{"nullable":true,"type":"string","enum":["manual","personal","wesley"]},"journalEntryGroup":{"nullable":true,"type":"object","properties":{"accountIds":{"nullable":true,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"accountName":{"nullable":true,"type":"string","maxLength":300},"accountCode":{"nullable":true,"type":"string","maxLength":80},"accountCategory":{"nullable":true,"type":"string","maxLength":120},"rangeStart":{"nullable":true,"type":"string","maxLength":20},"rangeEnd":{"nullable":true,"type":"string","maxLength":20},"source":{"nullable":true,"type":"string","enum":["journals","reports"]},"entryCount":{"nullable":true,"type":"integer","minimum":0,"maximum":100000},"lineCount":{"nullable":true,"type":"integer","minimum":0,"maximum":100000},"reviewRows":{"nullable":true,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"targetLineIds":{"nullable":true,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"date":{"nullable":true,"type":"string","maxLength":20},"description":{"nullable":true,"type":"string","maxLength":300},"amount":{"nullable":true,"type":"number"},"moneyIn":{"nullable":true,"type":"number"},"moneyOut":{"nullable":true,"type":"number"},"otherAccounts":{"nullable":true,"type":"string","maxLength":2000},"prompt":{"nullable":true,"type":"string","maxLength":300}},"required":["entryId"]}}}},"assigneeUserId":{"nullable":true,"type":"string"},"recipientEmails":{"maxItems":50,"type":"array","items":{"type":"string","maxLength":320,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"includeClientPortalLink":{"default":false,"type":"boolean"},"askClientEntryPoint":{"nullable":true,"type":"string","enum":["transaction_more","transaction_bulk","journals","reports","client_work","generic_checks"]}},"required":["companyId","title","body"]}}}}},"delete":{"operationId":"delete_client_work","tags":["Client Work"],"summary":"Delete Client Work","description":"Delete Client Work.\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: `externalTransactionId`, `journalEntryId`, `page`, `page_size`, `status`, `statuses`.\n\nSource handler: `pages/api/client-work/index.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":"externalTransactionId","in":"query","required":false,"description":"ExternalTransactionId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ExternalTransactionId. Use an identifier returned by Wesley."}},{"name":"journalEntryId","in":"query","required":false,"description":"JournalEntryId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"JournalEntryId. Use an identifier returned by Wesley."}},{"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":"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."}}],"requestBody":{"required":true,"description":"JSON payload generated from exported Zod schema `bulkDeleteSchema` used by `pages/api/client-work/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":5000},"requestType":{"type":"string","enum":["w9_request"]},"w9VendorIds":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"w9AutoFollowUp":{"type":"boolean"},"externalTransactionId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"journalEntryId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"journalEntryIds":{"nullable":true,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"transactionEmailPreview":{"nullable":true,"type":"object","properties":{"totalCount":{"type":"integer","minimum":1,"maximum":100000},"rows":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"date":{"type":"string","minLength":1,"maxLength":40},"description":{"type":"string","minLength":1,"maxLength":300},"sourceAccount":{"type":"string","maxLength":300},"amount":{"type":"string","maxLength":80}},"required":["date","description","sourceAccount","amount"]}}},"required":["totalCount","rows"]},"gmailSenderType":{"nullable":true,"type":"string","enum":["manual","personal","wesley"]},"journalEntryGroup":{"nullable":true,"type":"object","properties":{"accountIds":{"nullable":true,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"accountName":{"nullable":true,"type":"string","maxLength":300},"accountCode":{"nullable":true,"type":"string","maxLength":80},"accountCategory":{"nullable":true,"type":"string","maxLength":120},"rangeStart":{"nullable":true,"type":"string","maxLength":20},"rangeEnd":{"nullable":true,"type":"string","maxLength":20},"source":{"nullable":true,"type":"string","enum":["journals","reports"]},"entryCount":{"nullable":true,"type":"integer","minimum":0,"maximum":100000},"lineCount":{"nullable":true,"type":"integer","minimum":0,"maximum":100000},"reviewRows":{"nullable":true,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"targetLineIds":{"nullable":true,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"date":{"nullable":true,"type":"string","maxLength":20},"description":{"nullable":true,"type":"string","maxLength":300},"amount":{"nullable":true,"type":"number"},"moneyIn":{"nullable":true,"type":"number"},"moneyOut":{"nullable":true,"type":"number"},"otherAccounts":{"nullable":true,"type":"string","maxLength":2000},"prompt":{"nullable":true,"type":"string","maxLength":300}},"required":["entryId"]}}}},"assigneeUserId":{"nullable":true,"type":"string"},"recipientEmails":{"maxItems":50,"type":"array","items":{"type":"string","maxLength":320,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"includeClientPortalLink":{"default":false,"type":"boolean"},"askClientEntryPoint":{"nullable":true,"type":"string","enum":["transaction_more","transaction_bulk","journals","reports","client_work","generic_checks"]}},"required":["companyId","title","body"]}}}}}},"/api/client-work/{workItemId}":{"get":{"operationId":"get_client_work_workitemid","tags":["Client Work"],"summary":"Retrieve Client Work By WorkItemId","description":"Retrieve Client Work By WorkItemId.\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/client-work/[workItemId]/index.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":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"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/client-work/{workItemId}/comments":{"get":{"operationId":"get_client_work_workitemid_comments","tags":["Client Work"],"summary":"Retrieve Client Work By WorkItemId Comments","description":"Retrieve Client Work By WorkItemId Comments.\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\nSource handler: `pages/api/client-work/[workItemId]/comments.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":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"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"}}]},"post":{"operationId":"post_client_work_workitemid_comments","tags":["Client Work"],"summary":"Execute Client Work By WorkItemId Comments","description":"Execute Client Work By WorkItemId Comments.\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/client-work/[workItemId]/comments.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":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"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/client-work/{workItemId}/generic-check-review":{"post":{"operationId":"post_client_work_workitemid_generic_check_review","tags":["Client Work"],"summary":"Execute Client Work By WorkItemId Generic Check Review","description":"Execute Client Work By WorkItemId Generic Check Review.\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/client-work/[workItemId]/generic-check-review.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":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"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/client-work/{workItemId}/journal-entry-resolution-draft":{"post":{"operationId":"post_client_work_workitemid_journal_entry_resolution_draft","tags":["Client Work"],"summary":"Execute Client Work By WorkItemId Journal Entry Resolution Draft","description":"Execute Client Work By WorkItemId Journal Entry Resolution Draft.\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/client-work/[workItemId]/journal-entry-resolution-draft.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":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"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/client-work/{workItemId}/reads":{"post":{"operationId":"post_client_work_workitemid_reads","tags":["Client Work"],"summary":"Execute Client Work By WorkItemId Reads","description":"Execute Client Work By WorkItemId Reads.\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/client-work/[workItemId]/reads.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":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"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/client-work/{workItemId}/status":{"patch":{"operationId":"patch_client_work_workitemid_status","tags":["Client Work"],"summary":"Update Client Work By WorkItemId Status","description":"Update Client Work By WorkItemId Status.\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/client-work/[workItemId]/status.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":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"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/client-work/{workItemId}/transaction-information-gap-review":{"post":{"operationId":"post_client_work_workitemid_transaction_information_gap_review","tags":["Client Work"],"summary":"Execute Client Work By WorkItemId Transaction Information Gap Review","description":"Execute Client Work By WorkItemId Transaction Information Gap Review.\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/client-work/[workItemId]/transaction-information-gap-review.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":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"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/client-work/{workItemId}/w9-file":{"get":{"operationId":"get_client_work_workitemid_w9_file","tags":["Client Work"],"summary":"Retrieve Client Work By WorkItemId W9 File","description":"Retrieve Client Work By WorkItemId W9 File.\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\nCommon query parameters: `fileId`, `firmVendorPreview`, `inline`.\n\nSource handler: `pages/api/client-work/[workItemId]/w9-file.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,"parameters":[{"name":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}},{"name":"fileId","in":"query","required":false,"description":"FileId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"FileId. Use an identifier returned by Wesley."}},{"name":"firmVendorPreview","in":"query","required":false,"description":"FirmVendorPreview filter or option.","schema":{"type":"string","description":"FirmVendorPreview filter or option."}},{"name":"inline","in":"query","required":false,"description":"Inline filter or option.","schema":{"type":"string","description":"Inline filter or option."}}]}},"/api/client-work/{workItemId}/w9-follow-up":{"post":{"operationId":"post_client_work_workitemid_w9_follow_up","tags":["Client Work"],"summary":"Execute Client Work By WorkItemId W9 Follow Up","description":"Execute Client Work By WorkItemId W9 Follow Up.\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\nSource handler: `pages/api/client-work/[workItemId]/w9-follow-up.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,"parameters":[{"name":"workItemId","in":"path","required":true,"description":"Path identifier: workItemId","schema":{"type":"string"}}]}},"/api/client-work/recipients":{"get":{"operationId":"get_client_work_recipients","tags":["Client Work"],"summary":"Retrieve Client Work Recipients","description":"Retrieve Client Work Recipients.\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\nSource handler: `pages/api/client-work/recipients.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"}}]}},"/api/codex/artifacts/access":{"get":{"operationId":"get_codex_artifacts_access","tags":["Codex"],"summary":"Retrieve Codex Artifacts Access","description":"Retrieve Codex Artifacts Access.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `name`, `pathname`, `sessionId`.\n\nSource handler: `pages/api/codex/artifacts/access.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-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":"name","in":"query","required":false,"description":"Name filter or option.","schema":{"type":"string","description":"Name filter or option."}},{"name":"pathname","in":"query","required":false,"description":"Pathname filter or option.","schema":{"type":"string","description":"Pathname filter or option."}},{"name":"sessionId","in":"query","required":false,"description":"SessionId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SessionId. Use an identifier returned by Wesley."}}]}},"/api/codex/artifacts/download":{"get":{"operationId":"get_codex_artifacts_download","tags":["Codex"],"summary":"Retrieve Codex Artifacts Download","description":"Retrieve Codex Artifacts Download.\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\nDownload endpoint that may return file payloads or download metadata.\n\nCommon query parameters: `filename`, `pathname`, `sessionId`.\n\nSource handler: `pages/api/codex/artifacts/download.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,"parameters":[{"name":"filename","in":"query","required":false,"description":"Filename filter or option.","schema":{"type":"string","description":"Filename filter or option."}},{"name":"pathname","in":"query","required":false,"description":"Pathname filter or option.","schema":{"type":"string","description":"Pathname filter or option."}},{"name":"sessionId","in":"query","required":false,"description":"SessionId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SessionId. Use an identifier returned by Wesley."}}]}},"/api/codex/artifacts/upload":{"post":{"operationId":"post_codex_artifacts_upload","tags":["Codex"],"summary":"Execute Codex Artifacts Upload","description":"Execute Codex Artifacts Upload.\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\nSource handler: `pages/api/codex/artifacts/upload.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}},"/api/codex/attachments/access":{"get":{"operationId":"get_codex_attachments_access","tags":["Codex"],"summary":"Retrieve Codex Attachments Access","description":"Retrieve Codex Attachments Access.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `download`, `pathname`, `sessionId`.\n\nSource handler: `pages/api/codex/attachments/access.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-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":"download","in":"query","required":false,"description":"Download filter or option.","schema":{"type":"string","description":"Download filter or option."}},{"name":"pathname","in":"query","required":false,"description":"Pathname filter or option.","schema":{"type":"string","description":"Pathname filter or option."}},{"name":"sessionId","in":"query","required":false,"description":"SessionId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SessionId. Use an identifier returned by Wesley."}}]}},"/api/codex/notifications":{"post":{"operationId":"post_codex_notifications","tags":["Codex"],"summary":"Execute Codex Notifications","description":"Execute Codex Notifications.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/codex/notifications.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/codex/run":{"post":{"operationId":"post_codex_run","tags":["Codex"],"summary":"Execute Codex Run","description":"Execute Codex Run.\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\nSource handler: `pages/api/codex/run.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}},"/api/codex/runs":{"post":{"operationId":"post_codex_runs","tags":["Codex"],"summary":"Execute Codex Runs","description":"Execute Codex Runs.\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\nSource handler: `pages/api/codex/runs/index.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}},"/api/codex/runs/{runId}/events":{"get":{"operationId":"get_codex_runs_runid_events","tags":["Codex"],"summary":"Retrieve Codex Runs By RunId Events","description":"Retrieve Codex Runs By RunId Events.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `after`.\n\nSource handler: `pages/api/codex/runs/[runId]/events.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-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":"runId","in":"path","required":true,"description":"Path identifier: runId","schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"After filter or option.","schema":{"type":"string","description":"After filter or option."}}]}},"/api/codex/runs/{runId}/stop":{"post":{"operationId":"post_codex_runs_runid_stop","tags":["Codex"],"summary":"Execute Codex Runs By RunId Stop","description":"Execute Codex Runs By RunId Stop.\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\nSource handler: `pages/api/codex/runs/[runId]/stop.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,"parameters":[{"name":"runId","in":"path","required":true,"description":"Path identifier: runId","schema":{"type":"string"}}]}},"/api/codex/saved-prompts":{"get":{"operationId":"get_codex_saved_prompts","tags":["Codex"],"summary":"Retrieve Codex Saved Prompts","description":"Retrieve Codex Saved Prompts.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/codex/saved-prompts/index.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-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."}},"post":{"operationId":"post_codex_saved_prompts","tags":["Codex"],"summary":"Execute Codex Saved Prompts","description":"Execute Codex Saved Prompts.\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\nSource handler: `pages/api/codex/saved-prompts/index.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}},"/api/codex/saved-prompts/{promptId}":{"delete":{"operationId":"delete_codex_saved_prompts_promptid","tags":["Codex"],"summary":"Delete Codex Saved Prompts By PromptId","description":"Delete Codex Saved Prompts By PromptId.\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\nSource handler: `pages/api/codex/saved-prompts/[promptId].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,"parameters":[{"name":"promptId","in":"path","required":true,"description":"Path identifier: promptId","schema":{"type":"string"}}]}},"/api/codex/sessions":{"get":{"operationId":"get_codex_sessions","tags":["Codex"],"summary":"Retrieve Codex Sessions","description":"Retrieve Codex Sessions.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `limit`.\n\nSource handler: `pages/api/codex/sessions.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-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":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]}},"/api/codex/sessions/{sessionId}":{"patch":{"operationId":"patch_codex_sessions_sessionid","tags":["Codex"],"summary":"Update Codex Sessions By SessionId","description":"Update Codex Sessions By SessionId.\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\nJSON body keys used by this method: `title`.\n\nSource handler: `pages/api/codex/sessions/[sessionId].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,"parameters":[{"name":"sessionId","in":"path","required":true,"description":"Path identifier: sessionId","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `title`.","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Title payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_codex_sessions_sessionid","tags":["Codex"],"summary":"Delete Codex Sessions By SessionId","description":"Delete Codex Sessions By SessionId.\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\nJSON body keys used by this method: `title`.\n\nSource handler: `pages/api/codex/sessions/[sessionId].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,"parameters":[{"name":"sessionId","in":"path","required":true,"description":"Path identifier: sessionId","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `title`.","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Title payload field."}},"additionalProperties":true}}}}}},"/api/codex/sessions/{sessionId}/messages":{"get":{"operationId":"get_codex_sessions_sessionid_messages","tags":["Codex"],"summary":"Retrieve Codex Sessions By SessionId Messages","description":"Retrieve Codex Sessions By SessionId Messages.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/codex/sessions/[sessionId]/messages.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-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":"sessionId","in":"path","required":true,"description":"Path identifier: sessionId","schema":{"type":"string"}}]}},"/api/codex/sessions/prewarm":{"post":{"operationId":"post_codex_sessions_prewarm","tags":["Codex"],"summary":"Execute Codex Sessions Prewarm","description":"Execute Codex Sessions Prewarm.\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\nJSON body keys used by this method: `clientId`, `sessionId`.\n\nSource handler: `pages/api/codex/sessions/prewarm.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `clientId`, `sessionId`.","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."},"sessionId":{"type":"string","description":"SessionId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/codex/voice-transcription":{"post":{"operationId":"post_codex_voice_transcription","tags":["Codex"],"summary":"Execute Codex Voice Transcription","description":"Execute Codex Voice Transcription.\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\nAccepts multipart form uploads for file-based workflows.\n\nSource handler: `pages/api/codex/voice-transcription.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,"requestBody":{"required":false,"description":"Multipart upload payload for file-processing workflows.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"files":{"type":"array","items":{"type":"string","format":"binary"}}},"additionalProperties":true}},"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}},"/api/companies/ai-mode":{"get":{"operationId":"get_companies_ai_mode","tags":["Companies"],"summary":"Retrieve Companies Ai Mode","description":"Retrieve Companies Ai Mode.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/companies/ai-mode.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":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]},"put":{"operationId":"put_companies_ai_mode","tags":["Companies"],"summary":"Replace Companies Ai Mode","description":"Replace Companies Ai Mode.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/companies/ai-mode.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":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/companies/bulk-create":{"post":{"operationId":"post_companies_bulk_create","tags":["Companies"],"summary":"Create Companies Bulk Create","description":"Create Companies Bulk Create.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nBulk operation that can affect multiple records in one request.\n\nSource handler: `pages/api/companies/bulk-create.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/companies/create":{"post":{"operationId":"post_companies_create","tags":["Companies"],"summary":"Create Companies Create","description":"Create Companies Create.\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\nJSON body keys used by this method: `accountingFirmId`, `accounting_firm_id`, `aiMode`, `ai_mode`, `businessType`, `business_type`, `description`, `federalReturnForm`, `federal_return_form`, `industry`, `name`, `onboardingSource`, ....\n\nSource handler: `pages/api/companies/create.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `accountingFirmId`, `accounting_firm_id`, `aiMode`, `ai_mode`, `businessType`, `business_type`, `description`, `federalReturnForm`, `federal_return_form`, `industry`, `name`, `onboardingSource`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"accountingFirmId":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."},"accounting_firm_id":{"type":"string","description":"Accounting Firm Id. Use an identifier returned by Wesley."},"aiMode":{"type":"string","description":"AiMode payload field."},"ai_mode":{"type":"string","description":"Ai Mode payload field."},"businessType":{"type":"string","description":"BusinessType payload field."},"business_type":{"type":"string","description":"Business Type payload field."},"description":{"type":"string","description":"Description payload field."},"federalReturnForm":{"type":"string","description":"FederalReturnForm payload field."},"federal_return_form":{"type":"string","description":"Federal Return Form payload field."},"industry":{"type":"string","description":"Industry payload field."},"name":{"type":"string","description":"Name payload field."},"onboardingSource":{"type":"string","description":"OnboardingSource payload field."},"onboarding_source":{"type":"string","description":"Onboarding Source payload field."}},"additionalProperties":true}}}}}},"/api/companies/danger-zone-request":{"post":{"operationId":"post_companies_danger_zone_request","tags":["Companies"],"summary":"Execute Companies Danger Zone Request","description":"Execute Companies Danger Zone Request.\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/companies/danger-zone-request.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/companies/delete":{"get":{"operationId":"get_companies_delete","tags":["Companies"],"summary":"Retrieve Companies Delete","description":"Retrieve Companies Delete.\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: `batched`.\n\nSource handler: `pages/api/companies/delete.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":"batched","in":"query","required":false,"description":"Batched filter or option.","schema":{"type":"string","description":"Batched filter or option."}}]},"delete":{"operationId":"delete_companies_delete","tags":["Companies"],"summary":"Delete Companies Delete","description":"Delete Companies Delete.\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: `batched`.\n\nSource handler: `pages/api/companies/delete.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":"batched","in":"query","required":false,"description":"Batched filter or option.","schema":{"type":"string","description":"Batched filter or option."}}]}},"/api/companies/delete-range":{"post":{"operationId":"post_companies_delete_range","tags":["Companies"],"summary":"Execute Companies Delete Range","description":"Execute Companies Delete Range.\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: `endDate`, `end_date`, `startDate`, `start_date`.\n\nSource handler: `pages/api/companies/delete-range.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: `endDate`, `end_date`, `startDate`, `start_date`.","content":{"application/json":{"schema":{"type":"object","properties":{"endDate":{"type":"string","format":"date","description":"EndDate in YYYY-MM-DD format."},"end_date":{"type":"string","format":"date","description":"End Date in YYYY-MM-DD format."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."},"start_date":{"type":"string","format":"date","description":"Start Date in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/companies/ein":{"get":{"operationId":"get_companies_ein","tags":["Companies"],"summary":"Retrieve Companies Ein","description":"Retrieve Companies Ein.\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/companies/ein.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"}}]},"put":{"operationId":"put_companies_ein","tags":["Companies"],"summary":"Replace Companies Ein","description":"Replace Companies Ein.\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: `ein`.\n\nSource handler: `pages/api/companies/ein.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: `ein`.","content":{"application/json":{"schema":{"type":"object","properties":{"ein":{"type":"string","description":"Ein payload field."}},"additionalProperties":true}}}}}},"/api/companies/quickbooks-transaction-reference-defaults":{"get":{"operationId":"get_companies_quickbooks_transaction_reference_defaults","tags":["Companies"],"summary":"Retrieve Companies Quickbooks Transaction Reference Defaults","description":"Retrieve Companies Quickbooks Transaction Reference Defaults.\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\nSource handler: `pages/api/companies/quickbooks-transaction-reference-defaults.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"}}]},"put":{"operationId":"put_companies_quickbooks_transaction_reference_defaults","tags":["Companies"],"summary":"Replace Companies Quickbooks Transaction Reference Defaults","description":"Replace Companies Quickbooks Transaction Reference Defaults.\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/companies/quickbooks-transaction-reference-defaults.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/companies/reset":{"post":{"operationId":"post_companies_reset","tags":["Companies"],"summary":"Execute Companies Reset","description":"Execute Companies Reset.\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: `disconnectPlaidConnections`.\n\nSource handler: `pages/api/companies/reset.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: `disconnectPlaidConnections`.","content":{"application/json":{"schema":{"type":"object","properties":{"disconnectPlaidConnections":{"type":"string","description":"DisconnectPlaidConnections payload field."}},"additionalProperties":true}}}}}},"/api/companies/status":{"put":{"operationId":"put_companies_status","tags":["Companies"],"summary":"Replace Companies Status","description":"Replace Companies Status.\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: `isActive`.\n\nSource handler: `pages/api/companies/status.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: `isActive`.","content":{"application/json":{"schema":{"type":"object","properties":{"isActive":{"type":"boolean","description":"IsActive flag."}},"additionalProperties":true}}}}}},"/api/company-comment-reads":{"post":{"operationId":"post_company_comment_reads","tags":["Company Comment Reads"],"summary":"Execute Company Comment Reads","description":"Execute Company Comment Reads.\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: `commentIds`.\n\nSource handler: `pages/api/company-comment-reads.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: `commentIds`.","content":{"application/json":{"schema":{"type":"object","properties":{"commentIds":{"type":"array","items":{"type":"string"},"description":"CommentIds. Use identifiers returned by Wesley."}},"additionalProperties":true}}}}}},"/api/company-comments":{"get":{"operationId":"get_company_comments","tags":["Company Comments"],"summary":"Retrieve Company Comments","description":"Retrieve Company Comments.\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: `journalEntryIds`, `limit`.\n\nSource handler: `pages/api/company-comments/index.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":"journalEntryIds","in":"query","required":false,"description":"JournalEntryIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"JournalEntryIds. Use identifiers returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"post":{"operationId":"post_company_comments","tags":["Company Comments"],"summary":"Execute Company Comments","description":"Execute Company Comments.\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: `body`, `commentId`.\n\nCommon query parameters: `journalEntryIds`, `limit`.\n\nSource handler: `pages/api/company-comments/index.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":"journalEntryIds","in":"query","required":false,"description":"JournalEntryIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"JournalEntryIds. Use identifiers returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `body`, `commentId`.","content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string","description":"Body payload field."},"commentId":{"type":"string","description":"CommentId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_company_comments","tags":["Company Comments"],"summary":"Update Company Comments","description":"Update Company Comments.\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: `body`, `commentId`.\n\nCommon query parameters: `journalEntryIds`, `limit`.\n\nSource handler: `pages/api/company-comments/index.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":"journalEntryIds","in":"query","required":false,"description":"JournalEntryIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"JournalEntryIds. Use identifiers returned by Wesley."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `body`, `commentId`.","content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string","description":"Body payload field."},"commentId":{"type":"string","description":"CommentId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/converted-documents":{"get":{"operationId":"get_converted_documents","tags":["Converted Documents"],"summary":"Retrieve Converted Documents","description":"Retrieve Converted Documents.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `cursor`, `limit`.\n\nSource handler: `pages/api/converted-documents.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-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":"cursor","in":"query","required":false,"description":"Cursor filter or option.","schema":{"type":"string","description":"Cursor filter or option."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]}},"/api/converted-documents/{id}/download":{"get":{"operationId":"get_converted_documents_id_download","tags":["Converted Documents"],"summary":"Retrieve Converted Documents By Id Download","description":"Retrieve Converted Documents By Id Download.\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\nDownload endpoint that may return file payloads or download metadata.\n\nCommon query parameters: `disposition`, `kind`.\n\nSource handler: `pages/api/converted-documents/[id]/download.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"name":"disposition","in":"query","required":false,"description":"Disposition filter or option.","schema":{"type":"string","description":"Disposition filter or option."}},{"name":"kind","in":"query","required":false,"description":"Kind filter or option.","schema":{"type":"string","description":"Kind filter or option."}}]}},"/api/custom-domain-auth/{action}":{"get":{"operationId":"get_custom_domain_auth_action","tags":["Custom Domain Auth"],"summary":"Retrieve Custom Domain Auth By Action","description":"Retrieve Custom Domain Auth By Action.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/custom-domain-auth/[action].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"action","in":"path","required":true,"description":"Path identifier: action","schema":{"type":"string"}}]},"post":{"operationId":"post_custom_domain_auth_action","tags":["Custom Domain Auth"],"summary":"Execute Custom Domain Auth By Action","description":"Execute Custom Domain Auth By Action.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `acceptTerms`, `challengeId`, `code`, `email`, `phase`.\n\nSource handler: `pages/api/custom-domain-auth/[action].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"action","in":"path","required":true,"description":"Path identifier: action","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `acceptTerms`, `challengeId`, `code`, `email`, `phase`.","content":{"application/json":{"schema":{"type":"object","properties":{"acceptTerms":{"type":"string","description":"AcceptTerms payload field."},"challengeId":{"type":"string","description":"ChallengeId. Use an identifier returned by Wesley."},"code":{"type":"string","description":"Code payload field."},"email":{"type":"string","format":"email","description":"Email payload field."},"phase":{"type":"string","description":"Phase payload field."}},"additionalProperties":true}}}}}},"/api/document-action-proposals":{"get":{"operationId":"get_document_action_proposals","tags":["Document Action Proposals"],"summary":"Retrieve Document Action Proposals","description":"Retrieve Document Action Proposals.\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\nSource handler: `pages/api/document-action-proposals.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"}}]},"post":{"operationId":"post_document_action_proposals","tags":["Document Action Proposals"],"summary":"Execute Document Action Proposals","description":"Execute Document Action Proposals.\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/document-action-proposals.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/document-conversion-files":{"get":{"operationId":"get_document_conversion_files","tags":["Document Conversion Files"],"summary":"Retrieve Document Conversion Files","description":"Retrieve Document Conversion Files.\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: `status`.\n\nSource handler: `pages/api/document-conversion-files.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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]}},"/api/document-conversion-files/{id}/cancel":{"post":{"operationId":"post_document_conversion_files_id_cancel","tags":["Document Conversion Files"],"summary":"Execute Document Conversion Files By Id Cancel","description":"Execute Document Conversion Files By Id Cancel.\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/document-conversion-files/[id]/cancel.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/{id}/change-year":{"post":{"operationId":"post_document_conversion_files_id_change_year","tags":["Document Conversion Files"],"summary":"Execute Document Conversion Files By Id Change Year","description":"Execute Document Conversion Files By Id Change Year.\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: `externalTransactionIds`, `year`.\n\nSource handler: `pages/api/document-conversion-files/[id]/change-year.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `externalTransactionIds`, `year`.","content":{"application/json":{"schema":{"type":"object","properties":{"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"year":{"type":"string","description":"Year payload field."}},"additionalProperties":true}}}}}},"/api/document-conversion-files/{id}/confirm":{"post":{"operationId":"post_document_conversion_files_id_confirm","tags":["Document Conversion Files"],"summary":"Execute Document Conversion Files By Id Confirm","description":"Execute Document Conversion Files By Id Confirm.\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: `registeredUploadReview`, `transactions`.\n\nSource handler: `pages/api/document-conversion-files/[id]/confirm.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `registeredUploadReview`, `transactions`.","content":{"application/json":{"schema":{"type":"object","properties":{"registeredUploadReview":{"type":"string","description":"RegisteredUploadReview payload field."},"transactions":{"type":"string","description":"Transactions payload field."}},"additionalProperties":true}}}}}},"/api/document-conversion-files/{id}/delete":{"post":{"operationId":"post_document_conversion_files_id_delete","tags":["Document Conversion Files"],"summary":"Execute Document Conversion Files By Id Delete","description":"Execute Document Conversion Files By Id Delete.\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: `confirmUnpost`.\n\nSource handler: `pages/api/document-conversion-files/[id]/delete.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `confirmUnpost`.","content":{"application/json":{"schema":{"type":"object","properties":{"confirmUnpost":{"type":"string","description":"ConfirmUnpost payload field."}},"additionalProperties":true}}}}}},"/api/document-conversion-files/{id}/descriptions":{"patch":{"operationId":"patch_document_conversion_files_id_descriptions","tags":["Document Conversion Files"],"summary":"Update Document Conversion Files By Id Descriptions","description":"Update Document Conversion Files By Id Descriptions.\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/document-conversion-files/[id]/descriptions.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/{id}/docs-reader-status":{"get":{"operationId":"get_document_conversion_files_id_docs_reader_status","tags":["Document Conversion Files"],"summary":"Get Document Conversion Files By Id Docs Reader Status","description":"Get Document Conversion Files By Id Docs Reader Status.\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/document-conversion-files/[id]/docs-reader-status.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/{id}/download":{"get":{"operationId":"get_document_conversion_files_id_download","tags":["Document Conversion Files"],"summary":"Retrieve Document Conversion Files By Id Download","description":"Retrieve Document Conversion Files By Id Download.\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\nDownload endpoint that may return file payloads or download metadata.\n\nSource handler: `pages/api/document-conversion-files/[id]/download.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/{id}/download-annotated":{"get":{"operationId":"get_document_conversion_files_id_download_annotated","tags":["Document Conversion Files"],"summary":"Retrieve Document Conversion Files By Id Download Annotated","description":"Retrieve Document Conversion Files By Id Download Annotated.\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\nDownload endpoint that may return file payloads or download metadata.\n\nCommon query parameters: `includeImportantHighlights`.\n\nSource handler: `pages/api/document-conversion-files/[id]/download-annotated.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"includeImportantHighlights","in":"query","required":false,"description":"IncludeImportantHighlights flag.","schema":{"type":"boolean","description":"IncludeImportantHighlights flag."}}]}},"/api/document-conversion-files/{id}/external-transactions":{"get":{"operationId":"get_document_conversion_files_id_external_transactions","tags":["Document Conversion Files"],"summary":"Retrieve Document Conversion Files By Id External Transactions","description":"Retrieve Document Conversion Files By Id External 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\nSource handler: `pages/api/document-conversion-files/[id]/external-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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/{id}/incremental-cache":{"get":{"operationId":"get_document_conversion_files_id_incremental_cache","tags":["Document Conversion Files"],"summary":"Retrieve Document Conversion Files By Id Incremental Cache","description":"Retrieve Document Conversion Files By Id Incremental Cache.\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/document-conversion-files/[id]/incremental-cache.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/{id}/journal-entries":{"get":{"operationId":"get_document_conversion_files_id_journal_entries","tags":["Document Conversion Files"],"summary":"Retrieve Document Conversion Files By Id Journal Entries","description":"Retrieve Document Conversion Files By Id Journal Entries.\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\nSource handler: `pages/api/document-conversion-files/[id]/journal-entries.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/{id}/recheck":{"post":{"operationId":"post_document_conversion_files_id_recheck","tags":["Document Conversion Files"],"summary":"Execute Document Conversion Files By Id Recheck","description":"Execute Document Conversion Files By Id Recheck.\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/document-conversion-files/[id]/recheck.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/{id}/regenerate-descriptions":{"post":{"operationId":"post_document_conversion_files_id_regenerate_descriptions","tags":["Document Conversion Files"],"summary":"Execute Document Conversion Files By Id Regenerate Descriptions","description":"Execute Document Conversion Files By Id Regenerate Descriptions.\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/document-conversion-files/[id]/regenerate-descriptions.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/{id}/retry":{"post":{"operationId":"post_document_conversion_files_id_retry","tags":["Document Conversion Files"],"summary":"Execute Document Conversion Files By Id Retry","description":"Execute Document Conversion Files By Id Retry.\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/document-conversion-files/[id]/retry.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/document-conversion-files/review-count":{"get":{"operationId":"get_document_conversion_files_review_count","tags":["Document Conversion Files"],"summary":"Get Document Conversion Files Review Count","description":"Get Document Conversion Files Review 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: `accountId`, `account_id`, `includeWorkflow`.\n\nSource handler: `pages/api/document-conversion-files/review-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":"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":"includeWorkflow","in":"query","required":false,"description":"IncludeWorkflow flag.","schema":{"type":"boolean","description":"IncludeWorkflow flag."}}]}},"/api/document-conversion-files/totals":{"get":{"operationId":"get_document_conversion_files_totals","tags":["Document Conversion Files"],"summary":"Retrieve Document Conversion Files Totals","description":"Retrieve Document Conversion Files Totals.\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: `fileIds`.\n\nSource handler: `pages/api/document-conversion-files/totals.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":"fileIds","in":"query","required":false,"description":"FileIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"FileIds. Use identifiers returned by Wesley."}}]}},"/api/document-links":{"get":{"operationId":"get_document_links","tags":["Document Links"],"summary":"Retrieve Document Links","description":"Retrieve Document Links.\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: `entityIds`, `entityType`.\n\nSource handler: `pages/api/document-links.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":"entityIds","in":"query","required":false,"description":"EntityIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"EntityIds. Use identifiers returned by Wesley."}},{"name":"entityType","in":"query","required":false,"description":"EntityType filter or option.","schema":{"type":"string","description":"EntityType filter or option."}}]},"post":{"operationId":"post_document_links","tags":["Document Links"],"summary":"Execute Document Links","description":"Execute Document Links.\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: `action`, `documentIds`, `entityId`, `entityIds`, `entityType`.\n\nCommon query parameters: `entityIds`, `entityType`.\n\nSource handler: `pages/api/document-links.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":"entityIds","in":"query","required":false,"description":"EntityIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"EntityIds. Use identifiers returned by Wesley."}},{"name":"entityType","in":"query","required":false,"description":"EntityType filter or option.","schema":{"type":"string","description":"EntityType filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `documentIds`, `entityId`, `entityIds`, `entityType`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"documentIds":{"type":"array","items":{"type":"string"},"description":"DocumentIds. Use identifiers returned by Wesley."},"entityId":{"type":"string","description":"EntityId. Use an identifier returned by Wesley."},"entityIds":{"type":"array","items":{"type":"string"},"description":"EntityIds. Use identifiers returned by Wesley."},"entityType":{"type":"string","description":"EntityType payload field."}},"additionalProperties":true}}}}}},"/api/document-review-answers":{"post":{"operationId":"post_document_review_answers","tags":["Document Review Answers"],"summary":"Execute Document Review Answers","description":"Execute Document Review Answers.\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\nJSON body keys used by this method: `action`, `revision`.\n\nSource handler: `pages/api/document-review-answers.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `revision`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"revision":{"type":"string","description":"Revision payload field."}},"additionalProperties":true}}}}}},"/api/document-upload-session":{"post":{"operationId":"post_document_upload_session","tags":["Document Upload Session"],"summary":"Execute Document Upload Session","description":"Execute Document Upload Session.\n\nNo user authentication is explicitly enforced in this handler.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nSource handler: `pages/api/document-upload-session.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":true}},"/api/employees":{"get":{"operationId":"get_employees","tags":["Employees"],"summary":"Retrieve Employees","description":"Retrieve Employees.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/employees.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"post":{"operationId":"post_employees","tags":["Employees"],"summary":"Execute Employees","description":"Execute Employees.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/employees.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"put":{"operationId":"put_employees","tags":["Employees"],"summary":"Replace Employees","description":"Replace Employees.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/employees.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"delete":{"operationId":"delete_employees","tags":["Employees"],"summary":"Delete Employees","description":"Delete Employees.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/employees.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]}},"/api/entity-groups/{groupId}":{"get":{"operationId":"get_entity_groups_groupid","tags":["Entity Groups"],"summary":"Retrieve Entity Groups By GroupId","description":"Retrieve Entity Groups By GroupId.\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\nCommon query parameters: `closeId`, `companyId`, `end`, `page`, `resource`, `start`.\n\nSource handler: `pages/api/entity-groups/[groupId].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,"parameters":[{"name":"groupId","in":"path","required":true,"description":"Path identifier: groupId","schema":{"type":"string"}},{"name":"closeId","in":"query","required":false,"description":"CloseId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CloseId. Use an identifier returned by Wesley."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"end","in":"query","required":false,"description":"End filter or option.","schema":{"type":"string","description":"End filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"resource","in":"query","required":false,"description":"Resource filter or option.","schema":{"type":"string","description":"Resource filter or option."}},{"name":"start","in":"query","required":false,"description":"Start filter or option.","schema":{"type":"string","description":"Start filter or option."}}]},"post":{"operationId":"post_entity_groups_groupid","tags":["Entity Groups"],"summary":"Execute Entity Groups By GroupId","description":"Execute Entity Groups By GroupId.\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\nJSON body keys used by this method: `action`, `payload`, `version`.\n\nCommon query parameters: `closeId`, `companyId`, `end`, `page`, `resource`, `start`.\n\nSource handler: `pages/api/entity-groups/[groupId].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,"parameters":[{"name":"groupId","in":"path","required":true,"description":"Path identifier: groupId","schema":{"type":"string"}},{"name":"closeId","in":"query","required":false,"description":"CloseId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CloseId. Use an identifier returned by Wesley."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"end","in":"query","required":false,"description":"End filter or option.","schema":{"type":"string","description":"End filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"resource","in":"query","required":false,"description":"Resource filter or option.","schema":{"type":"string","description":"Resource filter or option."}},{"name":"start","in":"query","required":false,"description":"Start filter or option.","schema":{"type":"string","description":"Start filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `payload`, `version`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"payload":{"type":"string","description":"Payload payload field."},"version":{"type":"string","description":"Version payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_entity_groups_groupid","tags":["Entity Groups"],"summary":"Delete Entity Groups By GroupId","description":"Delete Entity Groups By GroupId.\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\nJSON body keys used by this method: `action`, `payload`, `version`.\n\nCommon query parameters: `closeId`, `companyId`, `end`, `page`, `resource`, `start`.\n\nSource handler: `pages/api/entity-groups/[groupId].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,"parameters":[{"name":"groupId","in":"path","required":true,"description":"Path identifier: groupId","schema":{"type":"string"}},{"name":"closeId","in":"query","required":false,"description":"CloseId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CloseId. Use an identifier returned by Wesley."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"end","in":"query","required":false,"description":"End filter or option.","schema":{"type":"string","description":"End filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"resource","in":"query","required":false,"description":"Resource filter or option.","schema":{"type":"string","description":"Resource filter or option."}},{"name":"start","in":"query","required":false,"description":"Start filter or option.","schema":{"type":"string","description":"Start filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `payload`, `version`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"payload":{"type":"string","description":"Payload payload field."},"version":{"type":"string","description":"Version payload field."}},"additionalProperties":true}}}}}},"/api/experiment-access":{"get":{"operationId":"get_experiment_access","tags":["Experiment Access"],"summary":"Retrieve Experiment Access","description":"Retrieve Experiment Access.\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: `accountingFirmId`, `companyId`, `experimentKey`.\n\nSource handler: `pages/api/experiment-access.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":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}},{"name":"experimentKey","in":"query","required":false,"description":"ExperimentKey filter or option.","schema":{"type":"string","description":"ExperimentKey filter or option."}}]}},"/api/external-transactions":{"post":{"operationId":"post_external_transactions","tags":["External Transactions"],"summary":"Execute External Transactions","description":"Execute External 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\nSource handler: `pages/api/external-transactions/index.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/external-transactions/{id}":{"post":{"operationId":"post_external_transactions_id","tags":["External Transactions"],"summary":"Execute External Transactions By Id","description":"Execute External Transactions By Id.\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/external-transactions/[id]/index.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":true,"description":"Update external transaction metadata. `POST` is accepted for mutation clients that do not use `PATCH`. Source handler: `pages/api/external-transactions/[id]/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"type":"string","minLength":1,"maxLength":2000},"comments":{"nullable":true,"type":"string","maxLength":2000},"referenceNumber":{"nullable":true,"type":"string","maxLength":21},"reference_number":{"nullable":true,"type":"string","maxLength":21},"merchantName":{"nullable":true,"type":"string","maxLength":255},"merchant_name":{"nullable":true,"type":"string","maxLength":255},"suggestedAccountId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggested_account_id":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestedVendorId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggested_vendor_id":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestedCustomerId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggested_customer_id":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestionId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestion_id":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestionRationale":{"nullable":true,"type":"string","maxLength":2000},"suggestion_rationale":{"nullable":true,"type":"string","maxLength":2000},"suggestionConfidence":{"nullable":true,"anyOf":[{"type":"number"},{"type":"string","minLength":1}]},"suggestion_confidence":{"nullable":true,"anyOf":[{"type":"number"},{"type":"string","minLength":1}]},"suggestionSource":{"nullable":true,"type":"string","enum":["llm","history"]},"suggestion_source":{"nullable":true,"type":"string","enum":["llm","history"]},"suggestionModel":{"nullable":true,"type":"string","maxLength":255},"suggestion_model":{"nullable":true,"type":"string","maxLength":255},"postingTags":{"type":"object","properties":{"classId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"locationId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["classId","locationId","projectId"]}}}}}}},"patch":{"operationId":"patch_external_transactions_id","tags":["External Transactions"],"summary":"Update External Transactions By Id","description":"Update External Transactions By Id.\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/external-transactions/[id]/index.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":true,"description":"Update external transaction metadata. `comments` stay attached to the transaction and are not copied into journal entries. `referenceNumber` stages a reference on a pending transaction for the journal entry created when it is posted. The suggested category shown in transaction feeds is updated by setting `suggestedAccountId`. Source handler: `pages/api/external-transactions/[id]/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"type":"string","minLength":1,"maxLength":2000},"comments":{"nullable":true,"type":"string","maxLength":2000},"referenceNumber":{"nullable":true,"type":"string","maxLength":21},"reference_number":{"nullable":true,"type":"string","maxLength":21},"merchantName":{"nullable":true,"type":"string","maxLength":255},"merchant_name":{"nullable":true,"type":"string","maxLength":255},"suggestedAccountId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggested_account_id":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestedVendorId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggested_vendor_id":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestedCustomerId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggested_customer_id":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestionId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestion_id":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"suggestionRationale":{"nullable":true,"type":"string","maxLength":2000},"suggestion_rationale":{"nullable":true,"type":"string","maxLength":2000},"suggestionConfidence":{"nullable":true,"anyOf":[{"type":"number"},{"type":"string","minLength":1}]},"suggestion_confidence":{"nullable":true,"anyOf":[{"type":"number"},{"type":"string","minLength":1}]},"suggestionSource":{"nullable":true,"type":"string","enum":["llm","history"]},"suggestion_source":{"nullable":true,"type":"string","enum":["llm","history"]},"suggestionModel":{"nullable":true,"type":"string","maxLength":255},"suggestion_model":{"nullable":true,"type":"string","maxLength":255},"postingTags":{"type":"object","properties":{"classId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"locationId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["classId","locationId","projectId"]}}}}}}}},"/api/external-transactions/{id}/amount":{"post":{"operationId":"post_external_transactions_id_amount","tags":["External Transactions"],"summary":"Execute External Transactions By Id Amount","description":"Execute External Transactions By Id Amount.\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: `amount`.\n\nSource handler: `pages/api/external-transactions/[id]/amount.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `amount`.","content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"string","description":"Amount payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/{id}/custom-fields":{"get":{"operationId":"get_external_transactions_id_custom_fields","tags":["External Transactions"],"summary":"Read pending transaction field values","description":"Retrieve External Transactions By Id Custom Fields.\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\nSource handler: `pages/api/external-transactions/[id]/custom-fields.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"put":{"operationId":"put_external_transactions_id_custom_fields","tags":["External Transactions"],"summary":"Save pending transaction field values","description":"Saves draft values in dedicated columns. Split line values override shared values for their account and line number. Read first and pass the returned updatedAt. Posted values are edited on journal lines.\n\nReplace External Transactions By Id Custom Fields.\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/external-transactions/[id]/custom-fields.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/external-transactions/[id]/custom-fields.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"values":{"type":"object","additionalProperties":{"type":"string","maxLength":2000}},"lines":{"default":[],"maxItems":200,"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"lineNumber":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"values":{"type":"object","additionalProperties":{"type":"string","maxLength":2000}}},"required":["accountId","lineNumber","values"],"additionalProperties":false}},"expectedUpdatedAt":{"type":"string","minLength":1}},"required":["values","expectedUpdatedAt"],"additionalProperties":false}}}}}},"/api/external-transactions/{id}/date":{"post":{"operationId":"post_external_transactions_id_date","tags":["External Transactions"],"summary":"Execute External Transactions By Id Date","description":"Execute External Transactions By Id Date.\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: `date`.\n\nSource handler: `pages/api/external-transactions/[id]/date.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `date`.","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","format":"date","description":"Date in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/external-transactions/{id}/delete":{"delete":{"operationId":"delete_external_transactions_id_delete","tags":["External Transactions"],"summary":"Delete External Transactions By Id Delete","description":"Delete External Transactions By Id Delete.\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: `confirmPermanentDelete`, `confirmPlaidPermanentDelete`.\n\nSource handler: `pages/api/external-transactions/[id]/delete.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `confirmPermanentDelete`, `confirmPlaidPermanentDelete`.","content":{"application/json":{"schema":{"type":"object","properties":{"confirmPermanentDelete":{"type":"string","description":"ConfirmPermanentDelete payload field."},"confirmPlaidPermanentDelete":{"type":"string","description":"ConfirmPlaidPermanentDelete payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/{id}/exclude":{"post":{"operationId":"post_external_transactions_id_exclude","tags":["External Transactions"],"summary":"Execute External Transactions By Id Exclude","description":"Execute External Transactions By Id Exclude.\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/external-transactions/[id]/exclude.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"delete":{"operationId":"delete_external_transactions_id_exclude","tags":["External Transactions"],"summary":"Delete External Transactions By Id Exclude","description":"Delete External Transactions By Id Exclude.\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/external-transactions/[id]/exclude.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/external-transactions/{id}/match":{"get":{"operationId":"get_external_transactions_id_match","tags":["External Transactions"],"summary":"Retrieve External Transactions By Id Match","description":"Retrieve External Transactions By Id Match.\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/external-transactions/[id]/match.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"post":{"operationId":"post_external_transactions_id_match","tags":["External Transactions"],"summary":"Execute External Transactions By Id Match","description":"Execute External Transactions By Id Match.\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: `journalLineId`, `matchedAmount`, `primaryActionRecommendation`.\n\nSource handler: `pages/api/external-transactions/[id]/match.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `journalLineId`, `matchedAmount`, `primaryActionRecommendation`.","content":{"application/json":{"schema":{"type":"object","properties":{"journalLineId":{"type":"string","description":"JournalLineId. Use an identifier returned by Wesley."},"matchedAmount":{"type":"string","description":"MatchedAmount payload field."},"primaryActionRecommendation":{"type":"string","description":"PrimaryActionRecommendation payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/{id}/matches":{"get":{"operationId":"get_external_transactions_id_matches","tags":["External Transactions"],"summary":"Retrieve External Transactions By Id Matches","description":"Retrieve External Transactions By Id Matches.\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\nSource handler: `pages/api/external-transactions/[id]/matches/index.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/external-transactions/{id}/matches/{matchId}":{"patch":{"operationId":"patch_external_transactions_id_matches_matchid","tags":["External Transactions"],"summary":"Update External Transactions By Id Matches By MatchId","description":"Update External Transactions By Id Matches By MatchId.\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: `matchedAmount`.\n\nSource handler: `pages/api/external-transactions/[id]/matches/[matchId].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"name":"matchId","in":"path","required":true,"description":"Path identifier: matchId","schema":{"type":"string"}},{"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: `matchedAmount`.","content":{"application/json":{"schema":{"type":"object","properties":{"matchedAmount":{"type":"string","description":"MatchedAmount payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_external_transactions_id_matches_matchid","tags":["External Transactions"],"summary":"Delete External Transactions By Id Matches By MatchId","description":"Delete External Transactions By Id Matches By MatchId.\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: `matchedAmount`.\n\nSource handler: `pages/api/external-transactions/[id]/matches/[matchId].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"name":"matchId","in":"path","required":true,"description":"Path identifier: matchId","schema":{"type":"string"}},{"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: `matchedAmount`.","content":{"application/json":{"schema":{"type":"object","properties":{"matchedAmount":{"type":"string","description":"MatchedAmount payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/{id}/print-check":{"get":{"operationId":"get_external_transactions_id_print_check","tags":["External Transactions"],"summary":"Retrieve External Transactions By Id Print Check","description":"Retrieve External Transactions By Id Print Check.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/external-transactions/[id]/print-check.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/external-transactions/{id}/subledger-match":{"post":{"operationId":"post_external_transactions_id_subledger_match","tags":["External Transactions"],"summary":"Execute External Transactions By Id Subledger Match","description":"Execute External Transactions By Id Subledger Match.\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: `primaryActionRecommendation`.\n\nSource handler: `pages/api/external-transactions/[id]/subledger-match.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `primaryActionRecommendation`.","content":{"application/json":{"schema":{"type":"object","properties":{"primaryActionRecommendation":{"type":"string","description":"PrimaryActionRecommendation payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/{id}/subledger-match-candidates":{"get":{"operationId":"get_external_transactions_id_subledger_match_candidates","tags":["External Transactions"],"summary":"Retrieve External Transactions By Id Subledger Match Candidates","description":"Retrieve External Transactions By Id Subledger Match Candidates.\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\nSource handler: `pages/api/external-transactions/[id]/subledger-match-candidates.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/external-transactions/{id}/transfer":{"post":{"operationId":"post_external_transactions_id_transfer","tags":["External Transactions"],"summary":"Execute External Transactions By Id Transfer","description":"Execute External Transactions By Id Transfer.\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: `primaryActionRecommendation`, `targetExternalTransactionId`.\n\nSource handler: `pages/api/external-transactions/[id]/transfer.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `primaryActionRecommendation`, `targetExternalTransactionId`.","content":{"application/json":{"schema":{"type":"object","properties":{"primaryActionRecommendation":{"type":"string","description":"PrimaryActionRecommendation payload field."},"targetExternalTransactionId":{"type":"string","description":"TargetExternalTransactionId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/external-transactions/{id}/transfer-candidates":{"get":{"operationId":"get_external_transactions_id_transfer_candidates","tags":["External Transactions"],"summary":"Retrieve External Transactions By Id Transfer Candidates","description":"Retrieve External Transactions By Id Transfer Candidates.\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: `end_date`, `start_date`, `target_account_id`.\n\nSource handler: `pages/api/external-transactions/[id]/transfer-candidates.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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."}},{"name":"target_account_id","in":"query","required":false,"description":"Target Account Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Target Account Id. Use an identifier returned by Wesley."}}]}},"/api/external-transactions/{id}/type":{"post":{"operationId":"post_external_transactions_id_type","tags":["External Transactions"],"summary":"Execute External Transactions By Id Type","description":"Execute External Transactions By Id Type.\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: `applyPayeeDefaultAccount`, `checkNumber`, `customerId`, `employeeId`, `expectedStatus`, `expectedTransactionAmount`, `merchantName`, `payeeCandidate`, `preserveMerchantName`, `suggestedAccountId`, `suggested_account_id`, `suggestionConfidence`, ....\n\nSource handler: `pages/api/external-transactions/[id]/type.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `applyPayeeDefaultAccount`, `checkNumber`, `customerId`, `employeeId`, `expectedStatus`, `expectedTransactionAmount`, `merchantName`, `payeeCandidate`, `preserveMerchantName`, `suggestedAccountId`, `suggested_account_id`, `suggestionConfidence`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"applyPayeeDefaultAccount":{"type":"string","description":"ApplyPayeeDefaultAccount payload field."},"checkNumber":{"type":"string","description":"CheckNumber payload field."},"customerId":{"type":"string","description":"CustomerId. Use an identifier returned by Wesley."},"employeeId":{"type":"string","description":"EmployeeId. Use an identifier returned by Wesley."},"expectedStatus":{"type":"string","description":"ExpectedStatus payload field."},"expectedTransactionAmount":{"type":"string","description":"ExpectedTransactionAmount payload field."},"merchantName":{"type":"string","description":"MerchantName payload field."},"payeeCandidate":{"type":"string","format":"date","description":"PayeeCandidate in YYYY-MM-DD format."},"preserveMerchantName":{"type":"string","description":"PreserveMerchantName payload field."},"suggestedAccountId":{"type":"string","description":"SuggestedAccountId. Use an identifier returned by Wesley."},"suggested_account_id":{"type":"string","description":"Suggested Account Id. Use an identifier returned by Wesley."},"suggestionConfidence":{"type":"string","description":"SuggestionConfidence payload field."},"suggestionId":{"type":"string","description":"SuggestionId. Use an identifier returned by Wesley."},"suggestionModel":{"type":"string","description":"SuggestionModel payload field."},"suggestionRationale":{"type":"string","description":"SuggestionRationale payload field."},"suggestionSource":{"type":"string","description":"SuggestionSource payload field."},"transactionCheckNumber":{"type":"string","description":"TransactionCheckNumber payload field."},"transactionType":{"type":"string","description":"TransactionType payload field."},"vendorId":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/external-transactions/{id}/unpost":{"post":{"operationId":"post_external_transactions_id_unpost","tags":["External Transactions"],"summary":"Execute External Transactions By Id Unpost","description":"Execute External Transactions By Id Unpost.\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/external-transactions/[id]/unpost.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/external-transactions/{id}/written-date":{"post":{"operationId":"post_external_transactions_id_written_date","tags":["External Transactions"],"summary":"Execute External Transactions By Id Written Date","description":"Execute External Transactions By Id Written Date.\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: `writtenDate`.\n\nSource handler: `pages/api/external-transactions/[id]/written-date.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `writtenDate`.","content":{"application/json":{"schema":{"type":"object","properties":{"writtenDate":{"type":"string","format":"date","description":"WrittenDate in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/external-transactions/bulk-account":{"post":{"operationId":"post_external_transactions_bulk_account","tags":["External Transactions"],"summary":"Execute External Transactions Bulk Account","description":"Execute External Transactions Bulk 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\nBulk operation that can affect multiple records in one request.\n\nSource handler: `pages/api/external-transactions/bulk-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"}}]}},"/api/external-transactions/bulk-customer":{"post":{"operationId":"post_external_transactions_bulk_customer","tags":["External Transactions"],"summary":"Execute External Transactions Bulk Customer","description":"Execute External Transactions Bulk Customer.\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\nSource handler: `pages/api/external-transactions/bulk-customer.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":true,"description":"Bulk update customer assignments for external transactions. `customerId: null` clears the customer. Linked journal line customers are kept in sync when possible. Source handler: `pages/api/external-transactions/bulk-customer.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"ids":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"externalTransactionIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"customerId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"updates":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"externalTransactionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["externalTransactionId","customerId"]}}}}}}}}},"/api/external-transactions/bulk-delete":{"post":{"operationId":"post_external_transactions_bulk_delete","tags":["External Transactions"],"summary":"Execute External Transactions Bulk Delete","description":"Execute External Transactions Bulk Delete.\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\nJSON body keys used by this method: `allowPlaidPermanentDelete`, `confirmPermanentDelete`, `confirmPlaidPermanentDelete`, `externalTransactionIds`, `ids`.\n\nSource handler: `pages/api/external-transactions/bulk-delete.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: `allowPlaidPermanentDelete`, `confirmPermanentDelete`, `confirmPlaidPermanentDelete`, `externalTransactionIds`, `ids`.","content":{"application/json":{"schema":{"type":"object","properties":{"allowPlaidPermanentDelete":{"type":"boolean","description":"AllowPlaidPermanentDelete flag."},"confirmPermanentDelete":{"type":"string","description":"ConfirmPermanentDelete payload field."},"confirmPlaidPermanentDelete":{"type":"string","description":"ConfirmPlaidPermanentDelete payload field."},"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"ids":{"type":"string","description":"Ids payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_external_transactions_bulk_delete","tags":["External Transactions"],"summary":"Delete External Transactions Bulk Delete","description":"Delete External Transactions Bulk Delete.\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\nJSON body keys used by this method: `allowPlaidPermanentDelete`, `confirmPermanentDelete`, `confirmPlaidPermanentDelete`, `externalTransactionIds`, `ids`.\n\nSource handler: `pages/api/external-transactions/bulk-delete.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: `allowPlaidPermanentDelete`, `confirmPermanentDelete`, `confirmPlaidPermanentDelete`, `externalTransactionIds`, `ids`.","content":{"application/json":{"schema":{"type":"object","properties":{"allowPlaidPermanentDelete":{"type":"boolean","description":"AllowPlaidPermanentDelete flag."},"confirmPermanentDelete":{"type":"string","description":"ConfirmPermanentDelete payload field."},"confirmPlaidPermanentDelete":{"type":"string","description":"ConfirmPlaidPermanentDelete payload field."},"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"ids":{"type":"string","description":"Ids payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/bulk-exclude":{"post":{"operationId":"post_external_transactions_bulk_exclude","tags":["External Transactions"],"summary":"Execute External Transactions Bulk Exclude","description":"Execute External Transactions Bulk Exclude.\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\nJSON body keys used by this method: `externalTransactionIds`, `ids`.\n\nSource handler: `pages/api/external-transactions/bulk-exclude.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: `externalTransactionIds`, `ids`.","content":{"application/json":{"schema":{"type":"object","properties":{"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"ids":{"type":"string","description":"Ids payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_external_transactions_bulk_exclude","tags":["External Transactions"],"summary":"Delete External Transactions Bulk Exclude","description":"Delete External Transactions Bulk Exclude.\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\nJSON body keys used by this method: `externalTransactionIds`, `ids`.\n\nSource handler: `pages/api/external-transactions/bulk-exclude.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: `externalTransactionIds`, `ids`.","content":{"application/json":{"schema":{"type":"object","properties":{"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"ids":{"type":"string","description":"Ids payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/bulk-external-account":{"post":{"operationId":"post_external_transactions_bulk_external_account","tags":["External Transactions"],"summary":"Execute External Transactions Bulk External Account","description":"Execute External Transactions Bulk External 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\nBulk operation that can affect multiple records in one request.\n\nSource handler: `pages/api/external-transactions/bulk-external-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"}}]}},"/api/external-transactions/bulk-flip-signs":{"post":{"operationId":"post_external_transactions_bulk_flip_signs","tags":["External Transactions"],"summary":"Execute External Transactions Bulk Flip Signs","description":"Execute External Transactions Bulk Flip Signs.\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\nJSON body keys used by this method: `externalTransactionIds`, `ids`.\n\nSource handler: `pages/api/external-transactions/bulk-flip-signs.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: `externalTransactionIds`, `ids`.","content":{"application/json":{"schema":{"type":"object","properties":{"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"ids":{"type":"string","description":"Ids payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/bulk-tags":{"patch":{"operationId":"patch_external_transactions_bulk_tags","tags":["External Transactions"],"summary":"Update External Transactions Bulk Tags","description":"Update External Transactions Bulk Tags.\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\nSource handler: `pages/api/external-transactions/bulk-tags.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":true,"description":"Bulk update the class, location, or project saved for pending external transactions. A null tag ID clears the selected dimension without changing the other posting tags. Source handler: `pages/api/external-transactions/bulk-tags.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"externalTransactionIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"dimension":{"type":"string","enum":["class","location","project"]},"tagId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["externalTransactionIds","dimension","tagId"]}}}}}},"/api/external-transactions/bulk-type":{"post":{"operationId":"post_external_transactions_bulk_type","tags":["External Transactions"],"summary":"Execute External Transactions Bulk Type","description":"Execute External Transactions Bulk Type.\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\nJSON body keys used by this method: `checkNumber`, `externalTransactionIds`, `ids`, `transactionCheckNumber`, `transactionType`.\n\nSource handler: `pages/api/external-transactions/bulk-type.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: `checkNumber`, `externalTransactionIds`, `ids`, `transactionCheckNumber`, `transactionType`.","content":{"application/json":{"schema":{"type":"object","properties":{"checkNumber":{"type":"string","description":"CheckNumber payload field."},"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"ids":{"type":"string","description":"Ids payload field."},"transactionCheckNumber":{"type":"string","description":"TransactionCheckNumber payload field."},"transactionType":{"type":"string","description":"TransactionType payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/bulk-unpost":{"post":{"operationId":"post_external_transactions_bulk_unpost","tags":["External Transactions"],"summary":"Execute External Transactions Bulk Unpost","description":"Execute External Transactions Bulk Unpost.\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\nJSON body keys used by this method: `externalTransactionIds`, `ids`.\n\nSource handler: `pages/api/external-transactions/bulk-unpost.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: `externalTransactionIds`, `ids`.","content":{"application/json":{"schema":{"type":"object","properties":{"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"ids":{"type":"string","description":"Ids payload field."}},"additionalProperties":true}}}}}},"/api/external-transactions/bulk-vendor":{"post":{"operationId":"post_external_transactions_bulk_vendor","tags":["External Transactions"],"summary":"Execute External Transactions Bulk Vendor","description":"Execute External Transactions Bulk Vendor.\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\nSource handler: `pages/api/external-transactions/bulk-vendor.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":true,"description":"Bulk update vendor assignments for external transactions. `vendorId: null` clears the vendor. Linked journal line vendors are kept in sync when possible. Source handler: `pages/api/external-transactions/bulk-vendor.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"ids":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"externalTransactionIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"vendorId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"updates":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"externalTransactionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"vendorId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["externalTransactionId","vendorId"]}}}}}}}}},"/api/external-transactions/check-enrichment":{"post":{"operationId":"post_external_transactions_check_enrichment","tags":["External Transactions"],"summary":"Execute External Transactions Check Enrichment","description":"Execute External Transactions Check Enrichment.\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\nAccepts multipart form uploads for file-based workflows.\n\nCommon query parameters: `accountId`.\n\nSource handler: `pages/api/external-transactions/check-enrichment.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."}}],"requestBody":{"required":false,"description":"Multipart upload payload for file-processing workflows.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"files":{"type":"array","items":{"type":"string","format":"binary"}}},"additionalProperties":true}},"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}},"/api/external-transactions/check-enrichment-progress":{"get":{"operationId":"get_external_transactions_check_enrichment_progress","tags":["External Transactions"],"summary":"Retrieve External Transactions Check Enrichment Progress","description":"Retrieve External Transactions Check Enrichment Progress.\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: `id`, `progressId`.\n\nSource handler: `pages/api/external-transactions/check-enrichment-progress.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":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"progressId","in":"query","required":false,"description":"ProgressId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ProgressId. Use an identifier returned by Wesley."}}]}},"/api/external-transactions/duplicate-review":{"post":{"operationId":"post_external_transactions_duplicate_review","tags":["External Transactions"],"summary":"Execute External Transactions Duplicate Review","description":"Execute External Transactions Duplicate Review.\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/external-transactions/duplicate-review.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/external-transactions/journal-history-targets":{"get":{"operationId":"get_external_transactions_journal_history_targets","tags":["External Transactions"],"summary":"Retrieve External Transactions Journal History Targets","description":"Retrieve External Transactions Journal History Targets.\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: `keyword`.\n\nSource handler: `pages/api/external-transactions/journal-history-targets.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":"keyword","in":"query","required":false,"description":"Keyword filter or option.","schema":{"type":"string","description":"Keyword filter or option."}}]}},"/api/external-transactions/unpost-preview":{"post":{"operationId":"post_external_transactions_unpost_preview","tags":["External Transactions"],"summary":"Execute External Transactions Unpost Preview","description":"Execute External Transactions Unpost Preview.\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\nPreview endpoint used to inspect impact before committing changes.\n\nSource handler: `pages/api/external-transactions/unpost-preview.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/feature-usage":{"post":{"operationId":"post_feature_usage","tags":["Feature Usage"],"summary":"Execute Feature Usage","description":"Execute Feature Usage.\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\nSource handler: `pages/api/feature-usage.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}},"/api/finance/controls":{"get":{"operationId":"get_finance_controls","tags":["Finance"],"summary":"Retrieve Finance Controls","description":"Retrieve Finance Controls.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/finance/controls.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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."}},"post":{"operationId":"post_finance_controls","tags":["Finance"],"summary":"Execute Finance Controls","description":"Execute Finance Controls.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `action`, `payload`, `revision`.\n\nSource handler: `pages/api/finance/controls.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `payload`, `revision`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"payload":{"type":"string","description":"Payload payload field."},"revision":{"type":"string","description":"Revision payload field."}},"additionalProperties":true}}}}}},"/api/finance/iris-export":{"get":{"operationId":"get_finance_iris_export","tags":["Finance"],"summary":"Retrieve Finance Iris Export","description":"Retrieve Finance Iris Export.\n\nRequires authenticated user context.\n\nCommon query parameters: `completedYear`, `id`, `page`, `pendingYear`, `revision`.\n\nSource handler: `pages/api/finance/iris-export.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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"completedYear","in":"query","required":false,"description":"CompletedYear filter or option.","schema":{"type":"string","description":"CompletedYear filter or option."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"pendingYear","in":"query","required":false,"description":"PendingYear filter or option.","schema":{"type":"string","description":"PendingYear filter or option."}},{"name":"revision","in":"query","required":false,"description":"Revision filter or option.","schema":{"type":"string","description":"Revision filter or option."}}]},"post":{"operationId":"post_finance_iris_export","tags":["Finance"],"summary":"Execute Finance Iris Export","description":"Execute Finance Iris Export.\n\nRequires authenticated user context.\n\nCommon query parameters: `completedYear`, `id`, `page`, `pendingYear`, `revision`.\n\nSource handler: `pages/api/finance/iris-export.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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"completedYear","in":"query","required":false,"description":"CompletedYear filter or option.","schema":{"type":"string","description":"CompletedYear filter or option."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"pendingYear","in":"query","required":false,"description":"PendingYear filter or option.","schema":{"type":"string","description":"PendingYear filter or option."}},{"name":"revision","in":"query","required":false,"description":"Revision filter or option.","schema":{"type":"string","description":"Revision filter or option."}}]}},"/api/finance/sources":{"get":{"operationId":"get_finance_sources","tags":["Finance"],"summary":"Retrieve Finance Sources","description":"Retrieve Finance Sources.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `kind`, `vendorId`, `year`.\n\nSource handler: `pages/api/finance/sources.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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":"kind","in":"query","required":false,"description":"Kind filter or option.","schema":{"type":"string","description":"Kind filter or option."}},{"name":"vendorId","in":"query","required":false,"description":"VendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."}},{"name":"year","in":"query","required":false,"description":"Year filter or option.","schema":{"type":"string","description":"Year filter or option."}}]},"post":{"operationId":"post_finance_sources","tags":["Finance"],"summary":"Execute Finance Sources","description":"Execute Finance Sources.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `kind`, `payload`, `sourceYear`, `throughPeriod`.\n\nCommon query parameters: `kind`, `vendorId`, `year`.\n\nSource handler: `pages/api/finance/sources.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"kind","in":"query","required":false,"description":"Kind filter or option.","schema":{"type":"string","description":"Kind filter or option."}},{"name":"vendorId","in":"query","required":false,"description":"VendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."}},{"name":"year","in":"query","required":false,"description":"Year filter or option.","schema":{"type":"string","description":"Year filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `kind`, `payload`, `sourceYear`, `throughPeriod`.","content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","description":"Kind payload field."},"payload":{"type":"string","description":"Payload payload field."},"sourceYear":{"type":"string","description":"SourceYear payload field."},"throughPeriod":{"type":"string","description":"ThroughPeriod payload field."}},"additionalProperties":true}}}}}},"/api/finance/workpapers":{"get":{"operationId":"get_finance_workpapers","tags":["Finance"],"summary":"Retrieve Finance Workpapers","description":"Retrieve Finance Workpapers.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `export`, `id`, `kind`, `page`, `recordId`, `throughPeriod`.\n\nSource handler: `pages/api/finance/workpapers.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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":"export","in":"query","required":false,"description":"Export filter or option.","schema":{"type":"string","description":"Export filter or option."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"kind","in":"query","required":false,"description":"Kind filter or option.","schema":{"type":"string","description":"Kind filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"recordId","in":"query","required":false,"description":"RecordId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RecordId. Use an identifier returned by Wesley."}},{"name":"throughPeriod","in":"query","required":false,"description":"ThroughPeriod filter or option.","schema":{"type":"string","description":"ThroughPeriod filter or option."}}]},"post":{"operationId":"post_finance_workpapers","tags":["Finance"],"summary":"Execute Finance Workpapers","description":"Execute Finance Workpapers.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `export`, `id`, `kind`, `page`, `recordId`, `throughPeriod`.\n\nSource handler: `pages/api/finance/workpapers.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"export","in":"query","required":false,"description":"Export filter or option.","schema":{"type":"string","description":"Export filter or option."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"kind","in":"query","required":false,"description":"Kind filter or option.","schema":{"type":"string","description":"Kind filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"recordId","in":"query","required":false,"description":"RecordId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RecordId. Use an identifier returned by Wesley."}},{"name":"throughPeriod","in":"query","required":false,"description":"ThroughPeriod filter or option.","schema":{"type":"string","description":"ThroughPeriod filter or option."}}]},"delete":{"operationId":"delete_finance_workpapers","tags":["Finance"],"summary":"Delete Finance Workpapers","description":"Delete Finance Workpapers.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `export`, `id`, `kind`, `page`, `recordId`, `throughPeriod`.\n\nSource handler: `pages/api/finance/workpapers.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"export","in":"query","required":false,"description":"Export filter or option.","schema":{"type":"string","description":"Export filter or option."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"kind","in":"query","required":false,"description":"Kind filter or option.","schema":{"type":"string","description":"Kind filter or option."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"recordId","in":"query","required":false,"description":"RecordId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RecordId. Use an identifier returned by Wesley."}},{"name":"throughPeriod","in":"query","required":false,"description":"ThroughPeriod filter or option.","schema":{"type":"string","description":"ThroughPeriod filter or option."}}]}},"/api/fixed-assets":{"get":{"operationId":"get_fixed_assets","tags":["Fixed Assets"],"summary":"Retrieve Fixed Assets","description":"Retrieve Fixed Assets.\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: `year`.\n\nSource handler: `pages/api/fixed-assets/index.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":"year","in":"query","required":false,"description":"Year filter or option.","schema":{"type":"string","description":"Year filter or option."}}]},"post":{"operationId":"post_fixed_assets","tags":["Fixed Assets"],"summary":"Execute Fixed Assets","description":"Execute Fixed Assets.\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: `year`.\n\nSource handler: `pages/api/fixed-assets/index.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":"year","in":"query","required":false,"description":"Year filter or option.","schema":{"type":"string","description":"Year filter or option."}}]}},"/api/fixed-assets/{id}":{"put":{"operationId":"put_fixed_assets_id","tags":["Fixed Assets"],"summary":"Replace Fixed Assets By Id","description":"Replace Fixed Assets By Id.\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: `deletePostedDepreciation`, `journalMemoTemplate`, `journalReferenceTemplate`.\n\nSource handler: `pages/api/fixed-assets/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `deletePostedDepreciation`, `journalMemoTemplate`, `journalReferenceTemplate`.","content":{"application/json":{"schema":{"type":"object","properties":{"deletePostedDepreciation":{"type":"string","description":"DeletePostedDepreciation payload field."},"journalMemoTemplate":{"type":"string","description":"JournalMemoTemplate payload field."},"journalReferenceTemplate":{"type":"string","description":"JournalReferenceTemplate payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_fixed_assets_id","tags":["Fixed Assets"],"summary":"Delete Fixed Assets By Id","description":"Delete Fixed Assets By Id.\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: `deletePostedDepreciation`, `journalMemoTemplate`, `journalReferenceTemplate`.\n\nSource handler: `pages/api/fixed-assets/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `deletePostedDepreciation`, `journalMemoTemplate`, `journalReferenceTemplate`.","content":{"application/json":{"schema":{"type":"object","properties":{"deletePostedDepreciation":{"type":"string","description":"DeletePostedDepreciation payload field."},"journalMemoTemplate":{"type":"string","description":"JournalMemoTemplate payload field."},"journalReferenceTemplate":{"type":"string","description":"JournalReferenceTemplate payload field."}},"additionalProperties":true}}}}}},"/api/fixed-assets/{id}/post-depreciation":{"post":{"operationId":"post_fixed_assets_id_post_depreciation","tags":["Fixed Assets"],"summary":"Execute Fixed Assets By Id Post Depreciation","description":"Execute Fixed Assets By Id Post Depreciation.\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: `journalEntry`, `periodDate`.\n\nSource handler: `pages/api/fixed-assets/[id]/post-depreciation.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `journalEntry`, `periodDate`.","content":{"application/json":{"schema":{"type":"object","properties":{"journalEntry":{"type":"string","description":"JournalEntry payload field."},"periodDate":{"type":"string","format":"date","description":"PeriodDate in YYYY-MM-DD format."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_fixed_assets_id_post_depreciation","tags":["Fixed Assets"],"summary":"Delete Fixed Assets By Id Post Depreciation","description":"Delete Fixed Assets By Id Post Depreciation.\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: `journalEntry`, `periodDate`.\n\nSource handler: `pages/api/fixed-assets/[id]/post-depreciation.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `journalEntry`, `periodDate`.","content":{"application/json":{"schema":{"type":"object","properties":{"journalEntry":{"type":"string","description":"JournalEntry payload field."},"periodDate":{"type":"string","format":"date","description":"PeriodDate in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/fixed-assets/infer-from-journals":{"get":{"operationId":"get_fixed_assets_infer_from_journals","tags":["Fixed Assets"],"summary":"Retrieve Fixed Assets Infer From Journals","description":"Retrieve Fixed Assets Infer From Journals.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/fixed-assets/infer-from-journals.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"}}]},"post":{"operationId":"post_fixed_assets_infer_from_journals","tags":["Fixed Assets"],"summary":"Generate Fixed Assets Infer From Journals","description":"Generate Fixed Assets Infer From Journals.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/fixed-assets/infer-from-journals.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/integration-link/{requestId}/{action}":{"get":{"operationId":"get_integration_link_requestid_action","tags":["Integration Link"],"summary":"Retrieve Integration Link By RequestId By Action","description":"Retrieve Integration Link By RequestId By Action.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/integration-link/[requestId]/[action].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"requestId","in":"path","required":true,"description":"Path identifier: requestId","schema":{"type":"string"}},{"name":"action","in":"path","required":true,"description":"Path identifier: action","schema":{"type":"string"}}]}},"/api/integrations/power-bi/feed":{"get":{"operationId":"get_integrations_power_bi_feed","tags":["Integrations"],"summary":"Retrieve Integrations Power Bi Feed","description":"Retrieve Integrations Power Bi Feed.\n\nNo user authentication is explicitly enforced in this handler.\n\nRead-only, firm-scoped analytics feed. Start with `resource=catalog`, then follow `pagination.nextPage` until it is null.\n\nSource handler: `pages/api/integrations/power-bi/feed.ts` (auto-discovered).","responses":{"200":{"description":"A typed, paginated, firm-scoped Power BI dataset page.","content":{"application/json":{"schema":{"type":"object","required":["resource","columns","schema","data","pagination"],"properties":{"resource":{"type":"string","enum":["catalog","relationships","clients","team_members","accounts","vendors","customers","classes","locations","projects","tasks","monthly_close_runs","time_entries","reconciliations","ar_documents","ap_documents","journal_entries","journal_entry_applications","journal_lines"]},"columns":{"type":"array","items":{"type":"string"}},"schema":{"type":"object","additionalProperties":{"type":"string","enum":["text","number","whole_number","date","datetime","logical"]}},"data":{"type":"array","items":{"type":"object","additionalProperties":true}},"pagination":{"type":"object","required":["page","pageSize","total","returnedRows","paginationUnit","nextPage"],"properties":{"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"total":{"type":"integer","minimum":0,"description":"Total pagination units. The unit is identified by paginationUnit."},"returnedRows":{"type":"integer","minimum":0},"paginationUnit":{"type":"string","enum":["rows","journal_entries"]},"nextPage":{"type":["integer","null"],"minimum":1}}}}}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_integrations_power_bi_feed","tags":["Integrations"],"summary":"Execute Integrations Power Bi Feed","description":"Execute Integrations Power Bi Feed.\n\nNo user authentication is explicitly enforced in this handler.\n\nRead-only, firm-scoped analytics feed. Start with `resource=catalog`, then follow `pagination.nextPage` until it is null.\n\nSource handler: `pages/api/integrations/power-bi/feed.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/integrations/power-bi/odata":{"get":{"operationId":"get_integrations_power_bi_odata","tags":["Integrations"],"summary":"Retrieve Integrations Power Bi Odata","description":"Retrieve Integrations Power Bi Odata.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/integrations/power-bi/odata/index.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_integrations_power_bi_odata","tags":["Integrations"],"summary":"Execute Integrations Power Bi Odata","description":"Execute Integrations Power Bi Odata.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/integrations/power-bi/odata/index.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/integrations/power-bi/odata/{path}":{"get":{"operationId":"get_integrations_power_bi_odata_path","tags":["Integrations"],"summary":"Retrieve Integrations Power Bi Odata By Path","description":"Retrieve Integrations Power Bi Odata By Path.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/integrations/power-bi/odata/[...path].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"path","in":"path","required":true,"description":"Path identifier: path","schema":{"type":"string"}}]},"post":{"operationId":"post_integrations_power_bi_odata_path","tags":["Integrations"],"summary":"Execute Integrations Power Bi Odata By Path","description":"Execute Integrations Power Bi Odata By Path.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/integrations/power-bi/odata/[...path].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"path","in":"path","required":true,"description":"Path identifier: path","schema":{"type":"string"}}]}},"/api/integrations/zapier/bridge":{"get":{"operationId":"get_integrations_zapier_bridge","tags":["Integrations"],"summary":"Retrieve Integrations Zapier Bridge","description":"Retrieve Integrations Zapier Bridge.\n\nRequires a firm-scoped Wesley integration key via bearer token or `x-wesley-api-key`.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `event`, `limit`, `resource`.\n\nSource handler: `pages/api/integrations/zapier/bridge.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":[{"integrationKeyHeader":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":false,"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":"event","in":"query","required":false,"description":"Event filter or option.","schema":{"type":"string","description":"Event filter or option."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}},{"name":"resource","in":"query","required":false,"description":"Resource filter or option.","schema":{"type":"string","description":"Resource filter or option."}}]},"post":{"operationId":"post_integrations_zapier_bridge","tags":["Integrations"],"summary":"Execute Integrations Zapier Bridge","description":"Execute Integrations Zapier Bridge.\n\nRequires a firm-scoped Wesley integration key via bearer token or `x-wesley-api-key`.\n\nCommon query parameters: `event`, `limit`, `resource`.\n\nSource handler: `pages/api/integrations/zapier/bridge.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":[{"integrationKeyHeader":[]},{"bearerAuth":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"event","in":"query","required":false,"description":"Event filter or option.","schema":{"type":"string","description":"Event filter or option."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}},{"name":"resource","in":"query","required":false,"description":"Resource filter or option.","schema":{"type":"string","description":"Resource filter or option."}}]}},"/api/intercom-jwt":{"get":{"operationId":"get_intercom_jwt","tags":["Intercom Jwt"],"summary":"Retrieve Intercom Jwt","description":"Retrieve Intercom Jwt.\n\nRequires authenticated user context.\n\nCommon query parameters: `created_at`, `email`, `name`.\n\nSource handler: `pages/api/intercom-jwt.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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"created_at","in":"query","required":false,"description":"Created At as an ISO 8601 date-time.","schema":{"type":"string","format":"date-time","description":"Created At as an ISO 8601 date-time."}},{"name":"email","in":"query","required":false,"description":"Email filter or option.","schema":{"type":"string","format":"email","description":"Email filter or option."}},{"name":"name","in":"query","required":false,"description":"Name filter or option.","schema":{"type":"string","description":"Name filter or option."}}]}},"/api/intercom-latest-conversation":{"get":{"operationId":"get_intercom_latest_conversation","tags":["Intercom Latest Conversation"],"summary":"Retrieve Intercom Latest Conversation","description":"Retrieve Intercom Latest Conversation.\n\nRequires authenticated user context.\n\nSource handler: `pages/api/intercom-latest-conversation.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":[]}],"x-wesley-personal-api-key":false}},"/api/internal/quickbooks-desktop/cloud-migrations/{jobId}/completion":{"post":{"operationId":"post_internal_quickbooks_desktop_cloud_migrations_jobid_completion","tags":["Internal"],"summary":"Execute Internal Quickbooks Desktop Cloud Migrations By JobId Completion","description":"Execute Internal Quickbooks Desktop Cloud Migrations By JobId Completion.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/internal/quickbooks-desktop/cloud-migrations/[jobId]/completion.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}}]}},"/api/internal/quickbooks-desktop/cloud-migrations/{jobId}/notification":{"post":{"operationId":"post_internal_quickbooks_desktop_cloud_migrations_jobid_notification","tags":["Internal"],"summary":"Execute Internal Quickbooks Desktop Cloud Migrations By JobId Notification","description":"Execute Internal Quickbooks Desktop Cloud Migrations By JobId Notification.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/internal/quickbooks-desktop/cloud-migrations/[jobId]/notification.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}}]}},"/api/internal/quickbooks-desktop/cloud-migrations/{jobId}/passcode-required":{"post":{"operationId":"post_internal_quickbooks_desktop_cloud_migrations_jobid_passcode_required","tags":["Internal"],"summary":"Execute Internal Quickbooks Desktop Cloud Migrations By JobId Passcode Required","description":"Execute Internal Quickbooks Desktop Cloud Migrations By JobId Passcode Required.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/internal/quickbooks-desktop/cloud-migrations/[jobId]/passcode-required.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}}]}},"/api/internal/quickbooks-desktop/vendor-file-exports/{jobId}/completion":{"post":{"operationId":"post_internal_quickbooks_desktop_vendor_file_exports_jobid_completion","tags":["Internal"],"summary":"Execute Internal Quickbooks Desktop Vendor File Exports By JobId Completion","description":"Execute Internal Quickbooks Desktop Vendor File Exports By JobId Completion.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/internal/quickbooks-desktop/vendor-file-exports/[jobId]/completion.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}}]}},"/api/internal/support-source":{"get":{"operationId":"get_internal_support_source","tags":["Internal"],"summary":"Retrieve Internal Support Source","description":"Retrieve Internal Support Source.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/internal/support-source.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/internal/workspace-support-attachment":{"get":{"operationId":"get_internal_workspace_support_attachment","tags":["Internal"],"summary":"Retrieve Internal Workspace Support Attachment","description":"Retrieve Internal Workspace Support Attachment.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `attachmentId`, `issueId`.\n\nSource handler: `pages/api/internal/workspace-support-attachment.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"attachmentId","in":"query","required":false,"description":"AttachmentId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AttachmentId. Use an identifier returned by Wesley."}},{"name":"issueId","in":"query","required":false,"description":"IssueId. Use an identifier returned by Wesley.","schema":{"type":"boolean","description":"IssueId. Use an identifier returned by Wesley."}}]}},"/api/invitations":{"get":{"operationId":"get_invitations","tags":["Invitations"],"summary":"Retrieve Invitations","description":"Retrieve Invitations.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/invitations/index.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-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."}},"post":{"operationId":"post_invitations","tags":["Invitations"],"summary":"Execute Invitations","description":"Execute Invitations.\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\nJSON body keys used by this method: `accountingFirmId`, `companyAccessLevel`, `companyId`, `company_access_level`, `defaultCompanyAccessLevel`, `default_company_access_level`, `email`, `membership_type`, `postAcceptAction`, `post_accept_action`, `role`.\n\nSource handler: `pages/api/invitations/index.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `accountingFirmId`, `companyAccessLevel`, `companyId`, `company_access_level`, `defaultCompanyAccessLevel`, `default_company_access_level`, `email`, `membership_type`, `postAcceptAction`, `post_accept_action`, `role`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountingFirmId":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."},"companyAccessLevel":{"type":"string","description":"CompanyAccessLevel payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"company_access_level":{"type":"string","description":"Company Access Level payload field."},"defaultCompanyAccessLevel":{"type":"string","description":"DefaultCompanyAccessLevel payload field."},"default_company_access_level":{"type":"string","description":"Default Company Access Level payload field."},"email":{"type":"string","format":"email","description":"Email payload field."},"membership_type":{"type":"string","description":"Membership Type payload field."},"postAcceptAction":{"type":"string","description":"PostAcceptAction payload field."},"post_accept_action":{"type":"string","description":"Post Accept Action payload field."},"role":{"type":"string","description":"Role payload field."}},"additionalProperties":true}}}}}},"/api/invitations/{id}/accept":{"post":{"operationId":"post_invitations_id_accept","tags":["Invitations"],"summary":"Execute Invitations By Id Accept","description":"Execute Invitations By Id Accept.\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\nSource handler: `pages/api/invitations/[id]/accept.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/invitations/{id}/cancel":{"delete":{"operationId":"delete_invitations_id_cancel","tags":["Invitations"],"summary":"Delete Invitations By Id Cancel","description":"Delete Invitations By Id Cancel.\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\nSource handler: `pages/api/invitations/[id]/cancel.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/invitations/{id}/reject":{"post":{"operationId":"post_invitations_id_reject","tags":["Invitations"],"summary":"Execute Invitations By Id Reject","description":"Execute Invitations By Id Reject.\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\nSource handler: `pages/api/invitations/[id]/reject.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/invitations/{id}/resend":{"post":{"operationId":"post_invitations_id_resend","tags":["Invitations"],"summary":"Execute Invitations By Id Resend","description":"Execute Invitations By Id Resend.\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\nSource handler: `pages/api/invitations/[id]/resend.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/issue-board/mcp":{"post":{"operationId":"post_issue_board_mcp","tags":["Issue Board"],"summary":"Execute Issue Board Mcp","description":"Execute Issue Board Mcp.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/issue-board/mcp.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/journal-entries":{"post":{"operationId":"post_journal_entries","tags":["Journal Entries"],"summary":"Execute Journal Entries","description":"Execute Journal Entries.\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/journal-entries/index.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/journal-entries/{id}":{"get":{"operationId":"get_journal_entries_id","tags":["Journal Entries"],"summary":"Retrieve Journal Entries By Id","description":"Retrieve Journal Entries By Id.\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: `debug_logs`.\n\nSource handler: `pages/api/journal-entries/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"debug_logs","in":"query","required":false,"description":"Debug Logs filter or option.","schema":{"type":"string","description":"Debug Logs filter or option."}}]},"put":{"operationId":"put_journal_entries_id","tags":["Journal Entries"],"summary":"Replace Journal Entries By Id","description":"Replace Journal Entries By Id.\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: `debug_logs`.\n\nSource handler: `pages/api/journal-entries/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"debug_logs","in":"query","required":false,"description":"Debug Logs filter or option.","schema":{"type":"string","description":"Debug Logs filter or option."}}]}},"/api/journal-entries/{id}/date":{"get":{"operationId":"get_journal_entries_id_date","tags":["Journal Entries"],"summary":"Retrieve Journal Entries By Id Date","description":"Retrieve Journal Entries By Id Date.\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/journal-entries/[id]/date.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"post":{"operationId":"post_journal_entries_id_date","tags":["Journal Entries"],"summary":"Execute Journal Entries By Id Date","description":"Execute Journal Entries By Id Date.\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/journal-entries/[id]/date.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/journal-entries/bulk":{"post":{"operationId":"post_journal_entries_bulk","tags":["Journal Entries"],"summary":"Execute Journal Entries Bulk","description":"Execute Journal Entries Bulk.\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\nSource handler: `pages/api/journal-entries/bulk.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/journal-entries/bulk-change-account":{"patch":{"operationId":"patch_journal_entries_bulk_change_account","tags":["Journal Entries"],"summary":"Update Journal Entries Bulk Change Account","description":"Update Journal Entries Bulk Change 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\nBulk operation that can affect multiple records in one request.\n\nJSON body keys used by this method: `entryIds`, `fromAccountId`, `memo`, `toAccountId`, `updateMemo`.\n\nSource handler: `pages/api/journal-entries/bulk-change-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: `entryIds`, `fromAccountId`, `memo`, `toAccountId`, `updateMemo`.","content":{"application/json":{"schema":{"type":"object","properties":{"entryIds":{"type":"array","items":{"type":"string"},"description":"EntryIds. Use identifiers returned by Wesley."},"fromAccountId":{"type":"string","description":"FromAccountId. Use an identifier returned by Wesley."},"memo":{"type":"string","description":"Memo payload field."},"toAccountId":{"type":"string","description":"ToAccountId. Use an identifier returned by Wesley."},"updateMemo":{"type":"string","description":"UpdateMemo payload field."}},"additionalProperties":true}}}}}},"/api/journal-entries/bulk-change-aje":{"patch":{"operationId":"patch_journal_entries_bulk_change_aje","tags":["Journal Entries"],"summary":"Update Journal Entries Bulk Change Aje","description":"Update Journal Entries Bulk Change Aje.\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\nJSON body keys used by this method: `entryIds`, `isAdjusted`, `preview`.\n\nSource handler: `pages/api/journal-entries/bulk-change-aje.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: `entryIds`, `isAdjusted`, `preview`.","content":{"application/json":{"schema":{"type":"object","properties":{"entryIds":{"type":"array","items":{"type":"string"},"description":"EntryIds. Use identifiers returned by Wesley."},"isAdjusted":{"type":"boolean","description":"IsAdjusted flag."},"preview":{"type":"string","description":"Preview payload field."}},"additionalProperties":true}}}}}},"/api/journal-entries/bulk-change-customer":{"patch":{"operationId":"patch_journal_entries_bulk_change_customer","tags":["Journal Entries"],"summary":"Update Journal Entries Bulk Change Customer","description":"Update Journal Entries Bulk Change Customer.\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\nSource handler: `pages/api/journal-entries/bulk-change-customer.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/journal-entries/bulk-change-date":{"patch":{"operationId":"patch_journal_entries_bulk_change_date","tags":["Journal Entries"],"summary":"Update Journal Entries Bulk Change Date","description":"Update Journal Entries Bulk Change Date.\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\nJSON body keys used by this method: `date`, `entryIds`.\n\nSource handler: `pages/api/journal-entries/bulk-change-date.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: `date`, `entryIds`.","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","format":"date","description":"Date in YYYY-MM-DD format."},"entryIds":{"type":"array","items":{"type":"string"},"description":"EntryIds. Use identifiers returned by Wesley."}},"additionalProperties":true}}}}}},"/api/journal-entries/bulk-change-name-description":{"patch":{"operationId":"patch_journal_entries_bulk_change_name_description","tags":["Journal Entries"],"summary":"Update Journal Entries Bulk Change Name Description","description":"Update Journal Entries Bulk Change Name Description.\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\nJSON body keys used by this method: `entryIds`, `name`.\n\nSource handler: `pages/api/journal-entries/bulk-change-name-description.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: `entryIds`, `name`.","content":{"application/json":{"schema":{"type":"object","properties":{"entryIds":{"type":"array","items":{"type":"string"},"description":"EntryIds. Use identifiers returned by Wesley."},"name":{"type":"string","description":"Name payload field."}},"additionalProperties":true}}}}}},"/api/journal-entries/bulk-change-reference":{"patch":{"operationId":"patch_journal_entries_bulk_change_reference","tags":["Journal Entries"],"summary":"Update Journal Entries Bulk Change Reference","description":"Update Journal Entries Bulk Change Reference.\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\nJSON body keys used by this method: `entryIds`, `referenceNumber`.\n\nSource handler: `pages/api/journal-entries/bulk-change-reference.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: `entryIds`, `referenceNumber`.","content":{"application/json":{"schema":{"type":"object","properties":{"entryIds":{"type":"array","items":{"type":"string"},"description":"EntryIds. Use identifiers returned by Wesley."},"referenceNumber":{"type":"string","description":"ReferenceNumber payload field."}},"additionalProperties":true}}}}}},"/api/journal-entries/bulk-change-type":{"patch":{"operationId":"patch_journal_entries_bulk_change_type","tags":["Journal Entries"],"summary":"Update Journal Entries Bulk Change Type","description":"Update Journal Entries Bulk Change Type.\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\nSource handler: `pages/api/journal-entries/bulk-change-type.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/journal-entries/bulk-change-vendor":{"patch":{"operationId":"patch_journal_entries_bulk_change_vendor","tags":["Journal Entries"],"summary":"Update Journal Entries Bulk Change Vendor","description":"Update Journal Entries Bulk Change Vendor.\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\nSource handler: `pages/api/journal-entries/bulk-change-vendor.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/journal-entries/bulk-create":{"post":{"operationId":"post_journal_entries_bulk_create","tags":["Journal Entries"],"summary":"Create Journal Entries Bulk Create","description":"Create Journal Entries Bulk Create.\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\nSupports optional company scoping via 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\nSource handler: `pages/api/journal-entries/bulk-create.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,"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/journal-entries/bulk-delete":{"delete":{"operationId":"delete_journal_entries_bulk_delete","tags":["Journal Entries"],"summary":"Delete Journal Entries Bulk Delete","description":"Delete Journal Entries Bulk Delete.\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\nJSON body keys used by this method: `entryIds`.\n\nSource handler: `pages/api/journal-entries/bulk-delete.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: `entryIds`.","content":{"application/json":{"schema":{"type":"object","properties":{"entryIds":{"type":"array","items":{"type":"string"},"description":"EntryIds. Use identifiers returned by Wesley."}},"additionalProperties":true}}}}}},"/api/journal-entries/bulk-unpost-imported":{"post":{"operationId":"post_journal_entries_bulk_unpost_imported","tags":["Journal Entries"],"summary":"Import Journal Entries Bulk Unpost Imported","description":"Import Journal Entries Bulk Unpost Imported.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nJSON body keys used by this method: `transactions`.\n\nSource handler: `pages/api/journal-entries/bulk-unpost-imported.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: `transactions`.","content":{"application/json":{"schema":{"type":"object","properties":{"transactions":{"type":"string","description":"Transactions payload field."}},"additionalProperties":true}}}}}},"/api/journal-entries/opening-balance":{"post":{"operationId":"post_journal_entries_opening_balance","tags":["Journal Entries"],"summary":"Execute Journal Entries Opening Balance","description":"Execute Journal Entries Opening Balance.\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`, `amount`, `entryDate`, `expectedAccountIdentity`, `idempotencyKey`, `idempotencyMode`, `memo`.\n\nSource handler: `pages/api/journal-entries/opening-balance.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`, `amount`, `entryDate`, `expectedAccountIdentity`, `idempotencyKey`, `idempotencyMode`, `memo`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","description":"AccountId. Use an identifier returned by Wesley."},"amount":{"type":"string","description":"Amount payload field."},"entryDate":{"type":"string","format":"date","description":"EntryDate in YYYY-MM-DD format."},"expectedAccountIdentity":{"type":"string","description":"ExpectedAccountIdentity payload field."},"idempotencyKey":{"type":"string","description":"IdempotencyKey payload field."},"idempotencyMode":{"type":"string","description":"IdempotencyMode payload field."},"memo":{"type":"string","description":"Memo payload field."}},"additionalProperties":true}}}}}},"/api/journal-entries/summary":{"get":{"operationId":"get_journal_entries_summary","tags":["Journal Entries"],"summary":"Get Journal Entries Summary","description":"Get Journal Entries 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`, `entryType`, `entry_type`, `source`, `startDate`, `start_date`.\n\nSource handler: `pages/api/journal-entries/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":"entryType","in":"query","required":false,"description":"EntryType filter or option.","schema":{"type":"string","description":"EntryType filter or option."}},{"name":"entry_type","in":"query","required":false,"description":"Entry Type filter or option.","schema":{"type":"string","description":"Entry Type filter or option."}},{"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."}}]}},"/api/journal-entries/unpost":{"post":{"operationId":"post_journal_entries_unpost","tags":["Journal Entries"],"summary":"Execute Journal Entries Unpost","description":"Execute Journal Entries Unpost.\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: `journalEntryId`, `journalLineId`.\n\nSource handler: `pages/api/journal-entries/unpost.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: `journalEntryId`, `journalLineId`.","content":{"application/json":{"schema":{"type":"object","properties":{"journalEntryId":{"type":"string","description":"JournalEntryId. Use an identifier returned by Wesley."},"journalLineId":{"type":"string","description":"JournalLineId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/journal-entries/unpost-imported":{"post":{"operationId":"post_journal_entries_unpost_imported","tags":["Journal Entries"],"summary":"Import Journal Entries Unpost Imported","description":"Import Journal Entries Unpost Imported.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nJSON body keys used by this method: `journalEntryId`, `journalLineId`.\n\nSource handler: `pages/api/journal-entries/unpost-imported.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: `journalEntryId`, `journalLineId`.","content":{"application/json":{"schema":{"type":"object","properties":{"journalEntryId":{"type":"string","description":"JournalEntryId. Use an identifier returned by Wesley."},"journalLineId":{"type":"string","description":"JournalLineId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/journal-entries/unpost-recovery":{"get":{"operationId":"get_journal_entries_unpost_recovery","tags":["Journal Entries"],"summary":"Retrieve Journal Entries Unpost Recovery","description":"Retrieve Journal Entries Unpost Recovery.\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/journal-entries/unpost-recovery.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"}}]},"post":{"operationId":"post_journal_entries_unpost_recovery","tags":["Journal Entries"],"summary":"Execute Journal Entries Unpost Recovery","description":"Execute Journal Entries Unpost Recovery.\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/journal-entries/unpost-recovery.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/journal-entry-applications/{id}":{"delete":{"operationId":"delete_journal_entry_applications_id","tags":["Journal Entry Applications"],"summary":"Delete Journal Entry Applications By Id","description":"Delete Journal Entry Applications By Id.\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/journal-entry-applications/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/journal-inspection/auto-run":{"post":{"operationId":"post_journal_inspection_auto_run","tags":["Journal Inspection"],"summary":"Execute Journal Inspection Auto Run","description":"Execute Journal Inspection Auto Run.\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/journal-inspection/auto-run.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/journal-inspection/entry":{"get":{"operationId":"get_journal_inspection_entry","tags":["Journal Inspection"],"summary":"Retrieve Journal Inspection Entry","description":"Retrieve Journal Inspection Entry.\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: `entryId`.\n\nSource handler: `pages/api/journal-inspection/entry.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":"entryId","in":"query","required":false,"description":"EntryId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"EntryId. Use an identifier returned by Wesley."}}]}},"/api/journal-inspection/run":{"post":{"operationId":"post_journal_inspection_run","tags":["Journal Inspection"],"summary":"Execute Journal Inspection Run","description":"Execute Journal Inspection Run.\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/journal-inspection/run.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/journal-inspection/summary":{"get":{"operationId":"get_journal_inspection_summary","tags":["Journal Inspection"],"summary":"Get Journal Inspection Summary","description":"Get Journal Inspection 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: `endDate`, `startDate`.\n\nSource handler: `pages/api/journal-inspection/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":"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":"startDate","in":"query","required":false,"description":"StartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}}]}},"/api/journal-lines/{id}/description":{"patch":{"operationId":"patch_journal_lines_id_description","tags":["Journal Lines"],"summary":"Update Journal Lines By Id Description","description":"Update Journal Lines By Id Description.\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/journal-lines/[id]/description.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/journal-lines/bulk-change-account":{"patch":{"operationId":"patch_journal_lines_bulk_change_account","tags":["Journal Lines"],"summary":"Update Journal Lines Bulk Change Account","description":"Update Journal Lines Bulk Change 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\nBulk operation that can affect multiple records in one request.\n\nSource handler: `pages/api/journal-lines/bulk-change-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"}}]}},"/api/journal-lines/bulk-change-class":{"patch":{"operationId":"patch_journal_lines_bulk_change_class","tags":["Journal Lines"],"summary":"Update Journal Lines Bulk Change Class","description":"Update Journal Lines Bulk Change Class.\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\nSource handler: `pages/api/journal-lines/bulk-change-class.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":true,"description":"Bulk update class, location, or project assignments for journal lines. Omit `dimension` for the legacy class behavior. A null tag ID clears the selected dimension. Use `updates` for per-line assignments, `lineIds` plus a tag ID for explicit lines, or `accountIds` plus a tag ID to let the server select matching lines. With `includeAllLinesInEntries: true`, every line in entries containing a matching account line is updated. Source handler: `pages/api/journal-lines/bulk-change-class.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"dimension":{"type":"string","enum":["class","location","project"]},"lineIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"tagId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"classId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"locationId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accountIds":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"account_ids":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"includeAllLinesInEntries":{"type":"boolean"},"include_all_lines_in_entries":{"type":"boolean"},"updates":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"lineId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"tagId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"classId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"locationId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["lineId"]}}}}}}}}},"/api/journal-lines/bulk-change-customer":{"patch":{"operationId":"patch_journal_lines_bulk_change_customer","tags":["Journal Lines"],"summary":"Update Journal Lines Bulk Change Customer","description":"Update Journal Lines Bulk Change Customer.\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\nSource handler: `pages/api/journal-lines/bulk-change-customer.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":true,"description":"Bulk update customer assignments for specific journal lines. `customerId: null` clears the customer. Use `updates` for per-line assignments, or `lineIds` plus `customerId` to apply one customer to many lines. Source handler: `pages/api/journal-lines/bulk-change-customer.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"lineIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"customerId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"updates":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"lineId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["lineId"]}}}}}}}}},"/api/journal-lines/bulk-change-payee":{"patch":{"operationId":"patch_journal_lines_bulk_change_payee","tags":["Journal Lines"],"summary":"Update Journal Lines Bulk Change Payee","description":"Update Journal Lines Bulk Change Payee.\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\nSource handler: `pages/api/journal-lines/bulk-change-payee.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/journal-lines/bulk-change-vendor":{"patch":{"operationId":"patch_journal_lines_bulk_change_vendor","tags":["Journal Lines"],"summary":"Update Journal Lines Bulk Change Vendor","description":"Update Journal Lines Bulk Change Vendor.\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\nSource handler: `pages/api/journal-lines/bulk-change-vendor.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":true,"description":"Bulk update vendor assignments for specific journal lines. `vendorId: null` clears the vendor. Use `updates` for per-line assignments, or `lineIds` plus `vendorId` to apply one vendor to many lines. Source handler: `pages/api/journal-lines/bulk-change-vendor.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"lineIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"vendorId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"updates":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"lineId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"vendorId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["lineId"]}}}}}}}}},"/api/journal-period-locks":{"get":{"operationId":"get_journal_period_locks","tags":["Journal Period Locks"],"summary":"Retrieve Journal Period Locks","description":"Retrieve Journal Period Locks.\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: `lockId`.\n\nSource handler: `pages/api/journal-period-locks.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":"lockId","in":"query","required":false,"description":"LockId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"LockId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_journal_period_locks","tags":["Journal Period Locks"],"summary":"Execute Journal Period Locks","description":"Execute Journal Period Locks.\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: `endDate`, `lockId`, `note`, `reason`, `startDate`.\n\nCommon query parameters: `lockId`.\n\nSource handler: `pages/api/journal-period-locks.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":"lockId","in":"query","required":false,"description":"LockId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"LockId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `endDate`, `lockId`, `note`, `reason`, `startDate`.","content":{"application/json":{"schema":{"type":"object","properties":{"endDate":{"type":"string","format":"date","description":"EndDate in YYYY-MM-DD format."},"lockId":{"type":"string","description":"LockId. Use an identifier returned by Wesley."},"note":{"type":"string","description":"Note payload field."},"reason":{"type":"string","description":"Reason payload field."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_journal_period_locks","tags":["Journal Period Locks"],"summary":"Delete Journal Period Locks","description":"Delete Journal Period Locks.\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: `endDate`, `lockId`, `note`, `reason`, `startDate`.\n\nCommon query parameters: `lockId`.\n\nSource handler: `pages/api/journal-period-locks.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":"lockId","in":"query","required":false,"description":"LockId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"LockId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `endDate`, `lockId`, `note`, `reason`, `startDate`.","content":{"application/json":{"schema":{"type":"object","properties":{"endDate":{"type":"string","format":"date","description":"EndDate in YYYY-MM-DD format."},"lockId":{"type":"string","description":"LockId. Use an identifier returned by Wesley."},"note":{"type":"string","description":"Note payload field."},"reason":{"type":"string","description":"Reason payload field."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/journal-templates":{"get":{"operationId":"get_journal_templates","tags":["Journal Templates"],"summary":"Retrieve Journal Templates","description":"Retrieve Journal Templates.\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: `templateId`.\n\nSource handler: `pages/api/journal-templates/index.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":"templateId","in":"query","required":false,"description":"TemplateId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"TemplateId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_journal_templates","tags":["Journal Templates"],"summary":"Execute Journal Templates","description":"Execute Journal Templates.\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: `description`, `entryDescription`, `entryName`, `lines`, `name`, `templateId`.\n\nCommon query parameters: `templateId`.\n\nSource handler: `pages/api/journal-templates/index.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":"templateId","in":"query","required":false,"description":"TemplateId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"TemplateId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `description`, `entryDescription`, `entryName`, `lines`, `name`, `templateId`.","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","description":"Description payload field."},"entryDescription":{"type":"string","description":"EntryDescription payload field."},"entryName":{"type":"string","description":"EntryName payload field."},"lines":{"type":"string","description":"Lines payload field."},"name":{"type":"string","description":"Name payload field."},"templateId":{"type":"string","description":"TemplateId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_journal_templates","tags":["Journal Templates"],"summary":"Update Journal Templates","description":"Update Journal Templates.\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: `description`, `entryDescription`, `entryName`, `lines`, `name`, `templateId`.\n\nCommon query parameters: `templateId`.\n\nSource handler: `pages/api/journal-templates/index.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":"templateId","in":"query","required":false,"description":"TemplateId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"TemplateId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `description`, `entryDescription`, `entryName`, `lines`, `name`, `templateId`.","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","description":"Description payload field."},"entryDescription":{"type":"string","description":"EntryDescription payload field."},"entryName":{"type":"string","description":"EntryName payload field."},"lines":{"type":"string","description":"Lines payload field."},"name":{"type":"string","description":"Name payload field."},"templateId":{"type":"string","description":"TemplateId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_journal_templates","tags":["Journal Templates"],"summary":"Delete Journal Templates","description":"Delete Journal Templates.\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: `description`, `entryDescription`, `entryName`, `lines`, `name`, `templateId`.\n\nCommon query parameters: `templateId`.\n\nSource handler: `pages/api/journal-templates/index.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":"templateId","in":"query","required":false,"description":"TemplateId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"TemplateId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `description`, `entryDescription`, `entryName`, `lines`, `name`, `templateId`.","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","description":"Description payload field."},"entryDescription":{"type":"string","description":"EntryDescription payload field."},"entryName":{"type":"string","description":"EntryName payload field."},"lines":{"type":"string","description":"Lines payload field."},"name":{"type":"string","description":"Name payload field."},"templateId":{"type":"string","description":"TemplateId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/kpi/dashboards":{"get":{"operationId":"get_kpi_dashboards","tags":["Kpi"],"summary":"Retrieve Kpi Dashboards","description":"Retrieve Kpi Dashboards.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/kpi/dashboards.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-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."}},"post":{"operationId":"post_kpi_dashboards","tags":["Kpi"],"summary":"Execute Kpi Dashboards","description":"Execute Kpi Dashboards.\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\nJSON body keys used by this method: `shared`.\n\nSource handler: `pages/api/kpi/dashboards.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `shared`.","content":{"application/json":{"schema":{"type":"object","properties":{"shared":{"type":"string","description":"Shared payload field."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_kpi_dashboards","tags":["Kpi"],"summary":"Update Kpi Dashboards","description":"Update Kpi Dashboards.\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\nJSON body keys used by this method: `shared`.\n\nSource handler: `pages/api/kpi/dashboards.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `shared`.","content":{"application/json":{"schema":{"type":"object","properties":{"shared":{"type":"string","description":"Shared payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_kpi_dashboards","tags":["Kpi"],"summary":"Delete Kpi Dashboards","description":"Delete Kpi Dashboards.\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\nJSON body keys used by this method: `shared`.\n\nSource handler: `pages/api/kpi/dashboards.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `shared`.","content":{"application/json":{"schema":{"type":"object","properties":{"shared":{"type":"string","description":"Shared payload field."}},"additionalProperties":true}}}}}},"/api/kpi/data":{"get":{"operationId":"get_kpi_data","tags":["Kpi"],"summary":"Retrieve Kpi Data","description":"Retrieve Kpi Data.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/kpi/data.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_kpi_data","tags":["Kpi"],"summary":"Execute Kpi Data","description":"Execute Kpi Data.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/kpi/data.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/locations":{"get":{"operationId":"get_locations","tags":["Locations"],"summary":"Retrieve Locations","description":"Retrieve Locations.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/locations.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"post":{"operationId":"post_locations","tags":["Locations"],"summary":"Execute Locations","description":"Execute Locations.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/locations.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"put":{"operationId":"put_locations","tags":["Locations"],"summary":"Replace Locations","description":"Replace Locations.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/locations.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"delete":{"operationId":"delete_locations","tags":["Locations"],"summary":"Delete Locations","description":"Delete Locations.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/locations.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]}},"/api/marketing/client-ip":{"get":{"operationId":"get_marketing_client_ip","tags":["Marketing"],"summary":"Retrieve Marketing Client Ip","description":"Retrieve Marketing Client Ip.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/marketing/client-ip.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/master-data/uppercase":{"post":{"operationId":"post_master_data_uppercase","tags":["Master Data"],"summary":"Execute Master Data Uppercase","description":"Execute Master Data Uppercase.\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/master-data/uppercase.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/mcp":{"post":{"operationId":"post_mcp","tags":["Mcp"],"summary":"Execute Mcp","description":"Execute Mcp.\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\nSource handler: `pages/api/mcp/index.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}},"/api/mcp/oauth/{action}":{"get":{"operationId":"get_mcp_oauth_action","tags":["Mcp"],"summary":"Retrieve Mcp Oauth By Action","description":"Retrieve Mcp Oauth By Action.\n\nRequires authenticated user context.\n\nCommon query parameters: `resource`.\n\nSource handler: `pages/api/mcp/oauth/[action].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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"action","in":"path","required":true,"description":"Path identifier: action","schema":{"type":"string"}},{"name":"resource","in":"query","required":false,"description":"Resource filter or option.","schema":{"type":"string","description":"Resource filter or option."}}]},"post":{"operationId":"post_mcp_oauth_action","tags":["Mcp"],"summary":"Execute Mcp Oauth By Action","description":"Execute Mcp Oauth By Action.\n\nRequires authenticated user context.\n\nCommon query parameters: `resource`.\n\nSource handler: `pages/api/mcp/oauth/[action].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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"action","in":"path","required":true,"description":"Path identifier: action","schema":{"type":"string"}},{"name":"resource","in":"query","required":false,"description":"Resource filter or option.","schema":{"type":"string","description":"Resource filter or option."}}]}},"/api/monthly-close-runs":{"get":{"operationId":"get_monthly_close_runs","tags":["Monthly Close Runs"],"summary":"Retrieve Monthly Close Runs","description":"Retrieve Monthly Close Runs.\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: `periodEnd`, `periodStart`.\n\nSource handler: `pages/api/monthly-close-runs/index.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":"periodEnd","in":"query","required":false,"description":"PeriodEnd filter or option.","schema":{"type":"string","description":"PeriodEnd filter or option."}},{"name":"periodStart","in":"query","required":false,"description":"PeriodStart filter or option.","schema":{"type":"string","description":"PeriodStart filter or option."}}]},"post":{"operationId":"post_monthly_close_runs","tags":["Monthly Close Runs"],"summary":"Execute Monthly Close Runs","description":"Execute Monthly Close Runs.\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: `periodEnd`, `periodStart`.\n\nSource handler: `pages/api/monthly-close-runs/index.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":"periodEnd","in":"query","required":false,"description":"PeriodEnd filter or option.","schema":{"type":"string","description":"PeriodEnd filter or option."}},{"name":"periodStart","in":"query","required":false,"description":"PeriodStart filter or option.","schema":{"type":"string","description":"PeriodStart filter or option."}}]}},"/api/monthly-close-runs/{closeRunId}":{"patch":{"operationId":"patch_monthly_close_runs_closerunid","tags":["Monthly Close Runs"],"summary":"Update Monthly Close Runs By CloseRunId","description":"Update Monthly Close Runs By CloseRunId.\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\nSource handler: `pages/api/monthly-close-runs/[closeRunId].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,"parameters":[{"name":"closeRunId","in":"path","required":true,"description":"Path identifier: closeRunId","schema":{"type":"string"}}]},"delete":{"operationId":"delete_monthly_close_runs_closerunid","tags":["Monthly Close Runs"],"summary":"Delete Monthly Close Runs By CloseRunId","description":"Delete Monthly Close Runs By CloseRunId.\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\nSource handler: `pages/api/monthly-close-runs/[closeRunId].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,"parameters":[{"name":"closeRunId","in":"path","required":true,"description":"Path identifier: closeRunId","schema":{"type":"string"}}]}},"/api/monthly-close-runs/{closeRunId}/processes":{"post":{"operationId":"post_monthly_close_runs_closerunid_processes","tags":["Monthly Close Runs"],"summary":"Execute Monthly Close Runs By CloseRunId Processes","description":"Execute Monthly Close Runs By CloseRunId Processes.\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\nSource handler: `pages/api/monthly-close-runs/[closeRunId]/processes.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,"parameters":[{"name":"closeRunId","in":"path","required":true,"description":"Path identifier: closeRunId","schema":{"type":"string"}}]},"patch":{"operationId":"patch_monthly_close_runs_closerunid_processes","tags":["Monthly Close Runs"],"summary":"Update Monthly Close Runs By CloseRunId Processes","description":"Update Monthly Close Runs By CloseRunId Processes.\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\nSource handler: `pages/api/monthly-close-runs/[closeRunId]/processes.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,"parameters":[{"name":"closeRunId","in":"path","required":true,"description":"Path identifier: closeRunId","schema":{"type":"string"}}]}},"/api/monthly-close-runs/history":{"get":{"operationId":"get_monthly_close_runs_history","tags":["Monthly Close Runs"],"summary":"Retrieve Monthly Close Runs History","description":"Retrieve Monthly Close Runs History.\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/monthly-close-runs/history.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"}}]},"patch":{"operationId":"patch_monthly_close_runs_history","tags":["Monthly Close Runs"],"summary":"Update Monthly Close Runs History","description":"Update Monthly Close Runs History.\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/monthly-close-runs/history.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/observability/client-performance":{"post":{"operationId":"post_observability_client_performance","tags":["Observability"],"summary":"Execute Observability Client Performance","description":"Execute Observability Client Performance.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `event_type`.\n\nSource handler: `pages/api/observability/client-performance.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `event_type`.","content":{"application/json":{"schema":{"type":"object","properties":{"event_type":{"type":"string","description":"Event Type payload field."}},"additionalProperties":true}}}}}},"/api/observability/otlp-relay":{"post":{"operationId":"post_observability_otlp_relay","tags":["Observability"],"summary":"Execute Observability Otlp Relay","description":"Execute Observability Otlp Relay.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/observability/otlp-relay.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/operational-errors":{"post":{"operationId":"post_operational_errors","tags":["Operational Errors"],"summary":"Execute Operational Errors","description":"Execute Operational Errors.\n\nRequires authenticated user context.\n\nSource handler: `pages/api/operational-errors.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":[]}],"x-wesley-personal-api-key":false}},"/api/payees/{type}/{id}":{"get":{"operationId":"get_payees_type_id","tags":["Payees"],"summary":"Retrieve Payees By Type By Id","description":"Retrieve Payees By Type By Id.\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: `entries_page`, `entries_page_size`.\n\nSource handler: `pages/api/payees/[type]/[id].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":"type","in":"path","required":true,"description":"Path identifier: type","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"entries_page","in":"query","required":false,"description":"Entries Page filter or option.","schema":{"type":"string","description":"Entries Page filter or option."}},{"name":"entries_page_size","in":"query","required":false,"description":"Entries Page Size filter or option.","schema":{"type":"string","description":"Entries Page Size filter or option."}}]}},"/api/payees/{type}/{id}/convert-type":{"post":{"operationId":"post_payees_type_id_convert_type","tags":["Payees"],"summary":"Execute Payees By Type By Id Convert Type","description":"Execute Payees By Type By Id Convert Type.\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/payees/[type]/[id]/convert-type.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":"type","in":"path","required":true,"description":"Path identifier: type","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/payees/{type}/{id}/reclassify-account":{"get":{"operationId":"get_payees_type_id_reclassify_account","tags":["Payees"],"summary":"Get Payees By Type By Id Reclassify Account","description":"Get Payees By Type By Id Reclassify 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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/payees/[type]/[id]/reclassify-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":"type","in":"path","required":true,"description":"Path identifier: type","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"post":{"operationId":"post_payees_type_id_reclassify_account","tags":["Payees"],"summary":"Generate Payees By Type By Id Reclassify Account","description":"Generate Payees By Type By Id Reclassify 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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/payees/[type]/[id]/reclassify-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":"type","in":"path","required":true,"description":"Path identifier: type","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/payees/import":{"get":{"operationId":"get_payees_import","tags":["Payees"],"summary":"Retrieve Payees Import","description":"Retrieve Payees Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `page`, `pageSize`, `search`, `sourceCompanyId`, `type`.\n\nSource handler: `pages/api/payees/import.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":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"pageSize","in":"query","required":false,"description":"PageSize filter or option.","schema":{"type":"integer","description":"PageSize filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"sourceCompanyId","in":"query","required":false,"description":"SourceCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}},{"name":"type","in":"query","required":false,"description":"Type filter or option.","schema":{"type":"string","description":"Type filter or option."}}]},"post":{"operationId":"post_payees_import","tags":["Payees"],"summary":"Import Payees Import","description":"Import Payees Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nCommon query parameters: `page`, `pageSize`, `search`, `sourceCompanyId`, `type`.\n\nSource handler: `pages/api/payees/import.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":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"pageSize","in":"query","required":false,"description":"PageSize filter or option.","schema":{"type":"integer","description":"PageSize filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"sourceCompanyId","in":"query","required":false,"description":"SourceCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}},{"name":"type","in":"query","required":false,"description":"Type filter or option.","schema":{"type":"string","description":"Type filter or option."}}]}},"/api/payees/materialize":{"post":{"operationId":"post_payees_materialize","tags":["Payees"],"summary":"Execute Payees Materialize","description":"Execute Payees Materialize.\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/payees/materialize.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/payees/transfers":{"get":{"operationId":"get_payees_transfers","tags":["Payees"],"summary":"Retrieve Payees Transfers","description":"Retrieve Payees Transfers.\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: `end_date`, `payee`, `start_date`.\n\nSource handler: `pages/api/payees/transfers.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":"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":"payee","in":"query","required":false,"description":"Payee filter or option.","schema":{"type":"string","description":"Payee 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/payroll/employee-mappings":{"get":{"operationId":"get_payroll_employee_mappings","tags":["Payroll"],"summary":"Retrieve Payroll Employee Mappings","description":"Retrieve Payroll Employee Mappings.\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\nSource handler: `pages/api/payroll/employee-mappings.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"}}]},"put":{"operationId":"put_payroll_employee_mappings","tags":["Payroll"],"summary":"Replace Payroll Employee Mappings","description":"Replace Payroll Employee Mappings.\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: `employees`, `version`.\n\nSource handler: `pages/api/payroll/employee-mappings.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: `employees`, `version`.","content":{"application/json":{"schema":{"type":"object","properties":{"employees":{"type":"string","description":"Employees payload field."},"version":{"type":"string","description":"Version payload field."}},"additionalProperties":true}}}}}},"/api/payroll/integration":{"get":{"operationId":"get_payroll_integration","tags":["Payroll"],"summary":"Read invitation-only payroll settings and this client's reference journals","description":"Retrieve Payroll Integration.\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: `provider`.\n\nSource handler: `pages/api/payroll/integration.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":true,"description":"Wesley client UUID","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":"provider","in":"query","required":true,"description":"Payroll provider","schema":{"type":"string","enum":["gusto","adp-run","patriot-payroll"]}}]},"put":{"operationId":"put_payroll_integration","tags":["Payroll"],"summary":"Save payroll cadence and reference journal","description":"Replace Payroll Integration.\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: `provider`.\n\nSource handler: `pages/api/payroll/integration.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":true,"description":"Wesley client UUID","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":"provider","in":"query","required":true,"description":"Payroll provider","schema":{"type":"string","enum":["gusto","adp-run","patriot-payroll"]}}],"requestBody":{"required":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/payroll/integration.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"interval":{"type":"string","enum":["weekly","biweekly","semimonthly","monthly"]},"reference_journal_entry_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"updated_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["interval","reference_journal_entry_id","updated_at"],"additionalProperties":false}}}}}},"/api/payroll/preview-employees":{"post":{"operationId":"post_payroll_preview_employees","tags":["Payroll"],"summary":"Execute Payroll Preview Employees","description":"Execute Payroll Preview Employees.\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\nPreview endpoint used to inspect impact before committing changes.\n\nAccepts multipart form uploads for file-based workflows.\n\nCommon query parameters: `kind`.\n\nSource handler: `pages/api/payroll/preview-employees.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":"kind","in":"query","required":false,"description":"Kind filter or option.","schema":{"type":"string","description":"Kind filter or option."}}],"requestBody":{"required":false,"description":"Multipart upload payload for file-processing workflows.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"files":{"type":"array","items":{"type":"string","format":"binary"}}},"additionalProperties":true}},"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}},"/api/payroll/record":{"get":{"operationId":"get_payroll_record","tags":["Payroll"],"summary":"Retrieve Payroll Record","description":"Retrieve Payroll Record.\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`, `includeJournals`, `start`.\n\nSource handler: `pages/api/payroll/record.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","in":"query","required":false,"description":"End filter or option.","schema":{"type":"string","description":"End filter or option."}},{"name":"includeJournals","in":"query","required":false,"description":"IncludeJournals flag.","schema":{"type":"boolean","description":"IncludeJournals flag."}},{"name":"start","in":"query","required":false,"description":"Start filter or option.","schema":{"type":"string","description":"Start filter or option."}}]},"post":{"operationId":"post_payroll_record","tags":["Payroll"],"summary":"Execute Payroll Record","description":"Execute Payroll Record.\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`, `includeJournals`, `start`.\n\nSource handler: `pages/api/payroll/record.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","in":"query","required":false,"description":"End filter or option.","schema":{"type":"string","description":"End filter or option."}},{"name":"includeJournals","in":"query","required":false,"description":"IncludeJournals flag.","schema":{"type":"boolean","description":"IncludeJournals flag."}},{"name":"start","in":"query","required":false,"description":"Start filter or option.","schema":{"type":"string","description":"Start filter or option."}}]}},"/api/payroll/sync-runs":{"get":{"operationId":"get_payroll_sync_runs","tags":["Payroll"],"summary":"List this client's latest payroll synchronization results and total count","description":"Retrieve Payroll Sync Runs.\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: `provider`, `summaryOnly`.\n\nSource handler: `pages/api/payroll/sync-runs.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":"provider","in":"query","required":false,"description":"Provider filter or option.","schema":{"type":"string","description":"Provider filter or option."}},{"name":"summaryOnly","in":"query","schema":{"type":"string","enum":["true","false"]},"description":"Return counts without report rows"}]},"post":{"operationId":"post_payroll_sync_runs","tags":["Payroll"],"summary":"Retry an unrecorded payroll with the current reference","description":"Sync Payroll Sync Runs.\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: `provider`, `summaryOnly`.\n\nSource handler: `pages/api/payroll/sync-runs.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":"provider","in":"query","required":false,"description":"Provider filter or option.","schema":{"type":"string","description":"Provider filter or option."}},{"name":"summaryOnly","in":"query","required":false,"description":"SummaryOnly filter or option.","schema":{"type":"string","description":"SummaryOnly filter or option."}}],"requestBody":{"required":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/payroll/sync-runs.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["runId"],"additionalProperties":false}}}}}},"/api/plaid/account-mapping-suggestions":{"post":{"operationId":"post_plaid_account_mapping_suggestions","tags":["Plaid"],"summary":"Generate Plaid Account Mapping Suggestions","description":"Generate Plaid Account Mapping 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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/plaid/account-mapping-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/plaid/create-link-token":{"post":{"operationId":"post_plaid_create_link_token","tags":["Plaid"],"summary":"Create Plaid Create Link Token","description":"Create Plaid Create Link Token.\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: `connectionWide`, `distinctLoginConfirmed`, `linkSessionAttempt`, `linkSessionId`, `plaidItemId`, `product`, `reauthorize`.\n\nSource handler: `pages/api/plaid/create-link-token.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":true,"description":"Create a Plaid Link token for the current company context.","content":{"application/json":{"schema":{"type":"object","required":["companyId"],"properties":{"companyId":{"type":"string"},"plaidItemId":{"type":["string","null"]}}}}}}}},"/api/plaid/exchange-token":{"post":{"operationId":"post_plaid_exchange_token","tags":["Plaid"],"summary":"Execute Plaid Exchange Token","description":"Execute Plaid Exchange Token.\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: `connectionWide`, `distinctLoginConfirmed`, `linkSessionAttempt`, `linkSessionId`, `linkSessionToken`, `linkToken`, `plaidItemId`, `plaidLinkSessionId`, `publicToken`, `reauthorize`, `updateGeneration`.\n\nSource handler: `pages/api/plaid/exchange-token.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":true,"description":"Exchange a Plaid public token to create or update a linked Plaid item.","content":{"application/json":{"schema":{"type":"object","required":["companyId","publicToken"],"properties":{"companyId":{"type":"string"},"publicToken":{"type":"string"},"plaidItemId":{"type":["string","null"]}}}}}}}},"/api/plaid/initial-opening-balance":{"post":{"operationId":"post_plaid_initial_opening_balance","tags":["Plaid"],"summary":"Execute Plaid Initial Opening Balance","description":"Execute Plaid Initial Opening Balance.\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/plaid/initial-opening-balance.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/plaid/items":{"get":{"operationId":"get_plaid_items","tags":["Plaid"],"summary":"Retrieve Plaid Items","description":"Retrieve Plaid Items.\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: `accountScope`.\n\nSource handler: `pages/api/plaid/items.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":"accountScope","in":"query","required":false,"description":"AccountScope filter or option.","schema":{"type":"string","description":"AccountScope filter or option."}}]}},"/api/plaid/items/{id}":{"patch":{"operationId":"patch_plaid_items_id","tags":["Plaid"],"summary":"Update Plaid Items By Id","description":"Update Plaid Items By Id.\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: `paused`.\n\nSource handler: `pages/api/plaid/items/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `paused`.","content":{"application/json":{"schema":{"type":"object","properties":{"paused":{"type":"string","description":"Paused payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_plaid_items_id","tags":["Plaid"],"summary":"Delete Plaid Items By Id","description":"Delete Plaid Items By Id.\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: `paused`.\n\nSource handler: `pages/api/plaid/items/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `paused`.","content":{"application/json":{"schema":{"type":"object","properties":{"paused":{"type":"string","description":"Paused payload field."}},"additionalProperties":true}}}}}},"/api/plaid/link-existing-account":{"post":{"operationId":"post_plaid_link_existing_account","tags":["Plaid"],"summary":"Execute Plaid Link Existing Account","description":"Execute Plaid Link Existing 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`, `plaidAccountId`, `plaidItemId`, `reconnectFrom`.\n\nSource handler: `pages/api/plaid/link-existing-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`, `plaidAccountId`, `plaidItemId`, `reconnectFrom`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","description":"AccountId. Use an identifier returned by Wesley."},"plaidAccountId":{"type":"string","description":"PlaidAccountId. Use an identifier returned by Wesley."},"plaidItemId":{"type":"string","description":"PlaidItemId. Use an identifier returned by Wesley."},"reconnectFrom":{"type":"string","description":"ReconnectFrom payload field."}},"additionalProperties":true}}}}}},"/api/plaid/linkable-external-accounts":{"get":{"operationId":"get_plaid_linkable_external_accounts","tags":["Plaid"],"summary":"Get Plaid Linkable External Accounts","description":"Get Plaid Linkable 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\nSource handler: `pages/api/plaid/linkable-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"}}]}},"/api/plaid/manage-connections":{"get":{"operationId":"get_plaid_manage_connections","tags":["Plaid"],"summary":"Retrieve Plaid Manage Connections","description":"Retrieve Plaid Manage Connections.\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/plaid/manage-connections.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"}}]},"post":{"operationId":"post_plaid_manage_connections","tags":["Plaid"],"summary":"Execute Plaid Manage Connections","description":"Execute Plaid Manage Connections.\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: `assignments`, `plaidItemId`.\n\nSource handler: `pages/api/plaid/manage-connections.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: `assignments`, `plaidItemId`.","content":{"application/json":{"schema":{"type":"object","properties":{"assignments":{"type":"string","description":"Assignments payload field."},"plaidItemId":{"type":"string","description":"PlaidItemId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/plaid/provision-account":{"post":{"operationId":"post_plaid_provision_account","tags":["Plaid"],"summary":"Execute Plaid Provision Account","description":"Execute Plaid Provision 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`, `expectedAccountIdentity`, `plaidAccountId`, `plaidItemId`.\n\nSource handler: `pages/api/plaid/provision-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`, `expectedAccountIdentity`, `plaidAccountId`, `plaidItemId`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","description":"AccountId. Use an identifier returned by Wesley."},"expectedAccountIdentity":{"type":"string","description":"ExpectedAccountIdentity payload field."},"plaidAccountId":{"type":"string","description":"PlaidAccountId. Use an identifier returned by Wesley."},"plaidItemId":{"type":"string","description":"PlaidItemId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/plaid/release-account-selection-update":{"post":{"operationId":"post_plaid_release_account_selection_update","tags":["Plaid"],"summary":"Execute Plaid Release Account Selection Update","description":"Execute Plaid Release Account Selection Update.\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: `linkSessionAttempt`, `linkSessionId`, `linkToken`, `plaidItemId`, `updateGeneration`.\n\nSource handler: `pages/api/plaid/release-account-selection-update.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: `linkSessionAttempt`, `linkSessionId`, `linkToken`, `plaidItemId`, `updateGeneration`.","content":{"application/json":{"schema":{"type":"object","properties":{"linkSessionAttempt":{"type":"string","description":"LinkSessionAttempt payload field."},"linkSessionId":{"type":"string","description":"LinkSessionId. Use an identifier returned by Wesley."},"linkToken":{"type":"string","description":"LinkToken payload field."},"plaidItemId":{"type":"string","description":"PlaidItemId. Use an identifier returned by Wesley."},"updateGeneration":{"type":"string","description":"UpdateGeneration payload field."}},"additionalProperties":true}}}}}},"/api/plaid/replace-connection":{"get":{"operationId":"get_plaid_replace_connection","tags":["Plaid"],"summary":"Retrieve Plaid Replace Connection","description":"Retrieve Plaid Replace Connection.\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/plaid/replace-connection.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"}}]},"post":{"operationId":"post_plaid_replace_connection","tags":["Plaid"],"summary":"Execute Plaid Replace Connection","description":"Execute Plaid Replace Connection.\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/plaid/replace-connection.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/plaid/reusable-connections":{"get":{"operationId":"get_plaid_reusable_connections","tags":["Plaid"],"summary":"Retrieve Plaid Reusable Connections","description":"Retrieve Plaid Reusable Connections.\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: `plaidItemId`.\n\nSource handler: `pages/api/plaid/reusable-connections.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":"plaidItemId","in":"query","required":false,"description":"PlaidItemId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"PlaidItemId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_plaid_reusable_connections","tags":["Plaid"],"summary":"Execute Plaid Reusable Connections","description":"Execute Plaid Reusable Connections.\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: `expectedOwners`, `plaidAccountIds`, `plaidItemId`.\n\nCommon query parameters: `plaidItemId`.\n\nSource handler: `pages/api/plaid/reusable-connections.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":"plaidItemId","in":"query","required":false,"description":"PlaidItemId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"PlaidItemId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `expectedOwners`, `plaidAccountIds`, `plaidItemId`.","content":{"application/json":{"schema":{"type":"object","properties":{"expectedOwners":{"type":"string","description":"ExpectedOwners payload field."},"plaidAccountIds":{"type":"array","items":{"type":"string"},"description":"PlaidAccountIds. Use identifiers returned by Wesley."},"plaidItemId":{"type":"string","description":"PlaidItemId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/plaid/setup-recovery":{"get":{"operationId":"get_plaid_setup_recovery","tags":["Plaid"],"summary":"Retrieve Plaid Setup Recovery","description":"Retrieve Plaid Setup Recovery.\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/plaid/setup-recovery.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"}}]},"patch":{"operationId":"patch_plaid_setup_recovery","tags":["Plaid"],"summary":"Update Plaid Setup Recovery","description":"Update Plaid Setup Recovery.\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: `expectedCode`, `journalAccountId`, `newCode`, `plans`, `recoveryId`.\n\nSource handler: `pages/api/plaid/setup-recovery.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: `expectedCode`, `journalAccountId`, `newCode`, `plans`, `recoveryId`.","content":{"application/json":{"schema":{"type":"object","properties":{"expectedCode":{"type":"string","description":"ExpectedCode payload field."},"journalAccountId":{"type":"string","description":"JournalAccountId. Use an identifier returned by Wesley."},"newCode":{"type":"string","description":"NewCode payload field."},"plans":{"type":"string","description":"Plans payload field."},"recoveryId":{"type":"string","description":"RecoveryId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/plaid/statements":{"get":{"operationId":"get_plaid_statements","tags":["Plaid"],"summary":"Retrieve Plaid Statements","description":"Retrieve Plaid Statements.\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`.\n\nSource handler: `pages/api/plaid/statements.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","in":"query","required":false,"description":"Action filter or option.","schema":{"type":"string","description":"Action filter or option."}}]},"post":{"operationId":"post_plaid_statements","tags":["Plaid"],"summary":"Execute Plaid Statements","description":"Execute Plaid Statements.\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: `action`.\n\nSource handler: `pages/api/plaid/statements.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":"action","in":"query","required":false,"description":"Action filter or option.","schema":{"type":"string","description":"Action filter or option."}}]}},"/api/plaid/sync":{"post":{"operationId":"post_plaid_sync","tags":["Plaid"],"summary":"Sync Plaid Sync","description":"Sync Plaid Sync.\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`, `accountIds`, `openingBalanceIntent`, `setupRecoveryId`, `startDate`.\n\nSource handler: `pages/api/plaid/sync.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`, `accountIds`, `openingBalanceIntent`, `setupRecoveryId`, `startDate`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","description":"AccountId. Use an identifier returned by Wesley."},"accountIds":{"type":"array","items":{"type":"string"},"description":"AccountIds. Use identifiers returned by Wesley."},"openingBalanceIntent":{"type":"string","description":"OpeningBalanceIntent payload field."},"setupRecoveryId":{"type":"string","description":"SetupRecoveryId. Use an identifier returned by Wesley."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/plaid/sync-cursors":{"get":{"operationId":"get_plaid_sync_cursors","tags":["Plaid"],"summary":"Retrieve Plaid Sync Cursors","description":"Retrieve Plaid Sync Cursors.\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: `includeCompletionSummary`, `initialImportAccountIds`.\n\nSource handler: `pages/api/plaid/sync-cursors/index.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":"includeCompletionSummary","in":"query","required":false,"description":"IncludeCompletionSummary flag.","schema":{"type":"boolean","description":"IncludeCompletionSummary flag."}},{"name":"initialImportAccountIds","in":"query","required":false,"description":"InitialImportAccountIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"InitialImportAccountIds. Use identifiers returned by Wesley."}}]}},"/api/plaid/sync-cursors/{id}/transactions":{"get":{"operationId":"get_plaid_sync_cursors_id_transactions","tags":["Plaid"],"summary":"Retrieve Plaid Sync Cursors By Id Transactions","description":"Retrieve Plaid Sync Cursors By Id 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\nSource handler: `pages/api/plaid/sync-cursors/[id]/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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/plaid/webhook":{"post":{"operationId":"post_plaid_webhook","tags":["Plaid"],"summary":"Execute Plaid Webhook","description":"Execute Plaid Webhook.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/plaid/webhook.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/private-blob-upload-token":{"post":{"operationId":"post_private_blob_upload_token","tags":["Private Blob Upload Token"],"summary":"Execute Private Blob Upload Token","description":"Execute Private Blob Upload Token.\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\nSource handler: `pages/api/private-blob-upload-token.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}},"/api/private-blob-upload-tokens":{"post":{"operationId":"post_private_blob_upload_tokens","tags":["Private Blob Upload Tokens"],"summary":"Execute Private Blob Upload Tokens","description":"Execute Private Blob Upload Tokens.\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\nSource handler: `pages/api/private-blob-upload-tokens.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}},"/api/processor-reconciliation":{"get":{"operationId":"get_processor_reconciliation","tags":["Processor Reconciliation"],"summary":"Retrieve Processor Reconciliation","description":"Retrieve Processor Reconciliation.\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: `period`, `provider`.\n\nSource handler: `pages/api/processor-reconciliation.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":"period","in":"query","required":false,"description":"Period filter or option.","schema":{"type":"string","description":"Period filter or option."}},{"name":"provider","in":"query","required":false,"description":"Provider filter or option.","schema":{"type":"string","description":"Provider filter or option."}}]}},"/api/processor-settlements/lookup":{"post":{"operationId":"post_processor_settlements_lookup","tags":["Processor Settlements"],"summary":"Execute Processor Settlements Lookup","description":"Execute Processor Settlements Lookup.\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: `forceRefresh`, `provider`, `transactionId`.\n\nSource handler: `pages/api/processor-settlements/lookup.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: `forceRefresh`, `provider`, `transactionId`.","content":{"application/json":{"schema":{"type":"object","properties":{"forceRefresh":{"type":"boolean","description":"ForceRefresh flag."},"provider":{"type":"string","description":"Provider payload field."},"transactionId":{"type":"string","description":"TransactionId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/projects":{"get":{"operationId":"get_projects","tags":["Projects"],"summary":"Retrieve Projects","description":"Retrieve Projects.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/projects.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]},"post":{"operationId":"post_projects","tags":["Projects"],"summary":"Execute Projects","description":"Execute Projects.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/projects.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}],"requestBody":{"required":true,"description":"Create a project. Set customerId for customer work; null supports internal projects. Bills retain their vendor and assign costs through lineItems.projectId. Source handler: `pages/api/projects.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":200},"note":{"nullable":true,"type":"string","maxLength":1000},"isActive":{"type":"boolean"},"customerId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["displayName"]}}}}},"put":{"operationId":"put_projects","tags":["Projects"],"summary":"Replace Projects","description":"Replace Projects.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/projects.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}],"requestBody":{"required":true,"description":"Update a project. Omitted fields are preserved; customerId:null removes an unused customer association. A customer cannot change after the associated project has journal activity. Source handler: `pages/api/projects.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":200},"note":{"nullable":true,"type":"string","maxLength":1000},"isActive":{"type":"boolean"},"customerId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"]}}}}},"delete":{"operationId":"delete_projects","tags":["Projects"],"summary":"Delete Projects","description":"Delete Projects.\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: `all`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/projects.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]}},"/api/public/updates/{slug}/view":{"post":{"operationId":"post_public_updates_slug_view","tags":["Public"],"summary":"Execute Public Updates By Slug View","description":"Execute Public Updates By Slug View.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/public/updates/[slug]/view.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"slug","in":"path","required":true,"description":"Path identifier: slug","schema":{"type":"string"}}]}},"/api/quickbooks-desktop/agent-commands":{"get":{"operationId":"get_quickbooks_desktop_agent_commands","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Agent Commands","description":"Retrieve Quickbooks Desktop Agent Commands.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `commandId`, `mode`.\n\nSource handler: `pages/api/quickbooks-desktop/agent-commands.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-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":"commandId","in":"query","required":false,"description":"CommandId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CommandId. Use an identifier returned by Wesley."}},{"name":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}}]},"post":{"operationId":"post_quickbooks_desktop_agent_commands","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Agent Commands","description":"Execute Quickbooks Desktop Agent Commands.\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\nCommon query parameters: `commandId`, `mode`.\n\nSource handler: `pages/api/quickbooks-desktop/agent-commands.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,"parameters":[{"name":"commandId","in":"query","required":false,"description":"CommandId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CommandId. Use an identifier returned by Wesley."}},{"name":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}}]},"patch":{"operationId":"patch_quickbooks_desktop_agent_commands","tags":["Quickbooks Desktop"],"summary":"Update Quickbooks Desktop Agent Commands","description":"Update Quickbooks Desktop Agent Commands.\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\nCommon query parameters: `commandId`, `mode`.\n\nSource handler: `pages/api/quickbooks-desktop/agent-commands.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,"parameters":[{"name":"commandId","in":"query","required":false,"description":"CommandId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CommandId. Use an identifier returned by Wesley."}},{"name":"mode","in":"query","required":false,"description":"Mode filter or option.","schema":{"type":"string","description":"Mode filter or option."}}]}},"/api/quickbooks-desktop/cloud-copy/validate":{"post":{"operationId":"post_quickbooks_desktop_cloud_copy_validate","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Cloud Copy Validate","description":"Execute Quickbooks Desktop Cloud Copy Validate.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/quickbooks-desktop/cloud-copy/validate.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks-desktop/cloud-migrations":{"post":{"operationId":"post_quickbooks_desktop_cloud_migrations","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Cloud Migrations","description":"Execute Quickbooks Desktop Cloud Migrations.\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: `fileName`, `filePasscode`, `fileSize`, `qbbPassword`.\n\nSource handler: `pages/api/quickbooks-desktop/cloud-migrations/index.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: `fileName`, `filePasscode`, `fileSize`, `qbbPassword`.","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string","description":"FileName payload field."},"filePasscode":{"type":"string","description":"FilePasscode payload field."},"fileSize":{"type":"string","description":"FileSize payload field."},"qbbPassword":{"type":"string","description":"QbbPassword payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks-desktop/cloud-migrations/{jobId}":{"get":{"operationId":"get_quickbooks_desktop_cloud_migrations_jobid","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Cloud Migrations By JobId","description":"Retrieve Quickbooks Desktop Cloud Migrations By JobId.\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/quickbooks-desktop/cloud-migrations/[jobId].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":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}},{"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"}}]},"post":{"operationId":"post_quickbooks_desktop_cloud_migrations_jobid","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Cloud Migrations By JobId","description":"Execute Quickbooks Desktop Cloud Migrations By JobId.\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: `filePasscode`.\n\nSource handler: `pages/api/quickbooks-desktop/cloud-migrations/[jobId].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":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}},{"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: `filePasscode`.","content":{"application/json":{"schema":{"type":"object","properties":{"filePasscode":{"type":"string","description":"FilePasscode payload field."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_quickbooks_desktop_cloud_migrations_jobid","tags":["Quickbooks Desktop"],"summary":"Update Quickbooks Desktop Cloud Migrations By JobId","description":"Update Quickbooks Desktop Cloud Migrations By JobId.\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: `filePasscode`.\n\nSource handler: `pages/api/quickbooks-desktop/cloud-migrations/[jobId].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":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}},{"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: `filePasscode`.","content":{"application/json":{"schema":{"type":"object","properties":{"filePasscode":{"type":"string","description":"FilePasscode payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks-desktop/connection":{"get":{"operationId":"get_quickbooks_desktop_connection","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Connection","description":"Retrieve Quickbooks Desktop Connection.\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: `statusOnly`.\n\nSource handler: `pages/api/quickbooks-desktop/connection.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":"statusOnly","in":"query","required":false,"description":"StatusOnly filter or option.","schema":{"type":"string","description":"StatusOnly filter or option."}}]},"post":{"operationId":"post_quickbooks_desktop_connection","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Connection","description":"Execute Quickbooks Desktop Connection.\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: `mode`.\n\nCommon query parameters: `statusOnly`.\n\nSource handler: `pages/api/quickbooks-desktop/connection.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":"statusOnly","in":"query","required":false,"description":"StatusOnly filter or option.","schema":{"type":"string","description":"StatusOnly filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `mode`.","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","description":"Mode payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_quickbooks_desktop_connection","tags":["Quickbooks Desktop"],"summary":"Delete Quickbooks Desktop Connection","description":"Delete Quickbooks Desktop Connection.\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: `mode`.\n\nCommon query parameters: `statusOnly`.\n\nSource handler: `pages/api/quickbooks-desktop/connection.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":"statusOnly","in":"query","required":false,"description":"StatusOnly filter or option.","schema":{"type":"string","description":"StatusOnly filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `mode`.","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","description":"Mode payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks-desktop/data":{"get":{"operationId":"get_quickbooks_desktop_data","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Data","description":"Retrieve Quickbooks Desktop Data.\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: `dataset`, `journalEndDate`, `journalStartDate`.\n\nSource handler: `pages/api/quickbooks-desktop/data.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":"dataset","in":"query","required":false,"description":"Dataset filter or option.","schema":{"type":"string","description":"Dataset filter or option."}},{"name":"journalEndDate","in":"query","required":false,"description":"JournalEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."}},{"name":"journalStartDate","in":"query","required":false,"description":"JournalStartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalStartDate in YYYY-MM-DD format."}}]}},"/api/quickbooks-desktop/desktop-connector-config":{"get":{"operationId":"get_quickbooks_desktop_desktop_connector_config","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Desktop Connector Config","description":"Retrieve Quickbooks Desktop Desktop Connector Config.\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: `token`.\n\nSource handler: `pages/api/quickbooks-desktop/desktop-connector-config.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":"token","in":"query","required":false,"description":"Token filter or option.","schema":{"type":"string","description":"Token filter or option."}}]}},"/api/quickbooks-desktop/desktop-delete-wesley-journals":{"post":{"operationId":"post_quickbooks_desktop_desktop_delete_wesley_journals","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Desktop Delete Wesley Journals","description":"Execute Quickbooks Desktop Desktop Delete Wesley Journals.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/quickbooks-desktop/desktop-delete-wesley-journals.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks-desktop/desktop-import-jobs/{jobId}":{"get":{"operationId":"get_quickbooks_desktop_desktop_import_jobs_jobid","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Desktop Import Jobs By JobId","description":"Retrieve Quickbooks Desktop Desktop Import Jobs By JobId.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks-desktop/desktop-import-jobs/[jobId].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,"parameters":[{"name":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}}]}},"/api/quickbooks-desktop/desktop-import-journals":{"get":{"operationId":"get_quickbooks_desktop_desktop_import_journals","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Desktop Import Journals","description":"Retrieve Quickbooks Desktop Desktop Import Journals.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/quickbooks-desktop/desktop-import-journals.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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."}},"post":{"operationId":"post_quickbooks_desktop_desktop_import_journals","tags":["Quickbooks Desktop"],"summary":"Import Quickbooks Desktop Desktop Import Journals","description":"Import Quickbooks Desktop Desktop Import Journals.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks-desktop/desktop-import-journals.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks-desktop/desktop-post-journals":{"post":{"operationId":"post_quickbooks_desktop_desktop_post_journals","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Desktop Post Journals","description":"Execute Quickbooks Desktop Desktop Post Journals.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/quickbooks-desktop/desktop-post-journals.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks-desktop/desktop-post-settings":{"post":{"operationId":"post_quickbooks_desktop_desktop_post_settings","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Desktop Post Settings","description":"Execute Quickbooks Desktop Desktop Post Settings.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/quickbooks-desktop/desktop-post-settings.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks-desktop/desktop-preview":{"get":{"operationId":"get_quickbooks_desktop_desktop_preview","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Desktop Preview","description":"Retrieve Quickbooks Desktop Desktop Preview.\n\nNo user authentication is explicitly enforced in this handler.\n\nPreview endpoint used to inspect impact before committing changes.\n\nCommon query parameters: `basis`, `companyId`, `includeReports`, `journalEndDate`, `journalStartDate`, `journalTransactionTypes`, `transactionType`, `transactionTypes`.\n\nSource handler: `pages/api/quickbooks-desktop/desktop-preview.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"basis","in":"query","required":false,"description":"Basis filter or option.","schema":{"type":"string","description":"Basis filter or option."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"name":"includeReports","in":"query","required":false,"description":"IncludeReports flag.","schema":{"type":"boolean","description":"IncludeReports flag."}},{"name":"journalEndDate","in":"query","required":false,"description":"JournalEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."}},{"name":"journalStartDate","in":"query","required":false,"description":"JournalStartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalStartDate in YYYY-MM-DD format."}},{"name":"journalTransactionTypes","in":"query","required":false,"description":"JournalTransactionTypes filter or option.","schema":{"type":"string","description":"JournalTransactionTypes filter or option."}},{"name":"transactionType","in":"query","required":false,"description":"TransactionType filter or option.","schema":{"type":"string","description":"TransactionType filter or option."}},{"name":"transactionTypes","in":"query","required":false,"description":"TransactionTypes filter or option.","schema":{"type":"string","description":"TransactionTypes filter or option."}}]}},"/api/quickbooks-desktop/desktop-undo-operation":{"post":{"operationId":"post_quickbooks_desktop_desktop_undo_operation","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Desktop Undo Operation","description":"Execute Quickbooks Desktop Desktop Undo Operation.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/quickbooks-desktop/desktop-undo-operation.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks-desktop/diff":{"get":{"operationId":"get_quickbooks_desktop_diff","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Diff","description":"Retrieve Quickbooks Desktop Diff.\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: `journalEndDate`, `journalEntryIds`, `journalStartDate`, `journalTransactionTypes`, `omitMatched`, `summaryOnly`, `transactionType`, `transactionTypes`.\n\nSource handler: `pages/api/quickbooks-desktop/diff.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":"journalEndDate","in":"query","required":false,"description":"JournalEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."}},{"name":"journalEntryIds","in":"query","required":false,"description":"JournalEntryIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"JournalEntryIds. Use identifiers returned by Wesley."}},{"name":"journalStartDate","in":"query","required":false,"description":"JournalStartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalStartDate in YYYY-MM-DD format."}},{"name":"journalTransactionTypes","in":"query","required":false,"description":"JournalTransactionTypes filter or option.","schema":{"type":"string","description":"JournalTransactionTypes filter or option."}},{"name":"omitMatched","in":"query","required":false,"description":"OmitMatched filter or option.","schema":{"type":"string","description":"OmitMatched filter or option."}},{"name":"summaryOnly","in":"query","required":false,"description":"SummaryOnly filter or option.","schema":{"type":"string","description":"SummaryOnly filter or option."}},{"name":"transactionType","in":"query","required":false,"description":"TransactionType filter or option.","schema":{"type":"string","description":"TransactionType filter or option."}},{"name":"transactionTypes","in":"query","required":false,"description":"TransactionTypes filter or option.","schema":{"type":"string","description":"TransactionTypes filter or option."}}]}},"/api/quickbooks-desktop/file-setup":{"post":{"operationId":"post_quickbooks_desktop_file_setup","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop File Setup","description":"Execute Quickbooks Desktop File Setup.\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: `iifPathname`, `journalPathname`.\n\nSource handler: `pages/api/quickbooks-desktop/file-setup.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: `iifPathname`, `journalPathname`.","content":{"application/json":{"schema":{"type":"object","properties":{"iifPathname":{"type":"string","description":"IifPathname payload field."},"journalPathname":{"type":"string","description":"JournalPathname payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks-desktop/finalize-migration-rules":{"post":{"operationId":"post_quickbooks_desktop_finalize_migration_rules","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Finalize Migration Rules","description":"Execute Quickbooks Desktop Finalize Migration Rules.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/quickbooks-desktop/finalize-migration-rules.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks-desktop/import-banking":{"post":{"operationId":"post_quickbooks_desktop_import_banking","tags":["Quickbooks Desktop"],"summary":"Import Quickbooks Desktop Import Banking","description":"Import Quickbooks Desktop Import Banking.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks-desktop/import-banking.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks-desktop/import-items":{"post":{"operationId":"post_quickbooks_desktop_import_items","tags":["Quickbooks Desktop"],"summary":"Import Quickbooks Desktop Import Items","description":"Import Quickbooks Desktop Import Items.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks-desktop/import-items.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/quickbooks-desktop/post-journals":{"post":{"operationId":"post_quickbooks_desktop_post_journals","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Post Journals","description":"Execute Quickbooks Desktop Post Journals.\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: `deletionTargets`, `forceCreateJournalEntryIds`, `journalEndDate`, `journalEntryIds`, `journalEntrySelection`.\n\nSource handler: `pages/api/quickbooks-desktop/post-journals.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: `deletionTargets`, `forceCreateJournalEntryIds`, `journalEndDate`, `journalEntryIds`, `journalEntrySelection`.","content":{"application/json":{"schema":{"type":"object","properties":{"deletionTargets":{"type":"string","description":"DeletionTargets payload field."},"forceCreateJournalEntryIds":{"type":"array","items":{"type":"string"},"description":"ForceCreateJournalEntryIds. Use identifiers returned by Wesley."},"journalEndDate":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."},"journalEntryIds":{"type":"array","items":{"type":"string"},"description":"JournalEntryIds. Use identifiers returned by Wesley."},"journalEntrySelection":{"type":"string","description":"JournalEntrySelection payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks-desktop/qwc":{"get":{"operationId":"get_quickbooks_desktop_qwc","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Qwc","description":"Retrieve Quickbooks Desktop Qwc.\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/quickbooks-desktop/qwc.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/quickbooks-desktop/sync":{"post":{"operationId":"post_quickbooks_desktop_sync","tags":["Quickbooks Desktop"],"summary":"Sync Quickbooks Desktop Sync","description":"Sync Quickbooks Desktop Sync.\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: `cloudMigrationJobId`, `companyFileName`, `companyId`, `journalEndDate`, `journalStartDate`, `journalTransactionTypes`, `journal_end_date`, `journal_start_date`, `relinkCurrentFile`, `scope`, `syncScope`, `transactionType`, ....\n\nSource handler: `pages/api/quickbooks-desktop/sync.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: `cloudMigrationJobId`, `companyFileName`, `companyId`, `journalEndDate`, `journalStartDate`, `journalTransactionTypes`, `journal_end_date`, `journal_start_date`, `relinkCurrentFile`, `scope`, `syncScope`, `transactionType`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"cloudMigrationJobId":{"type":"string","description":"CloudMigrationJobId. Use an identifier returned by Wesley."},"companyFileName":{"type":"string","description":"CompanyFileName payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"journalEndDate":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."},"journalStartDate":{"type":"string","format":"date","description":"JournalStartDate in YYYY-MM-DD format."},"journalTransactionTypes":{"type":"string","description":"JournalTransactionTypes payload field."},"journal_end_date":{"type":"string","format":"date","description":"Journal End Date in YYYY-MM-DD format."},"journal_start_date":{"type":"string","format":"date","description":"Journal Start Date in YYYY-MM-DD format."},"relinkCurrentFile":{"type":"string","description":"RelinkCurrentFile payload field."},"scope":{"type":"string","description":"Scope payload field."},"syncScope":{"type":"string","description":"SyncScope payload field."},"transactionType":{"type":"string","description":"TransactionType payload field."},"transactionTypes":{"type":"string","description":"TransactionTypes payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks-desktop/vendor-file-exports":{"post":{"operationId":"post_quickbooks_desktop_vendor_file_exports","tags":["Quickbooks Desktop"],"summary":"Create vendor files from a QuickBooks Desktop company copy","description":"Separate from migration. Upload the .qbb/.qbw to the returned signed uploadUrl using uploadHeaders, then POST /api/quickbooks-desktop/vendor-file-exports/{jobId} for this company. The Windows worker exports all vendors including tax identifiers and addresses, then saves an Excel workbook in the client's private Shared Files. Does not import a ledger or update vendors.\n\nExecute Quickbooks Desktop Vendor File Exports.\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/quickbooks-desktop/vendor-file-exports/index.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":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/quickbooks-desktop/vendor-file-exports/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"fileName":{"type":"string","minLength":1,"maxLength":255,"pattern":"\\.(qbb|qbw)$"},"fileSize":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5368709120},"filePasscode":{"default":"","type":"string","maxLength":512}},"required":["fileName","fileSize"],"additionalProperties":false}}}}}},"/api/quickbooks-desktop/vendor-file-exports/{jobId}":{"get":{"operationId":"get_quickbooks_desktop_vendor_file_exports_jobid","tags":["Quickbooks Desktop"],"summary":"Read vendor file export status and Shared Files document IDs","description":"Retrieve Quickbooks Desktop Vendor File Exports By JobId.\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/quickbooks-desktop/vendor-file-exports/[jobId].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":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}},{"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"}}]},"post":{"operationId":"post_quickbooks_desktop_vendor_file_exports_jobid","tags":["Quickbooks Desktop"],"summary":"Queue or retry the vendor file export after the secure upload","description":"Execute Quickbooks Desktop Vendor File Exports By JobId.\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/quickbooks-desktop/vendor-file-exports/[jobId].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":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}},{"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"}}]},"patch":{"operationId":"patch_quickbooks_desktop_vendor_file_exports_jobid","tags":["Quickbooks Desktop"],"summary":"Correct the company-file passcode before retrying export","description":"Update Quickbooks Desktop Vendor File Exports By JobId.\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/quickbooks-desktop/vendor-file-exports/[jobId].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":"jobId","in":"path","required":true,"description":"Path identifier: jobId","schema":{"type":"string"}},{"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":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/quickbooks-desktop/vendor-file-exports/[jobId].ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"filePasscode":{"type":"string","maxLength":512}},"required":["filePasscode"],"additionalProperties":false}}}}}},"/api/quickbooks-desktop/web-connector":{"get":{"operationId":"get_quickbooks_desktop_web_connector","tags":["Quickbooks Desktop"],"summary":"Retrieve Quickbooks Desktop Web Connector","description":"Retrieve Quickbooks Desktop Web Connector.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/quickbooks-desktop/web-connector.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_quickbooks_desktop_web_connector","tags":["Quickbooks Desktop"],"summary":"Execute Quickbooks Desktop Web Connector","description":"Execute Quickbooks Desktop Web Connector.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/quickbooks-desktop/web-connector.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks-payroll/callback":{"get":{"operationId":"get_quickbooks_payroll_callback","tags":["Quickbooks Payroll"],"summary":"Retrieve Quickbooks Payroll Callback","description":"Retrieve Quickbooks Payroll Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `code`, `error`, `error_description`, `realmId`, `state`.\n\nSource handler: `pages/api/quickbooks-payroll/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"error_description","in":"query","required":false,"description":"Error Description filter or option.","schema":{"type":"string","description":"Error Description filter or option."}},{"name":"realmId","in":"query","required":false,"description":"RealmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RealmId. Use an identifier returned by Wesley."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/quickbooks-payroll/connect":{"get":{"operationId":"get_quickbooks_payroll_connect","tags":["Quickbooks Payroll"],"summary":"Retrieve Quickbooks Payroll Connect","description":"Retrieve Quickbooks Payroll Connect.\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: `clientId`, `orgId`, `returnTo`.\n\nSource handler: `pages/api/quickbooks-payroll/connect.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":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"orgId","in":"query","required":false,"description":"OrgId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"OrgId. Use an identifier returned by Wesley."}},{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}}]}},"/api/quickbooks-payroll/connection":{"get":{"operationId":"get_quickbooks_payroll_connection","tags":["Quickbooks Payroll"],"summary":"Retrieve Quickbooks Payroll Connection","description":"Retrieve Quickbooks Payroll Connection.\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: `realmId`.\n\nSource handler: `pages/api/quickbooks-payroll/connection.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":"realmId","in":"query","required":false,"description":"RealmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RealmId. Use an identifier returned by Wesley."}}]},"delete":{"operationId":"delete_quickbooks_payroll_connection","tags":["Quickbooks Payroll"],"summary":"Delete Quickbooks Payroll Connection","description":"Delete Quickbooks Payroll Connection.\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: `realmId`.\n\nSource handler: `pages/api/quickbooks-payroll/connection.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":"realmId","in":"query","required":false,"description":"RealmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RealmId. Use an identifier returned by Wesley."}}]}},"/api/quickbooks-payroll/sync":{"post":{"operationId":"post_quickbooks_payroll_sync","tags":["Quickbooks Payroll"],"summary":"Sync Quickbooks Payroll Sync","description":"Sync Quickbooks Payroll Sync.\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: `endDate`, `startDate`.\n\nSource handler: `pages/api/quickbooks-payroll/sync.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: `endDate`, `startDate`.","content":{"application/json":{"schema":{"type":"object","properties":{"endDate":{"type":"string","format":"date","description":"EndDate in YYYY-MM-DD format."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/quickbooks/accountant-import/operator-alert":{"post":{"operationId":"post_quickbooks_accountant_import_operator_alert","tags":["Quickbooks"],"summary":"Import Quickbooks Accountant Import Operator Alert","description":"Import Quickbooks Accountant Import Operator Alert.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/accountant-import/operator-alert.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/quickbooks/accountant-invitation":{"get":{"operationId":"get_quickbooks_accountant_invitation","tags":["Quickbooks"],"summary":"Get Quickbooks Accountant Invitation","description":"Get Quickbooks Accountant Invitation.\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/quickbooks/accountant-invitation.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"}}]},"post":{"operationId":"post_quickbooks_accountant_invitation","tags":["Quickbooks"],"summary":"Execute Quickbooks Accountant Invitation","description":"Execute Quickbooks Accountant Invitation.\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`, `bankDataOnly`, `choice`, `firmName`, `invitationType`, `journalStartDate`, `queueAfterBooks`.\n\nSource handler: `pages/api/quickbooks/accountant-invitation.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`, `bankDataOnly`, `choice`, `firmName`, `invitationType`, `journalStartDate`, `queueAfterBooks`.","content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","description":"AccountId. Use an identifier returned by Wesley."},"bankDataOnly":{"type":"string","description":"BankDataOnly payload field."},"choice":{"type":"string","description":"Choice payload field."},"firmName":{"type":"string","description":"FirmName payload field."},"invitationType":{"type":"string","description":"InvitationType payload field."},"journalStartDate":{"type":"string","format":"date","description":"JournalStartDate in YYYY-MM-DD format."},"queueAfterBooks":{"type":"string","description":"QueueAfterBooks payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks/agent-import-plans":{"post":{"operationId":"post_quickbooks_agent_import_plans","tags":["Quickbooks"],"summary":"Import Quickbooks Agent Import Plans","description":"Import Quickbooks Agent Import Plans.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/agent-import-plans/index.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/quickbooks/agent-import-plans/{planId}":{"get":{"operationId":"get_quickbooks_agent_import_plans_planid","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Agent Import Plans By PlanId","description":"Retrieve Quickbooks Agent Import Plans By PlanId.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/agent-import-plans/[planId].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":"planId","in":"path","required":true,"description":"Path identifier: planId","schema":{"type":"string"}},{"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"}}]},"patch":{"operationId":"patch_quickbooks_agent_import_plans_planid","tags":["Quickbooks"],"summary":"Update Quickbooks Agent Import Plans By PlanId","description":"Update Quickbooks Agent Import Plans By PlanId.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/agent-import-plans/[planId].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":"planId","in":"path","required":true,"description":"Path identifier: planId","schema":{"type":"string"}},{"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/quickbooks/agent-import-plans/{planId}/execute":{"post":{"operationId":"post_quickbooks_agent_import_plans_planid_execute","tags":["Quickbooks"],"summary":"Import Quickbooks Agent Import Plans By PlanId Execute","description":"Import Quickbooks Agent Import Plans By PlanId Execute.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/agent-import-plans/[planId]/execute.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":"planId","in":"path","required":true,"description":"Path identifier: planId","schema":{"type":"string"}},{"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/quickbooks/agent-import-plans/active":{"get":{"operationId":"get_quickbooks_agent_import_plans_active","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Agent Import Plans Active","description":"Retrieve Quickbooks Agent Import Plans Active.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/agent-import-plans/active.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/quickbooks/agent-sync-plans":{"post":{"operationId":"post_quickbooks_agent_sync_plans","tags":["Quickbooks"],"summary":"Sync Quickbooks Agent Sync Plans","description":"Sync Quickbooks Agent Sync Plans.\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/quickbooks/agent-sync-plans/index.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/quickbooks/agent-sync-plans/{planId}":{"get":{"operationId":"get_quickbooks_agent_sync_plans_planid","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Agent Sync Plans By PlanId","description":"Retrieve Quickbooks Agent Sync Plans By PlanId.\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/quickbooks/agent-sync-plans/[planId].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":"planId","in":"path","required":true,"description":"Path identifier: planId","schema":{"type":"string"}},{"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/quickbooks/agent-sync-plans/{planId}/execute":{"post":{"operationId":"post_quickbooks_agent_sync_plans_planid_execute","tags":["Quickbooks"],"summary":"Sync Quickbooks Agent Sync Plans By PlanId Execute","description":"Sync Quickbooks Agent Sync Plans By PlanId Execute.\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/quickbooks/agent-sync-plans/[planId]/execute.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":"planId","in":"path","required":true,"description":"Path identifier: planId","schema":{"type":"string"}},{"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/quickbooks/agent-sync-plans/{planId}/recover":{"post":{"operationId":"post_quickbooks_agent_sync_plans_planid_recover","tags":["Quickbooks"],"summary":"Sync Quickbooks Agent Sync Plans By PlanId Recover","description":"Sync Quickbooks Agent Sync Plans By PlanId Recover.\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/quickbooks/agent-sync-plans/[planId]/recover.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":"planId","in":"path","required":true,"description":"Path identifier: planId","schema":{"type":"string"}},{"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/quickbooks/bulk-imports":{"post":{"operationId":"post_quickbooks_bulk_imports","tags":["Quickbooks"],"summary":"Import Quickbooks Bulk Imports","description":"Import Quickbooks Bulk Imports.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nBulk operation that can affect multiple records in one request.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nJSON body keys used by this method: `forceNew`.\n\nSource handler: `pages/api/quickbooks/bulk-imports/index.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `forceNew`.","content":{"application/json":{"schema":{"type":"object","properties":{"forceNew":{"type":"boolean","description":"ForceNew flag."}},"additionalProperties":true}}}}}},"/api/quickbooks/bulk-imports/{bulkImportId}":{"get":{"operationId":"get_quickbooks_bulk_imports_bulkimportid","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Bulk Imports By BulkImportId","description":"Retrieve Quickbooks Bulk Imports By BulkImportId.\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\nBulk operation that can affect multiple records in one request.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/bulk-imports/[bulkImportId].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,"parameters":[{"name":"bulkImportId","in":"path","required":true,"description":"Path identifier: bulkImportId","schema":{"type":"string"}}]},"post":{"operationId":"post_quickbooks_bulk_imports_bulkimportid","tags":["Quickbooks"],"summary":"Import Quickbooks Bulk Imports By BulkImportId","description":"Import Quickbooks Bulk Imports By BulkImportId.\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\nBulk operation that can affect multiple records in one request.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nJSON body keys used by this method: `aiMode`, `ai_mode`, `journalEndDate`, `mappings`.\n\nSource handler: `pages/api/quickbooks/bulk-imports/[bulkImportId].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,"parameters":[{"name":"bulkImportId","in":"path","required":true,"description":"Path identifier: bulkImportId","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `aiMode`, `ai_mode`, `journalEndDate`, `mappings`.","content":{"application/json":{"schema":{"type":"object","properties":{"aiMode":{"type":"string","description":"AiMode payload field."},"ai_mode":{"type":"string","description":"Ai Mode payload field."},"journalEndDate":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."},"mappings":{"type":"string","description":"Mappings payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks/bulk-imports/{bulkImportId}/connect":{"get":{"operationId":"get_quickbooks_bulk_imports_bulkimportid_connect","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Bulk Imports By BulkImportId Connect","description":"Retrieve Quickbooks Bulk Imports By BulkImportId Connect.\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\nBulk operation that can affect multiple records in one request.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/bulk-imports/[bulkImportId]/connect.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,"parameters":[{"name":"bulkImportId","in":"path","required":true,"description":"Path identifier: bulkImportId","schema":{"type":"string"}}]}},"/api/quickbooks/bulk-imports/{bulkImportId}/dispatch":{"post":{"operationId":"post_quickbooks_bulk_imports_bulkimportid_dispatch","tags":["Quickbooks"],"summary":"Import Quickbooks Bulk Imports By BulkImportId Dispatch","description":"Import Quickbooks Bulk Imports By BulkImportId Dispatch.\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\nBulk operation that can affect multiple records in one request.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/bulk-imports/[bulkImportId]/dispatch.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,"parameters":[{"name":"bulkImportId","in":"path","required":true,"description":"Path identifier: bulkImportId","schema":{"type":"string"}}]}},"/api/quickbooks/bulk-imports/{bulkImportId}/worker-step":{"post":{"operationId":"post_quickbooks_bulk_imports_bulkimportid_worker_step","tags":["Quickbooks"],"summary":"Import Quickbooks Bulk Imports By BulkImportId Worker Step","description":"Import Quickbooks Bulk Imports By BulkImportId Worker Step.\n\nNo user authentication is explicitly enforced in this handler.\n\nBulk operation that can affect multiple records in one request.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nSource handler: `pages/api/quickbooks/bulk-imports/[bulkImportId]/worker-step.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"bulkImportId","in":"path","required":true,"description":"Path identifier: bulkImportId","schema":{"type":"string"}}]}},"/api/quickbooks/callback":{"get":{"operationId":"get_quickbooks_callback","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Callback","description":"Retrieve Quickbooks Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `code`, `error`, `error_description`, `realmId`, `state`.\n\nSource handler: `pages/api/quickbooks/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"error_description","in":"query","required":false,"description":"Error Description filter or option.","schema":{"type":"string","description":"Error Description filter or option."}},{"name":"realmId","in":"query","required":false,"description":"RealmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RealmId. Use an identifier returned by Wesley."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/quickbooks/coa-review-suggestions":{"get":{"operationId":"get_quickbooks_coa_review_suggestions","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Coa Review Suggestions","description":"Retrieve Quickbooks Coa Review 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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/quickbooks/coa-review-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."},"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"}}]}},"/api/quickbooks/connect":{"get":{"operationId":"get_quickbooks_connect","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Connect","description":"Retrieve Quickbooks Connect.\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: `autoImport`, `clientId`, `orgId`, `returnTo`.\n\nSource handler: `pages/api/quickbooks/connect.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":"autoImport","in":"query","required":false,"description":"AutoImport filter or option.","schema":{"type":"string","description":"AutoImport filter or option."}},{"name":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"orgId","in":"query","required":false,"description":"OrgId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"OrgId. Use an identifier returned by Wesley."}},{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}}]}},"/api/quickbooks/connection":{"get":{"operationId":"get_quickbooks_connection","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Connection","description":"Retrieve Quickbooks Connection.\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: `realmId`.\n\nSource handler: `pages/api/quickbooks/connection.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":"realmId","in":"query","required":false,"description":"RealmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RealmId. Use an identifier returned by Wesley."}}]},"delete":{"operationId":"delete_quickbooks_connection","tags":["Quickbooks"],"summary":"Delete Quickbooks Connection","description":"Delete Quickbooks Connection.\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: `realmId`.\n\nSource handler: `pages/api/quickbooks/connection.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":"realmId","in":"query","required":false,"description":"RealmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RealmId. Use an identifier returned by Wesley."}}]}},"/api/quickbooks/data":{"get":{"operationId":"get_quickbooks_data","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Data","description":"Retrieve Quickbooks Data.\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: `apEndDate`, `arEndDate`, `cursor`, `dataset`, `journalEndDate`, `journalStartDate`, `pagination`.\n\nSource handler: `pages/api/quickbooks/data.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":"apEndDate","in":"query","required":false,"description":"ApEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"ApEndDate in YYYY-MM-DD format."}},{"name":"arEndDate","in":"query","required":false,"description":"ArEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"ArEndDate in YYYY-MM-DD format."}},{"name":"cursor","in":"query","required":false,"description":"Cursor filter or option.","schema":{"type":"string","description":"Cursor filter or option."}},{"name":"dataset","in":"query","required":false,"description":"Dataset filter or option.","schema":{"type":"string","description":"Dataset filter or option."}},{"name":"journalEndDate","in":"query","required":false,"description":"JournalEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."}},{"name":"journalStartDate","in":"query","required":false,"description":"JournalStartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalStartDate in YYYY-MM-DD format."}},{"name":"pagination","in":"query","required":false,"description":"Pagination filter or option.","schema":{"type":"string","description":"Pagination filter or option."}}]}},"/api/quickbooks/delete-journals":{"post":{"operationId":"post_quickbooks_delete_journals","tags":["Quickbooks"],"summary":"Execute Quickbooks Delete Journals","description":"Execute Quickbooks Delete Journals.\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/quickbooks/delete-journals.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/quickbooks/diff":{"get":{"operationId":"get_quickbooks_diff","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Diff","description":"Retrieve Quickbooks Diff.\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: `apEndDate`, `arEndDate`, `dataset`, `journalEndDate`, `journalEntryIds`, `journalStartDate`.\n\nSource handler: `pages/api/quickbooks/diff.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":"apEndDate","in":"query","required":false,"description":"ApEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"ApEndDate in YYYY-MM-DD format."}},{"name":"arEndDate","in":"query","required":false,"description":"ArEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"ArEndDate in YYYY-MM-DD format."}},{"name":"dataset","in":"query","required":false,"description":"Dataset filter or option.","schema":{"type":"string","description":"Dataset filter or option."}},{"name":"journalEndDate","in":"query","required":false,"description":"JournalEndDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalEndDate in YYYY-MM-DD format."}},{"name":"journalEntryIds","in":"query","required":false,"description":"JournalEntryIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"JournalEntryIds. Use identifiers returned by Wesley."}},{"name":"journalStartDate","in":"query","required":false,"description":"JournalStartDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"JournalStartDate in YYYY-MM-DD format."}}]}},"/api/quickbooks/journal-coverage":{"get":{"operationId":"get_quickbooks_journal_coverage","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Journal Coverage","description":"Retrieve Quickbooks Journal Coverage.\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/quickbooks/journal-coverage.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/quickbooks/post-journals":{"post":{"operationId":"post_quickbooks_post_journals","tags":["Quickbooks"],"summary":"Execute Quickbooks Post Journals","description":"Execute Quickbooks Post Journals.\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/quickbooks/post-journals.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/quickbooks/postback-operations/latest":{"get":{"operationId":"get_quickbooks_postback_operations_latest","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Postback Operations Latest","description":"Retrieve Quickbooks Postback Operations Latest.\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/quickbooks/postback-operations/latest.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/quickbooks/postback-operations/undo":{"post":{"operationId":"post_quickbooks_postback_operations_undo","tags":["Quickbooks"],"summary":"Execute Quickbooks Postback Operations Undo","description":"Execute Quickbooks Postback Operations Undo.\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: `operationId`.\n\nSource handler: `pages/api/quickbooks/postback-operations/undo.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: `operationId`.","content":{"application/json":{"schema":{"type":"object","properties":{"operationId":{"type":"string","description":"OperationId. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/quickbooks/preview-summary":{"get":{"operationId":"get_quickbooks_preview_summary","tags":["Quickbooks"],"summary":"Get Quickbooks Preview Summary","description":"Get Quickbooks Preview 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\nPreview endpoint used to inspect impact before committing changes.\n\nCommon query parameters: `cursor`, `endDate`, `pagination`, `purchaseIds`, `realmId`, `scope`.\n\nSource handler: `pages/api/quickbooks/preview-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":"cursor","in":"query","required":false,"description":"Cursor filter or option.","schema":{"type":"string","description":"Cursor 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":"pagination","in":"query","required":false,"description":"Pagination filter or option.","schema":{"type":"string","description":"Pagination filter or option."}},{"name":"purchaseIds","in":"query","required":false,"description":"PurchaseIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"PurchaseIds. Use identifiers returned by Wesley."}},{"name":"realmId","in":"query","required":false,"description":"RealmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RealmId. Use an identifier returned by Wesley."}},{"name":"scope","in":"query","required":false,"description":"Scope filter or option.","schema":{"type":"string","description":"Scope filter or option."}}]}},"/api/quickbooks/reclassification-postbacks":{"get":{"operationId":"get_quickbooks_reclassification_postbacks","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Reclassification Postbacks","description":"Retrieve Quickbooks Reclassification Postbacks.\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\nSource handler: `pages/api/quickbooks/reclassification-postbacks.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"}}]}},"/api/quickbooks/records":{"get":{"operationId":"get_quickbooks_records","tags":["Quickbooks"],"summary":"Retrieve Quickbooks Records","description":"Retrieve Quickbooks Records.\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: `changedSince`, `entity`, `id`, `ids`, `includeInactive`, `limit`.\n\nSource handler: `pages/api/quickbooks/records.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":"changedSince","in":"query","required":false,"description":"ChangedSince filter or option.","schema":{"type":"string","description":"ChangedSince filter or option."}},{"name":"entity","in":"query","required":false,"description":"Entity filter or option.","schema":{"type":"string","description":"Entity filter or option."}},{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"ids","in":"query","required":false,"description":"Ids filter or option.","schema":{"type":"string","description":"Ids filter or option."}},{"name":"includeInactive","in":"query","required":false,"description":"IncludeInactive flag.","schema":{"type":"boolean","description":"IncludeInactive flag."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]}},"/api/quickbooks/reports/ar-aging-summary":{"get":{"operationId":"get_quickbooks_reports_ar_aging_summary","tags":["Quickbooks"],"summary":"Get Quickbooks Reports Ar Aging Summary","description":"Get Quickbooks Reports Ar Aging 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: `as_of`, `as_of_date`, `report_date`.\n\nSource handler: `pages/api/quickbooks/reports/ar-aging-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":"as_of","in":"query","required":false,"description":"As Of filter or option.","schema":{"type":"string","description":"As Of filter or option."}},{"name":"as_of_date","in":"query","required":false,"description":"As Of Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"As Of Date in YYYY-MM-DD format."}},{"name":"report_date","in":"query","required":false,"description":"Report Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Report Date in YYYY-MM-DD format."}}]}},"/api/quickbooks/sync-coa":{"post":{"operationId":"post_quickbooks_sync_coa","tags":["Quickbooks"],"summary":"Sync Quickbooks Sync Coa","description":"Sync Quickbooks Sync Coa.\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: `targets`.\n\nSource handler: `pages/api/quickbooks/sync-coa.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: `targets`.","content":{"application/json":{"schema":{"type":"object","properties":{"targets":{"type":"string","description":"Targets payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks/sync-payees":{"post":{"operationId":"post_quickbooks_sync_payees","tags":["Quickbooks"],"summary":"Sync Quickbooks Sync Payees","description":"Sync Quickbooks Sync Payees.\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: `targets`.\n\nSource handler: `pages/api/quickbooks/sync-payees.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: `targets`.","content":{"application/json":{"schema":{"type":"object","properties":{"targets":{"type":"string","description":"Targets payload field."}},"additionalProperties":true}}}}}},"/api/quickbooks/tracking-preferences":{"post":{"operationId":"post_quickbooks_tracking_preferences","tags":["Quickbooks"],"summary":"Execute Quickbooks Tracking Preferences","description":"Execute Quickbooks Tracking Preferences.\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/quickbooks/tracking-preferences.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/quickbooks/webhook":{"post":{"operationId":"post_quickbooks_webhook","tags":["Quickbooks"],"summary":"Execute Quickbooks Webhook","description":"Execute Quickbooks Webhook.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/quickbooks/webhook.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/receipt-integrations/connection":{"get":{"operationId":"get_receipt_integrations_connection","tags":["Receipt Integrations"],"summary":"Retrieve Receipt Integrations Connection","description":"Retrieve Receipt Integrations Connection.\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: `provider`.\n\nSource handler: `pages/api/receipt-integrations/connection.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":"provider","in":"query","required":false,"description":"Provider filter or option.","schema":{"type":"string","description":"Provider filter or option."}}]},"delete":{"operationId":"delete_receipt_integrations_connection","tags":["Receipt Integrations"],"summary":"Delete Receipt Integrations Connection","description":"Delete Receipt Integrations Connection.\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: `provider`.\n\nSource handler: `pages/api/receipt-integrations/connection.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":"provider","in":"query","required":false,"description":"Provider filter or option.","schema":{"type":"string","description":"Provider filter or option."}}]}},"/api/receipt-integrations/shoeboxed/accounts":{"get":{"operationId":"get_receipt_integrations_shoeboxed_accounts","tags":["Receipt Integrations"],"summary":"Get Receipt Integrations Shoeboxed Accounts","description":"Get Receipt Integrations Shoeboxed 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\nSource handler: `pages/api/receipt-integrations/shoeboxed/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"}}]},"post":{"operationId":"post_receipt_integrations_shoeboxed_accounts","tags":["Receipt Integrations"],"summary":"Execute Receipt Integrations Shoeboxed Accounts","description":"Execute Receipt Integrations Shoeboxed 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\nSource handler: `pages/api/receipt-integrations/shoeboxed/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"}}]}},"/api/receipt-integrations/shoeboxed/authorize":{"get":{"operationId":"get_receipt_integrations_shoeboxed_authorize","tags":["Receipt Integrations"],"summary":"Retrieve Receipt Integrations Shoeboxed Authorize","description":"Retrieve Receipt Integrations Shoeboxed Authorize.\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\nCommon query parameters: `state`.\n\nSource handler: `pages/api/receipt-integrations/shoeboxed/authorize.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,"parameters":[{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/receipt-integrations/shoeboxed/callback":{"get":{"operationId":"get_receipt_integrations_shoeboxed_callback","tags":["Receipt Integrations"],"summary":"Retrieve Receipt Integrations Shoeboxed Callback","description":"Retrieve Receipt Integrations Shoeboxed Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `code`, `error`, `state`.\n\nSource handler: `pages/api/receipt-integrations/shoeboxed/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/receipt-integrations/shoeboxed/connect":{"post":{"operationId":"post_receipt_integrations_shoeboxed_connect","tags":["Receipt Integrations"],"summary":"Execute Receipt Integrations Shoeboxed Connect","description":"Execute Receipt Integrations Shoeboxed Connect.\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: `clientId`, `orgId`, `returnTo`.\n\nSource handler: `pages/api/receipt-integrations/shoeboxed/connect.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":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"orgId","in":"query","required":false,"description":"OrgId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"OrgId. Use an identifier returned by Wesley."}},{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}}]}},"/api/receipt-integrations/shoeboxed/sync":{"post":{"operationId":"post_receipt_integrations_shoeboxed_sync","tags":["Receipt Integrations"],"summary":"Sync Receipt Integrations Shoeboxed Sync","description":"Sync Receipt Integrations Shoeboxed Sync.\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/receipt-integrations/shoeboxed/sync.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/receipt-integrations/shoeboxed/webhook":{"post":{"operationId":"post_receipt_integrations_shoeboxed_webhook","tags":["Receipt Integrations"],"summary":"Execute Receipt Integrations Shoeboxed Webhook","description":"Execute Receipt Integrations Shoeboxed Webhook.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/receipt-integrations/shoeboxed/webhook.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/receipt-integrations/spark-receipt/connect":{"post":{"operationId":"post_receipt_integrations_spark_receipt_connect","tags":["Receipt Integrations"],"summary":"Execute Receipt Integrations Spark Receipt Connect","description":"Execute Receipt Integrations Spark Receipt Connect.\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/receipt-integrations/spark-receipt/connect.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/receipt-integrations/spark-receipt/webhook":{"post":{"operationId":"post_receipt_integrations_spark_receipt_webhook","tags":["Receipt Integrations"],"summary":"Execute Receipt Integrations Spark Receipt Webhook","description":"Execute Receipt Integrations Spark Receipt Webhook.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nCommon query parameters: `token`.\n\nSource handler: `pages/api/receipt-integrations/spark-receipt/webhook.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"token","in":"query","required":false,"description":"Token filter or option.","schema":{"type":"string","description":"Token filter or option."}}]}},"/api/reconciliations":{"get":{"operationId":"get_reconciliations","tags":["Reconciliations"],"summary":"Retrieve Reconciliations","description":"Retrieve Reconciliations.\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\nSource handler: `pages/api/reconciliations/index.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"}}]},"post":{"operationId":"post_reconciliations","tags":["Reconciliations"],"summary":"Execute Reconciliations","description":"Execute Reconciliations.\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/reconciliations/index.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":true,"description":"JSON payload generated from exported Zod schema `createReconciliationRequestSchema` used by `pages/api/reconciliations/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accountIds":{"minItems":1,"maxItems":25,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"displayName":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":200},"statementStartDate":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"statementEndingDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"statementBeginningBalance":{"type":"number"},"statementEndingBalance":{"type":"number"},"includeTransactionsAfterStatementEndingDate":{"type":"boolean"},"clearedTransactionIds":{"type":"array","items":{"type":"string"}},"selectAllCandidateIds":{"type":"boolean"},"excludedCandidateIds":{"type":"array","items":{"type":"string"}},"requireReady":{"type":"boolean"},"expectedReadinessSourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedStatementDocumentId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["companyId","statementEndingDate","statementBeginningBalance","statementEndingBalance"],"additionalProperties":false}}}}}},"/api/reconciliations/{id}":{"get":{"operationId":"get_reconciliations_id","tags":["Reconciliations"],"summary":"Retrieve Reconciliations By Id","description":"Retrieve Reconciliations By Id.\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/reconciliations/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"patch":{"operationId":"patch_reconciliations_id","tags":["Reconciliations"],"summary":"Update Reconciliations By Id","description":"Update Reconciliations By Id.\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/reconciliations/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":true,"description":"Update a saved reconciliation report. Worksheet fields rebuild balances and selected journal lines; metadata fields update names, dates, export settings, and notes. Resaving a QuickBooks catch-up worksheet or its dates makes its period user-managed while preserving migration details. Source handler: `pages/api/reconciliations/[id].ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accountIds":{"minItems":1,"maxItems":25,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"displayName":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":200},"exportFileName":{"nullable":true,"type":"string","maxLength":240},"statementStartDate":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"statementEndingDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"statementBeginningBalance":{"type":"number"},"statementEndingBalance":{"type":"number"},"includeTransactionsAfterStatementEndingDate":{"type":"boolean"},"clearedTransactionIds":{"type":"array","items":{"type":"string"}},"selectAllCandidateIds":{"type":"boolean"},"excludedCandidateIds":{"type":"array","items":{"type":"string"}},"notes":{"maxItems":80,"type":"array","items":{"type":"string","maxLength":5000}},"expectedUpdatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"additionalProperties":false}}}}},"delete":{"operationId":"delete_reconciliations_id","tags":["Reconciliations"],"summary":"Delete Reconciliations By Id","description":"Delete Reconciliations By Id.\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/reconciliations/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/reconciliations/{id}/attachments":{"get":{"operationId":"get_reconciliations_id_attachments","tags":["Reconciliations"],"summary":"List PDFs saved with a reconciliation","description":"Retrieve Reconciliations By Id Attachments.\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\nSource handler: `pages/api/reconciliations/[id]/attachments.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"post":{"operationId":"post_reconciliations_id_attachments","tags":["Reconciliations"],"summary":"Save PDF attachments without importing transactions","description":"Execute Reconciliations By Id Attachments.\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/reconciliations/[id]/attachments.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/reconciliations/[id]/attachments.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"files":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"blobPathname":{"type":"string","minLength":1},"originalName":{"type":"string","minLength":1,"maxLength":255},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["blobPathname","originalName"],"additionalProperties":false}}},"required":["companyId","files"],"additionalProperties":false}}}}},"delete":{"operationId":"delete_reconciliations_id_attachments","tags":["Reconciliations"],"summary":"Detach a PDF while keeping the original in Shared Files","description":"Delete Reconciliations By Id Attachments.\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/reconciliations/[id]/attachments.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/reconciliations/[id]/attachments.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"documentId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["companyId","documentId"],"additionalProperties":false}}}}}},"/api/reconciliations/candidates":{"get":{"operationId":"get_reconciliations_candidates","tags":["Reconciliations"],"summary":"Retrieve Reconciliations Candidates","description":"Retrieve Reconciliations Candidates.\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`, `accountIds`, `account_id`, `account_ids`, `balanceAccountId`, `cursor`, `endDate`, `end_date`, `excludeReconciliationId`, `includeAfterEndDate`, `includeFeedDetails`, `includeZeroAmount`, ....\n\nSource handler: `pages/api/reconciliations/candidates.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":"accountIds","in":"query","required":false,"description":"AccountIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"AccountIds. Use identifiers 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":"account_ids","in":"query","required":false,"description":"Account Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Account Ids. Use identifiers returned by Wesley."}},{"name":"balanceAccountId","in":"query","required":false,"description":"BalanceAccountId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"BalanceAccountId. Use an identifier returned by Wesley."}},{"name":"cursor","in":"query","required":false,"description":"Cursor filter or option.","schema":{"type":"string","description":"Cursor 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":"excludeReconciliationId","in":"query","required":false,"description":"ExcludeReconciliationId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ExcludeReconciliationId. Use an identifier returned by Wesley."}},{"name":"includeAfterEndDate","in":"query","required":false,"description":"IncludeAfterEndDate flag.","schema":{"type":"boolean","description":"IncludeAfterEndDate flag."}},{"name":"includeFeedDetails","in":"query","required":false,"description":"IncludeFeedDetails flag.","schema":{"type":"boolean","description":"IncludeFeedDetails flag."}},{"name":"includeZeroAmount","in":"query","required":false,"description":"IncludeZeroAmount flag.","schema":{"type":"boolean","description":"IncludeZeroAmount flag."}},{"name":"paginated","in":"query","required":false,"description":"Paginated filter or option.","schema":{"type":"string","description":"Paginated filter or option."}},{"name":"providerClearingStatus","in":"query","required":false,"description":"ProviderClearingStatus filter or option.","schema":{"type":"string","description":"ProviderClearingStatus 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."}}]}},"/api/reconciliations/diagnose":{"post":{"operationId":"post_reconciliations_diagnose","tags":["Reconciliations"],"summary":"Execute Reconciliations Diagnose","description":"Execute Reconciliations Diagnose.\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/reconciliations/diagnose.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":true,"description":"JSON payload generated from exported Zod schema `reconciliationDiagnosticRequestSchema` used by `pages/api/reconciliations/diagnose.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accountIds":{"minItems":1,"maxItems":25,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"statementEndingDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"statementBeginningBalance":{"type":"number"},"statementEndingBalance":{"type":"number"},"clearedTransactionIds":{"type":"array","items":{"type":"string"}}},"required":["companyId","statementEndingDate","statementBeginningBalance","statementEndingBalance","clearedTransactionIds"],"additionalProperties":false}}}}}},"/api/reconciliations/drafts":{"get":{"operationId":"get_reconciliations_drafts","tags":["Reconciliations"],"summary":"Retrieve Reconciliations Drafts","description":"Retrieve Reconciliations Drafts.\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: `accountIds`, `expectedRevision`.\n\nSource handler: `pages/api/reconciliations/drafts.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":"accountIds","in":"query","required":false,"description":"AccountIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"AccountIds. Use identifiers returned by Wesley."}},{"name":"expectedRevision","in":"query","required":false,"description":"ExpectedRevision filter or option.","schema":{"type":"string","description":"ExpectedRevision filter or option."}}]},"put":{"operationId":"put_reconciliations_drafts","tags":["Reconciliations"],"summary":"Replace Reconciliations Drafts","description":"Replace Reconciliations Drafts.\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: `accountIds`, `expectedRevision`.\n\nSource handler: `pages/api/reconciliations/drafts.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":"accountIds","in":"query","required":false,"description":"AccountIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"AccountIds. Use identifiers returned by Wesley."}},{"name":"expectedRevision","in":"query","required":false,"description":"ExpectedRevision filter or option.","schema":{"type":"string","description":"ExpectedRevision filter or option."}}]},"delete":{"operationId":"delete_reconciliations_drafts","tags":["Reconciliations"],"summary":"Delete Reconciliations Drafts","description":"Delete Reconciliations Drafts.\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: `accountIds`, `expectedRevision`.\n\nSource handler: `pages/api/reconciliations/drafts.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":"accountIds","in":"query","required":false,"description":"AccountIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"AccountIds. Use identifiers returned by Wesley."}},{"name":"expectedRevision","in":"query","required":false,"description":"ExpectedRevision filter or option.","schema":{"type":"string","description":"ExpectedRevision filter or option."}}]}},"/api/reconciliations/export":{"get":{"operationId":"get_reconciliations_export","tags":["Reconciliations"],"summary":"Retrieve Reconciliations Export","description":"Retrieve Reconciliations Export.\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/reconciliations/export.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"}}]},"post":{"operationId":"post_reconciliations_export","tags":["Reconciliations"],"summary":"Execute Reconciliations Export","description":"Execute Reconciliations Export.\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/reconciliations/export.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/reconciliations/manual-clearing":{"post":{"operationId":"post_reconciliations_manual_clearing","tags":["Reconciliations"],"summary":"Execute Reconciliations Manual Clearing","description":"Execute Reconciliations Manual Clearing.\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/reconciliations/manual-clearing.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":true,"description":"Set bank or credit-card journal lines to cleared or uncleared in Wesley without changing the provider snapshot. Provider-reconciled lines cannot be changed. Source handler: `pages/api/reconciliations/manual-clearing.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"journalLineIds":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"cleared":{"type":"boolean"}},"required":["journalLineIds","cleared"]}}}}}},"/api/reconciliations/opening-balance":{"get":{"operationId":"get_reconciliations_opening_balance","tags":["Reconciliations"],"summary":"Retrieve Reconciliations Opening Balance","description":"Retrieve Reconciliations Opening Balance.\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`, `accountIds`, `account_id`, `account_ids`.\n\nSource handler: `pages/api/reconciliations/opening-balance.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":"accountIds","in":"query","required":false,"description":"AccountIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"AccountIds. Use identifiers 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":"account_ids","in":"query","required":false,"description":"Account Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Account Ids. Use identifiers returned by Wesley."}}]}},"/api/reconciliations/period-corrections":{"get":{"operationId":"get_reconciliations_period_corrections","tags":["Reconciliations"],"summary":"Retrieve Reconciliations Period Corrections","description":"Retrieve Reconciliations Period Corrections.\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`, `dates`.\n\nSource handler: `pages/api/reconciliations/period-corrections.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":"dates","in":"query","required":false,"description":"Dates filter or option.","schema":{"type":"string","description":"Dates filter or option."}}]}},"/api/reconciliations/prepare-statement":{"post":{"operationId":"post_reconciliations_prepare_statement","tags":["Reconciliations"],"summary":"Execute Reconciliations Prepare Statement","description":"Execute Reconciliations Prepare Statement.\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\nSource handler: `pages/api/reconciliations/prepare-statement.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}},"/api/reconciliations/readiness":{"get":{"operationId":"get_reconciliations_readiness","tags":["Reconciliations"],"summary":"Retrieve Reconciliations Readiness","description":"Retrieve Reconciliations Readiness.\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`, `statementDocumentId`.\n\nSource handler: `pages/api/reconciliations/readiness.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":"statementDocumentId","in":"query","required":false,"description":"StatementDocumentId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"StatementDocumentId. Use an identifier returned by Wesley."}}]}},"/api/reconciliations/readiness-periods":{"get":{"operationId":"get_reconciliations_readiness_periods","tags":["Reconciliations"],"summary":"Retrieve Reconciliations Readiness Periods","description":"Retrieve Reconciliations Readiness Periods.\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`.\n\nSource handler: `pages/api/reconciliations/readiness-periods.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."}}]}},"/api/reconciliations/transaction-status":{"post":{"operationId":"post_reconciliations_transaction_status","tags":["Reconciliations"],"summary":"Execute Reconciliations Transaction Status","description":"Execute Reconciliations Transaction Status.\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/reconciliations/transaction-status.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/recurring-journal-entries":{"get":{"operationId":"get_recurring_journal_entries","tags":["Recurring Journal Entries"],"summary":"Retrieve Recurring Journal Entries","description":"Retrieve Recurring Journal Entries.\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\nSource handler: `pages/api/recurring-journal-entries/index.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"}}]},"post":{"operationId":"post_recurring_journal_entries","tags":["Recurring Journal Entries"],"summary":"Execute Recurring Journal Entries","description":"Execute Recurring Journal Entries.\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/recurring-journal-entries/index.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/recurring-journal-entries/{id}":{"put":{"operationId":"put_recurring_journal_entries_id","tags":["Recurring Journal Entries"],"summary":"Replace Recurring Journal Entries By Id","description":"Replace Recurring Journal Entries By Id.\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: `description`, `endDate`, `entryDescription`, `entryName`, `frequency`, `isAdjusting`, `lines`, `name`, `nextRunDate`, `postingMode`, `startDate`, `status`, ....\n\nSource handler: `pages/api/recurring-journal-entries/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `description`, `endDate`, `entryDescription`, `entryName`, `frequency`, `isAdjusting`, `lines`, `name`, `nextRunDate`, `postingMode`, `startDate`, `status`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","description":"Description payload field."},"endDate":{"type":"string","format":"date","description":"EndDate in YYYY-MM-DD format."},"entryDescription":{"type":"string","description":"EntryDescription payload field."},"entryName":{"type":"string","description":"EntryName payload field."},"frequency":{"type":"string","description":"Frequency payload field."},"isAdjusting":{"type":"boolean","description":"IsAdjusting flag."},"lines":{"type":"string","description":"Lines payload field."},"name":{"type":"string","description":"Name payload field."},"nextRunDate":{"type":"string","format":"date","description":"NextRunDate in YYYY-MM-DD format."},"postingMode":{"type":"string","description":"PostingMode payload field."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."},"status":{"type":"string","description":"Status payload field."},"transactionMetadata":{"type":"string","description":"TransactionMetadata payload field."},"transactionType":{"type":"string","description":"TransactionType payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_recurring_journal_entries_id","tags":["Recurring Journal Entries"],"summary":"Delete Recurring Journal Entries By Id","description":"Delete Recurring Journal Entries By Id.\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: `description`, `endDate`, `entryDescription`, `entryName`, `frequency`, `isAdjusting`, `lines`, `name`, `nextRunDate`, `postingMode`, `startDate`, `status`, ....\n\nSource handler: `pages/api/recurring-journal-entries/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `description`, `endDate`, `entryDescription`, `entryName`, `frequency`, `isAdjusting`, `lines`, `name`, `nextRunDate`, `postingMode`, `startDate`, `status`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","description":"Description payload field."},"endDate":{"type":"string","format":"date","description":"EndDate in YYYY-MM-DD format."},"entryDescription":{"type":"string","description":"EntryDescription payload field."},"entryName":{"type":"string","description":"EntryName payload field."},"frequency":{"type":"string","description":"Frequency payload field."},"isAdjusting":{"type":"boolean","description":"IsAdjusting flag."},"lines":{"type":"string","description":"Lines payload field."},"name":{"type":"string","description":"Name payload field."},"nextRunDate":{"type":"string","format":"date","description":"NextRunDate in YYYY-MM-DD format."},"postingMode":{"type":"string","description":"PostingMode payload field."},"startDate":{"type":"string","format":"date","description":"StartDate in YYYY-MM-DD format."},"status":{"type":"string","description":"Status payload field."},"transactionMetadata":{"type":"string","description":"TransactionMetadata payload field."},"transactionType":{"type":"string","description":"TransactionType payload field."}},"additionalProperties":true}}}}}},"/api/recurring-journal-entries/{id}/run":{"post":{"operationId":"post_recurring_journal_entries_id_run","tags":["Recurring Journal Entries"],"summary":"Execute Recurring Journal Entries By Id Run","description":"Execute Recurring Journal Entries By Id Run.\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: `journalPayload`.\n\nSource handler: `pages/api/recurring-journal-entries/[id]/run.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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: `journalPayload`.","content":{"application/json":{"schema":{"type":"object","properties":{"journalPayload":{"type":"string","description":"JournalPayload payload field."}},"additionalProperties":true}}}}}},"/api/referrals/attribution":{"get":{"operationId":"get_referrals_attribution","tags":["Referrals"],"summary":"Retrieve Referrals Attribution","description":"Retrieve Referrals Attribution.\n\nRequires authenticated user context.\n\nSource handler: `pages/api/referrals/attribution.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":[]}],"x-wesley-personal-api-key":false},"post":{"operationId":"post_referrals_attribution","tags":["Referrals"],"summary":"Execute Referrals Attribution","description":"Execute Referrals Attribution.\n\nRequires authenticated user context.\n\nJSON body keys used by this method: `code`.\n\nSource handler: `pages/api/referrals/attribution.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":[]}],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `code`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Code payload field."}},"additionalProperties":true}}}}}},"/api/reports/account-vendor-lines":{"get":{"operationId":"get_reports_account_vendor_lines","tags":["Reports"],"summary":"Get Reports Account Vendor Lines","description":"Get Reports Account Vendor Lines.\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: `account_id`, `all`, `customer_id`, `employee_id`, `end_date`, `include_subaccounts`, `page`, `page_size`, `sort_direction`, `sort_field`, `start_date`, `totals`, ....\n\nSource handler: `pages/api/reports/account-vendor-lines.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":"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":"customer_id","in":"query","required":false,"description":"Customer Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Customer Id. Use an identifier returned by Wesley."}},{"name":"employee_id","in":"query","required":false,"description":"Employee Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Employee Id. Use an identifier 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":"include_subaccounts","in":"query","required":false,"description":"Include Subaccounts flag.","schema":{"type":"boolean","description":"Include Subaccounts flag."}},{"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":"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":"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":"totals","in":"query","required":false,"description":"Totals filter or option.","schema":{"type":"string","description":"Totals filter or option."}},{"name":"vendor_id","in":"query","required":false,"description":"Vendor Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Vendor Id. Use an identifier returned by Wesley."}}]}},"/api/reports/account-vendor-matrix":{"get":{"operationId":"get_reports_account_vendor_matrix","tags":["Reports"],"summary":"Get Reports Account Vendor Matrix","description":"Get Reports Account Vendor Matrix.\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: `account_ids`, `account_order`, `all`, `customer_ids`, `employee_ids`, `end_date`, `full_scope`, `group_limit`, `group_offset`, `include_no_account`, `include_no_payee`, `pivot`, ....\n\nSource handler: `pages/api/reports/account-vendor-matrix.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":"account_ids","in":"query","required":false,"description":"Account Ids. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"Account Ids. Use identifiers returned by Wesley."}},{"name":"account_order","in":"query","required":false,"description":"Account Order filter or option.","schema":{"type":"string","description":"Account Order filter or option."}},{"name":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All 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":"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":"full_scope","in":"query","required":false,"description":"Full Scope filter or option.","schema":{"type":"string","description":"Full Scope filter or option."}},{"name":"group_limit","in":"query","required":false,"description":"Group Limit filter or option.","schema":{"type":"string","description":"Group Limit filter or option."}},{"name":"group_offset","in":"query","required":false,"description":"Group Offset filter or option.","schema":{"type":"string","description":"Group Offset filter or option."}},{"name":"include_no_account","in":"query","required":false,"description":"Include No Account flag.","schema":{"type":"boolean","description":"Include No Account flag."}},{"name":"include_no_payee","in":"query","required":false,"description":"Include No Payee flag.","schema":{"type":"boolean","description":"Include No Payee flag."}},{"name":"pivot","in":"query","required":false,"description":"Pivot filter or option.","schema":{"type":"string","description":"Pivot filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"sort_by","in":"query","required":false,"description":"Sort By filter or option.","schema":{"type":"string","description":"Sort By 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":"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":"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/reports/all-period-bounds":{"get":{"operationId":"get_reports_all_period_bounds","tags":["Reports"],"summary":"Retrieve Reports All Period Bounds","description":"Retrieve Reports All Period Bounds.\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: `through_date`.\n\nSource handler: `pages/api/reports/all-period-bounds.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":"through_date","in":"query","required":false,"description":"Through Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Through Date in YYYY-MM-DD format."}}]}},"/api/reports/ap-aging-summary":{"get":{"operationId":"get_reports_ap_aging_summary","tags":["Reports"],"summary":"Get Reports Ap Aging Summary","description":"Get Reports Ap Aging Summary.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/ap-aging-summary.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_reports_ap_aging_summary","tags":["Reports"],"summary":"Execute Reports Ap Aging Summary","description":"Execute Reports Ap Aging Summary.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/ap-aging-summary.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/reports/ar-aging-summary":{"get":{"operationId":"get_reports_ar_aging_summary","tags":["Reports"],"summary":"Get Reports Ar Aging Summary","description":"Get Reports Ar Aging Summary.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/ar-aging-summary.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_reports_ar_aging_summary","tags":["Reports"],"summary":"Execute Reports Ar Aging Summary","description":"Execute Reports Ar Aging Summary.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/ar-aging-summary.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/reports/cash-flow":{"get":{"operationId":"get_reports_cash_flow","tags":["Reports"],"summary":"Retrieve Reports Cash Flow","description":"Retrieve Reports Cash Flow.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/cash-flow.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_reports_cash_flow","tags":["Reports"],"summary":"Execute Reports Cash Flow","description":"Execute Reports Cash Flow.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/cash-flow.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/reports/cash-flow/account-mappings":{"get":{"operationId":"get_reports_cash_flow_account_mappings","tags":["Reports"],"summary":"Get Reports Cash Flow Account Mappings","description":"Get Reports Cash Flow Account Mappings.\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/reports/cash-flow/account-mappings.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"}}]},"put":{"operationId":"put_reports_cash_flow_account_mappings","tags":["Reports"],"summary":"Replace Reports Cash Flow Account Mappings","description":"Replace Reports Cash Flow Account Mappings.\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: `mappings`.\n\nSource handler: `pages/api/reports/cash-flow/account-mappings.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: `mappings`.","content":{"application/json":{"schema":{"type":"object","properties":{"mappings":{"type":"string","description":"Mappings payload field."}},"additionalProperties":true}}}}}},"/api/reports/client-report-export":{"post":{"operationId":"post_reports_client_report_export","tags":["Reports"],"summary":"Execute Reports Client Report Export","description":"Execute Reports Client Report Export.\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/reports/client-report-export.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/reports/client-report-front-page-templates":{"post":{"operationId":"post_reports_client_report_front_page_templates","tags":["Reports"],"summary":"Execute Reports Client Report Front Page Templates","description":"Execute Reports Client Report Front Page Templates.\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\nSource handler: `pages/api/reports/client-report-front-page-templates.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},"patch":{"operationId":"patch_reports_client_report_front_page_templates","tags":["Reports"],"summary":"Update Reports Client Report Front Page Templates","description":"Update Reports Client Report Front Page Templates.\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\nSource handler: `pages/api/reports/client-report-front-page-templates.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}},"/api/reports/client-report-templates":{"get":{"operationId":"get_reports_client_report_templates","tags":["Reports"],"summary":"Retrieve Reports Client Report Templates","description":"Retrieve Reports Client Report Templates.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/reports/client-report-templates.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-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."}},"post":{"operationId":"post_reports_client_report_templates","tags":["Reports"],"summary":"Execute Reports Client Report Templates","description":"Execute Reports Client Report Templates.\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\nSource handler: `pages/api/reports/client-report-templates.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},"patch":{"operationId":"patch_reports_client_report_templates","tags":["Reports"],"summary":"Update Reports Client Report Templates","description":"Update Reports Client Report Templates.\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\nSource handler: `pages/api/reports/client-report-templates.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},"delete":{"operationId":"delete_reports_client_report_templates","tags":["Reports"],"summary":"Delete Reports Client Report Templates","description":"Delete Reports Client Report Templates.\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\nSource handler: `pages/api/reports/client-report-templates.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}},"/api/reports/custom-report-definitions":{"get":{"operationId":"get_reports_custom_report_definitions","tags":["Reports"],"summary":"Retrieve Reports Custom Report Definitions","description":"Retrieve Reports Custom Report Definitions.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/reports/custom-report-definitions.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-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."}},"post":{"operationId":"post_reports_custom_report_definitions","tags":["Reports"],"summary":"Execute Reports Custom Report Definitions","description":"Execute Reports Custom Report Definitions.\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\nSource handler: `pages/api/reports/custom-report-definitions.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},"patch":{"operationId":"patch_reports_custom_report_definitions","tags":["Reports"],"summary":"Update Reports Custom Report Definitions","description":"Update Reports Custom Report Definitions.\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\nSource handler: `pages/api/reports/custom-report-definitions.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},"delete":{"operationId":"delete_reports_custom_report_definitions","tags":["Reports"],"summary":"Delete Reports Custom Report Definitions","description":"Delete Reports Custom Report Definitions.\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\nSource handler: `pages/api/reports/custom-report-definitions.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}},"/api/reports/export":{"get":{"operationId":"get_reports_export","tags":["Reports"],"summary":"Retrieve Reports Export","description":"Retrieve Reports Export.\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/reports/export.ts` (auto-discovered).","responses":{"200":{"description":"Generated report file, or JSON with base64 file content when `delivery=base64`.","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"filename":{"type":"string"},"mimeType":{"type":"string"},"dataBase64":{"type":"string"}}}}}},"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"}}]},"post":{"operationId":"post_reports_export","tags":["Reports"],"summary":"Execute Reports Export","description":"Execute Reports Export.\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/reports/export.ts` (auto-discovered).","responses":{"200":{"description":"Generated report file, or JSON with base64 file content when `delivery=base64`.","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"filename":{"type":"string"},"mimeType":{"type":"string"},"dataBase64":{"type":"string"}}}}}},"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":true,"description":"Generate a Profit & Loss, Balance Sheet, or combined financial statement export without opening the Reports page. Defaults match the Reports page export buttons. Set `delivery` to `base64` when an agent needs a JSON payload instead of a binary file response.","content":{"application/json":{"schema":{"type":"object","required":["companyId","report_type","format","end_date"],"properties":{"companyId":{"type":"string","description":"Company context UUID."},"report_type":{"type":"string","enum":["profit-loss","balance-sheet","combined"],"description":"Financial statement to export. `combined` returns Profit & Loss and Balance Sheet as separate Excel tabs."},"format":{"type":"string","enum":["xlsx","pdf","excel"],"description":"Output file format. `excel` is accepted as an alias for `xlsx`. `combined` exports only support Excel."},"start_date":{"type":"string","format":"date","description":"Period start date. Optional for balance-sheet as-of exports."},"end_date":{"type":"string","format":"date","description":"Period end/as-of date."},"basis":{"type":"string","enum":["accrual","cash"],"default":"accrual"},"date_mode":{"type":"string","enum":["as-of","range"],"default":"as-of","description":"Balance Sheet date mode."},"view_by":{"type":"string","enum":["month","quarter","year"],"description":"Split the selected range into report columns, matching the Reports page view-by export."},"group_by":{"type":"string","enum":["account","class","location","project"],"default":"account"},"column_order":{"type":"string","enum":["period-tag","tag-period"],"default":"period-tag","description":"Outer-to-inner column header order for grouped statement exports."},"period_column_order":{"type":"string","enum":["newest-first","oldest-first"],"default":"newest-first","description":"Display order for exports containing multiple periods."},"compare_start_dates":{"type":"array","items":{"type":"string","format":"date"},"description":"Comparison period start dates for account-view reports."},"compare_end_dates":{"type":"array","items":{"type":"string","format":"date"},"description":"Comparison period end dates for account-view reports."},"show_account_code":{"type":"boolean","default":false},"show_zero_balance_lines":{"type":"boolean","default":false},"balance_only":{"type":"boolean","default":true},"show_percent_of_income":{"type":"boolean","default":false},"show_comparison_change_amount":{"type":"boolean","default":false},"show_comparison_change_percent":{"type":"boolean","default":false},"comparison_reference_index":{"type":"integer","minimum":0,"maximum":50000,"description":"Zero-based reference column for changes in reports grouped by class, location, project, or payee."},"comparison_reference_label":{"type":"string","minLength":1,"maxLength":500,"description":"Reference column label. Takes precedence over its index when refreshing a report package."},"show_grouped_statement_total_column":{"type":"boolean","default":true,"description":"Include a total across all displayed tags for each period."},"show_grouped_statement_period_total_column":{"type":"boolean","default":false,"description":"Include a total across all displayed periods for each tag in Profit & Loss exports."},"excluded_tag_ids":{"type":"array","items":{"type":"string"},"description":"Grouped tag ids to omit from the export."},"tag_order_ids":{"type":"array","items":{"type":"string"},"description":"Grouped tag ids in the desired display order."},"primary_report_type":{"type":"string","enum":["profit-loss","balance-sheet"],"description":"For `combined` exports, identifies the report the user is currently viewing so its tab can preserve the current row expansion state."},"primary_export_expansion_mode":{"type":"string","enum":["expanded","current"],"description":"For `combined` exports, controls whether the primary report tab exports full detail or preserves collapsed rows."},"collapsed_account_ids":{"type":"array","items":{"type":"string"},"description":"Collapsed account ids for `primary_export_expansion_mode=current`. Applies only to the primary report tab in combined exports."},"collapsed_section_keys":{"type":"array","items":{"type":"string"},"description":"Collapsed section keys for `primary_export_expansion_mode=current`. Applies only to the primary report tab in combined exports."},"delivery":{"type":"string","enum":["download","base64"],"default":"download","description":"Use `base64` for JSON responses that can be attached by automation agents."}},"additionalProperties":true}}}}}},"/api/reports/income-tax-summary":{"get":{"operationId":"get_reports_income_tax_summary","tags":["Reports"],"summary":"Get Reports Income Tax Summary","description":"Get Reports Income Tax 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\nSource handler: `pages/api/reports/income-tax-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"}}]},"post":{"operationId":"post_reports_income_tax_summary","tags":["Reports"],"summary":"Execute Reports Income Tax Summary","description":"Execute Reports Income Tax 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\nSource handler: `pages/api/reports/income-tax-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"}}]}},"/api/reports/journal-lines":{"get":{"operationId":"get_reports_journal_lines","tags":["Reports"],"summary":"Retrieve Reports Journal Lines","description":"Retrieve Reports Journal Lines.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/reports/journal-lines.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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."}},"post":{"operationId":"post_reports_journal_lines","tags":["Reports"],"summary":"Execute Reports Journal Lines","description":"Execute Reports Journal Lines.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/journal-lines.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/reports/journal-summary":{"get":{"operationId":"get_reports_journal_summary","tags":["Reports"],"summary":"Get Reports Journal Summary","description":"Get Reports Journal Summary.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/journal-summary.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_reports_journal_summary","tags":["Reports"],"summary":"Execute Reports Journal Summary","description":"Execute Reports Journal Summary.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/journal-summary.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/reports/party-activity":{"get":{"operationId":"get_reports_party_activity","tags":["Reports"],"summary":"Retrieve Reports Party Activity","description":"Retrieve Reports Party Activity.\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: `after_id`, `as_of_date`, `party_id`, `party_type`.\n\nSource handler: `pages/api/reports/party-activity.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":"after_id","in":"query","required":false,"description":"After Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"After Id. Use an identifier returned by Wesley."}},{"name":"as_of_date","in":"query","required":false,"description":"As Of Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"As Of Date in YYYY-MM-DD format."}},{"name":"party_id","in":"query","required":false,"description":"Party Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Party Id. Use an identifier returned by Wesley."}},{"name":"party_type","in":"query","required":false,"description":"Party Type filter or option.","schema":{"type":"string","description":"Party Type filter or option."}}]}},"/api/reports/party-ar-ap-ledger":{"get":{"operationId":"get_reports_party_ar_ap_ledger","tags":["Reports"],"summary":"Retrieve Reports Party Ar Ap Ledger","description":"Retrieve Reports Party Ar Ap Ledger.\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: `after_id`, `as_of_date`, `party_id`, `party_type`.\n\nSource handler: `pages/api/reports/party-ar-ap-ledger.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":"after_id","in":"query","required":false,"description":"After Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"After Id. Use an identifier returned by Wesley."}},{"name":"as_of_date","in":"query","required":false,"description":"As Of Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"As Of Date in YYYY-MM-DD format."}},{"name":"party_id","in":"query","required":false,"description":"Party Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Party Id. Use an identifier returned by Wesley."}},{"name":"party_type","in":"query","required":false,"description":"Party Type filter or option.","schema":{"type":"string","description":"Party Type filter or option."}}]}},"/api/reports/recurring-forecast":{"get":{"operationId":"get_reports_recurring_forecast","tags":["Reports"],"summary":"Retrieve Reports Recurring Forecast","description":"Retrieve Reports Recurring Forecast.\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: `year`.\n\nSource handler: `pages/api/reports/recurring-forecast.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":"year","in":"query","required":false,"description":"Year filter or option.","schema":{"type":"string","description":"Year filter or option."}}]}},"/api/reports/saved-reports":{"get":{"operationId":"get_reports_saved_reports","tags":["Reports"],"summary":"Retrieve Reports Saved Reports","description":"Retrieve Reports Saved Reports.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/reports/saved-reports.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-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."}},"post":{"operationId":"post_reports_saved_reports","tags":["Reports"],"summary":"Execute Reports Saved Reports","description":"Execute Reports Saved Reports.\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\nSource handler: `pages/api/reports/saved-reports.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},"patch":{"operationId":"patch_reports_saved_reports","tags":["Reports"],"summary":"Update Reports Saved Reports","description":"Update Reports Saved Reports.\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\nSource handler: `pages/api/reports/saved-reports.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},"delete":{"operationId":"delete_reports_saved_reports","tags":["Reports"],"summary":"Delete Reports Saved Reports","description":"Delete Reports Saved Reports.\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\nSource handler: `pages/api/reports/saved-reports.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}},"/api/reports/settings":{"get":{"operationId":"get_reports_settings","tags":["Reports"],"summary":"Retrieve Reports Settings","description":"Retrieve Reports Settings.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/reports/settings.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-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."}},"patch":{"operationId":"patch_reports_settings","tags":["Reports"],"summary":"Update Reports Settings","description":"Update Reports Settings.\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\nSource handler: `pages/api/reports/settings.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}},"/api/reports/statement":{"get":{"operationId":"get_reports_statement","tags":["Reports"],"summary":"Retrieve Reports Statement","description":"Retrieve Reports Statement.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/statement.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_reports_statement","tags":["Reports"],"summary":"Execute Reports Statement","description":"Execute Reports Statement.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/reports/statement.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/review-books/run":{"post":{"operationId":"post_review_books_run","tags":["Review Books"],"summary":"Execute Review Books Run","description":"Execute Review Books Run.\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/review-books/run.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/review-books/templates":{"get":{"operationId":"get_review_books_templates","tags":["Review Books"],"summary":"Retrieve Review Books Templates","description":"Retrieve Review Books Templates.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/review-books/templates.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-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."}},"put":{"operationId":"put_review_books_templates","tags":["Review Books"],"summary":"Replace Review Books Templates","description":"Replace Review Books Templates.\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\nSource handler: `pages/api/review-books/templates.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}},"/api/rules":{"get":{"operationId":"get_rules","tags":["Rules"],"summary":"Retrieve Rules","description":"Retrieve Rules.\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\nSource handler: `pages/api/rules/index.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"}}]},"post":{"operationId":"post_rules","tags":["Rules"],"summary":"Execute Rules","description":"Execute Rules.\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/rules/index.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/rules/{id}":{"put":{"operationId":"put_rules_id","tags":["Rules"],"summary":"Replace Rules By Id","description":"Replace Rules By Id.\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/rules/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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"}}]},"delete":{"operationId":"delete_rules_id","tags":["Rules"],"summary":"Delete Rules By Id","description":"Delete Rules By Id.\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/rules/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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/rules/apply":{"post":{"operationId":"post_rules_apply","tags":["Rules"],"summary":"Execute Rules Apply","description":"Execute Rules Apply.\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: `externalTransactionIds`, `ruleId`, `ruleIds`.\n\nSource handler: `pages/api/rules/apply.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: `externalTransactionIds`, `ruleId`, `ruleIds`.","content":{"application/json":{"schema":{"type":"object","properties":{"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"ruleId":{"type":"string","description":"RuleId. Use an identifier returned by Wesley."},"ruleIds":{"type":"array","items":{"type":"string"},"description":"RuleIds. Use identifiers returned by Wesley."}},"additionalProperties":true}}}}}},"/api/rules/candidates":{"post":{"operationId":"post_rules_candidates","tags":["Rules"],"summary":"Execute Rules Candidates","description":"Execute Rules Candidates.\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/rules/candidates.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/rules/draft-from-text":{"post":{"operationId":"post_rules_draft_from_text","tags":["Rules"],"summary":"Execute Rules Draft From Text","description":"Execute Rules Draft From Text.\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: `instruction`.\n\nSource handler: `pages/api/rules/draft-from-text.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: `instruction`.","content":{"application/json":{"schema":{"type":"object","properties":{"instruction":{"type":"string","description":"Instruction payload field."}},"additionalProperties":true}}}}}},"/api/rules/firm":{"get":{"operationId":"get_rules_firm","tags":["Rules"],"summary":"Retrieve Rules Firm","description":"Retrieve Rules Firm.\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\nCommon query parameters: `accountingFirmId`, `companyId`.\n\nSource handler: `pages/api/rules/firm.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,"parameters":[{"name":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_rules_firm","tags":["Rules"],"summary":"Execute Rules Firm","description":"Execute Rules Firm.\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\nJSON body keys used by this method: `action`, `companyIds`, `disabled`, `firmRuleId`, `selections`, `sourceRuleId`, `status`.\n\nCommon query parameters: `accountingFirmId`, `companyId`.\n\nSource handler: `pages/api/rules/firm.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,"parameters":[{"name":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `companyIds`, `disabled`, `firmRuleId`, `selections`, `sourceRuleId`, `status`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"companyIds":{"type":"array","items":{"type":"string"},"description":"CompanyIds. Use identifiers returned by Wesley."},"disabled":{"type":"string","description":"Disabled payload field."},"firmRuleId":{"type":"string","description":"FirmRuleId. Use an identifier returned by Wesley."},"selections":{"type":"string","description":"Selections payload field."},"sourceRuleId":{"type":"string","description":"SourceRuleId. Use an identifier returned by Wesley."},"status":{"type":"string","description":"Status payload field."}},"additionalProperties":true}}}}},"patch":{"operationId":"patch_rules_firm","tags":["Rules"],"summary":"Update Rules Firm","description":"Update Rules Firm.\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\nJSON body keys used by this method: `action`, `companyIds`, `disabled`, `firmRuleId`, `selections`, `sourceRuleId`, `status`.\n\nCommon query parameters: `accountingFirmId`, `companyId`.\n\nSource handler: `pages/api/rules/firm.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,"parameters":[{"name":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `companyIds`, `disabled`, `firmRuleId`, `selections`, `sourceRuleId`, `status`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"companyIds":{"type":"array","items":{"type":"string"},"description":"CompanyIds. Use identifiers returned by Wesley."},"disabled":{"type":"string","description":"Disabled payload field."},"firmRuleId":{"type":"string","description":"FirmRuleId. Use an identifier returned by Wesley."},"selections":{"type":"string","description":"Selections payload field."},"sourceRuleId":{"type":"string","description":"SourceRuleId. Use an identifier returned by Wesley."},"status":{"type":"string","description":"Status payload field."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_rules_firm","tags":["Rules"],"summary":"Delete Rules Firm","description":"Delete Rules Firm.\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\nJSON body keys used by this method: `action`, `companyIds`, `disabled`, `firmRuleId`, `selections`, `sourceRuleId`, `status`.\n\nCommon query parameters: `accountingFirmId`, `companyId`.\n\nSource handler: `pages/api/rules/firm.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,"parameters":[{"name":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `companyIds`, `disabled`, `firmRuleId`, `selections`, `sourceRuleId`, `status`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"companyIds":{"type":"array","items":{"type":"string"},"description":"CompanyIds. Use identifiers returned by Wesley."},"disabled":{"type":"string","description":"Disabled payload field."},"firmRuleId":{"type":"string","description":"FirmRuleId. Use an identifier returned by Wesley."},"selections":{"type":"string","description":"Selections payload field."},"sourceRuleId":{"type":"string","description":"SourceRuleId. Use an identifier returned by Wesley."},"status":{"type":"string","description":"Status payload field."}},"additionalProperties":true}}}}}},"/api/rules/import":{"get":{"operationId":"get_rules_import","tags":["Rules"],"summary":"Retrieve Rules Import","description":"Retrieve Rules Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `includeRules`, `page`, `search`, `sourceCompanyId`.\n\nSource handler: `pages/api/rules/import.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":"includeRules","in":"query","required":false,"description":"IncludeRules flag.","schema":{"type":"boolean","description":"IncludeRules flag."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"sourceCompanyId","in":"query","required":false,"description":"SourceCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_rules_import","tags":["Rules"],"summary":"Import Rules Import","description":"Import Rules Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nCommon query parameters: `includeRules`, `page`, `search`, `sourceCompanyId`.\n\nSource handler: `pages/api/rules/import.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":"includeRules","in":"query","required":false,"description":"IncludeRules flag.","schema":{"type":"boolean","description":"IncludeRules flag."}},{"name":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"sourceCompanyId","in":"query","required":false,"description":"SourceCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}}]}},"/api/rules/pending-counts":{"get":{"operationId":"get_rules_pending_counts","tags":["Rules"],"summary":"Get Rules Pending Counts","description":"Get Rules Pending Counts.\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/rules/pending-counts.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/rules/posted-transactions":{"get":{"operationId":"get_rules_posted_transactions","tags":["Rules"],"summary":"Retrieve Rules Posted Transactions","description":"Retrieve Rules Posted 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: `ruleId`, `ruleIds`.\n\nSource handler: `pages/api/rules/posted-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":"ruleId","in":"query","required":false,"description":"RuleId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RuleId. Use an identifier returned by Wesley."}},{"name":"ruleIds","in":"query","required":false,"description":"RuleIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"RuleIds. Use identifiers returned by Wesley."}}]},"post":{"operationId":"post_rules_posted_transactions","tags":["Rules"],"summary":"Execute Rules Posted Transactions","description":"Execute Rules Posted 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\nCommon query parameters: `ruleId`, `ruleIds`.\n\nSource handler: `pages/api/rules/posted-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."},"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":"ruleId","in":"query","required":false,"description":"RuleId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"RuleId. Use an identifier returned by Wesley."}},{"name":"ruleIds","in":"query","required":false,"description":"RuleIds. Use identifiers returned by Wesley.","schema":{"type":"array","items":{"type":"string"},"description":"RuleIds. Use identifiers returned by Wesley."}}]}},"/api/rules/preview":{"post":{"operationId":"post_rules_preview","tags":["Rules"],"summary":"Execute Rules Preview","description":"Execute Rules Preview.\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\nPreview endpoint used to inspect impact before committing changes.\n\nJSON body keys used by this method: `conditions`, `excludeRuleId`, `limit`, `offset`.\n\nSource handler: `pages/api/rules/preview.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: `conditions`, `excludeRuleId`, `limit`, `offset`.","content":{"application/json":{"schema":{"type":"object","properties":{"conditions":{"type":"string","description":"Conditions payload field."},"excludeRuleId":{"type":"string","description":"ExcludeRuleId. Use an identifier returned by Wesley."},"limit":{"type":"integer","description":"Limit payload field."},"offset":{"type":"integer","description":"Offset payload field."}},"additionalProperties":true}}}}}},"/api/rules/reorder":{"post":{"operationId":"post_rules_reorder","tags":["Rules"],"summary":"Execute Rules Reorder","description":"Execute Rules Reorder.\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: `ruleIds`.\n\nSource handler: `pages/api/rules/reorder.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: `ruleIds`.","content":{"application/json":{"schema":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string"},"description":"RuleIds. Use identifiers returned by Wesley."}},"additionalProperties":true}}}}}},"/api/rules/revert":{"post":{"operationId":"post_rules_revert","tags":["Rules"],"summary":"Execute Rules Revert","description":"Execute Rules Revert.\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: `externalTransactionIds`, `ruleId`, `ruleIds`.\n\nSource handler: `pages/api/rules/revert.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: `externalTransactionIds`, `ruleId`, `ruleIds`.","content":{"application/json":{"schema":{"type":"object","properties":{"externalTransactionIds":{"type":"array","items":{"type":"string"},"description":"ExternalTransactionIds. Use identifiers returned by Wesley."},"ruleId":{"type":"string","description":"RuleId. Use an identifier returned by Wesley."},"ruleIds":{"type":"array","items":{"type":"string"},"description":"RuleIds. Use identifiers returned by Wesley."}},"additionalProperties":true}}}}}},"/api/setup-guide-interactions":{"get":{"operationId":"get_setup_guide_interactions","tags":["Setup Guide Interactions"],"summary":"Retrieve Setup Guide Interactions","description":"Retrieve Setup Guide Interactions.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `filter`, `offset`, `placement`.\n\nSource handler: `pages/api/setup-guide-interactions.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-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":"filter","in":"query","required":false,"description":"Filter filter or option.","schema":{"type":"string","description":"Filter filter or option."}},{"name":"offset","in":"query","required":false,"description":"Offset filter or option.","schema":{"type":"integer","description":"Offset filter or option."}},{"name":"placement","in":"query","required":false,"description":"Placement filter or option.","schema":{"type":"string","description":"Placement filter or option."}}]},"post":{"operationId":"post_setup_guide_interactions","tags":["Setup Guide Interactions"],"summary":"Execute Setup Guide Interactions","description":"Execute Setup Guide Interactions.\n\nRequires authenticated internal-admin privileges.\n\nAccepts a personal API key as `Authorization: Bearer wsy_user_...`. Uses the key owner's current Wesley permissions.\n\nJSON body keys used by this method: `clientId`, `events`, `placement`.\n\nCommon query parameters: `filter`, `offset`, `placement`.\n\nSource handler: `pages/api/setup-guide-interactions.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,"parameters":[{"name":"filter","in":"query","required":false,"description":"Filter filter or option.","schema":{"type":"string","description":"Filter filter or option."}},{"name":"offset","in":"query","required":false,"description":"Offset filter or option.","schema":{"type":"integer","description":"Offset filter or option."}},{"name":"placement","in":"query","required":false,"description":"Placement filter or option.","schema":{"type":"string","description":"Placement filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `clientId`, `events`, `placement`.","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."},"events":{"type":"string","description":"Events payload field."},"placement":{"type":"string","description":"Placement payload field."}},"additionalProperties":true}}}}}},"/api/shared-files":{"get":{"operationId":"get_shared_files","tags":["Shared Files"],"summary":"Retrieve Shared Files","description":"Retrieve Shared Files.\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: `folderId`, `search`.\n\nSource handler: `pages/api/shared-files/index.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":"folderId","in":"query","required":false,"description":"FolderId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"FolderId. Use an identifier returned by Wesley."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}]},"post":{"operationId":"post_shared_files","tags":["Shared Files"],"summary":"Execute Shared Files","description":"Execute Shared Files.\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: `folderId`, `search`.\n\nSource handler: `pages/api/shared-files/index.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":"folderId","in":"query","required":false,"description":"FolderId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"FolderId. Use an identifier returned by Wesley."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}}],"requestBody":{"required":true,"description":"Manage scoped Shared Files records. Actions: `create-folder`, `create-files`, `create-files-for-link-review`, `confirm-auto-links`, `create-document-entries`, `delete-files`, `move-documents`/`move-files`, and `move-folder`. For files attached to the current AI Agent turn, first call `POST /api/agent/attachments/prepare-shared-files` with their listed IDs or exact filenames, then pass its returned `files` here with action `create-files`; never embed bytes or data URLs. File URL, size, and type are read from storage, and `ai-agent-attachments/` paths must belong to the current AI Agent turn. `originalName` must end in .pdf, .png, .jpg, .jpeg, .csv, .tsv, .xls, or .xlsx; other names return 400. Source handler: `pages/api/shared-files/index.ts`.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"action":{"type":"string","enum":["create-folder"]},"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"parentId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":120}},"required":["action","companyId","name"]},{"type":"object","properties":{"action":{"type":"string","enum":["create-files"]},"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"folderId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"origin":{"default":"firm","type":"string","enum":["firm","client"]},"autoMatch":{"default":false,"type":"boolean"},"accountId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"linkTarget":{"type":"object","properties":{"entityType":{"type":"string","enum":["external_transaction","journal_entry","vendor"]},"entityId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["entityType","entityId"]},"files":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"blobPathname":{"type":"string","minLength":1},"originalName":{"type":"string","minLength":1,"maxLength":255},"sha256":{"nullable":true,"type":"string","pattern":"^[a-fA-F0-9]{64}$"},"tags":{"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"description":{"nullable":true,"type":"string","maxLength":500}},"required":["blobPathname","originalName"]}}},"required":["action","companyId","files"]},{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"folderId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"origin":{"default":"firm","type":"string","enum":["firm","client"]},"accountId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"files":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"blobPathname":{"type":"string","minLength":1},"originalName":{"type":"string","minLength":1,"maxLength":255},"sha256":{"nullable":true,"type":"string","pattern":"^[a-fA-F0-9]{64}$"},"tags":{"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"description":{"nullable":true,"type":"string","maxLength":500}},"required":["blobPathname","originalName"]}},"action":{"type":"string","enum":["create-files-for-link-review"]}},"required":["companyId","files","action"]},{"type":"object","properties":{"action":{"type":"string","enum":["confirm-auto-links"]},"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"attachToQuickBooks":{"default":true,"type":"boolean"},"links":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"documentId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"entityType":{"type":"string","enum":["external_transaction","journal_entry","journal_line"]},"entityId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["documentId","entityType","entityId"]}}},"required":["action","companyId","links"]},{"type":"object","properties":{"action":{"type":"string","enum":["create-document-entries"]},"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"entries":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"documentId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accountId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"categoryAccountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"payee":{"nullable":true,"type":"object","properties":{"type":{"type":"string","enum":["vendor","customer","employee"]},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"nullable":true,"type":"string","maxLength":255}},"required":["type","id"]},"recognizedDocument":{"type":"object","properties":{"documentType":{"nullable":true,"type":"string","maxLength":40},"transactionDirection":{"type":"string","enum":["money_in","money_out","unknown"]},"merchantName":{"nullable":true,"type":"string","maxLength":255},"transactionDate":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"periodStart":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"periodEnd":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"matchingDateStart":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"matchingDateEnd":{"nullable":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"totalAmount":{"nullable":true,"type":"number","minimum":0},"currency":{"nullable":true,"type":"string","maxLength":10},"documentNumber":{"nullable":true,"type":"string","maxLength":255},"summary":{"nullable":true,"type":"string","maxLength":2000},"confidence":{"type":"number","minimum":0,"maximum":1},"model":{"nullable":true,"type":"string","maxLength":120},"source":{"type":"string","enum":["gemini","local"]}},"required":["documentType","merchantName","transactionDate","periodStart","periodEnd","matchingDateStart","matchingDateEnd","totalAmount","currency","documentNumber","summary","confidence","model","source"]}},"required":["documentId","categoryAccountId","recognizedDocument"]}}},"required":["action","companyId","entries"]},{"type":"object","properties":{"action":{"type":"string","enum":["delete-files"]},"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"documentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["action","companyId","documentIds"]},{"type":"object","properties":{"action":{"type":"string","enum":["move-documents","move-files"]},"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"documentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"targetFolderId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["action","companyId","documentIds"]},{"type":"object","properties":{"action":{"type":"string","enum":["move-folder"]},"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"folderId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"targetParentId":{"nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["action","companyId","folderId"]}]}}}}}},"/api/shared-files/delete-issued-check-statement":{"post":{"operationId":"post_shared_files_delete_issued_check_statement","tags":["Shared Files"],"summary":"Execute Shared Files Delete Issued Check Statement","description":"Execute Shared Files Delete Issued Check Statement.\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: `documentId`, `linkedTransactionAction`.\n\nSource handler: `pages/api/shared-files/delete-issued-check-statement.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: `documentId`, `linkedTransactionAction`.","content":{"application/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"DocumentId. Use an identifier returned by Wesley."},"linkedTransactionAction":{"type":"string","description":"LinkedTransactionAction payload field."}},"additionalProperties":true}}}}}},"/api/shared-files/documents/{id}/download":{"get":{"operationId":"get_shared_files_documents_id_download","tags":["Shared Files"],"summary":"Retrieve Shared Files Documents By Id Download","description":"Retrieve Shared Files Documents By Id Download.\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\nDownload endpoint that may return file payloads or download metadata.\n\nCommon query parameters: `firmVendorPreview`, `inline`.\n\nSource handler: `pages/api/shared-files/documents/[id]/download.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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"firmVendorPreview","in":"query","required":false,"description":"FirmVendorPreview filter or option.","schema":{"type":"string","description":"FirmVendorPreview filter or option."}},{"name":"inline","in":"query","required":false,"description":"Inline filter or option.","schema":{"type":"string","description":"Inline filter or option."}}]}},"/api/shopify/callback":{"get":{"operationId":"get_shopify_callback","tags":["Shopify"],"summary":"Retrieve Shopify Callback","description":"Retrieve Shopify Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `code`, `error`, `error_description`, `shop`, `state`.\n\nSource handler: `pages/api/shopify/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"error_description","in":"query","required":false,"description":"Error Description filter or option.","schema":{"type":"string","description":"Error Description filter or option."}},{"name":"shop","in":"query","required":false,"description":"Shop filter or option.","schema":{"type":"string","description":"Shop filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/shopify/connect":{"post":{"operationId":"post_shopify_connect","tags":["Shopify"],"summary":"Execute Shopify Connect","description":"Execute Shopify Connect.\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: `clientId`, `orgId`, `returnTo`, `shop`.\n\nSource handler: `pages/api/shopify/connect.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":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"orgId","in":"query","required":false,"description":"OrgId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"OrgId. Use an identifier returned by Wesley."}},{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}},{"name":"shop","in":"query","required":false,"description":"Shop filter or option.","schema":{"type":"string","description":"Shop filter or option."}}]}},"/api/shopify/connection":{"get":{"operationId":"get_shopify_connection","tags":["Shopify"],"summary":"Retrieve Shopify Connection","description":"Retrieve Shopify Connection.\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/shopify/connection.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"}}]},"delete":{"operationId":"delete_shopify_connection","tags":["Shopify"],"summary":"Delete Shopify Connection","description":"Delete Shopify Connection.\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/shopify/connection.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/shopify/webhooks":{"post":{"operationId":"post_shopify_webhooks","tags":["Shopify"],"summary":"Execute Shopify Webhooks","description":"Execute Shopify Webhooks.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/shopify/webhooks.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/smartvault/upload":{"post":{"operationId":"post_smartvault_upload","tags":["Smartvault"],"summary":"Execute Smartvault Upload","description":"Execute Smartvault Upload.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/smartvault/upload.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/square/automation-values":{"get":{"operationId":"get_square_automation_values","tags":["Square"],"summary":"Retrieve Square Automation Values","description":"Retrieve Square Automation Values.\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: `scheduledFor`.\n\nSource handler: `pages/api/square/automation-values.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":"scheduledFor","in":"query","required":false,"description":"ScheduledFor filter or option.","schema":{"type":"string","description":"ScheduledFor filter or option."}}]}},"/api/square/callback":{"get":{"operationId":"get_square_callback","tags":["Square"],"summary":"Retrieve Square Callback","description":"Retrieve Square Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `code`, `error`, `error_description`, `state`.\n\nSource handler: `pages/api/square/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"error_description","in":"query","required":false,"description":"Error Description filter or option.","schema":{"type":"string","description":"Error Description filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/square/connect":{"post":{"operationId":"post_square_connect","tags":["Square"],"summary":"Execute Square Connect","description":"Execute Square Connect.\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: `clientId`, `orgId`, `returnTo`.\n\nSource handler: `pages/api/square/connect.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":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"orgId","in":"query","required":false,"description":"OrgId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"OrgId. Use an identifier returned by Wesley."}},{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}}]}},"/api/square/connection":{"get":{"operationId":"get_square_connection","tags":["Square"],"summary":"Retrieve Square Connection","description":"Retrieve Square Connection.\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/square/connection.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"}}]},"delete":{"operationId":"delete_square_connection","tags":["Square"],"summary":"Delete Square Connection","description":"Delete Square Connection.\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/square/connection.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/stripe/callback":{"get":{"operationId":"get_stripe_callback","tags":["Stripe"],"summary":"Retrieve Stripe Callback","description":"Retrieve Stripe Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `state`.\n\nSource handler: `pages/api/stripe/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]},"post":{"operationId":"post_stripe_callback","tags":["Stripe"],"summary":"Execute Stripe Callback","description":"Execute Stripe Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `state`.\n\nSource handler: `pages/api/stripe/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/stripe/connect":{"get":{"operationId":"get_stripe_connect","tags":["Stripe"],"summary":"Retrieve Stripe Connect","description":"Retrieve Stripe Connect.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/stripe/connect.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_stripe_connect","tags":["Stripe"],"summary":"Execute Stripe Connect","description":"Execute Stripe Connect.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/stripe/connect.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/stripe/connection":{"get":{"operationId":"get_stripe_connection","tags":["Stripe"],"summary":"Retrieve Stripe Connection","description":"Retrieve Stripe Connection.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/stripe/connection.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_stripe_connection","tags":["Stripe"],"summary":"Execute Stripe Connection","description":"Execute Stripe Connection.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/stripe/connection.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/tags/import":{"get":{"operationId":"get_tags_import","tags":["Tags"],"summary":"Retrieve Tags Import","description":"Retrieve Tags Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `page`, `search`, `sourceCompanyId`, `type`.\n\nSource handler: `pages/api/tags/import.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":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"sourceCompanyId","in":"query","required":false,"description":"SourceCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}},{"name":"type","in":"query","required":false,"description":"Type filter or option.","schema":{"type":"string","description":"Type filter or option."}}]},"post":{"operationId":"post_tags_import","tags":["Tags"],"summary":"Import Tags Import","description":"Import Tags Import.\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\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nCommon query parameters: `page`, `search`, `sourceCompanyId`, `type`.\n\nSource handler: `pages/api/tags/import.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":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search filter or option."}},{"name":"sourceCompanyId","in":"query","required":false,"description":"SourceCompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"SourceCompanyId. Use an identifier returned by Wesley."}},{"name":"type","in":"query","required":false,"description":"Type filter or option.","schema":{"type":"string","description":"Type filter or option."}}]}},"/api/tax-line-mappings":{"put":{"operationId":"put_tax_line_mappings","tags":["Tax Line Mappings"],"summary":"Replace Tax Line Mappings","description":"Replace Tax Line Mappings.\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/tax-line-mappings.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/tax-lines":{"get":{"operationId":"get_tax_lines","tags":["Tax Lines"],"summary":"Retrieve Tax Lines","description":"Retrieve Tax Lines.\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: `federalReturnForm`, `federal_return_form`, `taxYear`.\n\nSource handler: `pages/api/tax-lines.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":"federalReturnForm","in":"query","required":false,"description":"FederalReturnForm filter or option.","schema":{"type":"string","description":"FederalReturnForm filter or option."}},{"name":"federal_return_form","in":"query","required":false,"description":"Federal Return Form filter or option.","schema":{"type":"string","description":"Federal Return Form filter or option."}},{"name":"taxYear","in":"query","required":false,"description":"TaxYear filter or option.","schema":{"type":"string","description":"TaxYear filter or option."}}]}},"/api/team/info":{"get":{"operationId":"get_team_info","tags":["Team"],"summary":"Retrieve Team Info","description":"Retrieve Team Info.\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/team/info.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/team/update":{"put":{"operationId":"put_team_update","tags":["Team"],"summary":"Replace Team Update","description":"Replace Team Update.\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/team/update.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/tiktok-shop/callback":{"get":{"operationId":"get_tiktok_shop_callback","tags":["Tiktok Shop"],"summary":"Retrieve Tiktok Shop Callback","description":"Retrieve Tiktok Shop Callback.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `auth_code`, `code`, `error`, `error_description`, `locale`, `shop_region`, `state`.\n\nSource handler: `pages/api/tiktok-shop/callback.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"auth_code","in":"query","required":false,"description":"Auth Code filter or option.","schema":{"type":"string","description":"Auth Code filter or option."}},{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"error_description","in":"query","required":false,"description":"Error Description filter or option.","schema":{"type":"string","description":"Error Description filter or option."}},{"name":"locale","in":"query","required":false,"description":"Locale filter or option.","schema":{"type":"string","description":"Locale filter or option."}},{"name":"shop_region","in":"query","required":false,"description":"Shop Region filter or option.","schema":{"type":"string","description":"Shop Region filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/tiktok-shop/connect":{"post":{"operationId":"post_tiktok_shop_connect","tags":["Tiktok Shop"],"summary":"Execute Tiktok Shop Connect","description":"Execute Tiktok Shop Connect.\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: `clientId`, `orgId`, `returnTo`.\n\nSource handler: `pages/api/tiktok-shop/connect.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":"clientId","in":"query","required":false,"description":"ClientId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"ClientId. Use an identifier returned by Wesley."}},{"name":"orgId","in":"query","required":false,"description":"OrgId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"OrgId. Use an identifier returned by Wesley."}},{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}}]}},"/api/tiktok-shop/connection":{"get":{"operationId":"get_tiktok_shop_connection","tags":["Tiktok Shop"],"summary":"Retrieve Tiktok Shop Connection","description":"Retrieve Tiktok Shop Connection.\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/tiktok-shop/connection.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"}}]},"delete":{"operationId":"delete_tiktok_shop_connection","tags":["Tiktok Shop"],"summary":"Delete Tiktok Shop Connection","description":"Delete Tiktok Shop Connection.\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/tiktok-shop/connection.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/timecards":{"get":{"operationId":"get_timecards","tags":["Timecards"],"summary":"Retrieve Timecards","description":"Retrieve Timecards.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_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: `endDate`, `page`, `pageSize`, `periodUnit`, `startDate`, `status`, `userId`.\n\nSource handler: `pages/api/timecards/index.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-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-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"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":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"pageSize","in":"query","required":false,"description":"PageSize filter or option.","schema":{"type":"integer","description":"PageSize filter or option."}},{"name":"periodUnit","in":"query","required":false,"description":"PeriodUnit filter or option.","schema":{"type":"string","description":"PeriodUnit 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}},{"name":"userId","in":"query","required":false,"description":"UserId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"UserId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_timecards","tags":["Timecards"],"summary":"Execute Timecards","description":"Execute Timecards.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nCommon query parameters: `endDate`, `page`, `pageSize`, `periodUnit`, `startDate`, `status`, `userId`.\n\nSource handler: `pages/api/timecards/index.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"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":"page","in":"query","required":false,"description":"Page filter or option.","schema":{"type":"integer","description":"Page filter or option."}},{"name":"pageSize","in":"query","required":false,"description":"PageSize filter or option.","schema":{"type":"integer","description":"PageSize filter or option."}},{"name":"periodUnit","in":"query","required":false,"description":"PeriodUnit filter or option.","schema":{"type":"string","description":"PeriodUnit 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}},{"name":"userId","in":"query","required":false,"description":"UserId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"UserId. Use an identifier returned by Wesley."}}]}},"/api/timecards/{id}":{"get":{"operationId":"get_timecards_id","tags":["Timecards"],"summary":"Retrieve Timecards By Id","description":"Retrieve Timecards By Id.\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\nSource handler: `pages/api/timecards/[id].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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/timecards/{id}/entries":{"get":{"operationId":"get_timecards_id_entries","tags":["Timecards"],"summary":"Retrieve Timecards By Id Entries","description":"Retrieve Timecards By Id Entries.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/timecards/[id]/entries.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-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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]},"post":{"operationId":"post_timecards_id_entries","tags":["Timecards"],"summary":"Execute Timecards By Id Entries","description":"Execute Timecards By Id Entries.\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\nJSON body keys used by this method: `activityCode`, `activityCodeId`, `activity_code`, `activity_code_id`, `billable`, `companyId`, `company_id`, `minutes`, `note`, `workDate`, `work_date`.\n\nSource handler: `pages/api/timecards/[id]/entries.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `activityCode`, `activityCodeId`, `activity_code`, `activity_code_id`, `billable`, `companyId`, `company_id`, `minutes`, `note`, `workDate`, `work_date`.","content":{"application/json":{"schema":{"type":"object","properties":{"activityCode":{"type":"string","description":"ActivityCode payload field."},"activityCodeId":{"type":"string","description":"ActivityCodeId. Use an identifier returned by Wesley."},"activity_code":{"type":"string","description":"Activity Code payload field."},"activity_code_id":{"type":"string","description":"Activity Code Id. Use an identifier returned by Wesley."},"billable":{"type":"string","description":"Billable payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"company_id":{"type":"string","description":"Company Id. Use an identifier returned by Wesley."},"minutes":{"type":"string","description":"Minutes payload field."},"note":{"type":"string","description":"Note payload field."},"workDate":{"type":"string","format":"date","description":"WorkDate in YYYY-MM-DD format."},"work_date":{"type":"string","format":"date","description":"Work Date in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/timecards/{id}/reopen":{"post":{"operationId":"post_timecards_id_reopen","tags":["Timecards"],"summary":"Execute Timecards By Id Reopen","description":"Execute Timecards By Id Reopen.\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\nSource handler: `pages/api/timecards/[id]/reopen/index.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,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/timecards/entries":{"post":{"operationId":"post_timecards_entries","tags":["Timecards"],"summary":"Execute Timecards Entries","description":"Execute Timecards Entries.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nJSON body keys used by this method: `activityCode`, `activityCodeId`, `activity_code`, `activity_code_id`, `billable`, `companyId`, `company_id`, `minutes`, `note`, `periodUnit`, `period_unit`, `userId`, ....\n\nSource handler: `pages/api/timecards/entries/index.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `activityCode`, `activityCodeId`, `activity_code`, `activity_code_id`, `billable`, `companyId`, `company_id`, `minutes`, `note`, `periodUnit`, `period_unit`, `userId`, ....","content":{"application/json":{"schema":{"type":"object","properties":{"activityCode":{"type":"string","description":"ActivityCode payload field."},"activityCodeId":{"type":"string","description":"ActivityCodeId. Use an identifier returned by Wesley."},"activity_code":{"type":"string","description":"Activity Code payload field."},"activity_code_id":{"type":"string","description":"Activity Code Id. Use an identifier returned by Wesley."},"billable":{"type":"string","description":"Billable payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"company_id":{"type":"string","description":"Company Id. Use an identifier returned by Wesley."},"minutes":{"type":"string","description":"Minutes payload field."},"note":{"type":"string","description":"Note payload field."},"periodUnit":{"type":"string","description":"PeriodUnit payload field."},"period_unit":{"type":"string","description":"Period Unit payload field."},"userId":{"type":"string","description":"UserId. Use an identifier returned by Wesley."},"user_id":{"type":"string","description":"User Id. Use an identifier returned by Wesley."},"workDate":{"type":"string","format":"date","description":"WorkDate in YYYY-MM-DD format."},"work_date":{"type":"string","format":"date","description":"Work Date in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/timecards/entries/{entryId}":{"patch":{"operationId":"patch_timecards_entries_entryid","tags":["Timecards"],"summary":"Update Timecards Entries By EntryId","description":"Update Timecards Entries By EntryId.\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\nJSON body keys used by this method: `activityCode`, `activityCodeId`, `activity_code`, `activity_code_id`, `billable`, `companyId`, `company_id`, `minutes`, `note`, `workDate`, `work_date`.\n\nSource handler: `pages/api/timecards/entries/[entryId]/index.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,"parameters":[{"name":"entryId","in":"path","required":true,"description":"Path identifier: entryId","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `activityCode`, `activityCodeId`, `activity_code`, `activity_code_id`, `billable`, `companyId`, `company_id`, `minutes`, `note`, `workDate`, `work_date`.","content":{"application/json":{"schema":{"type":"object","properties":{"activityCode":{"type":"string","description":"ActivityCode payload field."},"activityCodeId":{"type":"string","description":"ActivityCodeId. Use an identifier returned by Wesley."},"activity_code":{"type":"string","description":"Activity Code payload field."},"activity_code_id":{"type":"string","description":"Activity Code Id. Use an identifier returned by Wesley."},"billable":{"type":"string","description":"Billable payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"company_id":{"type":"string","description":"Company Id. Use an identifier returned by Wesley."},"minutes":{"type":"string","description":"Minutes payload field."},"note":{"type":"string","description":"Note payload field."},"workDate":{"type":"string","format":"date","description":"WorkDate in YYYY-MM-DD format."},"work_date":{"type":"string","format":"date","description":"Work Date in YYYY-MM-DD format."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_timecards_entries_entryid","tags":["Timecards"],"summary":"Delete Timecards Entries By EntryId","description":"Delete Timecards Entries By EntryId.\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\nJSON body keys used by this method: `activityCode`, `activityCodeId`, `activity_code`, `activity_code_id`, `billable`, `companyId`, `company_id`, `minutes`, `note`, `workDate`, `work_date`.\n\nSource handler: `pages/api/timecards/entries/[entryId]/index.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,"parameters":[{"name":"entryId","in":"path","required":true,"description":"Path identifier: entryId","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `activityCode`, `activityCodeId`, `activity_code`, `activity_code_id`, `billable`, `companyId`, `company_id`, `minutes`, `note`, `workDate`, `work_date`.","content":{"application/json":{"schema":{"type":"object","properties":{"activityCode":{"type":"string","description":"ActivityCode payload field."},"activityCodeId":{"type":"string","description":"ActivityCodeId. Use an identifier returned by Wesley."},"activity_code":{"type":"string","description":"Activity Code payload field."},"activity_code_id":{"type":"string","description":"Activity Code Id. Use an identifier returned by Wesley."},"billable":{"type":"string","description":"Billable payload field."},"companyId":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."},"company_id":{"type":"string","description":"Company Id. Use an identifier returned by Wesley."},"minutes":{"type":"string","description":"Minutes payload field."},"note":{"type":"string","description":"Note payload field."},"workDate":{"type":"string","format":"date","description":"WorkDate in YYYY-MM-DD format."},"work_date":{"type":"string","format":"date","description":"Work Date in YYYY-MM-DD format."}},"additionalProperties":true}}}}}},"/api/timecards/summary":{"get":{"operationId":"get_timecards_summary","tags":["Timecards"],"summary":"Get Timecards Summary","description":"Get Timecards 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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nCommon query parameters: `billable`, `companyId`, `endDate`, `periodUnit`, `startDate`, `status`, `userId`.\n\nSource handler: `pages/api/timecards/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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}},{"name":"billable","in":"query","required":false,"description":"Billable filter or option.","schema":{"type":"string","description":"Billable filter or option."}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}},{"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":"periodUnit","in":"query","required":false,"description":"PeriodUnit filter or option.","schema":{"type":"string","description":"PeriodUnit 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}},{"name":"userId","in":"query","required":false,"description":"UserId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"UserId. Use an identifier returned by Wesley."}}]}},"/api/timecards/timer-events":{"post":{"operationId":"post_timecards_timer_events","tags":["Timecards"],"summary":"Execute Timecards Timer Events","description":"Execute Timecards Timer Events.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/timecards/timer-events.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/transaction-suggestions":{"get":{"operationId":"get_transaction_suggestions","tags":["Transaction Suggestions"],"summary":"Retrieve Transaction Suggestions","description":"Retrieve Transaction 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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `include_all_totals`, `include_groups`, `include_singletons`, `page`, `page_size`.\n\nSource handler: `pages/api/transaction-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."},"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":"include_all_totals","in":"query","required":false,"description":"Include All Totals flag.","schema":{"type":"boolean","description":"Include All Totals flag."}},{"name":"include_groups","in":"query","required":false,"description":"Include Groups flag.","schema":{"type":"boolean","description":"Include Groups flag."}},{"name":"include_singletons","in":"query","required":false,"description":"Include Singletons flag.","schema":{"type":"boolean","description":"Include Singletons flag."}},{"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."}}]}},"/api/transaction-suggestions/review":{"post":{"operationId":"post_transaction_suggestions_review","tags":["Transaction Suggestions"],"summary":"Generate Transaction Suggestions Review","description":"Generate Transaction Suggestions Review.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nSource handler: `pages/api/transaction-suggestions/review.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":{"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."}}]}},"/api/tutorials/recommend":{"post":{"operationId":"post_tutorials_recommend","tags":["Tutorials"],"summary":"Generate Tutorials Recommend","description":"Generate Tutorials Recommend.\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\nAI-assisted endpoint; validate model outputs before committing irreversible mutations.\n\nJSON body keys used by this method: `query`.\n\nSource handler: `pages/api/tutorials/recommend.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `query`.","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"Query payload field."}},"additionalProperties":true}}}}}},"/api/tutorials/request":{"post":{"operationId":"post_tutorials_request","tags":["Tutorials"],"summary":"Execute Tutorials Request","description":"Execute Tutorials Request.\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\nJSON body keys used by this method: `organizationId`, `query`.\n\nSource handler: `pages/api/tutorials/request.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,"requestBody":{"required":false,"description":"JSON payload. Common keys: `organizationId`, `query`.","content":{"application/json":{"schema":{"type":"object","properties":{"organizationId":{"type":"string","description":"OrganizationId. Use an identifier returned by Wesley."},"query":{"type":"string","description":"Query payload field."}},"additionalProperties":true}}}}}},"/api/users/accounting-firms":{"get":{"operationId":"get_users_accounting_firms","tags":["Users"],"summary":"Get Users Accounting Firms","description":"Get Users Accounting Firms.\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\nSource handler: `pages/api/users/accounting-firms.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}},"/api/users/action-approvals":{"get":{"operationId":"get_users_action_approvals","tags":["Users"],"summary":"Retrieve Users Action Approvals","description":"Retrieve Users Action Approvals.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `id`.\n\nSource handler: `pages/api/users/action-approvals/index.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-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":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_users_action_approvals","tags":["Users"],"summary":"Execute Users Action Approvals","description":"Execute Users Action Approvals.\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\nCommon query parameters: `id`.\n\nSource handler: `pages/api/users/action-approvals/index.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,"parameters":[{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}}]}},"/api/users/action-approvals/{id}":{"post":{"operationId":"post_users_action_approvals_id","tags":["Users"],"summary":"Execute Users Action Approvals By Id","description":"Execute Users Action Approvals By Id.\n\nRequires the owner's interactive Clerk session. Personal API keys cannot manage API keys.\n\nSource handler: `pages/api/users/action-approvals/[id].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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}]}},"/api/users/api-keys":{"get":{"operationId":"get_users_api_keys","tags":["Users"],"summary":"Retrieve Users Api Keys","description":"Retrieve Users Api Keys.\n\nRequires the owner's interactive Clerk session. Personal API keys cannot manage API keys.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/users/api-keys/index.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":[]}],"x-wesley-personal-api-key":false,"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."}},"post":{"operationId":"post_users_api_keys","tags":["Users"],"summary":"Execute Users Api Keys","description":"Execute Users Api Keys.\n\nRequires the owner's interactive Clerk session. Personal API keys cannot manage API keys.\n\nSource handler: `pages/api/users/api-keys/index.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":[]}],"x-wesley-personal-api-key":false,"requestBody":{"required":true,"description":"JSON payload generated from the route's exported Zod contract. Source handler: `pages/api/users/api-keys/index.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"expiresInDays":{"default":90,"nullable":true,"type":"integer","minimum":1,"maximum":90}},"required":["name"],"additionalProperties":false}}}}}},"/api/users/api-keys/{keyId}":{"delete":{"operationId":"delete_users_api_keys_keyid","tags":["Users"],"summary":"Delete Users Api Keys By KeyId","description":"Delete Users Api Keys By KeyId.\n\nRequires the owner's interactive Clerk session. Personal API keys cannot manage API keys.\n\nSource handler: `pages/api/users/api-keys/[keyId].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":[]}],"x-wesley-personal-api-key":false,"parameters":[{"name":"keyId","in":"path","required":true,"description":"Path identifier: keyId","schema":{"type":"string"}}]}},"/api/users/api-keys/revoke-all":{"post":{"operationId":"post_users_api_keys_revoke_all","tags":["Users"],"summary":"Execute Users Api Keys Revoke All","description":"Execute Users Api Keys Revoke All.\n\nRequires the owner's interactive Clerk session. Personal API keys cannot manage API keys.\n\nSource handler: `pages/api/users/api-keys/revoke-all.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":[]}],"x-wesley-personal-api-key":false}},"/api/users/banking-view-preferences":{"get":{"operationId":"get_users_banking_view_preferences","tags":["Users"],"summary":"Retrieve Users Banking View Preferences","description":"Retrieve Users Banking View Preferences.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/users/banking-view-preferences.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-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."}},"patch":{"operationId":"patch_users_banking_view_preferences","tags":["Users"],"summary":"Update Users Banking View Preferences","description":"Update Users Banking View Preferences.\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\nSource handler: `pages/api/users/banking-view-preferences.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}},"/api/users/check-accounting-firm-access":{"get":{"operationId":"get_users_check_accounting_firm_access","tags":["Users"],"summary":"Get Users Check Accounting Firm Access","description":"Get Users Check Accounting Firm Access.\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\nSupports accounting-firm context via header `x-accounting-firm-id` or query/body `accountingFirmId`/`accounting_firm_id`.\n\nSource handler: `pages/api/users/check-accounting-firm-access.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,"parameters":[{"name":"x-accounting-firm-id","in":"header","required":false,"description":"Accounting firm context UUID.","schema":{"type":"string","format":"uuid"}},{"name":"accountingFirmId","in":"query","required":false,"description":"Accounting firm context UUID (camelCase variant).","schema":{"type":"string","format":"uuid"}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting firm context UUID (snake_case variant).","schema":{"type":"string","format":"uuid"}}]}},"/api/users/clients-column-widths":{"get":{"operationId":"get_users_clients_column_widths","tags":["Users"],"summary":"Retrieve Users Clients Column Widths","description":"Retrieve Users Clients Column Widths.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/users/clients-column-widths.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-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."}},"patch":{"operationId":"patch_users_clients_column_widths","tags":["Users"],"summary":"Update Users Clients Column Widths","description":"Update Users Clients Column Widths.\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\nSource handler: `pages/api/users/clients-column-widths.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}},"/api/users/companies":{"get":{"operationId":"get_users_companies","tags":["Users"],"summary":"Retrieve Users Companies","description":"Retrieve Users Companies.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `accountingFirmId`, `accounting_firm_id`, `search`, `sort_direction`, `sort_field`, `status`.\n\nSource handler: `pages/api/users/companies.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-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":"accountingFirmId","in":"query","required":false,"description":"AccountingFirmId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"AccountingFirmId. Use an identifier returned by Wesley."}},{"name":"accounting_firm_id","in":"query","required":false,"description":"Accounting Firm Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Accounting Firm Id. Use an identifier returned by Wesley."}},{"name":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status filter or option."}}]}},"/api/users/current-company":{"get":{"operationId":"get_users_current_company","tags":["Users"],"summary":"Retrieve Users Current Company","description":"Retrieve Users Current Company.\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\nSupports optional company scoping via header `x-company-id`, query `companyId`/`company_id`, or body `companyId`/`company_id`.\n\nSource handler: `pages/api/users/current-company.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,"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/users/inbox":{"get":{"operationId":"get_users_inbox","tags":["Users"],"summary":"Retrieve Users Inbox","description":"Retrieve Users Inbox.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `cursor`, `limit`.\n\nSource handler: `pages/api/users/inbox.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-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":"cursor","in":"query","required":false,"description":"Cursor filter or option.","schema":{"type":"string","description":"Cursor filter or option."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]},"patch":{"operationId":"patch_users_inbox","tags":["Users"],"summary":"Update Users Inbox","description":"Update Users Inbox.\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\nCommon query parameters: `cursor`, `limit`.\n\nSource handler: `pages/api/users/inbox.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,"parameters":[{"name":"cursor","in":"query","required":false,"description":"Cursor filter or option.","schema":{"type":"string","description":"Cursor filter or option."}},{"name":"limit","in":"query","required":false,"description":"Limit filter or option.","schema":{"type":"integer","description":"Limit filter or option."}}]}},"/api/users/inbox-media":{"get":{"operationId":"get_users_inbox_media","tags":["Users"],"summary":"Retrieve Users Inbox Media","description":"Retrieve Users Inbox Media.\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\nCommon query parameters: `notificationId`, `pathname`.\n\nSource handler: `pages/api/users/inbox-media.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,"parameters":[{"name":"notificationId","in":"query","required":false,"description":"NotificationId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"NotificationId. Use an identifier returned by Wesley."}},{"name":"pathname","in":"query","required":false,"description":"Pathname filter or option.","schema":{"type":"string","description":"Pathname filter or option."}}]}},"/api/users/inbox-preferences":{"get":{"operationId":"get_users_inbox_preferences","tags":["Users"],"summary":"Retrieve Users Inbox Preferences","description":"Retrieve Users Inbox Preferences.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/users/inbox-preferences.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-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."}},"patch":{"operationId":"patch_users_inbox_preferences","tags":["Users"],"summary":"Update Users Inbox Preferences","description":"Update Users Inbox Preferences.\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\nSource handler: `pages/api/users/inbox-preferences.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}},"/api/users/inbox/{notificationId}":{"get":{"operationId":"get_users_inbox_notificationid","tags":["Users"],"summary":"Retrieve Users Inbox By NotificationId","description":"Retrieve Users Inbox By NotificationId.\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\nSource handler: `pages/api/users/inbox/[notificationId].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,"parameters":[{"name":"notificationId","in":"path","required":true,"description":"Path identifier: notificationId","schema":{"type":"string"}}]}},"/api/users/journal-entry-columns":{"get":{"operationId":"get_users_journal_entry_columns","tags":["Users"],"summary":"Retrieve Users Journal Entry Columns","description":"Retrieve Users Journal Entry Columns.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/users/journal-entry-columns.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-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."}},"patch":{"operationId":"patch_users_journal_entry_columns","tags":["Users"],"summary":"Update Users Journal Entry Columns","description":"Update Users Journal Entry Columns.\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\nSource handler: `pages/api/users/journal-entry-columns.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}},"/api/users/me":{"get":{"operationId":"get_users_me","tags":["Users"],"summary":"Retrieve Users Me","description":"Retrieve Users Me.\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\nSource handler: `pages/api/users/me.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}},"/api/users/operations":{"get":{"operationId":"get_users_operations","tags":["Users"],"summary":"Retrieve Users Operations","description":"Retrieve Users Operations.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `operationId`.\n\nSource handler: `pages/api/users/operations.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-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":"operationId","in":"query","required":false,"description":"OperationId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"OperationId. Use an identifier returned by Wesley."}}]}},"/api/users/table-preferences":{"get":{"operationId":"get_users_table_preferences","tags":["Users"],"summary":"Retrieve Users Table Preferences","description":"Retrieve Users Table Preferences.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `key`.\n\nSource handler: `pages/api/users/table-preferences.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-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":"key","in":"query","required":false,"description":"Key filter or option.","schema":{"type":"string","description":"Key filter or option."}}]},"patch":{"operationId":"patch_users_table_preferences","tags":["Users"],"summary":"Update Users Table Preferences","description":"Update Users Table Preferences.\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\nCommon query parameters: `key`.\n\nSource handler: `pages/api/users/table-preferences.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,"parameters":[{"name":"key","in":"query","required":false,"description":"Key filter or option.","schema":{"type":"string","description":"Key filter or option."}}]}},"/api/vendors":{"get":{"operationId":"get_vendors","tags":["Vendors"],"summary":"Retrieve Vendors","description":"Retrieve Vendors.\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: `all`, `compliance_filter`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`, `vendor_ids`, `view`.\n\nSource handler: `pages/api/vendors.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All filter or option."}},{"name":"compliance_filter","in":"query","required":false,"description":"Compliance Filter filter or option.","schema":{"type":"string","description":"Compliance Filter 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status 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."}},{"name":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]},"post":{"operationId":"post_vendors","tags":["Vendors"],"summary":"Execute Vendors","description":"Execute Vendors.\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: `all`, `compliance_filter`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`, `vendor_ids`, `view`.\n\nSource handler: `pages/api/vendors.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All filter or option."}},{"name":"compliance_filter","in":"query","required":false,"description":"Compliance Filter filter or option.","schema":{"type":"string","description":"Compliance Filter 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status 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."}},{"name":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}],"requestBody":{"required":true,"description":"Create a vendor with contact, address, account reference, and payment terms. Source handler: `pages/api/vendors.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyName":{"nullable":true,"type":"string","maxLength":255},"contactName":{"nullable":true,"type":"string","maxLength":255},"email":{"nullable":true,"anyOf":[{"type":"string","maxLength":255,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","enum":[""]}]},"phone":{"nullable":true,"type":"string","maxLength":255},"alternatePhone":{"nullable":true,"type":"string","maxLength":255},"fax":{"nullable":true,"type":"string","maxLength":255},"addressLine1":{"nullable":true,"type":"string","maxLength":255},"addressLine2":{"nullable":true,"type":"string","maxLength":255},"addressCity":{"nullable":true,"type":"string","maxLength":255},"addressState":{"nullable":true,"type":"string","maxLength":255},"addressPostalCode":{"nullable":true,"type":"string","maxLength":255},"addressCountry":{"nullable":true,"type":"string","maxLength":255},"accountNumber":{"description":"The customer's account reference with this vendor; preserve leading zeros.","nullable":true,"type":"string","maxLength":255},"defaultAccountId":{"description":"Default coding account for this payee. Any active chart account in the same company is allowed, including liabilities and equity. Defaults fill empty account selections; they do not recode existing entries.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expenseAccountId":{"description":"Deprecated alias for defaultAccountId; accepts any active chart account.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"paymentTermsName":{"nullable":true,"type":"string","maxLength":255},"paymentTermsDays":{"description":"Number of days until payment is due; 0 means due on receipt.","nullable":true,"type":"integer","minimum":0,"maximum":2147483647},"creditLimit":{"nullable":true,"type":"number","minimum":0,"maximum":10000000000000000},"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"displayName":{"type":"string","minLength":1,"maxLength":500},"note":{"nullable":true,"type":"string","maxLength":1000},"isActive":{"type":"boolean"},"vendor1099":{}},"required":["displayName"]}}}}},"put":{"operationId":"put_vendors","tags":["Vendors"],"summary":"Replace Vendors","description":"Replace Vendors.\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: `all`, `compliance_filter`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`, `vendor_ids`, `view`.\n\nSource handler: `pages/api/vendors.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All filter or option."}},{"name":"compliance_filter","in":"query","required":false,"description":"Compliance Filter filter or option.","schema":{"type":"string","description":"Compliance Filter 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status 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."}},{"name":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}],"requestBody":{"required":true,"description":"Update only supplied vendor fields. Use null to clear optional contact and payment fields. Existing bulk 1099 status updates accept ids and vendor1099Status. Source handler: `pages/api/vendors.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyName":{"nullable":true,"type":"string","maxLength":255},"contactName":{"nullable":true,"type":"string","maxLength":255},"email":{"nullable":true,"anyOf":[{"type":"string","maxLength":255,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","enum":[""]}]},"phone":{"nullable":true,"type":"string","maxLength":255},"alternatePhone":{"nullable":true,"type":"string","maxLength":255},"fax":{"nullable":true,"type":"string","maxLength":255},"addressLine1":{"nullable":true,"type":"string","maxLength":255},"addressLine2":{"nullable":true,"type":"string","maxLength":255},"addressCity":{"nullable":true,"type":"string","maxLength":255},"addressState":{"nullable":true,"type":"string","maxLength":255},"addressPostalCode":{"nullable":true,"type":"string","maxLength":255},"addressCountry":{"nullable":true,"type":"string","maxLength":255},"accountNumber":{"description":"The customer's account reference with this vendor; preserve leading zeros.","nullable":true,"type":"string","maxLength":255},"defaultAccountId":{"description":"Default coding account for this payee. Any active chart account in the same company is allowed, including liabilities and equity. Defaults fill empty account selections; they do not recode existing entries.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expenseAccountId":{"description":"Deprecated alias for defaultAccountId; accepts any active chart account.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"paymentTermsName":{"nullable":true,"type":"string","maxLength":255},"paymentTermsDays":{"description":"Number of days until payment is due; 0 means due on receipt.","nullable":true,"type":"integer","minimum":0,"maximum":2147483647},"creditLimit":{"nullable":true,"type":"number","minimum":0,"maximum":10000000000000000},"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"displayName":{"type":"string","minLength":1,"maxLength":500},"note":{"nullable":true,"type":"string","maxLength":1000},"isActive":{"type":"boolean"},"vendor1099":{},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"ids":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"vendor1099Status":{"type":"string","enum":["not_tracked","candidate","missing_w9","missing_tin","ready"]}}}}}}},"delete":{"operationId":"delete_vendors","tags":["Vendors"],"summary":"Delete Vendors","description":"Delete Vendors.\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: `all`, `compliance_filter`, `page`, `page_size`, `search`, `sort_direction`, `sort_field`, `status`, `vendor_ids`, `view`.\n\nSource handler: `pages/api/vendors.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":"all","in":"query","required":false,"description":"All filter or option.","schema":{"type":"string","description":"All filter or option."}},{"name":"compliance_filter","in":"query","required":false,"description":"Compliance Filter filter or option.","schema":{"type":"string","description":"Compliance Filter 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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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":"status","in":"query","required":false,"description":"Status filter or option.","schema":{"type":"string","description":"Status 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."}},{"name":"view","in":"query","required":false,"description":"View filter or option.","schema":{"type":"string","description":"View filter or option."}}]}},"/api/vendors/{id}":{"get":{"operationId":"get_vendors_id","tags":["Vendors"],"summary":"Retrieve Vendors By Id","description":"Retrieve Vendors By Id.\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: `entries_page`, `entries_page_size`.\n\nSource handler: `pages/api/vendors/[id].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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"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":"entries_page","in":"query","required":false,"description":"Entries Page filter or option.","schema":{"type":"string","description":"Entries Page filter or option."}},{"name":"entries_page_size","in":"query","required":false,"description":"Entries Page Size filter or option.","schema":{"type":"string","description":"Entries Page Size filter or option."}}]}},"/api/vendors/{id}/w9-files":{"get":{"operationId":"get_vendors_id_w9_files","tags":["Vendors"],"summary":"Retrieve Vendors By Id W9 Files","description":"Retrieve Vendors By Id W9 Files.\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\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `companyId`.\n\nSource handler: `pages/api/vendors/[id]/w9-files.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-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":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}},{"name":"companyId","in":"query","required":false,"description":"CompanyId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"CompanyId. Use an identifier returned by Wesley."}}]}},"/api/vendors/bulk":{"post":{"operationId":"post_vendors_bulk","tags":["Vendors"],"summary":"Execute Vendors Bulk","description":"Execute Vendors Bulk.\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\nSource handler: `pages/api/vendors/bulk.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":true,"description":"Import vendors with contact, address, account number, payment terms, days due, credit limit, default coding account, and notes using vendors objects. Default coding account accepts any active chart account in the same company, including assets, liabilities, equity, revenue, and expenses; use defaultAccountId (or the legacy expenseAccountId alias), or expenseAccount with an exact account code or unique full name. Net 30/Net 60 terms infer days due when no day count is supplied. displayNames remains available for name-only imports. Existing active vendors are returned unchanged with inserted: false; use PUT /api/vendors to explicitly update their details. Duplicate names combine matching values and complementary blank fields; conflicting nonblank details are rejected. A name owned by a customer, employee, or inactive vendor returns 409 PAYEE_NAME_ALREADY_EXISTS with conflicts and creates no vendors. Resolve or exclude conflicting rows before resubmitting; do not retry the unchanged batch. Source handler: `pages/api/vendors/bulk.ts`.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"company_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"vendors":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"companyName":{"nullable":true,"type":"string","maxLength":255},"contactName":{"nullable":true,"type":"string","maxLength":255},"email":{"nullable":true,"anyOf":[{"type":"string","maxLength":255,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","enum":[""]}]},"phone":{"nullable":true,"type":"string","maxLength":255},"alternatePhone":{"nullable":true,"type":"string","maxLength":255},"fax":{"nullable":true,"type":"string","maxLength":255},"addressLine1":{"nullable":true,"type":"string","maxLength":255},"addressLine2":{"nullable":true,"type":"string","maxLength":255},"addressCity":{"nullable":true,"type":"string","maxLength":255},"addressState":{"nullable":true,"type":"string","maxLength":255},"addressPostalCode":{"nullable":true,"type":"string","maxLength":255},"addressCountry":{"nullable":true,"type":"string","maxLength":255},"accountNumber":{"description":"The customer's account reference with this vendor; preserve leading zeros.","nullable":true,"type":"string","maxLength":255},"defaultAccountId":{"description":"Default coding account for this payee. Any active chart account in the same company is allowed, including liabilities and equity. Defaults fill empty account selections; they do not recode existing entries.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expenseAccountId":{"description":"Deprecated alias for defaultAccountId; accepts any active chart account.","nullable":true,"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"paymentTermsName":{"nullable":true,"type":"string","maxLength":255},"paymentTermsDays":{"description":"Number of days until payment is due; 0 means due on receipt.","nullable":true,"type":"integer","minimum":0,"maximum":2147483647},"creditLimit":{"nullable":true,"type":"number","minimum":0,"maximum":10000000000000000},"displayName":{"type":"string","minLength":1,"maxLength":500},"note":{"nullable":true,"type":"string","maxLength":1000},"expenseAccount":{"description":"Any active chart account code or unique full name in this company, including liabilities and equity. Alternatively supply defaultAccountId; expenseAccountId remains a legacy alias.","nullable":true,"type":"string","maxLength":255}},"required":["displayName"],"additionalProperties":false}},"displayNames":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}}}}}}}}},"/api/vendors/file-upload":{"get":{"operationId":"get_vendors_file_upload","tags":["Vendors"],"summary":"Retrieve Vendors File Upload","description":"Retrieve Vendors File Upload.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `vendorId`.\n\nSource handler: `pages/api/vendors/file-upload.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"vendorId","in":"query","required":false,"description":"VendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_vendors_file_upload","tags":["Vendors"],"summary":"Execute Vendors File Upload","description":"Execute Vendors File Upload.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `vendorId`.\n\nSource handler: `pages/api/vendors/file-upload.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"vendorId","in":"query","required":false,"description":"VendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."}}]}},"/api/vendors/merge":{"post":{"operationId":"post_vendors_merge","tags":["Vendors"],"summary":"Execute Vendors Merge","description":"Execute Vendors Merge.\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/vendors/merge.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/vendors/summary":{"get":{"operationId":"get_vendors_summary","tags":["Vendors"],"summary":"Get Vendors Summary","description":"Get Vendors 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`, `search`, `startDate`, `start_date`, `status`.\n\nSource handler: `pages/api/vendors/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":"search","in":"query","required":false,"description":"Search filter or option.","schema":{"type":"string","description":"Search 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."}}]}},"/api/vendors/w9-upload":{"get":{"operationId":"get_vendors_w9_upload","tags":["Vendors"],"summary":"Retrieve Vendors W9 Upload","description":"Retrieve Vendors W9 Upload.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `id`, `original`, `requestFiles`, `vendorId`.\n\nSource handler: `pages/api/vendors/w9-upload.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"original","in":"query","required":false,"description":"Original filter or option.","schema":{"type":"string","description":"Original filter or option."}},{"name":"requestFiles","in":"query","required":false,"description":"RequestFiles filter or option.","schema":{"type":"string","description":"RequestFiles filter or option."}},{"name":"vendorId","in":"query","required":false,"description":"VendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."}}]},"post":{"operationId":"post_vendors_w9_upload","tags":["Vendors"],"summary":"Execute Vendors W9 Upload","description":"Execute Vendors W9 Upload.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `action`, `id`, `review`, `revision`, `save`, `size`, `vendorId`, `vendorIds`.\n\nCommon query parameters: `id`, `original`, `requestFiles`, `vendorId`.\n\nSource handler: `pages/api/vendors/w9-upload.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"query","required":false,"description":"Id. Use an identifier returned by Wesley.","schema":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},{"name":"original","in":"query","required":false,"description":"Original filter or option.","schema":{"type":"string","description":"Original filter or option."}},{"name":"requestFiles","in":"query","required":false,"description":"RequestFiles filter or option.","schema":{"type":"string","description":"RequestFiles filter or option."}},{"name":"vendorId","in":"query","required":false,"description":"VendorId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`, `id`, `review`, `revision`, `save`, `size`, `vendorId`, `vendorIds`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."},"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."},"review":{"type":"string","description":"Review payload field."},"revision":{"type":"string","description":"Revision payload field."},"save":{"type":"string","description":"Save payload field."},"size":{"type":"integer","description":"Size payload field."},"vendorId":{"type":"string","description":"VendorId. Use an identifier returned by Wesley."},"vendorIds":{"type":"array","items":{"type":"string"},"description":"VendorIds. Use identifiers returned by Wesley."}},"additionalProperties":true}}}}}},"/api/w9-requests/{id}":{"post":{"operationId":"post_w9_requests_id","tags":["W9 Requests"],"summary":"Execute W9 Requests By Id","description":"Execute W9 Requests By Id.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `action`.\n\nSource handler: `pages/api/w9-requests/[id].ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"id","in":"path","required":true,"description":"Path identifier: id","schema":{"type":"string"}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `action`.","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action payload field."}},"additionalProperties":true}}}}}},"/api/watch-tower/alertmanager":{"post":{"operationId":"post_watch_tower_alertmanager","tags":["Watch Tower"],"summary":"Execute Watch Tower Alertmanager","description":"Execute Watch Tower Alertmanager.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/watch-tower/alertmanager.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/watch-tower/ingest":{"post":{"operationId":"post_watch_tower_ingest","tags":["Watch Tower"],"summary":"Execute Watch Tower Ingest","description":"Execute Watch Tower Ingest.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/watch-tower/ingest.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/watch-tower/snooze":{"get":{"operationId":"get_watch_tower_snooze","tags":["Watch Tower"],"summary":"Retrieve Watch Tower Snooze","description":"Retrieve Watch Tower Snooze.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/watch-tower/snooze.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"post":{"operationId":"post_watch_tower_snooze","tags":["Watch Tower"],"summary":"Execute Watch Tower Snooze","description":"Execute Watch Tower Snooze.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/watch-tower/snooze.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/webhooks/intercom-support":{"post":{"operationId":"post_webhooks_intercom_support","tags":["Webhooks"],"summary":"Execute Webhooks Intercom Support","description":"Execute Webhooks Intercom Support.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/webhooks/intercom-support.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/webhooks/vercel-log-drain":{"post":{"operationId":"post_webhooks_vercel_log_drain","tags":["Webhooks"],"summary":"Execute Webhooks Vercel Log Drain","description":"Execute Webhooks Vercel Log Drain.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/webhooks/vercel-log-drain.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/webhooks/vercel-trace-drain":{"post":{"operationId":"post_webhooks_vercel_trace_drain","tags":["Webhooks"],"summary":"Execute Webhooks Vercel Trace Drain","description":"Execute Webhooks Vercel Trace Drain.\n\nNo user authentication is explicitly enforced in this handler.\n\nWebhook endpoint intended for third-party callbacks.\n\nSource handler: `pages/api/webhooks/vercel-trace-drain.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/wesley-chat/document-uploaded":{"post":{"operationId":"post_wesley_chat_document_uploaded","tags":["Wesley Chat"],"summary":"Execute Wesley Chat Document Uploaded","description":"Execute Wesley Chat Document Uploaded.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/wesley-chat/document-uploaded.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/workspace-search":{"get":{"operationId":"get_workspace_search","tags":["Workspace Search"],"summary":"Retrieve Workspace Search","description":"Retrieve Workspace Search.\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: `orgId`, `query`.\n\nSource handler: `pages/api/workspace-search.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":"orgId","in":"query","required":false,"description":"OrgId. Use an identifier returned by Wesley.","schema":{"type":"string","description":"OrgId. Use an identifier returned by Wesley."}},{"name":"query","in":"query","required":false,"description":"Query filter or option.","schema":{"type":"string","description":"Query filter or option."}}]}},"/api/xero/callback":{"get":{"operationId":"get_xero_callback","tags":["Xero"],"summary":"Retrieve Xero Callback","description":"Retrieve Xero Callback.\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\nCommon query parameters: `code`, `error`, `state`.\n\nSource handler: `pages/api/xero/callback.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,"parameters":[{"name":"code","in":"query","required":false,"description":"Code filter or option.","schema":{"type":"string","description":"Code filter or option."}},{"name":"error","in":"query","required":false,"description":"Error filter or option.","schema":{"type":"string","description":"Error filter or option."}},{"name":"state","in":"query","required":false,"description":"State filter or option.","schema":{"type":"string","description":"State filter or option."}}]}},"/api/xero/connect":{"get":{"operationId":"get_xero_connect","tags":["Xero"],"summary":"Retrieve Xero Connect","description":"Retrieve Xero Connect.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `returnTo`.\n\nSource handler: `pages/api/xero/connect.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}}]},"post":{"operationId":"post_xero_connect","tags":["Xero"],"summary":"Execute Xero Connect","description":"Execute Xero Connect.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `returnTo`.\n\nCommon query parameters: `returnTo`.\n\nSource handler: `pages/api/xero/connect.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"returnTo","in":"query","required":false,"description":"ReturnTo filter or option.","schema":{"type":"string","description":"ReturnTo filter or option."}}],"requestBody":{"required":false,"description":"JSON payload. Common keys: `returnTo`.","content":{"application/json":{"schema":{"type":"object","properties":{"returnTo":{"type":"string","description":"ReturnTo payload field."}},"additionalProperties":true}}}}}},"/api/xero/connection":{"get":{"operationId":"get_xero_connection","tags":["Xero"],"summary":"Retrieve Xero Connection","description":"Retrieve Xero Connection.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/xero/connection.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false},"delete":{"operationId":"delete_xero_connection","tags":["Xero"],"summary":"Delete Xero Connection","description":"Delete Xero Connection.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/xero/connection.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/xero/import-books":{"get":{"operationId":"get_xero_import_books","tags":["Xero"],"summary":"Retrieve Xero Import Books","description":"Retrieve Xero Import Books.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nCommon query parameters: `cutoffDate`, `importScope`, `startDate`.\n\nSource handler: `pages/api/xero/import-books.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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":"cutoffDate","in":"query","required":false,"description":"CutoffDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"CutoffDate in YYYY-MM-DD format."}},{"name":"importScope","in":"query","required":false,"description":"ImportScope filter or option.","schema":{"type":"string","description":"ImportScope 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."}}]},"post":{"operationId":"post_xero_import_books","tags":["Xero"],"summary":"Import Xero Import Books","description":"Import Xero Import Books.\n\nNo user authentication is explicitly enforced in this handler.\n\nImport endpoint; expect validation and data-quality errors for malformed inputs.\n\nCommon query parameters: `cutoffDate`, `importScope`, `startDate`.\n\nSource handler: `pages/api/xero/import-books.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"cutoffDate","in":"query","required":false,"description":"CutoffDate in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"CutoffDate in YYYY-MM-DD format."}},{"name":"importScope","in":"query","required":false,"description":"ImportScope filter or option.","schema":{"type":"string","description":"ImportScope 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."}}]}},"/api/xero/local-records":{"get":{"operationId":"get_xero_local_records","tags":["Xero"],"summary":"Retrieve Xero Local Records","description":"Retrieve Xero Local Records.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/xero/local-records.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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."}}},"/api/xero/records":{"get":{"operationId":"get_xero_records","tags":["Xero"],"summary":"Retrieve Xero Records","description":"Retrieve Xero Records.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/xero/records.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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."}}},"/api/xero/review":{"post":{"operationId":"post_xero_review","tags":["Xero"],"summary":"Execute Xero Review","description":"Execute Xero Review.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `id`.\n\nSource handler: `pages/api/xero/review.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `id`.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"put":{"operationId":"put_xero_review","tags":["Xero"],"summary":"Replace Xero Review","description":"Replace Xero Review.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `id`.\n\nSource handler: `pages/api/xero/review.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `id`.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}},"delete":{"operationId":"delete_xero_review","tags":["Xero"],"summary":"Delete Xero Review","description":"Delete Xero Review.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `id`.\n\nSource handler: `pages/api/xero/review.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `id`.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Id. Use an identifier returned by Wesley."}},"additionalProperties":true}}}}}},"/api/xero/sync":{"post":{"operationId":"post_xero_sync","tags":["Xero"],"summary":"Sync Xero Sync","description":"Sync Xero Sync.\n\nNo user authentication is explicitly enforced in this handler.\n\nJSON body keys used by this method: `resource`.\n\nSource handler: `pages/api/xero/sync.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"requestBody":{"required":false,"description":"JSON payload. Common keys: `resource`.","content":{"application/json":{"schema":{"type":"object","properties":{"resource":{"type":"string","description":"Resource payload field."}},"additionalProperties":true}}}}}},"/api/xero/tenants":{"get":{"operationId":"get_xero_tenants","tags":["Xero"],"summary":"Retrieve Xero Tenants","description":"Retrieve Xero Tenants.\n\nNo user authentication is explicitly enforced in this handler.\n\nCollection/list read endpoint; prefer pagination plus summary/count/aggregate metadata and avoid deriving totals by fetching every page.\n\nSource handler: `pages/api/xero/tenants.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"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."}},"post":{"operationId":"post_xero_tenants","tags":["Xero"],"summary":"Execute Xero Tenants","description":"Execute Xero Tenants.\n\nNo user authentication is explicitly enforced in this handler.\n\nSource handler: `pages/api/xero/tenants.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false}},"/api/xero/verification":{"get":{"operationId":"get_xero_verification","tags":["Xero"],"summary":"Retrieve Xero Verification","description":"Retrieve Xero Verification.\n\nNo user authentication is explicitly enforced in this handler.\n\nCommon query parameters: `date`, `startDate`.\n\nSource handler: `pages/api/xero/verification.ts` (auto-discovered).","responses":{"200":{"description":"Request succeeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Bad request"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"500":{"description":"Unexpected server error"}},"security":[],"x-wesley-personal-api-key":false,"parameters":[{"name":"date","in":"query","required":false,"description":"Date in YYYY-MM-DD format.","schema":{"type":"string","format":"date","description":"Date in YYYY-MM-DD format."}},{"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."}}]}}}}