> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev.setoo.work/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Operation inventory

# Operation Inventory — platform-core / comms-engine / campaign-engine

Task 1.1 audit deliverable. Generated by static analysis of NestJS controllers
(`@Controller`, `@Get`/`@Post`/`@Put`/`@Patch`/`@Delete`/`@All`, `@ApiTags`) since
the three services were not running in this environment (see design.md D3 —
static enumeration is an accepted substitute for the HTTP fetch used at
generation time).

## How this was built

* Enumerated every `*.controller.ts` file in `agentic-os-platform-core/src`,
  `agentic-os-comms-engine/src`, `agentic-os-campaign-engine/src`.
* For each route handler, recorded HTTP method + path (controller base path +
  method path), the effective tag, and the derived `operationId`.
* `operationId` is **not** set explicitly anywhere in any of the three
  codebases (`grep -r operationId` found zero decorator usages). All three
  services call `SwaggerModule.createDocument(app, config)` with no
  `operationIdFactory` override, so `@nestjs/swagger`'s default factory applies:
  `operationId = "${ControllerClassName}_${methodName}"` (no API version is
  configured, so the version suffix branch never applies). Source:
  `@nestjs/swagger/dist/swagger-explorer.js`.
* Tag is the value passed to `@ApiTags(...)` on the controller class. Where a
  controller has **no** `@ApiTags` decorator, `@nestjs/swagger` falls back to
  `autoTagControllers` (default `true` when unset — none of the three
  `DocumentBuilder` configs disable it), which derives the tag as the
  controller class name with a trailing `Controller` stripped
  (`explorers/api-use-tags.explorer.js`). These are marked *(default)* below.
  This default-tag mechanism is confirmed by requirements.md itself, which
  names `Callback` and `Attempt` as tags to hard-exclude — both are
  campaign-engine controllers with no `@ApiTags` decorator.
* Paths include the service's global prefix (`api/v1`) except routes each
  service's `main.ts` explicitly excludes from that prefix (health checks,
  and campaign-engine's root `/`, and comms-engine's `api/whatsapp/webhook`).
  NestJS Swagger's document paths include the global prefix by default
  (no `ignoreGlobalPrefix` option is set in any `swagger.config.ts`), so this
  matches what `GET /api/docs-json` will actually return.

## Count reconciliation vs. requirements.md "measured starting point"

| Service         | Requirements.md (measured) | This audit (static, current code)   | Delta                                                                                                       |
| --------------- | -------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| platform-core   | 180 ops / 146 paths        | **180 ops** / 33 controller classes | 0 — matches                                                                                                 |
| comms-engine    | 192 ops / 130 paths        | **180 ops** / 38 controller classes | **-12** — code has drifted since the doc was measured, or 12 ops were removed/consolidated. See note below. |
| campaign-engine | 55 ops / 40 paths          | **56 ops** / 16 controller classes  | **+1** — see note below                                                                                     |
| **Total**       | **423 unique**             | **416**                             | **-7**                                                                                                      |

Notes on drift (do not force-reconcile to 423 — reporting actual counts per
task instructions):

* comms-engine: 192 → 180 is a meaningful drift (-12 operations). Possible
  causes: routes removed/merged since the requirements doc was written, or
  the original count included routes this audit's static grep pattern missed
  (e.g. decorators split across multiple lines, or a route defined via a
  helper/base class not visible to a single-controller grep). Recommend a
  live `GET /api/docs-json` diff against this file once services are running,
  per task 5.1, to confirm whether this is real drift or an audit gap.
* campaign-engine: 55 → 56. `ServiceInfoController` and `RootController` both
  register a bare `GET` at the app root (one at `/api/v1` via
  `ServiceInfoController`, one at unprefixed `/` via `RootController` in
  `common/health/health.controller.ts`). These are two distinct paths, not a
  duplicate — likely why the measured count differs from the live count by
  exactly one, depending on whether the original measurement's Swagger
  scan included the unprefixed root.
