RTM API Reference

7 minutes reading time • last modified 10/15/2019

Introduction

Versioning

This documentation describes the Agent Chat Real-Time Messaging API v3.1.

What is RTM API

Real-Time Messaging API (RTM API) is based on a websocket-like connection. Client can send a request message that results in getting a response message. It's also possible to get push messages.

When to use RTM API

If you're wondering which API to use - Agent Chat RTM API or Web API, keep on reading.

Real-Time Messaging API allows for building stateful integrations that require logging in and maintaining the connection. Since connection maintenance is required, the implementation might be more challenging than with Web API.

Agent Chat RTM API enables communication in real time. It supports pushes like sneak peek, typing indicator, and other. Web API doesn’t have equivalent webhooks, which means you won't be informed about certain events using Web API.

Also, the RTM API will be a better choice if you want to avoid time delays or presume significant traffic. Not what you're looking for? Perhaps, you need to use Agent Chat Web API instead.

Authentication

Agent authentication is handled by access tokens. Find out how to get an access token from Agent authorization flows. Client must authorize himself by logging in within 30 seconds, otherwise the connection will be closed.

After successful authorization, client should ping the server each 15 seconds, otherwise the connection will be closed after about 30 seconds of inactivity. If the control frame ping is unavailable (in web browsers), client should use a protocol message with the ping action. Until authorization is completed, ping is a no-op.

All authorization scopes are listed in the Scopes section. If a method requires particular scopes, you'll find them included in the method description.

Given that the connection is continuosly maintained, you only need to authorize once.

Data centers

LiveChat system operates in two data centers: dal (USA) and fra (Europe). The default data center is dal.

For backend applications, you can specify the region in the request header. The mechanism is the same as in Agent Chat Web API reference. It doesn't work for frontend applications, though. Instead, frontend apps connect to a region different than the default one by specifying the region suffix in the URL.

fra: wss://api-fra.livechatinc.com/v3.1/agent/rtm/ws

dal: wss://api.livechatinc.com/v3.1/agent/rtm/ws

Scopes

Scopes define the access to certain resources.

  • ro means read only
  • rw means read/write
  • all rw scopes contain ro privileges
  • all access scopes contain my privileges
  • all all scopes contain access privileges and my privileges

Accessing chat

This chart shows every possible chats scenarios:

  • chats without my access and without my presence (chats -A -P)
  • chats with my access but without my presence (chats +A -P)
  • chats with my presence but without my access (chats -A +P)
  • chats with my access and with my presence (chats +A +P)

Scopes diagram

The table shows scopes dependency of accessing chat:

chats -A -Pchats +A -Pchats -A +Pchats +A +P
all
access-
my--

Accessing parts of chat

The table shows scopes dependency of accessing chat parts:

meta dataconversation data
chats-*:rwrwrw
chats.conversation-*:rwrorw
chats-*:rororo

Scope types

Agents scopes

ScoperoleDescription
agents--my:rwnormalWrite permission for my profile configuration
agents--all:rwadministratorWrite permission for all agents profiles configuration
access_rules:roadministratorRead permission for auto chat scopes configuration
access_rules:rwadministratorRead/write permission for auto chat scopes configuration

Bot Agents scopes

ScoperoleDescription
agents-bot--my:roadministratorRead permission for bot agents configuration (only my bot agents)
agents-bot--my:rwadministratorRead/write permission for bot agents configuration (only my bot agents)
agents-bot--all:roadministratorRead permission for bot agents configuration (all in license)
agents-bot--all:rwadministratorRead/write permission for bot agents configuration (all in license, delete only)

Chats scopes

ScoperoleDescription
chats--all:ronormalRead permission for conversation and meta data of all license chats
chats--access:ronormalRead permission for conversation and meta data of chats with requester access
chats--my:ronormalRead permission for conversation and meta data of the chats with requester presence
chats.conversation--all:rwnormalWrite permission for conversation data of all license chats and Read permission for conversation and meta data of all license chats (chats--all:ro)
chats.conversation--access:rwnormalWrite permission for conversation data of chats with requester access and Read permission for conversation and meta data of chats with requester access (chats--access:ro)
chats.conversation--my:rwnormalRead/write permission for conversation data of chats with requester presence and Read permission for conversation and meta data of the chats with requester presence (chats--my:ro)
chats--all:rwadministratorRead/write permission for conversation and meta data of all license chats
chats--access:rwadministratorRead/write permission for conversation and meta data of chats with requester access
chats--my:rwnormalRead/write permission for conversation and meta data of chats with requester presence
  • chats conversation data applies to:
    • chat events
    • chat properties
    • thread properties
  • chats meta data applies to:
    • chat users

NOTICE: currently chats.conversation--all:rw allows joining chats too because you have to join the chat to be able to write to it

Customers scopes

ScoperoleDescription
customers.ban:rwnormalPermission for banning customers
customers:ownadministratorPermission for managing customers identities
customers:ronormalRead permission for customers
customers:rwnormalRead/write permission for customers

Multicast scopes

ScoperoleDescription
multicast:rwnormalPermission for multicast data to agents or customers

Properties scopes

ScoperoleDescription
properties--my:roadministratorRead permission for chat/thread/events properties configuration (only in my namespace)
properties--my:rwadministratorRead/write permission for chat/thread/events properties configuration (only in my namespace)
properties--all:roadministratorRead permission for chat/thread/events properties configuration (all in license)

Events

One of the data structures are events. They are sent to a chat via the send_event method. Apart from events, there are also Properties, Users, and Other data structures.

These are the available event types:

File

File event informs about a file being uploaded.

FieldReq./Opt.Note
content_typerequiredSupported image types: image/png, image/jpeg, image/gif
created_atrequiredDate & time format with a resolution of microseconds, UTC string.
custom_idoptional-
propertiesoptional-
recipientsrequiredPossible values: all (default), agents
system_message_typerequired-
width, height, thumbnail_url, thumbnail2x_urloptionalOnly for images
Sample File event
{
  "id": "0affb00a-82d6-4e07-ae61-56ba5c36f743", // generated server-side
  "custom_id": "31-0C-1C-07-DB-16",
  "type": "file",
  "author_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "created_at": "2017-10-12T15:19:21.010200Z", // generated server-side
  "recipients": "all",
  "properties": {
    // "Properties" object
  },
  "name": "image25.png", // generated server-side
  "url": "https://domain.com/asdsfdsf.png",
  "thumbnail_url": "https://domain.com/thumbnail.png", // generated server-side
  "thumbnail2x_url": "https://domain.com/thumbnail2x.png", // generated server-side
  "content_type": "image/png", // generated server-side
  "size": 123444, // generated server-side
  "width": 640, // generated server-side
  "height": 480 // generated server-side
}

Filled form

Filled form event contains data from a form.

FieldReq./OptNote
custom_idoptional
created_atrequiredDate & time format with a resolution of microseconds, UTC string.
propertiesoptional
recipientsrequiredPossible values: all (default), agents
name, email, question, textareaoptionalFor open questions (text answer)
radio, selectoptionalFor single-choice questions
checkboxoptionalFor multiple-choice questions
group_chooseroptionalFor group-choice questions
Sample Filled form event
{
	"id": "0affb00a-82d6-4e07-ae61-56ba5c36f743", // generated server-side
	"custom_id": "31-0C-1C-07-DB-16",
	"type": "filled_form",
	"author_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
	"created_at": "2017-10-12T15:19:21.010200Z",  // generated server-side
	"recipients": "all",
	"properties": {
		// "Properties" object
	},
	"form_id": "1473433500211",
	"fields": [{
		"type": "name",
		"id": "154417206262603539",
		"label": "Your name",
		"answer": "John Doe"
	}, {
		"type": "email",
		"id": "154417206262601584",
		"label": "Your email",
		"answer": "customer1@example.com"
	}, {
		"type": "radio",
		"id": "154417206262602571",
		"label": "Chat purpose",
		"answer": {
				"id": "0",
				"label": "Support"
		}
	}, {
		"type": "checkbox",
		"id": "154417206262604640",
		"label": "Company industry",
		"answers": [{
			"id": "0"
			"label": "automotive"
		}, {
			"id": "1"
			"label": "it"
		}]
	}, {
		"type": "group_chooser",
		"id": "154417206262605324",
		"label": "Choose department",
		"answer": {
			"group_id": 1,
			"label": "Marketing"
		}
	}]
}

Message

Message event contains a text message to other chat users.

