Hey 👋, how can we help you?

Search for the articles here or browse the categories below.

Browse by topic

Find guides, tutorials, and answers organised by category.

🚀

Chatwoot 101

Start here to understand Chatwoot, key concepts, and how the platform helps you manage customer conversations.

Pranav Jithin Browse
đŸȘ”

Other channels

Connect and manage channels such as email, WhatsApp, Facebook, Instagram, Telegram, and more.

Pranav Jithin Muhsin Browse
👝

Setup account

Set up your account, workspace, teams, users, and basic configuration before going live.

Pranav Shivam Mishra Browse
📞

Voice Channels

Learn how to connect voice providers, manage incoming calls, and configure phone support in Chatwoot.

Tanmay Deep Sharma Browse
💬

Website live chat

Learn how to install, configure, and customize the Chatwoot live chat widget on your website or app.

Pranav Muhsin Browse
📚

Features explained

Understand the main Chatwoot features used for inbox management, conversations, contacts, teams, and workflows.

Pranav Jithin Muhsin Browse
🔎

Advanced features explained

Explore advanced capabilities such as automation, assignment rules, custom attributes, macros, SLAs, and webhooks.

Pranav Shivam Mishra Tanmay Deep Sharma Browse
⚡

Apps and Integrations

Connect Chatwoot with external tools and services to extend your support workflows.

Muhsin Pranav Sojan Browse
📊

Reports

Use reports and analytics to measure team performance, conversation volume, response times, and customer support quality.

Shivam Mishra Pranav Browse
❓

Help Center

Create, organize, and publish help center articles so customers can find answers on their own.

Pranav Shivam Mishra Browse
đŸ’«

Best practices

Practical recommendations to help your team get better results from Chatwoot.

Pranav Sivin Varghese Browse
đŸ”„

Captain

Learn how to set up and use Captain, Chatwoot’s AI agent for customer support.

Pranav Aakash Bakhle Browse
đŸ›łïž

Migrations

Guides to help with a smooth transition from other platforms, such as Zendesk, Freshdesk, Intercom, etc, to Chatwoot.

Pranav Browse
📌

Other topics

Additional guides and references to help you get the most out of Chatwoot.

Pranav Shivam Mishra Muhsin Browse
⚙

How To

Step-by-step guides for common tasks and specific use cases in Chatwoot.

Jithin Browse

Recommended articles

Hand-picked articles to get you started.

đŸ”„ Captain

How AI Credits work in Captain?

This guide explains how AI credits are consumed, how your credits are updated when you top up, when your monthly renewal happens, what happens when you change plans, and how notifications work if your credits run out. How are AI credits consumed? AI credits are deducted whenever an AI action is performed. Examples include: - Captain assistant responses - Copilot lookups - Editor actions (rephrase, summarise, suggest a reply) - Label Suggestions - Any workflow or automation that triggers a model call - Audio transcription Different models consume credits at different rates. At the moment, all actions consume 1 credit per message, since a fixed model configuration only is supported. This will change in the future as more model options are supported, at which point different models may consume different credit amounts per action. If an action cannot be completed due to insufficient credits, a credit failure occurs (explained later). When does usage reset? Usage resets to 0 only during monthly renewal. Usage does NOT reset when: - Topping up credits - Changing your plan - Changing seat count This means you can top up credits at any time without losing track of your current usage cycle. How are AI credits updated? 1. Topping Up Credits When you buy additional credits, they are simply added to your existing balance. Example - Previous credits: 1500 - Top-up: 1000 - New total credits: 2500 No other values change. 2. Monthly Renewal Every plan includes a monthly free credit allowance. At renewal, we adjust usage and credits based on how much you consumed in the previous month. Case A: No usage Usage: 0 → Your total credits do not change. Case B: Usage is less than your monthly free credits - Previous credits: 1500 - Usage: 200 - Monthly free credits: 300 → No deduction is applied. → Total credits stay 1500. → Usage resets to 0. Case C: Usage exceeds your monthly free credits - Previous credits: 1500 - Usage: 600 - Monthly free credits: 500 Overage = 600 − 500 = 100 → Deduct overage from total credits. → New total credits: 1400 → Usage resets to 0. 3. Changing Your Plan When you switch plans, your monthly free credits may increase or decrease. Example - Startup plan: 300 free credits - Business plan: 500 free credits - Enterprise plan: 800 free credits If you switch from Startups to Business, your total credits would increase by 200. Similarly, if you downgrade from Business to Startups, your total credits would decrease by 200. Your usage remains unchanged. Credit Failure (Insufficient Credit Handling) A credit failure occurs when an AI action is triggered but there are not enough credits to perform it. What Happens During Credit Failure - The action is not executed. Any available fallbacks are executed — for example, if the assistant cannot respond, the conversation is transferred directly to an agent. - We log the failed action internally for audit