* Path counts (146/130/40) were not independently re-verified in this static
  pass — computing them requires grouping the operations below by unique
  path, which is mechanical from this table but out of scope for the audit
  file itself (task 3's generation script does this against real specs).

## Tag inventory (for task 1.2 classification)

### platform-core (32 tags)

Health, Admin Analytics, Admin Auth, Admin Session, Admin Billing, Admin Health,
Admin Pricing, Admin Tenants, Admin Users, Agent Templates, Logs, Auth, Billing,
Admin Catalog, Favorites, Admin Feature Flags, Feature Flags (internal),
Features, Integrations, Admin Integrations, Internal, Pricing, Profile,
Roadmap, Service Tokens, Telephony Applications, Virtual Numbers, Wallet,
Analytics, Tenants, Testing, Users, API Keys

### comms-engine (33 tags)

Health, agent-widget-customization, widget-preview, agents, analytics,
call-logs, internal/call-logs, InternalCampaignRuntime *(default)*,
internal-callbacks, channels, internal-live-call, internal-whatsapp, chatbot,
Integrations, Internal, knowledge-bases, llm, Prompts *(default)*, ratings,
Service, sessions, stt-providers, Tools *(default)*, transcripts,
tts-providers, internal-voice-languages, voice-languages, voice-numbers,
VoiceProfile *(default)*, internal-voices, voices, webhooks, whatsapp-webhook,
widget

### campaign-engine (14 tags)

Health, Attempt *(default)*, Callback *(default)*, CampaignActions *(default)*,
InternalCampaignRuntime *(default)*, Campaign *(default)*,
ContactList *(default)*, Contact *(default)*, Service,
SmsAgentCampaignInternal *(default)*, SmsAgentCampaign *(default)*,
WhatsAppCampaign *(default)*, WhatsAppInternal *(default)*,
WhatsAppTemplate *(default)*

Total distinct tags across all three specs: **\~74** (some names collide across
services, e.g. `Health`, `Integrations`, `Internal`, `Service` — task 1.2 should
decide whether that's fine per-service or needs disambiguation once merged,
per design.md D2 merge step).

***

## platform-core — 180 operations (33 controllers)

| Method | Path                                                             | Tag                      | operationId                                         |
| ------ | ---------------------------------------------------------------- | ------------------------ | --------------------------------------------------- |
| GET    | /health/live                                                     | Health                   | HealthController\_liveness                          |
| GET    | /health/ready                                                    | Health                   | HealthController\_readiness                         |
| GET    | /api/v1/admin/analytics/detail                                   | Admin Analytics          | AdminAnalyticsController\_globalDetail              |
| GET    | /api/v1/admin/tenants/:id/detail                                 | Admin Analytics          | AdminAnalyticsController\_tenantDetail              |
| GET    | /api/v1/admin/overview                                           | Admin Analytics          | AdminAnalyticsController\_overview                  |
| GET    | /api/v1/admin/usage/tenants                                      | Admin Analytics          | AdminAnalyticsController\_usageByTenant             |
| GET    | /api/v1/admin/usage/tenants/:id                                  | Admin Analytics          | AdminAnalyticsController\_tenantUsage               |
| GET    | /api/v1/admin/analytics/spend-over-time                          | Admin Analytics          | AdminAnalyticsController\_spendOverTime             |
| GET    | /api/v1/admin/analytics/usage-by-component                       | Admin Analytics          | AdminAnalyticsController\_usageByComponent          |
| GET    | /api/v1/admin/analytics/top-tenants                              | Admin Analytics          | AdminAnalyticsController\_topTenants                |
| GET    | /api/v1/admin/analytics/call-volume                              | Admin Analytics          | AdminAnalyticsController\_callVolume                |
| GET    | /api/v1/admin/tenants/:id/analytics/spend-over-time              | Admin Analytics          | AdminAnalyticsController\_tenantSpendOverTime       |
| GET    | /api/v1/admin/tenants/:id/analytics/call-volume                  | Admin Analytics          | AdminAnalyticsController\_tenantCallVolume          |
| POST   | /api/v1/auth/admin/login                                         | Admin Auth               | AdminAuthController\_login                          |
| GET    | /api/v1/auth/admin/mfa/setup                                     | Admin Auth               | AdminAuthController\_getMfaSetup                    |
| POST   | /api/v1/auth/admin/mfa/confirm                                   | Admin Auth               | AdminAuthController\_confirmMfaSetup                |
| POST   | /api/v1/auth/admin/mfa/verify                                    | Admin Auth               | AdminAuthController\_verifyMfa                      |
| DELETE | /api/v1/auth/admin/mfa                                           | Admin Auth               | AdminAuthController\_disableMfa                     |
| POST   | /api/v1/auth/admin/refresh                                       | Admin Auth               | AdminAuthController\_refresh                        |
| POST   | /api/v1/auth/admin/logout                                        | Admin Auth               | AdminAuthController\_logout                         |
| GET    | /api/v1/admin/session                                            | Admin Session            | AdminSessionController\_getSession                  |
| GET    | /api/v1/admin/billing/fx-rates                                   | Admin Billing            | AdminBillingController\_getFxRates                  |
| POST   | /api/v1/admin/billing/:tenantId/adjust                           | Admin Billing            | AdminBillingController\_adjustWallet                |
| GET    | /api/v1/admin/health                                             | Admin Health             | AdminHealthController\_getHealth                    |
| GET    | /api/v1/admin/pricing                                            | Admin Pricing            | AdminPricingController\_findAll                     |
| GET    | /api/v1/admin/pricing/platform-fee                               | Admin Pricing            | AdminPricingController\_getPlatformFee              |
| PUT    | /api/v1/admin/pricing/platform-fee                               | Admin Pricing            | AdminPricingController\_setPlatformFee              |
| POST   | /api/v1/admin/pricing                                            | Admin Pricing            | AdminPricingController\_create                      |
| PATCH  | /api/v1/admin/pricing/:id                                        | Admin Pricing            | AdminPricingController\_update                      |
| DELETE | /api/v1/admin/pricing/:id                                        | Admin Pricing            | AdminPricingController\_deactivate                  |
| GET    | /api/v1/admin/tenants                                            | Admin Tenants            | AdminTenantController\_getTenants                   |
| PATCH  | /api/v1/admin/tenants/:id/status                                 | Admin Tenants            | AdminTenantController\_setTenantStatus              |
| GET    | /api/v1/admin/users                                              | Admin Users              | AdminUsersController\_list                          |
| PATCH  | /api/v1/admin/users/:id                                          | Admin Users              | AdminUsersController\_setActive                     |
| GET    | /api/v1/agent-templates                                          | Agent Templates          | AgentTemplatesController\_findAllActive             |
| POST   | /api/v1/admin/agent-templates                                    | Agent Templates          | AgentTemplatesController\_create                    |
| GET    | /api/v1/admin/agent-templates                                    | Agent Templates          | AgentTemplatesController\_findAll                   |
| PATCH  | /api/v1/admin/agent-templates/:id                                | Agent Templates          | AgentTemplatesController\_update                    |
| DELETE | /api/v1/admin/agent-templates/:id                                | Agent Templates          | AgentTemplatesController\_deactivate                |
| GET    | /api/v1/logs/analytics-results                                   | Logs                     | AnalyticsResultController\_list                     |
| GET    | /api/v1/logs/analytics-results/session/:sessionId                | Logs                     | AnalyticsResultController\_findForSession           |
| GET    | /api/v1/logs/analytics-results/session/:sessionId/:analyticsTool | Logs                     | AnalyticsResultController\_findOne                  |
| POST   | /api/v1/internal/logs/analytics-results                          | Logs                     | InternalAnalyticsResultController\_upsert           |
| POST   | /api/v1/auth/login                                               | Auth                     | AuthController\_login                               |
| POST   | /api/v1/auth/refresh                                             | Auth                     | AuthController\_refresh                             |
| POST   | /api/v1/auth/logout                                              | Auth                     | AuthController\_logout                              |
| POST   | /api/v1/auth/verify-email                                        | Auth                     | AuthController\_verifyEmail                         |
| POST   | /api/v1/auth/resend-verification                                 | Auth                     | AuthController\_resendVerification                  |
| POST   | /api/v1/auth/accept-invite                                       | Auth                     | AuthController\_acceptInvite                        |
| POST   | /api/v1/auth/forgot-password                                     | Auth                     | AuthController\_forgotPassword                      |
| POST   | /api/v1/auth/reset-password                                      | Auth                     | AuthController\_resetPassword                       |
| GET    | /api/v1/billing/wallet                                           | Billing                  | BillingController\_getWallet                        |
| GET    | /api/v1/billing/fx-rate                                          | Billing                  | BillingController\_getFxRate                        |
| GET    | /api/v1/billing/fx-rates                                         | Billing                  | BillingController\_getFxRates                       |
| PATCH  | /api/v1/billing/currency                                         | Billing                  | BillingController\_setCurrency                      |
| POST   | /api/v1/billing/recharge                                         | Billing                  | BillingController\_initiateRecharge                 |
| POST   | /api/v1/billing/purchase                                         | Billing                  | BillingController\_purchase                         |
| POST   | /api/v1/billing/webhooks/stripe                                  | Billing                  | BillingController\_stripeWebhook                    |
| POST   | /api/v1/billing/webhooks/razorpay                                | Billing                  | BillingController\_razorpayWebhook                  |
| POST   | /api/v1/billing/internal/deduct                                  | Billing                  | BillingController\_deductInternal                   |
| POST   | /api/v1/billing/admin/:tenantId/adjust                           | Billing                  | BillingController\_adjustWallet                     |
| GET    | /api/v1/billing/profile                                          | Billing                  | BillingController\_getBillingProfile                |
| POST   | /api/v1/billing/profile                                          | Billing                  | BillingController\_saveBillingProfile               |
| POST   | /api/v1/billing/quote                                            | Billing                  | BillingController\_getTaxQuote                      |
| POST   | /api/v1/billing/checkout                                         | Billing                  | BillingController\_checkout                         |
| GET    | /api/v1/billing/invoices                                         | Billing                  | BillingController\_getInvoices                      |
| GET    | /api/v1/billing/invoices/:id                                     | Billing                  | BillingController\_getInvoiceById                   |
| GET    | /api/v1/billing/call-billing-logs                                | Billing                  | CallBillingLogController\_list                      |
| GET    | /api/v1/billing/call-billing-logs/session/:sessionId             | Billing                  | CallBillingLogController\_getBySession              |
| GET    | /api/v1/internal/billing/call-billing-log/:tenantId/:sessionId   | Billing                  | InternalCallBillingLogController\_getBySession      |
| GET    | /api/v1/admin/catalog/llm-providers                              | Admin Catalog            | CatalogAdminController\_listLlmProviders            |
| GET    | /api/v1/admin/catalog/llm-models                                 | Admin Catalog            | CatalogAdminController\_listLlmModels               |
| POST   | /api/v1/admin/catalog/llm-models                                 | Admin Catalog            | CatalogAdminController\_createLlmModel              |
| PATCH  | /api/v1/admin/catalog/llm-models/:id                             | Admin Catalog            | CatalogAdminController\_updateLlmModel              |
| GET    | /api/v1/admin/catalog/tts-providers                              | Admin Catalog            | CatalogAdminController\_listTtsProviders            |
| GET    | /api/v1/admin/catalog/voice-languages                            | Admin Catalog            | CatalogAdminController\_listVoiceLanguages          |
| POST   | /api/v1/admin/catalog/voice-languages                            | Admin Catalog            | CatalogAdminController\_createVoiceLanguage         |
| GET    | /api/v1/admin/catalog/voices                                     | Admin Catalog            | CatalogAdminController\_listVoices                  |
| POST   | /api/v1/admin/catalog/voices                                     | Admin Catalog            | CatalogAdminController\_createVoice                 |
| PATCH  | /api/v1/admin/catalog/voices/:id                                 | Admin Catalog            | CatalogAdminController\_updateVoice                 |
| POST   | /api/v1/favorites                                                | Favorites                | FavoritesController\_add                            |
| GET    | /api/v1/favorites/folders                                        | Favorites                | FavoritesController\_folders                        |
| POST   | /api/v1/favorites/folders                                        | Favorites                | FavoritesController\_createFolder                   |
| PATCH  | /api/v1/favorites/folders/:folderId                              | Favorites                | FavoritesController\_renameFolder                   |
| DELETE | /api/v1/favorites/folders/:folderId                              | Favorites                | FavoritesController\_deleteFolder                   |
| GET    | /api/v1/favorites/statistics                                     | Favorites                | FavoritesController\_statistics                     |
| GET    | /api/v1/favorites/check                                          | Favorites                | FavoritesController\_check                          |
| GET    | /api/v1/favorites                                                | Favorites                | FavoritesController\_list                           |
| PUT    | /api/v1/favorites/:id                                            | Favorites                | FavoritesController\_update                         |
| DELETE | /api/v1/favorites/:id                                            | Favorites                | FavoritesController\_remove                         |
| GET    | /api/v1/admin/feature-flags                                      | Admin Feature Flags      | AdminFeatureFlagController\_list                    |
| POST   | /api/v1/admin/feature-flags                                      | Admin Feature Flags      | AdminFeatureFlagController\_create                  |
| PATCH  | /api/v1/admin/feature-flags/:key                                 | Admin Feature Flags      | AdminFeatureFlagController\_update                  |
| GET    | /api/v1/admin/feature-flags/:key/tenants                         | Admin Feature Flags      | AdminFeatureFlagController\_tenantOverrides         |
| PUT    | /api/v1/admin/feature-flags/:key/tenants                         | Admin Feature Flags      | AdminFeatureFlagController\_setOverride             |
| DELETE | /api/v1/admin/feature-flags/:key/tenants/:tenantId               | Admin Feature Flags      | AdminFeatureFlagController\_clearOverride           |
| GET    | /api/v1/internal/feature-flags/resolve                           | Feature Flags (internal) | FeatureFlagInternalController\_resolve              |
| GET    | /api/v1/features                                                 | Features                 | FeatureFlagTenantController\_list                   |
| GET    | /api/v1/integrations/google-drive/oauth/start                    | Integrations             | GoogleDriveOAuthController\_start                   |
| GET    | /api/v1/integrations/google-drive/oauth/callback                 | Integrations             | GoogleDriveOAuthController\_callback                |
| POST   | /api/v1/integrations                                             | Integrations             | IntegrationController\_upsert                       |
| GET    | /api/v1/integrations/providers                                   | Integrations             | IntegrationController\_listProviders                |
| GET    | /api/v1/integrations/balances                                    | Integrations             | IntegrationController\_getBalances                  |
| GET    | /api/v1/integrations                                             | Integrations             | IntegrationController\_findAll                      |
| GET    | /api/v1/integrations/:provider                                   | Integrations             | IntegrationController\_findOne                      |
| PATCH  | /api/v1/integrations/:provider                                   | Integrations             | IntegrationController\_update                       |
| DELETE | /api/v1/integrations/:provider                                   | Integrations             | IntegrationController\_revoke                       |
| GET    | /api/v1/admin/integrations/balances                              | Admin Integrations       | AdminIntegrationController\_getBalances             |
| POST   | /api/v1/internal/integrations/credentials                        | Internal                 | InternalIntegrationController\_fetchCredentials     |
| GET    | /api/v1/internal/integrations/:id/credentials                    | Internal                 | InternalIntegrationController\_fetchCredentialsById |
| GET    | /api/v1/pricing/credit-rate                                      | Pricing                  | PricingController\_getCreditRate                    |
| GET    | /api/v1/pricing/public/catalog                                   | Pricing                  | PricingController\_getPublicCatalog                 |
| GET    | /api/v1/pricing/public/estimate                                  | Pricing                  | PricingController\_getPublicEstimate                |
| POST   | /api/v1/pricing                                                  | Pricing                  | PricingController\_create                           |
| GET    | /api/v1/pricing                                                  | Pricing                  | PricingController\_findAll                          |
| GET    | /api/v1/pricing/rate-card                                        | Pricing                  | PricingController\_rateCard                         |
| POST   | /api/v1/pricing/estimate                                         | Pricing                  | PricingController\_estimate                         |
| PATCH  | /api/v1/pricing/:id                                              | Pricing                  | PricingController\_update                           |
| DELETE | /api/v1/pricing/:id                                              | Pricing                  | PricingController\_deactivate                       |
| POST   | /api/v1/internal/billing/charge                                  | Pricing                  | PricingController\_charge                           |
| POST   | /api/v1/internal/billing/pre-call-check                          | Pricing                  | PricingController\_preCallCheck                     |
| GET    | /api/v1/internal/billing/session-costs/:tenantId/:sessionId      | Pricing                  | PricingController\_getSessionCost                   |
| POST   | /api/v1/internal/billing/session-costs/batch                     | Pricing                  | PricingController\_getBatchSessionCosts             |
| POST   | /api/v1/internal/billing/finalize-call                           | Pricing                  | PricingController\_finalizeCallBilling              |
| GET    | /api/v1/profile                                                  | Profile                  | ProfileController\_getProfile                       |
| GET    | /api/v1/roadmap                                                  | Roadmap                  | RoadmapController\_getRoadmap                       |
| GET    | /api/v1/roadmap/deployments                                      | Roadmap                  | RoadmapController\_getDeployments                   |
| GET    | /api/v1/roadmap/attachment                                       | Roadmap                  | RoadmapController\_proxyAttachment                  |
| GET    | /api/v1/roadmap/:id                                              | Roadmap                  | RoadmapController\_getRoadmapItem                   |
| POST   | /api/v1/roadmap                                                  | Roadmap                  | RoadmapController\_createRoadmapItem                |
| PATCH  | /api/v1/roadmap/:id                                              | Roadmap                  | RoadmapController\_updateRoadmapItem                |
| DELETE | /api/v1/roadmap/:id                                              | Roadmap                  | RoadmapController\_deleteRoadmapItem                |
| POST   | /api/v1/admin/service-tokens                                     | Service Tokens           | ServiceTokenAdminController\_create                 |
| GET    | /api/v1/admin/service-tokens                                     | Service Tokens           | ServiceTokenAdminController\_findAll                |
| GET    | /api/v1/admin/service-tokens/:id                                 | Service Tokens           | ServiceTokenAdminController\_findById               |
| DELETE | /api/v1/admin/service-tokens/:id/revoke                          | Service Tokens           | ServiceTokenAdminController\_revoke                 |
| POST   | /api/v1/internal/service-tokens/validate                         | Internal                 | ServiceTokenInternalController\_validate            |
| POST   | /api/v1/telephony/applications                                   | Telephony Applications   | TelephonyApplicationsController\_create             |
| GET    | /api/v1/telephony/applications                                   | Telephony Applications   | TelephonyApplicationsController\_findAll            |
| GET    | /api/v1/telephony/applications/:id                               | Telephony Applications   | TelephonyApplicationsController\_findOne            |
| PATCH  | /api/v1/telephony/applications/:id                               | Telephony Applications   | TelephonyApplicationsController\_update             |
| DELETE | /api/v1/telephony/applications/:id                               | Telephony Applications   | TelephonyApplicationsController\_remove             |
| GET    | /api/v1/virtual-numbers/available                                | Virtual Numbers          | VirtualNumbersController\_searchAvailableNumbers    |
| POST   | /api/v1/virtual-numbers/purchase                                 | Virtual Numbers          | VirtualNumbersController\_purchase                  |
| POST   | /api/v1/virtual-numbers/purchase-managed                         | Virtual Numbers          | VirtualNumbersController\_purchaseManaged           |
| GET    | /api/v1/virtual-numbers                                          | Virtual Numbers          | VirtualNumbersController\_findAll                   |
| GET    | /api/v1/virtual-numbers/:id                                      | Virtual Numbers          | VirtualNumbersController\_findOne                   |
| POST   | /api/v1/virtual-numbers/:id/release                              | Virtual Numbers          | VirtualNumbersController\_release                   |
| POST   | /api/v1/virtual-numbers/:id/retry-payment                        | Virtual Numbers          | VirtualNumbersController\_retryPayment              |
| GET    | /api/v1/wallet/transactions                                      | Wallet                   | WalletController\_getTransactions                   |
| GET    | /api/v1/analytics/my-detail                                      | Analytics                | TenantAnalyticsController\_myDetail                 |
| GET    | /api/v1/analytics/my-trends                                      | Analytics                | TenantAnalyticsController\_myTrends                 |
| POST   | /api/v1/tenants/onboard                                          | Tenants                  | TenantController\_onboard                           |
| GET    | /api/v1/tenants/exists/:slug                                     | Tenants                  | TenantController\_exists                            |
| DELETE | /api/v1/tenants/me                                               | Tenants                  | TenantController\_deleteCurrentTenant               |
| POST   | /api/v1/tenants                                                  | Tenants                  | TenantController\_create                            |
| GET    | /api/v1/tenants                                                  | Tenants                  | TenantController\_findAll                           |
| GET    | /api/v1/tenants/:id                                              | Tenants                  | TenantController\_findOne                           |
| PATCH  | /api/v1/tenants/:id                                              | Tenants                  | TenantController\_update                            |
| DELETE | /api/v1/tenants/:id                                              | Tenants                  | TenantController\_remove                            |
| GET    | /api/v1/tenants/:id/members                                      | Tenants                  | TenantController\_listMembers                       |
| POST   | /api/v1/tenants/:id/members/invite                               | Tenants                  | TenantController\_inviteMember                      |
| PATCH  | /api/v1/tenants/:id/members/:memberId/role                       | Tenants                  | TenantController\_updateMemberRole                  |
| DELETE | /api/v1/tenants/:id/members/:memberId                            | Tenants                  | TenantController\_removeMember                      |
| POST   | /api/v1/testing/run/:module                                      | Testing                  | TestingController\_run                              |
| POST   | /api/v1/testing/stop                                             | Testing                  | TestingController\_stop                             |
| GET    | /api/v1/testing/verification-token                               | Testing                  | TestingController\_getVerificationToken             |
| POST   | /api/v1/testing/verify-email                                     | Testing                  | TestingController\_verifyEmail                      |
| POST   | /api/v1/testing/credit-wallet                                    | Testing                  | TestingController\_creditWallet                     |
| GET    | /api/v1/users/me                                                 | Users                    | UserController\_getProfile                          |
| PATCH  | /api/v1/users/me                                                 | Users                    | UserController\_updateProfile                       |
| GET    | /api/v1/users/me/avatar                                          | Users                    | UserController\_streamAvatar                        |
| POST   | /api/v1/users/me/avatar                                          | Users                    | UserController\_uploadAvatar                        |
| DELETE | /api/v1/users/me/avatar                                          | Users                    | UserController\_deleteAvatar                        |
| POST   | /api/v1/users/me/change-password                                 | Users                    | UserController\_changePassword                      |
| POST   | /api/v1/api-keys                                                 | API Keys                 | ApiKeyController\_create                            |
| GET    | /api/v1/api-keys                                                 | API Keys                 | ApiKeyController\_list                              |
| DELETE | /api/v1/api-keys/:id                                             | API Keys                 | ApiKeyController\_revoke                            |
| POST   | /api/v1/api-keys/validate                                        | API Keys                 | ApiKeyController\_validate                          |
| GET    | /api/v1/api-keys/agent-webhooks                                  | API Keys                 | ApiKeyController\_agentWebhooks                     |

***

## comms-engine — 180 operations (38 controllers)

| Method | Path                                                                     | Tag                                 | operationId                                               |
| ------ | ------------------------------------------------------------------------ | ----------------------------------- | --------------------------------------------------------- |
| GET    | /health/live                                                             | Health                              | HealthController\_liveness                                |
| GET    | /health/ready                                                            | Health                              | HealthController\_readiness                               |
| GET    | /api/v1/agents/:agentId/widget-customization                             | agent-widget-customization          | AgentWidgetCustomizationController\_getCustomization      |
| PUT    | /api/v1/agents/:agentId/widget-customization/draft                       | agent-widget-customization          | AgentWidgetCustomizationController\_saveDraft             |
| POST   | /api/v1/agents/:agentId/widget-customization/validate                    | agent-widget-customization          | AgentWidgetCustomizationController\_validate              |
| POST   | /api/v1/agents/:agentId/widget-customization/publish                     | agent-widget-customization          | AgentWidgetCustomizationController\_publish               |
| GET    | /api/v1/agents/:agentId/widget-customization/versions                    | agent-widget-customization          | AgentWidgetCustomizationController\_listVersions          |
| GET    | /api/v1/agents/:agentId/widget-customization/versions/:versionId         | agent-widget-customization          | AgentWidgetCustomizationController\_getVersion            |
| POST   | /api/v1/agents/:agentId/widget-customization/versions/:versionId/restore | agent-widget-customization          | AgentWidgetCustomizationController\_restoreVersion        |
| POST   | /api/v1/agents/:agentId/widget-customization/preview-session             | agent-widget-customization          | AgentWidgetCustomizationController\_createPreviewSession  |
| GET    | /api/v1/agents/:agentId/widget-customization/versions/:versionId/render  | agent-widget-customization          | AgentWidgetCustomizationController\_renderVersion         |
| GET    | /api/v1/agents/widget-preview/:token/render                              | widget-preview                      | WidgetPreviewController\_renderPreview                    |
| POST   | /api/v1/agents                                                           | agents                              | AgentController\_create                                   |
| GET    | /api/v1/agents                                                           | agents                              | AgentController\_findAll                                  |
| GET    | /api/v1/agents/:id                                                       | agents                              | AgentController\_findOne                                  |
| PATCH  | /api/v1/agents/:id                                                       | agents                              | AgentController\_update                                   |
| POST   | /api/v1/agents/:id/generate-prompt                                       | agents                              | AgentController\_generatePrompt                           |
| POST   | /api/v1/agents/:id/webhook-token                                         | agents                              | AgentController\_generateWebhookToken                     |
| GET    | /api/v1/agents/:id/active-services                                       | agents                              | AgentController\_getActiveServices                        |
| DELETE | /api/v1/agents/:id                                                       | agents                              | AgentController\_remove                                   |
| GET    | /api/v1/analytics/tools                                                  | analytics                           | AnalyticsController\_listTools                            |
| GET    | /api/v1/analytics/results                                                | analytics                           | AnalyticsController\_results                              |
| GET    | /api/v1/analytics/agents/:agentId/bindings                               | analytics                           | AnalyticsController\_listBindings                         |
| POST   | /api/v1/analytics/agents/:agentId/bindings                               | analytics                           | AnalyticsController\_createBinding                        |
| PATCH  | /api/v1/analytics/agent-bindings/:bindingId                              | analytics                           | AnalyticsController\_updateBinding                        |
| DELETE | /api/v1/analytics/agent-bindings/:bindingId                              | analytics                           | AnalyticsController\_deleteBinding                        |
| GET    | /api/v1/call-logs                                                        | call-logs                           | CallLogsController\_list                                  |
| GET    | /api/v1/call-logs/summary                                                | call-logs                           | CallLogsController\_summary                               |
| GET    | /api/v1/call-logs/filter-options                                         | call-logs                           | CallLogsController\_filterOptions                         |
| GET    | /api/v1/call-logs/export                                                 | call-logs                           | CallLogsController\_export                                |
| GET    | /api/v1/call-logs/:sessionId/full                                        | call-logs                           | CallLogsController\_findFull                              |
| POST   | /api/v1/internal/call-logs/import                                        | internal/call-logs                  | PlatformLogImportController\_importBatch                  |
| POST   | /api/v1/internal/campaigns/:id/start                                     | InternalCampaignRuntime *(default)* | InternalCampaignRuntimeController\_start                  |
| POST   | /api/v1/internal/campaigns/:id/pause                                     | InternalCampaignRuntime *(default)* | InternalCampaignRuntimeController\_pause                  |
| POST   | /api/v1/internal/callbacks/schedule                                      | internal-callbacks                  | CallbackCommandController\_schedule                       |
| PATCH  | /api/v1/internal/callbacks/:callbackId/stale                             | internal-callbacks                  | CallbackCommandController\_markStale                      |
| POST   | /api/v1/channels/voice/call                                              | channels                            | ChannelController\_initiateCall                           |
| POST   | /api/v1/channels/chat/messages                                           | channels                            | ChannelController\_sendChatMessage                        |
| GET    | /api/v1/channels/chat/sessions/:sessionId/messages                       | channels                            | ChannelController\_getChatMessages                        |
| POST   | /api/v1/channels/whatsapp/messages                                       | channels                            | ChannelController\_sendWhatsAppMessage                    |
| POST   | /api/v1/channels/web/session                                             | channels                            | ChannelController\_startWebSession                        |
| POST   | /api/v1/channels/whatsapp/send-template                                  | channels                            | ChannelController\_sendWhatsAppTemplate                   |
| GET    | /api/v1/channels/sms/numbers                                             | channels                            | ChannelController\_listSmsNumbers                         |
| GET    | /api/v1/channels/sms/twilio-numbers                                      | channels                            | ChannelController\_listTwilioNumbers                      |
| POST   | /api/v1/channels/sms/send                                                | channels                            | ChannelController\_sendSms                                |
| POST   | /api/v1/internal/live-call/transfer                                      | internal-live-call                  | LiveCallCommandController\_transfer                       |
| POST   | /api/v1/channels/sync-webhooks/:provider                                 | channels                            | WebhookSyncController\_sync                               |
| GET    | /api/v1/channels/sync-webhooks/acefone/inbound-urls                      | channels                            | WebhookSyncController\_acefoneInboundUrls                 |
| POST   | /api/v1/internal/whatsapp/schedule-reminder                              | internal-whatsapp                   | WhatsAppReminderController\_scheduleReminder              |
| POST   | /api/v1/chat/sessions                                                    | chatbot                             | ChatbotController\_start                                  |
| POST   | /api/v1/chat/sessions/:sessionId/end                                     | chatbot                             | ChatbotController\_end                                    |
| POST   | /api/v1/chat/messages                                                    | chatbot                             | ChatbotController\_send                                   |
| POST   | /api/v1/chat/messages/stream                                             | chatbot                             | ChatbotController\_stream                                 |
| POST   | /api/v1/integrations/google-drive/sync                                   | Integrations                        | GoogleDriveExportController\_sync                         |
| GET    | /api/v1/internal/agents/:id/validate                                     | Internal                            | InternalAgentController\_validate                         |
| POST   | /api/v1/internal/agents/names                                            | Internal                            | InternalAgentController\_resolveNames                     |
| GET    | /api/v1/internal/agents/count                                            | Internal                            | InternalAgentController\_countByTenant                    |
| POST   | /api/v1/internal/agents/disconnect-integrations                          | Internal                            | InternalAgentController\_disconnectIntegrations           |
| POST   | /api/v1/internal/agents/reactivate-integrations                          | Internal                            | InternalAgentController\_reactivateIntegrations           |
| POST   | /api/v1/internal/agents/:id/transfer                                     | Internal                            | InternalAgentController\_transferAgent                    |
| POST   | /api/v1/internal/sessions/callback-execution                             | Internal                            | InternalSessionDetailController\_createCallbackSession    |
| GET    | /api/v1/internal/sessions/active-count                                   | Internal                            | InternalSessionDetailController\_getActiveCount           |
| GET    | /api/v1/internal/sessions/:sessionId/detail                              | Internal                            | InternalSessionDetailController\_getDetail                |
| PATCH  | /api/v1/internal/sessions/:sessionId/provider-call-id                    | Internal                            | InternalSessionDetailController\_attachProviderCallId     |
| PATCH  | /api/v1/internal/sessions/:sessionId/fail                                | Internal                            | InternalSessionDetailController\_failSession              |
| POST   | /api/v1/knowledge-bases                                                  | knowledge-bases                     | KnowledgeBaseController\_createKnowledgeBase              |
| GET    | /api/v1/knowledge-bases                                                  | knowledge-bases                     | KnowledgeBaseController\_listKnowledgeBases               |
| GET    | /api/v1/knowledge-bases/:id                                              | knowledge-bases                     | KnowledgeBaseController\_getKnowledgeBase                 |
| PATCH  | /api/v1/knowledge-bases/:id                                              | knowledge-bases                     | KnowledgeBaseController\_updateKnowledgeBase              |
| DELETE | /api/v1/knowledge-bases/:id                                              | knowledge-bases                     | KnowledgeBaseController\_deleteKnowledgeBase              |
| POST   | /api/v1/knowledge-bases/:kbId/sources                                    | knowledge-bases                     | KnowledgeBaseController\_createSource                     |
| GET    | /api/v1/knowledge-bases/:kbId/sources                                    | knowledge-bases                     | KnowledgeBaseController\_listSources                      |
| GET    | /api/v1/knowledge-bases/sources/:id                                      | knowledge-bases                     | KnowledgeBaseController\_getSource                        |
| DELETE | /api/v1/knowledge-bases/sources/:id                                      | knowledge-bases                     | KnowledgeBaseController\_deleteSource                     |
| POST   | /api/v1/knowledge-bases/:kbId/documents/upload                           | knowledge-bases                     | KnowledgeBaseController\_uploadDocument                   |
| POST   | /api/v1/knowledge-bases/:kbId/ingestion-jobs                             | knowledge-bases                     | KnowledgeBaseController\_createIngestionJob               |
| GET    | /api/v1/knowledge-bases/:kbId/ingestion-jobs                             | knowledge-bases                     | KnowledgeBaseController\_listIngestionJobs                |
| GET    | /api/v1/knowledge-bases/ingestion-jobs/:id                               | knowledge-bases                     | KnowledgeBaseController\_getIngestionJob                  |
| GET    | /api/v1/llm/providers                                                    | llm                                 | LlmController\_listProviders                              |
| POST   | /api/v1/llm/providers                                                    | llm                                 | LlmController\_createProvider                             |
| GET    | /api/v1/llm/providers/:id                                                | llm                                 | LlmController\_getProvider                                |
| PATCH  | /api/v1/llm/providers/:id                                                | llm                                 | LlmController\_updateProvider                             |
| DELETE | /api/v1/llm/providers/:id                                                | llm                                 | LlmController\_deleteProvider                             |
| GET    | /api/v1/llm/models                                                       | llm                                 | LlmController\_listModels                                 |
| POST   | /api/v1/llm/models                                                       | llm                                 | LlmController\_createModel                                |
| GET    | /api/v1/llm/models/:id                                                   | llm                                 | LlmController\_getModel                                   |
| PATCH  | /api/v1/llm/models/:id                                                   | llm                                 | LlmController\_updateModel                                |
| DELETE | /api/v1/llm/models/:id                                                   | llm                                 | LlmController\_deleteModel                                |
| GET    | /api/v1/prompts/personas                                                 | Prompts *(default)*                 | PromptsController\_listPersonas                           |
| GET    | /api/v1/prompts/use-cases                                                | Prompts *(default)*                 | PromptsController\_listUseCases                           |
| POST   | /api/v1/prompts/use-cases                                                | Prompts *(default)*                 | PromptsController\_createUseCase                          |
| GET    | /api/v1/prompts/use-cases/:id                                            | Prompts *(default)*                 | PromptsController\_getUseCase                             |
| PATCH  | /api/v1/prompts/use-cases/:id                                            | Prompts *(default)*                 | PromptsController\_updateUseCase                          |
| DELETE | /api/v1/prompts/use-cases/:id                                            | Prompts *(default)*                 | PromptsController\_deleteUseCase                          |
| POST   | /api/v1/sessions/:sessionId/rating                                       | ratings                             | RatingController\_create                                  |
| GET    | /api/v1/sessions/:sessionId/rating                                       | ratings                             | RatingController\_findOne                                 |
| GET    | /api/v1                                                                  | Service                             | ServiceInfoController\_getServiceInfo                     |
| POST   | /api/v1/sessions                                                         | sessions                            | SessionController\_create                                 |
| GET    | /api/v1/sessions                                                         | sessions                            | SessionController\_findAll                                |
| GET    | /api/v1/sessions/:id                                                     | sessions                            | SessionController\_findOne                                |
| GET    | /api/v1/stt-providers                                                    | stt-providers                       | SttCatalogController\_findAll                             |
| GET    | /api/v1/tools/agent-bindings                                             | Tools *(default)*                   | ToolsController\_listBindings                             |
| GET    | /api/v1/tools/agent-bindings/:bindingId                                  | Tools *(default)*                   | ToolsController\_getBinding                               |
| PATCH  | /api/v1/tools/agent-bindings/:bindingId                                  | Tools *(default)*                   | ToolsController\_updateBinding                            |
| DELETE | /api/v1/tools/agent-bindings/:bindingId                                  | Tools *(default)*                   | ToolsController\_deleteBinding                            |
| POST   | /api/v1/tools/agents/:agentId/bindings                                   | Tools *(default)*                   | ToolsController\_createBinding                            |
| GET    | /api/v1/tools/agents/:agentId/runtime-tools                              | Tools *(default)*                   | ToolsController\_runtimeTools                             |
| POST   | /api/v1/tools/cal-com/event-types                                        | Tools *(default)*                   | ToolsController\_calComEventTypes                         |
| GET    | /api/v1/tools/execution-logs/usage-summary                               | Tools *(default)*                   | ToolsController\_usageSummary                             |
| GET    | /api/v1/tools/execution-logs                                             | Tools *(default)*                   | ToolsController\_listLogs                                 |
| GET    | /api/v1/tools/execution-logs/:logId                                      | Tools *(default)*                   | ToolsController\_getLog                                   |
| POST   | /api/v1/tools/execution-logs                                             | Tools *(default)*                   | ToolsController\_createLog                                |
| PATCH  | /api/v1/tools/execution-logs/:logId                                      | Tools *(default)*                   | ToolsController\_updateLog                                |
| DELETE | /api/v1/tools/execution-logs/:logId                                      | Tools *(default)*                   | ToolsController\_deleteLog                                |
| GET    | /api/v1/tools                                                            | Tools *(default)*                   | ToolsController\_list                                     |
| POST   | /api/v1/tools                                                            | Tools *(default)*                   | ToolsController\_create                                   |
| GET    | /api/v1/tools/:id                                                        | Tools *(default)*                   | ToolsController\_getOne                                   |
| PATCH  | /api/v1/tools/:id                                                        | Tools *(default)*                   | ToolsController\_update                                   |
| DELETE | /api/v1/tools/:id                                                        | Tools *(default)*                   | ToolsController\_remove                                   |
| POST   | /api/v1/sessions/:sessionId/transcript/entries                           | transcripts                         | TranscriptController\_addEntry                            |
| GET    | /api/v1/sessions/:sessionId/transcript                                   | transcripts                         | TranscriptController\_findBySession                       |
| POST   | /api/v1/tts-providers                                                    | tts-providers                       | TtsProviderController\_create                             |
| GET    | /api/v1/tts-providers                                                    | tts-providers                       | TtsProviderController\_findAll                            |
| GET    | /api/v1/tts-providers/:id                                                | tts-providers                       | TtsProviderController\_findOne                            |
| PATCH  | /api/v1/tts-providers/:id                                                | tts-providers                       | TtsProviderController\_update                             |
| DELETE | /api/v1/tts-providers/:id                                                | tts-providers                       | TtsProviderController\_remove                             |
| POST   | /api/v1/internal/voice-languages                                         | internal-voice-languages            | InternalVoiceLanguageController\_create                   |
| POST   | /api/v1/voice-languages                                                  | voice-languages                     | VoiceLanguageController\_create                           |
| GET    | /api/v1/voice-languages                                                  | voice-languages                     | VoiceLanguageController\_findAll                          |
| GET    | /api/v1/voice-languages/:id                                              | voice-languages                     | VoiceLanguageController\_findOne                          |
| PATCH  | /api/v1/voice-languages/:id                                              | voice-languages                     | VoiceLanguageController\_update                           |
| DELETE | /api/v1/voice-languages/:id                                              | voice-languages                     | VoiceLanguageController\_remove                           |
| POST   | /api/v1/voice-numbers                                                    | voice-numbers                       | VoiceNumberController\_create                             |
| GET    | /api/v1/voice-numbers                                                    | voice-numbers                       | VoiceNumberController\_findAll                            |
| GET    | /api/v1/voice-numbers/:id                                                | voice-numbers                       | VoiceNumberController\_findOne                            |
| PATCH  | /api/v1/voice-numbers/:id                                                | voice-numbers                       | VoiceNumberController\_update                             |
| DELETE | /api/v1/voice-numbers/:id                                                | voice-numbers                       | VoiceNumberController\_remove                             |
| POST   | /api/v1/voice-profiles                                                   | VoiceProfile *(default)*            | VoiceProfileController\_create                            |
| GET    | /api/v1/voice-profiles                                                   | VoiceProfile *(default)*            | VoiceProfileController\_findAll                           |
| GET    | /api/v1/voice-profiles/:id                                               | VoiceProfile *(default)*            | VoiceProfileController\_findOne                           |
| PATCH  | /api/v1/voice-profiles/:id                                               | VoiceProfile *(default)*            | VoiceProfileController\_update                            |
| DELETE | /api/v1/voice-profiles/:id                                               | VoiceProfile *(default)*            | VoiceProfileController\_remove                            |
| POST   | /api/v1/internal/voices                                                  | internal-voices                     | InternalVoiceController\_create                           |
| PATCH  | /api/v1/internal/voices/:id                                              | internal-voices                     | InternalVoiceController\_update                           |
| POST   | /api/v1/voices                                                           | voices                              | VoiceController\_create                                   |
| GET    | /api/v1/voices                                                           | voices                              | VoiceController\_findAll                                  |
| POST   | /api/v1/voices/preview                                                   | voices                              | VoiceController\_preview                                  |
| GET    | /api/v1/voices/:id                                                       | voices                              | VoiceController\_findOne                                  |
| PATCH  | /api/v1/voices/:id                                                       | voices                              | VoiceController\_update                                   |
| DELETE | /api/v1/voices/:id                                                       | voices                              | VoiceController\_remove                                   |
| POST   | /api/v1/webhooks/acefone/dynamic-wss                                     | webhooks                            | AcefonePublicWebhookController\_acefoneUnsignedDynamicWss |
| GET    | /api/v1/webhooks/acefone/dynamic-wss                                     | webhooks                            | AcefonePublicWebhookController\_acefoneDynamicWssTest     |
| POST   | /api/v1/webhooks/acefone/answer                                          | webhooks                            | AcefonePublicWebhookController\_acefoneUnsignedAnswer     |
| GET    | /api/v1/webhooks/acefone/answer                                          | webhooks                            | AcefonePublicWebhookController\_acefoneUnsignedAnswerGet  |
| POST   | /api/v1/webhooks/acefone/status                                          | webhooks                            | AcefonePublicWebhookController\_acefoneUnsignedStatus     |
| GET    | /api/v1/webhooks/acefone/status                                          | webhooks                            | AcefonePublicWebhookController\_acefoneUnsignedStatusGet  |
| POST   | /api/v1/webhooks/plivo/:token/answer                                     | webhooks                            | VoiceWebhookController\_plivoAnswer                       |
| POST   | /api/v1/webhooks/plivo/:token/hangup                                     | webhooks                            | VoiceWebhookController\_plivoHangup                       |
| POST   | /api/v1/webhooks/plivo/:token/record                                     | webhooks                            | VoiceWebhookController\_plivoRecord                       |
| ALL    | /api/v1/webhooks/plivo/:token/forwarding-xml                             | webhooks                            | VoiceWebhookController\_plivoForwardingXml                |
| POST   | /api/v1/webhooks/twilio/:token/answer                                    | webhooks                            | VoiceWebhookController\_twilioAnswer                      |
| POST   | /api/v1/webhooks/twilio/:token/status                                    | webhooks                            | VoiceWebhookController\_twilioStatus                      |
| POST   | /api/v1/webhooks/twilio/:token/recording                                 | webhooks                            | VoiceWebhookController\_twilioRecording                   |
| POST   | /api/v1/webhooks/twilio/:token/sms-status                                | webhooks                            | VoiceWebhookController\_twilioSmsStatus                   |
| ALL    | /api/v1/webhooks/twilio/:token/forwarding-xml                            | webhooks                            | VoiceWebhookController\_twilioForwardingXml               |
| POST   | /api/v1/webhooks/acefone/:token/dynamic-wss                              | webhooks                            | VoiceWebhookController\_acefoneDynamicWss                 |
| POST   | /api/v1/webhooks/acefone/:token/answer                                   | webhooks                            | VoiceWebhookController\_acefoneAnswer                     |
| POST   | /api/v1/webhooks/acefone/:token/status                                   | webhooks                            | VoiceWebhookController\_acefoneStatus                     |
| POST   | /api/v1/webhooks/vobiz/:token/answer                                     | webhooks                            | VoiceWebhookController\_vobizAnswer                       |
| POST   | /api/v1/webhooks/vobiz/:token/hangup                                     | webhooks                            | VoiceWebhookController\_vobizHangup                       |
| POST   | /api/v1/webhooks/vobiz/:token/record                                     | webhooks                            | VoiceWebhookController\_vobizRecord                       |
| ALL    | /api/v1/webhooks/vobiz/:token/forwarding-xml                             | webhooks                            | VoiceWebhookController\_vobizForwardingXml                |
| GET    | /api/whatsapp/webhook                                                    | whatsapp-webhook                    | WhatsAppPublicWebhookController\_verify                   |
| POST   | /api/whatsapp/webhook                                                    | whatsapp-webhook                    | WhatsAppPublicWebhookController\_message                  |
| GET    | /api/v1/webhooks/whatsapp/:token                                         | webhooks                            | WhatsAppWebhookController\_whatsappVerify                 |
| POST   | /api/v1/webhooks/whatsapp/:token                                         | webhooks                            | WhatsAppWebhookController\_whatsappMessage                |
| POST   | /api/v1/widget/bootstrap                                                 | widget                              | WidgetController\_bootstrap                               |
| POST   | /api/v1/widget/webcall/session                                           | widget                              | WidgetController\_startWebcall                            |
| POST   | /api/v1/widget/chat/session                                              | widget                              | WidgetController\_startChat                               |
| GET    | /api/v1/widget/customization                                             | widget                              | WidgetController\_getCustomization                        |

***

## campaign-engine — 56 operations (16 controller classes)

| Method | Path                                                 | Tag                                  | operationId                                           |
| ------ | ---------------------------------------------------- | ------------------------------------ | ----------------------------------------------------- |
| GET    | /health/live                                         | Health                               | HealthController\_liveness                            |
| GET    | /health/ready                                        | Health                               | HealthController\_readiness                           |
| GET    | /                                                    | Health                               | RootController\_root                                  |
| GET    | /api/v1/campaigns/:campaignId/attempts               | Attempt *(default)*                  | AttemptController\_findAll                            |
| GET    | /api/v1/campaigns/:campaignId/attempts/stats         | Attempt *(default)*                  | AttemptController\_stats                              |
| GET    | /api/v1/campaigns/:campaignId/attempts/final-summary | Attempt *(default)*                  | AttemptController\_finalSummary                       |
| POST   | /api/v1/callbacks/session-completed                  | Callback *(default)*                 | CallbackController\_sessionCompleted                  |
| POST   | /api/v1/campaigns/:id/schedule                       | CampaignActions *(default)*          | CampaignActionsController\_schedule                   |
| POST   | /api/v1/campaigns/:id/start                          | CampaignActions *(default)*          | CampaignActionsController\_start                      |
| POST   | /api/v1/campaigns/:id/pause                          | CampaignActions *(default)*          | CampaignActionsController\_pause                      |
| POST   | /api/v1/campaigns/:id/resume                         | CampaignActions *(default)*          | CampaignActionsController\_resume                     |
| POST   | /api/v1/campaigns/:id/abort                          | CampaignActions *(default)*          | CampaignActionsController\_abort                      |
| GET    | /api/v1/internal/campaigns/:id/ready-attempts        | InternalCampaignRuntime *(default)*  | InternalCampaignRuntimeController\_getReadyAttempts   |
| PUT    | /api/v1/internal/attempts/:id/dialing                | InternalCampaignRuntime *(default)*  | InternalCampaignRuntimeController\_markDialing        |
| PUT    | /api/v1/internal/attempts/:id/complete               | InternalCampaignRuntime *(default)*  | InternalCampaignRuntimeController\_completeAttempt    |
| GET    | /api/v1/internal/agents/:agentId/active-services     | InternalCampaignRuntime *(default)*  | InternalCampaignRuntimeController\_getActiveServices  |
| POST   | /api/v1/internal/agents/:agentId/suspend-services    | InternalCampaignRuntime *(default)*  | InternalCampaignRuntimeController\_suspendServices    |
| POST   | /api/v1/campaigns                                    | Campaign *(default)*                 | CampaignController\_create                            |
| GET    | /api/v1/campaigns                                    | Campaign *(default)*                 | CampaignController\_findAll                           |
| GET    | /api/v1/campaigns/:id/summary                        | Campaign *(default)*                 | CampaignController\_summary                           |
| GET    | /api/v1/campaigns/:id                                | Campaign *(default)*                 | CampaignController\_findOne                           |
| PATCH  | /api/v1/campaigns/:id                                | Campaign *(default)*                 | CampaignController\_update                            |
| DELETE | /api/v1/campaigns/:id                                | Campaign *(default)*                 | CampaignController\_remove                            |
| POST   | /api/v1/campaigns/:id/regenerate                     | Campaign *(default)*                 | CampaignController\_regenerate                        |
| POST   | /api/v1/contact-lists                                | ContactList *(default)*              | ContactListController\_create                         |
| GET    | /api/v1/contact-lists                                | ContactList *(default)*              | ContactListController\_findAll                        |
| GET    | /api/v1/contact-lists/:id                            | ContactList *(default)*              | ContactListController\_findOne                        |
| PATCH  | /api/v1/contact-lists/:id                            | ContactList *(default)*              | ContactListController\_update                         |
| DELETE | /api/v1/contact-lists/:id                            | ContactList *(default)*              | ContactListController\_remove                         |
| POST   | /api/v1/contact-lists/:id/upload                     | ContactList *(default)*              | ContactListController\_upload                         |
| POST   | /api/v1/contact-lists/:listId/contacts               | Contact *(default)*                  | ContactController\_create                             |
| POST   | /api/v1/contact-lists/:listId/contacts/bulk          | Contact *(default)*                  | ContactController\_bulkImport                         |
| GET    | /api/v1/contact-lists/:listId/contacts               | Contact *(default)*                  | ContactController\_findAll                            |
| GET    | /api/v1/contact-lists/:listId/contacts/:id           | Contact *(default)*                  | ContactController\_findOne                            |
| PATCH  | /api/v1/contact-lists/:listId/contacts/:id           | Contact *(default)*                  | ContactController\_update                             |
| DELETE | /api/v1/contact-lists/:listId/contacts/:id           | Contact *(default)*                  | ContactController\_remove                             |
| POST   | /api/v1/contact-lists/:listId/contacts/delete-batch  | Contact *(default)*                  | ContactController\_removeBatch                        |
| GET    | /api/v1                                              | Service                              | ServiceInfoController\_getServiceInfo                 |
| POST   | /api/v1/internal/sms-agent/trigger                   | SmsAgentCampaignInternal *(default)* | SmsAgentCampaignInternalController\_triggerDirectCall |
| GET    | /api/v1/sms-agent/campaigns                          | SmsAgentCampaign *(default)*         | SmsAgentCampaignController\_findAll                   |
| POST   | /api/v1/sms-agent/campaigns                          | SmsAgentCampaign *(default)*         | SmsAgentCampaignController\_create                    |
| GET    | /api/v1/sms-agent/campaigns/:id                      | SmsAgentCampaign *(default)*         | SmsAgentCampaignController\_findOne                   |
| PUT    | /api/v1/sms-agent/campaigns/:id                      | SmsAgentCampaign *(default)*         | SmsAgentCampaignController\_update                    |
| DELETE | /api/v1/sms-agent/campaigns/:id                      | SmsAgentCampaign *(default)*         | SmsAgentCampaignController\_remove                    |
| GET    | /api/v1/whatsapp/campaigns                           | WhatsAppCampaign *(default)*         | WhatsAppCampaignController\_findAll                   |
| POST   | /api/v1/whatsapp/campaigns                           | WhatsAppCampaign *(default)*         | WhatsAppCampaignController\_create                    |
| GET    | /api/v1/whatsapp/campaigns/:id                       | WhatsAppCampaign *(default)*         | WhatsAppCampaignController\_findOne                   |
| PUT    | /api/v1/whatsapp/campaigns/:id                       | WhatsAppCampaign *(default)*         | WhatsAppCampaignController\_update                    |
| DELETE | /api/v1/whatsapp/campaigns/:id                       | WhatsAppCampaign *(default)*         | WhatsAppCampaignController\_remove                    |
| POST   | /api/v1/internal/whatsapp/trigger                    | WhatsAppInternal *(default)*         | WhatsAppInternalController\_triggerDirectCall         |
| GET    | /api/v1/internal/whatsapp/resolve-token/:token       | WhatsAppInternal *(default)*         | WhatsAppInternalController\_resolveToken              |
| GET    | /api/v1/whatsapp/webhook-details                     | WhatsAppTemplate *(default)*         | WhatsAppTemplateController\_fetchWebhookDetails       |
| POST   | /api/v1/whatsapp/webhook-token                       | WhatsAppTemplate *(default)*         | WhatsAppTemplateController\_generateWebhookToken      |
| GET    | /api/v1/whatsapp/meta-templates                      | WhatsAppTemplate *(default)*         | WhatsAppTemplateController\_fetchTemplates            |
| GET    | /api/v1/whatsapp/fetch-numbers                       | WhatsAppTemplate *(default)*         | WhatsAppTemplateController\_fetchNumbers              |
| POST   | /api/v1/whatsapp/agents/:agentId/attach-number       | WhatsAppTemplate *(default)*         | WhatsAppTemplateController\_attachNumber              |

***

## Open questions for task 1.2 (tag classification)

* `Callback` and `Attempt` (campaign-engine, default tags) are explicitly
  named for exclusion in requirements.md — confirmed present above.
* `Roadmap` and `Favorites` (platform-core) are explicitly named for
  exclusion — confirmed present above.
* `whatsapp-webhook` and `widget-preview` (comms-engine) are explicitly named
  for exclusion — confirmed present above.
* `Testing` (platform-core) is explicitly named for exclusion — confirmed
  present above; also contains a wallet-credit and email-verification
  backdoor as described in requirements.md.
* Several default (unlabeled) tags read oddly as public-facing group names if
  ever allowlisted by mistake: `CampaignActions`, `ContactList`, `Contact`,
  `SmsAgentCampaignInternal`, `WhatsAppInternal`, `InternalCampaignRuntime`,
  `VoiceProfile`, `Tools`, `Prompts` — none currently have a `@ApiTags`
  decorator, so adding one (or classifying by controller instead of tag)
  should be considered in task 1.2 for the ones meant to be published.
* Tag name collisions across services once merged (design.md D2): `Health`,
  `Integrations`, `Internal`, `Service`. Task 1.2 / config (task 2) should
  decide whether allowlist entries need to be service-qualified.
