Blue Reacher
Group chats23 / 46

Group chats

iMessage group chats: list and sync them, create iMessage groups, manage participants, bridge a group to the CRM, and send to it.

iMessage group chats: list and sync them, create iMessage groups, manage participants, bridge a group to the CRM, and send to it.

Every route takes Authorization: Bearer <ACCESS_TOKEN> unless the auth line says otherwise. Ids are numbers. Errors use the shape on the errors page.

RouteScopeWhat it does
GET /v1/groupsgroups.readThe iMessage group chats of a workspace.
GET /v1/groups/{channel}/{id}groups.readOne group chat.
POST /v1/groups/imessagegroups.writeDraft an iMessage group from contacts.
POST /v1/groups/syncgroups.writeRefresh a workspace's groups from its line.
PATCH /v1/groups/{channel}/{id}groups.writeRename an iMessage group, or bridge a group to the CRM.
POST /v1/groups/imessage/{id}/participantsgroups.writeAdd a phone number or email to an iMessage group.
DELETE /v1/groups/imessage/{id}/participantsgroups.writeRemove a participant from an iMessage group.
POST /v1/groups/imessage/{id}/leavegroups.writeLeave an iMessage group on the line.
POST /v1/groups/{channel}/{id}/messagesgroups.writeSend a message to a group chat.

List groups

GET https://api.bluereacher.com/v1/groups

Auth: Bearer access token. Scope: groups.read.

The iMessage group chats of a workspace.

crm_bridged groups appear in the connected CRM as a contact with crm_phone. Inactive groups (left, or no longer on the line) are left out unless include_inactive=1.

Parameters

NameInTypeRequiredDescription
workspace_idquerynumberyesA workspace of the installer.
channelqueryenumnoOne channel only.
include_inactivequerybooleanno1 = include groups that were left or retired.

Request

curl -X GET "https://api.bluereacher.com/v1/groups?workspace_id=7" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Responses

A 200 reply (OK):

{
  "success": true,
  "data": [
    {
      "id": "imsg_group:7",
      "channel": "imessage",
      "workspace_id": 7,
      "name": "Family",
      "participant_count": 2,
      "is_active": true,
      "crm_bridged": true,
      "crm_phone": "+881700000007",
      "last_synced_at": null,
      "created_at": "2026-10-20T00:00:00.000Z",
      "updated_at": "2026-11-04T00:00:00.000Z",
      "status": "active",
      "source": "dashboard",
      "device_id": "A1B2C3D4-0001",
      "participants": [
        {
          "handle": "+61412345678",
          "name": "Ann Lee"
        },
        {
          "handle": "bob@icloud.com",
          "name": "Bob"
        }
      ],
      "last_message_at": "2026-11-03T09:00:00.000Z"
    }
  ]
}
StatusWhenMessage
200OK
400No workspace_idworkspace_id is required.
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): groups.read. This integration was granted: …
404Workspace does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token

Get group

GET https://api.bluereacher.com/v1/groups/{channel}/{id}

Auth: Bearer access token. Scope: groups.read.

One group chat.

Parameters

NameInTypeRequiredDescription
channelpathenumyesThe group's channel.
idpathstringyes

Request

curl -X GET "https://api.bluereacher.com/v1/groups/imessage/imsg_group%3A7" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Responses

A 200 reply (OK):

{
  "success": true,
  "data": {
    "id": "imsg_group:7",
    "channel": "imessage",
    "workspace_id": 7,
    "name": "Family",
    "participant_count": 2,
    "is_active": true,
    "crm_bridged": true,
    "crm_phone": "+881700000007",
    "last_synced_at": null,
    "created_at": "2026-10-20T00:00:00.000Z",
    "updated_at": "2026-11-04T00:00:00.000Z",
    "status": "active",
    "source": "dashboard",
    "device_id": "A1B2C3D4-0001",
    "participants": [
      {
        "handle": "+61412345678",
        "name": "Ann Lee"
      },
      {
        "handle": "bob@icloud.com",
        "name": "Bob"
      }
    ],
    "last_message_at": "2026-11-03T09:00:00.000Z"
  }
}
StatusWhenMessage
200OK
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): groups.read. This integration was granted: …
404Group does not exist or is not the installer's (same response for both)Group not found or not accessible to this token

