API version

Configuration API

Introduction

Configuration API is a service for storing configuration of license. You can set up here different types of features such as properties or webhooks.

Versioning

This document describes the Configuration API v3.1. This is the legacy version. We encourage you to migrate to the latest stable version. Read more about versioning...

Authentication

Authentication for Configuration API is handled by access tokens. Find out how to get an access token from Agent authorization flows. If a method requires particular authorization scopes, you’ll find them included in the method description. Each request should contain the Authorization: Bearer <your_access_token> header.

Data centers

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

All the LiveChat OAuth2.0 access tokens have a prefix: dal- or fra-. This prefix indicates the data center they belong to. If you need to specify the data center while making an API call, simply add the X-Region: <token_prefix> optional header.

Summing up, if the user token starts with fra-, you should add the X-Region: fra header. If the token starts with dal-, you don’t have to specify the header.

Propagation delay

All configurations set by this API will have action in system after max 2 minutes. This delay will be removed in the future.

Postman Collection

You can find all the requests from the Configuration API v3.1 in Postman. In our collection, we use environment variables for the API version and the access token. Importing the collection from the link below downloads the LiveChat Web API environment as well. Remember to replace the sample token with your own.

Run in Postman

Bot Agents

Bot Agents enables writing integrations using the Agent Chat API - both RTM and Web - to communicate in chats as regular Agents. A Bot Agent shares the SSO access token with the Agent who created the Bot. Each Bot Agent is a resource owned by an application in Developers Platform, identified by its own client_id.

Unlike Agents, Bot Agents don't have passwords or emails - you cannot log in as a Bot.

Methods

HTTP methodThe Bot Agents API endpoint
POSThttps://api.livechatinc.com/v3.1/configuration/action/<action>
Required headerValue
Content-Typeapplication/json

Create Bot Agent

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/create_bot_agent
Required scopesagents-bot--my:rw
Request
ParameterTypeRequiredNotes
namestringYesDisplay name
status *stringYesAgent status
avatarstringNoAvatar URL
max_chats_countintNoMax. number of incoming chats that can be routed to an Agent; default: 6. Limited to 500.
default_group_priority ***stringNoThe default routing priority for a group without defined priority.
groupsobject[]NoGroups an Agent belongs to.
groups[].iduintYesGroup ID; required only when group's included.
groups[].priority **stringYesAgent's priority in a group; required only when group's included.
webhooksobjectNoWebhooks sent to the Agent; for more info on possible values and payload, see Webhooks. Webhooks work only for online Bots.
webhooks.urlstringYesDestination URL for webhooks; required only when webhooks is included.
webhooks.secret_keystringYesSecret sent in webhooks to verify webhook's source; required only when webhooks's included.
webhooks.actionsobject[]YesTriggering actions; required only when webhooks's included.
webhooks.actions[].namestringYesThe name of the triggering action; required only when webhooks is included.
webhooks.actions[].filtersobjectNoFilters to check if a webhook should be triggered. For more info on filters, see Register webhook.
webhooks.actions[].additional_datastring[]NoAdditional data that will arrive with webhooks.

* The table below presents the possible values for the status parameter:

Possible valueNotes
accepting chatsAgent is logged in. The chat router routes incoming chats to the Agent.
not accepting chatsAgent is logged in, but the chat router doesn't route incoming chats to the Agent.
offlineAgent isn't logged in.

** The table below presents the possible values for the groups[].priority parameter:

Possible valueNotes
firstThe highest chat routing priority. Agents with the first priority get chats before others from the same group, e.g. Bots can get chats before regular Agents.
normalThe medium chat routing priority. Agents with the normal priority get chats before those with the last priority, when there are no Agents with the first priority available with free slots in the group.
lastThe lowest chat routing priority. Agents with the last priority get chats when there are no Agents with the first or normal priority available with free slots in the group.
supervisorAgents with the supervisor priority will not get any chats assigned automatically.

*** The table below presents the possible values for the default_group_priority parameter:

