openapi: 3.2.0
info:
title: Sinch Messages API
version: '1.0'
description: 'Operations tagged Messages across 3 of this provider''s published API definitions: sinch-chatlayer-analytics-api-openapi.yaml, sinch-conversation-api-openapi.yaml, original-sinch-conversation-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://analytics.api.chatlayer.ai
description: Europe
- url: https://analytics.api.prod.us-east4.gcp.chatlayer.ai
description: US
- url: https://analytics.api.prod.asia-south1.gcp.chatlayer.ai
description: APAC
- url: https://analytics.api.prod.sa-east1.gcp.chatlayer.ai
description: South America
- url: https://{region}.conversation.api.sinch.com
variables:
region:
default: us
enum:
- us
- eu
- br
description: The {region} variable must be set to us, eu, or br, and it must match the region in which you created your Conversation API app.
- url: https://us.conversation.api.sinch.com
description: US Production Server
- url: https://eu.conversation.api.sinch.com
description: EU Production Server
- url: https://br.conversation.api.sinch.com
description: Brazil Production Server
tags:
- name: Messages
paths:
/v1/bots/{bot_id}/messages:
get:
tags:
- Messages
summary: Get message analytics
operationId: Analytics_GetMessages
parameters:
- name: bot_id
in: path
description: Identifies the bot.
required: true
schema:
type: string
- name: version
in: query
description: Identifies the bot version.
required: true
schema:
type: string
- name: start_time
in: query
description: The starting date for the time range of the data series.
required: true
schema:
type: string
- name: end_time
in: query
description: The ending date for the time range of the data series, exclusive.
required: true
schema:
type: string
- name: channel_type
in: query
description: Filter by specific channel.
schema:
type: string
- name: language
in: query
description: Filter by specific language.
schema:
type: string
- name: bucket
in: query
description: 'Time interval in which results will be grouped.
Supported values are 1h, 1d, 1w. The interval should be smaller
than the range specified in the [start_time,end_time).'
schema:
type: string
responses:
'200':
description: A successful response.
content:
application/json:
schema:
$ref: '#/components/schemas/GetMessagesResponse'
security:
- basicAuth: []
servers:
- url: https://analytics.api.chatlayer.ai
description: Europe
- url: https://analytics.api.prod.us-east4.gcp.chatlayer.ai
description: US
- url: https://analytics.api.prod.asia-south1.gcp.chatlayer.ai
description: APAC
- url: https://analytics.api.prod.sa-east1.gcp.chatlayer.ai
description: South America
/v1/projects/{project_id}/messages:send:
parameters:
- $ref: '#/components/parameters/project_id'
post:
description: 'You can send a message from a Conversation app to a contact associated with that app. If the recipient is not associated with an existing contact, a new contact will be created.
The message is added to the active conversation with the contact if a conversation already exists. If no active conversation exists a new one is started automatically.
You can find all of your IDs and authentication credentials on the Sinch Customer Dashboard.'
tags:
- Messages
summary: Send a message
operationId: Messages_SendMessage
requestBody:
$ref: '#/components/requestBodies/SendMessageRequest'
responses:
'200':
$ref: '#/components/responses/sendMessageResponse'
'400':
$ref: '#/components/responses/400Error'
'401':
$ref: '#/components/responses/401Error'
'403':
$ref: '#/components/responses/403Error'
'500':
$ref: '#/components/responses/500Error'
'501':
$ref: '#/components/responses/501Error'
x-codeSamples:
- lang: Java
source: "/**\n * Sinch Java Snippet\n *\n *
This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *
See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.messages;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.MessagesService;\nimport com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentities;\nimport com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentity;\nimport com.sinch.sdk.domains.conversation.models.v1.ConversationChannel;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.AppMessage;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageRequest;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponse;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class Send {\n\n private static final Logger LOGGER = Logger.getLogger(Send.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the Conversation Application to send the message from\n String conversationApplicationId = \"CONVERSATION_APPLICATION_ID\";\n // Phone number to send the SMS message to (in E.164 format, e.g. +46701234567)\n String smsRecipientPhoneNumber = \"RECIPIENT_PHONE_NUMBER\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n MessagesService messagesService = client.conversation().v1().messages();\n\n LOGGER.info(\n String.format(\n \"Send SMS message with Conversation to phone number '%s'\", smsRecipientPhoneNumber));\n\n SendMessageRequest request =\n createSMSSendMessage(conversationApplicationId, smsRecipientPhoneNumber);\n\n SendMessageResponse response = messagesService.sendTextMessage(request);\n\n LOGGER.info(\"Response: \" + response);\n }\n\n static SendMessageRequest createSMSSendMessage(\n String applicationId, String smsRecipientPhoneNumber) {\n\n SendMessageRequest.Builder builder = SendMessageRequest.builder();\n\n builder\n .setAppId(applicationId)\n .setMessage(\n AppMessage.builder()\n .setBody(\n TextMessage.builder()\n .setText(\"[Java SDK: Conversation Message] Sample text message\")\n .build())\n .build())\n .setRecipient(\n ChannelRecipientIdentities.of(\n ChannelRecipientIdentity.builder()\n .setChannel(ConversationChannel.SMS)\n .setIdentity(smsRecipientPhoneNumber)\n .build()))\n .build();\n\n return builder.build();\n }\n}\n"
- lang: Node.js
source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Conversation App to send the message from\n const appId = 'CONVERSATION_APP_ID';\n // The phone number of the recipient in E.164 format\n const recipientPhoneNumber = 'RECIPIENT_PHONE_NUMBER';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n const response = await sinch.conversation.messages.send({\n sendMessageRequestBody :{\n app_id: appId,\n message: {\n text_message: {\n text: '[Node.js SDK: Conversation Message] Sample text message',\n },\n },\n recipient: {\n identified_by: {\n channel_identities: [\n {\n channel: 'RCS',\n identity: recipientPhoneNumber,\n },\n ],\n },\n },\n },\n });\n console.log('✅ Successfully sent Message.');\n console.log(JSON.stringify(response, null, 2));\n } catch (err) {\n console.error(`❌ Failed to send Message to the phone number ${recipientPhoneNumber}:`);\n console.error(err);\n }\n}\n\nmain();\n"
- lang: Python
source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\nfrom dotenv import load_dotenv\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n conversation_region=os.environ.get(\"SINCH_CONVERSATION_REGION\") or \"MY_CONVERSATION_REGION\"\n)\n\n# The ID of the Conversation App to send the message from\napp_id = \"CONVERSATION_APP_ID\"\n# The phone number of the recipient in E.164 format (e.g. +46701234567)\nrecipient_identities = [\n {\n \"channel\": \"RCS\",\n \"identity\": \"RECIPIENT_PHONE_NUMBER\"\n }\n]\n\n# The conversation message payload to send\nmessage = {\n \"text_message\": {\n \"text\": \"[Python SDK: Conversation Message] Sample text message\",\n },\n}\n\nresponse = sinch_client.conversation.messages.send(\n app_id=app_id,\n message=message,\n recipient_identities=recipient_identities,\n)\n\nprint(f\"Successfully sent message.\\n{response}\")\n"
security:
- Basic: []
- oAuth2: []
servers:
- url: https://{region}.conversation.api.sinch.com
variables:
region:
default: us
enum:
- us
- eu
- br
description: The {region} variable must be set to us, eu, or br, and it must match the region in which you created your Conversation API app.
/v1/projects/{project_id}/messages/{message_id}:
parameters:
- $ref: '#/components/parameters/project_id'
- $ref: '#/components/parameters/message_id'
- $ref: '#/components/parameters/messages_source'
patch:
description: Update a specific message metadata by its ID. This operation is supported only in Conversation Mode.
tags:
- Messages
summary: Update message metadata
operationId: Messages_UpdateMessageMetadata
requestBody:
$ref: '#/components/requestBodies/UpdateMessageMetadataRequest'
responses:
'200':
$ref: '#/components/responses/getMessageResponse'
'400':
$ref: '#/components/responses/400Error'
'401':
$ref: '#/components/responses/401Error'
'403':
$ref: '#/components/responses/403Error'
'500':
$ref: '#/components/responses/500Error'
'501':
$ref: '#/components/responses/501Error'
x-codeSamples:
- lang: Java
source: "/**\n * Sinch Java Snippet\n *\n * This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *
See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.messages;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.MessagesService;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class Update {\n\n private static final Logger LOGGER = Logger.getLogger(Update.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the message to update\n String messageId = \"MESSAGE_ID\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n MessagesService messagesService = client.conversation().v1().messages();\n\n LOGGER.info(String.format(\"Update message with ID '%s'\", messageId));\n\n MessageUpdateRequest request =\n MessageUpdateRequest.builder()\n .setMetadata(\"metadata value set from Java SDK snippet\")\n .build();\n\n ConversationMessage response = messagesService.update(messageId, request);\n\n LOGGER.info(\"Response: \" + response);\n }\n}\n"
- lang: Node.js
source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Message to update\n const messageId = 'MESSAGE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n const response = await sinch.conversation.messages.update({\n message_id: messageId,\n updateMessageRequestBody: {\n metadata: 'Metadata value set from Node.js SDK snippet',\n },\n });\n console.log('✅ Successfully updated Message metadata.');\n console.log(JSON.stringify(response, null, 2));\n } catch (err) {\n console.error(`❌ Failed to update the Message with ID ${messageId}:`);\n console.error(err);\n }\n}\n\nmain();\n"
- lang: Python
source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\nfrom dotenv import load_dotenv\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n conversation_region=os.environ.get(\"SINCH_CONVERSATION_REGION\") or \"MY_CONVERSATION_REGION\"\n)\n\n# The ID of the message to update\nmessage_id = \"MESSAGE_ID\"\n# The metadata string to set on the message\nmetadata = \"MESSAGE_METADATA\"\n\nresponse = sinch_client.conversation.messages.update(\n message_id=message_id,\n metadata=metadata,\n)\n\nprint(f\"Updated message:\\n{response}\")\n"
security:
- Basic: []
- oAuth2: []
get:
description: Retrieves a specific message by its ID.
tags:
- Messages
summary: Get a message
operationId: Messages_GetMessage
responses:
'200':
$ref: '#/components/responses/getMessageResponse'
'400':
$ref: '#/components/responses/400Error'
'401':
$ref: '#/components/responses/401Error'
'403':
$ref: '#/components/responses/403Error'
'500':
$ref: '#/components/responses/500Error'
'501':
$ref: '#/components/responses/501Error'
x-codeSamples:
- lang: Java
source: "/**\n * Sinch Java Snippet\n *\n *
This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *
See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.messages;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.MessagesService;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class Get {\n\n private static final Logger LOGGER = Logger.getLogger(Get.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the event to retrieve\n String messageId = \"MESSAGE_ID\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n MessagesService messagesService = client.conversation().v1().messages();\n\n LOGGER.info(String.format(\"Get conversation message for message with ID '%s'\", messageId));\n\n ConversationMessage result = messagesService.get(messageId);\n\n LOGGER.info(\"Response: \" + result);\n }\n}\n"
- lang: Node.js
source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Message to retrieve\n const messageId = 'MESSAGE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n const response = await sinch.conversation.messages.get({\n message_id: messageId,\n });\n console.log('✅ Successfully retrieved the Message.');\n console.log(JSON.stringify(response, null, 2));\n } catch (err) {\n console.error(`❌ Failed to retrieve the Message with ID ${messageId}:`);\n console.error(err);\n }\n}\n\nmain();\n"
- lang: Python
source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\nfrom dotenv import load_dotenv\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n conversation_region=os.environ.get(\"SINCH_CONVERSATION_REGION\") or \"MY_CONVERSATION_REGION\"\n)\n\n# The ID of the message to retrieve\nmessage_id = \"MESSAGE_ID\"\n\nresponse = sinch_client.conversation.messages.get(message_id=message_id)\n\nprint(f\"Message details:\\n{response}\")\n"
security:
- Basic: []
- oAuth2: []
delete:
description: Delete a specific message by its ID. Note that this operation deletes the message from Conversation API storage; this operation does not affect messages already delivered to recipients' handsets. Also note that removing all messages of a conversation will not automatically delete the conversation.
tags:
- Messages
summary: Delete a message
operationId: Messages_DeleteMessage
responses:
'200':
description: A successful response.
'400':
$ref: '#/components/responses/400Error'
'401':
$ref: '#/components/responses/401Error'
'403':
$ref: '#/components/responses/403Error'
'500':
$ref: '#/components/responses/500Error'
'501':
$ref: '#/components/responses/501Error'
x-codeSamples:
- lang: Java
source: "/**\n * Sinch Java Snippet\n *\n *
This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *
See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.messages;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.MessagesService;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class Delete {\n\n private static final Logger LOGGER = Logger.getLogger(Delete.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the event to delete\n String messageId = \"MESSAGE_ID\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n MessagesService messagesService = client.conversation().v1().messages();\n\n LOGGER.info(\"Deleting message: \" + messageId);\n\n messagesService.delete(messageId);\n\n LOGGER.info(\"Done\");\n }\n}\n"
- lang: Node.js
source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Message to delete\n const messageId = 'MESSAGE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n await sinch.conversation.messages.delete({\n message_id: messageId,\n });\n console.log(`✅ Successfully deleted Message with ID ${messageId}.`);\n } catch (err) {\n console.error(`❌ Failed to delete the Message with ID ${messageId}:`);\n console.error(err);\n }\n}\n\nmain();\n"
- lang: Python
source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\nfrom dotenv import load_dotenv\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n conversation_region=os.environ.get(\"SINCH_CONVERSATION_REGION\") or \"MY_CONVERSATION_REGION\"\n)\n\n# The ID of the message to delete\nmessage_id = \"MESSAGE_ID\"\n\nsinch_client.conversation.messages.delete(message_id=message_id)\n\nprint(\"Message deleted successfully\")\n"
security:
- Basic: []
- oAuth2: []
servers:
- url: https://{region}.conversation.api.sinch.com
variables:
region:
default: us
enum:
- us
- eu
- br
description: The {region} variable must be set to us, eu, or br, and it must match the region in which you created your Conversation API app.
/v1/projects/{project_id}/messages:
parameters:
- $ref: '#/components/parameters/project_id'
- $ref: '#/components/parameters/query_conversation_id'
- $ref: '#/components/parameters/query_contact_id'
- name: app_id
description: Id of the app.
in: query
schema:
type: string
- name: channel_identity
description: Channel identity of the contact.
in: query
schema:
type: string
- name: start_time
description: Filter messages with `accept_time` after this timestamp. Must be before `end_time` if that is specified.
in: query
schema:
type: string
format: date-time
- name: end_time
description: Filter messages with `accept_time` before this timestamp.
in: query
schema:
type: string
format: date-time
- description: 'Maximum number of messages to fetch. Defaults to 10
and the maximum is 1000.'
name: page_size
in: query
schema:
type: integer
format: int32
- description: 'Next page token previously returned if any. When specifying this token, make sure to use the same values
for the other parameters from the request that originated the token, otherwise the paged results may be inconsistent.'
name: page_token
in: query
schema:
type: string
- name: view
in: query
schema:
$ref: '#/components/schemas/ConversationMessagesView'
- $ref: '#/components/parameters/messages_source'
- $ref: '#/components/parameters/only_recipient_originated'
- description: Only fetch messages from the `channel`.
name: channel
in: query
schema:
$ref: '#/components/schemas/ConversationChannel'
- name: direction
in: query
description: Optional. Only fetch messages with the specified `direction`. If direction is not specified, it will list both TO_APP and TO_CONTACT messages.
schema:
$ref: '#/components/schemas/ConversationDirection'
get:
description: 'This operation lists all messages sent or received via particular Processing Modes.
Setting the `messages_source` parameter to `CONVERSATION_SOURCE` allows for querying messages in `CONVERSATION` mode, and setting it to `DISPATCH_SOURCE`
will allow for queries of messages in `DISPATCH` mode. Note that `conversation_id` and `contact_id` are only supported as query parameters if `messages_source` is set to `CONVERSATION_SOURCE`.
Combining multiple parameters is supported for more detailed filtering of messages, but some of them are not supported
depending on the value specified for `messages_source`. The description for each field will inform if that field may not be supported.
The messages are ordered by their `accept_time` property in descending order,
where `accept_time` is a timestamp of when the message was enqueued by the Conversation API.
This means messages received most recently will be listed first.'
tags:
- Messages
summary: List messages
operationId: Messages_ListMessages
responses:
'200':
description: A successful response.
content:
application/json:
schema:
$ref: '#/components/schemas/ListMessagesResponse'
'400':
$ref: '#/components/responses/400Error'
'401':
$ref: '#/components/responses/401Error'
'403':
$ref: '#/components/responses/403Error'
'500':
$ref: '#/components/responses/500Error'
'501':
$ref: '#/components/responses/501Error'
x-codeSamples:
- lang: Java
source: "/**\n * Sinch Java Snippet\n *\n *
This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *
See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.messages;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.MessagesService;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListQueryParameters;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class List {\n\n private static final Logger LOGGER = Logger.getLogger(List.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the Conversation Application to list messages for\n String conversationApplicationId = \"APPLICATION_ID\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n MessagesService messagesService = client.conversation().v1().messages();\n\n LOGGER.info(\n String.format(\"List messages for application with ID '%s'\", conversationApplicationId));\n\n MessagesListQueryParameters request =\n MessagesListQueryParameters.builder().setAppId(conversationApplicationId).build();\n\n MessagesListResponse response = messagesService.list(request);\n\n LOGGER.info(\"Response:\");\n\n response.iterator().forEachRemaining(f -> LOGGER.info(f.toString()));\n }\n}\n"
- lang: Node.js
source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Conversation App to list Messages from\n const appId = 'CONVERSATION_APP_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n const response = await sinch.conversation.messages.list({\n app_id: appId,\n });\n if (response.data.length === 0) {\n console.log('No Messages found.');\n return;\n }\n console.log(`✅ Found ${response.data.length} Messages.`);\n response.data.forEach((message) => {\n console.log(message);\n });\n } catch (err) {\n console.error('❌ Failed to list the Messages:');\n console.error(err);\n }\n}\n\nmain();\n"
- lang: Python
source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\nfrom dotenv import load_dotenv\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n conversation_region=os.environ.get(\"SINCH_CONVERSATION_REGION\") or \"MY_CONVERSATION_REGION\"\n)\n\n# The ID of the Conversation App to list messages from\napp_id = \"CONVERSATION_APP_ID\"\n\nmessages = sinch_client.conversation.messages.list(\n app_id=app_id,\n)\n\npage_counter = 1\nwhile True:\n print(f\"Page {page_counter} List of Messages: {messages}\")\n\n if not messages.has_next_page:\n break\n\n messages = messages.next_page()\n page_counter += 1\n"
security:
- Basic: []
- oAuth2: []
servers:
- url: https://{region}.conversation.api.sinch.com
variables:
region:
default: us
enum:
- us
- eu
- br
description: The {region} variable must be set to us, eu, or br, and it must match the region in which you created your Conversation API app.
/v1/projects/{project_id}/messages:fetch-last-message:
parameters:
- $ref: '#/components/parameters/project_id'
post:
description: 'Retrieves the last message sent to specified channel identities. In CONVERSATION_SOURCE mode, you can query either by channel_identities or by contact_ids. Note: Use either contact_ids OR channel_identities per request, not both. DISPATCH_SOURCE mode does not support contact_ids.'
tags:
- Messages
summary: List messages by channel identity
operationId: Messages_ListMessagesByChannelIdentity
requestBody:
$ref: '#/components/requestBodies/ListMessagesByChannelIdentityRequest'
responses:
'200':
description: A successful response.
content:
application/json:
schema:
$ref: '#/components/schemas/ListMessagesResponse'
'400':
$ref: '#/components/responses/400Error'
'401':
$ref: '#/components/responses/401Error'
'403':
$ref: '#/components/responses/403Error'
'500':
$ref: '#/components/responses/500Error'
'501':
$ref: '#/components/responses/501Error'
x-codeSamples:
- lang: Java
source: "/**\n * Sinch Java Snippet\n *\n *
This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *
See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.messages;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.MessagesService;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.request.LastMessagesByChannelIdentityListQueryParameters;\nimport com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class ListLastMessagesByChannelIdentity {\n\n private static final Logger LOGGER =\n Logger.getLogger(ListLastMessagesByChannelIdentity.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n List channelIdentities = Arrays.asList(\"CHANNEL_IDENTITY1\", \"CHANNEL_IDENTITY2\");\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n MessagesService messagesService = client.conversation().v1().messages();\n\n LOGGER.info(String.format(\"List last messages for identities '%s'\", channelIdentities));\n\n LastMessagesByChannelIdentityListQueryParameters request =\n LastMessagesByChannelIdentityListQueryParameters.builder()\n .setChannelIdentities(channelIdentities)\n .build();\n\n MessagesListResponse response = messagesService.listLastMessagesByChannelIdentity(request);\n\n LOGGER.info(\"Response:\");\n\n response.iterator().forEachRemaining(f -> LOGGER.info(f.toString()));\n }\n}\n"
- lang: Node.js
source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // Channel identities to fetch the last message (can be phone numbers, social media IDs, etc. depending on the channel)\n const channelIdentities = ['CHANNEL_IDENTITY_1', 'CHANNEL_IDENTITY_2'];\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n const response = await sinch.conversation.messages.listLastMessagesByChannelIdentity({\n listLastMessagesByChannelIdentityRequestBody: {\n channel_identities: channelIdentities,\n messages_source: 'DISPATCH_SOURCE',\n },\n });\n if (response.data.length === 0) {\n console.log('No Messages found for the specified identities.');\n return;\n }\n console.log(`✅ Found ${response.data.length} Messages.`);\n response.data.forEach((message) => {\n console.log(message);\n });\n } catch (err) {\n console.error('❌ Failed to list the Messages for the specified identities:');\n console.error(err);\n }\n}\n\nmain();\n"
- lang: Python
source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\nfrom dotenv import load_dotenv\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n conversation_region=os.environ.get(\"SINCH_CONVERSATION_REGION\") or \"MY_CONVERSATION_REGION\"\n)\n\n# The channel identities to fetch the last message for\nchannel_identities = [\"CHANNEL_IDENTITY_1\", \"CHANNEL_IDENTITY_2\"]\n\nmessages = sinch_client.conversation.messages.list_last_messages_by_channel_identity(\n channel_identities=channel_identities,\n)\n\npage_counter = 1\nwhile True:\n print(f\"Page {page_counter} Last messages: {messages}\")\n\n if not messages.has_next_page:\n break\n\n messages = messages.next_page()\n page_counter += 1\n"
security:
- Basic: []
- oAuth2: []
servers:
- url: https://{region}.conversation.api.sinch.com
variables:
region:
default: us
enum:
- us
- eu
- br
description: The {region} variable must be set to us, eu, or br, and it must match the region in which you created your Conversation API app.
components:
schemas:
GetMessagesResponse:
type: object
properties:
data:
$ref: '#/components/schemas/SeriesData'
Serie:
type: object
properties:
values:
type: array
items:
type: integer
format: int32
mean:
type: integer
description: The mean value.
format: int32
max:
type: integer
description: The max value.
format: int32
min:
type: integer
description: The min value.
format: int32
sum:
type: integer
description: The sum of all values.
format: int32
labels:
type: object
additionalProperties:
type: string
SeriesData:
type: object
properties:
series:
type: array
items:
$ref: '#/components/schemas/Serie'
series_labels:
type: array
items:
type: string
x_values:
type: array
items:
type: string
WhatsAppPaymentButton:
description: WhatsApp Payment Button
oneOf:
- $ref: '#/components/schemas/WhatsAppPaymentSettingsButtonPix'
- $ref: '#/components/schemas/WhatsAppPaymentSettingsButtonPaymentLink'
- $ref: '#/components/schemas/WhatsAppPaymentSettingsButtonBoleto'
discriminator:
propertyName: type
mapping:
pix_dynamic_code: '#/components/schemas/WhatsAppPaymentSettingsButtonPix'
payment_link: '#/components/schemas/WhatsAppPaymentSettingsButtonPaymentLink'
boleto: '#/components/schemas/WhatsAppPaymentSettingsButtonBoleto'
ChannelIdentities:
required:
- channel_identities
type: object
properties:
channel_identities:
description: 'A list of specific channel identities.
The API will use these identities when sending to specific channels.'
type: array
items:
$ref: '#/components/schemas/ChannelRecipientIdentity'
ListMessagesByChannelIdentityRequest:
type: object
description: 'Request body for listing messages by channel identity. NOTE: You can use either contact_ids OR channel_identities, but not both in the same request.'
properties:
channel_identities:
description: Optional. Filter messages by `channel_identity`.
type: array
items:
type: string
contact_ids:
description: 'Optional. Resource name (id) of the contact. In case the messages source is set to `CONVERSATION_SOURCE`: Can list last messages by contact_id. In case the messages source is set to `DISPATCH_SOURCE`: The field is unsupported and cannot be set.'
type: array
items:
type: string
app_id:
description: Optional. Resource name (id) of the app.
type: string
messages_source:
$ref: '#/components/schemas/MessageSource'
page_size:
description: Optional. Maximum number of messages to fetch. Defaults to 10 and the maximum is 1000.
type: integer
format: int32
default: 10
page_token:
description: Optional. Next page token previously returned if any.
type: string
view:
allOf:
- description: Optional. Specifies the representation in which messages should be returned. Default to `WITH_METADATA`.
default: WITH_METADATA
- $ref: '#/components/schemas/ConversationMessagesView'
start_time:
description: Optional. Only fetch messages with `accept_time` after this date.
type: string
format: date-time
end_time:
description: Optional. Only fetch messages with `accept_time` before this date.
type: string
format: date-time
channel:
allOf:
- description: Optional. Only fetch messages from the `channel`.
- $ref: '#/components/schemas/ConversationChannel'
direction:
allOf:
- description: Optional. Only fetch messages with the specified `direction`. If direction is not specified, it will list both TO_APP and TO_CONTACT messages.
example: TO_CONTACT
- $ref: '#/components/schemas/ConversationDirection'
KakaoTalkWebLinkButton:
title: KakaoTalk Web Link Button
description: A button that opens a web link.
allOf:
- $ref: '#/components/schemas/KakaoTalkButton'
- type: object
properties:
type:
enum:
- WL
link_mo:
type: string
description: URL opened on a mobile device
link_pc:
type: string
description: URL opened on a desktop device
required:
- link_mo
WhatsAppPaymentSettingsPix:
type: object
deprecated: true
required:
- dynamic_pix
properties:
dynamic_pix:
type: object
description: The dynamic Pix payment settings.
required:
- code
- merchant_name
- key
- key_type
properties:
code:
type: string
description: The dynamic Pix code to be used by the buyer to pay.
merchant_name:
type: string
description: Account holder name.
key:
type: string
description: Pix key.
key_type:
type: string
description: Pix key type.
enum:
- CPF
- CNPJ
- EMAIL
- PHONE
- EVP
x-enumDescriptions:
CPF: The CPF key type.
CNPJ: The CNPJ key type.
EMAIL: The EMAIL key type.
PHONE: The PHONE key type.
EVP: The EVP key type.
FallbackMessageField:
description: Fallback message. Used when original contact message can not be handled.
type: object
title: Fallback
properties:
fallback_message:
title: Fallback Message
type: object
properties:
raw_message:
description: Optional. The raw fallback message if provided by the channel.
type: string
reason:
$ref: '#/components/schemas/Reason'
UpdateMessageMetadataRequest:
type: object
title: Update message request
required:
- metadata
properties:
metadata:
type: string
LocationMessageField:
type: object
description: Message containing geographic location.
title: Location
properties:
location_message:
title: Location Message
type: object
required:
- coordinates
- title
properties:
coordinates:
$ref: '#/components/schemas/Coordinates'
label:
description: Label or name for the position.
type: string
title:
description: The title is shown close to the button or link that leads to a map showing the location. The title can be clickable in some cases.
type: string
Choice:
description: A choice is an action the user can take such as buttons for quick replies or other call to actions.
type: object
title: Choice message
allOf:
- $ref: '#/components/schemas/choiceTypes'
- $ref: '#/components/schemas/choiceCommonProps'
ContactMessageTypes:
type: object
oneOf:
- $ref: '#/components/schemas/ChannelSpecificContactMessage'
- $ref: '#/components/schemas/ChoiceResponseMessageField'
- $ref: '#/components/schemas/FallbackMessageField'
- $ref: '#/components/schemas/LocationMessageField'
- $ref: '#/components/schemas/MediaCardMessageField'
- $ref: '#/components/schemas/MediaMessageField'
- $ref: '#/components/schemas/ProductResponseMessage'
- $ref: '#/components/schemas/TextMessageField'
CarouselMessageField:
description: Message containing a list of cards often rendered horizontally on supported channels.
type: object
title: Carousel
properties:
carousel_message:
title: Carousel Message
type: object
required:
- cards
properties:
cards:
description: A list of up to 10 cards.
type: array
items:
$ref: '#/components/schemas/CardMessage'
choices:
description: Optional. Outer choices on the carousel level. The number of outer choices is limited to 3.
type: array
items:
$ref: '#/components/schemas/Choice'
ContactIDField:
type: object
title: Contact ID
properties:
contact_id:
title: Contact ID string
description: The ID of the contact.
type: string
example: '{CONTACT_ID}'
AgentType:
description: Agent's classification. It can be UNKNOWN_AGENT_TYPE, HUMAN or BOT.
enum:
- UNKNOWN_AGENT_TYPE
- HUMAN
- BOT
x-enumDescriptions:
UNKNOWN_AGENT_TYPE: The default AgentType. When the agent type is unknown.
HUMAN: Human agent.
BOT: Bot agent.
type: string
default: UNKNOWN_AGENT_TYPE
KakaoTalkRegularPriceCommerce:
description: Information about a product with regular price
type: object
properties:
type:
enum:
- REGULAR_PRICE_COMMERCE
x-enumDescriptions:
REGULAR_PRICE_COMMERCE: Commerce with regular price
title:
description: Product title
type: string
maxLength: 30
regular_price:
description: Regular price of the product
type: integer
minimum: 0
maximum: 99999999
required:
- type
- title
- regular_price
CardHeight:
description: You can set the desired size of the card in the message.
type: string
x-enumDescriptions:
UNSPECIFIED_HEIGHT: The height of the card is unspecified.
SHORT: The shortest card height.
MEDIUM: Medium card height.
TALL: The tallest card height.
enum:
- UNSPECIFIED_HEIGHT
- SHORT
- MEDIUM
- TALL
choiceCommonProps:
type: object
properties:
postback_data:
description: An optional field. This data will be returned in the ChoiceResponseMessage. The default is message_id_{text, title}.
display_mode:
$ref: '#/components/schemas/DisplayMode'
PhoneNumberInfo:
type: object
title: Phone number
description: Phone numbers of the contact.
required:
- phone_number
properties:
phone_number:
description: Phone number with country code included.
type: string
type:
description: Phone number type, e.g. WORK or HOME.
type: string
PaymentOrderStatusChannelSpecificMessage:
allOf:
- $ref: '#/components/schemas/ChannelSpecificCommonProps'
- type: object
title: WhatsApp Payment Order Status channel specific message.
description: A message type for sending WhatsApp Payment Status Requests.
required:
- payment
properties:
payment:
type: object
description: The payment order status message content
required:
- reference_id
- order
properties:
reference_id:
type: string
description: Unique ID used to query the current payment status.
order:
type: object
description: The payment order.
required:
- status
properties:
status:
type: string
description: The new payment message status.
enum:
- pending
- processing
- partially-shipped
- shipped
- completed
- canceled
x-enumDescriptions:
pending: The order is pending.
processing: The order is processing.
partially-shipped: A portion of the order has been shipped.
shipped: The order has been shipped.
completed: The order is complete.
canceled: The order was canceled.
description:
type: string
description: The description of payment message status update (120 characters maximum).
ContactInfoMessageField:
type: object
description: Message containing contact information.
title: Contact Info
properties:
contact_info_message:
title: Contact Info Message
type: object
required:
- name
- phone_numbers
properties:
name:
$ref: '#/components/schemas/NameInfo'
phone_numbers:
description: Phone numbers of the contact
type: array
items:
$ref: '#/components/schemas/PhoneNumberInfo'
addresses:
description: Physical addresses of the contact
type: array
items:
$ref: '#/components/schemas/AddressInfo'
email_addresses:
description: Email addresses of the contact
type: array
items:
$ref: '#/components/schemas/EmailInfo'
organization:
$ref: '#/components/schemas/OrganizationInfo'
urls:
description: URLs/websites associated with the contact
type: array
items:
$ref: '#/components/schemas/UrlInfo'
birthday:
description: Date of birth in YYYY-MM-DD format.
type: string
WhatsAppInteractiveTextHeader:
type: object
description: Header of the interactive message with text.
required:
- type
- text
properties:
type:
type: string
x-enumDescriptions:
text: The text of the header.
enum:
- text
text:
type: string
description: Text for the header. Formatting allows emojis, but not Markdown.
ListSection:
type: object
title: List Section
description: Section for interactive WhatsApp messages containing ListItem
required:
- items
properties:
title:
description: Optional parameter. Title for list section.
type: string
items:
type: array
items:
$ref: '#/components/schemas/ListItem'
WhatsAppInteractiveBody:
type: object
description: Body of the interactive message.
required:
- text
properties:
text:
type: string
description: The content of the message (1024 characters maximum). Emojis and Markdown are supported.
TemplateMessageField:
type: object
description: Message referring to predefined template
title: Template Message
properties:
template_message:
type: object
title: Template Message
properties:
channel_template:
description: 'Optional. Channel specific template reference with parameters per channel.
The channel template if exists overrides the omnichannel template.
At least one of `channel_template` or `omni_template` needs to be present.
The key in the map must point to a valid conversation channel as
defined by the enum ConversationChannel.'
type: object
additionalProperties:
$ref: '#/components/schemas/TemplateReference'
omni_template:
$ref: '#/components/schemas/TemplateReferenceWithVersion'
Agent:
description: Represents an agent that is involved in a conversation.
type: object
title: Agent
properties:
display_name:
description: Agent's display name
type: string
type:
$ref: '#/components/schemas/AgentType'
picture_url:
description: The Agent's picture url.
type: string
OmniMessageOverride:
oneOf:
- $ref: '#/components/schemas/TextMessageField'
- $ref: '#/components/schemas/MediaMessageField'
- $ref: '#/components/schemas/TemplateReferenceField'
- $ref: '#/components/schemas/ChoiceMessageField'
- $ref: '#/components/schemas/CardMessageField'
- $ref: '#/components/schemas/CarouselMessageField'
- $ref: '#/components/schemas/LocationMessageField'
- $ref: '#/components/schemas/ContactInfoMessageField'
- $ref: '#/components/schemas/ListMessageField'
DisplayMode:
description: Controls the display behavior of a choice. Only supported for Choice Message on the RCS channel. Has no effect on other channels or message types, except for a carousel's outer choices, where it is rejected outright.
type: string
x-enumDescriptions:
DISPLAY_MODE_UNSPECIFIED: Default. Transient — choice disappears when new messages arrive.
PERSISTENT: Persistent — choice remains visible in the message bubble.
enum:
- DISPLAY_MODE_UNSPECIFIED
- PERSISTENT
KakaoTalkCoupon:
properties:
type:
description: Coupon type
type: string
description:
description: Coupon description
type: string
maxLength: 12
link_mo:
description: Coupon URL opened on a mobile device
type: string
link_pc:
description: Coupon URL opened on a desktop device
type: string
scheme_android:
description: 'Channel coupon URL (format: `alimtalk=coupon://...`)'
type: string
scheme_ios:
description: 'Channel coupon URL (format: `alimtalk=coupon://...`)'
type: string
required:
- type
WhatsAppInteractiveVideoHeader:
type: object
description: Header of the interactive message with video.
required:
- type
- video
properties:
type:
type: string
x-enumDescriptions:
video: The video associated with the header.
enum:
- video
video:
$ref: '#/components/schemas/WhatsAppInteractiveHeaderMedia'
OrganizationInfo:
type: object
title: Organization information
description: Organization information of the contact.
properties:
company:
description: Company name
type: string
department:
description: Department at the company
type: string
title:
description: Corporate title, e.g. Software engineer
type: string
choiceTypes:
type: object
oneOf:
- $ref: '#/components/schemas/CallMessageField'
- $ref: '#/components/schemas/LocationMessageField'
- $ref: '#/components/schemas/TextMessageField'
- $ref: '#/components/schemas/UrlMessageField'
- $ref: '#/components/schemas/CalendarMessageField'
- $ref: '#/components/schemas/ShareLocationMessageField'
TemplateReferenceField:
type: object
title: Template (Reference)
properties:
template_reference:
$ref: '#/components/schemas/TemplateReferenceWithVersion'
WhatsAppPaymentSettingsBoleto:
type: object
deprecated: true
required:
- boleto
properties:
boleto:
type: object
description: The Boleto payment settings.
required:
- digitable_line
properties:
digitable_line:
type: string
description: The Boleto digitable line which will be copied to the clipboard when the user taps the Boleto button.
MediaProperties:
title: Media Properties
type: object
required:
- url
properties:
thumbnail_url:
type: string
description: An optional parameter. Will be used where it is natively supported.
url:
description: Url to the media file.
type: string
filename_override:
description: Overrides the media file name.
type: string
ListItem:
type: object
title: List Item
description: Item containing either choiceItem or ProductItem
oneOf:
- required:
- choice
type: object
properties:
choice:
$ref: '#/components/schemas/ChoiceItem'
title: Choice
- required:
- product
type: object
properties:
product:
$ref: '#/components/schemas/ProductItem'
title: Product
MetadataUpdateStrategy:
enum:
- REPLACE
- MERGE_PATCH
description: Update strategy for the `conversation_metadata` field. Only supported in `CONVERSATION` processing mode.
x-enumDescriptions:
REPLACE: The default strategy. Replaces the whole `conversation_metadata` field with the new value provided.
MERGE_PATCH: Patches the `conversation_metadata` field with the patch provided according to RFC 7386.
type: string
default: REPLACE
Coordinates:
type: object
title: Geographic coordinates
required:
- latitude
- longitude
properties:
latitude:
description: The latitude.
type: number
format: float
longitude:
description: The longitude.
type: number
format: float
MessageContentType:
description: This field classifies the message content for use with Sinch's [consent management functionality](https://developers.sinch.com/docs/conversation/consent-management/). Note that this field is currently only used with Sinch's consent management functionality, and is not referenced elsewhere by the Conversation API.
type: string
x-enumDescriptions:
CONTENT_UNKNOWN: The default content type, when the content is not clearly defined, can be any type of content.
CONTENT_MARKETING: Type that indicates that the content is related to Marketing, like marketing campaign messages.
CONTENT_NOTIFICATION: Type that indicates that the content is related to Notifications, like charges and alerts.
default: CONTENT_UNKNOWN
enum:
- CONTENT_UNKNOWN
- CONTENT_MARKETING
- CONTENT_NOTIFICATION
PaymentOrderDetailsChannelSpecificMessage:
allOf:
- $ref: '#/components/schemas/ChannelSpecificCommonProps'
- type: object
title: WhatsApp Payment Order Details channel specific message.
description: A message type for sending WhatsApp Payment Requests.
required:
- payment
properties:
payment:
type: object
description: The payment order details content.
required:
- type
- reference_id
- type_of_goods
- total_amount_value
- order
properties:
type:
type: string
description: The country/currency associated with the payment message.
enum:
- br
- sg
x-enumDescriptions:
br: Brazil
sg: Singapore
reference_id:
type: string
description: Unique reference ID.
type_of_goods:
type: string
description: The type of good associated with this order.
enum:
- digital-goods
- physical-goods
x-enumDescriptions:
digital-goods: Digital goods.
physical-goods: Physical goods.
payment_settings:
deprecated: true
description: The payment settings. Use `payment_buttons` in place of this deprecated field.
oneOf:
- $ref: '#/components/schemas/WhatsAppPaymentSettingsPix'
- $ref: '#/components/schemas/WhatsAppPaymentSettingsPaymentLink'
- $ref: '#/components/schemas/WhatsAppPaymentSettingsBoleto'
payment_buttons:
type: array
description: Array of payment buttons (1 to 2 items).
minItems: 1
maxItems: 2
items:
$ref: '#/components/schemas/WhatsAppPaymentButton'
total_amount_value:
type: integer
description: Integer representing the total amount of the transaction.
order:
type: object
description: The payment order.
required:
- items
- subtotal_value
- tax_value
properties:
catalog_id:
type: string
description: Unique ID of the Facebook catalog being used by the business.
expiration_time:
type: string
description: 'UTC timestamp indicating when the order should expire.
The timestamp must be given in seconds.
The minimum threshold for the timestamp is 300 seconds.'
expiration_description:
type: string
description: Description of the expiration.
subtotal_value:
type: integer
description: Value representing the subtotal amount of this order.
tax_value:
type: integer
description: Value representing the tax amount for this order.
tax_description:
type: string
description: Description of the tax for this order.
shipping_value:
type: integer
description: Value representing the shipping amount for this order.
shipping_description:
type: string
description: Shipping description for this order.
discount_value:
type: integer
description: Value of the discount for this order.
discount_description:
type: string
description: Description of the discount for this order.
discount_program_name:
type: string
description: Discount program name for this order.
items:
type: array
description: The items list for this order.
items:
type: object
required:
- retailer_id
- name
- amount_value
- quantity
properties:
retailer_id:
type: string
description: Unique ID of the retailer.
name:
type: string
description: Item's name as displayed to the user.
amount_value:
type: integer
description: Price per item.
quantity:
type: integer
description: Number of items in this order.
sale_amount_value:
type: integer
description: Discounted price per item.
WhatsAppInteractiveHeaderMedia:
type: object
description: Media object for the header.
required:
- link
properties:
link:
type: string
description: URL for the media.
LineNotificationMessageTemplateBody:
type: object
description: Template body
properties:
emphasized_item:
$ref: '#/components/schemas/LineNotificationMessageTemplateEmphasizedItem'
items:
type: array
description: List of template items
items:
$ref: '#/components/schemas/LineNotificationMessageTemplateItem'
maxItems: 15
buttons:
type: array
description: List of template buttons
items:
$ref: '#/components/schemas/LineNotificationMessageTemplateButton'
maxItems: 2
WhatsAppPaymentSettingsButtonBoleto:
type: object
description: The Boleto payment settings.
required:
- type
- digitable_line
properties:
type:
type: string
enum:
- boleto
x-enumDescriptions:
boleto: The Boleto button identifier
digitable_line:
type: string
description: The Boleto digitable line which will be copied to the clipboard when the user taps the Boleto button.
runtimeError:
type: object
properties:
error:
type: object
properties:
code:
type: integer
format: int32
details:
type: array
items:
$ref: '#/components/schemas/protobufAny'
message:
type: string
status:
type: string
WhatsAppPaymentSettingsPaymentLink:
type: object
deprecated: true
required:
- payment_link
properties:
payment_link:
type: object
description: The payment link payment settings.
required:
- uri
properties:
uri:
type: string
description: The payment link to be used by the buyer to pay.
ProcessingStrategy:
description: Overrides the app's [Processing Mode](https://developers.sinch.com/docs/conversation/processing-modes/). Default value is `DEFAULT`.
enum:
- DEFAULT
- DISPATCH_ONLY
x-enumDescriptions:
DEFAULT: The request will inherit the app's configured processing mode.
DISPATCH_ONLY: Forces the request to be processed in dispatch mode (without storing contacts and conversations), regardless of the app's configured processing mode. Please note that user replies will still be processed in the app's default processing mode and that the `conversation_metadata` and `correlation_id` fields are not supported when using this option with an app in `CONVERSATION` mode.
type: string
default: DEFAULT
ShareLocationMessageField:
description: Message requesting location from a user.
type: object
title: Request location
properties:
share_location_message:
title: Share Location Message
type: object
required:
- title
- fallback_url
properties:
title:
description: The title is shown close to the button that leads to open a map to share a location.
type: string
fallback_url:
description: The URL that is opened when channel does not have support for this type.
type: string
KakaoTalkCommerceMessage:
type: object
title: KakaoTalk commerce message
description: A message type for sending KakaoTalk commerce messages
properties:
buttons:
description: Buttons list
type: array
minItems: 1
maxItems: 2
items:
oneOf:
- $ref: '#/components/schemas/KakaoTalkWebLinkButton'
- $ref: '#/components/schemas/KakaoTalkAppLinkButton'
- $ref: '#/components/schemas/KakaoTalkBotKeywordButton'
additional_content:
description: Additional information
type: string
maxLength: 34
image:
description: Product image
type: object
properties:
image_url:
type: string
description: URL to the product image
image_link:
type: string
description: URL opened when a user clicks on the image
required:
- image_url
commerce:
description: Product information
oneOf:
- $ref: '#/components/schemas/KakaoTalkRegularPriceCommerce'
- $ref: '#/components/schemas/KakaoTalkDiscountFixedCommerce'
- $ref: '#/components/schemas/KakaoTalkDiscountRateCommerce'
coupon:
description: Discount coupon
oneOf:
- $ref: '#/components/schemas/KakaoTalkFixedDiscountCoupon'
- $ref: '#/components/schemas/KakaoTalkDiscountRateCoupon'
- $ref: '#/components/schemas/KakaoTalkShippingDiscountCoupon'
- $ref: '#/components/schemas/KakaoTalkFreeCoupon'
- $ref: '#/components/schemas/KakaoTalkUpCoupon'
required:
- image
- commerce
- buttons
ChannelSpecificContactMessage:
type: object
title: Channel Specific Message
description: A contact message containing a channel specific message (not supported by OMNI types).
required:
- message_type
- message
properties:
channel_specific_message:
type: object
properties:
message_type:
type: string
description: The message type.
enum:
- nfm_reply
x-enumDescriptions:
nfm_reply: The `nfm_reply` message type.
message:
description: The message content.
oneOf:
- $ref: '#/components/schemas/WhatsAppInteractiveNfmReplyChannelSpecificContactMessage'
example:
nfm_reply:
summary: WhatsApp NFM Reply Channel Specific Contact Message Example
value:
channel_specific_message:
message_type: nfm_reply
message:
type: nfm_reply
nfm_reply:
name: flow
response_json: '{"flow_token": "", "optional_param1": "", "optional_param2": ""}'
body: Sent
SendMessageResponse:
type: object
properties:
accepted_time:
description: Timestamp when the Conversation API accepted the message for delivery to the referenced contact.
type: string
format: date-time
readOnly: true
message_id:
description: The ID of the message.
type: string
readOnly: true
RecipientRequest:
description: Identifies the recipient. If [Dispatch Mode](https://developers.sinch.com/docs/conversation/processing-modes/) is used, you must use the `identified_by` field.
allOf:
- $ref: '#/components/schemas/RecipientBase'
ReasonCode:
enum:
- UNKNOWN
- INTERNAL_ERROR
- RATE_LIMITED
- RECIPIENT_INVALID_CHANNEL_IDENTITY
- RECIPIENT_NOT_REACHABLE
- RECIPIENT_NOT_OPTED_IN
- OUTSIDE_ALLOWED_SENDING_WINDOW
- CHANNEL_FAILURE
- CHANNEL_BAD_CONFIGURATION
- CHANNEL_CONFIGURATION_MISSING
- MEDIA_TYPE_UNSUPPORTED
- MEDIA_TOO_LARGE
- MEDIA_NOT_REACHABLE
- NO_CHANNELS_LEFT
- TEMPLATE_NOT_FOUND
- TEMPLATE_INSUFFICIENT_PARAMETERS
- TEMPLATE_NON_EXISTING_LANGUAGE_OR_VERSION
- DELIVERY_TIMED_OUT
- DELIVERY_REJECTED_DUE_TO_POLICY
- CONTACT_NOT_FOUND
- BAD_REQUEST
- UNKNOWN_APP
- NO_CHANNEL_IDENTITY_FOR_CONTACT
- CHANNEL_REJECT
- NO_PERMISSION
- NO_PROFILE_AVAILABLE
- UNSUPPORTED_OPERATION
x-enumDescriptions:
UNKNOWN: UNKNOWN is used if no other code can be used to describe the encountered error.
INTERNAL_ERROR: An internal error occurred. Please save the entire callback if you want to report an error.
RATE_LIMITED: The message or event was not sent due to rate limiting.
RECIPIENT_INVALID_CHANNEL_IDENTITY: The channel recipient identity was malformed.
RECIPIENT_NOT_REACHABLE: It was not possible to reach the contact, or channel recipient identity, on the channel.
RECIPIENT_NOT_OPTED_IN: The contact, or channel recipient identity, has not opt-ed in on the channel.
OUTSIDE_ALLOWED_SENDING_WINDOW: The allowed sending window has expired. See the channel documentation for more information about how the sending window works for the different channels.
CHANNEL_FAILURE: The channel failed to accept the message. The Conversation API performs multiple retries in case of transient errors.
CHANNEL_BAD_CONFIGURATION: The configuration of the channel for the used App is wrong. The bad configuration caused the channel to reject the message. Please see the [channel support documentation page](https://developers.sinch.com/docs/conversation/channel-support/) for how to set it up correctly.
CHANNEL_CONFIGURATION_MISSING: The configuration of the channel is missing from the used App. Please see the [channel support documentation](https://developers.sinch.com/docs/conversation/channel-support/) page for how to set it up correctly.
MEDIA_TYPE_UNSUPPORTED: Some of the referenced media files are of an unsupported media type. Please read the [channel support documentation](https://developers.sinch.com/docs/conversation/channel-support/) page to find out the limitations on media that the different channels impose.
MEDIA_TOO_LARGE: Some of the referenced media files are too large. Please read the [channel support documentation](https://developers.sinch.com/docs/conversation/channel-support/) to find out the limitations on file size that the different channels impose.
MEDIA_NOT_REACHABLE: The provided media link was not accessible from the Conversation API or from the underlying channels. Please make sure that the media file is accessible.
NO_CHANNELS_LEFT: No channels to try to send the message to. This error will occur if one attempts to send a message to a channel with no channel identities or if all applicable channels have been attempted.
TEMPLATE_NOT_FOUND: The referenced template was not found.
TEMPLATE_INSUFFICIENT_PARAMETERS: Sufficient template parameters was not given. All parameters defined in the template must be provided when sending a template message.
TEMPLATE_NON_EXISTING_LANGUAGE_OR_VERSION: The selected language, or version, of the referenced template did not exist. Please check the available versions and languages of the template.
DELIVERY_TIMED_OUT: The message delivery, or event delivery, failed due to a channel-imposed timeout. See the [channel support documentation](https://developers.sinch.com/docs/conversation/channel-support/) page for further details about how the different channels behave.
DELIVERY_REJECTED_DUE_TO_POLICY: The message or event was rejected by the channel due to a policy. Some channels have specific policies that must be met to send a message. See the [channel support documentation](https://developers.sinch.com/docs/conversation/channel-support/) page for more information about when this error will be triggered.
CONTACT_NOT_FOUND: The provided Contact ID did not exist.
BAD_REQUEST: Conversation API validates send requests in two different stages. The first stage is right before the message is enqueued. If this first validation fails the API responds with 400 Bad Request and the request is discarded immediately. The second validation kicks in during message processing and it normally contains channel specific validation rules. Failures during second request validation are delivered as callbacks to `MESSAGE_DELIVERY (EVENT_DELIVERY)` webhooks with ReasonCode `BAD_REQUEST`.
UNKNOWN_APP: The used App is missing. This error may occur when the app is removed during message processing.
NO_CHANNEL_IDENTITY_FOR_CONTACT: The contact has no channel identities set up, or the contact has no channels set up for the resolved channel priorities.
CHANNEL_REJECT: Generic error for channel permanently rejecting a message. Only used if no other better matching error can be used.
NO_PERMISSION: No permission to perform action.
NO_PROFILE_AVAILABLE: No available profile data for user.
UNSUPPORTED_OPERATION: Generic error for channel unsupported operations.
type: string
AddressInfo:
type: object
title: Address information
description: Physical addresses of the contact.
properties:
city:
description: City Name
type: string
country:
description: Country Name
type: string
state:
description: Name of a state or region of a country.
type: string
zip:
description: Zip/postal code
type: string
type:
description: Address type, e.g. WORK or HOME
type: string
country_code:
description: Two letter country code.
type: string
ChoiceItem:
type: object
title: Choice
description: A message component for interactive messages, containing a choice.
required:
- title
properties:
title:
type: string
description: Required parameter. Title for the choice item.
description:
type: string
description: Optional parameter. The description (or subtitle) of this choice item.
media:
description: Optional parameter. The media of this choice item.
allOf:
- $ref: '#/components/schemas/MediaProperties'
postback_data:
type: string
description: Optional parameter. Postback data that will be returned in the MO if the user selects this option.
TemplateReference:
type: object
title: Template reference with concrete parameter values
description: The referenced template can be an omnichannel template stored in Conversation API Template Store as an AppMessage. You may also reference external channel-specific templates, such as a WhatsApp Business Template. Note that channel-specific template references are not supported when populating the `explicit_channel_omni_message` field.
required:
- template_id
properties:
version:
type: string
description: 'Used to specify what version of a template to use. Required when using `omni_channel_override` and `omni_template` fields.
This will be used in conjunction with `language_code`. Note that, when referencing omni-channel templates using the [Sinch Customer Dashboard](https://dashboard.sinch.com/), the latest version of a given omni-template can be identified by populating this field with `latest`.'
language_code:
description: 'The BCP-47 language code, such as `en_US` or `sr_Latn`.
For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. English is the default `language_code`.
Note that, while many API calls involving templates accept either the dashed format (`en-US`) or the underscored format (`en_US`), some channel specific templates (for example, WhatsApp channel-specific templates) only accept the underscored format. Note that this field is required for WhatsApp channel-specific templates.'
type: string
parameters:
description: 'Required if the template has parameters. Concrete values must
be present for all defined parameters
in the template. Parameters can be different for
different versions and/or languages of the template.'
type: object
additionalProperties:
type: string
template_id:
description: The ID of the template. Note that, in the case of WhatsApp channel-specific templates, this field must be populated by the name of the template.
type: string
CalendarMessageField:
description: Message containing details about a calendar event.
type: object
title: Calendar
properties:
calendar_message:
title: Calendar message
type: object
required:
- title
- event_start
- event_end
- event_title
- fallback_url
properties:
title:
description: The title is shown close to the button that leads to open a user calendar.
type: string
event_start:
description: The timestamp defines start of a calendar event.
type: string
format: date-time
example: '2025-11-30T10:00:00Z'
event_end:
description: The timestamp defines end of a calendar event.
type: string
format: date-time
example: '2025-11-30T11:00:00Z'
event_title:
description: Title of a calendar event.
type: string
event_description:
description: Description of a calendar event.
type: string
fallback_url:
description: The URL that is opened when the user cannot open a calendar event directly or channel does not have support for this type.
type: string
AppMessageCommonProps:
type: object
properties:
explicit_channel_message:
description: Allows you to specify a channel and define a corresponding channel specific message payload that will override the standard Conversation API message types. The key in the map must point to a valid conversation channel as defined in the enum `ConversationChannel`. The message content must be provided in a string format. You may use the [transcoding endpoint](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Transcoding/) to help create your message. For more information about how to construct an explicit channel message for a particular channel, see that [channel's corresponding documentation](https://developers.sinch.com/docs/conversation/channel-support/) (for example, using explicit channel messages with [the WhatsApp channel](https://developers.sinch.com/docs/conversation/channel-support/whatsapp/message-support/#explicit-channel-messages)).
type: object
additionalProperties:
type: string
explicit_channel_omni_message:
description: Override the message's content for specified channels. The key in the map must point to a valid conversation channel as defined in the enum `ConversationChannel`. The content defined under the specified channel will be sent on that channel.
type: object
additionalProperties:
$ref: '#/components/schemas/OmniMessageOverride'
channel_specific_message:
description: 'Channel specific messages, overriding any transcoding. The structure of this property is more well-defined than the open structure of the `explicit_channel_message` property, and may be easier to use.
The key in the map must point to a valid conversation channel as defined in the enum `ConversationChannel`.'
type: object
additionalProperties:
$ref: '#/components/schemas/ChannelSpecificMessage'
agent:
$ref: '#/components/schemas/Agent'
reply_to:
title: Reply To
description: Sends this message as a contextual reply to an inbound contact message, so the contact sees their original message quoted. Only supported on the WhatsApp channel. Conversation API keeps the mapping needed for the quote for 96 hours. If the referenced message is unknown or older than 96 hours, or the message is sent on a channel that does not support contextual replies, the message is still sent without the quote. For more information, see [Sending contextual replies](https://developers.sinch.com/docs/conversation/channel-support/whatsapp/message-support/#sending-contextual-replies).
type: object
required:
- message_id
properties:
message_id:
type: string
description: Required when using `reply_to`. The Conversation API ID of the inbound contact message this message replies to. Do not use a channel message ID (e.g., a WhatsApp message ID) from Meta.
WhatsAppPaymentSettingsButtonPaymentLink:
type: object
description: The payment link payment settings.
required:
- type
- uri
properties:
type:
type: string
enum:
- payment_link
x-enumDescriptions:
payment_link: The payment link button identifier
uri:
type: string
description: The payment link to be used by the buyer to pay.
ChannelSpecificCommonProps:
type: object
properties:
header:
description: The header of the interactive message.
type: object
oneOf:
- $ref: '#/components/schemas/WhatsAppInteractiveTextHeader'
- $ref: '#/components/schemas/WhatsAppInteractiveImageHeader'
- $ref: '#/components/schemas/WhatsAppInteractiveDocumentHeader'
- $ref: '#/components/schemas/WhatsAppInteractiveVideoHeader'
discriminator:
propertyName: type
mapping:
text: '#/components/schemas/WhatsAppInteractiveTextHeader'
image: '#/components/schemas/WhatsAppInteractiveImageHeader'
document: '#/components/schemas/WhatsAppInteractiveDocumentHeader'
video: '#/components/schemas/WhatsAppInteractiveVideoHeader'
body:
$ref: '#/components/schemas/WhatsAppInteractiveBody'
footer:
$ref: '#/components/schemas/WhatsAppInteractiveFooter'
TextMessageField:
type: object
title: Text
description: A message containing only text.
properties:
text_message:
type: object
title: Text Message
required:
- text
properties:
text:
description: The text to be sent.
type: string
CardMessageField:
description: Field containing a Card Message
type: object
title: Card
properties:
card_message:
$ref: '#/components/schemas/CardMessage'
ListMessagesResponse:
type: object
properties:
messages:
description: List of messages associated to the referenced conversation.
type: array
items:
$ref: '#/components/schemas/ConversationMessage'
readOnly: true
next_page_token:
type: string
description: Token that should be included in the next request to fetch the next page.
KakaoTalkCarouselCommerceChannelSpecificMessage:
allOf:
- $ref: '#/components/schemas/KakaoTalkChannelSpecificMessage'
- type: object
title: KakaoTalk carousel commerce channel specific message
description: A message type for sending KakaoTalk carousel commerce messages
properties:
carousel:
description: Carousel content
type: object
properties:
head:
description: Carousel introduction
type: object
properties:
header:
description: Carousel introduction title
type: string
maxLength: 20
content:
description: Carousel introduction description
type: string
maxLength: 50
image_url:
description: URL to the image displayed in the introduction
type: string
link_mo:
description: URL opened on a mobile device
type: string
link_pc:
description: URL opened on a desktop device
type: string
scheme_ios:
description: App link opened on an iOS device (e.g. `tel://PHONE_NUMBER`)
type: string
scheme_android:
description: App link opened on an Android device (e.g. `tel://PHONE_NUMBER`)
type: string
required:
- header
- content
- image_url
list:
description: List of carousel cards
type: array
minItems: 2
maxItems: 10
items:
$ref: '#/components/schemas/KakaoTalkCommerceMessage'
tail:
description: '"More" button'
type: object
properties:
link_mo:
description: URL opened on a mobile device
type: string
link_pc:
description: URL opened on a desktop device
type: string
scheme_ios:
description: App link opened on an iOS device (e.g. `tel://PHONE_NUMBER`)
type: string
scheme_android:
description: App link opened on an Android device (e.g. `tel://PHONE_NUMBER`)
type: string
required:
- link_mo
required:
- list
required:
- carousel
ListMessageField:
type: object
title: List
description: A message containing a list of options to choose from. All items must be of the same type.
properties:
list_message:
title: List Message
type: object
required:
- title
- sections
properties:
title:
description: A title for the message that is displayed near the products or choices.
type: string
description:
description: This is an optional field, containing a description for the message.
type: string
media:
$ref: '#/components/schemas/MediaProperties'
sections:
description: List of ListSection objects containing choices to be presented in the list message.
type: array
items:
$ref: '#/components/schemas/ListSection'
message_properties:
description: Additional properties for the message. Required if sending a product list message.
properties:
catalog_id:
description: Required if sending a product list message. The ID of the catalog to which the products belong.
type: string
menu:
description: Optional. Sets the text for the menu of a choice list message.
type: string
whatsapp_header:
description: Optional. Sets the text for the header of a WhatsApp choice list message. Ignored for other channels.
type: string
LineNotificationMessageTemplateButton:
type: object
description: Template button
required:
- button_key
- url
properties:
button_key:
type: string
description: Button key. See [LINE documentation](https://developers.line.biz/en/docs/partner-docs/line-notification-messages/template/?r=jp#buttons) for available keys
url:
type: string
maxLength: 1000
description: Button URL
ConversationDirection:
type: string
description: The direction of the message flow, indicating whether the message was sent to or from the Conversation API app.
x-enumDescriptions:
TO_APP: Sent to the Conversation API app.
TO_CONTACT: Sent to a recipient/contact from the Conversation API app.
enum:
- TO_APP
- TO_CONTACT
ConversationMessage:
description: A message on a particular channel.
type: object
title: Conversation Message
allOf:
- $ref: '#/components/schemas/ConversationMessageTypes'
- $ref: '#/components/schemas/ConversationMessageCommonProps'
LineNotificationMessageTemplateItem:
type: object
description: Template item
required:
- item_key
- content
properties:
item_key:
description: Item key. See [LINE documentation](https://developers.line.biz/en/docs/partner-docs/line-notification-messages/template/?r=jp#items) for available keys
type: string
content:
description: Item value
type: string
maxLength: 300
protobufAny:
type: object
properties:
type_url:
type: string
value:
type: string
format: byte
Choices:
type: object
properties:
choices:
type: array
description: The number of choices is limited to 10.
items:
$ref: '#/components/schemas/Choice'
MessageSource:
description: Specifies the message source for which the request will be processed. Used for operations on messages in Dispatch Mode. For more information, see [Processing Modes](https://developers.sinch.com/docs/conversation/processing-modes/).
type: string
enum:
- CONVERSATION_SOURCE
- DISPATCH_SOURCE
default: CONVERSATION_SOURCE
x-enumDescriptions:
CONVERSATION_SOURCE: The default messages source. Retrieves messages sent in the `CONVERSATION` processing mode, which associates the messages with a specific conversation and contact.
DISPATCH_SOURCE: Retrieves messages sent in the `DISPATCH` processing mode. These types of messages are not associated with any conversation or contact.
KakaoTalkBotKeywordButton:
title: KakaoTalk Bot Keyword Button
description: A button that sends a keyword specified in `name` property
allOf:
- $ref: '#/components/schemas/KakaoTalkButton'
- type: object
properties:
type:
enum:
- BK
WhatsAppInteractiveNfmReplyChannelSpecificContactMessage:
type: object
title: WhatsApp Interactive Nfm Reply Channel Specific Contact Message
description: A WhatsApp interactive contact message containing the nfm_reply.
required:
- type
- nfm_reply
properties:
type:
type: string
description: The interactive message type.
default: nfm_reply
x-enumDescriptions:
nfm_reply: The interactive nfm reply type.
enum:
- nfm_reply
nfm_reply:
$ref: '#/components/schemas/WhatsAppInteractiveNfmReply'
ConversationMessageCommonProps:
type: object
properties:
accept_time:
description: The time Conversation API processed the message.
type: string
format: date-time
readOnly: true
channel_identity:
$ref: '#/components/schemas/ChannelIdentity'
contact_id:
description: The ID of the contact.
type: string
conversation_id:
description: The ID of the conversation.
type: string
direction:
$ref: '#/components/schemas/ConversationDirection'
id:
description: The ID of the message.
type: string
metadata:
description: 'Optional. Metadata associated with the contact.
Up to 1024 characters long.'
type: string
injected:
description: Flag for whether this message was injected.
type: boolean
readOnly: true
sender_id:
description: For Contact Messages (MO messages), the sender ID represents the recipient to which the message was sent. This may be a phone number (in the case of SMS and MMS) or a unique ID (in the case of WhatsApp). This is field is not supported on all channels, nor is it supported for MT messages.
type: string
processing_mode:
$ref: '#/components/schemas/ProcessingMode'
WhatsAppInteractiveFooter:
type: object
description: Footer of the interactive message.
required:
- text
properties:
text:
type: string
description: The footer content (60 characters maximum). Emojis, Markdown and links are supported.
WhatsAppInteractiveDocumentHeader:
type: object
description: Header of the interactive message with document.
required:
- type
- document
properties:
type:
type: string
x-enumDescriptions:
document: The document associated with the header.
enum:
- document
document:
$ref: '#/components/schemas/WhatsAppInteractiveHeaderMedia'
AppMessageTypes:
type: object
oneOf:
- $ref: '#/components/schemas/CardMessageField'
- $ref: '#/components/schemas/CarouselMessageField'
- $ref: '#/components/schemas/ChoiceMessageField'
- $ref: '#/components/schemas/LocationMessageField'
- $ref: '#/components/schemas/MediaMessageField'
- $ref: '#/components/schemas/TemplateMessageField'
- $ref: '#/components/schemas/TextMessageField'
- $ref: '#/components/schemas/ListMessageField'
- $ref: '#/components/schemas/ContactInfoMessageField'
ChannelSpecificMessage:
type: object
title: Channel specific message
description: A message containing a channel specific message (not supported by OMNI types).
required:
- message_type
- message
properties:
message_type:
type: string
x-enumDescriptions:
FLOWS: The WhatsApp Flows message type.
ORDER_DETAILS: The WhatsApp order details message type.
ORDER_STATUS: The WhatsApp order status message type.
COMMERCE: KakaoTalk commerce channel specific message type
CAROUSEL_COMMERCE: KakaoTalk carousel commerce channel specific message type
NOTIFICATION_MESSAGE_TEMPLATE: LINE notification message template type
description: The type of the channel specific message.
enum:
- FLOWS
- ORDER_DETAILS
- ORDER_STATUS
- COMMERCE
- CAROUSEL_COMMERCE
- NOTIFICATION_MESSAGE_TEMPLATE
message:
oneOf:
- $ref: '#/components/schemas/FlowChannelSpecificMessage'
- $ref: '#/components/schemas/PaymentOrderDetailsChannelSpecificMessage'
- $ref: '#/components/schemas/PaymentOrderStatusChannelSpecificMessage'
- $ref: '#/components/schemas/KakaoTalkCommerceChannelSpecificMessage'
- $ref: '#/components/schemas/KakaoTalkCarouselCommerceChannelSpecificMessage'
- $ref: '#/components/schemas/LineNotificationMessageTemplateChannelSpecificMessage'
WhatsAppPaymentSettingsButtonPix:
type: object
description: The dynamic Pix payment settings button.
required:
- type
- code
- merchant_name
- key
- key_type
properties:
type:
type: string
enum:
- pix_dynamic_code
x-enumDescriptions:
pix_dynamic_code: The dynamic Pix code button identifier
code:
type: string
description: The dynamic Pix code to be used by the buyer to pay.
merchant_name:
type: string
description: Account holder name.
key:
type: string
description: Pix key.
key_type:
type: string
description: Pix key type.
enum:
- CPF
- CNPJ
- EMAIL
- PHONE
- EVP
x-enumDescriptions:
CPF: The CPF key type.
CNPJ: The CNPJ key type.
EMAIL: The EMAIL key type.
PHONE: The PHONE key type.
EVP: The EVP key type.
ConversationMessagesView:
type: string
default: WITH_METADATA
x-enumDescriptions:
WITH_METADATA: View the message with metadata.
WITHOUT_METADATA: View the message without metadata.
enum:
- WITH_METADATA
- WITHOUT_METADATA
KakaoTalkDiscountRateCommerce:
description: Information about a product with discount rate
allOf:
- $ref: '#/components/schemas/KakaoTalkRegularPriceCommerce'
- type: object
properties:
type:
enum:
- PERCENTAGE_DISCOUNT_COMMERCE
x-enumDescriptions:
PERCENTAGE_DISCOUNT_COMMERCE: Commerce with percentage discount
discount_price:
description: Discounted price of the product
type: integer
minimum: 0
maximum: 99999999
discount_rate:
description: Discount rate (%)
type: integer
minimum: 0
maximum: 100
required:
- discount_price
- discount_rate
RecipientBase:
type: object
oneOf:
- $ref: '#/components/schemas/IdentifiedByField'
- $ref: '#/components/schemas/ContactIDField'
KakaoTalkDiscountRateCoupon:
title: KakaoTalk discount rate coupon
description: 'Percentage discount coupon with the following title: "discount_rate% 할인 쿠폰" (translates to: "discount_rate% discount coupon")
One of the following fields is required: link_mo, scheme_android, scheme_ios
'
allOf:
- $ref: '#/components/schemas/KakaoTalkCoupon'
- type: object
properties:
type:
enum:
- PERCENTAGE_DISCOUNT_COUPON
discount_rate:
description: Discount rate (%)
type: integer
minimum: 0
maximum: 100
required:
- discount_rate
KakaoTalkShippingDiscountCoupon:
title: KakaoTalk shipping discount coupon
description: 'Shipping discount coupon with with the following title: "배송비 할인 쿠폰" (translates to: "shipping fee discount coupon")
One of the following fields is required: link_mo, scheme_android, scheme_ios
'
allOf:
- $ref: '#/components/schemas/KakaoTalkCoupon'
- type: object
properties:
type:
enum:
- SHIPPING_DISCOUNT_COUPON
UrlMessageField:
description: A generic URL message.
type: object
title: URL
properties:
url_message:
title: URL Message
type: object
required:
- title
- url
properties:
title:
description: The title shown close to the URL. The title can be clickable in some cases.
type: string
url:
description: The url to show.
type: string
IdentifiedByField:
type: object
title: Channel Identities
properties:
identified_by:
title: Channel Identity List
type: object
description: The identity as specified by the channel.
allOf:
- $ref: '#/components/schemas/ChannelIdentities'
ProcessingMode:
description: Whether or not Conversation API should store contacts and conversations for the app. For more information, see [Processing Modes](https://developers.sinch.com/docs/conversation/processing-modes/).
enum:
- CONVERSATION
- DISPATCH
x-enumDescriptions:
CONVERSATION: Creates contacts and conversations automatically when a message is sent or received and there's no existing contact or active conversation.
DISPATCH: The default Processing Mode. Does not associate messages with contacts and conversations. This processing mode is mostly intended for unidirectional high volume SMS use cases. The lack of contacts and conversations limits some API features as related data won't be queryable in the [Contact](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Contact/) and [Conversation](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Conversation/) APIs.
type: string
default: DISPATCH
ConversationMessageTypes:
type: object
oneOf:
- type: object
properties:
app_message:
$ref: '#/components/schemas/AppMessage'
title: App Message
- type: object
properties:
contact_message:
$ref: '#/components/schemas/ContactMessage'
title: Contact Message
SendMessageRequest:
type: object
description: This is the request body for sending a message. `app_id`, `recipient`, and `message` are all required fields.
required:
- app_id
- recipient
- message
properties:
app_id:
description: The ID of the app sending the message.
type: string
example: '{APP_ID}'
callback_url:
description: 'Overwrites the default callback url for delivery receipts for this message.
Note that you may [define a `secret_for_overridden_callback_urls` at the app level](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App/#tag/App/operation/App_UpdateApp!path=callback_settings/secret_for_overridden_callback_urls&t=request); this secret will be used to sign the contents of delivery receipts when the default callback URL is overridden by this property. The REST URL should be of the form: `http://host[:port]/path`'
type: string
channel_priority_order:
description: "Explicitly define the channels and order in which they are tried when sending the message. All channels provided in this field must be configured in the corresponding Conversation API app, or the request will be rejected.\nWhich channels the API will try and their priority is defined by:\n1. `channel_priority_order` if available.\n2. `recipient.identified_by.channel_identities` if available.\n3. When recipient is a `contact_id`:\n - if a conversation with the contact exists: the active channel of the conversation is tried first.\n - the existing channels for the contact are ordered by contact channel preferences if given.\n - lastly the existing channels for the contact are ordered by the app priority."
type: array
items:
$ref: '#/components/schemas/ConversationChannel'
channel_properties:
description: 'Channel-specific properties.
The key in the map must point to a valid channel property key as
defined by the enum ChannelPropertyKeys.
The maximum allowed property value length is 1024 characters.'
type: object
additionalProperties:
type: string
message:
$ref: '#/components/schemas/AppMessage'
message_metadata:
description: 'Metadata that should be associated with the message.
Returned in the `metadata` field of a [Message Delivery Receipt](https://developers.sinch.com/docs/conversation/callbacks/#message-delivery-receipt). Up to 1024 characters long.'
type: string
conversation_metadata:
description: "Metadata that will be associated with the conversation in `CONVERSATION` mode and with the specified recipient identities in `DISPATCH` mode.\nThis metadata will be propagated on MO callbacks associated\nwith the respective conversation or user identity. Up to 2048 characters long.\nNote that the MO callback will always use the last metadata available.\nImportant notes:\n\n - If you send a message with the `conversation_metadata` field populated, and then send another message without populating the `conversation_metadata` field, the original metadata will continue be propagated on the related MO callbacks.\n - If you send a message with the `conversation_metadata` field populated, and then send another message with a different value for `conversation_metadata` in the same conversation, the latest metadata value overwrites the existing one. So, future MO callbacks will include the new metadata.\n - The `conversation_metadata` only accepts json objects.\n - If you send a message in `DISPATCH` mode while the [retention period](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App/#tag/App/operation/App_CreateApp!path=dispatch_retention_policy/ttl_days&t=request) of the app is set to 0 (note that this value is set to 0 by default), the `conversation_metadata` field will not be retained.\n\nCurrently only returned in the `message_metadata` field of an [Inbound Message](https://developers.sinch.com/docs/conversation/callbacks/#inbound-message) callback."
type: object
queue:
$ref: '#/components/schemas/MessageQueue'
recipient:
$ref: '#/components/schemas/RecipientRequest'
ttl:
description: 'The timeout allotted for sending the message, expressed in seconds.
Passed to channels which support it and
emulated by the Conversation API for channels without ttl support
but with message retract/unsend functionality.
Channel failover will not be performed for messages with an expired TTL.
The format is an integer with the suffix `s` (for seconds).
Valid integer range is 3 to 315,576,000,000 (inclusive).
Example values include `10s` (10 seconds) and `86400s` (24 hours).'
type: string
processing_strategy:
$ref: '#/components/schemas/ProcessingStrategy'
correlation_id:
type: string
description: 'An arbitrary identifier that will be propagated to callbacks related to this message,
including MO messages from the recipient. The `correlation_id` is associated with the conversation in `CONVERSATION` mode and with the specified recipient identities in `DISPATCH` mode. The MO callbacks will always include the last `correlation_id` available,
(which is similar to how the `conversation_metadata` property functions).
Up to 128 characters long.
Important note: If you send a message in `DISPATCH` mode while the [retention period](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App/#tag/App/operation/App_CreateApp!path=dispatch_retention_policy/ttl_days&t=request) of the app is set to 0 (note that this value is set to 0 by default), the `correlation_id` field will not be retained.'
conversation_metadata_update_strategy:
$ref: '#/components/schemas/MetadataUpdateStrategy'
message_content_type:
$ref: '#/components/schemas/MessageContentType'
ChannelRecipientIdentity:
type: object
required:
- identity
- channel
properties:
channel:
$ref: '#/components/schemas/ConversationChannel'
identity:
description: The channel recipient identity.
type: string
WhatsAppInteractiveImageHeader:
type: object
description: Header of the interactive message with image.
required:
- type
- image
properties:
type:
type: string
x-enumDescriptions:
image: The image associated with the header.
enum:
- image
image:
$ref: '#/components/schemas/WhatsAppInteractiveHeaderMedia'
WhatsAppInteractiveNfmReply:
type: object
title: Nfm Reply
description: The interactive nfm reply message.
required:
- name
- response_json
- body
properties:
name:
type: string
description: The nfm reply message type.
x-enumDescriptions:
flow: The WhatsApp flow nfm reply message type.
address_message: The address nfm reply message type.
enum:
- flow
- address_message
response_json:
type: string
description: The JSON specific data.
body:
type: string
description: The message body.
MediaCardMessageField:
type: object
title: Media Card
description: A message containing a media component, such as an image or video.
properties:
media_card_message:
type: object
title: Media Card Message
required:
- url
properties:
caption:
description: Caption for the media on supported channels.
type: string
url:
description: Url to the media file.
type: string
ContactMessageCommonProps:
type: object
allOf:
- $ref: '#/components/schemas/ReplyToField'
ChoiceMessageField:
description: Message containing choices/actions.
type: object
title: Choice
properties:
choice_message:
title: Choice Message
type: object
required:
- choices
allOf:
- description: A message containing choices.
- $ref: '#/components/schemas/Choices'
- $ref: '#/components/schemas/TextMessageField'
- $ref: '#/components/schemas/ChoiceMessagePropertiesField'
CallMessageField:
description: Message for triggering a call.
type: object
title: Call
properties:
call_message:
title: Call Message
type: object
required:
- phone_number
- title
properties:
phone_number:
description: Phone number in E.164 with leading +.
type: string
example: '+15551231234'
title:
description: 'Title shown close to the phone number.
The title is clickable in some cases.'
type: string
example: Message text
MessageQueue:
type: string
description: Select the priority type for the message
default: NORMAL_PRIORITY
example: NORMAL_PRIORITY
x-enumDescriptions:
NORMAL_PRIORITY: The normal priority queue.
HIGH_PRIORITY: The high priority queue.
enum:
- NORMAL_PRIORITY
- HIGH_PRIORITY
TemplateReferenceWithVersion:
type: object
allOf:
- required:
- version
- $ref: '#/components/schemas/TemplateReference'
ProductItem:
type: object
title: Product
description: A message component for interactive messages, containing a product.
required:
- id
- marketplace
properties:
id:
type: string
description: Required parameter. The ID for the product.
marketplace:
type: string
description: Required parameter. The marketplace to which the product belongs.
example: FACEBOOK
quantity:
type: integer
format: int32
description: Output only. The quantity of the chosen product.
item_price:
type: number
format: float
description: Output only. The price for one unit of the chosen product.
currency:
type: string
description: Output only. The currency of the item_price.
ReplyToField:
description: If the contact message was a response to a previous App message then this field contains information about that.
type: object
title: Reply To
properties:
reply_to:
title: Reply To
type: object
required:
- message_id
properties:
message_id:
type: string
description: Required. The Id of the message that this is a response to
CardMessage:
description: Message containing text, media and choices.
title: Card Message
type: object
properties:
choices:
description: You may include choices in your Card Message. The number of choices is limited to 10.
type: array
items:
$ref: '#/components/schemas/Choice'
description:
description: This is an optional description field that is displayed below the title on the card.
type: string
height:
$ref: '#/components/schemas/CardHeight'
title:
description: The title of the card message.
type: string
media_message:
type: object
description: A message containing a media component.
allOf:
- $ref: '#/components/schemas/MediaProperties'
message_properties:
type: object
description: Optional additional properties.
properties:
whatsapp_header:
description: Optional. Sets the header for the footer of a WhatsApp reply button message, if there is no media in the message. Ignored for other channels. Ignored if not transcoded to a native WhatsApp message with reply buttons.
type: string
ProductResponseMessage:
type: object
title: Product Response Message
description: Represents an interactive WhatsApp message containing ProductItem objects
required:
- products
properties:
product_response_message:
type: object
properties:
products:
description: The selected products.
type: array
items:
$ref: '#/components/schemas/ProductItem'
title:
description: Optional parameter. Text that may be sent with selected products.
type: string
catalog_id:
description: Optional parameter. The catalog id that the selected products belong to.
type: string
MediaMessageField:
type: object
title: Media Message
description: A message containing a media component, such as an image, document, or video.
properties:
media_message:
$ref: '#/components/schemas/MediaProperties'
ChoiceMessagePropertiesField:
type: object
title: Properties
description: Additional properties for the message.
properties:
message_properties:
type: object
properties:
whatsapp_footer:
description: Optional. Sets the text for the footer of a WhatsApp reply button or URL button message. Ignored for other channels.
type: string
AppMessage:
type: object
title: Message originating from app
description: A message originating from a Conversation API app
allOf:
- $ref: '#/components/schemas/AppMessageTypes'
- $ref: '#/components/schemas/AppMessageCommonProps'
UrlInfo:
type: object
title: URL Info
description: A URL/website
required:
- url
properties:
url:
description: The URL to be referenced
type: string
type:
description: Optional. URL type, e.g. Org or Social
type: string
ContactMessage:
title: Message originating from a contact
description: A message originating from a contact.
type: object
allOf:
- $ref: '#/components/schemas/ContactMessageTypes'
- $ref: '#/components/schemas/ContactMessageCommonProps'
FlowChannelSpecificMessage:
allOf:
- $ref: '#/components/schemas/ChannelSpecificCommonProps'
- type: object
title: WhatsApp Flow channel specific message
description: A message type for sending WhatsApp Flows.
required:
- flow_id
- flow_cta
properties:
flow_id:
type: string
description: ID of the Flow.
flow_token:
type: string
description: Generated token which is an identifier.
flow_mode:
type: string
description: The mode in which the flow is.
default: published
enum:
- draft
- published
x-enumDescriptions:
draft: The flow is in draft mode.
published: The flow is published.
flow_cta:
type: string
description: Text which is displayed on the Call To Action button (20 characters maximum, emoji not supported).
flow_action:
type: string
default: navigate
enum:
- navigate
- data_exchange
x-enumDescriptions:
navigate: The navigate flow action.
data_exchange: The data exchange flow action.
flow_action_payload:
type: object
properties:
screen:
type: string
description: The ID of the screen displayed first. This must be an entry screen.
data:
type: object
description: Data for the first screen.
KakaoTalkDiscountFixedCommerce:
description: Information about a product with fixed discount
allOf:
- $ref: '#/components/schemas/KakaoTalkRegularPriceCommerce'
- type: object
properties:
type:
enum:
- FIXED_DISCOUNT_COMMERCE
x-enumDescriptions:
FIXED_DISCOUNT_COMMERCE: Commerce with fixed discount
discount_price:
description: Discounted price of the product
type: integer
minimum: 0
maximum: 99999999
discount_fixed:
description: Fixed discount
type: integer
minimum: 0
maximum: 999999
required:
- discount_price
- discount_fixed
LineNotificationMessageTemplateEmphasizedItem:
type: object
description: Template emphasized item
required:
- item_key
- content
properties:
item_key:
description: Item key. See [LINE documentation](https://developers.line.biz/en/docs/partner-docs/line-notification-messages/template/?r=jp#items) for available keys
type: string
content:
description: Item value
type: string
maxLength: 15
ReasonSubCode:
enum:
- UNSPECIFIED_SUB_CODE
- ATTACHMENT_REJECTED
- MEDIA_TYPE_UNDETERMINED
- INACTIVE_SENDER
x-enumDescriptions:
UNSPECIFIED_SUB_CODE: UNSPECIFIED_SUB_CODE is used if no other sub code can be used to describe the encountered error.
ATTACHMENT_REJECTED: The message attachment was rejected by the channel due to a policy. Some channels have specific policies that must be met to receive an attachment.
MEDIA_TYPE_UNDETERMINED: The specified media urls media type could not be determined.
INACTIVE_SENDER: The used credentials for the underlying channel is inactivated and not allowed to send or receive messages.
type: string
KakaoTalkFreeCoupon:
title: KakaoTalk free coupon
description: 'Free coupon with the following title: "title 무료 쿠폰" (translates to: "title free coupon")
One of the following fields is required: link_mo, scheme_android, scheme_ios
'
allOf:
- $ref: '#/components/schemas/KakaoTalkCoupon'
- type: object
properties:
type:
enum:
- FREE_COUPON
title:
description: Coupon title
type: string
maxLength: 7
required:
- title
LineNotificationMessageTemplateChannelSpecificMessage:
type: object
title: LINE notification message (template) channel specific message
description: A message type for sending LINE notification messages (template)
required:
- template_key
properties:
template_key:
description: Template key. See [LINE documentation](https://developers.line.biz/en/docs/partner-docs/line-notification-messages/template/?r=jp#templates) for available keys
type: string
body:
$ref: '#/components/schemas/LineNotificationMessageTemplateBody'
NameInfo:
type: object
title: Name of the contact
description: Name information of the contact.
required:
- full_name
properties:
full_name:
description: Full name of the contact
type: string
first_name:
description: First name.
type: string
last_name:
description: Last name.
type: string
middle_name:
description: Middle name.
type: string
prefix:
description: Prefix before the name. e.g. Mr, Mrs, Dr etc.
type: string
suffix:
description: Suffix after the name.
type: string
KakaoTalkButton:
type: object
properties:
type:
description: Button type
type: string
name:
description: Text displayed on the button
type: string
maxLength: 8
required:
- type
- name
KakaoTalkCommerceChannelSpecificMessage:
allOf:
- $ref: '#/components/schemas/KakaoTalkChannelSpecificMessage'
- $ref: '#/components/schemas/KakaoTalkCommerceMessage'
- type: object
title: KakaoTalk commerce channel specific message
description: A message type for sending KakaoTalk commerce messages
KakaoTalkFixedDiscountCoupon:
title: KakaoTalk fixed discount coupon
description: 'Fixed discount coupon with with the following title: "discount_fixed 원 할인 쿠폰" (translates to: "discount_fixed won discount coupon")
One of the following fields is required: link_mo, scheme_android, scheme_ios
'
allOf:
- $ref: '#/components/schemas/KakaoTalkCoupon'
- type: object
properties:
type:
enum:
- FIXED_DISCOUNT_COUPON
discount_fixed:
description: Fixed discount
type: integer
minimum: 0
maximum: 999999
required:
- discount_fixed
ChannelIdentity:
description: 'A unique identity of message recipient on a particular channel.
For example, the channel identity on SMS, WHATSAPP or VIBERBM is a MSISDN phone number.'
type: object
title: Channel Identity
required:
- identity
- channel
properties:
app_id:
description: Required if using a channel that uses app-scoped channel identities. Currently, FB Messenger, Instagram, LINE, and WeChat use app-scoped channel identities, which means contacts will have different channel identities on different Conversation API apps. These can be thought of as virtual identities that are app-specific and, therefore, the app_id must be included in the API call.
type: string
channel:
$ref: '#/components/schemas/ConversationChannel'
identity:
description: The channel identity. This will differ from channel to channel. For example, a phone number for SMS, WhatsApp, and Viber Business.
type: string
Reason:
type: object
properties:
code:
$ref: '#/components/schemas/ReasonCode'
description:
description: A textual description of the reason.
type: string
sub_code:
$ref: '#/components/schemas/ReasonSubCode'
channel_code:
description: Error code forwarded directly from the channel. Useful in case of unmapped or channel specific errors. Currently only supported on the WhatsApp channel.
type: string
ConversationChannel:
type: string
title: Channel Identifier
description: The identifier of the channel you want to include. Must be one of the enum values.
example: WHATSAPP
x-enumDescriptions:
SMS: The SMS channel.
RCS: The RCS channel.
WHATSAPP: The WhatsApp channel.
MMS: The MMS channel.
KAKAOTALK: The KakaoTalk channel.
KAKAOTALKCHAT: The KakaoTalk chat channel (used primarily in ConsultationTalk).
VIBERBM: The Viber Business Messages channel.
LINE: The LINE channel.
INSTAGRAM: The Instagram channel.
MESSENGER: The Facebook Messenger channel.
WECHAT: The WeChat channel.
TELEGRAM: The Telegram channel.
APPLEBC: The Apple Messages for Business channel.
enum:
- SMS
- RCS
- WHATSAPP
- MMS
- KAKAOTALK
- KAKAOTALKCHAT
- VIBERBM
- LINE
- INSTAGRAM
- MESSENGER
- WECHAT
- TELEGRAM
- APPLEBC
KakaoTalkAppLinkButton:
title: KakaoTalk App Link Button
description: A button that opens an app link (e.g. call button)
allOf:
- $ref: '#/components/schemas/KakaoTalkButton'
- type: object
properties:
type:
enum:
- AL
scheme_ios:
type: string
description: App link opened on an iOS device (e.g. `tel://PHONE_NUMBER`)
scheme_android:
type: string
description: App link opened on an Android device (e.g. `tel://PHONE_NUMBER`)
required:
- scheme_ios
- scheme_android
KakaoTalkUpCoupon:
title: KakaoTalk UP coupon
description: 'UP coupon with the following title: "title UP 쿠폰" (translates to: "title UP coupon")
One of the following fields is required: link_mo, scheme_android, scheme_ios
'
allOf:
- $ref: '#/components/schemas/KakaoTalkCoupon'
- type: object
properties:
type:
enum:
- UP_COUPON
title:
description: Coupon title
type: string
maxLength: 7
required:
- title
EmailInfo:
type: object
title: Email information
description: Email addresses of the contact.
required:
- email_address
properties:
email_address:
description: Email address.
type: string
type:
description: Email address type. e.g. WORK or HOME.
type: string
ChoiceResponseMessageField:
description: Represents a response to a choice message.
type: object
title: Choice Response
properties:
choice_response_message:
title: Choice Response Message
type: object
required:
- message_id
- postback_data
properties:
message_id:
description: The message id containing the choice.
type: string
postback_data:
description: The postback_data defined in the selected choice.
type: string
KakaoTalkChannelSpecificMessage:
type: object
properties:
push_alarm:
type: boolean
default: true
description: Set to `true` if a push alarm should be sent to a device.
adult:
type: boolean
default: false
description: Set to `true` if a message contains adult content. Set to `false` by default.
Choice_2:
type: object
properties:
text_message:
type: object
description: Text choice
properties:
text:
type: string
description: The choice text
postback_data:
type: string
description: Data sent back when the choice is selected
MessageList:
type: object
properties:
messages:
type: array
description: List of messages
items:
$ref: '#/components/schemas/ConversationMessage_2'
next_page_token:
type: string
description: Pagination token for the next page
AppMessage_2:
type: object
properties:
text_message:
type: object
description: A text message
properties:
text:
type: string
description: The message text
media_message:
type: object
description: A media message
properties:
url:
type: string
format: uri
description: The media URL
thumbnail_url:
type: string
format: uri
description: The thumbnail URL
template_message:
type: object
description: A template message
properties:
omni_template:
type: object
description: The template reference
properties:
template_id:
type: string
description: The template identifier
version:
type: string
description: The template version
language_code:
type: string
description: The language code
parameters:
type: object
description: Template parameter values
card_message:
type: object
description: A card message with title, description, and media
properties:
title:
type: string
description: The card title
description:
type: string
description: The card description
media_message:
type: object
description: The card media
properties:
url:
type: string
format: uri
description: The media URL
choices:
type: array
description: Action choices on the card
items:
$ref: '#/components/schemas/Choice_2'
list_message:
type: object
description: A list message with sections
properties:
title:
type: string
description: The list title
description:
type: string
description: The list description
sections:
type: array
description: List sections
items:
type: object
properties:
title:
type: string
description: Section title
items:
type: array
description: Section items
items:
$ref: '#/components/schemas/Choice_2'
ChannelIdentity_2:
type: object
properties:
channel:
type: string
enum:
- SMS
- RCS
- WHATSAPP
- MESSENGER
- INSTAGRAM
- VIBER
- VIBERBM
- TELEGRAM
- KAKAOTALK
- LINE
- MMS
description: The channel type
identity:
type: string
description: The channel-specific identity
app_id:
type: string
description: The app ID for the channel
ConversationMessage_2:
type: object
properties:
id:
type: string
description: The unique message identifier
direction:
type: string
enum:
- TO_APP
- TO_CONTACT
description: The message direction
app_message:
$ref: '#/components/schemas/AppMessage_2'
contact_message:
type: object
description: The inbound contact message
channel_identity:
$ref: '#/components/schemas/ChannelIdentity_2'
conversation_id:
type: string
description: The conversation this message belongs to
contact_id:
type: string
description: The contact who sent or received the message
metadata:
type: string
description: Message metadata
accept_time:
type: string
format: date-time
description: When the message was accepted
SendMessageResponse_2:
type: object
properties:
message_id:
type: string
description: The unique message identifier
accepted_time:
type: string
format: date-time
description: When the message was accepted
SendMessageRequest_2:
type: object
required:
- app_id
- message
- recipient
properties:
app_id:
type: string
description: The ID of the Conversation API app
recipient:
type: object
description: The message recipient
properties:
contact_id:
type: string
description: The contact ID to send to
identified_by:
type: object
description: Channel identity to address
properties:
channel_identities:
type: array
items:
$ref: '#/components/schemas/ChannelIdentity_2'
message:
$ref: '#/components/schemas/AppMessage_2'
message_metadata:
type: string
description: Metadata to associate with the message
conversation_metadata:
type: string
description: Metadata to associate with the conversation
channel_priority_order:
type: array
description: Ordered list of channels to try
items:
type: string
queue:
type: string
enum:
- NORMAL_PRIORITY
- HIGH_PRIORITY
description: The message queue priority
ttl:
type: integer
description: Time-to-live in seconds for the message
requestBodies:
UpdateMessageMetadataRequest:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMessageMetadataRequest'
examples:
updateMessageMetadataRequest:
$ref: '#/components/examples/updateMessageMetadataRequest'
description: Update message metadata request.
required: true
SendMessageRequest:
description: This is the request body for sending a message. `app_id`, `recipient`, and `message` are all required fields.
content:
application/json:
schema:
$ref: '#/components/schemas/SendMessageRequest'
examples:
IdentifiedBy:
$ref: '#/components/examples/sendMessageIdentifiedBy'
CardSendExample:
$ref: '#/components/examples/CardMessage'
CarouselSendExample:
$ref: '#/components/examples/CarouselMessage'
ChoiceSendExample:
$ref: '#/components/examples/ChoiceMessage'
ListSendExample:
$ref: '#/components/examples/ListMessage'
ProductListSendExample:
$ref: '#/components/examples/ProductMessage'
LocationSendExample:
$ref: '#/components/examples/LocationMessage'
MediaSendEample:
$ref: '#/components/examples/MediaMessage'
ContactId:
$ref: '#/components/examples/sendMessageContactId'
OmniMessage:
$ref: '#/components/examples/sendOmniTemplate'
ExplicitChannelOmniMessage:
$ref: '#/components/examples/sendExplicitChannelOmniMessage'
required: true
ListMessagesByChannelIdentityRequest:
description: 'Request body for listing messages by channel identity. NOTE: You can use either contact_ids OR channel_identities, but not both in the same request.'
content:
application/json:
schema:
$ref: '#/components/schemas/ListMessagesByChannelIdentityRequest'
examples:
ListMessagesByChannelIdentity:
$ref: '#/components/examples/listMessagesByChannelIdentity'
ListMessagesByContactId:
$ref: '#/components/examples/listMessagesByContactId'
required: true
examples:
sendOmniTemplate:
summary: Send message using an omnichannel template
value:
app_id: '{APP_ID}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
template_message:
omni_template:
template_id: YOUR_omni_template_id
version: latest
language_code: en_US
parameters: {}
ProductMessage:
summary: List message with products
description: An example message of a list message with products
value:
app_id: '{{APP_ID}}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
list_message:
title: Title for the list message with products
description: Description (or subtitle) for list message with products
sections:
- title: Facebook product catalog item set name
items:
- product:
id: product_1_id
marketplace: FACEBOOK
- product:
id: product_2_id
marketplace: FACEBOOK
message_properties:
catalog_id: id_of_catalog
listMessagesByContactId:
summary: List messages by contact ID
value:
app_id: YOUR_APP_ID
messages_source: CONVERSATION_SOURCE
contact_ids:
- 01H5XXXXXXXXXXXXXXXXXXX1
- 01H5XXXXXXXXXXXXXXXXXXX2
- 01H5XXXXXXXXXXXXXXXXXXX3
direction: TO_CONTACT
view: WITHOUT_METADATA
channel: WHATSAPP
start_time: '2026-01-01T08:30:00Z'
end_time: '2026-01-31T22:30:00Z'
sendMessageIdentifiedBy:
summary: Send message with identified_by recipient
value:
app_id: '{APP_ID}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
text_message:
text: This is a text message.
ListMessage:
summary: List message with choices
description: An example message of a list message with choices
value:
app_id: '{{APP_ID}}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
list_message:
title: Choose your icecream flavor
description: The best icecream in town!
sections:
- title: Fruit flavors
items:
- choice:
title: Strawberry
postback_data: Strawberry postback
- choice:
title: Blueberry
postback_data: Blueberry postback
- title: Other flavors
items:
- choice:
title: Chocolate
postback_data: Chocolate postback
- choice:
title: Vanilla
postback_data: Vanilla postback
message_properties:
menu: Menu text
whatsapp_header: WhatsApp header text
ChoiceMessage:
summary: Choice message
description: An example payload of a choice message.
value:
app_id: '{{APP_ID}}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
choice_message:
text_message:
text: Friendly reminder of your appointment tomorrow at 10AM. Please confirm your booking by replying below.
choices:
- text_message:
text: Confirm
- text_message:
text: Cancel
message_properties:
- whatsapp_footer: WhatsApp footer text
LocationMessage:
summary: Location message
description: An example payload of a location message.
value:
app_id: '{{APP_ID}}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
location_message:
title: Your ride is here!
label: Meet your driver at the specified address.
coordinates:
latitude: 55.610479
longitude: 13.002873
listMessagesByChannelIdentity:
summary: List messages by channel identity
value:
app_id: YOUR_APP_ID
messages_source: DISPATCH_SOURCE
channel_identities:
- '447700900000'
- '447700900001'
- '447700900002'
direction: TO_CONTACT
view: WITHOUT_METADATA
channel: WHATSAPP
start_time: '2026-01-01T08:30:00Z'
end_time: '2026-01-31T22:30:00Z'
MediaMessage:
summary: Media message
description: An example message of a media message.
value:
app_id: '{{APP_ID}}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
media_message:
url: '{{URL_TO_MEDIA}}'
updateMessageMetadataRequest:
summary: Update certain fields of a message. For now only metadata update is allowed.
value:
metadata: New metadata value
CarouselMessage:
summary: Carousel message
description: An example payload of a carousel message.
value:
app_id: '{{APP_ID}}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
carousel_message:
cards:
- title: Sign up for our weekly newsletter
description: Our weekly newsletter is filled with deals and extra content!
media_message:
url: https://1vxc0v12qhrm1e72gq1mmxkf-wpengine.netdna-ssl.com/wp-content/uploads/2019/05/Sinch-logo-Events.png
choices:
- text_message:
text: Sign up here
- title: Visit our website
description: You can view your account and place orders from our convenient dashboard.
media_message:
url: https://1vxc0v12qhrm1e72gq1mmxkf-wpengine.netdna-ssl.com/wp-content/uploads/2019/05/Sinch-logo-Events.png
choices:
- url_message:
title: Website
url: https://www.sinch.com
- title: Call our customer support line
description: Our dedicated support staff can answer your questions and concerns.
media_message:
url: https://1vxc0v12qhrm1e72gq1mmxkf-wpengine.netdna-ssl.com/wp-content/uploads/2019/05/Sinch-logo-Events.png
choices:
- call_message:
title: Support line
phone_number: '46732000000'
CardMessage:
summary: Card message
description: An example payload of a card message.
value:
app_id: '{{APP_ID}}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
card_message:
title: Sign up for our newsletter
description: Our weekly newsletter with deals and extra content!
media_message:
url: https://1vxc0v12qhrm1e72gq1mmxkf-wpengine.netdna-ssl.com/wp-content/uploads/2019/05/Sinch-logo-Events.png
choices:
- text_message:
text: Sign up here
message_properties:
- whatsapp_header: WhatsApp header text
sendMessageContactId:
summary: Send message with contact_id recipient
value:
app_id: '{APP_ID}'
recipient:
contact_id: '{CONTACT_ID}'
message:
text_message:
text: This is a text message.
sendExplicitChannelOmniMessage:
summary: Send explicit channel message, overriding omni message
value:
app_id: '{APP_ID}'
recipient:
identified_by:
channel_identities:
- channel: '{CHANNEL}'
identity: '{IDENTITY}'
message:
explicit_channel_omni_message:
SMS:
template_reference:
template_id: YOUR_omni_template_id
version: latest
language_code: en_US
parameters: {}
responses:
500Error:
description: Correct credentials but you don't have access to the requested resource. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information.
content:
application/json:
schema:
$ref: '#/components/schemas/runtimeError'
example:
code: 500
message: There was an internal server error.
status: INTERNAL_ERROR
details: []
401Error:
description: Incorrect credentials. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information.
content:
application/json:
schema:
type: object
sendMessageResponse:
description: A successful response. More information is available in [delivery report callbacks](https://developers.sinch.com/docs/conversation/callbacks/).
content:
application/json:
schema:
$ref: '#/components/schemas/SendMessageResponse'
getMessageResponse:
description: A successful response.
content:
application/json:
schema:
$ref: '#/components/schemas/ConversationMessage'
403Error:
description: Correct credentials but you don't have access to the requested resource. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information.
content:
application/json:
schema:
$ref: '#/components/schemas/runtimeError'
example:
code: 403
message: You do not have access to the requested resource.
status: UNAUTHORIZED
details: []
501Error:
description: Something went wrong on our end, try again with exponential back-off. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information.
content:
application/json:
schema:
$ref: '#/components/schemas/runtimeError'
example:
code: 501
message: There was an internal server error.
status: INTERNAL_ERROR
details: []
400Error:
description: Malformed request. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information.
content:
application/json:
schema:
$ref: '#/components/schemas/runtimeError'
example:
code: 400
message: Malformed request
status: INVALID_REQUEST
details: []
parameters:
only_recipient_originated:
description: If true, fetch only recipient originated messages.
name: only_recipient_originated
in: query
schema:
type: boolean
message_id:
name: message_id
description: The unique ID of the message.
in: path
required: true
schema:
type: string
query_contact_id:
name: contact_id
description: Resource name (ID) of the contact.
in: query
schema:
type: string
project_id:
name: project_id
description: The unique ID of the project. You can find this on the [Sinch Dashboard](https://dashboard.sinch.com/convapi/apps).
in: path
required: true
schema:
type: string
messages_source:
name: messages_source
description: Specifies the message source for which the request will be processed. Used for operations on messages in Dispatch Mode. For more information, see [Processing Modes](https://developers.sinch.com/docs/conversation/processing-modes/).
in: query
schema:
$ref: '#/components/schemas/MessageSource'
query_conversation_id:
description: Resource name (ID) of the conversation.
name: conversation_id
in: query
schema:
type: string
ProjectId:
name: project_id
in: path
required: true
description: The unique project identifier
schema:
type: string
securitySchemes:
basicAuth:
type: http
scheme: basic
description: Generate your access token on the [Chatlayer platform](https://app.chatlayer.ai/settings/api-access/tokens).
Basic:
type: http
scheme: basic
description: For more information about basic authentication, see [Basic Authentication](https://developers.sinch.com/docs/conversation/api-reference/#authentication).
oAuth2:
type: oauth2
description: The user name and password are your client_id and key_secret from the [Access keys sections](https://dashboard.sinch.com/settings/access-keys)
flows:
clientCredentials:
tokenUrl: https://auth.sinch.com/oauth2/token
scopes: {}
x-refined-from:
- sinch-chatlayer-analytics-api-openapi.yaml
- sinch-conversation-api-openapi.yaml
- original-sinch-conversation-openapi.yml
x-explorer-enabled: false
x-samples-languages:
- curl
- java
- csharp
- node
- php
x-original-swagger-version: '2.0'