Before you start
You need three things:- A BlueReacher API key. Dashboard, Settings, API Keys, Create key. Keys start with
bluereacher_. - At least one active line in your BlueReacher workspace. Copy its
line_idfrom Lines. - A GoHighLevel sub-account where you are an Admin.
Step 1: Connect your GoHighLevel account
In BlueReacher, open Integrations, choose GoHighLevel, and click Connect. You are sent to HighLevel’s authorization screen. If you log in at agency level, HighLevel shows a sub-account picker. Select every sub-account you want BlueReacher in. If you log in at sub-account level, only that one is connected. Approve the scopes. BlueReacher requests read access to contacts and read/write access to conversations. Nothing else. Back in BlueReacher you will see each connected sub-account listed with its HighLevel Location ID. Assign a line to each one. A line can serve several sub-accounts, but each sub-account must have exactly one default line so outbound sends never guess.Step 2: Trigger sends from a workflow
Open Automation, Workflows in the sub-account, then open or create a workflow. Set your trigger as usual (Form Submitted, Opportunity Status Changed, Appointment Status, whatever starts the sequence). Click + Add Action, choose Send Data, then Custom Webhook. Configure it like this:external_id. That is how BlueReacher matches a later reply back to the right contact record.
Publish the workflow. Draft workflows accept test runs but never fire on live contacts.
Endpoint reference: send a message
Purpose: queue one iMessage to one recipient on one of your lines. Method and path:POST https://api.bluereacher.com/functions/v1/messages
Auth: Authorization: Bearer bluereacher_your_api_key. Keys are workspace scoped. A key from workspace A cannot send on a line in workspace B.
Request fields
Response fields
curl
HighLevel marks a Custom Webhook step failed on any non-2xx response and retries with exponential backoff before skipping it.
Step 3: Replies back into GoHighLevel
Once a sub-account is connected, BlueReacher writes inbound replies straight into that contact’s Conversations thread. No extra setup. The reply shows in the timeline, on the mobile app, and in the contact record. Matching order isexternal_id first, then phone number in E.164. Contacts whose number is stored without a country code will not match.
Because replies land in Conversations, you can start a workflow with the Customer Replied trigger and branch on the message text. That is the simplest way to pause a sequence, notify a rep, or move an opportunity.
If you want the raw payload instead, add a webhook in BlueReacher under Settings, Webhooks, subscribe to message.received, and point it at a workflow using HighLevel’s Inbound Webhook trigger. Payload:
Step 4: Agencies and sub-accounts
Connect once at agency level and authorize the sub-accounts you manage. BlueReacher keeps them isolated: separate API keys, separate lines, separate reply routing, separate reporting. Two rules worth following:- One line per client. Sharing a line across clients mixes reply threads and makes reporting useless.
- One API key per sub-account. When you offboard a client, revoke that key and every workflow in their account stops sending immediately.
Troubleshooting
Workflow runs but nothing sends. Open the workflow’s History tab and find the contact. A skipped Custom Webhook step means the premium execution balance ran out or the call returned a non-2xx code. The step detail shows the response body. 401 invalid_api_key. The most common cause is pasting an agency-wide key into a sub-account workflow after rotating keys. Generate a fresh key and update the Auth field. 400 invalid_phone_number. HighLevel stores imported numbers in whatever format the CSV used. Add an Update Contact Field step before the webhook to normalize the phone to E.164, or use a formatted custom field in the body. Replies are not showing in Conversations. Check that the sub-account still appears as Connected in BlueReacher. Tokens are revoked when a HighLevel user removes the app or when the authorizing user loses Admin. Reconnect and replies resume, including ones received while disconnected. The same contact gets two messages. Allow Re-Entry is on in Workflow Settings. Turn it off, or add a wait plus an If/Else check on a tag you set after the first send. Status comes backundeliverable. The recipient is not reachable on iMessage. Branch on the webhook status and route those contacts to email or a call task.
Merge field sends literally. If a message arrives reading {{contact.first_name}}, the field was empty and HighLevel passed the token through. Add a fallback value in the merge field picker.