---
title: "Save RCS configuration self-serve (workspace admin)"
description: "Lets a workspace admin enter their own Twilio RCS details (Messaging Service SID, RCS sender ID, SMS fallback number, test device) once the RCS_MESSAGING feature flag is enabled for the workspace. Self-serve go-live: on save the row is upserted with enabled=true and status='test' (status='approved' is preserved if already set), so RCS starts sending immediately without a platform-owner step. Blocked (403) if the feature flag is off — a workspace cannot self-configure RCS it hasn't been granted. The write uses the service role after the admin check; no Twilio auth tokens are stored here.\n"
---

> Documentation Index
> Fetch the complete documentation index at: https://developer.channelautomations.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Channel Automation API › RCS

`PUT /api/rcs/workspaces/{workspaceId}/client-config`

Lets a workspace admin enter their own Twilio RCS details (Messaging Service SID, RCS sender ID, SMS fallback number, test device) once the RCS_MESSAGING feature flag is enabled for the workspace. Self-serve go-live: on save the row is upserted with enabled=true and status='test' (status='approved' is preserved if already set), so RCS starts sending immediately without a platform-owner step. Blocked (403) if the feature flag is off — a workspace cannot self-configure RCS it hasn't been granted. The write uses the service role after the admin check; no Twilio auth tokens are stored here.

## Authentication

- `BearerAuth`, http, header `Authorization`, format `JWT`

## Path parameters

- `workspaceId` (`put/api/rcs/workspaces/workspaceId/client-config.path.workspaceId`; string, required)

## Request body

_Required._

- `messagingServiceSid` (`put/api/rcs/workspaces/workspaceId/client-config.messagingServiceSid`; string, required) — Twilio Messaging Service SID (MG…)
- `rcsSenderId` (`put/api/rcs/workspaces/workspaceId/client-config.rcsSenderId`; string, optional) — Approved RCS Sender ID (optional)
- `fallbackFromPhone` (`put/api/rcs/workspaces/workspaceId/client-config.fallbackFromPhone`; string, optional) — E.164 SMS/MMS fallback sender (optional)
- `testDevicePhone` (`put/api/rcs/workspaces/workspaceId/client-config.testDevicePhone`; string, optional) — E.164 test device for validation (optional)
- `enabled` (`put/api/rcs/workspaces/workspaceId/client-config.enabled`; boolean, optional) — Master on/off. Defaults true; false pauses RCS (status=disabled).
- `agentRepliesRcsEnabled` (`put/api/rcs/workspaces/workspaceId/client-config.agentRepliesRcsEnabled`; boolean, optional) — Agents may start RCS from Text Messages / Board chat. False = SMS for a tagged audience; all-contact audiences retain the RCS inbound reply exception. Omit to keep the current value.
- `eligibilityTagId` (`put/api/rcs/workspaces/workspaceId/client-config.eligibilityTagId`; string, optional, nullable) — Only contacts with this workspace tag may use RCS. Null restores all contacts. Omit to preserve the current audience.
  - format `uuid`
- `automationsRcsEnabled` (`put/api/rcs/workspaces/workspaceId/client-config.automationsRcsEnabled`; boolean, optional) — Sequences, flows, question nodes and AI follow-ups send RCS-first. Omit to keep the current value.

## Example request

```json
{
  "messagingServiceSid": "string",
  "rcsSenderId": "string",
  "fallbackFromPhone": "string",
  "testDevicePhone": "string",
  "enabled": true,
  "agentRepliesRcsEnabled": true,
  "eligibilityTagId": "064ee5bf-eec3-4a5c-a71e-1bdaba256a33",
  "automationsRcsEnabled": true
}
```

## Code samples

### cURL

```bash
curl --request PUT \
  --url 'https://api.channelautomation.com/api/rcs/workspaces/<workspaceId>/client-config' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "messagingServiceSid": "string",
  "rcsSenderId": "string",
  "fallbackFromPhone": "string",
  "testDevicePhone": "string",
  "enabled": true,
  "agentRepliesRcsEnabled": true,
  "eligibilityTagId": "064ee5bf-eec3-4a5c-a71e-1bdaba256a33",
  "automationsRcsEnabled": true
}
'
```

### TypeScript

```typescript
const url = 'https://api.channelautomation.com/api/rcs/workspaces/<workspaceId>/client-config';
const options = {
  method: 'PUT',
  headers: {'Content-Type': 'application/json', Authorization: 'Bearer <token>'},
  body: JSON.stringify({
    messagingServiceSid: 'string',
    rcsSenderId: 'string',
    fallbackFromPhone: 'string',
    testDevicePhone: 'string',
    enabled: true,
    agentRepliesRcsEnabled: true,
    eligibilityTagId: '064ee5bf-eec3-4a5c-a71e-1bdaba256a33',
    automationsRcsEnabled: true
  })
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://api.channelautomation.com/api/rcs/workspaces/<workspaceId>/client-config"

payload = {
    "messagingServiceSid": "string",
    "rcsSenderId": "string",
    "fallbackFromPhone": "string",
    "testDevicePhone": "string",
    "enabled": True,
    "agentRepliesRcsEnabled": True,
    "eligibilityTagId": "064ee5bf-eec3-4a5c-a71e-1bdaba256a33",
    "automationsRcsEnabled": True
}
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <token>"
}

response = requests.put(url, json=payload, headers=headers)

print(response.text)
```

## Responses

### 200

Saved config.

### 400

Invalid Messaging Service SID, phone format, or tag not in this workspace.

### 401

Authentication required

#### Example

```json
{
  "error": "Authentication required",
  "success": false
}
```

- `error` (`put/api/rcs/workspaces/workspaceId/client-config.response.401.error`; string, optional)
  - example `"Authentication required"`
- `success` (`put/api/rcs/workspaces/workspaceId/client-config.response.401.success`; boolean, optional)
  - example `false`

### 403

Workspace admin access required, or RCS not enabled for this workspace.

### 500

Internal server error

#### Example

```json
{
  "error": "Internal server error",
  "details": "string",
  "success": false
}
```

- `error` (`put/api/rcs/workspaces/workspaceId/client-config.response.500.error`; string, optional)
  - example `"Internal server error"`
- `details` (`put/api/rcs/workspaces/workspaceId/client-config.response.500.details`; string, optional)
- `success` (`put/api/rcs/workspaces/workspaceId/client-config.response.500.success`; boolean, optional)
  - example `false`

### 503

Identity or workspace access verification is temporarily unavailable.


Source: https://developer.channelautomations.com/api/put-api-rcs-workspaces-workspace-id-client-config/index.md