Possible valuesNotes
firstThe highest chat routing priority. Agents with the first priority get chats before others from the same group, e.g. Bots can get chats before regular Agents.
normalThe medium chat routing priority. Agents with the normal priority get chats before those with the last priority, when there are no Agents with the first priority available with free slots in the group.
lastThe lowest chat routing priority. Agents with the last priority get chats when there are no Agents with the first or normal priority available with free slots in the group.
supervisorAgents with the supervisor priority will not get any chats assigned automatically.
REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/create_bot_agent \
  -H 'Authorization: Bearer <your_access_token>' \
  -H 'Content-Type: application/json' \
  -d '{
      "name": "Bot Name",
      "status": "accepting chats"
      }'
Response
Copied!
{
    "bot_agent_id": "5c9871d5372c824cbf22d860a707a578"
}

Remove Bot Agent

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/remove_bot_agent
Required scopesagents-bot--my:rw agents-bot--all:rw
Request
ParameterRequiredTypeNotes
bot_agent_idYesstringBot Agent ID
Response

No response payload (200 OK).

REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/remove_bot_agent \
  -H 'Authorization: Bearer <your_access_token>' \
  -H 'Content-Type: application/json' \
  -d '{
      "bot_agent_id": "505591fc9fc2d6e92798bed7d9d8f079"
      }'

Update Bot Agent

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/update_bot_agent
Required scopesagents-bot--my:rw
Request
ParameterRequiredData typeNotes
idYesstringBot Agent ID
nameNostringDisplay name
avatarNostringAvatar URL
status *NostringAgent status
max_chats_countNointMaximum incoming chats that can be routed to an Agent. Limited to 500.
groupsNoobject[]Groups an Agent belongs to
groups[].idYesuintGroup ID, required only when groups's present.
groups[].priority **YesstringAgent's priority in the group; required only when groups is included.
default_group_priority ***NostringThe default routing priority for a group without defined priority.
webhooksNoobjectWebhooks sent to an Agent. Webhooks work only for online Bots.
webhooks.urlYesstringDestination URL for webhooks; required only when webhooks is present.
webhooks.secret_keyYesstringSecret sent in webhooks to verify the webhook's source; required when webhooks is included.
webhooks.actionsYesobject[]Triggering actions; required only when webhooks is included.
webhooks.actions[].nameYesstringThe name of the triggering action; required only when webhooks is included.
webhooks.actions[].filtersNoobjectFilters to check if a webhook should be triggered. For more info on filters, see Register webhook.
webhooks.actions[].additional_dataNostring[]Additional data arriving with the webhook.

* The table below presents the possible values for the status parameter:

Possible valuesNotes
accepting chatsAgent is logged in. The chat router routes incoming chats to the Agent.
not accepting chatsAgent is logged in, but the chat router doesn't route incoming chats to the Agent.
offlineAgent isn't logged in.

** The table below presents the possible values for the groups[].priority parameter:

Possible valuesNotes:
firstThe highest chat routing priority. Agents with the first priority get chats before others from the same group, e.g. Bots can get chats before regular Agents.
normalThe medium chat routing priority. Agents with the normal priority get chats before those with the last priority, when there are no Agents with the first priority available with free slots in the group.
lastThe lowest chat routing priority. Agents with the last priority get chats when there are no Agents with the first or normal priority available with free slots in the group.
supervisorAgents with the supervisor priority will not get any chats assigned automatically.

*** The table below presents the possible values for the default_group_priority parameter:

Possible valuesNotes
firstThe highest chat routing priority. Agents with the first priority get chats before others from the same group, e.g. Bots can get chats before regular Agents.
normalThe medium chat routing priority. Agents with the normal priority get chats before those with the last priority, when there are no Agents with the first priority available with free slots in the group.
lastThe lowest chat routing priority. Agents with the last priority get chats when there are no Agents with the first or normal priority available with free slots in the group.
supervisorBot works as supervisor so it will not be assigned to any chats.
Response

No response payload (200 OK).

REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/update_bot_agent \
  -H 'Authorization: Bearer <your_access_token>' \
  -H 'Content-Type: application/json' \
  -d '{
      "id": "ce54714e3d2b53adbfff09dbdbdd56e9",
      "name": "New Bot Name"
      }'

Get Bot Agents

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/get_bot_agents
Required scopesagents-bot--my:ro agents-bot--all:ro
Request
ParameterRequiredTypeNotes
allNoboolGet all Bot Agents, if false returns only caller's Bot Agents, default value is false
REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/get_bot_agents \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_access_token>' \
  -d '{
        "all": false
        }'
Response
Copied!
{
    "bot_agents": [{
        "id": "5c9871d5372c824cbf22d860a707a578",
        "name": "John Doe",
        "avatar": "https://example.com/avatar.jpg",
        "status": "accepting chats"
    }]
}

Get Bot Agent Details

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/get_bot_agent_details
Required scopesagents-bot--my:ro agents-bot--all:ro
Request
ParameterRequiredTypeNotes
bot_agent_idYesstringBot Agent ID
REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/get_bot_agent_details \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_access_token>' \
  -d '{
        "bot_agent_id": "5c9871d5372c824cbf22d860a707a578"
        }'
Response
Copied!
{
    "bot_agent": {
        "id": "5c9871d5372c824cbf22d860a707a578",
        "name": "John Doe",
        "avatar": "https://example.com/avatar.jpg",
        "status": "accepting chats",
        "application": {
            "client_id": "asXdesldiAJSq9padj"
        },
        "max_chats_count": 6,
        "groups": [{
            "id": 0,
            "priority": "normal"
        }, {
            "id": 1,
            "priority": "normal"
        }, {
            "id": 2,
            "priority": "first"
        }],
        "webhooks": {
            "url": "http://myservice.com/webhooks",
            "secret_key": "JSauw0Aks8l-asAa",
            "actions": [{
                "name": "incoming_chat_thread",
                "filters": {
                  "chat_properties": {
                     "source": {
                        "type": {
                           "values": ["facebook", "twitter"]
                        }
                      }
                  }
                }
            },{
                "name": "incoming_event",
                "additional_data": ["chat_properties"]
            }]
        }
    }
}

Properties

Properties are key-value storages. They can be set within a chat, a thread, or an event.

You can create properties within a license and configure them using the Configuration API. Properties are grouped in namespaces, which helps distinguishing which property belongs to a given integration. Your namespace is always named after your Client Id.

You can configure the property type, location, and domain.

Property types

There are four property types:

  • int (int32)
  • bool
  • string
  • tokenized_string

The tokenized_string type is a string split to tokens before indexing in our search engine. It can be useful for longer strings, such as messages. It should not be used for keywords.

Property locations

Properties can be set for the following locations:

  • chat
  • thread
  • event

You can configure access to properties within those locations. For example, you could create a property visible only to agents in a chat and thread, but not in an event.

Property domain

The property domain is a set of values that a property can be assigned to.

Property domain can be configured in two ways:

  • by defining a set of values explicitly allowed in this property (for example [1, 2, 3]).
  • by defining a range. All values within the range are allowed in this property. It works only for numeric types (for example a range from 1 to 3).

Test properties

Each license has some test properties that you can use to play with properties.

NamespacePropertyTypeAccess
testbool_propertyboolrw for everyone everywhere
testint_propertyintrw for everyone everywhere
teststring_propertystringrw for everyone everywhere
testtokenized_string_propertytokenized_stringrw for everyone everywhere

The tokenized_string property is similar to the string type. The values of a tokenized_string are split in tokens to enable searching for each word separately.

The general properties format
Copied!
{
    "properties": {
        "<namespace>": {    
            "<property_name>": "<property_value>",    
            "<property_name>": "<property_value>"      
        }
    }
}

Methods

HTTP methodThe Properties API endpoint
POSThttps://api.livechatinc.com/v3.1/configuration/action/<action>
Required headerValue
Content-Typeapplication/json

