---
title: "Create or Update RCS Campaign"
method: POST
path: "/campaigns/rcs"
tags: ["campaigns > RCS"]
---

# Create or Update RCS Campaign

`POST /campaigns/rcs`

## Request

- Base URL: `https://api.pinnacle.sh`
- URL: `https://api.pinnacle.sh/campaigns/rcs`
- Auth: API key in header `PINNACLE-API-KEY`

Create a new RCS campaign or update an existing one.

<Note>
**To create a new campaign:** Omit `campaignId` — one will be generated automatically.

**Before you start:** Create a [brand](/api-reference/brands/upsert) first — you'll need its `id` for the [`brand`](#request.body.brand) field.

All fields are **required** unless specified otherwise, and will be validated when [submitted](/api-reference/campaigns/rcs/submit).
</Note>

## Request body

- UpsertRCSSchema
  - `agent` RCSAgent: Create an agent for the campaign.
    - `color` string: Color of the agent's buttons. <br> Must have sufficient contrast with white.
    - `description` string: Description of the agent. <br> Be clear, concise, user-focused, and highlight what the agent does and the benefits it provides for the user.
    - `emails` UpsertRcsSchemaAgentEmailsItems[]: List of emails. <br><br> **Limit:** 1 to 3
      - `email` string: Email attached to the agent.
      - `label` string: Label for the email.
    - `heroUrl` string: Link to the agent's hero. Hero must be an image file with dimensions 1440x448px.
    - `iconUrl` string: Link to the agent's icon. Icon must be an image file with dimensions 224x224px.
    - `name` string: Name of the agent. <br> Recommended format: [Brand Name] - [1-2 word description of purpose]
    - `phones` UpsertRcsSchemaAgentPhonesItems[]: List of phone numbers. <br><br> **Limit:** 1 to 3
      - `label` string: Label for the phone number.
      - `phone` string: Phone number attached to the agent in E.164 format.
    - `websites` UpsertRcsSchemaAgentWebsitesItems[]: List of urls. <br><br> **Limit:** 1 to 3
      - `label` string: Label for the url.
      - `url` string: Url attached to the agent.
  - `brand` string: Unique identifier for the brand.
  - `campaignId` string: Unique identifier for the campaign.
  - `expectedAgentResponses` string[]: List of what the agent might say to users. See the [Expected Agent Responses](/guides/campaigns/rcs-compliance#expected-agent-responses) section for requirements. <br><br> **Limit:** 1 to 5
  - `links` RCSLinks: Legal documentation links.
    - `privacyPolicy` string, url: Privacy policy URL.
    - `termsOfService` string, url: Terms of service URL.
  - `useCaseDescription` string: Detailed summary of what the brand is and how this agent will be used. See the [Use Case Behavior](/guides/campaigns/rcs-compliance#use-case-behavior) section for requirements.
  - `messagingType` 'OTP' | 'TRANSACTIONAL' | 'PROMOTIONAL' | 'MULTI_USE': Type of message the agent sends.<br> `OTP`: One time passwords or verification codes. <br> `TRANSACTIONAL`: Account updates, alerts, or notifications.<br> `PROMOTIONAL`: Marketing, sales, or offers.<br> `MULTI_USE`: Mixed message types.<br>
  - `ctaMedia` string: URL to the opt-in form or a URL to a screenshot of the opt-in CTA.
  - `optInMethod` string: Details on how opt-in is acquired. If it is done through a website or app, provide the link. See the [Opt-In Method](/guides/campaigns/rcs-compliance#opt-in-method) section for requirements.
  - `keywords` RCSCampaignKeywords
    - `HELP` RCSCampaignHelpKeywords
      - `message` string: Message sent when a user sends HELP. Must include at least one support contact method (phone, email, or website). See the [Keyword Response Messages](/guides/campaigns/rcs-compliance#keyword-response-messages) section for requirements.
      - `keywords` string[]: Keywords that trigger help response (HELP, SUPPORT, INFO, etc).
    - `OPT_IN` RCSCampaignOptInKeywords
      - `message` string: Message sent when a user opts in. Must include brand name, confirmation of subscription, and disclosures (STOP and HELP instructions, message and data rates). See the [Keyword Response Messages](/guides/campaigns/rcs-compliance#keyword-response-messages) section for requirements.
      - `keywords` string[]: Keywords that trigger opt-in response (START, SUBSCRIBE, JOIN, etc).
    - `OPT_OUT` RCSCampaignOptOutKeywords
      - `message` string: Message sent when a user opts out. Must include brand name, acknowledge opt-out request, and state user will not receive further messages. No marketing or re-engagement attempts. See the [Keyword Response Messages](/guides/campaigns/rcs-compliance#keyword-response-messages) section for requirements.
      - `keywords` string[]: Keywords that trigger opt-out response (END, UNSUBSCRIBE, STOP, etc).
  - `traffic` RCSCampaignTraffic
    - `monthlyWebsite` integer: Estimated monthly website visitors.
    - `monthlyRcsEstimate` integer: Estimated monthly RCS messages sent.
  - `ctaLanguage` string: Required text that appears next to the opt-in checkbox for your opt-in form. This checkbox has to be unchecked by default. See the [CTA Language](/guides/campaigns/rcs-compliance#cta-language-opt-in-disclosure) section for requirements.
  - `demoTrigger` string: Instructions on how an external reviewer can trigger messages and an example flow from the agent. This is usually an inbound text message to the agent that will start a flow of messages between the agent and the user. See the [Demo Trigger](/guides/campaigns/rcs-compliance#demo-trigger) section for requirements.

## Response `200`

Successfully created or updated RCS campaign.

- RcsCampaignSchemaExtra
  - `agent` RcsCampaignSchemaExtraAgent, required: Agent configured to the campaign.
    - `color` string: Color of the agent's buttons.
    - `description` string: Description of the agent.
    - `emails` RcsCampaignSchemaExtraAgentEmailsItems[], required: List of emails.
      - `email` string: Email attached to the agent.
      - `label` string: Label for the email.
    - `heroUrl` string: Link to the agent's hero. Hero must be an image file with dimensions 1440x448px.
    - `iconUrl` string: Link to the agent's icon. Icon must be an image file with dimensions 224x224px.
    - `name` string: Name of the agent.
    - `phones` RcsCampaignSchemaExtraAgentPhonesItems[], required: List of phone numbers.
      - `label` string: Label for the phone number.
      - `phone` string: Phone number attached to the agent in E.164 format.
    - `websites` RcsCampaignSchemaExtraAgentWebsitesItems[], required: List of urls.
      - `label` string: Label for the url.
      - `url` string: Url attached to the agent.
  - `agentId` string, required: Agent's unique identifier.
  - `brand` ExtendedBrand, required
    - `createdAt` string, required: ISO 8601 formatted timestamp of when this brand was added to our system.
    - `id` string, required: The brand's ID. This identifier is a string that always begins with the prefix `b_`, for example: `b_1234567890`.
    - `isArchived` boolean, required: Indicates if this brand is archived.
    - `status` 'PENDING' | 'UNVERIFIED' | 'VERIFIED' | 'VETTED' | 'FAILED' | 'INCOMPLETE', required: Current review status of the brand. `INCOMPLETE`: Has not been submitted. `PENDING`: Currently being reviewed. `VERIFIED`: Verified and good to go. `UNVERIFIED`: No longer verified due to an update in the brand details. `VETTED`: Brand has been vetted by an external provider and has received vetting scores.
    - `updatedAt` string, required: ISO 8601 formatted timestamp of when this brand was last updated.
    - `address` string: Primary brand address where this brand is located.
    - `contact` OptionalContactSchema: Contact information for the primary brand representative.
      - `email` string: Email address of the contact person.
      - `name` string: Full name of the contact person.
      - `phone` string: Phone number of the contact person in E.164 format.
      - `title` string: Job title or position oft he contact person.
    - `dba` string, nullable: "Doing Business As" name - the public name this brand operates under.
    - `description` string: Brief description of what this brand does.
    - `ein` string: Employer Identification Number (EIN) assigned by the IRS.
    - `email` string: Main contact email address for this brand.
    - `name` string: Legal name of the brand as registered.
    - `sector` 'AGRICULTURE' | 'COMMUNICATION' | 'CONSTRUCTION' | 'EDUCATION' | 'ENERGY' | 'ENTERTAINMENT' | 'FINANCIAL' | 'GAMBLING' | 'GOVERNMENT' | 'HEALTHCARE' | 'HOSPITALITY' | 'INSURANCE' | 'MANUFACTURING' | 'NGO' | 'REAL_ESTATE' | 'RETAIL' | 'TECHNOLOGY': Industry the Brand operates in.
    - `type` 'GOVERNMENT' | 'NON_PROFIT' | 'PRIVATE_PROFIT' | 'PUBLIC_PROFIT' | 'SOLE_PROPRIETOR': Legal structure of the brand.
    - `entityType` 'LLC' | 'SOLE_PROPRIETORSHIP' | 'PARTNERSHIP' | 'CORP' | 'S_CORP': Legal entity type of the brand.
    - `website` string: Brand website URL.
  - `campaignId` string: Unique identifier for the campaign. This identifier is a string that always begins with the prefix `rcs_`, for example: `rcs_1234567890`.
  - `expectedAgentResponses` string[]: List of what the agent might say to users. See the [Expected Agent Responses](/guides/campaigns/rcs-compliance#expected-agent-responses) section for requirements.
  - `links` RcsCampaignSchemaExtraLinks: Legal documentation links.
    - `privacyPolicy` string, url: Privacy policy URL.
    - `termsOfService` string, url: Terms of service URL.
  - `status` 'INCOMPLETE' | 'IN REVIEW' | 'VERIFIED' | 'FAILED', required: Current review status of the campaign. <br> `INCOMPLETE`: Not submitted. <br> `IN REVIEW`: Being reviewed by carriers. <br> `VERIFIED`: Approved and ready to send messages.<br> `FAILED`: Issues and errors related to the campaign's details.
  - `useCaseDescription` string: Detailed summary of what the brand is and how this agent will be used. See the [Use Case Behavior](/guides/campaigns/rcs-compliance#use-case-behavior) section for requirements.
  - `messagingType` 'OTP' | 'TRANSACTIONAL' | 'PROMOTIONAL' | 'MULTI_USE': Type of message the agent sends.<br> `OTP`: One time passwords or verification codes. <br> `TRANSACTIONAL`: Account updates, alerts, or notifications.<br> `PROMOTIONAL`: Marketing, sales, or offers.<br> `MULTI_USE`: Mixed message types.<br>
  - `ctaMedia` string: URL to the opt-in form or a URL to a screenshot of the opt-in CTA.
  - `optInMethod` string: Details on how opt-in is acquired. If it is done through a website or app, provide the link. See the [Opt-In Method](/guides/campaigns/rcs-compliance#opt-in-method) section for requirements.
  - `keywords` RcsCampaignSchemaExtraKeywords
    - `HELP` RcsCampaignSchemaExtraKeywordsHelp
      - `message` string: Message sent when a user sends HELP. Must include at least one support contact method (phone, email, or website). See the [Keyword Response Messages](/guides/campaigns/rcs-compliance#keyword-response-messages) section for requirements.
      - `keywords` string[]: Keywords that trigger help response.
    - `OPT_IN` RcsCampaignSchemaExtraKeywordsOptIn
      - `message` string: Message sent when a user opts in. Must include brand name, confirmation of subscription, and disclosures (STOP and HELP instructions, message and data rates). See the [Keyword Response Messages](/guides/campaigns/rcs-compliance#keyword-response-messages) section for requirements.
      - `keywords` string[]: Keywords that trigger opt-in response.
    - `OPT_OUT` RcsCampaignSchemaExtraKeywordsOptOut
      - `message` string: Message sent when a user opts out. Must include brand name, acknowledge opt-out request and state user will not receive further messages. No marketing or re-engagement attempts. See the [Keyword Response Messages](/guides/campaigns/rcs-compliance#keyword-response-messages) section for requirements.
      - `keywords` string[]: Keywords that trigger opt-out response.
  - `traffic` RcsCampaignSchemaExtraTraffic
    - `monthlyWebsite` integer: Estimated monthly website visitors.
    - `monthlyRcsEstimate` integer: Estimated monthly RCS messages sent.
  - `ctaLanguage` string: Required text that appears next to the opt-in checkbox for your opt-in form. This checkbox has to be unchecked by default. See the [CTA Language](/guides/campaigns/rcs-compliance#cta-language-opt-in-disclosure) section for requirements.
  - `demoTrigger` string: Instructions on how an external reviewer can trigger messages and an example flow from the agent. This is usually an inbound text message to the agent that will start a flow of messages between the agent and the user. See the [Demo Trigger](/guides/campaigns/rcs-compliance#demo-trigger) section for requirements.

## Other responses

- `400`: Validation failed. The payload has missing required fields and/or invalid types. <br> See https://zod.dev/error-formatting for more information.
- `401`: The request lacks valid authentication credentials or the provided credentials are invalid. <br> Ensure you're including a valid API key in the request headers and that your account has the necessary permissions to access this endpoint.
- `403`: Your subscription does not include access to this feature. <br> This occurs when attempting to use functionality that requires a higher subscription tier. Please upgrade your subscription to access this feature.
- `404`: The requested resource could not be found. <br> This may occur if the identifier is incorrect, the resource has been deleted, or you don't have permission to access it.
- `500`: An unexpected error occurred on Pinnacle's servers while processing your request. <br> If this error persists, please contact support with the request details.

---

[API](https://skmtc.dev/pinnacle/apis/pinnacle-2.md) - [All operations](https://skmtc.dev/pinnacle/apis/pinnacle-2/llms.txt) - [OpenAPI document](https://skmtc.dev/pinnacle/apis/pinnacle-2/revisions/45416dadab79?raw)