đŸ”„ Captain

How to Set Up Custom Tools for Captain?

Custom Tools let Captain call your external APIs during conversations — so it can check warranty status, verify service coverage, or fetch data from your own services without handing off to a human agent. When a customer asks a question, Captain extracts the relevant values from the conversation, inserts them into your API request, and uses the response to form its reply. Custom Tools is available on the Business plan and above. Creating a tool Navigate to Captain -> Tools and click Create a new tool. Fill in the following fields: Tool Name — A short name like "Warranty Lookup" or "Service Area Check" (max 55 characters). Description — Tell Captain when to use this tool. This is the most important field. Write it like you're briefing a support agent: "Checks the warranty status of a product by its serial number." Vague descriptions like "Warranty API" will cause Captain to miss opportunities to use the tool. Method — Choose GET (for fetching data) or POST (for submitting data). Endpoint URL — Your API's URL. Use {{ parameter_name }} to insert values extracted from the conversation: https://api.yourcompany.com/v1/warranty/{{ serial_number }} The URL must use HTTPS, must be a hostname (not an IP address), and cannot point to localhost or private networks. Authentication — Choose how your API authenticates requests: - None — No authentication - Bearer Token — Sends your token in the Authorization header - Basic Auth — Sends a username and password - API Key — Sends a custom header name and value (e.g., X-API-Key) Authentication credentials are only visible to account administrators. Parameters — Define what Captain should extract from the customer's message. Each parameter needs a name, type, and description. For example: serial_number (String) — "The product serial number, found on the back of the device." Request Template (POST only) — A JSON body template using Liquid syntax. Response Template — Controls what Captain sees from your API's response. If left blank, Captain receives the raw JSON. Use Liquid to extract relevant fields, for example: Serial {{ response.serial_number }}: {{ response.warranty_status }}. Expires: {{ response.expiry_date }}. Use response to access the parsed JSON body. Response templates help Captain focus on the relevant data and avoid internal fields like database IDs or debug info. Testing your tool Click Test connection before saving to verify your endpoint is reachable. The test reports the HTTP status code. A green result (HTTP 200–299) means the connection and authentication are working. Note that the test sends the URL without filling in parameter values, so it only verifies that your endpoint is reachable and your credentials are accepted. If the test fails, check the following: - 401 Unauthorised — Your authentication credentials are incorrect. Double-check your bearer token, API key, or username/password. - 403 Forbidden — Your API is rejecting the request. If you require identity verification, note that test requests don't include contact headers. - 404 Not Found — The endpoint URL is wrong. Verify the path and ensure your API is running. - Timeout — Your API took too long to respond. Custom tools have a 30-second timeout; make sure your endpoint responds within that window Context sent with every tool call When Captain calls your API, it includes metadata headers so your backend knows the context: - X-Chatwoot-Account-Id — Your account ID - X-Chatwoot-Conversation-Id — The conversation ID - X-Chatwoot-Contact-Email — The customer's email (if available) - X-Chatwoot-Contact-Inbox-Verified — Whether the customer's identity is HMAC-verified - X-Chatwoot-Assistant-Id — The Captain assistant making the call - X-Chatwoot-Tool-Slug — The tool's internal identifier - X-Chatwoot-Contact-Id — The customer's contact ID - X-Chatwoot-Contact-Phone — The customer's phone number (if available) - X-Chatwoot-Conversation-Display-Id — The conversation's display number You can use these headers to look up the customer in your own system, log which conversations triggered API calls, and verify request authenticity. Security Built-in protections: - All endpoints must use HTTPS - Requests to private IP ranges, localhost, and .local domains are blocked - HTTP redirects are not followed - Responses are capped at 1 MB - Auth credentials are only visible to administrators Identity verification: If your tool returns customer-specific data (orders, billing, account details), your API should check the X-Chatwoot-Contact-Inbox-Verified header. Without HMAC verification enabled on your inbox, a visitor could set any email address in the chat widget. Only return sensitive data when this header is true. For tools that return public data this check is not needed. Prompt injection: If your API returns user-generated content (reviews, forum posts), malicious text could influence Captain's behavior. Use response templates to extract only structured fields, and sanitize content on your API side. Limits - Max tools per account — 15 - Recommended — 10 or fewer. A warning appears above 10; more tools make it harder for Captain to pick the right one. - Tool name length — 55 characters - Response size — 1 MB max - Request timeout — 30 seconds When to use custom tools Custom tools are best suited for structured lookups with predictable inputs — checking system status, fetching schedules, or looking up records by ID. If you already have a dedicated Chatwoot integration for your use case (e.g., Shopify for e-commerce), use that instead — dedicated integrations handle search, fuzzy matching, and data sync more reliably than a single API call. Examples Warranty Lookup When a customer asks whether their product is still under warranty, Captain can check it using the serial number. - Tool Name: Warranty Lookup - Description: Checks the warranty status of a product by its serial number. Use when a customer asks if their product is covered, when the warranty expires, or what type of coverage they have. Service Area Check For businesses that operate in specific regions — customers ask whether service is available at their location. - Tool Name: Service Area Check - Description: Checks whether service or delivery is available in a specific area using the customer's zip code or city name. Custom Tools work best when the inputs are straightforward and the API response is predictable — status checks, lookups, and other structured queries are a great fit.