Create Properties

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/create_properties
Required scopesproperties--my:rw(to create my properties in my namespace)
Request
ParameterRequiredData typeNotes
<property_name>.typeYesstringPossible values: int, string, bool, and tokenized_string
<property_name>.locationsYesobject
<property_name>.locations.<location>min. one locationobjectPossible values: chat, thread, event
<property_name>.locations.<location>.access.<user>min. one userobjectPossible values: agent, customer
<property_name>.locations.<location>.access.<user>.readYesboolIf set to true, then <user> can read this property.
<property_name>.locations.<location>.access.<user>.writeYesboolIf set to true, then <user> can write to this property.
<property_name>.descriptionNostringProperty description
<property_name>.domain *No[<type>]Array of values that properties can be set to.
<property_name>.range *NoobjectRange of values that properties can be set to.
<property_name>.range.fromNointOnly values equal or greater than this parameter can be set to this property.
<property_name>.range.toNointOnly values equal or lower than this parameter can be set to this property.

*) Only one domain and one range can be set for a single property.

Response

No response payload (200 OK).

REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/create_properties \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_access_token>' \
  -d '{
    "score": {
        "type": "int",
        "locations": {
            "chat": {
                "access": {
                    "agent": {
                        "read": true,
                        "write": true
                    },
                    "customer": {
                        "read": true,
                        "write": true
                    }
                }
            }
        }
    },
    "comment": {
        "type": "string",
        "locations": {
            "chat": {
                "access": {
                    "agent": {
                        "read": true,
                        "write": true
                    },
                    "customer": {
                        "read": true,
                        "write": true
                    }
                }
            }
        }
    }
}'

Get Property Configs

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/get_property_configs
Required scopesproperties--my:ro properties--all:ro (to create properties in all namespaces)
Request
ParameterRequiredData typeNotes
allNoboolIf set to true, it returns all properties within a given license; default: false.
REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/get_property_configs \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_access_token>' \
  -d '{}'
Response
Copied!
{
    "58737b5829e65621a45d598aa6f2ed8e":{
    "greeting":{
    "type":"string",
    "locations":{
      "chat":{
        "access":{
          "agent":{
            "read":true,
            "write":false
          },
          "customer":{
            "read":true,
            "write":true
          }
        }
      }
    },
    "domain": ["hello", "hi"]
  },
  "scoring":{
    "type":"int",
    "locations":{
      "event":{
        "access":{
          "agent":{
            "read":true,
            "write":true
          }
        }
      }
    },
    "range": {
      "from": 0,
      "to": 10
    }

        }
    }
}

Webhooks

Here's what you need to know about webhooks:

  • Webhooks notify you when specific events occur.
  • They can be generated by both Web and RTM API actions.
  • To receive webhooks, you need to register them first.

When your server receives a webhook from LiveChat, it should respond with HTTP 200 response. Otherwise, LiveChat will retry sending the webhook to your service a number of times until it receives the correct HTTP 200 response.

The timeout is set to ~10 seconds. If we don't receive HTTP 200 response within that time period, we'll retry sending the webhook up to 10 times within 6 hours.

general webhook format
Copied!
{
  "webhook_id": "<webhook_id>",
  "secret_key": "<secret_key>",
  "action": "<action>",
  "payload": {
    },
  "additional_data": {
    "chat_properties": { //optional
        // chat properties
    }
  }
}

Methods

HTTP methodThe Webhooks API endpoint
POSThttps://api.livechatinc.com/v3.1/configuration/action/<action>
Required headerValue
Content-Typeapplication/json