Create iMessage group

POST https://api.bluereacher.com/v1/groups/imessage

Auth: Bearer access token. Scope: groups.write.

Draft an iMessage group from contacts.

The chat does not exist in Messages yet: the group is pending_create and the line creates it when the first message is sent to it (Send to group). Each contact's phone, or its email when it has none, becomes a participant; a contact with neither is refused. The same participants on the same line twice returns the existing group (200). Needs an iMessage device connected to the workspace.

Parameters

NameInTypeRequiredDescription
workspace_idbodynumberyesA workspace of the installer.
contact_idsbodyarray<number>yesAt least 2 contacts of the workspace.
namebodystringnoThe group name (up to 255 characters).
device_idbodystringnoThe line to create it on. Default: the workspace's default line.

Request

curl -X POST "https://api.bluereacher.com/v1/groups/imessage" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
  "workspace_id": 7,
  "contact_ids": [
    1234,
    1235
  ],
  "name": "Family"
}'

Responses

A 201 reply (Created (pending the first message)):

{
  "success": true,
  "message": "Group created — send the first message to start it in Messages",
  "data": {
    "id": "imsg_group:10",
    "channel": "imessage",
    "workspace_id": 7,
    "name": "Family",
    "participant_count": 2,
    "is_active": true,
    "crm_bridged": false,
    "crm_phone": null,
    "last_synced_at": null,
    "created_at": "2026-10-20T00:00:00.000Z",
    "updated_at": "2026-11-04T00:00:00.000Z",
    "status": "pending_create",
    "source": "dashboard",
    "device_id": "A1B2C3D4-0001",
    "participants": [
      {
        "handle": "+61412345678",
        "name": "Ann Lee"
      },
      {
        "handle": "bob@icloud.com",
        "name": "Bob"
      }
    ],
    "last_message_at": null
  }
}
StatusWhenMessage
201Created (pending the first message)
200A group with these participants already exists on that line
400Fewer than 2 contacts, a contact with no handle, or no lineNo iMessage device is connected to this workspace
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): groups.write. This integration was granted: …
404Workspace does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token

Sync groups

POST https://api.bluereacher.com/v1/groups/sync

Auth: Bearer access token. Scope: groups.write.

Refresh a workspace's groups from its line.

imessage: asks the workspace's lines to report their group chats; they answer in the background, so list again shortly after.

Parameters

NameInTypeRequiredDescription
workspace_idbodynumberyesA workspace of the installer.
channelbodyenumyesWhich line to sync.

Request

curl -X POST "https://api.bluereacher.com/v1/groups/sync" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
  "workspace_id": 7,
  "channel": "imessage"
}'

Responses

A 202 reply (iMessage: asked):

{
  "success": true,
  "message": "Asked your line to report its group chats",
  "data": {
    "channel": "imessage",
    "devices": 1,
    "pushed": 1
  }
}
StatusWhenMessage
202iMessage: asked
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): groups.write. This integration was granted: …
404Workspace does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token

Update group

PATCH https://api.bluereacher.com/v1/groups/{channel}/{id}

Auth: Bearer access token. Scope: groups.write.

Rename an iMessage group, or bridge a group to the CRM.

crm_bridged: true gives the group a crm_phone and shows it in the connected CRM as a contact (created on its next message), so replies typed there reach the group; false removes it (the number is kept for re-enabling). name is for iMessage groups: with an Advanced-Mode line the chat is renamed in Messages for everyone (renamed_on_mac: true), otherwise only the dashboard label changes.

Parameters

NameInTypeRequiredDescription
channelpathenumyesThe group's channel.
idpathstringyes
namebodystringnoiMessage only. The new name.
crm_bridgedbodybooleannoShow the group in the CRM (true) or not (false).