FieldReq./Opt.Notes
created_atrequiredDate & time format with a resolution of microseconds, UTC string.
recipientsrequiredPossible values: all (default), agents
textrequiredMax. raw text size is 16 KB (one UTF-8 char like emoji 😁 can use up to 4 B); to send more, split text into several messages.
custom_idoptional
postbackoptionalAppears in the message event only when triggered by a rich message.
postback.typeoptionalRequired only if postback.value is present.
postback.valueoptionalRequired only if postback.type is present.
propertiesoptionalThe properties object
Sample Message event
{
  "id": "0affb00a-82d6-4e07-ae61-56ba5c36f743", // generated server-side
  "custom_id": "31-0C-1C-07-DB-16",
  "type": "message",
  "author_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "created_at": "2017-10-12T15:19:21.010200Z", // generated server-side
  "text": "hello there",
  "postback": {
    "id": "action_call",
    "thread_id": "K600PKZON8",
    "event_id": "75a90b82-e6a4-4ded-b3eb-cb531741ee0d",
    "type": "phone",
    "value": "790034890"
  },
  "recipients": "all",
  "properties": {
    // "Properties" object
  }
}

Rich message

Rich message event contains a rich message data structure.

FieldReq./Opt.Notes
created_atrequiredDate & time format with a resolution of microseconds, UTC string.
recipientsrequiredPossible values: all (default), agents
template_idrequiredDescribes how the event should be presented in an app.
custom_idoptional
elementsoptionalMay contain 1 - 10 element objects.
elements.buttonsoptionalbuttons may contain 1 - 11 button objects.
elements.buttons.postback_idoptionalRequired only if elements.buttons is present. Describes the action sent via send_rich_message_postback. Multiple buttons (even from different elements) can contain the same postback_id. Calling send_rich_message_postback with this id will add a user to all those buttons at once.
elements.buttons.textoptionalRequired only if elements.buttons is present.
elements.buttons.typeoptionalRequired only if both elements.buttons and elements.buttons.value are present.
elements.buttons.user_idsoptionalRequired only if elements.buttons is present. Describes users that sent the postback with "toggled": true.
elements.buttons.valueoptionalRequired only if both elements.buttons and elements.buttons.type are present.
elements.buttons.webview_heightoptionalPossible values: compact, full, tall
elements.imageoptionalimage properties are optional: name, url, content_type, size, width, height.
elements.subtitleoptional
elements.titleoptional
propertiesoptionalThe properties object
Sample Rich message event
{
  "id": "0affb00a-82d6-4e07-ae61-56ba5c36f743", // generated server-side
  "custom_id": "31-0C-1C-07-DB-16",
  "type": "rich_message",
  "author_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "created_at": "2017-10-12T15:19:21.010200Z", // generated server-side
  "recipients": "all",
  "properties": {
    // "Properties" object
  },
  "template_id": "cards",
  "elements": [
    {
      "title": "Lorem ipsum dolor.",
      "subtitle": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
      "image": {
        "name": "image25.png",
        "url": "https://domain.com/asdsfdsf.png",
        "content_type": "image/png",
        "size": 123444,
        "width": 640,
        "height": 480
      },
      "buttons": [
        {
          "text": "yes",
          "postback_id": "action_yes",
          "user_ids": ["b7eff798-f8df-4364-8059-649c35c9ed0c"]
        },
        {
          "text": "no",
          "postback_id": "action_no",
          "user_ids": []
        },
        {
          "type": "phone",
          "text": "value",
          "value": "790034890",
          "webview_height": "tall",
          "postback_id": "action_call",
          "user_ids": []
        }
      ]
    },
    {
      "title": "Lorem ipsum dolor 2."
    }
  ]
}

Custom

Custom event is an event with customizable payload.

FieldReq./Opt.Note
custom_idoptional
created_atrequiredDate & time format with a resolution of microseconds, UTC string.
propertiesoptional
recipientsrequiredPossible values: all (default), agents
Sample Custom event
{
  "id": "0affb00a-82d6-4e07-ae61-56ba5c36f743", // generated server-side
  "custom_id": "31-0C-1C-07-DB-16",
  "type": "custom",
  "author_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "created_at": "2017-10-12T15:19:21.010200Z", // generated server-side
  "content": {
    "custom": {
      "nested": "json"
    }
  },
  "recipients": "all",
  "properties": {
    // "Properties" object
  }
}

System message

System message event is native system event sent in specific situations.

FieldReq./Opt.Note
custom_idoptional-
created_atrequiredDate & time format with a resolution of microseconds, UTC string.
recipientsrequiredPossible values: all (default for system events), agents (for events sent via send_event)
system_message_typerequired-

Here's the list of all system messages you might come across:

agent_added

ContentGenerated when
%initiator% added %agent% to the chatAgent was added to chat via the add_user_to_chat request and is not the first Agent in that chat.

agent_joined

ContentGenerated when
%agent% joined the chatAgent added themselves to chat via the add_user_to_chat request, and is not the first Agent in the chat.

agent_removed

ContentGenerated when
%initiator% removed %agent% from the chatAgent was removed from chat via the remove_user_from_chat request.

archived_customer_disconnected

ContentGenerated when
%customer% left the chatChat ended after Customer left the website.

chat_transferred

ContentGenerated when
%initiator% transferred the chat to %targets%Chat was transferred via the transfer_chat request.

customer_added

ContentGenerated when
%initiator% added %customer% to the chatCustomer was added to chat via the add_user_to_chat request.

customer_banned

ContentGenerated when
Chat archived because customer was banned by %agent% for %duration% day(s)Chat ended becaus Customer was banned via the ban_customer request.

customer_removed

ContentGenerated when
%initiator% removed %customer% from the chatCustomer was removed from chat via the remove_user_from_chat request.

manual_archived_agent

ContentGenerated when
%agent% archived the chatAgent closed chat via the close_thread request.

manual_archived_customer

ContentGenerated when
%customer% archived the chatCustomer closed chat via the close_thread request.

rating.chat_commented

ContentGenerated when
%customer% left the following comment: %comment%Chat was commented by Customer.

rating.chat_rated

ContentGenerated when
%customer% rated the chat as %score%Chat was rated by Customer.

rating.chat_rating_canceled

ContentGenerated when
%customer% canceled the chat ratingChat rating was cancelled by Customer.

routing.archived_deleted

ContentGenerated when
The chat was closed because %agent% account had been deletedChat was archived after Agent was removed from the license. No other Agent could be selected, and queues were disabled.

routing.archived_disconnected

ContentGenerated when
The chat was closed because %agent% had lost internet connectionChat was archived after Agent unexpectedly lost connection. No other Agent could be selected, and queues were disabled.

routing.archived_inactive

ContentGenerated when
Chat archived due to %duration% minutes of inactivityNo new messages were posted for an extended amount of time.

routing.archived_offline

ContentGenerated when
Chat archived due to no available agentsNo Agent could be selected after chat was placed in the queue.

routing.archived_other

ContentGenerated when
The chat was closedChat was archived after Agent was removed from chat for other reasons. No other Agent could be selected, and queues were disabled.

routing.archived_remotely_signed_out

ContentGenerated when
The chat was closed because %agent% had been remotely signed outChat was archived after an Agent was logged out. No other Agent could be selected and queues were disabled.

routing.archived_signed_out

ContentGenerated when
The chat was closed because %agent% had signed outChat was archived after Agent logged out. No other Agent could be selected, and queues were disabled.

routing.assigned_deleted

ContentGenerated when
Chat assigned to %addedAgent% because %removedAgent% account had been deletedChat was assigned to a new Agent after the previous one was removed from the license.

routing.assigned_disconnected

ContentGenerated when
Chat assigned to %addedAgent% because %removedAgent% had lost internet connectionChat was assigned to a new Agent after the previous one unexpectedly lost connection.

routing.assigned_inactive

ContentGenerated when
Chat assigned to %agent_added% because %agent_removed% hasn't replied in %duration% minutesChat was assigned to a new Agent after the previous one failed to response in a timely manner.

routing.assigned_other

ContentGenerated when
The chat was closedChat was archived after Agent was removed from chat for other reasons. No other Agent could be selected, and queues were disabled.

routing.assigned_remotely_signed_out

ContentGenerated when
Chat assigned to %addedAgent% because %removedAgent% had been remotely signed outChat was assigned to a new Agent after the previous one was logged out.

routing.assigned_signed_out

