{"openapi":"3.0.3","info":{"title":"Base Assist API","version":"1.0.0","description":"Catalog generated from top-level `app.use` mounts in `index.js`. Each path is a **router prefix**; most resources expose many nested routes (for example `GET /clients`, `GET /clients/:id`, `PATCH ...`). Use **Try it out** with a bearer token or session as in your app. For request/response schemas, add explicit OpenAPI path fragments (e.g. merge objects in `build-spec.js` or maintain YAML/JSON under `src/openapi/`)."},"servers":[{"url":"https://baseassist.link","description":"Current host"}],"tags":[{"name":"Meta","description":"Service metadata"},{"name":"Webhooks","description":"Inbound provider webhooks"},{"name":"Api Reference","description":"Mount: `/api-reference`"},{"name":"Auth","description":"Mount: `/auth`"},{"name":"Q","description":"Mount: `/q`"},{"name":"Contact Cards Public","description":"Mount: `/contact-cards-public`"},{"name":"Voice","description":"Mount: `/voice`"},{"name":"Email","description":"Mount: `/email`"},{"name":"Integrations Quickbooks Auth","description":"Mount: `/integrations/quickbooks/auth`"},{"name":"Help Desk","description":"Mount: `/help-desk`"},{"name":"Public Invoices","description":"Mount: `/public/invoices`"},{"name":"Public Quotes","description":"Mount: `/public/quotes`"},{"name":"Access Tokens","description":"Mount: `/access-tokens`"},{"name":"Billing Statements","description":"Mount: `/billing-statements`"},{"name":"Clients","description":"Mount: `/clients`"},{"name":"Locations","description":"Mount: `/locations`"},{"name":"Departments","description":"Mount: `/departments`"},{"name":"Hr","description":"Mount: `/hr`"},{"name":"Time Report Batches","description":"Mount: `/time-report-batches`"},{"name":"Time Off","description":"Mount: `/time-off`"},{"name":"Organizations","description":"Mount: `/organizations`"},{"name":"Users","description":"Mount: `/users`"},{"name":"Forms","description":"Mount: `/forms`"},{"name":"Form Responses","description":"Mount: `/form-responses`"},{"name":"Time","description":"Mount: `/time`"},{"name":"Time Reports","description":"Mount: `/time-reports`"},{"name":"Projects","description":"Mount: `/projects`"},{"name":"Project Templates","description":"Mount: `/project-templates`"},{"name":"Tasks","description":"Mount: `/tasks`"},{"name":"Channels","description":"Mount: `/channels`"},{"name":"Tickets","description":"Mount: `/tickets`"},{"name":"Search","description":"Mount: `/search`"},{"name":"Financial Documents","description":"Mount: `/financial-documents`"},{"name":"Financial Document Templates","description":"Mount: `/financial-document-templates`"},{"name":"Financial Classes","description":"Mount: `/financial-classes`"},{"name":"Chart Of Accounts","description":"Mount: `/chart-of-accounts`"},{"name":"General Ledger Entries","description":"Mount: `/general-ledger-entries`"},{"name":"Accounting Overview","description":"Mount: `/accounting-overview`"},{"name":"Accounting Reports","description":"Mount: `/accounting-reports`"},{"name":"Accounting Settings","description":"Mount: `/accounting-settings`"},{"name":"Org Payouts","description":"Mount: `/org-payouts`"},{"name":"Bank Feed","description":"Mount: `/bank-feed`"},{"name":"Services","description":"Mount: `/services`"},{"name":"Signatures","description":"Mount: `/signatures`"},{"name":"Rate Sheets","description":"Mount: `/rate-sheets`"},{"name":"Activities","description":"Mount: `/activities`"},{"name":"Files","description":"Mount: `/files`"},{"name":"Workspaces","description":"Mount: `/workspaces`"},{"name":"Notifications","description":"Mount: `/notifications`"},{"name":"Qr Codes","description":"Mount: `/qr-codes`"},{"name":"Expenses","description":"Mount: `/expenses`"},{"name":"Expense Cards","description":"Mount: `/expense-cards`"},{"name":"Expense Reports","description":"Mount: `/expense-reports`"},{"name":"Expense Types","description":"Mount: `/expense-types`"},{"name":"Expense Allocations","description":"Mount: `/expense-allocations`"},{"name":"Expense Batches","description":"Mount: `/expense-batches`"},{"name":"Allocation Templates","description":"Mount: `/allocation-templates`"},{"name":"Card Accounts","description":"Mount: `/card-accounts`"},{"name":"Email Inbound","description":"Mount: `/email-inbound`"},{"name":"Plaid","description":"Mount: `/plaid`"},{"name":"Expenses Categories","description":"Mount: `/expenses-categories`"},{"name":"Conversations","description":"Mount: `/conversations`"},{"name":"Messages","description":"Mount: `/messages`"},{"name":"Push Tokens","description":"Mount: `/push-tokens`"},{"name":"Link Preview","description":"Mount: `/link-preview`"},{"name":"Sites","description":"Mount: `/sites`"},{"name":"Templates","description":"Mount: `/templates`"},{"name":"Documents","description":"Mount: `/documents`"},{"name":"Releases","description":"Mount: `/releases`"},{"name":"Contact Lists","description":"Mount: `/contact-lists`"},{"name":"Campaigns","description":"Mount: `/campaigns`"},{"name":"Phones","description":"Mount: `/phones`"},{"name":"Phone Numbers","description":"Mount: `/phone-numbers`"},{"name":"Phone Routing","description":"Mount: `/phone-routing`"},{"name":"Contact Cards","description":"Mount: `/contact-cards`"},{"name":"Crm Email Address","description":"Mount: `/crm-email-address`"},{"name":"Vendors","description":"Mount: `/vendors`"},{"name":"Accounts Payable","description":"Mount: `/accounts-payable`"},{"name":"Comments","description":"Mount: `/comments`"},{"name":"Notes","description":"Mount: `/notes`"},{"name":"Notebooks","description":"Mount: `/notebooks`"},{"name":"Support","description":"Mount: `/support`"},{"name":"Integrations","description":"Mount: `/integrations`"}],"paths":{"/auth":{"description":"Public mount. Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /auth"},"post":{"tags":["Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /auth"},"patch":{"tags":["Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /auth"},"put":{"tags":["Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /auth"},"delete":{"tags":["Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /auth"}},"/q":{"description":"Public mount. Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Q"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /q"},"post":{"tags":["Q"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /q"},"patch":{"tags":["Q"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /q"},"put":{"tags":["Q"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /q"},"delete":{"tags":["Q"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /q"}},"/contact-cards-public":{"description":"Public mount. Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Contact Cards Public"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /contact-cards-public"},"post":{"tags":["Contact Cards Public"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /contact-cards-public"},"patch":{"tags":["Contact Cards Public"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /contact-cards-public"},"put":{"tags":["Contact Cards Public"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /contact-cards-public"},"delete":{"tags":["Contact Cards Public"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /contact-cards-public"}},"/voice":{"description":"Public mount. Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Voice"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /voice"},"post":{"tags":["Voice"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /voice"},"patch":{"tags":["Voice"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /voice"},"put":{"tags":["Voice"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /voice"},"delete":{"tags":["Voice"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /voice"}},"/email":{"description":"Stacked routers: includes both unauthenticated and authenticated handlers under this path. See route modules for exact sub-paths.","get":{"tags":["Email"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /email"},"post":{"tags":["Email"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /email"},"patch":{"tags":["Email"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /email"},"put":{"tags":["Email"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /email"},"delete":{"tags":["Email"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /email"}},"/webhooks":{"description":"Public mount. Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Webhooks"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /webhooks"},"post":{"tags":["Webhooks"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /webhooks"},"patch":{"tags":["Webhooks"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /webhooks"},"put":{"tags":["Webhooks"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /webhooks"},"delete":{"tags":["Webhooks"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /webhooks"}},"/integrations/quickbooks/auth":{"description":"Public mount. Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Integrations Quickbooks Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /integrations/quickbooks/auth"},"post":{"tags":["Integrations Quickbooks Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /integrations/quickbooks/auth"},"patch":{"tags":["Integrations Quickbooks Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /integrations/quickbooks/auth"},"put":{"tags":["Integrations Quickbooks Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /integrations/quickbooks/auth"},"delete":{"tags":["Integrations Quickbooks Auth"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /integrations/quickbooks/auth"}},"/help-desk":{"description":"Public mount. Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Help Desk"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /help-desk"},"post":{"tags":["Help Desk"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /help-desk"},"patch":{"tags":["Help Desk"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /help-desk"},"put":{"tags":["Help Desk"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /help-desk"},"delete":{"tags":["Help Desk"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /help-desk"}},"/public/invoices":{"description":"Public mount. Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Public Invoices"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /public/invoices"},"post":{"tags":["Public Invoices"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /public/invoices"},"patch":{"tags":["Public Invoices"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /public/invoices"},"put":{"tags":["Public Invoices"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /public/invoices"},"delete":{"tags":["Public Invoices"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /public/invoices"}},"/public/quotes":{"description":"Public mount. Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Public Quotes"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /public/quotes"},"post":{"tags":["Public Quotes"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /public/quotes"},"patch":{"tags":["Public Quotes"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /public/quotes"},"put":{"tags":["Public Quotes"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /public/quotes"},"delete":{"tags":["Public Quotes"],"security":[],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /public/quotes"}},"/access-tokens":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Access Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /access-tokens"},"post":{"tags":["Access Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /access-tokens"},"patch":{"tags":["Access Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /access-tokens"},"put":{"tags":["Access Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /access-tokens"},"delete":{"tags":["Access Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /access-tokens"}},"/billing-statements":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Billing Statements"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /billing-statements"},"post":{"tags":["Billing Statements"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /billing-statements"},"patch":{"tags":["Billing Statements"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /billing-statements"},"put":{"tags":["Billing Statements"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /billing-statements"},"delete":{"tags":["Billing Statements"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /billing-statements"}},"/clients":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Clients"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /clients"},"post":{"tags":["Clients"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /clients"},"patch":{"tags":["Clients"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /clients"},"put":{"tags":["Clients"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /clients"},"delete":{"tags":["Clients"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /clients"}},"/locations":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Locations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /locations"},"post":{"tags":["Locations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /locations"},"patch":{"tags":["Locations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /locations"},"put":{"tags":["Locations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /locations"},"delete":{"tags":["Locations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /locations"}},"/departments":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Departments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /departments"},"post":{"tags":["Departments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /departments"},"patch":{"tags":["Departments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /departments"},"put":{"tags":["Departments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /departments"},"delete":{"tags":["Departments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /departments"}},"/hr":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Hr"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /hr"},"post":{"tags":["Hr"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /hr"},"patch":{"tags":["Hr"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /hr"},"put":{"tags":["Hr"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /hr"},"delete":{"tags":["Hr"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /hr"}},"/time-report-batches":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Time Report Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /time-report-batches"},"post":{"tags":["Time Report Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /time-report-batches"},"patch":{"tags":["Time Report Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /time-report-batches"},"put":{"tags":["Time Report Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /time-report-batches"},"delete":{"tags":["Time Report Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /time-report-batches"}},"/time-off":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Time Off"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /time-off"},"post":{"tags":["Time Off"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /time-off"},"patch":{"tags":["Time Off"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /time-off"},"put":{"tags":["Time Off"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /time-off"},"delete":{"tags":["Time Off"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /time-off"}},"/organizations":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Organizations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /organizations"},"post":{"tags":["Organizations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /organizations"},"patch":{"tags":["Organizations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /organizations"},"put":{"tags":["Organizations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /organizations"},"delete":{"tags":["Organizations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /organizations"}},"/users":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Users"],"summary":"List users","description":"Paginated users for the current organization (`getAll`). Uses **query parameters only** (no request body). `filter` is parsed from JSON when sent as a string.","security":[{"bearerAuth":[]}],"parameters":[{"name":"filter","in":"query","required":false,"description":"Send JSON in the query string (URL-encoded).","schema":{"type":"string","example":"{\"firstName\":\"Sam\"}"}},{"name":"search","in":"query","required":false,"description":"Case-insensitive match on user first/last name.","schema":{"type":"string","example":"sam"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"example":20}},{"name":"next","in":"query","required":false,"description":"Skip offset for pagination (use the `next` value from the previous response, or `0` to start).","schema":{"type":"integer","minimum":0,"example":0}},{"name":"sort","in":"query","required":false,"description":"Mongoose sort; use a JSON object string when needed (e.g. `{\"lastName\":1}`).","schema":{"type":"string","example":"{\"lastName\":1}"}},{"name":"populate","in":"query","required":false,"description":"Mongoose populate path(s).","schema":{"type":"string","example":"organization"}}],"responses":{"200":{"description":"Paged list","content":{"application/json":{"schema":{"type":"object","required":["items","totalCount","next"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"role":{"type":"string"}}}},"totalCount":{"type":"integer"},"next":{"type":"integer","description":"Pass as the `next` query param to fetch the following page (skip offset)."}}},"example":{"items":[{"_id":"674c5c2b9e8f1a2b3c4d5e6f","firstName":"Sam","lastName":"Taylor","email":"sam@example.com","role":"member"}],"totalCount":42,"next":20}}}},"400":{"description":"Invalid `filter` JSON or missing organization context"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"500":{"description":"Server error"}}},"post":{"tags":["Users"],"summary":"Create a new user","description":"Create a new user (multipart may be used when uploading an avatar).","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"User created"},"401":{"description":"Unauthorized"}}},"patch":{"tags":["Users"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /users"},"put":{"tags":["Users"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /users"},"delete":{"tags":["Users"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /users"}},"/forms":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Forms"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /forms"},"post":{"tags":["Forms"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /forms"},"patch":{"tags":["Forms"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /forms"},"put":{"tags":["Forms"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /forms"},"delete":{"tags":["Forms"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /forms"}},"/form-responses":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Form Responses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /form-responses"},"post":{"tags":["Form Responses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /form-responses"},"patch":{"tags":["Form Responses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /form-responses"},"put":{"tags":["Form Responses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /form-responses"},"delete":{"tags":["Form Responses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /form-responses"}},"/time":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Time"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /time"},"post":{"tags":["Time"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /time"},"patch":{"tags":["Time"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /time"},"put":{"tags":["Time"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /time"},"delete":{"tags":["Time"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /time"}},"/time-reports":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Time Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /time-reports"},"post":{"tags":["Time Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /time-reports"},"patch":{"tags":["Time Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /time-reports"},"put":{"tags":["Time Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /time-reports"},"delete":{"tags":["Time Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /time-reports"}},"/projects":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Projects"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /projects"},"post":{"tags":["Projects"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /projects"},"patch":{"tags":["Projects"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /projects"},"put":{"tags":["Projects"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /projects"},"delete":{"tags":["Projects"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /projects"}},"/project-templates":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Project Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /project-templates"},"post":{"tags":["Project Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /project-templates"},"patch":{"tags":["Project Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /project-templates"},"put":{"tags":["Project Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /project-templates"},"delete":{"tags":["Project Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /project-templates"}},"/tasks":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Tasks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /tasks"},"post":{"tags":["Tasks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /tasks"},"patch":{"tags":["Tasks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /tasks"},"put":{"tags":["Tasks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /tasks"},"delete":{"tags":["Tasks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /tasks"}},"/channels":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Channels"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /channels"},"post":{"tags":["Channels"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /channels"},"patch":{"tags":["Channels"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /channels"},"put":{"tags":["Channels"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /channels"},"delete":{"tags":["Channels"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /channels"}},"/tickets":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Tickets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /tickets"},"post":{"tags":["Tickets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /tickets"},"patch":{"tags":["Tickets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /tickets"},"put":{"tags":["Tickets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /tickets"},"delete":{"tags":["Tickets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /tickets"}},"/search":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Search"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /search"},"post":{"tags":["Search"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /search"},"patch":{"tags":["Search"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /search"},"put":{"tags":["Search"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /search"},"delete":{"tags":["Search"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /search"}},"/financial-documents":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Financial Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /financial-documents"},"post":{"tags":["Financial Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /financial-documents"},"patch":{"tags":["Financial Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /financial-documents"},"put":{"tags":["Financial Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /financial-documents"},"delete":{"tags":["Financial Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /financial-documents"}},"/financial-document-templates":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Financial Document Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /financial-document-templates"},"post":{"tags":["Financial Document Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /financial-document-templates"},"patch":{"tags":["Financial Document Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /financial-document-templates"},"put":{"tags":["Financial Document Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /financial-document-templates"},"delete":{"tags":["Financial Document Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /financial-document-templates"}},"/financial-classes":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Financial Classes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /financial-classes"},"post":{"tags":["Financial Classes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /financial-classes"},"patch":{"tags":["Financial Classes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /financial-classes"},"put":{"tags":["Financial Classes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /financial-classes"},"delete":{"tags":["Financial Classes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /financial-classes"}},"/chart-of-accounts":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Chart Of Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /chart-of-accounts"},"post":{"tags":["Chart Of Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /chart-of-accounts"},"patch":{"tags":["Chart Of Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /chart-of-accounts"},"put":{"tags":["Chart Of Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /chart-of-accounts"},"delete":{"tags":["Chart Of Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /chart-of-accounts"}},"/general-ledger-entries":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["General Ledger Entries"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /general-ledger-entries"},"post":{"tags":["General Ledger Entries"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /general-ledger-entries"},"patch":{"tags":["General Ledger Entries"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /general-ledger-entries"},"put":{"tags":["General Ledger Entries"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /general-ledger-entries"},"delete":{"tags":["General Ledger Entries"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /general-ledger-entries"}},"/accounting-overview":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Accounting Overview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /accounting-overview"},"post":{"tags":["Accounting Overview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /accounting-overview"},"patch":{"tags":["Accounting Overview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /accounting-overview"},"put":{"tags":["Accounting Overview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /accounting-overview"},"delete":{"tags":["Accounting Overview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /accounting-overview"}},"/accounting-reports":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Accounting Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /accounting-reports"},"post":{"tags":["Accounting Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /accounting-reports"},"patch":{"tags":["Accounting Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /accounting-reports"},"put":{"tags":["Accounting Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /accounting-reports"},"delete":{"tags":["Accounting Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /accounting-reports"}},"/accounting-settings":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Accounting Settings"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /accounting-settings"},"post":{"tags":["Accounting Settings"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /accounting-settings"},"patch":{"tags":["Accounting Settings"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /accounting-settings"},"put":{"tags":["Accounting Settings"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /accounting-settings"},"delete":{"tags":["Accounting Settings"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /accounting-settings"}},"/org-payouts":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Org Payouts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /org-payouts"},"post":{"tags":["Org Payouts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /org-payouts"},"patch":{"tags":["Org Payouts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /org-payouts"},"put":{"tags":["Org Payouts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /org-payouts"},"delete":{"tags":["Org Payouts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /org-payouts"}},"/bank-feed":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Bank Feed"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /bank-feed"},"post":{"tags":["Bank Feed"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /bank-feed"},"patch":{"tags":["Bank Feed"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /bank-feed"},"put":{"tags":["Bank Feed"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /bank-feed"},"delete":{"tags":["Bank Feed"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /bank-feed"}},"/services":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Services"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /services"},"post":{"tags":["Services"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /services"},"patch":{"tags":["Services"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /services"},"put":{"tags":["Services"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /services"},"delete":{"tags":["Services"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /services"}},"/signatures":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Signatures"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /signatures"},"post":{"tags":["Signatures"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /signatures"},"patch":{"tags":["Signatures"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /signatures"},"put":{"tags":["Signatures"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /signatures"},"delete":{"tags":["Signatures"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /signatures"}},"/rate-sheets":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Rate Sheets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /rate-sheets"},"post":{"tags":["Rate Sheets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /rate-sheets"},"patch":{"tags":["Rate Sheets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /rate-sheets"},"put":{"tags":["Rate Sheets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /rate-sheets"},"delete":{"tags":["Rate Sheets"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /rate-sheets"}},"/activities":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Activities"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /activities"},"post":{"tags":["Activities"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /activities"},"patch":{"tags":["Activities"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /activities"},"put":{"tags":["Activities"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /activities"},"delete":{"tags":["Activities"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /activities"}},"/files":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Files"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /files"},"post":{"tags":["Files"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /files"},"patch":{"tags":["Files"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /files"},"put":{"tags":["Files"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /files"},"delete":{"tags":["Files"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /files"}},"/workspaces":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Workspaces"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /workspaces"},"post":{"tags":["Workspaces"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /workspaces"},"patch":{"tags":["Workspaces"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /workspaces"},"put":{"tags":["Workspaces"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /workspaces"},"delete":{"tags":["Workspaces"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /workspaces"}},"/notifications":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Notifications"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /notifications"},"post":{"tags":["Notifications"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /notifications"},"patch":{"tags":["Notifications"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /notifications"},"put":{"tags":["Notifications"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /notifications"},"delete":{"tags":["Notifications"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /notifications"}},"/qr-codes":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Qr Codes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /qr-codes"},"post":{"tags":["Qr Codes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /qr-codes"},"patch":{"tags":["Qr Codes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /qr-codes"},"put":{"tags":["Qr Codes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /qr-codes"},"delete":{"tags":["Qr Codes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /qr-codes"}},"/expenses":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Expenses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /expenses"},"post":{"tags":["Expenses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /expenses"},"patch":{"tags":["Expenses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /expenses"},"put":{"tags":["Expenses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /expenses"},"delete":{"tags":["Expenses"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /expenses"}},"/expense-cards":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Expense Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /expense-cards"},"post":{"tags":["Expense Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /expense-cards"},"patch":{"tags":["Expense Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /expense-cards"},"put":{"tags":["Expense Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /expense-cards"},"delete":{"tags":["Expense Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /expense-cards"}},"/expense-reports":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Expense Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /expense-reports"},"post":{"tags":["Expense Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /expense-reports"},"patch":{"tags":["Expense Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /expense-reports"},"put":{"tags":["Expense Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /expense-reports"},"delete":{"tags":["Expense Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /expense-reports"}},"/expense-types":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Expense Types"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /expense-types"},"post":{"tags":["Expense Types"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /expense-types"},"patch":{"tags":["Expense Types"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /expense-types"},"put":{"tags":["Expense Types"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /expense-types"},"delete":{"tags":["Expense Types"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /expense-types"}},"/expense-allocations":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Expense Allocations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /expense-allocations"},"post":{"tags":["Expense Allocations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /expense-allocations"},"patch":{"tags":["Expense Allocations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /expense-allocations"},"put":{"tags":["Expense Allocations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /expense-allocations"},"delete":{"tags":["Expense Allocations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /expense-allocations"}},"/expense-batches":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Expense Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /expense-batches"},"post":{"tags":["Expense Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /expense-batches"},"patch":{"tags":["Expense Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /expense-batches"},"put":{"tags":["Expense Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /expense-batches"},"delete":{"tags":["Expense Batches"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /expense-batches"}},"/allocation-templates":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Allocation Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /allocation-templates"},"post":{"tags":["Allocation Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /allocation-templates"},"patch":{"tags":["Allocation Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /allocation-templates"},"put":{"tags":["Allocation Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /allocation-templates"},"delete":{"tags":["Allocation Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /allocation-templates"}},"/card-accounts":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Card Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /card-accounts"},"post":{"tags":["Card Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /card-accounts"},"patch":{"tags":["Card Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /card-accounts"},"put":{"tags":["Card Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /card-accounts"},"delete":{"tags":["Card Accounts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /card-accounts"}},"/email-inbound":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Email Inbound"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /email-inbound"},"post":{"tags":["Email Inbound"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /email-inbound"},"patch":{"tags":["Email Inbound"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /email-inbound"},"put":{"tags":["Email Inbound"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /email-inbound"},"delete":{"tags":["Email Inbound"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /email-inbound"}},"/plaid":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Plaid"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /plaid"},"post":{"tags":["Plaid"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /plaid"},"patch":{"tags":["Plaid"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /plaid"},"put":{"tags":["Plaid"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /plaid"},"delete":{"tags":["Plaid"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /plaid"}},"/expenses-categories":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Expenses Categories"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /expenses-categories"},"post":{"tags":["Expenses Categories"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /expenses-categories"},"patch":{"tags":["Expenses Categories"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /expenses-categories"},"put":{"tags":["Expenses Categories"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /expenses-categories"},"delete":{"tags":["Expenses Categories"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /expenses-categories"}},"/conversations":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Conversations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /conversations"},"post":{"tags":["Conversations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /conversations"},"patch":{"tags":["Conversations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /conversations"},"put":{"tags":["Conversations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /conversations"},"delete":{"tags":["Conversations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /conversations"}},"/messages":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Messages"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /messages"},"post":{"tags":["Messages"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /messages"},"patch":{"tags":["Messages"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /messages"},"put":{"tags":["Messages"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /messages"},"delete":{"tags":["Messages"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /messages"}},"/push-tokens":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Push Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /push-tokens"},"post":{"tags":["Push Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /push-tokens"},"patch":{"tags":["Push Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /push-tokens"},"put":{"tags":["Push Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /push-tokens"},"delete":{"tags":["Push Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /push-tokens"}},"/link-preview":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Link Preview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /link-preview"},"post":{"tags":["Link Preview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /link-preview"},"patch":{"tags":["Link Preview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /link-preview"},"put":{"tags":["Link Preview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /link-preview"},"delete":{"tags":["Link Preview"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /link-preview"}},"/sites":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Sites"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /sites"},"post":{"tags":["Sites"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /sites"},"patch":{"tags":["Sites"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /sites"},"put":{"tags":["Sites"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /sites"},"delete":{"tags":["Sites"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /sites"}},"/templates":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /templates"},"post":{"tags":["Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /templates"},"patch":{"tags":["Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /templates"},"put":{"tags":["Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /templates"},"delete":{"tags":["Templates"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /templates"}},"/documents":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /documents"},"post":{"tags":["Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /documents"},"patch":{"tags":["Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /documents"},"put":{"tags":["Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /documents"},"delete":{"tags":["Documents"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /documents"}},"/releases":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Releases"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /releases"},"post":{"tags":["Releases"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /releases"},"patch":{"tags":["Releases"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /releases"},"put":{"tags":["Releases"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /releases"},"delete":{"tags":["Releases"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /releases"}},"/contact-lists":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Contact Lists"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /contact-lists"},"post":{"tags":["Contact Lists"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /contact-lists"},"patch":{"tags":["Contact Lists"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /contact-lists"},"put":{"tags":["Contact Lists"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /contact-lists"},"delete":{"tags":["Contact Lists"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /contact-lists"}},"/campaigns":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Campaigns"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /campaigns"},"post":{"tags":["Campaigns"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /campaigns"},"patch":{"tags":["Campaigns"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /campaigns"},"put":{"tags":["Campaigns"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /campaigns"},"delete":{"tags":["Campaigns"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /campaigns"}},"/phones":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Phones"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /phones"},"post":{"tags":["Phones"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /phones"},"patch":{"tags":["Phones"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /phones"},"put":{"tags":["Phones"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /phones"},"delete":{"tags":["Phones"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /phones"}},"/phone-numbers":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Phone Numbers"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /phone-numbers"},"post":{"tags":["Phone Numbers"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /phone-numbers"},"patch":{"tags":["Phone Numbers"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /phone-numbers"},"put":{"tags":["Phone Numbers"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /phone-numbers"},"delete":{"tags":["Phone Numbers"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /phone-numbers"}},"/phone-routing":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Phone Routing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /phone-routing"},"post":{"tags":["Phone Routing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /phone-routing"},"patch":{"tags":["Phone Routing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /phone-routing"},"put":{"tags":["Phone Routing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /phone-routing"},"delete":{"tags":["Phone Routing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /phone-routing"}},"/contact-cards":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Contact Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /contact-cards"},"post":{"tags":["Contact Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /contact-cards"},"patch":{"tags":["Contact Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /contact-cards"},"put":{"tags":["Contact Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /contact-cards"},"delete":{"tags":["Contact Cards"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /contact-cards"}},"/crm-email-address":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Crm Email Address"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /crm-email-address"},"post":{"tags":["Crm Email Address"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /crm-email-address"},"patch":{"tags":["Crm Email Address"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /crm-email-address"},"put":{"tags":["Crm Email Address"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /crm-email-address"},"delete":{"tags":["Crm Email Address"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /crm-email-address"}},"/vendors":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Vendors"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /vendors"},"post":{"tags":["Vendors"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /vendors"},"patch":{"tags":["Vendors"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /vendors"},"put":{"tags":["Vendors"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /vendors"},"delete":{"tags":["Vendors"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /vendors"}},"/accounts-payable":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Accounts Payable"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /accounts-payable"},"post":{"tags":["Accounts Payable"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /accounts-payable"},"patch":{"tags":["Accounts Payable"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /accounts-payable"},"put":{"tags":["Accounts Payable"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /accounts-payable"},"delete":{"tags":["Accounts Payable"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /accounts-payable"}},"/comments":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Comments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /comments"},"post":{"tags":["Comments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /comments"},"patch":{"tags":["Comments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /comments"},"put":{"tags":["Comments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /comments"},"delete":{"tags":["Comments"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /comments"}},"/notes":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Notes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /notes"},"post":{"tags":["Notes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /notes"},"patch":{"tags":["Notes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /notes"},"put":{"tags":["Notes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /notes"},"delete":{"tags":["Notes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /notes"}},"/notebooks":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Notebooks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /notebooks"},"post":{"tags":["Notebooks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /notebooks"},"patch":{"tags":["Notebooks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /notebooks"},"put":{"tags":["Notebooks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /notebooks"},"delete":{"tags":["Notebooks"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /notebooks"}},"/support":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Support"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /support"},"post":{"tags":["Support"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /support"},"patch":{"tags":["Support"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /support"},"put":{"tags":["Support"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /support"},"delete":{"tags":["Support"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /support"}},"/integrations":{"description":"Requires authentication (see `authenticate` middleware). Sub-paths and verbs are defined in the mounted Express router.","get":{"tags":["Integrations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"GET /integrations"},"post":{"tags":["Integrations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"POST /integrations"},"patch":{"tags":["Integrations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PATCH /integrations"},"put":{"tags":["Integrations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"PUT /integrations"},"delete":{"tags":["Integrations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success (response shape depends on sub-path and method)"},"401":{"description":"Unauthorized (session or bearer token required for protected mounts)"},"403":{"description":"Forbidden"},"404":{"description":"Not found"}},"summary":"DELETE /integrations"}},"/":{"get":{"tags":["Meta"],"summary":"Developer landing page","description":"HTML status and links (not JSON).","security":[],"responses":{"200":{"description":"HTML"}}}},"/webhooks/plaid":{"post":{"tags":["Webhooks"],"summary":"Plaid webhook (JSON)","description":"JSON body with raw-body verification for Plaid. Not for API tokens.","security":[],"responses":{"200":{"description":"Acknowledged"},"400":{"description":"Invalid payload or verification failed"}}}},"/webhooks/stripe":{"post":{"tags":["Webhooks"],"summary":"Stripe webhook","description":"Raw JSON body; Stripe signature verification. Not for API tokens.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Acknowledged"},"400":{"description":"Invalid signature or payload"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer token or access token as used by your client (same as authenticated app requests)."}}}}