Request

curl -X PATCH "https://api.bluereacher.com/v1/groups/imessage/imsg_group%3A7" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Family chat",
  "crm_bridged": true
}'

Responses

A 200 reply (OK):

{
  "success": true,
  "message": "Group updated",
  "data": {
    "id": "imsg_group:7",
    "channel": "imessage",
    "workspace_id": 7,
    "name": "Family chat",
    "participant_count": 2,
    "is_active": true,
    "crm_bridged": true,
    "crm_phone": "+881700000007",
    "last_synced_at": null,
    "created_at": "2026-10-20T00:00:00.000Z",
    "updated_at": "2026-11-04T00:00:00.000Z",
    "status": "active",
    "source": "dashboard",
    "device_id": "A1B2C3D4-0001",
    "participants": [
      {
        "handle": "+61412345678",
        "name": "Ann Lee"
      },
      {
        "handle": "bob@icloud.com",
        "name": "Bob"
      }
    ],
    "last_message_at": "2026-11-03T09:00:00.000Z",
    "renamed_on_mac": true
  }
}
StatusWhenMessage
200OK
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): groups.write. This integration was granted: …
404Group does not exist or is not the installer's (same response for both)Group not found or not accessible to this token

Add participant

POST https://api.bluereacher.com/v1/groups/imessage/{id}/participants

Auth: Bearer access token. Scope: groups.write.

Add a phone number or email to an iMessage group.

Done in Messages on the group's line, which must be in Advanced Mode and have the chat already (a pending_create group gets its chat on the first send). Someone already in the group is refused.

Parameters

NameInTypeRequiredDescription
idpathstringyesThe iMessage group key (imsg_group:<n>).
addressbodystringyesA phone number with country code, or an iMessage email address.

Request

curl -X POST "https://api.bluereacher.com/v1/groups/imessage/imsg_group%3A7/participants" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
  "address": "+61400000005"
}'

Responses

A 200 reply (OK):

{
  "success": true,
  "message": "Participant added",
  "data": {
    "id": "imsg_group:7",
    "channel": "imessage",
    "workspace_id": 7,
    "name": "Family",
    "participant_count": 3,
    "is_active": true,
    "crm_bridged": true,
    "crm_phone": "+881700000007",
    "last_synced_at": null,
    "created_at": "2026-10-20T00:00:00.000Z",
    "updated_at": "2026-11-04T00:00:00.000Z",
    "status": "active",
    "source": "dashboard",
    "device_id": "A1B2C3D4-0001",
    "participants": [
      {
        "handle": "+61412345678",
        "name": "Ann Lee"
      },
      {
        "handle": "bob@icloud.com",
        "name": "Bob"
      },
      {
        "handle": "+61400000005",
        "name": null
      }
    ],
    "last_message_at": "2026-11-03T09:00:00.000Z"
  }
}
StatusWhenMessage
200OK
400The line could not do it (no Advanced Mode, offline, or Messages refused)The group's line isn't in Advanced Mode
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): groups.write. This integration was granted: …
404Group does not exist or is not the installer's (same response for both)Group not found or not accessible to this token

Remove participant

DELETE https://api.bluereacher.com/v1/groups/imessage/{id}/participants

Auth: Bearer access token. Scope: groups.write.

Remove a participant from an iMessage group.

Send address in the JSON body or as a query parameter. Done in Messages on the group's line (Advanced Mode).

Parameters

NameInTypeRequiredDescription
idpathstringyesThe iMessage group key (imsg_group:<n>).
addressbodystringyesThe participant's phone number or email (or ?address=…).

Request

curl -X DELETE "https://api.bluereacher.com/v1/groups/imessage/imsg_group%3A7/participants" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
  "address": "bob@icloud.com"
}'

Responses

A 200 reply (OK):

