{
 "slug": "chatwoot",
 "name": "Chatwoot",
 "url": "https://chatwoot.com",
 "domain": "chatwoot.com",
 "category": "customer-support",
 "category_name": "Customer support",
 "tested_at": "2026-10-06",
 "run": "20261006T062431Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261002T070223Z",
   "date": "2026-10-02",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261006T062431Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: llms.txt and an OpenAPI",
   "have": [
    "llms_txt",
    "openapi"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/8",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 85,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 85,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "current",
    "behind": null,
    "value": "2026-07-28"
   },
   {
    "standard": "MCP discovery",
    "state": "current",
    "behind": null,
    "value": "ok"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "hCaptcha",
  "visible": true,
  "type": "challenge",
  "human": null,
  "how": "Check the Web Bot Auth signature on the sign-up request (the agent's key directory is public) and skip hCaptcha for signed agents; or offer a documented sign-up API with email verification.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "captcha"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "captcha",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "developers.chatwoot.com: llms.txt, .md pages, OpenAPI 3.1.0 specs (application 185 ops), CLI docs and an agent skill, docs MCP server"
  },
  "signup": {
   "status": "human",
   "note": "Web form only; visible hCaptcha puzzle ('drag the screw to the empty joint') after Create account. No documented API sign-up."
  },
  "verify": {
   "status": "",
   "note": "No account created, so no verification mail.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "API access token comes from the dashboard profile page; no OAuth, device flow or agent registration. Needs the account the hCaptcha blocked.",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "Without a token the API answers 401 'You need to sign in or sign up before continuing.'",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No credentials.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [
    "in-dashboard billing (Settings > Billing), behind the hCaptcha sign-up"
   ],
   "rail_ids": [
    "other"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "No 402 or agent payment rail (no PAYMENT-REQUIRED, no WWW-Authenticate Payment/L402, no /.well-known/ucp, not in x402 Bazaar or mpp.dev). Every Buy button goes to the sign-up form with hCaptcha; upgrades are in the dashboard.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "n/a",
   "note": "No plan started; no billing/subscription endpoint in the OpenAPI.",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account created. Documented account delete is DELETE /platform/api/v1/accounts/{id}, a Platform API (platform app token, self-hosted super admin); the application API has no account delete.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": false,
  "mcp": "none",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST, application API 75 paths / 185 ops, plus client (21), platform (24) APIs",
  "openapi": "3.1.0, linked from developers llms.txt",
  "cli": "official Go CLI v0.7.0 with agent skill (chatwoot-cli)",
  "mcp": "only a Mintlify docs-search MCP at developers.chatwoot.com/mcp (the 28 Jul 2026 spec, 3 tools); no product MCP"
 },
 "can_do": [
  "Read the full developer docs as Markdown and through llms.txt",
  "Download the OpenAPI 3.1.0 specs",
  "Search the docs through an MCP server on the 28 Jul 2026 spec",
  "Install the official CLI and its agent skill headless"
 ],
 "cannot_do": [
  {
   "what": "Create a Chatwoot Cloud account",
   "why": "Visible hCaptcha puzzle on the sign-up form; no API sign-up"
  },
  {
   "what": "Get an API token or make any account API/CLI call",
   "why": "The token is issued in the dashboard of an account we could not create"
  },
  {
   "what": "Any core capability (reply, widget, channels, Captain, API messaging)",
   "why": "Blocked behind sign-up"
  }
 ],
 "blockers": [
  "Visible hCaptcha puzzle on app.chatwoot.com sign-up"
 ],
 "tips_for_owner": [
  "Let verified agents sign up without a puzzle",
  "Issue API tokens without the dashboard",
  "Add a product MCP server",
  "Document account deletion for Cloud accounts"
 ],
 "tips_for_agents": [
  "Read developers.chatwoot.com/llms.txt first: every page has a .md version and the OpenAPI specs are linked there",
  "Once a human gives you an access token, use the official CLI (CHATWOOT_API_KEY env, -o json) or the api_access_token header on the REST API",
  "The docs MCP at developers.chatwoot.com/mcp only searches docs; it cannot act on an account",
  "In the CLI, 'label' replaces labels rather than appending (per the agent skill docs)"
 ],
 "selfhost": {
  "install": {
   "status": "skipped",
   "minutes": 0,
   "note": "no docker in the drive sandbox; Chatwoot documents self-hosted Docker/Linux (chatwoot-ctl), Heroku and other deployments"
  }
 },
 "summary": "Chatwoot's developer surface is strong for agents: llms.txt, Markdown pages, OpenAPI 3.1.0, an official CLI with an agent skill, and a modern docs MCP. But Cloud sign-up shows a visible hCaptcha puzzle, so no account, token or core action was possible on this drive.",
 "wall": "Visible hCaptcha puzzle on the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Chatwoot is a customer-support inbox tool with strong developer docs (full docs in Markdown, API specs, a CLI with an agent skill). An agent trying to sign up for a free Cloud account hit a visible hCaptcha puzzle it could not solve, so it never got an account, a token, or any ability to actually run the product.",
  "can_do": [
   "Read all the developer documentation and API reference",
   "Download the technical API specifications",
   "Install the official command-line tool",
   "Search the documentation through an automated search tool"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "A visible puzzle (hCaptcha) blocks the sign-up form"
   },
   {
    "what": "Get an access key or use the product",
    "why": "Needs the account the puzzle blocked"
   },
   {
    "what": "Reply to customers, use the chat widget, connect channels, or anything else the product does",
    "why": "All of it needs an account that could not be created"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Channels & Inbox",
   "capability": "Reply to a customer across any connected channel from one inbox",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/conversations/{id}/messages",
    "mcp": null,
    "cli": null,
    "ui": "Conversations view, reply composer"
   },
   "check": "GET /api/v1/accounts/{id}/conversations/{id}/messages shows the new outgoing message",
   "source": "https://www.chatwoot.com/, https://www.chatwoot.com/features"
  },
  {
   "id": "cap-02",
   "group": "Channels & Inbox",
   "capability": "Embed a customizable live chat widget on a website",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Inbox settings > Widget, Settings > Configuration"
   },
   "check": "Widget script embedded on page opens chat and creates a conversation in the dashboard",
   "source": "https://www.chatwoot.com/features/live-chat, https://www.chatwoot.com/features/widget-customization"
  },
  {
   "id": "cap-03",
   "group": "Channels & Inbox",
   "capability": "Connect an email channel (Gmail, Outlook, or IMAP/SMTP) and thread replies",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Inboxes > Add Inbox > Email"
   },
   "check": "Inbound email appears as a threaded conversation; reply sent from dashboard arrives at recipient's mailbox",
   "source": "https://www.chatwoot.com/features/email-integration, https://www.chatwoot.com/"
  },
  {
   "id": "cap-04",
   "group": "Channels & Inbox",
   "capability": "Connect WhatsApp Business (messages, templates, calls)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Inboxes > Add Inbox > WhatsApp"
   },
   "check": "WhatsApp message sent to the connected number creates a conversation in the WhatsApp inbox",
   "source": "https://www.chatwoot.com/features/whatsapp-for-business, https://www.chatwoot.com/"
  },
  {
   "id": "cap-05",
   "group": "AI & Automation",
   "capability": "Let Captain AI agent auto-resolve routine conversations end to end",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Captain settings, Conversation view (AI handled)"
   },
   "check": "GET /api/v1/accounts/{id}/conversations/{id} shows status resolved with no agent-sent messages, handled by Captain",
   "source": "https://www.chatwoot.com/captain, https://www.chatwoot.com/"
  },
  {
   "id": "cap-06",
   "group": "AI & Automation",
   "capability": "Get an AI-drafted reply (Copilot) to review and send",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Conversation reply box > Copilot draft"
   },
   "check": "Copilot panel produces a draft reply text the agent can insert and send",
   "source": "https://www.chatwoot.com/captain#copilot"
  },
  {
   "id": "cap-07",
   "group": "Channels & Inbox",
   "capability": "Take and make phone calls (Twilio Voice) inside the inbox",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Inbox settings > Voice; in-browser call panel"
   },
   "check": "Inbound/outbound call appears as a recorded, transcribed conversation in the Voice inbox",
   "source": "https://www.chatwoot.com/features/voice-channel, https://www.chatwoot.com/"
  },
  {
   "id": "cap-08",
   "group": "Integrations & API",
   "capability": "Send messages, create channels, and receive events via the open REST API/webhooks",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/conversations, POST /api/v1/accounts/{id}/conversations/{id}/messages",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations > Webhooks; Profile Settings > Access Token"
   },
   "check": "API-created conversation/message appears in the dashboard; subscribed webhook URL receives the event payload",
   "source": "https://developers.chatwoot.com/api-reference/introduction, https://www.chatwoot.com/"
  },
  {
   "id": "cap-09",
   "group": "Conversation Management",
   "capability": "Run a macro to bundle a reply, label, and snooze in one click",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/macros/{id}/run",
    "mcp": null,
    "cli": null,
    "ui": "Conversation view > Run macro"
   },
   "check": "After running, conversation has the macro's reply sent, label applied, and snooze status set",
   "source": "https://www.chatwoot.com/features/macros"
  },
  {
   "id": "cap-10",
   "group": "AI & Automation",
   "capability": "Create automation rules that fire actions when conditions match",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/automation_rules",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Automation"
   },
   "check": "GET /api/v1/accounts/{id}/automation_rules/{id} returns the rule; a matching conversation gets the configured action applied automatically",
   "source": "https://www.chatwoot.com/features/automations"
  },
  {
   "id": "cap-11",
   "group": "Conversation Management",
   "capability": "Tag conversations with labels",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/conversations/{id}/labels",
    "mcp": null,
    "cli": null,
    "ui": "Conversation sidebar > Labels"
   },
   "check": "GET /api/v1/accounts/{id}/conversations/{id}/labels lists the applied label",
   "source": "https://www.chatwoot.com/features/labels"
  },
  {
   "id": "cap-12",
   "group": "Conversation Management",
   "capability": "Add private internal notes on a conversation",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/conversations/{id}/messages (private: true)",
    "mcp": null,
    "cli": null,
    "ui": "Conversation view > Private Note tab"
   },
   "check": "GET conversation messages shows the note with private=true, not visible to the customer",
   "source": "https://www.chatwoot.com/features/private-notes"
  },
  {
   "id": "cap-13",
   "group": "Conversation Management",
   "capability": "Create teams and route conversations to them",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/teams",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Teams"
   },
   "check": "GET /api/v1/accounts/{id}/teams/{id} shows the team and its assigned conversations",
   "source": "https://www.chatwoot.com/features/teams"
  },
  {
   "id": "cap-14",
   "group": "Conversation Management",
   "capability": "Auto-assign conversations to agents",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Inbox settings > Assignment, Agent capacity"
   },
   "check": "New conversation in the inbox is assigned to an available agent without manual action",
   "source": "https://www.chatwoot.com/features/assignments, https://www.chatwoot.com/features/agent-capacity"
  },
  {
   "id": "cap-15",
   "group": "Conversation Management",
   "capability": "Set conversation priority level",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/conversations/{id}/toggle_priority",
    "mcp": null,
    "cli": null,
    "ui": "Conversation sidebar > Priority"
   },
   "check": "GET conversation shows priority field set to the chosen value (e.g. urgent)",
   "source": "https://www.chatwoot.com/features/priority"
  },
  {
   "id": "cap-16",
   "group": "Conversation Management",
   "capability": "Prevent duplicate replies via agent collision detection",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Conversation view (live typing/viewing indicator)"
   },
   "check": "A second agent opening the same conversation sees an indicator that another agent is replying",
   "source": "https://www.chatwoot.com/features/collision-detection"
  },
  {
   "id": "cap-17",
   "group": "Customer Data & CRM",
   "capability": "View a unified contact profile with full conversation history",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v1/accounts/{id}/contacts/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Contact detail panel"
   },
   "check": "GET /api/v1/accounts/{id}/contacts/{id}/conversations lists every conversation for that contact",
   "source": "https://www.chatwoot.com/product/crm-workspace"
  },
  {
   "id": "cap-18",
   "group": "Customer Data & CRM",
   "capability": "Add custom attributes to contacts or conversations",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/custom_attribute_definitions",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Custom Attributes"
   },
   "check": "Created attribute appears as an editable field on the contact/conversation panel and via API payload",
   "source": "https://www.chatwoot.com/features/custom-attributes"
  },
  {
   "id": "cap-19",
   "group": "Customer Data & CRM",
   "capability": "Segment contacts with saved filters",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/custom_filters",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Segments"
   },
   "check": "Saved segment filter returns only contacts matching the filter criteria",
   "source": "https://www.chatwoot.com/features/contact-segments"
  },
  {
   "id": "cap-20",
   "group": "Customer Data & CRM",
   "capability": "Bulk import contacts via CSV",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/contacts/import",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Import contacts"
   },
   "check": "Uploaded CSV rows appear as new contacts in the Contacts list",
   "source": "https://www.chatwoot.com/product/crm-workspace"
  },
  {
   "id": "cap-21",
   "group": "Customization & Self-Service",
   "capability": "Collect visitor info with a pre-chat form before the conversation starts",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Inbox settings > Pre Chat Form"
   },
   "check": "Widget shows the configured form fields and the submitted values populate the new contact/conversation",
   "source": "https://www.chatwoot.com/features/pre-chat-forms"
  },
  {
   "id": "cap-22",
   "group": "Reporting & Analytics",
   "capability": "View real-time and historical reports (conversation, agent, team, CSAT, label, inbox)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v1/accounts/{id}/reports/overview",
    "mcp": null,
    "cli": null,
    "ui": "Reports section"
   },
   "check": "Report dashboard displays metrics matching known conversation volume/CSAT counts for the period",
   "source": "https://www.chatwoot.com/features/conversation-reports, https://www.chatwoot.com/features/csat-reports, https://www.chatwoot.com/features/agent-reports, https://www.chatwoot.com/features/team-reports, https://www.chatwoot.com/features/inbox-reports, https://www.chatwoot.com/features/label-reports, https://www.chatwoot.com/features/live-view-of-reports"
  },
  {
   "id": "cap-23",
   "group": "Reporting & Analytics",
   "capability": "Export reports for offline analysis",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Reports > Download/Export"
   },
   "check": "Export action downloads a file (CSV) containing the report rows shown on screen",
   "source": "https://www.chatwoot.com/features/conversation-reports"
  },
  {
   "id": "cap-24",
   "group": "Productivity",
   "capability": "Insert canned responses (saved reply templates)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/canned_responses",
    "mcp": null,
    "cli": null,
    "ui": "Reply box > \"/\" shortcut"
   },
   "check": "Typing the canned response shortcut inserts the saved template text into the reply box",
   "source": "https://www.chatwoot.com/features/canned-responses"
  },
  {
   "id": "cap-25",
   "group": "Productivity",
   "capability": "Apply bulk actions (assign, label, resolve) to multiple conversations at once",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Conversation list > select multiple > bulk action menu"
   },
   "check": "Selecting several conversations and applying a bulk action updates all of them simultaneously",
   "source": "https://www.chatwoot.com/features/bulk-actions"
  },
  {
   "id": "cap-26",
   "group": "Customization & Self-Service",
   "capability": "Build a self-service knowledge base / help center",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Help Center section, published articles"
   },
   "check": "Published article is publicly viewable at the help center URL and searchable from the widget",
   "source": "https://www.chatwoot.com/features/knowledge-base"
  },
  {
   "id": "cap-27",
   "group": "Customization & Self-Service",
   "capability": "Support 50+ languages including right-to-left layouts",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Profile Settings > Language; widget locale"
   },
   "check": "Switching dashboard/widget language changes UI strings to the selected language, including RTL layout for RTL languages",
   "source": "https://www.chatwoot.com/features/multilingual"
  },
  {
   "id": "cap-28",
   "group": "AI & Automation",
   "capability": "Send proactive outbound campaign messages",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/campaigns",
    "mcp": null,
    "cli": null,
    "ui": "Campaigns section"
   },
   "check": "GET /api/v1/accounts/{id}/campaigns/{id} shows the campaign and its triggered conversations",
   "source": "https://www.chatwoot.com/features/campaigns"
  },
  {
   "id": "cap-29",
   "group": "AI & Automation",
   "capability": "Set SLA policies and track response-time compliance",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/sla_policies",
    "mcp": null,
    "cli": null,
    "ui": "Settings > SLA"
   },
   "check": "Conversation exceeding the configured response time shows an SLA breach indicator",
   "source": "https://www.chatwoot.com/features/sla"
  },
  {
   "id": "cap-30",
   "group": "AI & Automation",
   "capability": "Define business hours that gate availability/automation",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Inbox settings > Business Hours"
   },
   "check": "Widget shows offline/away state outside configured business hours",
   "source": "https://www.chatwoot.com/features/business-hours"
  },
  {
   "id": "cap-31",
   "group": "Integrations & API",
   "capability": "Handle conversations from Slack",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations > Slack"
   },
   "check": "New conversation posts a message into the linked Slack channel and a Slack reply is reflected back in the conversation",
   "source": "https://www.chatwoot.com/features/slack-integration"
  },
  {
   "id": "cap-32",
   "group": "Integrations & API",
   "capability": "Connect a chatbot (Dialogflow/Rasa) to auto-answer messages",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations > Dialogflow"
   },
   "check": "Incoming message gets an automated bot reply sourced from the connected Dialogflow/Rasa agent",
   "source": "https://www.chatwoot.com/features/chatbots, https://www.chatwoot.com/hc/user-guide/articles/1677743452-how-to-integrate-your-dialogflow-chatbot-with-chatwoot"
  },
  {
   "id": "cap-33",
   "group": "Integrations & API",
   "capability": "Drive Chatwoot from a terminal coding agent via the Chatwoot CLI",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "chatwoot (per /agents page)",
    "ui": null
   },
   "check": "CLI command against an account returns/modifies conversation data consistent with the dashboard",
   "source": "https://www.chatwoot.com/agents"
  },
  {
   "id": "cap-34",
   "group": "Account Admin",
   "capability": "Enable single sign-on (SSO/SAML) for agent login",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Security > SSO"
   },
   "check": "Agent can log in through the configured SAML identity provider instead of a password",
   "source": "https://www.chatwoot.com/features/sso, https://www.chatwoot.com/pricing"
  },
  {
   "id": "cap-35",
   "group": "Account Admin",
   "capability": "Review audit logs of account activity",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /api/v1/accounts/{id}/audit_logs",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Audit Log"
   },
   "check": "Audit log lists the actor, action, and timestamp for a recent account change",
   "source": "https://www.chatwoot.com/features/audit-logs, https://www.chatwoot.com/pricing"
  },
  {
   "id": "cap-36",
   "group": "Account Admin",
   "capability": "Configure custom roles and permissions for agents",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/accounts/{id}/custom_roles",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Agents > Roles"
   },
   "check": "Agent assigned a restricted custom role is blocked from actions outside its granted permissions",
   "source": "https://www.chatwoot.com/features/roles-permissions"
  },
  {
   "id": "cap-37",
   "group": "Account Admin",
   "capability": "Self-host the platform on your own infrastructure",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Deployment (Docker/Helm per deploy docs)"
   },
   "check": "Self-hosted instance boots and serves the same dashboard as the hosted product",
   "source": "https://www.chatwoot.com/deploy"
  }
 ],
 "attempts": [
  {
   "t": "01:16",
   "cap": "discovery",
   "capability": "robots/aipref",
   "task": "Fetch robots.txt and check Content-Usage",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "www.chatwoot.com/robots.txt 200: 'User-agent: *', Sitemap, Host lines only; no Disallow, no Content-Usage/Content-signal; no Content-Usage response header on homepage",
   "notes": ""
  },
  {
   "t": "01:16",
   "cap": "discovery",
   "capability": "llms.txt",
   "task": "Fetch llms.txt",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "www.chatwoot.com/llms.txt 200 text/plain (marketing); developers.chatwoot.com/llms.txt 200, 252 lines, links .md pages and 4 OpenAPI specs",
   "notes": ""
  },
  {
   "t": "01:16",
   "cap": "discovery",
   "capability": "openapi",
   "task": "Fetch OpenAPI specs linked from llms.txt",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "application_swagger.json openapi 3.1.0, 75 paths/185 ops, server https://app.chatwoot.com/; client 21 ops, platform 24 ops, other 2 ops",
   "notes": ""
  },
  {
   "t": "01:16",
   "cap": "discovery",
   "capability": "mcp",
   "task": "server/discover on developers.chatwoot.com/mcp (Mintlify docs MCP)",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST server/discover 200 application/json result.supportedVersions ['2026-07-28'], no serverInfo; tools/list: search_chatwoot_developer_docs, query_docs_filesystem_chatwoot_developer_docs, submit_feedback. Docs-only MCP, no product actions",
   "notes": "No MCP for the product itself found in docs/llms.txt. <endpoint>/server-card 404 text/html"
  },
  {
   "t": "01:16",
   "cap": "discovery",
   "capability": "cards",
   "task": "AI catalog, agent cards, server card",
   "route": "none",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "www.chatwoot.com /.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json all 404 text/html; developers.chatwoot.com/.well-known/ai-catalog.json 404",
   "notes": ""
  },
  {
   "t": "01:16",
   "cap": "discovery",
   "capability": "markdown",
   "task": "Accept: text/markdown and .md URL",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "developers.chatwoot.com/introduction with Accept: text/markdown -> content-type text/markdown, Vary lacks Accept (vary: rsc, next-router-...); introduction.md served; www.chatwoot.com/pricing returns text/html",
   "notes": ""
  },
  {
   "t": "01:16",
   "cap": "discovery",
   "capability": "agent-auth",
   "task": "oauth-protected-resource / oauth-authorization-server / auth.md / SKILL.md",
   "route": "none",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "app.chatwoot.com/.well-known/oauth-protected-resource 404, oauth-authorization-server 404; www.chatwoot.com/auth.md, /SKILL.md 404 html",
   "notes": ""
  },
  {
   "t": "01:16",
   "cap": "docs",
   "capability": "docs",
   "task": "Find developer docs and API reference",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "developers.chatwoot.com with llms.txt, .md pages, API reference, CLI docs (github.com/chatwoot/cli) and agent skill (npx skills add chatwoot/cli)",
   "notes": ""
  },
  {
   "t": "02:14",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Find a documented headless sign-up route",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No sign-up endpoint in application/platform/client OpenAPI or docs; app.chatwoot.com/app/auth/signup page embeds HCAPTCHA_SITE_KEY in window.globalConfig",
   "notes": "Platform API (account creation) is for self-hosted super-admin platform apps only"
  },
  {
   "t": "02:14",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Sign up in browser with test email + password",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Filled email the agent's inbox and password, clicked Create account; visible hCaptcha puzzle 'Please drag the screw to the empty joint' (screenshot browser/shots/002.png).",
   "notes": "Visible hCaptcha puzzle on sign-up; not solved, no bypass attempted."
  },
  {
   "t": "03:11",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Verify sign-up email",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No account created (hCaptcha on sign-up); no mail to verify in the agent's inbox",
   "notes": ""
  },
  {
   "t": "03:11",
   "cap": "credentials",
   "capability": "API credentials",
   "task": "Get an API access token",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Docs (cli.md): API key comes from 'agent profile -> API access token' in the dashboard; no OAuth/device flow/agent registration (/.well-known/oauth-* 404). Installed Chatwoot CLI v0.7.0: 'chatwoot convs -o json' -> 'Error: not authenticated. Run 'chatwoot auth login' to set up credentials'",
   "notes": "Token needs a logged-in dashboard account, which needs the hCaptcha sign-up",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "03:11",
   "cap": "first_call",
   "capability": "First API call",
   "task": "GET /api/v1/profile and /api/v1/accounts/1/conversations without a token",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "401 application/json {\"errors\":[\"You need to sign in or sign up before continuing.\"]}; platform/api/v1/accounts 401 {\"error\":\"Invalid access_token\"}; no Content-Type problem+json, no WWW-Authenticate",
   "notes": "",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "03:11",
   "cap": "pay",
   "capability": "Pay",
   "task": "Probe agent payment rails and checkout",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Unauthenticated API calls answer 401 (no 402, no PAYMENT-REQUIRED, no WWW-Authenticate Payment/L402); x402./mpp./agents.chatwoot.com did not resolve/connect (curl 000); /.well-known/ucp 404; no chatwoot entry in CDP x402 Bazaar or mpp.dev/api/services; OpenAPI has no billing/x-payment-info paths. Pricing page: Hacker $0 (2 agents, 500 conv/month), Startups $19, Business $39, Enterprise $99 per agent/month; every 'Buy' button links to app.chatwoot.com/app/auth/signup?plan=...; FAQ: upgrade from 'Settings -> Billing' in the dashboard; '15-day free trial'",
   "notes": "Purchase only after the hCaptcha sign-up, then in the dashboard billing page; checkout itself not reached"
  },
  {
   "t": "03:11",
   "cap": "cancel",
   "capability": "Cancel",
   "task": "Find a headless cancel/downgrade route",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No billing/subscription endpoint in the OpenAPI specs; docs search for cancel subscription found nothing for cloud; no plan was started",
   "notes": ""
  },
  {
   "t": "03:11",
   "cap": "delete",
   "capability": "Delete account",
   "task": "Find and use a headless account deletion route",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Docs: DELETE /platform/api/v1/accounts/{account_id} exists only in the Platform API (needs a platform app token, a self-hosted super-admin feature); application API /api/v1/accounts/{account_id} has get/patch only. No account was created, nothing to delete.",
   "notes": ""
  },
  {
   "t": "03:11",
   "cap": "cap-01",
   "capability": "Reply to a customer across any connected channel from one inbox",
   "task": "Do: Reply to a customer across any connected channel from one inbox",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not attempted against a live account: sign-up blocked by visible hCaptcha puzzle; API returns 401 without an access token",
   "notes": "Blocked at the access ladder (signup)"
  },
  {
   "t": "03:11",
   "cap": "cap-02",
   "capability": "Embed a customizable live chat widget on a website",
   "task": "Do: Embed a customizable live chat widget on a website",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not attempted against a live account: sign-up blocked by visible hCaptcha puzzle; API returns 401 without an access token",
   "notes": "Blocked at the access ladder (signup)"
  },
  {
   "t": "03:11",
   "cap": "cap-03",
   "capability": "Connect an email channel (Gmail, Outlook, or IMAP/SMTP) and thread replies",
   "task": "Do: Connect an email channel (Gmail, Outlook, or IMAP/SMTP) and thread replies",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not attempted against a live account: sign-up blocked by visible hCaptcha puzzle; API returns 401 without an access token",
   "notes": "Blocked at the access ladder (signup)"
  },
  {
   "t": "03:11",
   "cap": "cap-04",
   "capability": "Connect WhatsApp Business (messages, templates, calls)",
   "task": "Do: Connect WhatsApp Business (messages, templates, calls)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not attempted against a live account: sign-up blocked by visible hCaptcha puzzle; API returns 401 without an access token",
   "notes": "Blocked at the access ladder (signup)"
  },
  {
   "t": "03:11",
   "cap": "cap-05",
   "capability": "Let Captain AI agent auto-resolve routine conversations end to end",
   "task": "Do: Let Captain AI agent auto-resolve routine conversations end to end",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not attempted against a live account: sign-up blocked by visible hCaptcha puzzle; API returns 401 without an access token",
   "notes": "Blocked at the access ladder (signup)"
  },
  {
   "t": "03:11",
   "cap": "cap-06",
   "capability": "Get an AI-drafted reply (Copilot) to review and send",
   "task": "Do: Get an AI-drafted reply (Copilot) to review and send",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not attempted against a live account: sign-up blocked by visible hCaptcha puzzle; API returns 401 without an access token",
   "notes": "Blocked at the access ladder (signup)"
  },
  {
   "t": "03:11",
   "cap": "cap-07",
   "capability": "Take and make phone calls (Twilio Voice) inside the inbox",
   "task": "Do: Take and make phone calls (Twilio Voice) inside the inbox",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not attempted against a live account: sign-up blocked by visible hCaptcha puzzle; API returns 401 without an access token",
   "notes": "Blocked at the access ladder (signup)"
  },
  {
   "t": "03:11",
   "cap": "cap-08",
   "capability": "Send messages, create channels, and receive events via the open REST API/webhooks",
   "task": "Do: Send messages, create channels, and receive events via the open REST API/webhooks",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not attempted against a live account: sign-up blocked by visible hCaptcha puzzle; API returns 401 without an access token",
   "notes": "Blocked at the access ladder (signup)"
  },
  {
   "t": "03:46",
   "cap": "cap-33",
   "capability": "Drive Chatwoot from a terminal coding agent via the Chatwoot CLI",
   "task": "Install the CLI and run a command",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "curl -fsSL https://chwt.app/install-cli | sh (CHATWOOT_INSTALL_DIR in run dir) installed chatwoot 0.7.0; agent skill SKILL.md at github chatwoot/cli/skills/chatwoot-cli has name 'chatwoot-cli' + description frontmatter; every data command answers 'Error: not authenticated' without an API key",
   "notes": "Install headless works; use needs an account token",
   "quality": {
    "error_legibility": "clear"
   }
  }
 ],
 "stale": false,
 "icon": "/logos/chatwoot.png",
 "monitored": false,
 "verdict": "Needs a person today: L1 · Needs a person. Our agent stopped right at the form: Create account led to a visible hCaptcha puzzle asking to drag a screw into place, and it got no further, so no account, token or verification mail followed. Chatwoot's developer docs are strong: llms.txt, Markdown pages, an OpenAPI spec, an official CLI with an agent skill, and a docs MCP server. None of that reached first action, since no credentials ever came through. Paying, cancelling and deleting the account were never reached: the human gate at sign-up stopped the drive before checkout or billing opened up.",
 "page": "https://agentdrives.com/tools/chatwoot?via=api"
}