Connect WhatsApp to GoHighLevel contacts on a Coexistence number
Route the number's webhooks to an n8n workflow, upsert the sender as a HighLevel contact with n8n's HighLevel node, and write each message as a note through POST /contacts/{contactId}/notes. Authenticate with a Private Integration token from the sub-account's settings. One workflow can serve every client by mapping each phone number id to its sub-account.
HighLevel API v2 burst limit, counted per app per sub-account or company.
HighLevel API v2 requests allowed per day, per app per resource.
Overlap during which old and new Private Integration tokens both work after a rotation.
How does a WhatsApp message reach a HighLevel contact?
Meta posts each message on the number to the webhook destination you set, here an n8n Webhook node. The workflow passes the sender's number and WhatsApp profile name to n8n's HighLevel node, whose contact resource has a create or update operation, so a new sender becomes a contact and a known one is found rather than duplicated.
With the contact id in hand, an HTTP Request node posts the message body to /contacts/{contactId}/notes. The note appears on the contact record, where anyone opening it sees what the customer wrote. When the message calls for follow-up, the HighLevel node can also create a task on the contact or an opportunity in a pipeline, both of which it supports directly.
The team keeps answering from the WhatsApp Business app throughout.
Which token should the workflow use?
A Private Integration token. HighLevel's API v2 is reached with either OAuth or one of these tokens, and the old v1 API keys reached end of life. A Private Integration token is created in the sub-account's settings, scoped to the permissions you tick, and sent in the Authorization header like any access token.
It does not refresh itself, which suits an automation: it keeps working until someone rotates it. When you do rotate it, HighLevel keeps the old and new tokens valid together for seven days, which is the window to paste the new one into n8n before the old one stops.
Tick only the scopes the workflow needs: contacts, notes and, if you use them, opportunities and tasks. If you cannot find Private Integrations in settings, HighLevel says to enable it in Labs.
How does one workflow serve several client sub-accounts?
By routing on the receiving number. Every webhook Meta sends includes the phone_number_id of the business number that received the message. Point every client's number at the same n8n webhook, keep a small table that maps each phone_number_id to that client's sub-account and its token, and look the token up at the start of each run.
This keeps one workflow to maintain across all clients, which matters to an agency more than to anyone. A fix to the matching logic or the note format lands for everyone at once.
The rate limits are counted per app per sub-account, so clients do not eat into each other's allowance: each gets its own 100 requests per ten seconds and 200,000 a day.
Do replies typed on the phone reach HighLevel?
They can. On a Coexistence number the WhatsApp Business app stays in use, and when someone answers from it Meta sends an echo of the outgoing message to the same webhook destination, under the smb_message_echoes field.
Add a branch for those echoes and write them as notes marked as sent. The contact record then holds the customer's lines and the business's answers in order, which is what a client expects to see when they open their CRM.
When the workflow itself sends a message through the Cloud API, for instance an approved template after an appointment is booked, write the note at the moment of sending. The workflow already holds the text and the contact id.
Common mistakes
- Using a v1 API key. HighLevel's v1 API has reached end of life; API v2 needs a Private Integration token or OAuth.
- Rotating the Private Integration token without updating n8n inside the seven-day overlap. Every call fails once the old token expires.
- Writing every client's messages with one sub-account's token. Map phone_number_id to the right sub-account first, or records land in the wrong client.
Connect each client's number at easycoexistence.com, point every webhook destination at the same n8n workflow, and route by phone number id. From US$ 9 per number per month, falling to US$ 1 as you add numbers, with the first 3 days free.
Frequently asked questions
Will messages appear in HighLevel's Conversations tab?
Not with this workflow. It writes contacts, notes, tasks and opportunities through the API, and the conversation is answered from the WhatsApp Business app or by the workflow.
Can I use Make or Zapier instead of n8n?
Yes. A custom webhook or catch hook receives the message and an HTTP step calls HighLevel's API v2 with the same token.
Can a booked appointment send a WhatsApp confirmation?
Yes, through the workflow. When HighLevel calls an n8n webhook URL, n8n sends an approved template through the Cloud API with the number's phone number id and token.
Does EasyCoexistence store the messages?
No. Meta delivers each webhook straight to your n8n URL, and EasyCoexistence never stores conversation content.
Keep reading
Ready to get started?
Set up WhatsApp Coexistence in minutes, not months. The app keeps working on the phone.
Start Free TrialVerified on