### GET /v1/projects/{project_id}/apps
Source: https://developers.sinch.com/_bundle/docs/conversation/api-reference/conversation.yaml
Get a list of all apps in the specified project.
```markdown
### Responses
#### 200 - response
**ListAppsResponse**
- **apps** (array (AppResponse)): List of apps belonging to a specific project ID.
Array items:
- **channel_credentials** (array (ConversationChannelCredentials))
Array items:
- **static_bearer** (object): This object is required for channels which use a bearer-type of credential for authentication.
- **claimed_identity** (string) (required): The claimed identity for the channel.
- **token** (string (password)) (required): The static bearer token for the channel.
- **callback_secret** (string (password)): The secret used to verify the channel callbacks
for channels which support callback verification.
The callback verification is not needed for Sinch-managed
channels because the callbacks are not leaving
Sinch internal networks.
Max length is 256 characters.
Note: leaving channel_callback_secret empty for channels with
callback verification will disable the verification.
- **channel** (string (WHATSAPP|RCS|SMS|MESSENGER|VIBERBM|MMS|INSTAGRAM|TELEGRAM|KAKAOTALK|KAKAOTALKCHAT|LINE|WECHAT|APPLEBC)): The identifier of the channel you want to include. Must be one of the enum values. (example: "WHATSAPP") ("WHATSAPP"|"RCS"|"SMS"|"MESSENGER"|"VIBERBM"|"MMS"|"INSTAGRAM"|"TELEGRAM"|"KAKAOTALK"|"KAKAOTALKCHAT"|"LINE"|"WECHAT"|"APPLEBC")
- **state** (object): State of the channel credentials integration.
- **status** (string (PENDING|ACTIVE|FAILING)) (required): Status of the channel credentials integration ("PENDING"|"ACTIVE"|"FAILING")
- **description** (string): Description in case the integration fails
- **channel_known_id** (string): Additional identifier set by the channel that represents an specific id used by the channel.
- **credential_ordinal_number** (integer): The ordinal number of the credential. This field is used when the application supports multiple credential integrations per channel. Currently, this is only applicable to the `LINE` channel. For other channels, this value will always be set to `0`. In the case in which there are multiple credential integrations per channel on a single app, this field must have a unique value for each multi-credential channel entry.
- **conversation_metadata_report_view** (string (NONE|FULL)): NONE - Omit metadata.
FULL - Include all metadata assigned to the conversation. ("NONE"|"FULL")
- **display_name** (string): The display name for the app. (example: "Sinch Conversation API Demo App 001")
- **id** (string): The ID of the app. You can find this on the [Sinch Dashboard](https://dashboard.sinch.com/convapi/apps). (example: "{APP_ID}")
- **rate_limits** (object)
- **inbound** (integer (int64)): The number of inbound messages/events we process per second,
from underlying channels to the app. The default rate limit is 25.
- **outbound** (integer (int64)): The number of messages/events we process per second, from the
app to the underlying channels. Note that underlying channels may have other
rate limits. The default rate limit is 25.
- **webhooks** (integer (int64)): The rate limit of callbacks sent to the webhooks registered
for the app. Note that if you have multiple webhooks with shared triggers,
multiple callbacks will be sent out for each triggering event. The default rate limit is 25.
- **retention_policy** (object): The retention policy configured for the app. For more information about retention policies, see [Retention Policy](https://developers.sinch.com/docs/conversation/keyconcepts/#retention-policy).
- **retention_type** (string (MESSAGE_EXPIRE_POLICY|CONVERSATION_EXPIRE_POLICY|PERSIST_RETENTION_POLICY)) ("MESSAGE_EXPIRE_POLICY"|"CONVERSATION_EXPIRE_POLICY"|"PERSIST_RETENTION_POLICY")
- **ttl_days** (integer (int64)): Optional. The days before a message or conversation is eligible for deletion.
Default value is 180. The ttl_days value has no effect when retention_type
is `PERSIST_RETENTION_POLICY`. The valid values for this field are [1 - 3650].
Note that retention cleanup job runs once every twenty-four hours
which can lead to delay i.e., messages and conversations are not deleted on
the minute they become eligible for deletion.
- **dispatch_retention_policy** (object): The retention policy configured for messages in [Dispatch Mode](https://developers.sinch.com/docs/conversation/processing-modes/). Currently only `MESSAGE_EXPIRE_POLICY` is available. For more information about retention policies, see [Retention Policy](https://developers.sinch.com/docs/conversation/keyconcepts/#retention-policy).
- **retention_type** (string (MESSAGE_EXPIRE_POLICY)) ("MESSAGE_EXPIRE_POLICY")
- **ttl_days** (integer (int64)): Optional. The days before a message is eligible for deletion. The valid range is `[0 - 7]`. In the case of a `0` day TTL, messages aren't stored at all.
Note the retention cleanup job runs once every twenty-four hours, so messages are not deleted on the minute they become eligible for deletion.
- **processing_mode** (string (CONVERSATION|DISPATCH)): 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/). ("CONVERSATION"|"DISPATCH")
- **smart_conversation** (object): This object is required for apps that subscribe to Smart Conversations features.
- **enabled** (boolean): Set to true to allow messages processed by this app to be analyzed by Smart Conversations.
- **queue_stats** (object)
- **outbound_size** (integer (int64)): The current size of the App's MT queue.
- **outbound_limit** (integer (int64)): The limit of the App's MT queue. The default limit is 500000 messages.
- **callback_settings** (object): This object contains additional settings related to callback processing.
- **secret_for_overridden_callback_urls** (string (password)): Optional. Secret can be used to sign contents of delivery receipts for a message that was sent with the default callback URL overridden (using the [`callback_url` field](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Messages/#tag/Messages/operation/Messages_SendMessage!path=callback_url&t=request)). You can then use the secret to verify the signature.
- **delivery_report_based_fallback** (object): This object contains additional settings related to [delivery report based fallback](https://developers.sinch.com/docs/conversation/keyconcepts/#delivery-report-base-message-fallback). Note that this is **paid** functionality.
- **enabled** (boolean): Optional. A flag specifying whether this app has enabled fallback message delivery upon no positive delivery report. This feature is applicable only to messages which are sent to a recipient with more than one channel identity. Identities must be defined on channels which support at least the 'DELIVERED' message state. **Please note that this functionality requires payment.**
- **delivery_report_waiting_time** (integer (int32)): Optional. The time, in seconds, after which a message without a positive delivery report will fallback to the next channel.
- **message_retry_settings** (object): This object contains settings related to message retry mechanism.
- **retry_duration** (integer (int32)): The maximum duration, in seconds, during which the system will retry sending a message in the event of a temporary processing failure. Time is counted after the first message processing failure. At least one retry is guaranteed. Subsequent retry instances are randomized with exponential backoff. If the next retry timestamp exceeds the configured time, one final retry will be performed on the cut-off time. The valid values for this field are [30 - 3600].
#### 400 - response
**runtimeError**
- **error** (object)
- **code** (integer (int32))
- **details** (array (protobufAny))
Array items:
- **type_url** (string)
- **value** (string (byte))
- **message** (string)
- **status** (string)
#### 401 - response
#### 403 - response
**runtimeError**
- **error** (object)
- **code** (integer (int32))
- **details** (array (protobufAny))
Array items:
- **type_url** (string)
- **value** (string (byte))
- **message** (string)
- **status** (string)
#### 500 - response
**runtimeError**
- **error** (object)
- **code** (integer (int32))
- **details** (array (protobufAny))
Array items:
- **type_url** (string)
- **value** (string (byte))
- **message** (string)
- **status** (string)
#### 501 - response
**runtimeError**
- **error** (object)
- **code** (integer (int32))
- **details** (array (protobufAny))
Array items:
- **type_url** (string)
- **value** (string (byte))
- **message** (string)
- **status** (string)
### Example Usage
```bash
curl -X GET "https://{region}.conversation.api.sinch.com/v1/projects/{project_id}/apps"
```
```
--------------------------------
### API Overview: Conversation API | Sinch
Source: https://developers.sinch.com/_bundle/docs/conversation/api-reference/conversation.yaml
# Overview
Send 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.
{% admonition type="info" name="Note:" %}
If 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/).
{% /admonition %}
The 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.
## Authentication
## OAuth2.0 authentication
{% partial file="/partials/authentication/oauth/_intro.md"/ %}
{% partial file="/partials/authentication/oauth/_instructions.md"/ %}
## Basic authentication
{% partial file="/partials/authentication/basic/_intro.md"/ %}
{% partial file="/partials/authentication/basic/_instructions.md"/ %}
## Base URL
The following URLs can be used when making calls to the Conversation API:
|Server|URL|
|------|---|
|Conversation API (US Production)|`https://us.conversation.api.sinch.com`|
|Conversation API (EU Production)|`https://eu.conversation.api.sinch.com`|
|Conversation API (BR Production)|`https://br.conversation.api.sinch.com`|
Note 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.
## Postman collection
Sinch 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.
After importing the collection into Postman, fill in the following variables:
| Variable | Value |
| -------- | ----- |
| PROJECT | Your PROJECT ID |
| APP | Your app ID |
| CLIENT_ID | Your CLIENT_ID |
| CLIENT_SECRET | Your client secret |
For testing purposes, fill the WEBHOOK_URL by visiting and use the generated link - the one under the **Your unique URL** label.
{% admonition type="warning" name="Caution:" %}
The 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.
{% /admonition %}
Values for other variables can be obtained by calling corresponding requests:
- CONTACT - ID of contact created by calling **Create contact** request.
- WEBHOOK_ID - ID of webhook created by calling **Create webhook** request.
- CONVERSATION - 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/reference#conversation_listconversations) to get the ID of the conversation for this variable.
## Errors
When requests are erroneous, the Sinch Conversation API will respond with standard HTTP status codes, such as 4xx for client errors. All responses include a JSON body of the form:
```json
{
"error": {
"code": 401,
"message": "Request had invalid credentials.",
"status": "UNAUTHENTICATED",
"details": [{
"@type": "type.googleapis.com/google.rpc.RetryInfo",
...
}]
}
}
```
The table below describes the fields of the error object:
| Name | Description | JSON Type |
| ------- | ----------------------------------- | ---------------- |
| Code | HTTP status code | Number |
| Message | A developer-facing error message | String |
| Status | Response status name | String |
| Details | List of detailed error descriptions | Array of objects |
### Common error responses
| Status | Description |
| ------ | ----------------------------------------------------------------------- |
| 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).|
| 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).|
| 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. |
| 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.|
| 429 | See [Rate Limits](https://developers.sinch.com/docs/conversation/api-reference/conversation/section/overview/rate-limits). |
| 500 | Something went wrong on our end, try again with exponential back-off |
| 501 | Something went wrong on our end, try again with exponential back-off |
| 503 | Something went wrong on our end, try again with exponential back-off |
## Rate Limits
The Conversation API has two kinds of rate limits that may result in status `429 Too Many Requests`:
- 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).
- 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.
In 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.
```yaml
# Conversation API | Sinch
# Version: 1.0
# Overview
Send 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.
{% admonition type="info" name="Note:" %}
If 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/).
{% /admonition %}
The 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.
## Authentication
## OAuth2.0 authentication
{% partial file="/partials/authentication/oauth/_intro.md"/ %}
{% partial file="/partials/authentication/oauth/_instructions.md"/ %}
## Basic authentication
{% partial file="/partials/authentication/basic/_intro.md"/ %}
{% partial file="/partials/authentication/basic/_instructions.md"/ %}
## Base URL
The following URLs can be used when making calls to the Conversation API:
|Server|URL|
|------|---|
|Conversation API (US Production)|`https://us.conversation.api.sinch.com`|
|Conversation API (EU Production)|`https://eu.conversation.api.sinch.com`|
|Conversation API (BR Production)|`https://br.conversation.api.sinch.com`|
Note 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.
## Postman collection
Sinch 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.
After importing the collection into Postman, fill in the following variables:
| Variable | Value |
| -------- | ----- |
| PROJECT | Your PROJECT ID |
| APP | Your app ID |
| CLIENT_ID | Your CLIENT_ID |
| CLIENT_SECRET | Your client secret |
For testing purposes, fill the WEBHOOK_URL by visiting and use the generated link - the one under the **Your unique URL** label.
{% admonition type="warning" name="Caution:" %}
The 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.
{% /admonition %}
Values for other variables can be obtained by calling corresponding requests:
- CONTACT - ID of contact created by calling **Create contact** request.
- WEBHOOK_ID - ID of webhook created by calling **Create webhook** request.
- CONVERSATION - 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/reference#conversation_listconversations) to get the ID of the conversation for this variable.
## Errors
When requests are erroneous, the Sinch Conversation API will respond with standard HTTP status codes, such as 4xx for client errors. All responses include a JSON body of the form:
```json
{
"error": {
"code": 401,
"message": "Request had invalid credentials.",
"status": "UNAUTHENTICATED",
"details": [{
"@type": "type.googleapis.com/google.rpc.RetryInfo",
...
}]
}
}
```
The table below describes the fields of the error object:
| Name | Description | JSON Type |
| ------- | ----------------------------------- | ---------------- |
| Code | HTTP status code | Number |
| Message | A developer-facing error message | String |
| Status | Response status name | String |
| Details | List of detailed error descriptions | Array of objects |
### Common error responses
| Status | Description |
| ------ | ----------------------------------------------------------------------- |
| 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).|
| 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).|
| 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. |
| 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.|
| 429 | See [Rate Limits](https://developers.sinch.com/docs/conversation/api-reference/conversation/section/overview/rate-limits). |
| 500 | Something went wrong on our end, try again with exponential back-off |
| 501 | Something went wrong on our end, try again with exponential back-off |
| 503 | Something went wrong on our end, try again with exponential back-off |
## Rate Limits
The Conversation API has two kinds of rate limits that may result in status `429 Too Many Requests`:
- 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).
- 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.
In 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.
# Base URL: https://{region}.conversation.api.sinch.com
```
--------------------------------
### PATCH /v1/projects/{project_id}/apps/{app_id}
Source: https://developers.sinch.com/_bundle/docs/conversation/api-reference/conversation.yaml
Updates a particular app as specified by the App ID. Note that this is a `PATCH` operation, so any specified field values will replace existing values. Therefore, **if you'd like to add additional configurations to an existing Conversation API app, ensure that you include existing values AND new values in the call**. For example, if you'd like to add new `channel_credentials`, you can [get](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App/#tag/App/operation/App_GetApp) your existing Conversation API app, extract the existing `channel_credentials` list, append your new configuration to that list, and include the updated `channel_credentials` list in this update call.
```markdown
### Parameters
- **update_mask** (array (string), query, optional): The set of field mask paths.
### Request Body
**Content-Type:** application/json
- **channel_credentials** (array (ConversationChannelCredentials)): An array of channel credentials. The order of the credentials defines the app channel priority.
Array items:
- **static_bearer** (object): This object is required for channels which use a bearer-type of credential for authentication.
- **claimed_identity** (string) (required): The claimed identity for the channel.
- **token** (string (password)) (required): The static bearer token for the channel.
- **callback_secret** (string (password)): The secret used to verify the channel callbacks
for channels which support callback verification.
The callback verification is not needed for Sinch-managed
channels because the callbacks are not leaving
Sinch internal networks.
Max length is 256 characters.
Note: leaving channel_callback_secret empty for channels with
callback verification will disable the verification.
- **channel** (string (WHATSAPP|RCS|SMS|MESSENGER|VIBERBM|MMS|INSTAGRAM|TELEGRAM|KAKAOTALK|KAKAOTALKCHAT|LINE|WECHAT|APPLEBC)): The identifier of the channel you want to include. Must be one of the enum values. (example: "WHATSAPP") ("WHATSAPP"|"RCS"|"SMS"|"MESSENGER"|"VIBERBM"|"MMS"|"INSTAGRAM"|"TELEGRAM"|"KAKAOTALK"|"KAKAOTALKCHAT"|"LINE"|"WECHAT"|"APPLEBC")
- **state** (object): State of the channel credentials integration.
- **status** (string (PENDING|ACTIVE|FAILING)) (required): Status of the channel credentials integration ("PENDING"|"ACTIVE"|"FAILING")
- **description** (string): Description in case the integration fails
- **channel_known_id** (string): Additional identifier set by the channel that represents an specific id used by the channel.
- **credential_ordinal_number** (integer): The ordinal number of the credential. This field is used when the application supports multiple credential integrations per channel. Currently, this is only applicable to the `LINE` channel. For other channels, this value will always be set to `0`. In the case in which there are multiple credential integrations per channel on a single app, this field must have a unique value for each multi-credential channel entry.
- **conversation_metadata_report_view** (string (NONE|FULL)): NONE - Omit metadata.
FULL - Include all metadata assigned to the conversation. ("NONE"|"FULL")
- **display_name** (string): The display name for the app. (example: "Sinch Conversation API Demo App 001")
- **retention_policy** (object): The retention policy configured for the app. For more information about retention policies, see [Retention Policy](https://developers.sinch.com/docs/conversation/keyconcepts/#retention-policy).
- **retention_type** (string (MESSAGE_EXPIRE_POLICY|CONVERSATION_EXPIRE_POLICY|PERSIST_RETENTION_POLICY)) ("MESSAGE_EXPIRE_POLICY"|"CONVERSATION_EXPIRE_POLICY"|"PERSIST_RETENTION_POLICY")
- **ttl_days** (integer (int64)): Optional. The days before a message or conversation is eligible for deletion.
Default value is 180. The ttl_days value has no effect when retention_type
is `PERSIST_RETENTION_POLICY`. The valid values for this field are [1 - 3650].
Note that retention cleanup job runs once every twenty-four hours
which can lead to delay i.e., messages and conversations are not deleted on
the minute they become eligible for deletion.
- **dispatch_retention_policy** (object): The retention policy configured for messages in [Dispatch Mode](https://developers.sinch.com/docs/conversation/processing-modes/). Currently only `MESSAGE_EXPIRE_POLICY` is available. For more information about retention policies, see [Retention Policy](https://developers.sinch.com/docs/conversation/keyconcepts/#retention-policy).
- **retention_type** (string (MESSAGE_EXPIRE_POLICY)) ("MESSAGE_EXPIRE_POLICY")
- **ttl_days** (integer (int64)): Optional. The days before a message is eligible for deletion. The valid range is `[0 - 7]`. In the case of a `0` day TTL, messages aren't stored at all.
Note the retention cleanup job runs once every twenty-four hours, so messages are not deleted on the minute they become eligible for deletion.
- **processing_mode** (string (CONVERSATION|DISPATCH)): 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/). ("CONVERSATION"|"DISPATCH")
- **smart_conversation** (object): This object is required for apps that subscribe to Smart Conversations features.
- **enabled** (boolean): Set to true to allow messages processed by this app to be analyzed by Smart Conversations.
- **callback_settings** (object): This object contains additional settings related to callback processing.
- **secret_for_overridden_callback_urls** (string (password)): Optional. Secret can be used to sign contents of delivery receipts for a message that was sent with the default callback URL overridden (using the [`callback_url` field](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Messages/#tag/Messages/operation/Messages_SendMessage!path=callback_url&t=request)). You can then use the secret to verify the signature.
- **message_retry_settings** (object): This object contains settings related to message retry mechanism.
- **retry_duration** (integer (int32)): The maximum duration, in seconds, during which the system will retry sending a message in the event of a temporary processing failure. Time is counted after the first message processing failure. At least one retry is guaranteed. Subsequent retry instances are randomized with exponential backoff. If the next retry timestamp exceeds the configured time, one final retry will be performed on the cut-off time. The valid values for this field are [30 - 3600].
- **delivery_report_based_fallback** (object): This object contains additional settings related to [delivery report based fallback](https://developers.sinch.com/docs/conversation/keyconcepts/#delivery-report-base-message-fallback). Note that this is **paid** functionality.
- **enabled** (boolean): Optional. A flag specifying whether this app has enabled fallback message delivery upon no positive delivery report. This feature is applicable only to messages which are sent to a recipient with more than one channel identity. Identities must be defined on channels which support at least the 'DELIVERED' message state. **Please note that this functionality requires payment.**
- **delivery_report_waiting_time** (integer (int32)): Optional. The time, in seconds, after which a message without a positive delivery report will fallback to the next channel.
### Responses
#### 200 - response
**AppResponse**
- **channel_credentials** (array (ConversationChannelCredentials))
Array items:
- **static_bearer** (object): This object is required for channels which use a bearer-type of credential for authentication.
- **claimed_identity** (string) (required): The claimed identity for the channel.
- **token** (string (password)) (required): The static bearer token for the channel.
- **callback_secret** (string (password)): The secret used to verify the channel callbacks
for channels which support callback verification.
The callback verification is not needed for Sinch-managed
channels because the callbacks are not leaving
Sinch internal networks.
Max length is 256 characters.
Note: leaving channel_callback_secret empty for channels with
callback verification will disable the verification.
- **channel** (string (WHATSAPP|RCS|SMS|MESSENGER|VIBERBM|MMS|INSTAGRAM|TELEGRAM|KAKAOTALK|KAKAOTALKCHAT|LINE|WECHAT|APPLEBC)): The identifier of the channel you want to include. Must be one of the enum values. (example: "WHATSAPP") ("WHATSAPP"|"RCS"|"SMS"|"MESSENGER"|"VIBERBM"|"MMS"|"INSTAGRAM"|"TELEGRAM"|"KAKAOTALK"|"KAKAOTALKCHAT"|"LINE"|"WECHAT"|"APPLEBC")
- **state** (object): State of the channel credentials integration.
- **status** (string (PENDING|ACTIVE|FAILING)) (required): Status of the channel credentials integration ("PENDING"|"ACTIVE"|"FAILING")
- **description** (string): Description in case the integration fails
- **channel_known_id** (string): Additional identifier set by the channel that represents an specific id used by the channel.
- **credential_ordinal_number** (integer): The ordinal number of the credential. This field is used when the application supports multiple credential integrations per channel. Currently, this is only applicable to the `LINE` channel. For other channels, this value will always be set to `0`. In the case in which there are multiple credential integrations per channel on a single app, this field must have a unique value for each multi-credential channel entry.
- **conversation_metadata_report_view** (string (NONE|FULL)): NONE - Omit metadata.
FULL - Include all metadata assigned to the conversation. ("NONE"|"FULL")
- **display_name** (string): The display name for the app. (example: "Sinch Conversation API Demo App 001")
- **id** (string): The ID of the app. You can find this on the [Sinch Dashboard](https://dashboard.sinch.com/convapi/apps). (example: "{APP_ID}")
- **rate_limits** (object)
- **inbound** (integer (int64)): The number of inbound messages/events we process per second,
from underlying channels to the app. The default rate limit is 25.
- **outbound** (integer (int64)): The number of messages/events we process per second, from the
app to the underlying channels. Note that underlying channels may have other
rate limits. The default rate limit is 25.
- **webhooks** (integer (int64)): The rate limit of callbacks sent to the webhooks registered
for the app. Note that if you have multiple webhooks with shared triggers,
multiple callbacks will be sent out for each triggering event. The default rate limit is 25.
- **retention_policy** (object): The retention policy configured for the app. For more information about retention policies, see [Retention Policy](https://developers.sinch.com/docs/conversation/keyconcepts/#retention-policy).
- **retention_type** (string (MESSAGE_EXPIRE_POLICY|CONVERSATION_EXPIRE_POLICY|PERSIST_RETENTION_POLICY)) ("MESSAGE_EXPIRE_POLICY"|"CONVERSATION_EXPIRE_POLICY"|"PERSIST_RETENTION_POLICY")
- **ttl_days** (integer (int64)): Optional. The days before a message or conversation is eligible for deletion.
Default value is 180. The ttl_days value has no effect when retention_type
is `PERSIST_RETENTION_POLICY`. The valid values for this field are [1 - 3650].
Note that retention cleanup job runs once every twenty-four hours
which can lead to delay i.e., messages and conversations are not deleted on
the minute they become eligible for deletion.
- **dispatch_retention_policy** (object): The retention policy configured for messages in [Dispatch Mode](https://developers.sinch.com/docs/conversation/processing-modes/). Currently only `MESSAGE_EXPIRE_POLICY` is available. For more information about retention policies, see [Retention Policy](https://developers.sinch.com/docs/conversation/keyconcepts/#retention-policy).
- **retention_type** (string (MESSAGE_EXPIRE_POLICY)) ("MESSAGE_EXPIRE_POLICY")
- **ttl_days** (integer (int64)): Optional. The days before a message is eligible for deletion. The valid range is `[0 - 7]`. In the case of a `0` day TTL, messages aren't stored at all.
Note the retention cleanup job runs once every twenty-four hours, so messages are not deleted on the minute they become eligible for deletion.
- **processing_mode** (string (CONVERSATION|DISPATCH)): 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/). ("CONVERSATION"|"DISPATCH")
- **smart_conversation** (object): This object is required for apps that subscribe to Smart Conversations features.
- **enabled** (boolean): Set to true to allow messages processed by this app to be analyzed by Smart Conversations.
- **queue_stats** (object)
- **outbound_size** (integer (int64)): The current size of the App's MT queue.
- **outbound_limit** (integer (int64)): The limit of the App's MT queue. The default limit is 500000 messages.
- **callback_settings** (object): This object contains additional settings related to callback processing.
- **secret_for_overridden_callback_urls** (string (password)): Optional. Secret can be used to sign contents of delivery receipts for a message that was sent with the default callback URL overridden (using the [`callback_url` field](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Messages/#tag/Messages/operation/Messages_SendMessage!path=callback_url&t=request)). You can then use the secret to verify the signature.
- **delivery_report_based_fallback** (object): This object contains additional settings related to [delivery report based fallback](https://developers.sinch.com/docs/conversation/keyconcepts/#delivery-report-base-message-fallback). Note that this is **paid** functionality.
- **enabled** (boolean): Optional. A flag specifying whether this app has enabled fallback message delivery upon no positive delivery report. This feature is applicable only to messages which are sent to a recipient with more than one channel identity. Identities must be defined on channels which support at least the 'DELIVERED' message state. **Please note that this functionality requires payment.**
- **delivery_report_waiting_time** (integer (int32)): Optional. The time, in seconds, after which a message without a positive delivery report will fallback to the next channel.
- **message_retry_settings** (object): This object contains settings related to message retry mechanism.
- **retry_duration** (integer (int32)): The maximum duration, in seconds, during which the system will retry sending a message in the event of a temporary processing failure. Time is counted after the first message processing failure. At least one retry is guaranteed. Subsequent retry instances are randomized with exponential backoff. If the next retry timestamp exceeds the configured time, one final retry will be performed on the cut-off time. The valid values for this field are [30 - 3600].
#### 400 - response
**runtimeError**
- **error** (object)
- **code** (integer (int32))
- **details** (array (protobufAny))
Array items:
- **type_url** (string)
- **value** (string (byte))
- **message** (string)
- **status** (string)
#### 401 - response
#### 403 - response
**runtimeError**
- **error** (object)
- **code** (integer (int32))
- **details** (array (protobufAny))
Array items:
- **type_url** (string)
- **value** (string (byte))
- **message** (string)
- **status** (string)
#### 500 - response
**runtimeError**
- **error** (object)
- **code** (integer (int32))
- **details** (array (protobufAny))
Array items:
- **type_url** (string)
- **value** (string (byte))
- **message** (string)
- **status** (string)
#### 501 - response
**runtimeError**
- **error** (object)
- **code** (integer (int32))
- **details** (array (protobufAny))
Array items:
- **type_url** (string)
- **value** (string (byte))
- **message** (string)
- **status** (string)
### Example Usage
```bash
curl -X PATCH "https://{region}.conversation.api.sinch.com/v1/projects/{project_id}/apps/{app_id}?update_mask=item1,item2" \
-H "Content-Type: application/json" \
-d '{
"example": "data"
}'
```
```