Introduction
The Outbound configuration API provides a complete list of API handoffs created in the Proactive Web Tool. This API allows 1) Fetching all handoffs configurations 2) Fetching all handoff configurations filtered by a specific messaging channel (SMS, WhatsApp, Apple Messages for Business, In-app, Google RCS, etc.)
This API provides outbound configuration for Proactive Messaging 2.0 service.
Getting started
Who can access this Outbound Configuration API
All Brands who use Proactive Messaging version 2.0 have access to the Outbound Configuration API service.
What are the limitations
Both endpoints are currently read only, i.e it is not possible to make configuration changes using the outbound configuration API.
OAuth 2.0 authorization
-
Either Administrator or LPA can get client_id and client_secret by clicking the show secrets on the web UI as shown below.

- The client_id and client_secret will than be used to create AppJWT. Click here to learn how to use AppJWT.
- The access_token retrieved from above AppJWT response should be used in the Request Header for Authorization.
Outbound configuration API
API for account level outbound configurations
1. Get Outbound Configuration Domain
The Outbound Configuration API is deployed in all regions. Use the Domain API to identify the domain for an account with outboundConfiguration as Service Name.
2. Account - Get outbound configuration for the given account
Click Account to go through API spec to get started.
| Method | URI |
|---|---|
| GET | https://{domain}/api/account/{id}/app/{appName}/handoffs/list?v=1 |
Path parameters
| Name | Description | Required | Value/Example |
|---|---|---|---|
| domain | domain | Yes | Domain from Step 1 |
| accountId | LivePerson site ID | Yes | 12345678 |
| app | App name | Yes | "prmsg" or "c2m" |
| v | Version | Yes | 1 |
Query parameters
| Name | Description | Required | Value/Example |
|---|---|---|---|
| limit | Max count of outbound configurations to fetch | No | 30 |
| offset | Starting point to fetch from | No | 0 |
Request headers
| Header | Description | Value/Example |
|---|---|---|
| Content-Type | Used to indicate the media type of the resource | application/json |
| Authorization | OAuth 2.0 or OAuth 1.0 (Section 8) or LE Bearer token |
Response examples
SMS Twilio:
SMS Twilio 200 Success:
{
"type": "sms-twilio",
"language": "en",
"outboundnumber": "+14156586515",
"messageComponents": [
{
"type": "body",
"content": "Hi $1",
"variables": ["1"],
"optOut": "To stop receiving messages, reply STOP. For help, reply HELP."
}
]
}
WhatsApp:
WhatsApp 200 Success:
{
"type": "wa",
"language": "en",
"namespace": "b8520e15_f77b_5f76_fb50_9f756d03676b",
"templatename": "newtemplate_button_cta_feb14",
"outboundnumber": "12535277322",
"messageComponents": [
{
"type": "body",
"content": "Your ticket for $1\n\nTime - $2\nVenue - $3\nSeats - $4 - $5",
"variables": [
"1",
"2",
"3",
"4",
"5"
]
}
]
}
WhatsApp rich content 200 Success:
{
"type": "wa",
"language": "en",
"namespace": "b8520e15_f77b_5f76_fb50_9f756d03676b",
"templatename": "newtemplate_button_cta_feb14",
"outboundnumber": "12535277322",
"messageComponents": [
{
"type": "body",
"content": "Your ticket for $1\n\nTime - $2\nVenue - $3\nSeats - $4 - $5",
"variables": ["1", "2", "3", "4", "5"]
},
{
"type": "footer",
"content": "Just show this QR code at the cinema"
}
]
}
The messageComponents fields can reflect the following fields depending on the template
| Header image with static url | { "type": "header", "sub_type": "image", "content": "https://upload.wikimedia.org/commons-1/c/ce/1963_Tornadoes.png", "variables": [] } |
| Header image with dynamic url that is expected to be passed in the request payload | { "type": "header", "sub_type": "image", "content": "$1", "variables": [ "1" ] } |
| Header with a static document url | { "type": "header", "sub_type": "document", "content": "https://cdn.timelab.se/cellite-1/20180626140206/1.pdf", "variables": [ "1" ] } |
| Header with a static video url | { "type": "header", "sub_type": "video", "content": "https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_640_3MG.mp4", "variables": [] } |
| Button with a static call to action value | { "type": "button", "index": 0, "content": "Call", "sub_type": "phone_number", "phone_number": "+12062061111" } |
| Button with a dynamic call to action value that is expected to be passed in the request payload | { "type": "button", "index": 1, "content": "Link", "sub_type": "url", "url": "https://www.google.com/1", "variables": [ "1" ] } |
| Button with a static value for quick reply | { [ { "type": "button", "index": 0, "content": "Yes", "sub_type": "quick_reply" }, { "type": "button", "index": 1, "content": "No", "sub_type": "quick_reply" } ] } |
In-app:
In-app 200 response:
[
{
"type": "inapp",
"appNames": ["com.liveperson.sdksample"],
"language": "en",
"messageComponents": [
{
"type": "text",
"messageText": "$3",
"notificationTitle": "we $1",
"notificationMessage": "wsdc $2",
"isSameMessageForNotification": true,
"variables": ["1", "2", "3"]
},
{
"url": "$4",
"type": "image",
"isClickable": true,
"destinationUrl": "https://www.liveperson.com",
"Variables": ["4"]
}
]
}
]
Google RCS:
Note: The
agentIdfield identifies the provisioned Google RCS agent for a channel. Unlike other channels, Google RCS responses do not include anoutboundnumberfield - Google RCS agents send from a registered agent identity (agentId), not a phone number.
Google RCS 200 response — text only:
{
"type": "googlercs",
"language": "en",
"messageComponents": [
{
"type": "body",
"content": "This is example $1",
"variables": ["1"]
}
],
"agentId": "c2m-7453907-grcs"
}
Google RCS channel object with text suggestions:
{
"type": "googlercs",
"language": "en",
"messageComponents": [
{
// Text
"type": "body",
"content": "This is example $1",
"variables": ["1"]
},
{
// Dial action
"type": "button",
"index": 0,
"content": "Call us",
"sub_type": "phone_number",
"phone_number": "+12062061111"
},
{
// URL action
"type": "button",
"index": 1,
"content": "Support FAQ",
"sub_type": "url",
"url": "https://www.freedommobile.ca/"
},
{
// View location action
"type": "button",
"index": 2,
"content": "View Location",
"sub_type": "view_location",
"latitude": 37.7749,
"longitude": -122.4194,
"location_label": "San Francisco"
},
{
// Share location action
"type": "button",
"index": 3,
"content": "Share Location",
"sub_type": "share_location"
},
{
// Create calendar event action
"type": "button",
"index": 4,
"content": "Add to Calendar",
"sub_type": "create_calendar_event",
"calendar_title": "Team Meeting",
"calendar_description": "Weekly sync",
"calendar_start_time": "2026-06-15T09:00:00Z",
"calendar_end_time": "2026-06-15T10:00:00Z"
}
],
"agentId": "c2m-7453907-grcs"
}
Google RCS channel object with media:
{
"type": "googlercs",
"language": "en",
"messageComponents": [
{
"type": "media",
"content": "https://upload.wikimedia.org/wikipedia/commons/c/ce/1963_Tornadoes.png",
"variables": []
}
],
"agentId": "c2m-7452227-grcs"
}
Google RCS channel object with rich card (standalone):
{
"type": "googlercs",
"language": "en",
"messageComponents": [
// Quick reply object
{
"type": "button",
"index": 0,
"content": "I need help",
"sub_type": "quick_reply"
},
{
"type": "button",
"index": 1,
"content": "Support FAQ",
"sub_type": "url",
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5d/Log_Pod_Mangrtom_und_Rombon_10032015_0593.jpg/1920px-Log_Pod_Mangrtom_und_Rombon_10032015_0593.jpg"
},
// Media object (title/thumbnailImageAlignment come from the standalone card)
{
"type": "media",
"height": "MEDIUM",
"thumbnailImageAlignment": "RIGHT",
"content": "$3",
"variables": ["3"]
},
// Body object — always the last component, holds card title + description
{
"type": "body",
"title": "Thank you for using Freedom Mobile's Rich Messaging Service $1.",
"content": "You can now message us while you are on the go! Let us know how we can help you today and remember not to proactively provide confidential information i.e. credit card or account information. $2",
"variables": ["1", "2"]
}
],
"cardOrientation": "VERTICAL",
"agentId": "c2m-7453907-grcs"
}
Google RCS channel object with carousel card. Every component belonging to a card carries a cardIndex (0-based) identifying which card it's part of; there is no top-level cardOrientation or cardWidth on carousel responses:
{
"type": "googlercs",
"language": "en",
"messageComponents": [
// Card 0 — quick reply suggestion
{
"type": "button",
"cardIndex": 0,
"index": 0,
"content": "Option A",
"sub_type": "quick_reply"
},
// Card 0 — media
{
"type": "media",
"cardIndex": 0,
"height": "MEDIUM",
"content": "https://cdn.example.com/card1.jpg",
"variables": []
},
// Card 0 — body (title + description)
{
"type": "body",
"cardIndex": 0,
"title": "Card 1 $1",
"content": "Description 1",
"variables": ["1"]
},
// Card 1 — URL action suggestion
{
"type": "button",
"cardIndex": 1,
"index": 0,
"content": "Visit",
"sub_type": "url",
"url": "https://www.example.com/"
},
// Card 1 — media
{
"type": "media",
"cardIndex": 1,
"height": "MEDIUM",
"content": "$3",
"variables": ["3"]
},
// Card 1 — body (title + description)
{
"type": "body",
"cardIndex": 1,
"title": "Card 2",
"content": "Description 2 $2",
"variables": ["2"]
}
],
"agentId": "c2m-grcs"
}
2. Account - Get outbound configuration by channel
Click Account to go through API spec to get started.
| Method | URI |
|---|---|
| GET | https://{domain}/api/account/{id}/app/{appName}/handoffs/list/channel /{channelName}?v=1 |
Path parameters
| Name | Description | Required | Value/Example |
|---|---|---|---|
| domain | domain | Yes | Domain from Step 1 |
| accountId | LivePerson site ID | Yes | 12345678 |
| app | App name | Yes | "prmsg" or "c2m" |
| channel | The messaging channel name | Yes | wa, sms-twilio, apple-twilio, googlercs, inapp |
| v | Version | Yes | v=1 |
Query parameters
| Name | Description | Required | Value/Example |
|---|---|---|---|
| limit | Max count of outbound configurations to fetch | No | 30 |
| offset | Starting point to fetch froms | No | 0 |
Request headers
| Header | Description | Value/Example |
|---|---|---|
| Content-Type | Used to indicate the media type of the resource | application/json |
| Authorization | OAuth 2.0 or OAuth 1.0 (Section 8) or LE Bearer token |
Response example
Outbound configuration 200 response:
[
{
"type": "sms-twilio",
"language": "en",
"outboundnumber": "+13333333333",
"messageComponents": [
{
"type": "body",
"content": "Hi this is an outbound message #1",
"variables": ["1"],
"optOut": "To stop receiving messages, reply STOP. For help, reply HELP."
}
]
},
{
"type": "sms-twilio",
"language": "en",
"outboundnumber": "+142222222222",
"messageComponents": [
{
"type": "body",
"content": "Hi this is an outbound message #1",
"variables": ["1", "2"],
"optOut": "To stop receiving messages, reply STOP. For help, reply HELP."
}
]
},
{
"type": "sms-twilio",
"language": "en",
"outboundnumber": "+1433333333333",
"messageComponents": [
{
"type": "body",
"content": "Hi this is an outbound message #3",
"variables": ["1"],
"optOut": "To stop receiving messages, reply STOP. For help, reply HELP."
}
]
}
]
Data fields definitions
Outbound Reporting API provides the following data fields. This table explains the definition of each field.
| Data field | Definition |
|---|---|
id |
The outbound configuration profile id |
name |
The name of the outbound configuration template |
lookbackPeriodDay |
A numeric value representing the skill lookback back period in days, example: 30min value: 0 Max value: 30 |
lookbackPeriodHour |
A numeric value representing the lookback back period in hours, example: 0 min value:0 Max value: 23 |
routeAllWithinLookback |
A flag that indicates whether or not to route reopened conversations within the lookback period |
updatedAt |
Shows last updated time in utc |
createdAt |
Shows the configuration created time in utc |
channels |
An array of channels and their respective configuration. For example: type (name of the messaging channel): “wa”: whats app “sms-twilio”: standard text message “apple-twilio”: apple messages for business “googlercs” google rich content “inapp”: LivePerson consumer application appName: (in app channel only) the associated SDK data source. outboundnumber: the “From” number of the sent message language: the associated language for the channel namespace: for whats app only indicated the template namespace |
messageComponents |
_ type _ sub_type _ content _ variables _ optOut _ index _ phone_number _ height _ thumbnailImageAlignment _ cardOrientation * cardIndex |
type |
header,body,button,media (grcs only), footer |
sub_type |
For example: Type : “header” sub_type: “image” |
content |
The string (including variables placeholder) For example: “This is a text with a var $1 |
variables |
If the template contains variables it will be reflected here by numbers, for example a configuration for a template with a single var will look like this: “variables: [“1”, “2”, “3”] |
optOut |
The opt out text that will be sent to the consumer |
Index |
For button type only, indicates the order of the button starting from 0, For example 1st out of 2 buttons will be indicated as => index: 0 url: the link attached to the button |
phone_number |
For button type only For example: “phone_number”: “+14xxxxx5674” |
The following attributes are for Google RCS only.
| Attribute | Description |
|---|---|
type |
media |
height |
String representing the media height parameters (SHORT, MEDIUM, or TALL); required unless the card is HORIZONTAL
|
thumbnailImageAlignment |
The image preview alignment (LEFT or RIGHT) for standalone cards with horizontal layout |
cardOrientation |
Indicates the content display orientation for a standalone rich card, for example: “VERTICAL”. This is a top-level field on the channel object, not on an individual component. Not present for carousel cards. |
cardIndex |
For carousel cards only. Identifies which card (0-based) a button, media, or body component belongs to. Not present for standalone cards. |
agentId |
The provisioned Google RCS agent for the channel. Top-level field. Google RCS responses do not include an outboundnumber field. |