📞 Voice Channels

Voice Calling in Chatwoot

Talk to your customers by voice, right from the same inbox where you already handle chats. This guide is in three parts: 1. What voice calling is and how it helps: overview on voice calling feature 2. Connecting a voice channel: setup for each provider (Twilio and WhatsApp) 3. Using voice calling day to day: answering, assignments, who gets rung, and what happens after a call 1. What voice calling is and how it helps Voice calling lets your agents make and receive phone calls inside Chatwoot, without juggling a separate phone app. A call lives in the same place as the rest of the conversation, so the chat history, contact details, notes, and the call all sit together in one timeline. 1.1. Why teams use it - One screen for everything. When a customer calls, the agent already sees who they are and what they've talked about before, no asking them to repeat themselves. - No phones to manage. Agents talk through their browser using a headset or the computer's mic and speakers. There's no additional overhead of any new softwares or browser extensions. - Every call is on the record. Each call automatically becomes a message in the conversation, showing whether it was answered, how long it lasted, who picked it up, and, when available, a recording you can replay and a written transcript you can read. - The team shares the load. An incoming call rings the right available agents at once, so customers reach a real person quickly. 1.2. Different ways to receive a call Chatwoot supports voice through two providers. You can use either or both: | Provider | Best for | How the customer reaches you | | -------------------- | --------------------------------- | ------------------------------------------------------------- | | Twilio Voice | A traditional business phone line | Customer dials your phone number from any phone | | WhatsApp Calling | Businesses already on WhatsApp | Customer taps "call" on your business inside the WhatsApp app | Note: Voice calling is a premium feature. It must be enabled on your account (the Voice Channel feature) before the options below appear. If you don't see voice settings, contact your account admin or your Chatwoot provider. 2. Connecting a voice channel Setting up voice is an admin task, done once per inbox. Pick the section that matches the provider you want. 2.1. Twilio Voice (a phone-number line) Please follow along this article to setup Twilio Voice: Connecting Twilio voice channel 2.2. WhatsApp Calling Please follow along this article to setup WhatsApp Calling: Connecting WhatsApp voice channel One requirement for agents: their browser must have microphone permission granted for Chatwoot. 3. Using voice calling day to day Once an inbox has voice enabled, calling works the same way for agents no matter which provider is behind it. 3.1. Receiving an incoming call When a customer calls, a floating call widget pops up in the corner of the screen for the agents who should answer, and a ringtone plays. The card shows the caller's name, number, and (when known) their location, plus which channel the call came in on. From that widget an agent can: - Join call: answer and start talking by clicking the green call accept button. - Reject: decline the call (the caller is no longer ringing this agent) by clicking the red call reject button. - Dismiss: quietly hide the popup on this screen without rejecting the call, so other agents can still pick it up. You can do this by clicking the cross button on the top right of the widget. If a teammate (or the same agent in another browser tab) has already grabbed the call, the widget shows "Being handled in another tab" so two people don't answer the same call. While connected, the widget shows a running timer and these controls: - Mute mic / Unmute mic: turn the agent's microphone off and on by clicking in the green mic button. - End call: hang up by clicking on the red call end button. - Go to conversation thread / View chat history: jump to the full conversation while staying on the call by clicking on the "Go to conversation thread" link at the bottom of the widget. This makes it easier for the agent can see the previous history of the conversation or get more details about the contact. 3.2. Notification and call assignments Chatwoot rings the people most likely to help, it does not ring everyone blindly. For an incoming call, it rings in this order of priority: 1. The assigned agent, if the conversation already has one, only they are rung. 2. Otherwise, the online agents in that inbox, everyone who is available gets the call notification at once. 3. Otherwise, all online admins on the account, a last resort so no call goes unanswered. A few rules that follow from this: - Only available (online) agents get a ringing popup for incoming calls. Agents who are offline or busy are skipped. - First to answer wins. There's no queue or round-robin, whoever picks up first takes the call, and for the others it stop ringing and the call notification goes away. - The call is auto-assigned to whoever answers. The conversation becomes theirs, so follow-up stays with the person who handled it. - Outbound calls always belong to the agent who started them. 3.3. Call states (what the labels mean) Every call moves through a simple lifecycle, and the conversation reflects it: | What you see | Meaning | | ---------------------------------------- | ---------------------------------------- | | Incoming call / Outgoing call | The call is ringing | | Call in progress | Connected and talking | | Call ended | Finished normally | | No answer (Contact didn't pick up) | Outbound call the customer didn't answer | | Missed call (No agent picked up) | Incoming call nobody answered | | Declined by {agent} | An agent rejected the call | 3.4. After the call When a call ends, it's saved as a call entry in the conversation timeline, so there's a permanent record. Depending on your setup, that entry can include: - Call summary: Direction (incoming/outgoing), the final status, how long it lasted, and which agent answered (e.g. "You answered", "{agent} answered", or "They answered"). - Recording: For Twilio calls a recording is captured automatically and attached so you can replay it. For WhatsApp calls a recording is attached when it is available. - Transcript: If your account has AI transcription enabled (the Captain integration, subject to available quota), the recording is turned into readable text right inside the call entry, with a Show more / Show less toggle for long calls. A missed or declined call still leaves an entry (e.g. Missed call - No agent picked up), and the agent can use Call back from the conversation to return it. 3.5 Starting an outbound call When an agent misses a call, Chatwoot provides the ability to seamlessly do a callback to the customer from the dashboard. From inside a conversation, the agent can use the call button in the conversation header: You can also start a call from the contact info screen also. Quick troubleshooting - No voice settings appear. The Voice Channel feature isn't enabled on your account — ask your admin or Chatwoot provider. - WhatsApp calling won't turn on. The number isn't enrolled in the WhatsApp Business Calling API yet, or the inbox isn't a WhatsApp Cloud inbox. Onboard the number with Meta / your provider and try again. - The call connects but there's no sound, or it won't start. Check hat the browser has microphone permission for Chatwoot, and that a headset/mic is selected. - A customer says they can't call your WhatsApp number. They may not have accepted the call permission request yet — they'll get one when an agent tries to call, and calls work once they accept.

⚡ Apps and Integrations

How to enable video calls with Cloudflare RealtimeKit?

Video calling helps your team connect with customers quickly, understand issues clearly, and provide faster support. Chatwoot supports video calls for website live chat conversations through the Cloudflare RealtimeKit integration. This guide explains how to create the required Cloudflare RealtimeKit credentials, connect them to Chatwoot, and start a video call from a conversation. Note: If you previously used the Dyte integration, use Cloudflare RealtimeKit for new setups. Dyte's legacy infrastructure is being sunset after the Cloudflare acquisition. Prerequisites Before you start, make sure you have: - Access to your Cloudflare account. - Permission to create a RealtimeKit app in Cloudflare. - Permission to create Cloudflare API tokens. - Administrator access to your Chatwoot account. How to create a RealtimeKit app in Cloudflare? Step 1. Open the Cloudflare dashboard and go to Realtime -> RealtimeKit. Step 2. Click the "Create app" button. Step 3. Enter a name for the app. For example, you can use "video-support". Click "Create". Step 4. After the app is created, copy the RealtimeKit App ID. You will need this value when connecting the integration in Chatwoot. How to find your Cloudflare Account ID? Step 1. Go to your Cloudflare account home. Step 2. Click the three-dot menu in the top-right corner. Step 3. Click "Copy account ID". How to create a Cloudflare API token? Step 1. In Cloudflare, go to My Profile -> API Tokens. Step 2. Click "Create Token". Step 3. Under "Custom token", click "Get started". Step 4. Give the token a descriptive name. For example, you can use "video-support". Step 5. Under Permissions, select: - Scope: Account - Permission: Realtime - Access: Admin Step 6. Under Account Resources, select the Cloudflare account you want to use with Chatwoot. You can select "All accounts" if you want the token to work across all accounts you have access to. Step 7. Review the token summary and click "Create Token". Step 8. Copy the API token. Cloudflare shows this token only once, so keep it somewhere safe until you add it to Chatwoot. How to set up the RealtimeKit integration in Chatwoot? Step 1. In Chatwoot, go to Settings -> Applications -> Cloudflare RealtimeKit. Step 2. Click "Configure". Step 3. Click "Connect". Step 4. Enter the following values: - Cloudflare Account ID - RealtimeKit App ID - Cloudflare API Token Step 5. Click "Create". Chatwoot validates the credentials before saving the integration. If any value is incorrect, you will see a specific error for the API token, Account ID, permissions, or RealtimeKit App ID. Once the credentials are saved, the RealtimeKit integration is ready to use. How to video call your customers in Chatwoot? Once the RealtimeKit integration is enabled, you will see the video calling option in website inbox conversations. Step 1. Open a website inbox conversation. Step 2. Click the video camera icon below the reply editor. Step 3. Chatwoot sends a meeting invitation message to the customer. Click "Click here to join" to enter the call. Step 4. The customer can join the same call from the website live chat widget. Step 5. Once both sides join, the agent and customer can continue the conversation over video or voice.

đŸȘ” Other channels

How to setup a WhatsApp channel (Manual flow)?

You can manage your WhatsApp business account conversations from Chatwoot. To set it up, you have two options to choose your provider: 1. WhatsApp Cloud API 2. Twilio We'll explain all the procedures in this guide. Prerequisites 1. You need a Meta Developer Account to setup WhatsApp API. If you dont have a developer account already click here to create one before proceeding 2. A valid phone number Using Whatsapp Cloud API WhatsApp Cloud API is available to all businesses and individual developers. Since it's hosted on Meta's cloud infrastructure, you no longer need to use third-party providers like Twilio, Zendesk, 360Dialog, or MessageBird (Business Solution Providers) to host your WhatsApp Business API. Set up your Business Profile Create a professional WhatsApp business profile with your company name, description, and contact information. A well-crafted profile helps customers recognise and trust your brand when they interact with you. Log into https://business.facebook.com and click the create portfolio button in the dropdown menu under Home Complete all required fields to set up your business portfolio. Once you have created your business portfolio, it's time to create your Facebook app. Setup your Facebook App Log into https://developers.facebook.com/ and click the Create App button. Complete the required fields Click "Other" from the options Choose "Business" as your app type Enter your contact email address and choose your business portfolio from the dropdown menu. Add Whatsapp to your app After creating your app, you'll be directed to the app dashboard. From there, click "Add Product" and choose WhatsApp from the available products list. Click the "Set up" button for WhatsApp Note: Before proceeding, verify your business with Meta. You'll need to submit documentation for verification, which is required for full API access. Set Up a Permanent WhatsApp Cloud API Access Token You'll need to create a System User and generate a permanent token to maintain secure, uninterrupted access. Log in to your Facebook developer account, select your WhatsApp app, and navigate to the Business settings page. Click on "System Users" and add a new system user with the role Admin Click the "Add Assets" button, select your app name, choose the "Full Control" option, and click "Assign assets." Return to the system users page, select your newly created system user from the list, and click the "Generate new token" button. Select your app from the dropdown menu Select these three permission levels for your token: - whatsapp_business_manage_events - whatsapp_business_management - whatsapp_business_messaging Copy and save your token Set Up WhatsApp Cloud API To create a new Meta business account, select "create a business account" from the dropdown menu. If you already have a business account, you can select it from the existing options. I'm selecting "create a business account". Click the continue button. Paste your permanent token here Add your production ready phone number Note: Meta requires a verified phone number for WhatsApp API setup. You can verify your number using an OTP (one-time password). Once you have added and verified your phone number, the next step is configuring a webhook to receive inbound messages. Connecting Your Chatwoot Account Let's connect your Chatwoot account with your WhatsApp Cloud API Copy your WhatsApp Phone Number ID and Business Account ID from this section Log into your Chatwoot account, go to Settings > Inbox, and select WhatsApp channel Enter your phone number, phone number ID, and business ID from your WhatsApp API setup Add team members to your WhatsApp inbox Copy the webhook URL and webhook verification token provided here Set Up Your Webhook We need to set up the WhatsApp webhook to receive incoming customer messages sent to your business number. Your callback URL should be in the format of https://app.chatwoot.com/webhooks/whatsapp/{phone_number}. Log into your Facebook developer account and navigate to WhatsApp > Configuration Paste your Chatwoot webhook URL and verification token here, then click "Verify and Save" Set up webhook permissions by subscribing to messages That's it—you're all done! You can now start sending WhatsApp messages through Chatwoot. FAQ’s How to configure multiple numbers under a single Facebook app? Facebook App allows configuring only a single Webhook endpoint. So create Inboxes in Chatwoot for all the numbers as required. You will need to configure the Webhook URL provided for only one of these inboxes in the Facebook app for all the other inboxes to work. What type of Whatsapp templates are supported by Chatwoot ? Please check the doc for more details about templates. What are the supported media types?

📌 Other topics

Migrate a WhatsApp Embedded Signup inbox to manual setup

This guide helps you move an existing WhatsApp Cloud inbox to manual setup in Chatwoot. The migration keeps your existing inbox intact. Conversations, contacts, collaborators, routing rules, business hours, CSAT settings, bot settings, and other inbox settings are preserved. WhatsApp numbers with Coexistence support are currently under review. If your WhatsApp number is also used in the WhatsApp Business App, contact Chatwoot Support before starting this migration. Before starting the migration, collect the required WhatsApp Cloud API details from Meta: WABA ID, Phone Number ID, and a permanent system user access token. Use the steps below to create or select a Meta app, add or select the WhatsApp phone number, and generate the token. Get your WhatsApp Cloud API details from Meta To complete the migration, you need three details from Meta: - WhatsApp Business Account ID - Phone Number ID - Permanent access token or system user token You can get the WhatsApp Business Account ID and Phone Number ID from your Meta app. Create or select a Meta app Go to Meta for Developers and either select an existing app or click Create App. If you are creating a new app, enter an app name and contact email, then click Next. Choose the WhatsApp use case On the use case selection screen, choose Connect with customers through WhatsApp, then click Next. Choose a business portfolio Select the business portfolio that owns or will own your WhatsApp Business Account. If you do not already have a business portfolio, you can create one during this step or continue and create it later if Meta allows it. Review publishing requirements Meta may show publishing requirements for the selected app and use case. Review the requirements and click Next. Review and create the app Review the app details, selected WhatsApp use case, and connected business portfolio. Click Create app to finish. Open WhatsApp API setup After the app is created or selected: 1. Click Use cases in the sidebar. 2. Find Connect with customers through WhatsApp. 3. Click Customize. 4. Click API Setup. In the new Meta app interface, go to Basic setup → Step 2. Production setup and open Register your WhatsApp phone number. In older Meta apps, open WhatsApp → API setup from the left sidebar. Add or select your WhatsApp phone number In the Send and receive messages or Register your WhatsApp phone number section, choose an existing number from the From selector, or click Add phone number. If you are adding a new number: 1. Enter your WhatsApp Business display name and business details. 2. Enter the phone number. 3. Choose verification by SMS or phone call. 4. Enter the OTP code from Meta to verify the number. Copy the required IDs After the number is added or selected, copy these values from the API setup page: - Phone Number ID - WhatsApp Business Account ID You will need to paste these values into the Chatwoot migration flow. In the older Meta UI, these values are shown directly under the From selector in WhatsApp → API setup. Meta changes this interface frequently. If your screen looks different, look for the WhatsApp API setup page and the selected sender number. The Phone Number ID and WhatsApp Business Account ID are usually shown near the selected From phone number. Set up a permanent WhatsApp Cloud API access token You also need a permanent system user access token with WhatsApp permissions. This token allows Chatwoot to connect to your WhatsApp Cloud API number, send and receive messages, and sync message templates. Open System users in Meta Business Settings 1. Open Meta Business Settings. 2. Select the business portfolio that owns your WhatsApp Business Account. 3. Go to Users → System users. 4. If you already have a system user for Chatwoot, select it. 5. If you do not have one, click Add. Create a system user 1. Enter a name for the system user, such as Chatwoot WhatsApp. 2. Select Admin as the system user role. 3. Click Create system user. Generate a token 1. Select the system user. 2. Click Generate token. Select the Meta app Choose the Meta app that you created or selected earlier for WhatsApp Cloud API setup, then click Next. Set token expiry Select Never as the token expiry, then click Next. Assign permissions Select the required WhatsApp permissions: - whatsapp_business_messaging - whatsapp_business_management - whatsapp_business_manage_events Then continue to generate the token. Copy the token After Meta creates the token, click Copy and store it securely. You will paste this token into the Access token step in the Chatwoot migration flow. Keep this token private. Anyone with access to it may be able to use your WhatsApp Cloud API connection. Start the migration 1. Go to Settings → Inboxes. 2. Open the WhatsApp inbox connected via embedded signup. 3. Click Start manual migration. Chatwoot will open a guided migration flow. Step 1: Review what will change The first step explains what will be preserved and what will be updated. Preserved: - Conversations - Contacts - Collaborators - Routing - Business hours - Inbox settings Updated: - WABA ID - Phone Number ID - Access token - Webhook configuration Click Continue. Step 2: Enter business details Enter the WhatsApp asset details from Meta. Fields: - WABA ID: The WhatsApp Business Account that owns this phone number. - Phone Number ID: Meta’s unique ID for the WhatsApp number connected to this inbox. - Display phone number: The customer-facing WhatsApp number. This cannot be changed during migration. Click Continue. Step 3: Add the access token Paste a permanent access token or system user token with WhatsApp permissions. The token must include whatsapp_business_messaging, whatsapp_business_management, and whatsapp_business_manage_events. Step 4: Review and reconnect Review the inbox, phone number, WABA ID, and Phone Number ID before applying changes. Chatwoot will verify the credentials with Meta before applying changes. If verification fails, the current configuration is left untouched. Click Reconnect WhatsApp inbox to complete the migration. After migration After the migration succeeds, the inbox remains the same in Chatwoot, but the WhatsApp connection uses the manual WhatsApp Cloud API setup. You should verify: - Incoming messages - Outgoing replies - Template message sending - Template sync - Webhook delivery Need help? If you are unsure about any step, contact Chatwoot Support. We can help you verify the required Meta details and assist with the migration.