Sinch Conversation API
One API for messaging across SMS, RCS, WhatsApp, Viber, Messenger, Instagram, Telegram and other channels: send and receive messages, manage apps, contacts and conversations. The recommended starting point for new messaging integrations.
POST
/v1/projects/{project_id}/messages:send
Send a message
#
GET
/v1/projects/{project_id}/messages/{message_id}
Get a message
#
DELETE
/v1/projects/{project_id}/messages/{message_id}
Delete a message
#
GET
/v1/projects/{project_id}/messages
List messages
#
POST
/v1/projects/{project_id}/messages:fetch-last-message
List messages by channel identity
#
GET
/v1/projects/{project_id}/apps
List all apps for a given project
#
POST
/v1/projects/{project_id}/apps
Create an app
#
GET
/v1/projects/{project_id}/apps/{app_id}
Get an app
#
DELETE
/v1/projects/{project_id}/apps/{app_id}
Delete an app
#
PATCH
/v1/projects/{project_id}/apps/{app_id}
Update an app
#
GET
/v1/projects/{project_id}/apps/{app_id}/webhooks
List webhooks
#
GET
/v1/projects/{project_id}/apps/{app_id}/consents/{list_type}
Get identities from consent list
#
GET
/v1/projects/{project_id}/apps/{app_id}/consents/identities/{identity}
Get audit records from consent lists
#
POST
/v1/projects/{project_id}/capability:query
Capability lookup
#
GET
/v1/projects/{project_id}/conversations
List conversations
#
POST
/v1/projects/{project_id}/conversations
Create a conversation
#
GET
/v1/projects/{project_id}/conversations/{conversation_id}
Get a conversation
#
DELETE
/v1/projects/{project_id}/conversations/{conversation_id}
Delete a conversation
#
PATCH
/v1/projects/{project_id}/conversations/{conversation_id}
Update a conversation
#
GET
/v1/projects/{project_id}/conversations:recent
List recent conversations
#
POST
/v1/projects/{project_id}/conversations/{conversation_id}:inject-event
Inject an event
#
POST
/v1/projects/{project_id}/conversations/{conversation_id}:stop
Stop conversation
#
POST
/v1/projects/{project_id}/conversations/{conversation_id}:inject-message
Inject a message
#
POST
/v1/projects/{project_id}/events:send
Send an event
#
POST
/v1/projects/{project_id}/messages:transcode
Transcode a message
#
POST
/v1/projects/{project_id}/webhooks
Create a new webhook
#
GET
/v1/projects/{project_id}/webhooks/{webhook_id}
Get a webhook
#
PATCH
/v1/projects/{project_id}/webhooks/{webhook_id}
Update an existing webhook
#
DELETE
/v1/projects/{project_id}/webhooks/{webhook_id}
Delete an existing webhook
#
GET
/v1/projects/{project_id}/settings
Get Project Settings
#
POST
/v1/projects/{project_id}/settings
Create Project Settings
#
PATCH
/v1/projects/{project_id}/settings
Update Project Settings
#
DELETE
/v1/projects/{project_id}/settings
Delete Project Settings
#
Documentation
Specifications
Other Resources
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/sinch:sinch-conversation-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: "# Overview\n\nSend and receive messages globally over SMS, RCS, WhatsApp, Viber Business, Facebook messenger and other [popular channels](https://developers.sinch.com/docs/conversation/channel-support/) using the Sinch Conversation API.\n\n{% admonition type=\"info\" name=\"Note:\" %}\n\nIf you would like help setting up your Conversation API solution, and want to quickly get started sending and receiving messages, review our [Getting Started guide](https://developers.sinch.com/docs/conversation/getting-started/).\n\n{% /admonition %}\n\nThe Conversation API endpoint uses built-in transcoding to give you the power of conversation across all supported channels and, if required, full control over channel specific features.\n\n## Authentication\n\n## OAuth2.0 authentication\n\n{% partial file=\"/partials/authentication/oauth/_intro.md\"/ %}\n\n{% partial file=\"/partials/authentication/oauth/_instructions.md\"/ %}\n\n## Basic authentication\n\n{% partial file=\"/partials/authentication/basic/_intro.md\"/ %}\n\n{% partial file=\"/partials/authentication/basic/_instructions.md\"/ %}\n\n## Base URL\n\nThe following URLs can be used when making calls to the Conversation API:\n\n|Server|URL|\n|------|---|\n|Conversation API (US Production)|`https://us.conversation.api.sinch.com`|\n|Conversation API (EU Production)|`https://eu.conversation.api.sinch.com`|\n|Conversation API (BR Production)|`https://br.conversation.api.sinch.com`|\n\nNote that, when making a call to the Conversation API or Template Management API, you must target the regional server that corresponds to the region in which you created your Conversation API app.\n\n## Postman collection\n\nSinch offers a Postman collection for easy setup and testing during development. Our [Postman collection page](https://developers.sinch.com/docs/conversation/postman-collection) has a link to the JSON format of the collection.\n\nAfter importing the collection into Postman, fill in the following variables:\n\n| Variable | Value |\n| -------- | ----- |\n| <code>PROJECT</code> | Your PROJECT ID |\n| <code>APP</code> | Your app ID |\n| <code>CLIENT_ID</code> | Your CLIENT_ID |\n| <code>CLIENT_SECRET</code> | Your client secret |\n\nFor testing purposes, fill the WEBHOOK_URL by visiting <https://webhook.site/> and use the generated link - the one under the **Your unique URL** label.\n\n{% admonition type=\"warning\" name=\"Caution:\" %}\n\nThe <https://webhook.site/> URL given above should only be used for testing purposes. Using the Conversation API can generate high volumes of callbacks, which can easily exceed the TPS limits of certain webhook services. Additionally, sensitive information may be included in the callback, including message content and contact information. Ensure that you use a scalable and secure callback/webhook processor after your initial testing is complete.\n\n{% /admonition %}\n\nValues for other variables can be obtained by calling corresponding requests:\n\n- <code>CONTACT</code> - ID of contact created by calling **Create contact** request.\n- <code>WEBHOOK_ID</code> - ID of webhook created by calling **Create webhook** request.\n- <code>CONVERSATION</code> - In Conversation mode, a Conversation is created automatically when sending a new message. For example, with a Text Message request, send a message, then call [List conversations](https://developers.sinch.com/docs/conversation/api-reference/conversation/conversation/conversation_listconversations) to get the ID of the conversation for this variable.\n\n## Errors\n\nWhen requests are erroneous, the Sinch Conversation API will respond with standard HTTP status codes, such as <code>4xx</code> for client errors. All responses include a JSON body of the form:\n\n```json\n{\n \"error\": {\n \"code\": 401,\n \"message\": \"Request had invalid credentials.\",\n \"status\": \"UNAUTHENTICATED\",\n \"details\": [{\n \"@type\": \"type.googleapis.com/google.rpc.RetryInfo\",\n ...\n }]\n }\n}\n```\n\nThe table below describes the fields of the error object:\n\n| Name | Description | JSON Type |\n| ------- | ----------------------------------- | ---------------- |\n| Code | HTTP status code | Number |\n| Message | A developer-facing error message | String |\n| Status | Response status name | String |\n| Details | List of detailed error descriptions | Array of objects |\n\n### Common error responses\n\n| Status | Description |\n| ------ | ----------------------------------------------------------------------- |\n| 400 | Malformed request. For example, the message body of a request made to the `message/send` endpoint does not contain the `app_id` field, which is required. Alternatively, this error may be triggered if required fields **are** included, but populated incorrectly. For example, the `app_id` field is included in a `message/send` request, but the value is not a ULID (and, therefore, fails a basic form check).|\n| 401 | Incorrect credentials. For example, you may get this error if you provide incorrect `client_id` and `client_secret` values when using basic authentication. You may also get this error if you provide a bearer token generated using incorrect basic authentication credentials or if you provide an expired token (generated using the OAuth2.0 client credentials flow).|\n| 403 | Correct credentials but you don't have access to the requested resource. This typically occurs paired with an `UNAUTHORIZED` message when the provided `client_id` and `client_secret` are not associated with the `project_id` required for most Conversation API calls. Starting February 19, 2025, this error may also be paired with a `BILLING_CREDIT_LIMIT_BREACHED` message. If paired with `BILLING_CREDIT_LIMIT_BREACHED` message, the project is blocked due to credit reasons. In this case, check your project's billing configuration and balance. |\n| 404 | The resources provided for the call are insufficient to complete the call, or the server cannot locate the required resources. For example, if the `app_id` provided in the call doesn't match a Conversation API app contained within the corresponding project, or the region in which the app was created does not match the regional server targeted by the call. Additionally, this error occurs if you provide a designated Conversation API endpoint that doesn't actually exist.|\n| 429 | See [Rate Limits](https://developers.sinch.com/docs/conversation/api-reference/conversation/section/overview/rate-limits). |\n| 500 | Something went wrong on our end, try again with exponential back-off |\n| 501 | Something went wrong on our end, try again with exponential back-off |\n| 503 | Something went wrong on our end, try again with exponential back-off |\n\n## Rate Limits\n\nThe Conversation API has two kinds of rate limits that may result in status `429 Too Many Requests`:\n\n- Conversation API apps have a maximum MT ingress queue size of 500000 messages, which are drained towards the channel at a rate of 20 messages per second by default (this rate may be higher if the channel has been purchased with a higher capacity).\n- Projects are limited to 800 requests per second across all apps and most endpoints. Making over 800 requests per second over an extended period of time may saturate the app-specific ingress queue, resulting in rate limiting.\n\nIn addition to project and app level limitations, each channel also has rate limitations that can affect performance, and may return a `429 Too Many Requests` error. In some cases (for example, the SMS channel), these rate limits can be adjusted. In others (for example, the Instagram channel), they can't be adjusted. For more information about raising project, app, or channel rate limits, contact your Sinch account manager."
title: Conversation API | Sinch
version: '1.0'
license:
name: MIT
url: https://www.sinch.com/legal
contact:
email: support@sinch.com
name: support at sinch
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.
security:
- Basic: []
# --- truncated at 32 KB (475 KB total) ---
# Full source: https://artifacts.apis.io/sinch/openapi/sinch-conversation-api-openapi.yml