Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
vm0-ai avatar

Chatwoot

  • 164 installs
  • 76 repo stars
  • Updated August 4, 2026
  • vm0-ai/vm0-skills

Use chatwoot for development tasks

About

chatwoot: A skill skill for development. This skill provides functionality for development workflows.

  • chatwoot

Chatwoot by the numbers

  • 164 all-time installs (skills.sh)
  • Ranked #2,358 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/vm0-ai/vm0-skills --skill chatwoot

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs164
repo stars76
Last updatedAugust 4, 2026
Repositoryvm0-ai/vm0-skills

What it does

Use chatwoot for development tasks

Files

SKILL.mdMarkdownGitHub ↗

Troubleshooting

If requests fail, run zero doctor check-connector --env-name CHATWOOT_TOKEN or zero doctor check-connector --url https://app.chatwoot.com/api/v1/profile --method GET

How to Use

All examples use the Application API with user access token.

1. Create a Contact

Create a new contact in your account:

Write to /tmp/chatwoot_request.json:

{
  "inbox_id": 1,
  "name": "John Doe",
  "email": "john@example.com",
  "phone_number": "+1234567890",
  "identifier": "customer_123",
  "additional_attributes": {
    "company": "Acme Inc",
    "plan": "premium"
  }
}

Then run:

curl -s -X POST "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/contacts" -H "api_access_token: $CHATWOOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/chatwoot_request.json

2. Search Contacts

Search contacts by email, phone, or name:

curl -s -X GET "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/contacts/search?q=john@example.com" -H "api_access_token: $CHATWOOT_TOKEN" | jq '.payload[] | {id, name, email}'

3. Get Contact Details

Get a specific contact by ID. Replace <contact-id> with the actual contact ID from the "Search Contacts" or "Create a Contact" response:

curl -s -X GET "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/contacts/<contact-id>" -H "api_access_token: $CHATWOOT_TOKEN"

4. Create a Conversation

Create a new conversation with a contact:

Write to /tmp/chatwoot_request.json:

{
  "source_id": "api_conversation_123",
  "inbox_id": 1,
  "contact_id": 123,
  "status": "open",
  "message": {
    "content": "Hello! How can I help you today?"
  }
}

Then run:

curl -s -X POST "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/conversations" -H "api_access_token: $CHATWOOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/chatwoot_request.json

5. List Conversations

Get all conversations with optional filters:

# List open conversations
curl -s -X GET "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/conversations?status=open" -H "api_access_token: $CHATWOOT_TOKEN" | jq '.data.payload[] | {id, status, contact: .meta.sender.name}'

6. Get Conversation Details

Get details of a specific conversation. Replace <conversation-id> with the actual conversation ID from the "List Conversations" or "Create a Conversation" response:

curl -s -X GET "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/conversations/<conversation-id>" -H "api_access_token: $CHATWOOT_TOKEN"

7. Send a Message

Send a message in a conversation. Replace <conversation-id> with the actual conversation ID from the "List Conversations" response:

Write to /tmp/chatwoot_request.json:

{
  "content": "Thank you for contacting us! Let me help you with that.",
  "message_type": "outgoing",
  "private": false
}

Then run:

curl -s -X POST "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/conversations/<conversation-id>/messages" -H "api_access_token: $CHATWOOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/chatwoot_request.json

8. Add Private Note

Add an internal note (not visible to customer). Replace <conversation-id> with the actual conversation ID from the "List Conversations" response:

Write to /tmp/chatwoot_request.json:

{
  "content": "Customer is a VIP - handle with priority",
  "message_type": "outgoing",
  "private": true
}

Then run:

curl -s -X POST "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/conversations/<conversation-id>/messages" -H "api_access_token: $CHATWOOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/chatwoot_request.json

9. Assign Conversation

Assign a conversation to an agent. Replace <conversation-id> with the actual conversation ID and <agent-id> with the agent ID from the "List Agents" response:

Write to /tmp/chatwoot_request.json:

{
  "assignee_id": 1
}

Then run:

curl -s -X POST "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/conversations/<conversation-id>/assignments" -H "api_access_token: $CHATWOOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/chatwoot_request.json

10. Update Conversation Status

Change conversation status (open, resolved, pending). Replace <conversation-id> with the actual conversation ID from the "List Conversations" response:

Write to /tmp/chatwoot_request.json:

{
  "status": "resolved"
}

Then run:

curl -s -X POST "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/conversations/<conversation-id>/toggle_status" -H "api_access_token: $CHATWOOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/chatwoot_request.json

11. List Agents

Get all agents in the account:

curl -s -X GET "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/agents" -H "api_access_token: $CHATWOOT_TOKEN" | jq '.[] | {id, name, email, role, availability_status}'

12. List Inboxes

Get all inboxes (channels) in the account:

curl -s -X GET "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/inboxes" -H "api_access_token: $CHATWOOT_TOKEN" | jq '.payload[] | {id, name, channel_type}'

13. Get Conversation Counts

Get counts by status for dashboard:

curl -s -X GET "https://app.chatwoot.com/api/v1/accounts/$CHATWOOT_ACCOUNT_ID/conversations/meta" -H "api_access_token: $CHATWOOT_TOKEN" | jq '.meta.all_count, .meta.mine_count'

Conversation Status

StatusDescription
openActive conversation
resolvedClosed/completed
pendingWaiting for response
snoozedTemporarily paused

Message Types

TypeValueDescription
OutgoingoutgoingAgent to customer
IncomingincomingCustomer to agent
Privateprivate: trueInternal note (not visible to customer)

Response Fields

Contact

FieldDescription
idContact ID
nameContact name
emailEmail address
phone_numberPhone number
identifierExternal system ID
custom_attributesCustom fields

Conversation

FieldDescription
idConversation ID
inbox_idChannel/inbox ID
statusCurrent status
assigneeAssigned agent
contactCustomer info

Message

FieldDescription
idMessage ID
contentMessage text
message_typeincoming/outgoing
privateIs internal note
statussent/delivered/read/failed

Guidelines

1. Get API token from Profile Settings: Log into Chatwoot → Profile → Access Token 2. Account ID is in URL: Look at /app/accounts/{id}/... in your browser 3. Inbox ID is required: Get inbox IDs first with the list inboxes endpoint 4. Use source_id for conversations: Required to create conversations via API 5. Private messages: Set private: true for internal notes 6. Cloud only: This skill uses the Chatwoot Cloud API at https://app.chatwoot.com 7. Webhooks recommended: Use webhooks for real-time updates instead of polling

Related skills

Backend & APIsbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.