RCS Brand and Agent Builder using Channel Manager API
To use Vonage's RCS offering, a brand needs to register some brand‐level metadata, then create an Agent that represents the brand in RCS, get it verified, then use it in the Messages API when sending RCS messages. The Channel Manager API provides endpoints for managing these entities (Brand, Agent) programmatically.
This guide walks you through:
- What prerequisites must be met.
- The Brand Management endpoints: what they do, what data is required.
- The Agent Management endpoints: what they do, what data is required.
- The full onboarding workflow: steps, status transitions.
Migrating from v1? The Channel Manager API v2 introduces several breaking changes. The base path changed from /v1/channel-manager/rcs/ to /v2/channel-manager/rcs/. Brands now require a new details field that must be populated before any agent can be launched — existing brands must be updated via PATCH before launching their agents. Carriers are now required at agent creation (at least one must be provided). Launching an agent is now an explicit POST .../launch call instead of being triggered by adding carriers. The carrier_requirements v1 format is deprecated — use the v2 format with consent_management and engagement_flows instead.
Prerequisites
Before you start with the API endpoints, ensure:
- You have a Vonage API account.
- You are authorized to call Brand Management and Agent Management APIs.
- You have gathered all required brand and agent metadata. Brand metadata includes the display name, legal organization details, registration country, business website, and address. Agent metadata includes the logo, banner image, privacy policy, terms of service, and contact information.
- You understand the verification requirements in your target territory (e.g. in the U.S.).
Key API Components
There are two main entities:
- Brand: represents your organization (company, brand identity).
- Agent: represents the brand's identity when sending messages (name, logo, color, etc.).
Brand Management Endpoints
These endpoints are used to list, create, update, or delete the Brand entity. Creating a brand requires a display name and legal organization details, including the legal name and form, entity type, country of registration, business website, and registered address. A federal tax ID is also required for entities registered in the United States.
| Operation | HTTP Method & Path | Purpose |
|---|---|---|
| List Brands | GET https://api.nexmo.com/v2/channel-manager/rcs/brands |
List all brands under your account. |
| Create Brand | POST https://api.nexmo.com/v2/channel-manager/rcs/brands |
Create a brand with its display name and legal organization details. |
| Update Brand | PATCH https://api.nexmo.com/v2/channel-manager/rcs/brands/:brand_id |
Update a brand's display name or legal organization details. |
| Delete Brand | DELETE https://api.nexmo.com/v2/channel-manager/rcs/brands/:brand_id |
Delete an existing RCS Brand. |
Agent Management Endpoints
These endpoints are used to create Agents under a brand. An Agent is what is required to send RCS as the brand.
| Operation | HTTP Method & Path | Purpose |
|---|---|---|
| List Agents | GET https://api.nexmo.com/v2/channel-manager/rcs/agents |
List all agents under your account or filter them by brand and other properties. |
| Create Agent | POST https://api.nexmo.com/v2/channel-manager/rcs/agents |
Register an agent for a brand, including its basic information, visual design, application settings, representative, carrier requirements, and carriers. |
| Get Agent | GET https://api.nexmo.com/v2/channel-manager/rcs/agents/:agent_id |
Fetch the agent's metadata, status, associated brand, etc. |
| Update Agent | PUT https://api.nexmo.com/v2/channel-manager/rcs/agents/:agent_id |
Fully update an existing RCS Agent. All fields must be provided. |
| Partially Update Agent | PATCH https://api.nexmo.com/v2/channel-manager/rcs/agents/:agent_id |
Partially update an existing RCS Agent. |
| Get Carriers | GET https://api.nexmo.com/v2/channel-manager/rcs/metadata/carriers |
Fetch the list of carriers. |
| Add Carriers to Agent | POST https://api.nexmo.com/v2/channel-manager/rcs/agents/:agent_id/carriers |
Add carriers to an existing RCS Agent. |
| Launch Agent | POST https://api.nexmo.com/v2/channel-manager/rcs/agents/:agent_id/launch |
Submit an existing RCS Agent for launch. |
| Add Test Devices to Agent | POST https://api.nexmo.com/v2/channel-manager/rcs/agents/:agent_id/test-devices |
Add test devices to an existing RCS Agent. |
| List Test Devices | GET https://api.nexmo.com/v2/channel-manager/rcs/agents/:agent_id/test-devices |
List all test devices registered to an agent, including their statuses. |
| Remove Test Device from Agent | DELETE https://api.nexmo.com/v2/channel-manager/rcs/agents/:agent_id/test-devices/:test_device_id |
Remove a test device from an existing RCS Agent. |
Updating agents: PUT vs PATCH
Both PUT and PATCH can update an agent, but they behave differently:
PUTis a full replacement. You must provide all fields —basic_info,visual_design,application_settings,representative,carrier_requirements, andcarriers. Any field omitted is cleared.PATCHreplaces each top-level field you provide in full. There is no deep merge. For example, if you sendvisual_design, the entirevisual_designobject is replaced — include all sub-fields you want to keep, not just the ones you are changing.
Important: The basic_info fields — brand_id, sender_id, hosting_region, agent_purpose, and billing_category — are immutable after creation. They cannot be changed via PUT or PATCH. If you need to change any of these, you must create a new agent.
Uploading Media Assets
The agent's visual_design fields logo_image and banner_image accept publicly accessible URLs. If you already host your images on a CDN or public server, you can reference those URLs directly.
If you prefer to host the files through Vonage, use the media upload endpoint:
POST https://api.nexmo.com/v1/channel-manager/rcs/media?type={logo|banner}
Content-Type: multipart/form-data
file: <binary file>
The response returns the URL to use in visual_design:
{ "public_url": "https://..." }
Use the returned URL as the value for visual_design.logo_image or visual_design.banner_image in your agent creation or update request.
Notes:
- The
typequery parameter is required:logoorbanner. - Supported formats: PNG, JPEG.
- Size limits: logo ~50 KB, banner ~200 KB. Files exceeding the limit return
413 Payload Too Large. - This endpoint is available at
/v1/and is shared across both v1 and v2 agent workflows.
Onboarding Workflows
There are two common onboarding approaches depending on how much information you have ready upfront.
Workflow 1: Fast Launch — All Info Ready
Use this workflow when all required information (including carrier_requirements v2 and representative details) is available upfront and you want the agent live as quickly as possible.
1. Create Brand
Begin by creating a brand with the POST /v2/channel-manager/rcs/brands endpoint. Provide a display_name and a details object containing the organization's legal name and form, entity type, country of registration, business website, and registered address. Include federal_tax_id for an entity registered in the United States and stock_symbol when the organization is publicly traded. Once the brand is created, the API returns an id that you use as the brand_id in subsequent steps.
Existing brands: If you have a brand created in v1, it will not have the details field. You must update it with PATCH /v2/channel-manager/rcs/brands/{brand_id} and provide the details object before any agent referencing that brand can be launched.
Example request body:
{
"display_name": "Acme Bank",
"details": {
"organization_name": "Acme Corporation",
"legal_form": "Limited liability company (LLC)",
"legal_entity_type": "Private",
"country_of_registration": "DE",
"business_website_url": "https://www.example.com",
"address_line1": "One Main Street",
"city": "Berlin",
"state_or_province": "Berlin",
"zip_or_post_code": "10115"
}
}
2. Create Agent
Create an agent by calling POST /v2/channel-manager/rcs/agents. Provide all fields upfront: basic_info, visual_design, application_settings, representative, carrier_requirements, and carriers.
The basic_info object requires the following fields:
| Field | Description |
|---|---|
brand_id |
The ID of the brand this agent belongs to. |
display_name |
The agent's display name shown to users. |
sender_id |
A unique identifier for the agent on the Vonage platform. |
hosting_region |
The region where the agent is hosted (e.g. EUROPE, NORTH_AMERICA). |
agent_purpose |
The agent's messaging purpose (e.g. TRANSACTIONAL, PROMOTIONAL). |
billing_category |
The billing category (e.g. SINGLE_MESSAGE). |
These fields are immutable after creation. You cannot change brand_id, sender_id, hosting_region, agent_purpose, or billing_category via update operations. Create a new agent to change any of these values.
Use the v2 format for carrier_requirements, which requires consent_management and engagement_flows. The v1 format is deprecated.
You must provide at least one carrier in the carriers array.
Example request body:
{
"basic_info": {
"display_name": "Acme Bank",
"sender_id": "acme-bank",
"brand_id": "0198ecd4-da21-7f8b-91d8-ccfbaec485a7",
"hosting_region": "EUROPE",
"agent_purpose": "TRANSACTIONAL",
"billing_category": "SINGLE_MESSAGE"
},
"visual_design": {
"tagline": "Your trusted banking assistant",
"brand_color": "#FF5733",
"logo_image": "https://cdn.example.com/logo.png",
"banner_image": "https://cdn.example.com/banner.png",
"phone": [],
"email": [],
"website": []
},
"application_settings": { "application_id": "a1b2c3d4-..." },
"representative": {
"first_name": "Jane",
"last_name": "Doe",
"email": "jane.doe@example.com"
},
"carrier_requirements": {
"version": "v2",
"agent_preview": {
"agent_access_instructions": "Visit https://example.com/rcs-agent ...",
"urls": [{ "media_type": "image", "url": "https://cdn.example.com/preview.png" }]
},
"consent_management": {
"user_messaging_consent_methods": { "selection": ["BY_CREATING_ACCOUNT"] },
"users_opt_in_process": { "selection": ["WEBSITE_URL"], "links": ["https://www.example.com/subscribe"] },
"first_opt_in_message": "Welcome! You have opted in to receive updates from Acme Bank.",
"users_opt_out_methods": { "selection": ["BY_STOP_OR_UNSUBSCRIBE_MESSAGE"] },
"opt_out_processing_time": { "selection": "WITHIN_5_MINUTES" },
"opt_out_confirmation_message": { "selection": "SUCCESSFULLY_UNSUBSCRIBED" }
},
"engagement_flows": {
"agent_description": "Acme Bank RCS agent for transactional alerts.",
"reasons_messages_sent": { "selection": ["ORDER_CONFIRMATION", "PAYMENT_REMINDERS"] },
"monthly_user_message_count": "THREE_FIVE_MESSAGES",
"rcs_user_interaction_types": { "selection": ["SIMPLE_REPLIES"] }
}
},
"carriers": ["orange-spain", "vodafone-france"]
}
The API responds with an agent_id and an initial state of DRAFT. The agent transitions to CREATED within approximately 3–5 minutes, after which test devices can be added.
3. Add test numbers
Add test numbers using POST /v2/channel-manager/rcs/agents/:agent_id/test-devices. These numbers allow you to test the agent experience before it goes live.
{
"phone": "+14155552671"
}
The response returns an AgentTester object with id, phone, and status. For fully automated carrier integrations, the device is typically ready within 2–3 minutes. Carriers that require manual processing may take longer.
To check the readiness status of all registered test devices at any time, use:
GET /v2/channel-manager/rcs/agents/:agent_id/test-devices
Returns 403 if the device does not support RCS, or 503 if the agent is not yet set up.
4. Send test messages
Send test messages from the RCS Agent Builder UI to confirm the agent experience on your test devices. This function is currently not available via the API.
Note: You can only edit the agent until it has been launched. After launch, contact your account manager or Vonage Support for any further changes.
5. Submit Agent for Launch
Submit the agent for launch using POST /v2/channel-manager/rcs/agents/:agent_id/launch.
- Returns
202 Acceptedwhen the submission is accepted. - Returns
422if the agent is not in a launchable state. - The agent transitions to
PENDINGonce accepted, and carriers begin the approval process. LAUNCHEDstatus is granted per-carrier as each carrier approves. The agent may beLAUNCHEDon some carriers while stillPENDINGon others.
When approved, the agent does not immediately become available in production. An internal review by Vonage's operations team is required to complete the launch. This process typically takes 4–8 weeks, after which you can begin using the agent as the sender in the Messages API.
6. Add more carriers if needed
You can expand carrier coverage at any time after agent creation:
POST /v2/channel-manager/rcs/agents/:agent_id/carriers
{
"carriers": ["dt-germany", "tmobile-us"]
}
Returns 202 Accepted. Returns 409 if a carrier was already added to the agent.
Workflow 2: Iterative — Test Visual Design First
Use this workflow when you want to iterate on the agent's visual design before committing to the full carrier requirements. Create the agent with minimum parameters, test the design on a real device, update as needed, and then complete the remaining fields before submitting for launch.
1. Create or update the brand with details
Follow step 1 from Workflow 1. The brand must have the details field populated before the agent can be launched.
2. Create Agent with minimum parameters
Create the agent with only basic_info, visual_design, application_settings, and carriers. The carrier_requirements and representative fields are optional at creation and can be added later.
You must still provide at least one carrier in the carriers array.
{
"basic_info": {
"display_name": "Acme Bank",
"sender_id": "acme-bank",
"brand_id": "0198ecd4-da21-7f8b-91d8-ccfbaec485a7",
"hosting_region": "EUROPE",
"agent_purpose": "TRANSACTIONAL",
"billing_category": "SINGLE_MESSAGE"
},
"visual_design": {
"tagline": "Your trusted banking assistant",
"brand_color": "#FF5733",
"phone": [],
"email": [],
"website": []
},
"application_settings": { "application_id": "a1b2c3d4-..." },
"carriers": ["orange-spain"]
}
The agent returns an agent_id with state DRAFT, transitioning to CREATED in approximately 3–5 minutes.
3. Add a test device
POST /v2/channel-manager/rcs/agents/:agent_id/test-devices
{
"phone": "+34613994828"
}
4. Send a test message
Send a test message via the RCS Agent Builder UI and observe how the agent's visual design renders on the actual device.
5. Update the visual design if needed
If changes are needed, partially update the agent:
PATCH /v2/channel-manager/rcs/agents/:agent_id
{
"visual_design": {
"tagline": "Updated tagline",
"brand_color": "#0033CC",
"phone": [],
"email": [],
"website": []
}
}
Remember: PATCH replaces each top-level field in full — there is no deep merge. When sending visual_design, include all sub-fields you want to keep, not just the ones you are changing.
For fully automated carrier integrations, changes are typically live within 2–3 minutes. Carriers requiring manual processing may take longer.
Repeat steps 4–5 until the design is finalised.
6. Complete all fields and prepare for launch
Repeat steps 4–5 until the design is finalized.
6. Complete all fields and prepare for launch
Once the design is finalized, use PUT to provide all remaining fields:
{
"basic_info": { "..." : "..." },
"visual_design": { "..." : "..." },
"application_settings": { "application_id": "a1b2c3d4-..." },
"representative": {
"first_name": "Jane",
"last_name": "Doe",
"email": "jane.doe@example.com"
},
"carrier_requirements": {
"version": "v2",
"agent_preview": { "..." : "..." },
"consent_management": { "..." : "..." },
"engagement_flows": { "..." : "..." }
},
"carriers": ["orange-spain", "vodafone-france"]
}
PUT requires all fields. Omitting any top-level field will clear it.
7. Submit Agent for Launch
POST /v2/channel-manager/rcs/agents/:agent_id/launch
See step 5 of Workflow 1 for details on launch behavior and state transitions.
8. Add more carriers if needed
POST /v2/channel-manager/rcs/agents/:agent_id/carriers
{
"carriers": ["dt-germany"]
}
Ongoing Maintenance
If some metadata needs updating (logo, description), check which fields are editable post-verification or contact your Account Manager. Some may be locked.
Agent statuses
| Status | Description |
|---|---|
| DRAFT | Temporary status for a brief period after the agent information is submitted, while backend processes are initiated. The agent record is incomplete during this stage. |
| CREATED | The agent record is complete and securely stored in the system. Test devices can be added and test messages sent from this point. |
| PENDING | The agent has been submitted for launch. Carriers are reviewing the agent. The agent remains unavailable for production use until it passes all checks. |
| LAUNCHED | The agent has passed verification and received approval from at least one carrier. It is now active on those carriers and can be used as a sender in the Messages API. Approval is granted per-carrier — the agent may still be pending on other carriers. |
| REJECTED | The agent has been rejected by all carriers and cannot be launched. |
| UNLAUNCHED | The agent was previously launched but has since been suspended. |