ContentGenerated when
Chat assigned to %addedAgent% because %removedAgent% had signed outChat was assigned to a new Agent after the previous one logged out.

routing.idle

ContentGenerated when
Chat is idle due to %duration% minutes of inactivityNo new messages were posted for an extended amount of time.

routing.unassigned_deleted

ContentGenerated when
Customer was queued because %agent% account has been deletedChat was queued after Agent was removed from the license.

routing.unassigned_disconnected

ContentGenerated when
Customer was queued because %agent% had lost internet connectionChat was queued after Agent unexpectedly lost connection.

routing.unassigned_other

ContentGenerated when
Chat is unassignedChat was queued after Agent was removed from chat for other reasons.

routing.unassigned_remotely_signed_out

ContentGenerated when
Customer was queued because %agent% had been remotely signed outChat was queued after Agent was logged out.

routing.unassigned_signed_out

ContentGenerated when
Customer was queued because %agent% had signed outChat was queued after Agent logged out.

system_archived

ContentGenerated when
Chat archivedLicense was moved to another lc_serv instance while there were still active chats.

transcript_requested

ContentGenerated when
%customer% requested the chat transcript to be sent to %email%Customer enables transcript.

transcript_sent

ContentGenerated when
%customer% sent the chat transcript to %email%Chat ended with the chat transcript enabled by Customer.
Sample System message event
{
  "id": "0affb00a-82d6-4e07-ae61-56ba5c36f743", // generated server-side
  "custom_id": "31-0C-1C-07-DB-16",
  "type": "system_message",
  "created_at": "2017-10-12T15:19:21.010200Z", // generated server-side
  "text": "hello there",
  "system_message_type": "routing.assigned",
  "text_vars": {
    "agent": "John Doe"
  }
}

Users

Users are another important data structure. Within this data structure type, we can distinguish:

Agent

Sample Agent data structure
{
  "id": "agent1@example.com",
  "type": "agent",
  "name": "Support Team",
  "email": "agent1@example.com",
  "present": true,
  "events_seen_up_to": 1473433500,
  "avatar": "cdn.livechatinc.com/avatars/1.png",
  "routing_status": "accepting_chats"
}
FieldReq./Opt.Note
routing_statusoptionalReturned only if the Agent's currently logged in.

My profile

Sample My profile data structure
{
  "id": "agent1@example.com",
  "type": "agent",
  "name": "Support Team",
  "email": "agent1@example.com",
  "present": true,
  "events_seen_up_to": 1473433500,
  "avatar": "cdn.livechatinc.com/avatars/1.png",
  "routing_status": "accepting_chats",
  "permission": "administrator"
}

Customer

Sample Customer data structure
{
  "id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "type": "customer",
  "name": "John Smith",
  "email": "agent1@example.com",
  "avatar": "domain.com/avatars/1.png",
  "last_visit": {
    "started_at": "2017-10-12T15:19:21.010200Z",
    "referrer": "http://www.google.com/",
    "ip": "194.181.146.130",
    "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36",
    "geolocation": {
      "country": "Poland",
      "country_code": "PL",
      "region": "Dolnoslaskie",
      "city": "Wroclaw",
      "timezone": "Europe/Warsaw"
    },
    "last_pages": [
      {
        "opened_at": "2017-10-12T15:19:21.010200Z",
        "url": "https://www.livechatinc.com/",
        "title": "LiveChat - Homepage"
      },
      {
        "opened_at": "2017-10-12T15:19:21.010200Z",
        "url": "https://www.livechatinc.com/tour",
        "title": "LiveChat - Tour"
      }
    ]
  },
  "fields": {
    "custom field name": "custom field value"
  },
  "statistics": {
    "chats_count": 3,
    "threads_count": 9,
    "visits_count": 5
  },
  "__priv_lc2_customer_id": "S1525771305.dafea66e5c", //old, lc2 customer_id
  "agent_last_event_created_at": "2017-10-12T15:19:21.010200Z",
  "customer_last_event_created_at": "2017-10-12T15:19:21.010200Z",
  "created_at": "2017-10-11T15:19:21.010200Z",
  "present": true, // optional, applies only to customer located in chat object
  "events_seen_up_to": 1473433500 // optional, applies only to customer located in chat object
}
FieldReq./Opt.Note
agent_last_event_created_atoptional-
avataroptional-
customer_last_event_created_atoptional-
created_atoptional-
emailoptional-
fieldsoptionalIsn't present when the chat is archived.
nameoptional-
last_seen_timestampoptional-
last_visitoptional-
presentoptional-
statisticsoptional-

Other common structures

Apart from Events and Users, there are also other common data structures you might work with. Those are:

Access

Sample Access data structure
{
  "access": {
    "group_ids": [1, 2]
  }
}
FieldReq./Opt.Note
group_idsrequiredgroup 0 means that all agents can see it.

Chats

Sample Chat data structure
{
  "id": "PJ0MRSHTDG",
  "users": [
    // array of "User" objects
  ],
  "threads": [
    // optional
    // "Thread" object
  ],
  "threads_summary": [
    {
      "thread_id": "K600PKZON8",
      "order": 129846129847
    },
    {
      "thread_id": "K600PKZON8",
      "order": 129846129848
    }
  ],
  "properites": {
    // "Properites" object
  },
  "access": {
    // "Access" object
  },
  "is_followed": true
}
FieldReq./Opt.Note
propertiesoptional
accessoptional

Chat summaries

Chat summary is similar to the Chat data structure. The difference is that Chat contains a thread object, while Chat summary includes last_thread_summary and last_event_per_type.

Sample Chat summary data structure
{
  "id": "PJ0MRSHTDG",
  "users": [
    // array of "User" objects
  ],
  "last_event_per_type": {
    // last event of each type in chat
    "message": {
      "thread_id": "K600PKZON8",
      "thread_order": 3,
      "event": {
        // "restricted_access": true
        // or
        // "Event > Message" object
      }
    },
    "system_message": {
      "thread_id": "K600PKZON6",
      "thread_order": 1,
      "event": {
        // "restricted_access": true
        // or
        // "Event > System message" object
      }
    }
    // ...
  },
  "last_thread_summary": {
    "id": "K600PKZON8",
    "order": 3,
    "timestamp": 1473433500,
    "user_ids": ["agent1@example.com"],
    "properites": {
      // "Properites" object
    },
    "tags": ["bug_report"]
  },
  "properites": {
    // "Properites" object
  },
  "access": {
    // "Access" object
  },
  "is_followed": false
}

Properties

Properties are key-value storages. They can be set within a chat, a thread, or an event. You can read more about properties in the Configuration API document.

Sample Properties data structure
{
  "properties": {
    "rating": {
      // <property_namespace>
      "score": {
        // <property_name>
        "value": 1 // <property_value>
      },
      "comment": {
        "value": "rated good!"
      }
    },
    "routing": {
      "idle": {
        "value": false
      }
    }
  }
}

Thread

Sample Thread data structure
{
  "id": "K600PKZON8",
  "timestamp": 1473433500,
  "active": true,
  "user_ids": ["agent1@example.com"],
  "restricted_access": true,
  "events": [
    // array of "Event" objects
  ],
  "order": 112057129857,
  "properties": {
    // "Properties" object
  },
  "access": {
    // "Access" object
  }
}
FieldReq./Opt.Note
accessoptional-
activerequiredPossible values: true (thread is still active) or false(thread no longer active)
eventsoptionalDoesn't exists if restricted_access is true.
propertiesoptional-
restricted_accessoptional-

Methods

The API endpoint: wss://api.livechatinc.com/v3.1/agent/rtm/ws

Available methods

Chatsget_chats_summary get_chat_threads_summary get_chat_threads get_archives start_chat activate_chat close_thread follow_chat unfollow_chat
Chat accessgrant_access revoke_access set_access transfer_chat
Chat usersadd_user_to_chat remove_user_from_chat
Eventssend_event send_rich_message_postback
Propertiesupdate_chat_properties delete_chat_properties update_chat_thread_properties delete_chat_thread_properties update_event_properties delete_event_properties
Thread tagstag_chat_thread untag_chat_thread
Customersget_customers create_customer update_customer ban_customer
Statuslogin change_push_notifications update_agent set_away_status logout
Othermark_events_as_seen send_typing_indicator multicast
GENERAL RTM API REQUEST FORMAT
{
  "request_id": "<request_id>", // optional
  "action": "<action>",
  "payload": {
    // optional
  },
  "author_id": "<author_id>" // optional, applies only to bots
}
GENERAL RTM API RESPONSE FORMAT
{
  "request_id": "<request_id>", // optional
  "action": "<action>",
  "type": "response",
  "success": true,
  "payload": {
    // optional
  }
}