Register Webhook

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/register_webhook
Required scopeswebhooks--my:rw
ParameterRequiredData typeNotes
action*YesstringThe action that triggers sending a webhook.
secret_keyYesstringThe secret key sent in webhooks to verify the source of a webhook.
urlYesstringDestination URL for the webhook
additional_data**No[]stringAdditional data that will arrive with the webhook.
descriptionNostringWebhook description
filtersNoobjectFilters to check if a webhook should be triggered.
filters.author_typeNostringPossible values: customer, agent; allowed only for incoming_event and event_updated actions.
filters.only_my_chatsNobooltrue or false; triggers webhooks only for chats with the property source.client_id set to my client_id.
filters.chat_member_idsNoobjectOnly one filter (agents_any or agents_exclude) is allowed.
filters.chat_member_ids.agents_anyNo[]stringArray of Agents' ids; if any specified Agent is in the chat, the webhook will be triggered.
filters.chat_member_ids.agents_excludeNo[]stringArray of Agents' ids; If any specified Agent is in the chat, the webhook will not be triggered.
Triggering actions

* The table below presents the possible values for the action parameter.

Possible actionInforms aboutAvailable filters
incoming_chat_threadincoming_chat_threadchat_member_ids, only_my_chats
incoming_eventincoming_eventchat_member_ids, author_type, only_my_chats
event_updatedevent_updatedchat_member_ids, author_type, only_my_chats
incoming_rich_message_postbackincoming_rich_message_postbackchat_member_ids, only_my_chats
last_seen_timestamp_updatedlast_seen_timestamp_updatedchat_member_ids, only_my_chats
thread_closedthread_closedchat_member_ids, only_my_chats
chat_properties_updatedchat_properties_updatedchat_member_ids, only_my_chats
chat_properties_deletedchat_properties_deletedchat_member_ids, only_my_chats
chat_thread_properties_updatedchat_thread_properties_updatedchat_member_ids, only_my_chats
chat_thread_properties_deletedchat_thread_properties_deletedchat_member_ids, only_my_chats
chat_user_addedchat_user_addedchat_member_ids, only_my_chats
chat_user_removedchat_user_removedchat_member_ids, only_my_chats
chat_thread_taggedchat_thread_taggedchat_member_ids, only_my_chats
chat_thread_untaggedchat_thread_untaggedchat_member_ids, only_my_chats
agent_status_changedagent_updatedchat_member_ids
agent_deletedAn Agent's account being deleted from the licenseagent_ids

* The table below presents the possible values for the additional_data parameter:

Possible valueAvailable for actions
accessincoming_event, chat_user_added
chat_propertiesAll actions, except for agent_status_changed and agent_deleted
thread_idchat_user_added
REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/register_webhook \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_access_token>' \
  -d '{
        "url": "http://myservice.com/webhooks",
        "description": "Test webhook",
        "action": "thread_closed",
        "secret_key": "laudla991lamda0pnoaa0"  
        }'
Response
Copied!
{
  "webhook_id": "pqi8oasdjahuakndw9nsad9na"
}

Get Webhooks Config

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/get_webhooks_config
Required scopeswebhooks--my:ro webhooks--all:ro
REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/get_webhooks_config \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_access_token>' \
  -d '{}'
Response
Copied!
[
    {
      "webhook_id": "pqi8oasdjahuakndw9nsad9na",
      "url": "http://myservice.com/webhooks",
      "description": "Test webhook",
      "action": "thread_closed",
      "filters": {
        "chat_member_ids": {
          "agents_any": ["johndoe@mail.com"]
        }
      },
      "owner_client_id": "asXdesldiAJSq9padj"
    }
]

Unregister Webhook

Specifics
Method URLhttps://api.livechatinc.com/v3.1/configuration/action/unregister_webhook
Required scopeswebhooks--my:rw webhooks--all:rw
Request
ParameterRequiredData typeNotes
webhook_idYesstringWebhook ID
Response

No response payload (200 OK).

REQUEST
Copied!
curl -X POST \
  https://api.livechatinc.com/v3.1/configuration/action/unregister_webhook \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_access_token>' \
  -d '{
        "webhook_id": "pqi8oasdjahuakndw9nsad9na"
          }'

Available webhooks

To see the list of available webhooks v3.1, visit the Webhooks document.

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@livechat.com. We'll be happy to hear from you!