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'