清理: - 删除 34 份过时文档(gap reports/QA临时报告/验收报告/阶段性文档) - 删除 docs/.hermes/skills 第三方 skills 副本(16 文件) - 删除 skills-lock.json 目录归集: - 根目录仅保留 README.md 索引 - product/ — 产品与架构设计(PRD + ARCHITECTURE + P2设计文档 + AI/企业路线图) - tracking/ — Chatwoot parity 开发跟踪 - requirements/ — M01-M12 模块需求 - plans/ — 历史实现计划 - parity/ — 路由 parity 与前端契约 - qa/ — QA 报告与测试计划 - ops/ — 运维部署 命名规范: - 全小写 kebab-case,禁止全大写文件名 - product/tracking/ops 用 NN- 序号前缀 - requirements 用 MNN- 两位零填充模块号 - plans/qa 用 YYYY-MM-DD- 日期前缀 - requirements M1-M9 零填充为 M01-M09(修复字典序) 同步更新: - backend/cmd/route_parity/main.go 路径默认值 - backend/scripts/parity_frontend_smoke.sh 报告路径 - 所有 docs 内部交叉引用 - .gitignore 排除编译产物 (backend/gochat, backend/route_parity) - 新增迁移 000052/000053 - 前端 WS 相关修改
262 lines
104 KiB
Markdown
262 lines
104 KiB
Markdown
# Frontend Contract Inventory
|
|
|
|
> Generated: 2026-06-11
|
|
> Source: `reference/chatwoot/app/javascript/dashboard/api`, `reference/chatwoot/app/javascript/widget/api`, `reference/chatwoot/app/javascript/survey/api`
|
|
> Purpose: Phase 0 deliverable for GoChat ↔ Chatwoot/Woochat direct-connect alignment.
|
|
|
|
## Scope
|
|
|
|
This inventory records the frontend API client contract that GoChat must satisfy without patching the reused Woochat/current Chatwoot frontend. It is intentionally route-and-owner focused; fixture tests and smoke runs should attach exact payload evidence to these rows as implementation proceeds.
|
|
|
|
## Owner Summary
|
|
|
|
| Owner Area | Contract Entries |
|
|
| --- | --- |
|
|
| Auth/Profile/Account | 26 |
|
|
| Automation/Enterprise | 8 |
|
|
| CRM | 25 |
|
|
| CSAT/Survey | 7 |
|
|
| Captain/Copilot | 12 |
|
|
| Conversation/Message | 27 |
|
|
| Help Center | 8 |
|
|
| Inbox/Agents/Assignment | 41 |
|
|
| Integrations/Channels | 14 |
|
|
| Other | 20 |
|
|
| Reports/Audit | 14 |
|
|
| Widget | 22 |
|
|
|
|
## Contract Entries
|
|
|
|
| Owner Area | Frontend File | Kind | Resource / Path | Scope | Methods Seen | GoChat Alignment Owner | Status |
|
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/CacheEnabledApiClient.js` | literal | `/api/v1/accounts/${this.accountIdFromRoute}/cache_keys` | explicit | GET | `internal/handler/api/v1/account_handler_test.go::TestCacheKeys_Success`; `internal/ws/event_publisher_test.go::TestEventPublisher_AccountCacheInvalidatedChatwootPayloadShape` | Covered for raw `cache_keys` response and account-cache invalidation payload used by CacheEnabledApiClient. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/account.js` | literal | `/api/v1/accounts/${this.accountIdFromRoute}/cache_keys` | explicit | GET, POST | `internal/handler/api/v1/account_handler_test.go::TestCacheKeys_Success`; account update fixtures | Covered for dashboard account cache-key fetch and account mutation/update fixtures; no frontend patch required. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/accountActions.js` | ApiClient | `actions` | account-scoped | POST | `internal/handler/api/v1/contact_handler_crud_test.go::TestChatwootFrontendContactMergeImportExportContracts`; `TestMergePublishesBaseUpdateAndMergeeDeleteEvents` | Covered for Woochat contact merge payload, raw contact response, merge side effects, and contact update/delete realtime events. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/agentBots.js` | ApiClient | `agent_bots` | account-scoped | POST, PATCH, DELETE | `internal/handler/api/v1/agent_bot_handler_test.go::TestAccountChatwootPayloadsAndRoutes`; route parity exact for CRUD/avatar/reset actions | Covered for account-scoped create/list/show/update/delete, multipart-compatible bind path, raw Chatwoot bot serializer keys, avatar delete, reset access token, reset secret, and account/global bot visibility boundaries. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/agentCapacityPolicies.js` | ApiClient | `agent_capacity_policies` | account-scoped | GET, POST, PUT, DELETE | `internal/handler/api/v1/agent_capacity_handler_test.go::TestChatwootPolicyInboxLimitAndUserFlow`; `TestChatwootPolicyInboxLimitAndUserValidationErrors` | Covered for policy CRUD, nested users, nested inbox limits, Chatwoot request body keys, count fields, and frontend-safe validation/not-found envelopes. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/agents.js` | ApiClient | `agents` | account-scoped | POST | `internal/handler/api/v1/agent_handler_test.go::TestCreateAgentChatwootFrontendPayload`; agent list/order fixtures | Covered for Woochat agent create response shape, raw Chatwoot agent serializer keys, role/availability/provider fields, and no envelope wrapping. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/assignableAgents.js` | ApiClient | `assignable_agents` | account-scoped | GET | `internal/handler/api/v1/assignable_agent_handler_test.go::TestList_StandaloneResourceUsesFrontendInboxIDsQuery`; `TestList_ResponseStructure`; multi-inbox intersection tests | Covered for Woochat `inbox_ids` query shape, standalone account-scoped resource path, response structure, admin inclusion, deduplication, and multi-inbox intersection semantics. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/assignmentPolicies.js` | ApiClient | `assignment_policies` | account-scoped | GET, POST, DELETE | `internal/handler/api/v1/assignment_policy_handler_test.go::TestPluralAssignmentPolicies_ChatwootPayloads`; `TestInboxAssignmentPolicy_ChatwootRoutes` | Covered for plural assignment-policy list payloads, assigned inbox counts, policy inbox listing, and account-scoped route compatibility. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/assignmentPolicies.js` | literal | `/api/v1/accounts/${this.accountIdFromRoute}/inboxes/${inboxId}/assignment_policy` | explicit | GET, POST, DELETE | `internal/handler/api/v1/assignment_policy_handler_test.go::TestInboxAssignmentPolicy_ChatwootRoutes` | Covered for Woochat inbox assignment-policy set/show/delete literal paths and `assignment_policy_id` payload. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/attributes.js` | ApiClient | `custom_attribute_definitions` | account-scoped | GET | `internal/handler/api/v1/custom_attribute_definition_handler_test.go::TestCustomAttributeDefinitionHandler_ListChatwootFrontendPayload`; filter-by-model fixtures | Covered for Woochat custom attribute list response shape, `attribute_model` filters, Chatwoot serializer keys, and raw array response. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/auditLogs.js` | ApiClient | `audit_logs` | account-scoped | GET | `internal/handler/api/v1/audit_handler_test.go::TestList_ChatwootPayloadFiltersAndSerializer`; pagination/order fixtures | Covered for audit log list filters, Chatwoot serializer keys, account scope, fixed page size, pagination meta, and descending order. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/automation.js` | ApiClient | `automation_rules` | account-scoped | POST | `internal/handler/api/v1/automation_rule_handler_test.go::TestChatwootFrontendCRUDCloneTogglePayloadsAndValidation` | Covered for Woochat automation CRUD, clone, toggle, Chatwoot payload keys, and validation envelopes. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/bulkActions.js` | ApiClient | `bulk_actions` | account-scoped | standard CRUD | `internal/handler/api/v1/bulk_action_handler_test.go::TestBulkActionHandler_ConversationEnqueuesChatwootPayload`; contact/invalid-type fixtures | Covered for conversation/contact bulk action request bodies, queued Chatwoot payloads, and invalid-type error payloads. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/campaigns.js` | ApiClient | `campaigns` | account-scoped | standard CRUD | `internal/handler/api/v1/campaign_handler_test.go::TestChatwootFrontendPayloadsAndLifecycleUseDisplayID`; `TestStartCreatesCampaignConversationsAndMessages` | Covered for Woochat campaign list/show/create/update/delete/start/stop payloads, display-ID lifecycle behavior, and campaign conversation/message side effects. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/cannedResponse.js` | ApiClient | `canned_responses` | account-scoped | GET | `internal/handler/api/v1/canned_response_handler_test.go::TestList_Success`; search/create/update/delete account-scope fixtures | Covered for Woochat canned-response list/search raw arrays, create/update raw payloads, delete empty OK, and account scoping. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/assistant.js` | ApiClient | `captain/assistants` | account-scoped | GET, POST | `internal/handler/api/v1/captain_assistant_handler_test.go::TestCaptainAssistantHandler_CRUDUsesChatwootPayloadShape`; playground fallback/provider fixtures | Covered for assistant CRUD/list/search payloads, inbox binding, playground request shape, account scope, disabled fallback, and provider-error fallback. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/bulkActions.js` | ApiClient | `captain/bulk_actions` | account-scoped | standard CRUD | `internal/handler/api/v1/captain_resource_parity_handler_test.go::TestCaptainBulkActionHandler_ChatwootResourceActions`; label-suggestion fixture | Covered for AssistantResponse approve/reject bulk action, AssistantDocument sync bulk action, invalid action envelope, and task-style label suggestion execution. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/copilotMessages.js` | ApiClient | `captain/copilot_threads` | account-scoped | GET, POST | `internal/handler/api/v1/copilot_thread_handler_test.go::TestCopilotThreadMessagesListAndCreateUseNestedPayloads`; push payload fixtures | Covered for nested copilot message list/create payloads, account/user scope, provider-disabled fallback, and Chatwoot event push shape. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/copilotThreads.js` | ApiClient | `captain/copilot_threads` | account-scoped | standard CRUD | `internal/handler/api/v1/copilot_thread_handler_test.go::TestCopilotThreadCreateReturnsChatwootPayload`; list/get/delete scope fixtures | Covered for copilot thread create/list/get/delete payloads, user ordering/scope, assistant scope validation, provider-enabled and provider-disabled flows. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/customTools.js` | ApiClient | `captain/custom_tools` | account-scoped | GET, POST, PUT, DELETE | `internal/handler/api/v1/captain_resource_parity_handler_test.go::TestCaptainCustomToolHandler_ChatwootToolPayloadsAndScope`; test-tool fixture | Covered for custom-tool list/show/create/update/delete payloads, admin-only auth config, slug generation, account scope, test-tool response, and validation envelopes. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/document.js` | ApiClient | `captain/documents` | account-scoped | GET, POST | `internal/handler/api/v1/captain_resource_parity_handler_test.go::TestCaptainDocumentHandler_ChatwootDocumentPayloadsAndSync`; service job fixtures | Covered for document list/show/create/update/delete/sync/crawl payloads, assistant filters, parser/embedding job side effects, and account scope. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/inboxes.js` | ApiClient | `captain/assistants` | account-scoped | GET, POST, DELETE | `internal/handler/api/v1/captain_assistant_handler_test.go::TestCaptainAssistantHandler_AccountScopedShowAndInboxBinding`; conversation inbox-assistant fixtures | Covered for assistant inbox binding/unbinding routes, account-scoped assistant show, and inbox assistant lookup used by conversations. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/preferences.js` | ApiClient | `captain/preferences` | account-scoped | GET, PUT | `internal/handler/api/v1/captain_preference_handler_test.go::TestCaptainPreferencesGetReturnsRawChatwootConfig`; update/validation fixtures | Covered for raw Captain preference config, account model/feature merge behavior, non-admin rejection, invalid model validation, and account ID errors. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/response.js` | ApiClient | `captain/assistant_responses` | account-scoped | GET | `internal/handler/api/v1/captain_resource_parity_handler_test.go::TestCaptainAssistantResponseHandler_ChatwootResponsePayloadsAndFilters`; process-response fixtures | Covered for assistant-response list/show/create/update/delete payloads, assistant/document/status/search filters, `Captain::Document` documentable normalization, and LLM process errors. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/scenarios.js` | ApiClient | `captain/assistants` | account-scoped | GET, POST, PUT, DELETE | `internal/handler/api/v1/captain_resource_parity_handler_test.go::TestCaptainScenarioHandler_ChatwootScenarioPayloadsAndScope` | Covered for assistant-scoped scenario create/list/show/update/delete payloads, enabled filtering, nested assistant payload, and account scope. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/tasks.js` | ApiClient | `captain/tasks` | account-scoped | POST | `internal/handler/api/v1/captain_task_handler_test.go::TestCaptainTaskHandler_Summarize_ChatwootRawPayload`; extended task label/follow-up fixtures | Covered for summarize/rewrite raw payloads, stream SSE shape, display-ID conversation lookup, disabled-provider response, label suggestion, and follow-up context update payloads. |
|
|
| Captain/Copilot | `reference/chatwoot/app/javascript/dashboard/api/captain/tools.js` | ApiClient | `captain/assistants/tools` | account-scoped | GET | `internal/handler/api/v1/captain_resource_parity_handler_test.go::TestCaptainCustomToolHandler_ChatwootToolPayloadsAndScope`; assistant tools route fixtures | Covered for assistant tools listing backed by account-scoped custom tools and Chatwoot custom tool serializer shape. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/changelog.js` | ApiClient | `changelog` | global | GET | `reference/chatwoot/app/javascript/shared/constants/links.js::CHANGELOG_API_URL` | Not a GoChat service contract: Woochat calls the external Hub URL `https://hub.2.chatwoot.com/changelogs` directly via `fetchFromHub`; GoChat does not need an API-compatible backend route for direct-connect. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/fbChannel.js` | ApiClient | `facebook_indicators` | account-scoped | POST | `internal/handler/api/v1/facebook_callbacks_handler_test.go::TestFacebookCallbacks_RegisterFacebookPage`; `TestFacebookCallbacks_ReauthorizePage` | Covered for Facebook page registration and reauthorization payloads used by Woochat `callbacks/register_facebook_page` and `callbacks/reauthorize_page`. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/googleClient.js` | ApiClient | `google` | account-scoped | POST | `internal/handler/api/v1/email_oauth_authorization_test.go::TestGoogleAuthorization_ReturnsChatwootPayload`; root OAuth callback fixtures | Covered for Google authorization URL/state payloads and callback redirect/config persistence used by Woochat email channel setup. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/instagramClient.js` | ApiClient | `instagram` | account-scoped | POST | `internal/handler/api/v1/social_authorization_test.go::TestInstagramAuthorization_ReturnsChatwootPayload`; root OAuth callback fixtures | Covered for Instagram authorization URL/state payloads, callback config persistence/upsert, and settings redirect behavior. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/microsoftClient.js` | ApiClient | `microsoft` | account-scoped | POST | `internal/handler/api/v1/email_oauth_authorization_test.go::TestMicrosoftAuthorization_ReturnsChatwootPayload`; email OAuth callback error fixtures | Covered for Microsoft authorization URL/state payloads and callback provider-error frontend redirects without phantom inbox creation. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/tiktokClient.js` | ApiClient | `tiktok` | account-scoped | POST | `internal/handler/api/v1/tiktok_channel_handler_test.go::TestTikTokChannel_Create_ChatwootSetupPayloadAndConfig`; root OAuth callback fixtures | Covered for TikTok authorization/setup payloads, persisted channel config, callback upsert, and settings redirect behavior. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/twilioChannel.js` | ApiClient | `channels/twilio_channel` | account-scoped | standard CRUD | `internal/handler/api/v1/twilio_channel_handler_test.go::TestTwilioChannel_Create_Success`; Twilio webhook/status fixtures | Covered for Twilio channel create raw inbox payload, persisted channel config/linkage, inbound callback, and delivered/read/failed status webhook behavior. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/twitterClient.js` | ApiClient | `twitter` | account-scoped | POST | `internal/handler/api/v1/twitter_authorization_handler_test.go::TestTwitterAuthorization_ReturnsChatwootPayload`; root OAuth callback fixtures | Covered for Twitter authorization URL/state payloads, signed state callback matching, callback config persistence/upsert, and settings redirect behavior. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/voice/voiceAPIClient.js` | ApiClient | `voice` | account-scoped | standard CRUD | `internal/router/router_test.go::TestTwilioVoiceRoutesServeConferenceAndPersistCallbacks`; `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestInitiateCall_CreatesConversationCallAndVoiceMessage` | Covered for Woochat voice client token/join/leave conference routes and contact initiate-call payload used by `useCallSession`; provider calls remain feature-gated by configured Twilio credentials. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/webChannel.js` | ApiClient | `inboxes` | account-scoped | standard CRUD | `internal/handler/api/v1/inbox_handler_parity_test.go::TestInboxHandler_ChatwootSerializerParity`; widget/admin config fixtures | Covered for web-widget inbox create/list/show/update/delete serializer shape, channel settings, web widget config, and sensitive-field role gating. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/whatsapp/whatsappCallsAPI.js` | ApiClient | `whatsapp_calls` | account-scoped | GET, POST | `internal/handler/api/v1/whatsapp_call_handler_test.go::TestWhatsAppCallHandler_AccountRoutesMatchFrontendAPI`; action/recording fixtures | Covered for WhatsApp call show/initiate/accept/reject/terminate/upload-recording account routes and frontend payloads. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/channel/whatsappChannel.js` | ApiClient | `whatsapp` | account-scoped | POST | `internal/service/whatsapp_authorization_service_test.go::TestWhatsAppAuthorization_CreateEmbeddedSignupInbox`; `TestWhatsAppAuthorization_ReauthorizesExistingInbox`; handler route parity | Covered for Woochat embedded signup and reauthorization POST `/whatsapp/authorization` payloads, success envelope, inbox linkage, and not-found/error envelopes. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/companies.js` | ApiClient | `companies` | account-scoped | GET, POST, DELETE | `internal/handler/api/v1/crm_frontend_smoke_test.go::TestChatwootFrontendCRMSmoke`; `internal/handler/api/v1/company_handler_test.go` | Covered for Woochat company list/search/show/create/update, nested contacts/search/add/remove, conversations, notes, custom-attribute deletion, avatar deletion, raw payloads, pagination, and account scope. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/contactNotes.js` | ApiClient | `notes` | account-scoped | standard CRUD | `internal/handler/api/v1/crm_frontend_smoke_test.go::TestChatwootFrontendCRMSmoke`; `internal/handler/api/v1/contact_handler_crud_test.go` note CRUD fixtures | Covered for Woochat contact notes list/create/delete route shape, raw note payloads, and contact/account scoping. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/contacts.js` | ApiClient | `contacts` | account-scoped | GET, POST, PATCH, DELETE | `internal/handler/api/v1/crm_frontend_smoke_test.go::TestChatwootFrontendCRMSmoke`; `internal/handler/api/v1/contact_handler_crud_test.go::TestChatwootFrontendContactMergeImportExportContracts` | Covered for Woochat contact list/search/filter/active/show/create/update, labels, conversations, contactable inboxes, call initiation, import/export, merge, custom-attribute deletion, avatar deletion, raw payloads, pagination, and account scope. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/conversations.js` | ApiClient | `conversations` | account-scoped | GET, POST | `internal/handler/api/v1/conversation_handler_test.go::TestUnreadCounts_Success`; `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestUpdateLabels_Success`; message/realtime fixtures | Covered for Woochat conversation labels get/update, unread counts, core list/create/message serializer payloads, and realtime message/conversation event shapes. |
|
|
| CSAT/Survey | `reference/chatwoot/app/javascript/dashboard/api/csatReports.js` | ApiClient | `csat_survey_responses` | account-scoped | GET | `internal/handler/api/v1/csat_survey_handler_test.go::TestCsatSurveyHandlerTestSuite/TestCSATFrontendContractShapes`; `internal/handler/api/v1/csat_metrics_handler_test.go` | Covered for Woochat report list/metrics/download params (`since`, `until`, `user_ids`, `inbox_id`, `team_id`, `rating`, `sort=-created_at`), payload shape, CSV download, and review-note update. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/customRole.js` | ApiClient | `custom_roles` | account-scoped | standard CRUD | `internal/handler/api/v1/custom_role_handler_test.go::TestCustomRoleHandlerSuite`; permission/profile fixtures | Covered for Woochat custom-role list/create/show/update/delete raw payloads, permission serialization, account scope, and profile permission projection. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/customViews.js` | ApiClient | `custom_filters` | account-scoped | GET, DELETE | `internal/handler/api/v1/custom_filter_handler_test.go::TestCustomFilterHandlerSuite` | Covered for Woochat custom-view list by `filter_type`, create/show/update/delete payloads, and account-scoped errors. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/dashboardApps.js` | ApiClient | `dashboard_apps` | account-scoped | standard CRUD | `internal/handler/api/v1/dashboard_app_handler_test.go::TestDashboardAppHandlerSuite` | Covered for Woochat dashboard-app list/create/show/update/delete raw payloads, raw request bodies, 204 delete, and account scope. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `/api/v1/profile` | explicit | - | `internal/handler/api/v1/profile_handler_test.go::TestProfileHandlerSuite/TestGet_Success`; update fixtures | Covered for Woochat profile bootstrap and profile update payloads, user/account serializer keys, settings JSON, password update validation, and multipart profile form parity. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `/api/v1/profile/auto_offline` | explicit | - | `internal/handler/api/v1/profile_handler_test.go::TestProfileHandlerSuite/TestSetAutoOffline_ReturnsChatwootUserSerializer` | Covered for Woochat auto-offline mutation request and raw Chatwoot user serializer response. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `/api/v1/profile/availability` | explicit | - | `internal/handler/api/v1/profile_handler_test.go::TestProfileHandlerSuite/TestSetAvailability_ReturnsChatwootUserSerializer` | Covered for Woochat availability mutation request and raw Chatwoot user serializer response. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `/api/v1/profile/avatar` | explicit | - | `internal/handler/api/v1/profile_handler_test.go::TestProfileHandlerSuite/TestUpdateAvatar_Success`; `TestDeleteAvatar_ReturnsChatwootUserSerializer` | Covered for Woochat profile avatar update/delete calls, raw Chatwoot user serializer response, persisted avatar clearing, and validation errors. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `/api/v1/profile/resend_confirmation` | explicit | - | `internal/handler/api/v1/profile_handler_test.go::TestProfileHandlerSuite/TestResendConfirmation_DoesNotSendForConfirmedUser`; invited/unconfirmed variants | Covered for Woochat resend-confirmation success payloads and confirmed, unconfirmed, and invited-user mail side effects. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `/api/v1/profile/reset_access_token` | explicit | - | `internal/handler/api/v1/profile_handler_test.go::TestProfileHandlerSuite/TestResetAccessToken_RegeneratesTokenInChatwootUserSerializer` | Covered for Woochat reset-access-token mutation and regenerated token in raw Chatwoot user serializer response. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `/api/v1/profile/set_active_account` | explicit | - | `internal/handler/api/v1/profile_handler_test.go::TestProfileHandlerSuite/TestSetActiveAccount_UpdatesMembershipActiveAt`; repository active-at fixtures | Covered for Woochat active-account mutation payload, membership `active_at` persistence, and user serializer response. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `/auth/validate_token` | explicit | - | `internal/handler/api/v1/auth_handler_test.go::TestChatwootAuthValidateTokenReturnsPayloadData`; auth middleware token-header fixtures | Covered for DeviseTokenAuth-compatible validate-token payload, exposed token headers, user data, and account membership keys. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `api/v1/accounts.json` | explicit | - | `reference/chatwoot/app/javascript/dashboard/api/specs/endPoints.spec.js` only; frontend import grep | Not a current GoChat service contract: the `register` endpoint constant is only asserted by the frontend unit spec and no reused dashboard runtime module imports `endPoints('register')`. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `api/v1/accounts/${accountId}/callbacks/facebook_pages.json` | explicit | - | `internal/handler/api/v1/facebook_callbacks_handler_test.go::TestFacebookCallbacks_FacebookPagesPayload` | Covered for Woochat Facebook page picker callback payload `{data:{page_details,user_access_token}}` and existing-page flags. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `api/v1/conversations.json` | explicit | - | `reference/chatwoot/app/javascript/dashboard/api/specs/endPoints.spec.js` only; frontend import grep | Not a current GoChat service contract: the legacy `me`/`getInbox` endpoint constants are only asserted by the frontend unit spec; runtime conversation clients use account-scoped `/api/v1/accounts/:account_id/conversations`. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `auth/password` | explicit | - | `internal/handler/api/v1/auth_handler_test.go::TestChatwootAuthResetPasswordReturnsReferenceMessage`; password update fixtures | Covered for Woochat reset-password request message, token persistence, and password update/reset-token validation. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/endPoints.js` | literal | `auth/sign_out` | explicit | - | `internal/handler/api/v1/auth_handler_test.go::TestChatwootAuthSignOutRevokesRefreshSession` | Covered for Woochat sign-out route, refresh-session revocation, and empty success response behavior. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/enterprise/specs/account.spec.js` | literal | `/enterprise/api/v1/checkout` | explicit | - | auth/profile/account handlers and account cache routes | Fixture covered by `TestEnterpriseAccountLiteralFrontendPathsUseCurrentAccountContext` |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/enterprise/specs/account.spec.js` | literal | `/enterprise/api/v1/limits` | explicit | - | auth/profile/account handlers and account cache routes | Fixture covered by `TestEnterpriseAccountLiteralFrontendPathsUseCurrentAccountContext` |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/enterprise/specs/account.spec.js` | literal | `/enterprise/api/v1/subscription` | explicit | - | auth/profile/account handlers and account cache routes | Fixture covered by `TestEnterpriseAccountLiteralFrontendPathsUseCurrentAccountContext` |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/enterprise/specs/account.spec.js` | literal | `/enterprise/api/v1/toggle_deletion` | explicit | - | auth/profile/account handlers and account cache routes | Fixture covered by `TestEnterpriseAccountLiteralFrontendPathsUseCurrentAccountContext` |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/enterprise/specs/account.spec.js` | literal | `/enterprise/api/v1/topup_checkout` | explicit | - | auth/profile/account handlers and account cache routes | Fixture covered by `TestEnterpriseAccountLiteralFrontendPathsUseCurrentAccountContext` |
|
|
| Help Center | `reference/chatwoot/app/javascript/dashboard/api/helpCenter/articles.js` | ApiClient | `articles` | account-scoped | GET, POST, PATCH, DELETE | `internal/handler/api/v1/article_handler_test.go::TestArticleHandlerSuite/TestDashboardArticleCRUD_ChatwootFrontendPayloadsAndRoutes`; bulk/reorder fixtures | Covered for Woochat dashboard article list/search/show/create/update/delete, slug-scoped portal routes, raw frontend body mapping, reorder, bulk translate/status/category/delete actions, public JSON/markdown/pixel side effects, and account scope. |
|
|
| Help Center | `reference/chatwoot/app/javascript/dashboard/api/helpCenter/categories.js` | ApiClient | `categories` | account-scoped | GET, POST, PATCH, DELETE | `internal/handler/api/v1/category_handler_test.go::TestCategoryHandlerSuite/TestCreate_RawFrontendPayloadAndSlugPortal`; list/update/delete/reorder fixtures | Covered for Woochat slug-scoped category list/create/update/delete/reorder, locale filtering, raw frontend payloads, and public category payloads. |
|
|
| Help Center | `reference/chatwoot/app/javascript/dashboard/api/helpCenter/portals.js` | ApiClient | `portals` | account-scoped | GET, POST, PATCH, DELETE | `internal/handler/api/v1/portal_handler_test.go::TestPortalHandlerSuite/TestList_ReturnsChatwootPayloadEnvelope`; update/delete/send-instructions fixtures | Covered for Woochat portal list/get/update/delete-by-slug, logo/instructions/status-compatible routes, Chatwoot payload envelope, public redirect/get/sitemap, and archived portal filtering. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/inbox/conversation.js` | ApiClient | `conversations` | account-scoped | GET, POST, PATCH, DELETE | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestList_Success`; label/status/assignment/snooze/filter fixtures | Covered for Woochat inbox conversation list/show/create/update/delete, filters/meta/search, labels, mute/unmute, status toggles, snooze, priority, team/agent assignment, transcript, and display-ID route behavior. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/inbox/message.js` | ApiClient | `conversations` | account-scoped | GET, POST, DELETE | `internal/handler/api/v1/message_handler_test.go::TestMessageHandlerTestSuite/TestList_Success`; create/delete/retry/translate fixtures | Covered for Woochat message list/create/delete/retry/translate, route conversation precedence, outgoing defaults, multipart attachments, content attributes, sender fields, and Chatwoot serializer shape. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/inbox/message.js` | literal | `${this.url}/${conversationId}/messages` | explicit | GET, POST, DELETE | `internal/handler/api/v1/message_handler_test.go::TestMessageHandlerTestSuite/TestList_Success`; create/delete fixtures | Covered for literal nested Woochat message path, list pagination, create payloads, multipart uploads, delete response, and invalid conversation errors. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/inboxHealth.js` | ApiClient | `inboxes` | account-scoped | GET, POST | `internal/handler/api/v1/inbox_handler_parity_test.go::TestInboxHandler_HealthReturnsWhatsAppCloudRawPayload`; provider failure fixture | Covered for Woochat inbox health success/failure payloads, WhatsApp Cloud raw fields, provider failure state, and account/inbox param validation. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/inboxMembers.js` | ApiClient | `inbox_members` | account-scoped | PATCH | `internal/handler/api/v1/inbox_member_handler_test.go::TestInboxMemberHandlerSuite/TestAccountScopedInboxMembers_ChatwootPayloadAndDiffUpdate` | Covered for Woochat inbox member list/update payloads, diff semantics, account-scoped route, and assigned-agent serializer keys. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/inboxes.js` | ApiClient | `inboxes` | account-scoped | GET, POST, DELETE | `internal/handler/api/v1/inbox_handler_parity_test.go::TestInboxHandler_ChatwootSerializerParity`; create/update binding and avatar/campaign fixtures | Covered for Woochat inbox list/show/create/update/delete, serializer shape, channel settings, sensitive field gating, create/update request binding, avatar delete validation, campaigns, and sync-template queued response. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/integrations/dyte.js` | ApiClient | `integrations/dyte` | account-scoped | POST | `internal/handler/api/v1/dyte_integration_handler_test.go::TestDyteIntegrationHandlerCreateMeetingReturnsMessagePayload`; participant fixture | Covered for Woochat Dyte create-meeting and add-participant payloads, integration message content attributes, auth token response, and invalid message error. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/integrations/linear.js` | ApiClient | `integrations/linear` | account-scoped | GET, POST | `internal/service/linear_integration_service_test.go::TestLinearIntegrationService_ChatwootFrontendPayloads`; handler validation fixtures | Covered for Woochat Linear teams, team entities, create/link/unlink issue, linked issues, search issue payloads, activity side effects, and provider error envelopes. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/integrations/shopify.js` | ApiClient | `integrations/shopify` | account-scoped | GET | `internal/handler/api/v1/shopify_integration_handler_test.go::TestShopifyIntegration_Auth_ReturnsChatwootRedirectPayload`; validation fixtures | Covered for Woochat Shopify auth redirect payload, OAuth query fields, configured callback URL, provider-not-configured/validation envelopes; orders live provider path remains credential-gated. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/integrations.js` | ApiClient | `integrations/apps` | account-scoped | GET, POST, PATCH, DELETE | `internal/handler/api/v1/integration_hook_handler_suite_test.go::TestIntegrationHookHandlerSuite/TestChatwootFrontendAppsAndHooksNoTrailingSlashPayloads`; Slack/Shopify/service fixtures | Covered for Woochat integrations apps list, hook create/delete, Slack connect/update/list-channels/delete routes, Shopify auth redirect payload, raw app/hook response shapes, no-trailing-slash frontend paths, and provider API behavior via fake Slack transport where needed. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/labels.js` | ApiClient | `labels` | account-scoped | standard CRUD | `internal/handler/api/v1/label_handler_test.go::TestLabelHandlerSuite/TestListTags_Success`; create/update/delete fixtures | Covered for Woochat label list/create/update/delete payloads, raw name compatibility, account scoping, and conversation label association routes. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/liveReports.js` | ApiClient | `live_reports` | account-scoped | GET | `internal/handler/api/v1/live_report_handler_test.go::TestLiveReportHandlerTestSuite/TestAPIV2LiveReports_ChatwootFrontendPayloadShapes`; store-refresh fixture | Covered for Woochat API v2 live report conversation metrics, grouped metrics, team filters, Chatwoot error shape, and store refresh request sequence. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/macros.js` | ApiClient | `macros` | account-scoped | POST | `internal/handler/api/v1/macro_handler_test.go::TestMacroHandlerSuite/TestExecute_ChatwootFrontendAwaitsEmptyOKAndSupportsSingleConversationID`; CRUD fixtures | Covered for Woochat macro CRUD payloads, attachment action signed-upload serialization, execute route with single/multiple conversation IDs, display-ID mutation semantics, and empty OK response. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/mfa.js` | ApiClient | `profile/mfa` | account-scoped | POST, DELETE | `internal/handler/api/v1/mfa_handler_test.go::TestMFAHandlerSuite/TestProfileMFA_EnableVerifyBackupAndDisableUseFrontendPayloads`; status fixture | Covered for Woochat MFA status/enable/verify/backup-code/disable payloads, raw Chatwoot response shapes, and validation errors. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/notificationSubscription.js` | ApiClient | `notification_subscriptions` | global | standard CRUD | `internal/handler/api/v1/notification_subscription_handler_test.go::TestNotificationSubscriptionCreateAcceptsPushHelperPayload`; destroy fixtures | Covered for Woochat push-helper create/update/destroy payloads, global and account-scoped routes, push-token deletion, Rails wrapper body, and empty OK delete behavior. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/notifications.js` | ApiClient | `notifications` | account-scoped | GET, POST, DELETE | `internal/handler/api/v1/notification_handler_test.go::TestNotificationHandler_List_ChatwootEnvelopeAndIncludes`; mutation/realtime fixtures | Covered for Woochat notification list envelope, actor serialization, unread/read/snooze/delete/destroy-all mutations, account/user scoping, and Chatwoot realtime payloads. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/notion_auth.js` | ApiClient | `notion` | account-scoped | POST | `internal/handler/api/v1/notion_integration_handler_test.go::TestNotionIntegration_Authorization_ReturnsChatwootPayload`; delete fixture | Covered for Woochat Notion authorization URL payload, redirect URI, config validation, and integration delete empty OK behavior. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/onboarding.js` | ApiClient | `onboarding` | account-scoped | PATCH | `internal/handler/api/v1/account_handler_test.go::TestUpdateOnboarding_Success`; validation fixtures | Covered for Woochat onboarding step PATCH route, account-scoped update side effect, response payload, and invalid-step validation. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/reports.js` | ApiClient | `reports` | account-scoped | GET | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_AllFrontendEndpointShapes`; report CSV/value fixtures | Covered for Woochat reports API v2 index/summary/conversations/agents/inboxes/labels/teams/conversations_summary/conversation_traffic/bot_metrics/bot_summary endpoint shapes, timezone/value parity, CSV downloads, and outgoing-message grouped counts. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/samlSettings.js` | ApiClient | `saml_settings` | account-scoped | GET, POST, PUT, DELETE | `internal/handler/api/v1/account_saml_settings_handler_test.go::TestAccountSamlSettingsHandlerTestSuite/TestChatwootFrontendCollectionCRUDPayloads`; route registration uses collection paths | Covered for Woochat SAML settings collection GET/POST/PUT/DELETE, `{ saml_settings: ... }` request wrapper, raw frontend-readable response payload, alias fields `sso_url`/`certificate`, and backward-compatible id routes. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/search.js` | ApiClient | `search` | account-scoped | GET | `internal/handler/api/v1/search_handler_test.go::TestSearchHandler_GlobalSearch_UsesReferenceResultTypes`; live Meilisearch smoke evidence | Covered for Woochat global search result types, conversations/messages/contacts/articles search payloads, reference filters, hydrated message/article payloads, and live Meilisearch smoke. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/sla.js` | ApiClient | `sla_policies` | account-scoped | standard CRUD | `internal/handler/api/v1/sla_policy_handler_test.go::TestSlaPolicyHandler_List_Success`; CRUD/inbox association fixtures | Covered for Woochat SLA policy list/create/show/update/delete, validation, audit entries, inbox association payloads, and side effects. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/slaReports.js` | ApiClient | `applied_slas` | account-scoped | GET | `internal/handler/api/v1/sla_policy_handler_test.go::TestSlaPolicyHandler_ListAppliedSlas_ChatwootPayloadAndFilters`; metrics/download fixtures | Covered for Woochat applied-SLA list filters, metrics report shape, download payload, and service-level missed/hit report filters. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/specs/account.spec.js` | literal | `/api/v1/accounts` | explicit | - | `internal/handler/api/v1/account_handler_test.go::TestAccountHandlerTestSuite/TestCreate_Success`; router route fixture | Covered for Woochat account create literal path `POST /api/v1/accounts`, no-trailing-slash route registration, Chatwoot `data.account_id` response shape, and `account_name` alias. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/accountActions.spec.js` | literal | `/api/v1/actions/contact_merge` | explicit | - | `internal/handler/api/v1/contact_handler_crud_test.go::TestChatwootFrontendContactMergeImportExportContracts` | Covered for frontend merge request body and Chatwoot raw contact response on the account-scoped actions path; bare spec path remains a frontend unit-test artifact without account context. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/agentCapacityPolicies.spec.js` | literal | `/api/v1/accounts/1/agent_capacity_policies/123/inbox_limits` | explicit | - | `internal/handler/api/v1/agent_capacity_handler_test.go::TestAgentCapacityHandlerSuite/TestChatwootPolicyInboxLimitAndUserFlow`; route dump | Covered for Woochat create inbox-limit literal path, raw `inbox_id`/`conversation_limit` payload, duplicate validation, and registered account-scoped route. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/agentCapacityPolicies.spec.js` | literal | `/api/v1/accounts/1/agent_capacity_policies/123/inbox_limits/789` | explicit | - | `internal/handler/api/v1/agent_capacity_handler_test.go::TestAgentCapacityHandlerSuite/TestChatwootPolicyInboxLimitAndUserFlow`; validation fixture | Covered for Woochat update/delete inbox-limit literal paths, PUT/PATCH mutation payloads, raw updated limit serializer, and delete empty OK behavior. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/agentCapacityPolicies.spec.js` | literal | `/api/v1/accounts/1/agent_capacity_policies/123/users` | explicit | - | `internal/handler/api/v1/agent_capacity_handler_test.go::TestAgentCapacityHandlerSuite/TestChatwootPolicyInboxLimitAndUserFlow`; validation fixture | Covered for Woochat capacity-policy get-users/add-user literal paths, `user_id` request body, raw assigned user payload, and list serializer. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/agentCapacityPolicies.spec.js` | literal | `/api/v1/accounts/1/agent_capacity_policies/123/users/456` | explicit | - | `internal/handler/api/v1/agent_capacity_handler_test.go::TestAgentCapacityHandlerSuite/TestChatwootPolicyInboxLimitAndUserFlow`; validation fixture | Covered for Woochat remove-user literal path, account/policy scoped deletion, post-delete list behavior, and not-found validation. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/agents.spec.js` | literal | `/api/v1/agents/bulk_create` | explicit | - | `internal/handler/api/v1/agent_handler_test.go::TestAgentHandlerTestSuite/TestBulkCreate`; grep of runtime callers | Covered as a frontend unit-test-only literal: runtime `agents.js` is account-scoped under `/api/v1/accounts/:account_id/agents/bulk_create`; GoChat route and bulk-create payload/side effects are covered. |
|
|
| Help Center | `reference/chatwoot/app/javascript/dashboard/api/specs/article.spec.js` | literal | `/api/v1/portals/room-rental/articles/1` | explicit | - | `internal/handler/api/v1/article_handler_test.go::TestArticleHandlerSuite/TestDashboardArticleCRUD_ChatwootFrontendPayloadsAndRoutes`; runtime grep | Covered as frontend spec-only bare URL; runtime `helpCenter/articles.js` is account-scoped under `/api/v1/accounts/:account_id/portals/:portal_slug/articles/:id`, with show/update/delete payloads covered. |
|
|
| Help Center | `reference/chatwoot/app/javascript/dashboard/api/specs/article.spec.js` | literal | `/api/v1/portals/room-rental/articles/bulk_actions/update_category` | explicit | - | `internal/handler/api/v1/article_handler_test.go::TestArticleHandlerSuite/TestBulkActions_FrontendRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped bulk update-category route and `{ ids, category_id }` request body are fixture-covered. |
|
|
| Help Center | `reference/chatwoot/app/javascript/dashboard/api/specs/article.spec.js` | literal | `/api/v1/portals/room-rental/articles?page=1&locale=en-US&status=published&author_id=1` | explicit | - | `internal/handler/api/v1/article_handler_test.go::TestArticleHandlerSuite/TestDashboardArticleCRUD_ChatwootFrontendPayloadsAndRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped article list supports portal slug, status, locale, category/sort filters, payload array, and meta counts. |
|
|
| Help Center | `reference/chatwoot/app/javascript/dashboard/api/specs/article.spec.js` | literal | `/api/v1/portals/room-rental/articles?query=test` | explicit | - | `internal/handler/api/v1/article_handler_test.go::TestArticleHandlerSuite/TestPublicSearch_ReturnsPublishedLocaleSearchArticlePayload`; runtime grep | Covered as frontend spec-only bare URL; runtime dashboard search popover and public help-center search routes return published locale-filtered search payloads with meta. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/assignableAgents.spec.js` | literal | `/api/v1/assignable_agents` | explicit | GET | `internal/handler/api/v1/assignable_agent_handler_test.go::TestList_StandaloneResourceUsesFrontendInboxIDsQuery` | Covered as frontend unit-test URL shorthand; runtime route is account-scoped `/api/v1/accounts/:account_id/assignable_agents` with identical `inbox_ids[]` query semantics. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/assignmentPolicies.spec.js` | literal | `/api/v1/accounts/1/assignment_policies/123/inboxes` | explicit | - | `internal/handler/api/v1/assignment_policy_handler_test.go::TestInboxAssignmentPolicy_ChatwootRoutes` | Covered for policy inbox listing path generated by Woochat assignment policy API. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/assignmentPolicies.spec.js` | literal | `/api/v1/accounts/1/inboxes/456/assignment_policy` | explicit | - | `internal/handler/api/v1/assignment_policy_handler_test.go::TestInboxAssignmentPolicy_ChatwootRoutes` | Covered for inbox assignment-policy set/show/delete paths and `assignment_policy_id` payload generated by Woochat. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/specs/automation.spec.js` | literal | `/api/v1/automation_rules` | explicit | - | `internal/handler/api/v1/automation_rule_handler_test.go::TestAutomationRuleHandlerTestSuite/TestChatwootFrontendCRUDCloneTogglePayloadsAndValidation`; route dump | Covered as frontend spec-only bare URL; runtime `automation.js` is account-scoped under `/api/v1/accounts/:account_id/automation_rules`, with list/create/update/delete/clone/toggle payloads covered. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js` | literal | `/api/v1/callbacks/reauthorize_page` | explicit | - | `internal/handler/api/v1/facebook_callbacks_handler_test.go::TestFacebookCallbacks_RegisterFacebookPage` | Covered as frontend unit-test shorthand; runtime route is account-scoped `/api/v1/accounts/:account_id/callbacks/reauthorize_page` with the same `omniauth_token`/`inbox_id` payload. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js` | literal | `/api/v1/callbacks/register_facebook_page` | explicit | - | `internal/handler/api/v1/facebook_callbacks_handler_test.go::TestFacebookCallbacks_RegisterFacebookPage` | Covered as frontend unit-test shorthand; runtime route is account-scoped `/api/v1/accounts/:account_id/callbacks/register_facebook_page` with Chatwoot page registration payload. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/companies.spec.js` | literal | `/api/v1/companies/1/avatar` | explicit | GET | `internal/handler/api/v1/company_handler_test.go::TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`; route dump | Covered as account-scoped runtime path `/api/v1/accounts/:account_id/companies/:company_id/avatar`; delete-avatar raw company payload is covered by `TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes` and route dump. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/companies.spec.js` | literal | `/api/v1/companies/1/contacts` | explicit | GET | `internal/handler/api/v1/company_handler_test.go::TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`; route dump | Covered as account-scoped runtime path `/api/v1/accounts/:account_id/companies/:company_id/contacts`; list/create with `{ contact_id }` body and payload/meta shape are covered by `TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/companies.spec.js` | literal | `/api/v1/companies/1/contacts/2` | explicit | GET | `internal/handler/api/v1/company_handler_test.go::TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`; route dump | Covered as account-scoped runtime path `/api/v1/accounts/:account_id/companies/:company_id/contacts/:contact_id`; unlink empty OK and side effect are covered by `TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/companies.spec.js` | literal | `/api/v1/companies/1/contacts/search?q=jane+%26+co&page=3` | explicit | GET | `internal/handler/api/v1/company_handler_test.go::TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`; route dump | Covered as account-scoped runtime path `/api/v1/accounts/:account_id/companies/:company_id/contacts/search`; encoded query/page response envelope is covered by `TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/companies.spec.js` | literal | `/api/v1/companies/1/contacts?page=2` | explicit | GET | `internal/handler/api/v1/company_handler_test.go::TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`; route dump | Covered as account-scoped runtime path `/api/v1/accounts/:account_id/companies/:company_id/contacts?page=2`; paginated contact list envelope is covered by `TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/companies.spec.js` | literal | `/api/v1/companies/1/destroy_custom_attributes` | explicit | GET | `internal/handler/api/v1/company_handler_test.go::TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`; route dump | Covered as account-scoped runtime path `/api/v1/accounts/:account_id/companies/:company_id/destroy_custom_attributes`; `{ custom_attributes }` body and mutated payload are covered by `TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/companies.spec.js` | literal | `/api/v1/companies/search?q=&page=1&sort=name` | explicit | GET | `internal/handler/api/v1/company_handler_test.go::TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`; route dump | Covered as account-scoped runtime path `/api/v1/accounts/:account_id/companies/search`; empty query validation behavior is covered by company search fixtures and route dump. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/companies.spec.js` | literal | `/api/v1/companies/search?q=acme+%26+co&page=2&sort=domain` | explicit | GET | `internal/handler/api/v1/company_handler_test.go::TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`; route dump | Covered as account-scoped runtime path `/api/v1/accounts/:account_id/companies/search`; encoded query/page/sort response envelope is covered by `TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/companies.spec.js` | literal | `/api/v1/companies?page=1&sort=name` | explicit | GET | `internal/handler/api/v1/company_handler_test.go::TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`; route dump | Covered as account-scoped runtime path `/api/v1/accounts/:account_id/companies?page=1&sort=name`; list payload/meta and no-trailing-slash route are covered by `TestCompanyHandlerSuite/TestChatwootCompanyFrontendLiteralSpecRuntimeRoutes`. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/contacts.spec.js` | literal | `/api/v1/contacts/1/avatar` | explicit | GET | `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestChatwootFrontendContactsSpecRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime `contacts.js` is account-scoped under `/api/v1/accounts/:account_id/contacts/:contact_id/avatar`; DELETE clears `avatar_url`/`thumbnail` in Chatwoot payload shape. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/contacts.spec.js` | literal | `/api/v1/contacts/1/contactable_inboxes` | explicit | GET | `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestChatwootFrontendContactsSpecRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped `contactable_inboxes` alias returns `{ payload: [{ inbox, source_id }] }` for Woochat contact forms. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/contacts.spec.js` | literal | `/api/v1/contacts/1/conversations` | explicit | GET | `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestChatwootFrontendContactsSpecRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped contact conversations return Chatwoot conversation payloads including `meta`, `messages`, and account/inbox IDs. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/contacts.spec.js` | literal | `/api/v1/contacts/1/destroy_custom_attributes` | explicit | GET | `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestChatwootFrontendContactsSpecRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped destroy-custom-attributes route accepts `{ custom_attributes }` and returns the updated contact payload. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/contacts.spec.js` | literal | `/api/v1/contacts/1/labels` | explicit | GET | `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestChatwootFrontendContactsSpecRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped labels route covers GET and POST `{ labels }` with raw label-array payloads. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/contacts.spec.js` | literal | `/api/v1/contacts/filter?include_contact_inboxes=false&page=1&sort=name` | explicit | GET | `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestChatwootFrontendContactsSpecRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped filter route accepts Chatwoot filter payloads and honors `include_contact_inboxes=false`, `page`, and `sort` query params. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/contacts.spec.js` | literal | `/api/v1/contacts/import` | explicit | GET | `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestChatwootFrontendContactsSpecRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped import route accepts multipart `import_file`, and missing-file validation returns Chatwoot-compatible 422 `File is blank`. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/contacts.spec.js` | literal | `/api/v1/contacts/search?include_contact_inboxes=false&page=1&sort=date&q=leads&labels[]=customer-support` | explicit | GET | `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestChatwootFrontendContactsSpecRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped search supports `sort=date`, `labels[]`, `q`, and `include_contact_inboxes=false` with payload/meta response. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/contacts.spec.js` | literal | `/api/v1/contacts?include_contact_inboxes=false&page=1&sort=name&labels[]=customer-support` | explicit | GET | `internal/handler/api/v1/contact_handler_crud_test.go::TestContactHandlerCRUDTestSuite/TestChatwootFrontendContactsSpecRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped list supports label filtering and suppresses embedded contact inboxes when Woochat passes `include_contact_inboxes=false`. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/conversations.spec.js` | literal | `/api/v1/conversations/1/labels` | explicit | - | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestChatwootFrontendConversationLabelsRuntimeRoutes`; route dump | Covered as frontend spec-only bare URL; runtime `conversations.js` is account-scoped under `/api/v1/accounts/:account_id/conversations/:conversation_id/labels`; GET returns `{ payload: [] }` and POST `{ labels }` returns `{ payload: { conversationId, labels } }` for the Woochat conversationLabels store. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/conversations.spec.js` | literal | `/api/v1/conversations/unread_counts` | explicit | - | `internal/handler/api/v1/conversation_handler_test.go::TestConversationHandlerTestSuite/TestUnreadCounts_Success`; route dump | Covered as frontend spec-only bare URL; runtime `conversations.js` is account-scoped under `/api/v1/accounts/:account_id/conversations/unread_counts` and returns Chatwoot `{ payload: { inboxes, labels, teams } }` without the generic success wrapper. |
|
|
| CSAT/Survey | `reference/chatwoot/app/javascript/dashboard/api/specs/csatReports.spec.js` | literal | `/api/v1` | explicit | GET | `internal/handler/api/v1/csat_survey_handler_test.go::TestCSATFrontendContractShapes`; route dump | Covered as frontend spec-only ApiClient version assertion, not a runtime request; `csatReports.js` runtime calls are account-scoped below `/api/v1/accounts/:account_id/csat_survey_responses` and fixture-covered. |
|
|
| CSAT/Survey | `reference/chatwoot/app/javascript/dashboard/api/specs/csatReports.spec.js` | literal | `/api/v1/csat_survey_responses` | explicit | GET | `internal/handler/api/v1/csat_survey_handler_test.go::TestCSATFrontendContractShapes`; route dump | Covered as frontend spec-only bare URL; runtime `csatReports.js` is account-scoped under `/api/v1/accounts/:account_id/csat_survey_responses` with `page`, `since`, `until`, `sort`, `user_ids`, `inbox_id`, `team_id`, and `rating` filters plus Chatwoot list item shape. |
|
|
| CSAT/Survey | `reference/chatwoot/app/javascript/dashboard/api/specs/csatReports.spec.js` | literal | `/api/v1/csat_survey_responses/download` | explicit | GET | `internal/handler/api/v1/csat_survey_handler_test.go::TestCSATFrontendContractShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped download route accepts the Woochat report filters and returns Chatwoot CSV headers/content-disposition. |
|
|
| CSAT/Survey | `reference/chatwoot/app/javascript/dashboard/api/specs/csatReports.spec.js` | literal | `/api/v1/csat_survey_responses/metrics` | explicit | GET | `internal/handler/api/v1/csat_survey_handler_test.go::TestCSATFrontendContractShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped metrics route accepts `since`, `until`, `user_ids`, `inbox_id`, `team_id`, and `rating`, and returns Chatwoot metric keys. |
|
|
| Auth/Profile/Account | `reference/chatwoot/app/javascript/dashboard/api/specs/endPoints.spec.js` | literal | `api/v1/accounts.json` | explicit | - | `internal/handler/api/v1/account_handler_test.go::TestAccountHandlerTestSuite/TestCreate_Success`; `internal/handler/api/v1/account_handler_test.go::TestAccountHandlerTestSuite/TestCreate_ChatwootAccountName`; route dump | Covered as frontend spec-only legacy constant from `endPoints.js`; runtime account creation uses `/api/v1/accounts`/account-scoped handlers, with Chatwoot `account_name` alias and response payload covered. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/endPoints.spec.js` | literal | `api/v1/conversations.json` | explicit | - | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestList_Success`; route dump | Covered as frontend spec-only legacy constant from `endPoints.js`; runtime conversation list is account-scoped under `/api/v1/accounts/:account_id/conversations` and returns Chatwoot list `{ data: { meta, payload } }` shape. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations` | explicit | GET | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestList_Success`; route dump | Covered as frontend spec-only bare URL; runtime `inbox/conversation.js` is account-scoped under `/api/v1/accounts/:account_id/conversations` and supports Woochat list params with Chatwoot `{ data: { meta, payload } }` response shape. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/1/attachments` | explicit | GET | `internal/handler/api/v1/conversation_handler_test.go::TestConversationHandlerTestSuite/TestListAttachmentsReturnsChatwootPayload`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped attachments route returns Chatwoot `{ meta: { total_count }, payload }` attachment items. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/12/assignments` | explicit | GET | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestAssignTeam_WithChatwootAssigneeID`; `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestAssignTeam_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped assignments route accepts Woochat `assignee_id` and `team_id` payloads and returns serialized user/team objects. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/12/toggle_status` | explicit | GET | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestToggleStatus_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped toggle-status route accepts `{ status, snoozed_until }` and returns Chatwoot success/current-status payload. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/12/toggle_typing_status` | explicit | GET | `internal/handler/api/v1/conversation_handler_test.go::TestConversationHandlerTestSuite/TestToggleTypingStatus_ChatwootRouteSuccess`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped `toggle_typing_status` route accepts `{ typing_status, is_private }` and returns empty 200 like Chatwoot. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/12/update_last_seen` | explicit | GET | `internal/handler/api/v1/conversation_handler_test.go::TestConversationHandlerTestSuite/TestUpdateLastSeen_SuccessMarksNotificationRead`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped update-last-seen route returns empty 200 and marks matching notifications read. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/45/custom_attributes` | explicit | GET | `internal/handler/api/v1/conversation_handler_test.go::TestConversationHandlerTestSuite/TestUpdateCustomAttributes_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped custom-attributes route accepts `{ custom_attributes }` and returns raw `{ custom_attributes }` without generic wrapper. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/45/mute` | explicit | GET | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestMute_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped mute route returns the serialized conversation with `muted: true`. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/45/transcript` | explicit | GET | `internal/handler/api/v1/conversation_handler_test.go::TestConversationHandlerTestSuite/TestTranscript_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped transcript route accepts `{ email }` and returns empty 200. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/45/unmute` | explicit | GET | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestUnmute_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped unmute route returns the serialized conversation with `muted: false`. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/filter` | explicit | GET | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestFilter_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped filter route accepts Woochat filter payload/page params and returns Chatwoot `{ meta, payload }` shape. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/meta` | explicit | GET | `internal/handler/api/v1/conversation_handler_test.go::TestConversationHandlerTestSuite/TestMeta_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped meta route accepts Woochat finder params and returns `{ meta }` counts. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/conversation.spec.js` | literal | `/api/v1/conversations/search` | explicit | GET | `internal/handler/api/v1/conversation_handler_crud_test.go::TestConversationCrudTestSuite/TestSearch_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped search route accepts `{ q, page }` query params and returns Chatwoot search `{ meta, payload }` shape. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/inbox/message.spec.js` | literal | `/api/v1/conversations/12/messages` | explicit | - | `internal/handler/api/v1/message_handler_test.go::TestMessageHandlerTestSuite/TestList_Success`; `internal/handler/api/v1/message_handler_test.go::TestMessageHandlerTestSuite/TestCreate_ChatwootFrontendPayloadDefaultsOutgoing`; `internal/handler/api/v1/message_handler_test.go::TestMessageHandlerTestSuite/TestCreate_MultipartAttachmentPersistsAndSerializes`; route dump | Covered as frontend spec-only bare URL; runtime `inbox/message.js` is account-scoped under `/api/v1/accounts/:account_id/conversations/:conversation_id/messages` and covers list, JSON create defaults, multipart attachments, content attributes, echo ID, private flag, sender, and Chatwoot message payload shape. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/inboxes.spec.js` | literal | `/api/v1/inboxes/2/avatar` | explicit | - | `internal/handler/api/v1/inbox_agentbot_avatar_campaigns_test.go::TestInboxHandler_DeleteAvatar_ChatwootHeadOK`; route dump | Covered as frontend spec-only bare URL; runtime `inboxes.js` is account-scoped under `/api/v1/accounts/:account_id/inboxes/:inbox_id/avatar` and returns Chatwoot head-OK while clearing `avatar_url`. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/inboxes.spec.js` | literal | `/api/v1/inboxes/2/campaigns` | explicit | - | `internal/handler/api/v1/inbox_agentbot_avatar_campaigns_test.go::TestInboxHandler_ListCampaigns_ChatwootPayload`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped campaigns route returns inbox-filtered `{ campaigns: [...] }` payload for Woochat inbox campaign panels. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/inboxes.spec.js` | literal | `/api/v1/inboxes/2/sync_templates` | explicit | - | `internal/handler/api/v1/inbox_handler_test.go::TestInboxSyncTemplates_ChatwootQueuedResponse`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped sync-templates route returns Chatwoot queued message response and does not expose provider template internals. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations/dyte.spec.js` | literal | `/api/v1/integrations/dyte/add_participant_to_meeting` | explicit | - | `internal/handler/api/v1/dyte_integration_handler_test.go::TestDyteIntegrationHandlerAddParticipantReturnsAuthToken`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Dyte add-participant route accepts `message_id/name/email` and returns provider `auth_token` payload without frontend patches. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations/dyte.spec.js` | literal | `/api/v1/integrations/dyte/create_a_meeting` | explicit | - | `internal/handler/api/v1/dyte_integration_handler_test.go::TestDyteIntegrationHandlerCreateMeetingReturnsMessagePayload`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Dyte create-meeting route creates an integrations message and returns Chatwoot message payload with Dyte meeting attributes. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations/linear.spec.js` | literal | `/api/v1/integrations/linear/create_issue` | explicit | - | `internal/handler/api/v1/linear_integration_handler_test.go::TestLinearIntegration_ChatwootFrontendRuntimeRoutes/create_issue`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Linear create-issue route accepts Woochat JSON body and returns raw `{ id, title, identifier }` provider shape via fake GraphQL fixture. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations/linear.spec.js` | literal | `/api/v1/integrations/linear/link_issue` | explicit | - | `internal/handler/api/v1/linear_integration_handler_test.go::TestLinearIntegration_ChatwootFrontendRuntimeRoutes/link_issue`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Linear link-issue route accepts `{ issue_id, conversation_id, title }` and returns raw `{ id, link, link_id }`. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations/linear.spec.js` | literal | `/api/v1/integrations/linear/linked_issues?conversation_id=1` | explicit | - | `internal/handler/api/v1/linear_integration_handler_test.go::TestLinearIntegration_ChatwootFrontendRuntimeRoutes/linked_issues`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Linear linked-issues route uses `conversation_id` query and returns raw linked attachment array. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations/linear.spec.js` | literal | `/api/v1/integrations/linear/search_issue?q=query` | explicit | - | `internal/handler/api/v1/linear_integration_handler_test.go::TestLinearIntegration_ChatwootFrontendRuntimeRoutes/search_issue`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Linear search route preserves `q` and returns raw issue array. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations/linear.spec.js` | literal | `/api/v1/integrations/linear/team_entities?team_id=1` | explicit | - | `internal/handler/api/v1/linear_integration_handler_test.go::TestLinearIntegration_ChatwootFrontendRuntimeRoutes/team_entities`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Linear team-entities route preserves `team_id` and returns `{ users, projects, states, labels }`. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations/linear.spec.js` | literal | `/api/v1/integrations/linear/teams` | explicit | - | `internal/handler/api/v1/linear_integration_handler_test.go::TestLinearIntegration_ChatwootFrontendRuntimeRoutes/teams`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Linear teams route returns raw team array. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations/linear.spec.js` | literal | `/api/v1/integrations/linear/unlink_issue` | explicit | - | `internal/handler/api/v1/linear_integration_handler_test.go::TestLinearIntegration_ChatwootFrontendRuntimeRoutes/unlink_issue`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Linear unlink route accepts Woochat `{ link_id, issue_id, conversation_id }` body and returns raw `{ link_id }`. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations.spec.js` | literal | `/api/v1/integrations/2` | explicit | DELETE | `internal/handler/api/v1/integration_hook_handler_suite_test.go::TestChatwootFrontendAppsAndHooksNoTrailingSlashPayloads`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped integrations use hook/app routes and delete without trailing slash returns empty 200 for Woochat store cleanup. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations.spec.js` | literal | `/api/v1/integrations/hooks` | explicit | DELETE | `internal/handler/api/v1/integration_hook_handler_suite_test.go::TestChatwootFrontendAppsAndHooksNoTrailingSlashPayloads`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped create-hook route accepts `{ app_id, settings }` without trailing slash and returns raw hook payload. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations.spec.js` | literal | `/api/v1/integrations/hooks/2` | explicit | DELETE | `internal/handler/api/v1/integration_hook_handler_suite_test.go::TestChatwootFrontendAppsAndHooksNoTrailingSlashPayloads`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped delete-hook route accepts no trailing slash and returns empty 200. |
|
|
| Integrations/Channels | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations.spec.js` | literal | `/api/v1/integrations/slack` | explicit | DELETE | `internal/handler/api/v1/slack_integration_handler_test.go::TestSlackIntegration_Create_NoTrailingSlash_ReturnsRawAppPayload`; `internal/handler/api/v1/slack_integration_handler_test.go::TestSlackIntegration_Delete_NoTrailingSlash_ReturnsEmptyOK`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Slack create/delete routes work without trailing slash, return raw app payload on create, and empty 200 on delete. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/integrations.spec.js` | literal | `/api/v1/integrations/slack/list_all_channels` | explicit | DELETE | `internal/handler/api/v1/slack_integration_handler_test.go::TestSlackIntegration_ListAllChannels_NoTrailingSlash_ReturnsChannelArray`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped Slack list-all-channels route proxies provider channels through a fake HTTP client and returns raw channel array. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/labels.spec.js` | literal | `/api/v1/labels` | explicit | - | `internal/handler/api/v1/label_handler_test.go::TestLabelHandlerSuite/TestListTags_Success`; `internal/handler/api/v1/label_handler_test.go::TestLabelHandlerSuite/TestCreateTag_RawNameCompatibility`; `internal/handler/api/v1/label_handler_test.go::TestLabelHandlerSuite/TestUpdateTag_ChatwootPayloadAndAccountScope`; `internal/handler/api/v1/label_handler_test.go::TestLabelHandlerSuite/TestDeleteTag_ReturnsOKAndRemovesAssociations`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped labels route supports list/create/update/delete and returns Chatwoot raw tag payloads without generic success wrapper. |
|
|
| Automation/Enterprise | `reference/chatwoot/app/javascript/dashboard/api/specs/macros.spec.js` | literal | `/api/v1/macros` | explicit | - | `internal/handler/api/v1/macro_handler_test.go::TestMacroHandlerSuite/TestList_Empty`; `internal/handler/api/v1/macro_handler_test.go::TestMacroHandlerSuite/TestCreate_Success`; `internal/handler/api/v1/macro_handler_test.go::TestMacroHandlerSuite/TestUpdateDeleteAuthorizationAndPayload`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped macros route supports list/create/update/delete and Chatwoot macro payload fields/actions used by Woochat. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/specs/notifications.spec.js` | literal | `/api/v1/notifications` | explicit | GET, DELETE | `internal/handler/api/v1/notification_handler_test.go::TestNotificationHandler_List_ChatwootEnvelopeAndIncludes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped notification list accepts Chatwoot include/sort params and returns `{ meta, payload }`. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/specs/notifications.spec.js` | literal | `/api/v1/notifications/1` | explicit | GET, DELETE | `internal/handler/api/v1/notification_handler_test.go::TestNotificationGet`; `internal/handler/api/v1/notification_handler_test.go::TestNotificationSoftDelete`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped show/delete routes return serialized notifications and soft-delete account-scoped records. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/specs/notifications.spec.js` | literal | `/api/v1/notifications/1/notifications` | explicit | GET, DELETE | `internal/handler/api/v1/notification_handler_test.go::TestNotificationHandler_List_ChatwootEnvelopeAndIncludes`; route dump | Covered as frontend spec-only literal from the JS helper; runtime Woochat flow uses account-scoped notification collection and actor serialization fixtures. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/specs/notifications.spec.js` | literal | `/api/v1/notifications/1/snooze` | explicit | GET, DELETE | `internal/handler/api/v1/notification_handler_test.go::TestNotificationHandler_SnoozeWithDB`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped snooze route accepts `{ snoozed_until }` and returns the updated Chatwoot notification payload. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/specs/notifications.spec.js` | literal | `/api/v1/notifications/destroy_all` | explicit | GET, DELETE | `internal/handler/api/v1/notification_handler_test.go::TestNotificationHandler_DestroyAllWithDB`; `internal/handler/api/v1/notification_handler_test.go::TestNotificationHandler_DestroyAll_ReadOnly`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped destroy-all route accepts Woochat body filters and returns empty OK while preserving read-only filter semantics. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/specs/notifications.spec.js` | literal | `/api/v1/notifications/read_all` | explicit | GET, DELETE | `internal/handler/api/v1/notification_handler_test.go::TestNotificationReadAllWithDB`; `internal/handler/api/v1/notification_handler_test.go::TestNotificationHandler_MarkAllRead_PrimaryActorOnly`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped read-all route supports full read and primary actor filters used by Woochat. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/specs/notifications.spec.js` | literal | `/api/v1/notifications/unread_count` | explicit | GET, DELETE | `internal/handler/api/v1/notification_handler_test.go::TestNotificationHandler_UnreadWithDB`; `internal/handler/api/v1/notification_handler_test.go::TestNotificationUnreadCountIsAccountScoped`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped unread-count route returns `{ count }` and enforces account scope. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_ChatwootPayloadShapes`; route dump | Covered as frontend spec-only ApiClient version assertion; runtime reports are account-scoped under `/api/v2/accounts/:account_id/reports...`. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2/reports` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_ChatwootPayloadShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped APIV2 reports route accepts `metric/since/until/type/group_by/timezone_offset` and returns Chatwoot timeseries points. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2/reports/agents` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_ChatwootPayloadShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped agent reports route returns Chatwoot CSV headers/shape. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2/reports/bot_metrics` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_AllFrontendEndpointShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped bot-metrics route returns Chatwoot JSON metric keys. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2/reports/bot_summary` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_AllFrontendEndpointShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped bot-summary route accepts `group_by/business_hours` and returns Chatwoot summary keys. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2/reports/conversations` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_AllFrontendEndpointShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped conversation reports route returns Chatwoot conversation report rows. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2/reports/inboxes` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_AllFrontendEndpointShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped inbox reports route returns Chatwoot CSV headers/shape. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2/reports/labels` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_AllFrontendEndpointShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped label reports route returns Chatwoot CSV headers/shape. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2/reports/summary` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_ChatwootPayloadShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped summary route returns Chatwoot summary keys and counts. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/reports.spec.js` | literal | `/api/v2/reports/teams` | explicit | - | `internal/handler/api/v1/analytics_handler_test.go::TestAnalyticsHandlerTestSuite/TestAPIV2Reports_AllFrontendEndpointShapes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped team reports route returns Chatwoot CSV headers/shape. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/specs/search.spec.js` | literal | `/api/v1/search` | explicit | GET | `internal/handler/api/v1/search_handler_test.go::TestSearchHandler_GlobalSearch_UsesReferenceResultTypes`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped global search preserves `q` and returns Chatwoot reference result types. |
|
|
| Help Center | `reference/chatwoot/app/javascript/dashboard/api/specs/search.spec.js` | literal | `/api/v1/search/articles` | explicit | GET | `internal/handler/api/v1/search_handler_test.go::TestSearchHandler_SearchArticles_HydratesPortalAndCategoryPayload`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped article search preserves filters and hydrates Chatwoot portal/category article payload. |
|
|
| CRM | `reference/chatwoot/app/javascript/dashboard/api/specs/search.spec.js` | literal | `/api/v1/search/contacts` | explicit | GET | `internal/handler/api/v1/search_handler_test.go::TestSearchHandler_SearchContacts_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped contact search preserves `q/page/since/until` style params and returns Chatwoot `{ payload: { contacts } }`. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/search.spec.js` | literal | `/api/v1/search/conversations` | explicit | GET | `internal/handler/api/v1/search_handler_test.go::TestSearchHandler_SearchConversations_ChatwootPayloadShape`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped conversation search returns Chatwoot conversation payload shape and ignores unsupported reference filters safely. |
|
|
| Conversation/Message | `reference/chatwoot/app/javascript/dashboard/api/specs/search.spec.js` | literal | `/api/v1/search/messages` | explicit | GET | `internal/handler/api/v1/search_handler_test.go::TestSearchHandler_SearchMessages_HydratesChatwootMessagePayload`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped message search preserves supported filters and hydrates Chatwoot message payload. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/specs/slaReports.spec.js` | literal | `/api/v1` | explicit | GET | `internal/handler/api/v1/sla_policy_handler_test.go::TestSlaPolicyHandler_ListAppliedSlas_ChatwootPayloadAndFilters`; route dump | Covered as frontend spec-only ApiClient version assertion; runtime applied-SLA report routes are account-scoped under `/api/v1/accounts/:account_id/applied_slas`. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/specs/slaReports.spec.js` | literal | `/api/v1/applied_slas` | explicit | GET | `internal/handler/api/v1/sla_policy_handler_test.go::TestSlaPolicyHandler_ListAppliedSlas_ChatwootPayloadAndFilters`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped applied-SLA list preserves frontend filters and returns Chatwoot `{ meta, payload }` shape. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/specs/slaReports.spec.js` | literal | `/api/v1/applied_slas/download` | explicit | GET | `internal/handler/api/v1/sla_policy_handler_test.go::TestSlaPolicyHandler_GetAppliedSlaDownload_Success`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped applied-SLA download returns Chatwoot CSV headers/body. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/specs/slaReports.spec.js` | literal | `/api/v1/applied_slas/metrics` | explicit | GET | `internal/handler/api/v1/sla_policy_handler_test.go::TestSlaPolicyHandler_GetAppliedSlaMetrics_ChatwootReportShape`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped applied-SLA metrics returns Chatwoot report totals by SLA status. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/teams.spec.js` | literal | `/api/v1/teams/1/team_members` | explicit | - | `internal/handler/api/v1/team_handler_test.go::TestTeamHandlerSuite/TestTeamMembers_ChatwootPayloadAndDiffUpdate`; route dump | Covered as frontend spec-only bare URL; runtime account-scoped team-members route supports GET/PATCH diff updates and returns Chatwoot agent serializer array. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/specs/tiktokClient.spec.js` | literal | `/api/v1/accounts/1/tiktok/authorization` | explicit | - | `internal/handler/api/v1/tiktok_channel_handler_test.go::TestTikTokChannel_Create_ChatwootSetupPayloadAndConfig`; route parity exact for TikTok authorization | Covered for TikTok authorization/setup endpoint path and payload used by Woochat setup. |
|
|
| Reports/Audit | `reference/chatwoot/app/javascript/dashboard/api/summaryReports.js` | ApiClient | `summary_reports` | account-scoped | GET | `internal/handler/api/v1/summary_report_handler_test.go::TestSummaryReportHandlerTestSuite/TestAgent_Success`; route dump | Covered as account-scoped runtime path; summary reports validate date range and return Chatwoot array payloads for Woochat summary report clients. |
|
|
| Inbox/Agents/Assignment | `reference/chatwoot/app/javascript/dashboard/api/teams.js` | ApiClient | `teams` | account-scoped | GET, POST, PATCH | `internal/handler/api/v1/team_handler_test.go::TestTeamHandlerSuite/TestList_Success`; `internal/handler/api/v1/team_handler_test.go::TestTeamHandlerSuite/TestCreate_Success`; `internal/handler/api/v1/team_handler_test.go::TestTeamHandlerSuite/TestUpdate_PatchRawPayloadSuccess`; route dump | Covered as account-scoped runtime path; teams list/create/patch return raw Chatwoot team payloads including `allow_auto_assign` and `is_member`. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/userNotificationSettings.js` | ApiClient | `notification_settings` | account-scoped | PATCH | `internal/handler/api/v1/notification_setting_handler_test.go::TestNotificationSettingHandlerSuite/TestUpdate_ReturnsRawChatwootPayload`; route dump | Covered as account-scoped runtime path; notification settings PATCH returns raw Chatwoot preference payload without generic wrapper. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/webhooks.js` | ApiClient | `webhooks` | account-scoped | standard CRUD | `internal/handler/api/v1/webhook_subscription_handler_test.go::TestWebhookSubscriptionHandlerSuite/TestList_Success`; `internal/handler/api/v1/webhook_subscription_handler_test.go::TestWebhookSubscriptionHandlerSuite/TestCreate_Success_ChatwootPayload`; `internal/handler/api/v1/webhook_subscription_handler_test.go::TestWebhookSubscriptionHandlerSuite/TestUpdate_Success_ChatwootPayload`; `internal/handler/api/v1/webhook_subscription_handler_test.go::TestWebhookSubscriptionHandlerSuite/TestDelete_Success_ReturnsEmptyOK`; route dump | Covered as account-scoped runtime path; webhooks CRUD returns Chatwoot `{ payload: { webhook(s) } }` shape and empty OK delete. |
|
|
| Other | `reference/chatwoot/app/javascript/dashboard/api/yearInReview.js` | ApiClient | `year_in_review` | account-scoped | GET | `internal/handler/api/v1/year_in_review_handler_test.go::TestYearInReviewShowReturnsRawChatwootPayload`; route dump | Covered as account-scoped APIV2 runtime path; year-in-review returns raw Chatwoot `{ year, total_conversations, busiest_day, support_personality }` payload. |
|
|
| CSAT/Survey | `reference/chatwoot/app/javascript/survey/api/endPoints.js` | literal | `/public/api/v1/csat_survey/${uuid}` | explicit | - | `internal/handler/api/v1/csat_survey_handler_test.go::TestCsatSurveyHandlerTestSuite/TestPublicCsatShowAndUpdate_Success`; `internal/handler/api/v1/csat_survey_handler_test.go::TestCsatSurveyHandlerTestSuite/TestPublicCsatUpdate_ChatwootPutPersistsShowPayload`; route dump | Covered as public runtime path; CSAT survey show/update works by UUID and returns persisted Chatwoot public survey payload. |
|
|
| CSAT/Survey | `reference/chatwoot/app/javascript/survey/api/specs/endPoints.spec.js` | literal | `/public/api/v1/csat_survey/98c5d7f3-8873-4262-b101-d56425ff7ee1` | explicit | - | `internal/handler/api/v1/csat_survey_handler_test.go::TestCsatSurveyHandlerTestSuite/TestPublicCsatShowAndUpdate_Success`; `internal/handler/api/v1/csat_survey_handler_test.go::TestCsatSurveyHandlerTestSuite/TestPublicCsatUpdate_ChatwootPutPersistsShowPayload`; route dump | Covered as frontend spec-only fixed UUID literal; runtime public CSAT UUID route returns and updates Chatwoot-compatible survey response payload. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/contacts.js` | literal | `/api/v1/${endPoint}${window.location.search}` | explicit | GET, POST, PATCH | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootConfigCwConversationReusesContactInbox`; `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootMessageUpdate_SubmitsEmail`; `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootDestroyContactCustomAttributes`; route dump | Covered for widget contact literal builder; runtime `widget/contact`, `set_user`, and contact custom-attribute actions use query/cookie auth and return Chatwoot widget contact payloads. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/conversation.js` | literal | `/api/v1/widget/conversations${window.location.search}` | explicit | GET, POST | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootConversationQueryTokenReusesSession`; `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_GetConversations_Success`; route dump | Covered for widget conversation GET/POST; runtime preserves `website_token`/`cw_conversation` session reuse and returns Chatwoot conversation payloads. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/conversation.js` | literal | `/api/v1/widget/conversations/destroy_custom_attributes${window.location.search}` | explicit | GET, POST | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootConversationCustomAttributeResponses`; route dump | Covered for widget conversation custom-attribute delete; runtime accepts Chatwoot body and returns updated conversation payload. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/conversation.js` | literal | `/api/v1/widget/conversations/set_custom_attributes${window.location.search}` | explicit | GET, POST | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootConversationCustomAttributeResponses`; route dump | Covered for widget conversation custom-attribute set; runtime accepts `{ custom_attributes }` and returns empty OK like Chatwoot. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/conversation.js` | literal | `/api/v1/widget/conversations/toggle_status${window.location.search}` | explicit | GET, POST | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootConversationHeadActionsReturnEmptyOK`; `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootToggleStatusHonorsEndConversationFlag`; route dump | Covered for widget toggle-status; runtime returns empty OK when enabled and stable forbidden/not-found states when unavailable. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/conversation.js` | literal | `/api/v1/widget/conversations/toggle_typing${window.location.search}` | explicit | GET, POST | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootConversationHeadActionsReturnEmptyOK`; `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ToggleTyping_Success`; route dump | Covered for widget toggle-typing; runtime accepts `{ typing_status }` and returns empty OK while publishing widget typing payload. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/conversation.js` | literal | `/api/v1/widget/conversations/transcript${window.location.search}` | explicit | GET, POST | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootSetUserAndTranscript`; `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootTranscriptStatusParity`; route dump | Covered for widget transcript; runtime returns Chatwoot accepted/empty status shapes based on contact email and conversation context. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/conversation.js` | literal | `/api/v1/widget/conversations/update_last_seen${window.location.search}` | explicit | GET, POST | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootConversationHeadActionsReturnEmptyOK`; route dump | Covered for widget update-last-seen; runtime accepts contact last-seen body and returns empty OK. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/conversationLabels.js` | literal | `/api/v1/${endPoint}${window.location.search}` | explicit | POST, DELETE | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootEventsAndLabels`; route dump | Covered for widget label builder; runtime supports POST `widget/labels` and DELETE `widget/labels/:label` using auth token or `cw_conversation` cookie. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/endPoints.js` | literal | `/api/v1/widget/campaigns` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootCampaigns_Success`; route dump | Covered for widget campaigns; runtime filters enabled campaigns by website token and returns raw Chatwoot campaign array. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/endPoints.js` | literal | `/api/v1/widget/conversations${search}` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootConversationQueryTokenReusesSession`; route dump | Covered for endpoint builder create-conversation path; runtime creates/reuses widget conversation from query params. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/endPoints.js` | literal | `/api/v1/widget/events` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootEventsAndLabels`; route dump | Covered for widget events; runtime accepts event body via auth token or cookie and returns no-content. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/endPoints.js` | literal | `/api/v1/widget/inbox_members` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootInboxMembers_Success`; route dump | Covered for widget inbox members; runtime returns `{ payload: [...] }` with Chatwoot agent availability fields. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/endPoints.js` | literal | `/api/v1/widget/messages${search}` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootMessageAppliesAttrsAndLabelsToNewConversation`; `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootMessagesIndexFiltersInternalMessages`; route dump | Covered for widget message create/list endpoints; runtime applies custom attributes/labels on first conversation and returns Chatwoot message list payloads. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/endPoints.js` | literal | `/api/v1/widget/messages${window.location.search}` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootMessages_AuthTokenAndNestedPayload`; route dump | Covered for widget messages with `window.location.search`; runtime accepts nested Chatwoot message body and auth token. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/endPoints.js` | literal | `/api/v1/widget/messages/${id}${window.location.search}` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootMessageUpdate_SubmitsEmail`; route dump | Covered for widget message update; runtime supports Chatwoot email-submit update path with auth token. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/endPoints.js` | literal | `/hc/${slug}/${locale}/articles.json` | explicit | - | `internal/handler/api/v1/article_handler_test.go::TestArticleHandlerSuite/TestPublicList_WidgetPopularArticles`; route dump | Covered for widget help-center article JSON path; runtime public help-center route returns published locale article payloads. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/events.js` | literal | `/api/v1/widget/events${search}` | explicit | POST | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootEventsAndLabels`; route dump | Covered for widget events search builder; runtime accepts `website_token` query or cookie session and returns no-content. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/integration.js` | literal | `/api/v1/widget/integrations/dyte/add_participant_to_meeting${search}` | explicit | POST | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootDyteParticipant`; route dump | Covered for widget Dyte integration; runtime accepts message/participant body and returns provider auth token payload. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/specs/endPoints.spec.js` | literal | `/api/v1/widget/events` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootEventsAndLabels`; route dump | Covered as frontend spec fixed widget-events literal; runtime widget events route returns no-content. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/specs/endPoints.spec.js` | literal | `/api/v1/widget/messages` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootMessages_AuthTokenAndNestedPayload`; route dump | Covered as frontend spec fixed widget-messages literal; runtime accepts Chatwoot widget message body and returns message payload. |
|
|
| Widget | `reference/chatwoot/app/javascript/widget/api/specs/endPoints.spec.js` | literal | `/api/v1/widget/messages?param=1&locale=ar` | explicit | - | `internal/handler/widget/widget_handler_test.go::TestWidgetHandler_ChatwootMessages_AuthTokenAndNestedPayload`; route dump | Covered as frontend spec fixed widget-messages query literal; runtime preserves query params while authenticating via widget token/auth token and returning message payload. |
|
|
|
|
## Required Follow-Up
|
|
|
|
- Convert the highest-traffic rows into fixture contract tests: auth/profile, accounts/cache keys, inboxes, conversations/messages, contacts/companies, widget messages, CSAT, reports, and enterprise settings.
|
|
- Attach live `scripts/parity_frontend_smoke.sh --api-smoke` and `--browser-smoke` evidence to the rows that are exercised by smoke flows.
|
|
- Keep any new frontend API client file from `reference/chatwoot` mapped here before claiming direct-connect compatibility.
|