Chats

Get Chats Summary

It returns summaries of the chats an Agent has access to.

Specifics
Actionget_chats_summary
Required scopes *chats--all:ro chats--access:ro chats--my:ro
Web API equivalentget_chats_summary
Push message-
Request
Request objectRequiredTypeNotes
filtersNoobjectMustn't change between requests for subsequent pages. Otherwise, the behavior is undefined.
filters.include_activeNoboolDefines if the returned chat summary includes active chats; default: true.
filters.group_idsNoarrayArray of group IDs.
filters.properties.<namespace>.<name>.<filter_type>Noany
paginationNoobject
pagination.pageNonumberDefault: 1, minimum: 1, maximum: 1000
pagination.totalNonumberThe total number of threads that match filters; default: 25, min: 0, max: 100.

filter_type can take the following values:

  • exists (bool)
  • values (type[] - array with specific type for property: string, int, or bool)
  • exclude_values (type[] - array with specific type for property: string, int, or bool)

There's only one value allowed for a single property.

Response
ParameterData typeNotes
found_chatsstringAn estimated number. The real number of found chats can slightly differ .
REQUEST
{
  "action": "get_chats_summary",
  "payload": {}
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "get_chats_summary",
  "type": "response",
  "success": true,
  "payload": {
    "chats": [
      {
        "chat": {
          "id": "PJ0MRSHTDG",
          "users": [
            // array of "User" objects
          ],
          "thread": {
            // "Thread" object
          }
        }
      }
    ],
    "pagination": {
      "page": 1,
      "total": 3
    }
  }
}

Get Chat Threads Summary

Specifics
Actionget_chat_threads_summary
Required scopeschats--all:ro chats--access:ro chats--my:ro
Web API equivalentget_chat_threads_summary
Push message-
Request
ParameterRequiredData ypeNotes
chat_idYesstring
orderNostringPossible values: asc - oldest chats firstm desc - newest chats first (default)
limitNonumberDefaul: 10, maximum: 100
page_idNostring
Response
ParameterData typeNotes
found_threadsstringThe number of threads in a chat
REQUEST
{
  "action": "get_chat_threads_summary",
  "payload": {
    "chat_id": "PJ0MRSHTDG"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "get_chat_threads_summary",
  "type": "response",
  "success": true,
  "payload": {
    "threads_summary": [
      {
        "id": "PT039ES4OG",
        "order": 2,
        "events_count": 2
      },
      {
        "id": "PT039DS6IP",
        "order": 1,
        "events_count": 17
      }
    ],
    "found_threads": 7,
    "next_page_id": "MTUxNzM5ODEzMTQ5Ng==", // optional
    "previous_page_id": "MTUxNzM5ODEzMTQ5Nw==" // optional
  }
}

Get Chat Threads

It returns threads that the current Agent has access to in a given chat.

Specifics
Actionget_chat_threads
Required scopeschats--all:ro chats--access:ro
Web API equivalentget_chat_threads
Push message-
Request
ParameterRequiredData ype
chat_idYesstring
thread_idsNoarray
REQUEST
{
  "action": "get_chat_threads",
  "payload": {
    "chat_id": "PJ0MRSHTDG"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "get_chat_threads",
  "type": "response",
  "success": true,
  "payload": {
    "chat": {
      "id": "PJ0MRSHTDG",
      "users": [
        // array of "User" objects
      ],
      "threads": [
        // optional
        // "Thread" object
      ],
      "threads_summary": [
        {
          "thread_id": "K600PKZON8",
          "order": 129846129847
        },
        {
          "thread_id": "K600PKZON8",
          "order": 129846129848
        }
      ],
      "properites": {
        // "Properites" object
      },
      "access": {
        // "Access" object
      }
    }
  }
}

Get Archives

It returns a list of the chats an Agent has access to. Together with a chat, the events of one thread from this chat are returned.

The list classification is based on threads; 1 chat per 1 thread. Thus, the same chat object may appear on the list several times, but each time with a different thread. The returned chat is a complete object, not only a chat summary.

Specifics
Actionget_archives
Required scopeschats--all:ro chats--access:ro chats--my:ro
Web API equivalentget_archives
Push message-
Request
ParameterRequiredData typeNotes
filtersNoobject
filters.queryNostring
filters.date_fromNostringYYYY-MM-DD format
filters.date_toNostringYYYY-MM-DD format
filters.agent_idsNoarrayArray of agent IDs
filters.thread_idsNoarrayArray of thread IDs. Cannot be used with other filters or pagination; max array size: 20.
filters.group_idsNoarrayArray of group IDs
filters.properties.<namespace>.<name>.<filter_type>Noany
<filter_type>Noany*
paginationNoobject
pagination.pageNonumberDefault: 1, min: 1, max: 1000
pagination.limitNonumberDefault: 25, min: 0, max: 100

*) <filter_type> can take the following values:

  • exists (bool)
  • values (type[] - an array with aspecific type for property: string, int or bool)
  • exclude_values (type[] - array with specific type for property: string, int or bool)

There's only one value allowed for a single property.

REQUEST
{
  "action": "get_archives",
  "payload": {}
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "get_archives",
  "type": "response",
  "success": true,
  "payload": {
    "chats": [
      {
        "chat": {
          "id": "PJ0MRSHTDG",
          "users": [
            // array of "User" objects
          ],
          "thread": {
            // "Thread" object
          }
        }
      }
    ],
    "pagination": {
      "page": 1,
      "total": 3 // this is total number of threads matching filters
    }
  }
}

Start Chat

Starts a chat.

Specifics
Actionstart_chat
Required scopes *chats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentstart_chat
Push messageincoming_chat_thread

*) When chat.users is defined, one of following scopes is required:

  • chats--all:rw
  • chats--access:rw
  • chats--my:rw
Request
ParametersRequiredData typeNotes
chatNoobject
chat.propertiesNoobject
chat.accessNoobject
chat.usersNoarrayThe list of existing users. Only one user is allowed (type customer).
chat.threadNoobject
chat.thread.eventsNoarrayThe list of initial chat events
chat.thread.propertiesNoobject
continuousNoboolStarts chat as continuous (online group is not required); default: false.
Response
ParameterData typeNotes
chat_idstring
thread_idstring
event_ids[]stringReturned only when the chat was started with initial events. Returns only the IDs of user-generated events; server-side generated events are not included in the array.
REQUEST
{
  "action": "start_chat",
  "payload": {}
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "start_chat",
  "type": "response",
  "success": true,
  "payload": {
      "chat_id": "PJ0MRSHTDG",
      "thread_id": "PGDGHT5G"
    }
}

Activate Chat

Restarts an archived chat.

Specifics
Actionactivate_chat
Required scopes *chats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentactivate_chat
Push messageincoming_chat_thread

*) When chat.users is defined, one of following scopes is required:

  • chats--all:rw
  • chats--access:rw
  • chats--my:rw