{
  "success": true,
  "message": "Participant removed",
  "data": {
    "id": "imsg_group:7",
    "channel": "imessage",
    "workspace_id": 7,
    "name": "Family",
    "participant_count": 1,
    "is_active": true,
    "crm_bridged": true,
    "crm_phone": "+881700000007",
    "last_synced_at": null,
    "created_at": "2026-10-20T00:00:00.000Z",
    "updated_at": "2026-11-04T00:00:00.000Z",
    "status": "active",
    "source": "dashboard",
    "device_id": "A1B2C3D4-0001",
    "participants": [
      {
        "handle": "+61412345678",
        "name": "Ann Lee"
      }
    ],
    "last_message_at": "2026-11-03T09:00:00.000Z"
  }
}
StatusWhenMessage
200OK
400The line could not do it (no Advanced Mode, offline, or Messages refused)The group's line isn't in Advanced Mode
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): groups.write. This integration was granted: …
404Group does not exist or is not the installer's (same response for both)Group not found or not accessible to this token

Leave group

POST https://api.bluereacher.com/v1/groups/imessage/{id}/leave

Auth: Bearer access token. Scope: groups.write.

Leave an iMessage group on the line.

The line leaves the chat in Messages (Advanced Mode); the group becomes status: "left" and inactive. Its past messages stay in the conversation. A group already left is refused.

Parameters

NameInTypeRequiredDescription
idpathstringyesThe iMessage group key (imsg_group:<n>).

Request

curl -X POST "https://api.bluereacher.com/v1/groups/imessage/imsg_group%3A7/leave" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Responses

A 200 reply (OK):

{
  "success": true,
  "message": "Left the group",
  "data": {
    "id": "imsg_group:7",
    "channel": "imessage",
    "workspace_id": 7,
    "name": "Family",
    "participant_count": 2,
    "is_active": false,
    "crm_bridged": true,
    "crm_phone": "+881700000007",
    "last_synced_at": null,
    "created_at": "2026-10-20T00:00:00.000Z",
    "updated_at": "2026-11-04T00:00:00.000Z",
    "status": "left",
    "source": "dashboard",
    "device_id": "A1B2C3D4-0001",
    "participants": [
      {
        "handle": "+61412345678",
        "name": "Ann Lee"
      },
      {
        "handle": "bob@icloud.com",
        "name": "Bob"
      }
    ],
    "last_message_at": "2026-11-03T09:00:00.000Z"
  }
}
StatusWhenMessage
200OK
400The line could not do it (no Advanced Mode, offline, or Messages refused)The group's line isn't in Advanced Mode
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): groups.write. This integration was granted: …
404Group does not exist or is not the installer's (same response for both)Group not found or not accessible to this token

Send to group

POST https://api.bluereacher.com/v1/groups/{channel}/{id}/messages

Auth: Bearer access token. Scope: groups.write.

Limits: One attachment per message, 5 MB.

Send a message to a group chat.

A pending_create iMessage group is created in Messages by this first send. One attachment (an https URL, up to 5 MB) per message. Delivery is asynchronous: the row starts pending.

Parameters

NameInTypeRequiredDescription
channelpathenumyesThe group's channel.
idpathstringyes
messagebodystringnoThe text. Required when there is no attachment.
attachmentsbodystringnoOne https URL (image, video, audio or document).

Request

curl -X POST "https://api.bluereacher.com/v1/groups/imessage/imsg_group%3A7/messages" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
  "message": "Meeting moved to 3pm."
}'

Responses

A 200 reply (Queued):

{
  "success": true,
  "message": "Message queued for delivery.",
  "data": {
    "id": 84290,
    "status": "pending",
    "message_id": "84290",
    "group_id": "imsg_group:7",
    "channel": "imessage",
    "queued_at": "2026-11-04T05:00:00.000Z"
  }
}
StatusWhenMessage
200Queued
400Nothing to send, or a bad attachmentmessage or attachments is required.
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): groups.write. This integration was granted: …
404Group does not exist or is not the installer's (same response for both)Group not found or not accessible to this token
409The group was left or retiredThis group is no longer active.

On this page