Request
Request objectRequiredTypeNotes
chatYesobject
chat.idYesstringThe ID of the chat that will be activated.
chat.accessNoobjectChat access to set, default: all agents.
chat.propertiesNoobjectInitial chat properties
chat.usersNoarrayList of existing users. Only one user is allowed (type customer).
chat.threadNoobject
chat.thread.eventsNoarrayInitial chat events array
chat.thread.propertiesNoobjectInitial chat thread properties
continuousNoboolSets a chat to the continuous mode. When unset, leaves the mode unchanged.
Response
ParameterData typeNotes
thread_idstring
event_ids[]stringReturned only when the chat was activated with initial events. Returns only the IDs of user-generated events; server-side generated events are not included in the array.
REQUEST
{
  "action": "activate_chat",
  "payload": {
    "chat": {
      "id": "PWJ8Y4THAV"
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "<action>",
  "type": "response",
  "success": true,
  "payload": {
    "thread_id": "Z8AGR5OUW"
  }
}

Close Thread

Closes a thread. Sending messages to this thread will no longer be possible.

Specifics
Actionclose_thread
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalentclose_thread
Push messagethread_closed
Request
ParameterRequiredData type
chat_idYesstring
REQUEST
{
  "action": "close_thread",
  "payload": {
    "chat_id": "PJ0MRSHTDG"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "close_thread",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Follow Chat

Marks a chat as followed. All changes to the chat will be sent to the requester until the chat is reactivated or unfollowed. Chat members don't need to follow their chats. They receive all chat pushes regardless of their follower status.

Specifics
Actionfollow_chat
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalentfollow_chat
Push messageincoming_chat_thread*

*) It won't be sent when the requester already follows the chat or is the chat member.

Request
ParameterRequiredData type
chat_idYesstring
REQUEST
{
  "action": "follow_chat",
  "payload": {
    "chat_id": "PW94SJTGW6"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "follow_chat",
  "type": "response",
  "success": true,
  "payload": {
    "chat_id": "PW94SJTGW6"
  }
}

Unfollow Chat

Removes the requester from the chat followers. After that, only key changes to the chat (like transfer_chat or close_active_thread) will be sent to the requester. Chat members cannot unfollow the chat.

Specifics
Actionunfollow_chat
Required scopes-
Web API equivalentunfollow_chat
Push message-
Request
ParameterRequiredData type
chat_idYesstring
REQUEST
{
  "action": "unfollow_chat",
  "payload": {
    "chat_id": "PWF6BACIKO"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "unfollow_chat",
  "type": "response",
  "success": true,
  "payload": {
    "chat_id": "PWF6BACIKO"
  }
}

Chat access

Grant Access

Grants access to a new resource without overwriting the existing ones.

Specifics
Actiongrant_access
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalentgrant_access
Push messageaccess_granted
Request
ParameterRequiredData ypeNotes
resourceYesstringchat or customer
idYesstringResource Id
accessYesobject
access.typeYesstringgroup
access.idYesany
REQUEST
{
  "action": "grant_access",
  "payload": {
    "resource": "chat",
    "id": "PW94SJTGW6",
    "access": {
      "type": "group",
      "id": 19
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "grant_access",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Revoke Access

Specifics
Actionrevoke_access
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalentrevoke_access
Push messageaccess_revoked
Request
ParameterRequiredData typeNotes
resourceYesstringchat or customer
idYesstringResource Id
accessYesobject
access.typeYesstringgroup or agent
access.idYesnumber
REQUEST
{
  "action": "revoke_access",
  "payload": {
    "resource": "chat",
    "id": "PW94SJTGW6",
    "access": {
      "type": "group",
      "id": 19
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "revoke_access",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Set Access

Grants access to a new resource overwriting the existing ones.

Specifics
Actionset_access
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalentset_access
Push messageaccess_set
Request
Request objectRequiredTypeNotes
resourceYesstringchat or customer
idYesstringResource Id
accessYesobject
access.typeYesstringgroup or agent
access.idYesnumber
REQUEST
{
  "action": "set_access",
  "payload": {
    "resource": "chat",
    "id": "PW94SJTGW6",
    "access": {
      "type": "group",
      "id": 19
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "set_access",
  "type": "response",
  "success": true,
  "payload": {
    // no response optional
  }
}

Transfer Chat

Transfers a chat to an Agent or a group.

Specifics
Actiontransfer_chat
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalenttransfer_chat
Push messagechat_transferred
Request
ParameterRequiredData ypeNotes
chat_idYesstringResource Id
targetNoobjectIf missing, the chat will be transferred within the current group.
target.typeYesstringgroup or agent
target.idsYesarraygroup or agent IDs array
forceNoboolIf true, always transfers chats. Otherwise, fails when unable to assign any Agent from the requested groups; default false.
REQUEST
{
  "action": "transfer_chat",
  "payload": {
    "chat_id": "PWF6BACIKO",
    "target": {
      "type": "group",
      "ids": [19]
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "transfer_chat",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Chat users

Add User to Chat

Adds a user to the chat. You can't add more than one customer user type to the chat.

Specifics
Actionadd_user_to_chat
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalentadd_user_to_chat
Push messagechat_user_added
Request
Request objectRequiredTypeNotes
chat_idYesstring
user_idYesstring
user_typeYesstringPossible values: agent or customer
REQUEST
{
  "action": "add_user_to_chat",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "user_id": "user@gmail.com",
    "user_type": "agent"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "add_user_to_chat",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Remove User from Chat

Removes a user from chat. Removing customer user type is not allowed. It's always possible to remove the requester from chat.

Specifics
Actionremove_user_from_chat
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalentremove_user_from_chat
Push messagechat_user_added

Request payload

Request objectRequiredTypeNotes
chat_idYesstring
user_idYesstring
user_typeYesstringPossible values are agent or customer
REQUEST
{
  "action": "remove_user_from_chat",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "user_id": "user@gmail.com",
    "user_type": "agent"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "remove_user_from_chat",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Events

Send Event

Sends an Event object.

Specifics
Actionsend_event
Required scopeschats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentsend_event
Push message-
Request
ParametersRequiredData typeNotes
chat_idYesstringId of the chat you want to send the message to.
eventYesobjectEvent object
attach_to_last_threadNoboolIf true, adds an event to last (inactive) thread. Otherwise, it doesn't create a new one; default false.
REQUEST
{
  "action": "send_event",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "event": {
      "type": "message",
      "text": "hello world",
      "recipients": "all"
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "send_event",
  "type": "response",
  "success": true,
  "payload": {
      "event_id": "K600PKZON8"
    }
}

Send Rich Message Postback

Specifics
Actionsend_rich_message_postback
Required scopeschats.conversation--my:rw chats.conversation--all:rw
Web API equivalentsend_rich_message_postback
Push messageincoming_rich_message_postback*

*) incoming_rich_message_postback will be sent only for active threads.

Request
ParameterRequiredData typeNotes
chat_idYesstring
event_idYesstring
postbackYesobject
postback.idYesstringPostback name of the button
postback.toggledYesboolPostback toggled; true or false
thread_idYesstring
REQUEST
{
  "action": "send_rich_message_postback",
  "payload": {
    "chat_id": "PJ0MRSHTDG",
    "thread_id": "K600PKZON8",
    "event_id": "a0c22fdd-fb71-40b5-bfc6-a8a0bc3117f7",
    "postback": {
      "id": "Method URL_yes",
      "toggled": true
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "send_rich_message_postback",
  "type": "response",
  "success": true,
  "payload": {
    //no response payload
  }
}

Properties

Update Chat Properties

Specifics
Actionupdate_chat_properties
Required scopeschats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentupdate_chat_properties
Push messagechat_properties_updated
Request
ParameterRequiredData typeNotes
chat_idYesstringId of the chat you to set a property for.
propertiesYesobjectChat properties to set. You should stick to the general properties format and include namespace, property name and value.
REQUEST
{
  "action": "update_chat_properties",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "properties": {
      "bb9e5b2f1ab480e4a715977b7b1b4279": {
        "score": 10,
        "comment": "Thank you!"
      }
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "update_chat_properties",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Delete Chat Properties

Specifics
Actiondelete_chat_properties
Required scopeschats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentdelete_chat_properties
Push messagechat_properties_deleted
Request
ParameterRequiredData typeNotes
chat_idYesstringId of the chat you want to delete property for.
propertiesYesobjectChat properties to delete. You should stick to the general properties format and include namespace, property name and value.
REQUEST
{
  "action": "delete_chat_properties",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "properties": {
      "bb9e5b2f1ab480e4a715977b7b1b4279": ["score", "comment"]
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "delete_chat_properties",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Update Chat Thread Properties

Specifics
Actionupdate_chat_thread_properties
Required scopeschats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentupdate_chat_thread_properties
Push messagechat_thread_properties_updated
Request
ParameterRequiredData typeNotes
chat_idYesstringId of the chat you want to set properties for.
thread_idYesstringId of the thread you want to set properties for.
propertiesYesobjectChat properties to set. You should stick to the general properties format and include namespace, property name and value.
REQUEST
{
  "action": "update_chat_thread_properties",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "thread_id": "K600PKZON8",
    "properties": {
      "bb9e5b2f1ab480e4a715977b7b1b4279": {
        "score": 10,
        "comment": "Thank you!"
      }
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "update_chat_thread_properties",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Delete Chat Thread Properties

Specifics
Actiondelete_chat_thread_properties
Required scopeschats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentdelete_chat_thread_properties
Push messagechat_thread_properties_deleted
Request
ParameterRequiredData typeNotes
chat_idYesstringId of the chat you want to delete property for.
thread_idYesstringId of the thread you want to delete property for.
propertiesYesobjectChat thread properties to delete. You should stick to the general properties format and include namespace, property name and value.
REQUEST
{
  "action": "delete_chat_thread_properties",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "thread_id": "K600PKZON8",
    "properties": {
      "bb9e5b2f1ab480e4a715977b7b1b4279": ["score", "comment"]
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "delete_chat_thread_properties",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Update Event Properties

Specifics
Actionupdate_event_properties
Required scopeschats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentupdate_event_properties
Push messageevent_properties_updated
Request
ParameterRequiredData typeNotes
chat_idYesstringId of the chat you want to set properties for.
thread_idYesstringId of the thread you want to set properties for.
event_idYesstringId of the event you want to set properties for.
propertiesYesobjectChat properties to set. You should stick to the general properties format and include namespace, property name and value.
REQUEST
{
  "action": "update_event_properties",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "thread_id": "K600PKZON8",
    "event_id": "2_EW2WQSA8",
    "properties": {
      "bb9e5b2f1ab480e4a715977b7b1b4279": {
        "score": 10,
        "comment": "Thank you!"
      }
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "update_event_properties",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Delete Event Properties

Specifics
Actiondelete_event_properties
Required scopeschats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentdelete_event_properties
Push messageevent_properties_deleted
Request
ParameterRequiredData typeNotes
chat_idYesstringId of the chat you want to delete the properties of.
thread_idYesstringId of the thread you want to delete the properties of.
event_idYesstringId of the event you want to delete the properties of.
propertiesYesobjectEvent properties to delete. You should stick to the general properties format and include namespace, property name and value.
REQUEST
{
  "action": "delete_event_properties",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "thread_id": "K600PKZON8",
    "event_id": "2_EW2WQSA8",
    "properties": {
      "bb9e5b2f1ab480e4a715977b7b1b4279": {
        "rating": ["score", "comment"]
      }
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "delete_event_properties",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Thread tags

Tag Chat Thread

Specifics
Actiontag_chat_thread
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalenttag_chat_thread
Push messagechat_thread_tagged
Request
ParameterRequiredData typeNotes
chat_idYesstringId of the chat you want to add a tag to.
thread_idYesstringId of the thread you want to add a tag to.
tagYesstringTag name
REQUEST
{
  "action": "tag_chat_thread",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "thread_id": "PWS6GIKAKH",
    "tag": "support"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "tag_chat_thread",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Untag Chat Thread

Specifics
Actionuntag_chat_thread
Required scopeschats--all:rw chats--access:rw chats--my:rw
Web API equivalentuntag_chat_thread
Push messagechat_thread_untagged
Request
ParameterRequiredData typeNotes
chat_idYesstringId of the chat you want to remove a tag from.
thread_idYesstringId of the thread you want to remove a tag from.
tagYesstringTag name
REQUEST
{
  "action": "untag_chat_thread",
  "payload": {
    "chat_id": "PW94SJTGW6",
    "thread_id": "PWS6GIKAKH",
    "tag": "support"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "untag_chat_thread",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Customers

Get Customers

It returns the list of Customers.

Specifics
Actionget_customers
Required scopescustomers:ro
Web API equivalentget_customers
Push message-
Request

All parameters are optional.

ParameterData typeNotes
page_idstring
limitnumberDefault: 10, maximum: 100
order *stringDefault: desc
filtersobject
filters.country.<string_filter_type> **object
filters.email.<string_filter_type> **object
filters.name.<string_filter_type> **object
filters.customer_id.<string_filter_type> **object
filters.chats_count.<range_filter_type> ***object
filters.threads_count.<range_filter_type> ***object
filters.visits_count.<range_filter_type> ***object
filters.created_at.<date_range_filter_type>****object
filters.agent_last_event_created_at.<date_range_filter_type> ****object
filters.customer_last_event_created_at.<date_range_filter_type> ****object

*)

order can take the following values:

  • asc - oldest customers first
  • desc - newest customers first

**)

<string_filter_type> can take the following values :

  • values (string[] - an array of strings)
  • exclude_values (string[] - an array of strings)

There's only one value allowed for a single filter.

***)

<range_filter_type> can take the following values:

  • lte (int - less than or equal to given value)
  • lt (int - less than given value)
  • gte (int - greater than or equal to given value)
  • gt (int - greater than given value)
  • eq (int - equal to given value)

****)

<date_range_filter_type> can take the following values:

  • lte ( string - less than or equal to given value)
  • lt (string - less than given value)
  • gte (string - greater than or equal to given value)
  • gt (string - greater than given value)
  • eq (string - equal to given value)

Dates are represented in ISO 8601 format with microseconds resolution, e.g. 2017-10-12T15:19:21.010200+01:00 in specific timezone or 2017-10-12T14:19:21.010200Z in UTC.

REQUEST
{
  "action": "get_customers",
  "payload": {}
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "get_customers",
  "type": "response",
  "success": true,
  "payload": {
    "customers": [
      // an array of "User > Customer" objects
    ],
    "total_customers": 2340,
    "next_page_id": "MTUxNzM5ODEzMTQ5Ng==", // optional
    "previous_page_id": "MTUxNzM5ODEzMTQ5Ng==" // optional
  }
}

Create Customer

Creates a new Customer user type.

Specifics
Actioncreate_customer
Required scopescustomers:rw
Web API equivalentcreate_customer
Push messagecustomer_created
Request
ParameterRequiredData typeNotes
nameNostring
emailNostring
avatarNostringURL of the Customer's avatar
fieldsNoobjectA map in "key": "value" format
REQUEST
{
  "action": "create_customer",
  "payload": {}
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "create_customer",
  "type": "response",
  "success": true,
  "payload": {
     "customer_id": "b7eff798-f8df-4364-8059-649c35c9ed0c"
  }
}

Update Customer

Updates Customer's properties.

Specifics
Actionupdate_customer
Required scopescustomers:rw
Web API equivalentupdate_customer
Push messagecustomer_updated
Request
ParameterRequiredData typeNotes
customer_idYesstringUUID v4 format is required.
nameNostring
emailNostring
avatarNostringURL of the Customer's avatar
fieldsNoobjectA map in "key": "value" format

Apart from customer_id, which is a required parameter, you also need to include one of the optional parameters.

REQUEST
{
  "action": "update_customer",
  "payload": {
    "customer_id": "646d53b8-ba76-48bf-7ef1-f6d61ec4ec44",
    "name": "John Doe"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "update_customer",
  "type": "response",
  "success": true,
  "payload": {
    // "User > Customer" object
  }
}

Ban Customer

Bans the customer for a specific period of time. It immediately disconnects all active sessions of this customer and does not accept new ones during the ban lifespan.

Specifics
Actionban_customer
Required scopescustomers.ban:rw
Web API equivalentban_customer
Push messagecustomer_banned
Request
ParameterRequiredData type
customer_idYesstring
banYesobject
ban.daysYesnumber
REQUEST
{
  "action": "ban_customer",
  "payload": {
    "customer_id": "3cd19fff-f852-4402-59ce-ebd03af3f15a",
    "ban": {
      "days": 3
    }
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "ban_customer",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Status

Login

It returns the initial state of the current Agent.

Specifics
Actionlogin
Required scopes-
Web API equivalent-
Push message-
Request
ParameterRequiredData typeNotes
tokenYesstringOAuth token from the Agent's account
timezoneNostring
reconnectNoboolReconnecting sets the status to the last known state instead of the default one.
push_notificationsNoobject
push_notifications.firebase_tokenNostringFirebase device token to allow connecting this instance with the existing push notification instance (to be seen as 1 instance).
push_notifications.platformYesstringOS platform; possible values:ios, android. Required only when push_notifications is included.
applicationNoobject
application.nameNostringApplication name
application.versionNostringApplication version
Response
ParameterReq./Optional
accessoptional
propertiesoptional
REQUEST
{
	"action": "login",
	"payload": {
		"token": "Bearer dal:S2V0s1fgTbfXmgthj4cZSA"
		}
	}
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "login",
  "type": "response",
  "success": true,
  "payload": {
    "license": {
      "id": "104130623",
      "plan": "enterprise",
      "expiration_timestamp": 1483433500,
      "creation_timestamp": 1482433500,
      "in_trial": true,
      "website_last_activity": "2018-01-05" // optional
    },
    "my_profile": {
      // "User > My profile" object
    },
    "chats_summary": [
      {
        "id": "PJ0MRSHTDG",
        "users": [
          // array of "User" objects
        ],
        "last_event_per_type": {
          // the last event of each type in chat
          "message": {
            "thread_id": "K600PKZON8",
            "thread_order": 343544565,
            "event": {
              // "restricted_access": true
              // or
              // Event > Message object
            }
          },
          "system_message": {
            "thread_id": "K600PKZON8",
            "thread_order": 343544565,
            "event": {
              // "restricted_access": true
              // or
              // Event > System Message object
            }
          }
          // ...
        },
        "last_thread_summary": {
          "id": "K600PKZON8",
          "timestamp": 1473433500,
          "user_ids": ["agent1@example.com"],
          "order": 12417249812721,
          "properties": {
            "routing": {
              "idle": {
                "value": false
              },
              "unassigned": {
                "value": false
              }
            }
            // ...
          }
        },
        "properties": {
          "routing": {
            "idle": {
              "value": false
            },
            "unassigned": {
              "value": false
            }
          }
          // ...
        },
        "access": {
          // "Access" object
        }
      }
    ]
  }
}

Set Away Status

Specifics
Actionset_away_status
Required scopesagents--my:rw
Web API equivalent-
Push message-
Request
Request objectRequiredType
awayYesbool
REQUEST
{
  "action": "set_away_status",
  "payload": {
    "away": true
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "set_away_status",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Change Push Notifications

Change the firebase push notifications properties.

Specifics
Actionchange_push_notifications
Required scopes-
Web API equivalent-
Push message-
Request
ParameterRequiredData typeNotes
firebase_tokenYesstringFirebase device token
platformYesstringOS platform; possible values: ios, android
enabledYesboolEnable or disable push notifications for the requested token
REQUEST
{
  "action": "change_push_notifications",
  "payload": {
    "firebase_token": "8daDAD9dada8ja1JADA11",
    "platform": "ios",
    "enabled": true
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "change_push_notifications",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Update Agent

Updates Agent's properties.

Specifics
Actionupdate_agent
Required scopesagents--my:rw agents--all:rw
Web API equivalentupdate_agent
Push messageagent_updated
Request
ParameterRequiredData typeNotes
agent_idNostringThe current Agent is used by default.
routing_statusNostringPossible values: accepting_chats, not_accepting_chats
REQUEST
{
  "action": "update_agent",
  "payload": {
    "agent_id": "user@gmail.com",
    "routing_status": "accepting_chats"
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "update_agent",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Logout

Logs the Agent out.

Specifics
Actionlogout
Required scopes-
Web API equivalent-
Push message-
REQUEST
{
  "action": "logout",
  "payload": {}
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "logout",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Other

Mark Events as Seen

Specifics
Actionmark_events_as_seen
Required scopeschats--access:ro chats--all:ro
Web API equivalentmark_events_as_seen
Push messagelast_seen_timestamp_updated
Request
ParameterRequiredData type
chat_idYesstring
seen_up_toYesUTC string
Response

No response payload (200 OK).

REQUEST
{
  "action": "mark_events_as_seen",
  "payload": {
    "chat_id": "PJ0MRSHTDG",
    "seen_up_to": "2017-10-12T15:19:21.010200Z"
  }
}

Send Typing Indicator

Specifics
Actionsend_typing_indicator
Required scopeschats.conversation--all:rw chats.conversation--access:rw chats.conversation--my:rw
Web API equivalentsend_typing_indicator
Push message-
Request
ParameterRequiredData typeNotes
chat_idYesstringId of the chat you want to send the typing indicator to.
recipientsNostringall (default), agents
is_typingYesbool
REQUEST
{
  "action": "send_typing_indicator",
  "payload": {
    "chat_id": "PJ0MRSHTDG",
    "is_typing": true
  }
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "send_typing_indicator",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Multicast

This method serves for the chat-unrelated communication. Messages sent using multicast are not being saved.

For example, it could be used in an app that sends notifications to Agents or Customers, when a certain condition is met (e.g. an important Customer started the chat).

Specifics
Actionmulticast
Required scopesmulticast:rw
Web API equivalentmulticast
Push messageincoming_multicast
Request
ParameterRequiredData typeNotes
scopesYesobject*
contentYesanyA JSON message to be sent
typeNostringMulticast message type

*) scopes can take the following values:

  • agents:

    • all (bool - includes all agents)
    • ids ([]string - an array of agents' IDs)
    • groups ([]string - an array of groups' IDs)
  • customers:

    • ids ([]string - an array of customer's IDs)

At least one scopes type (agents.all, agents.ids, agents.groups, customers.ids) is required.

REQUEST
{
	"action": "multicast",
	"payload": {
		"scopes": {
            "agents": {
                "all": true,
                "ids": [
                    "agent1@example.com",
                    "agent2@example.com"
                ],
                "groups": [
                    1,
                    2
                ]
            },
            "customers": {
                "ids": [
                    "b7eff798-f8df-4364-8059-649c35c9ed0c"
                ]
            }
        },
        "content": {
            "example": {
                "nested": "json"
				}
			}
		}
	}
}
Response
{
  "request_id": "<request_id>", // optional
  "action": "multicast",
  "type": "response",
  "success": true,
  "payload": {
    // no response payload
  }
}

Pushes

Pushes are server - client methods used for keeping the application state up-to-date. They are available only in the websocket transport. The Agent Chat Web API uses webhooks. The majority of pushes have their webhook equivalents.

The general push format
{
  "request_id": "<request_id>", // optional, applies only to the requester
  "action": "<action>",
  "type": "push",
  "payload": {
    // optional payload
  }
}

Chats

incoming_chat_thread

Sample push payload
{
  "chat": {
    "id": "PJ0MRSHTDG",
    "users": [
      // array of "User" objects
    ],
    "properties": {
      "source": {
        "type": "facebook"
      }
      // ...
    },
    "thread": {
      // "Thread" object
    }
  }
}
Specifics
Actionincoming_chat_thread
Webhook equivalentincoming_chat_thread

thread_closed

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "user_id": "b7eff798-f8df-4364-8059-649c35c9ed0c" // optional
}
Specifics
Actionthread_closed
Webhook equivalentthread_closed
Push payload
ObjectNotes
user_idMissing if a thread was closed by the router.

Chat access

access_granted

Sample push payload
{
  "resource": "chat",
  "id": "PJ0MRSHTDG",
  "access": {
    "group_ids": [1]
  }
}
Specifics
Actionaccess_granted
Webhook equivalentaccess_granted
Push payload
ObjectNotes
resourceResource type
idResource id

access_revoked

Sample push payload
{
  "resource": "chat",
  "id": "PJ0MRSHTDG",
  "access": {
    "group_ids": [1]
  }
}
Specifics
Actionaccess_revoked
Webhook equivalentaccess_revoked
Push payload
ObjectNotes
resourceResource type
idResource Id

access_set

Sample push payload
{
  "resource": "chat",
  "id": "PJ0MRSHTDG",
  "access": {
    "group_ids": [1]
  }
}
Specifics
Actionaccess_set
Webhook equivalentaccess_set
Push payload
ObjectNotes
resourceResource type
idResource Id

chat_transferred

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "requester_id": "cb531744-e6a4-4ded-b3eb-b3eb4ded4ded",
  "type": "agent",
  "ids": ["agent1@example.com"]
}
Specifics
Actionchat_transferred
Webhook equivalent-
Push payload
ObjectNotes
typeagent or group
idsgroup or agent IDs array

Chat users

chat_user_added

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "user": {
    // "User > Customer" or "User > Agent" object
  },
  "user_type": "agent"
}
Specifics
Actionchat_user_added
Webhook equivalentchat_user_added
Push payload
ObjectNotes
user_typePossible values: agent, customer

chat_user_removed

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "user_id": "agent1@example.com",
  "user_type": "agent"
}
Specifics
Actionchat_user_removed
Webhook equivalentchat_user_removed
Push payload
ObjectNotes
user_typePossible values: agent, customer

Events

incoming_event

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "event": {
    // "Event" object
  }
}
Specifics
Actionincoming_event
Webhook equivalentincoming_event

event_updated

Sample push payload
{
  "chat_id": "123-123-123-123",
  "thread_id": "E2WDHA8A",
  "event": {
    // "Event" object
  }
}
Specifics
Actionevent_updated
Webhook equivalentevent_updated

incoming_rich_message_postback

Sample push payload
{
  "user_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "event_id": "a0c22fdd-fb71-40b5-bfc6-a8a0bc3117f7",
  "postback": {
    "id": "action_yes",
    "toggled": true
  }
}
Specifics
Actionincoming_rich_message_postback
Webhook equivalentincoming_rich_message_postback

Properties

chat_properties_updated

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "properties": {
    "rating": {
      "score": {
        "value": 1
      },
      "comment": {
        "value": "Very good, veeeery good"
      }
    }
    // ...
  }
}
Specifics
Actionchat_properties_updated
Webhook equivalentchat_properties_updated
Push payload
ObjectNotes
propertiesThis is not a full properties object. This push shows only the properties that have been recently updated.

chat_properties_deleted

Sample push payload
{
	"chat_id": "PJ0MRSHTDG",
	"properties": {
		"rating": ["score", "comment"]
		},
		// ...
	}
}
Specifics
Actionchat_properties_deleted
Webhook equivalentchat_properties_deleted
Push payload
ObjectNotes
propertiesThis is not a full properties object. This push shows only the properties that have been recently updated.

chat_thread_properties_updated

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "properties": {
    "rating": {
      "value": {
        "value": 1
      },
      "comment": {
        "value": "Very good, veeeery good"
      }
    }
    // ...
  }
}
Specifics
Actionchat_thread_properties_updated
Webhook equivalentchat_thread_properties_updated
Push payload
ObjectNotes
propertiesThis is not a full properties object. This push shows only the properties that have been recently updated.

chat_thread_properties_deleted

Sample push payload
{
	"chat_id": "PJ0MRSHTDG",
	"thread_id": "K600PKZON8",
	"properties": {
		"rating": ["score", "comment"]
		},
		// ...
	}
}
Specifics
Actionchat_thread_properties_deleted
Webhook equivalentchat_thread_properties_deleted
Push payload
ObjectNotes
propertiesThis is not a full properties object. This push shows only the properties that have been recently updated.

event_properties_updated

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "event_id": "2_E2WDHA8A",
  "properties": {
    "rating": {
      "comment": {
        "value": "goooood"
      }
    }
  }
}
Specifics
Actionevent_properties_updated
Webhook equivalentevent_properties_updated
Push payload
ObjectNotes
propertiesThis is not a full properties object. This push shows only the properties that have been recently updated.

event_properties_deleted

Sample push payload
{
	"chat_id": "PJ0MRSHTDG",
	"thread_id": "K600PKZON8",
	"event_id": "2_E2WDHA8A",
	"properties": {
		"rating": ["score", "comment"]
		},
		// ...
	}
}
Specifics
Actionevent_properties_deleted
Webhook equivalentevent_properties_deleted
Push payload
ObjectNotes
propertiesThis is not a full properties object. This push shows only the properties that have been recently updated.

Thread tags

chat_thread_tagged

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "tag": "bug_report"
}
Specifics
Actionchat_thread_tagged
Webhook equivalentchat_thread_tagged

chat_thread_untagged

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "tag": "bug_report"
}
Specifics
Actionchat_thread_untagged
Webhook equivalentchat_thread_untagged

Customers

customer_visit_started

Sample push payload
{
  "customer_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "visit_id": 42,
  "started_at": "2017-10-12T15:19:21.010200Z",
  "ip": "194.181.146.130",
  "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36",
  "geolocation": {
    "latitude": "51.0805",
    "longitude": "17.0211",
    "country": "Poland",
    "country_code": "PL",
    "region": "Dolnoslaskie",
    "city": "Wroclaw",
    "timezone": "Europe/Warsaw"
  }
}
Specifics
Actioncustomer_visit_started
Webhook equivalent-

customer_created

Sample push payload
{
  "customer": {
    // "User > Customer" object
  }
}
Specifics
Actioncustomer_created
Webhook equivalentcustomer_created

customer_updated

Sample push payload
{
  "id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "name": "John Doe",
  "email": "john@doe.me",
  "avatar": "https://domain.com/avatars/1.jpg",
  "type": "customer",
  "present": false,
  "banned": false,
  "fields": {
    "custom field name": "custom field value"
  }
}
Specifics
Actioncustomer_updated
Webhook equivalent-

customer_page_updated

Sample push payload
{
  "customer_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "visit_id": 42,
  "opened_at": "2017-10-12T15:19:21.010200Z",
  "url": "https://www.livechatinc.com/",
  "title": "LiveChat - Homepage",
  "referrer": "http://www.google.com/"
}
Specifics
Actioncustomer_page_updated
Webhook equivalent-

customer_banned

Sample push payload
{
  "customer_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "ban": {
    "days": 5
  }
}
Specifics
Actioncustomer_banned
Webhook equivalent-

customer_visit_ended

Sample push payload
{
  "customer_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "visit_id": 42,
  "ended_at": "2017-10-12T15:19:21.010200Z"
}
Specifics
Actioncustomer_visit_ended
Webhook equivalent-

Status

agent_updated

Sample push payload
{
  "agent_id": "agent1@example.com",
  "routing_status": "accepting_chats"
}
Specifics
Actionagent_updated
Webhook equivalent-

agent_disconnected

Sample push payload
{
  "reason": "misdirected_request",
  "data": {
    // optional
    "region": "fra"
  }
}
Specifics
Actionagent_disconnected
Webhook equivalent-
Possible reasons
TypeNotes
access_token_revokedAgent access token has been revoked.
access_token_expiredAccess token life time has elapsed.
license_expiredLicense has expired.
agent_deletedAgent account has been deleted.
agent_logged_out_remotelyAgent has been logged out remotely.
agent_disconnected_by_serverAgent has been disconnected by the server.
unsupported_versionConnecting to an unsupported version of the Agent API.
ping_timeoutNot receiving ping for some time from the Customer.
internal_errorInternal error
too_many_connectionsAgent reached the max. number of connections.
misdirected_request *Agent connected to the server in the wrong region.
product_version_changedProduct version has been changed.
license_not_foundLicense with the specified ID doesn't exist.

*) Also, misdirected_request returns the correct region value in the optional data object. With this piece of information, the client is able to figure out where it should be connected.

Other

incoming_typing_indicator

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "typing_indicator": {
    // "Typing indicator" object
  }
}
Specifics
Actionincoming_typing_indicator
Webhook equivalent-

incoming_sneak_peek

Sample push payload
{
  "chat_id": "PJ0MRSHTDG",
  "thread_id": "K600PKZON8",
  "sneak_peek": {
    // "Sneak peek" object
  }
}
Specifics
Actionincoming_sneak_peek
Webhook equivalent-

last_seen_timestamp_updated

Sample push payload
{
  "user_id": "b7eff798-f8df-4364-8059-649c35c9ed0c",
  "chat_id": "PJ0MRSHTDG",
  "timestamp": 123456789
}
Specifics
Actionlast_seen_timestamp_updated
Webhook equivalentlast_seen_timestamp_updated

incoming_multicast

Sample push payload
{
  "author_id": "agent1@example.com",
  "content": {
    "example": {
      "nested": "json"
    }
  },
  "type": "type1"
}
Specifics
Actionincoming_multicast
Webhook equivalent-
Push payload
ObjectRequired
author_idNo
contentYes
typeNo

Errors

Format of error payload
{
  "error": {
    "type": "misdirected_request",
    "message": "Wrong region",
    "data": {
      // optional
      "region": "dal"
    }
  }
}
Possible errors
TypeDefault MessageNotes
internalInternal server error
validationWrong format of request
authorizationAuthorization errorAgent is not allowed to perform the action.
authenticationAuthentication errorAn invalid or expired access token.
request_timeoutRequest timed outTimeout threshold is 15 seconds
license_expiredLicense expired
unsupported_versionUnsupported versionUnsupported protocol version.
misdirected_requestWrong regionClient's request should be performed to another region.
entity_too_largeUpload limit exceeded (10MB)Client's request is too large.
wrong_product_versionWrong product versionLicense is not LiveChat 3 (probably still LiveChat 2).
license_not_foundLicense not foundLicense with the specified ID doesn't exist.
requester_offlineRequester offlineThe method is only allowed for the logged in Agents (via RTM API).

* misdirected_request error returns also correct region in optional data object. With this information client is able to figure out where he should be connected.

Contact us

If you found a bug or a typo, you can let us know directly on GitHub. In case of any questions or feedback, don't hesitate to contact us at developers@livechatinc.com. We'll be happy to hear from you!