# Create a campaign

{% hint style="danger" %}
To reduce the likelihood of rejection, ensure you are familiar with 10dlc registration examples and best practices. Specifically&#x20;

* Check [this article ](https://docs.bird.com/applications/channels/channels/supported-channels/sms/concepts/sms-registration/use-case-requirements-for-sms-registration)for tips on how to write an effective Campaign `description`
* Check [this article](https://docs.bird.com/applications/channels/channels/supported-channels/sms/concepts/sms-registration/setting-up-a-consent-gathering-flow) on how to write an effective `messageFlow`

Most 10DLC rejections are caused by unclear or incomplete `description and/or messageFlow`
{% endhint %}

{% hint style="warning" %}
A successful request to this endpoint will mean you are charged a [campaign registration fee](https://app.gitbook.com/s/U9kiDiTGVD8kkbnKKyEn/channels/channels/supported-channels/sms/concepts/united-states-sms-registration/sms-10dlc/campaign-registration#campaign-registration-and-subscription-fees) and a three-month minimum commitment fee. If you later need to update or resubmit your brand there may be additional fees.
{% endhint %}

{% hint style="info" %}

* You must have created a brand that has been approved, before creating a new campaign
* [If you operate as a Reseller](https://docs.bird.com/api/numbers-api/api-reference/10dlc-compliance/campaigns/optional-acting-as-reseller) ensure your Reseller registration is active before using the reseller field in POST campaigns&#x20;
  {% endhint %}

{% hint style="warning" %}
Handling Attachments

You will need to attach proof of opt-in and/or consent collection. To facilitate troubleshooting by both your team and the Bird team, we strongly recommend including a URL (e.g., to a third-party hosting service like Google Drive) directly in the `messageFlow` JSON field.

**Note**: The `attachment` vector is only supported via the UI and is **not** currently supported via API POST requests.
{% endhint %}

###

## Create campaign. A campaign can only be created for an approved brand.

> To create a campaign, it is essential to ensure that the brand has already been approved. Campaigns can only be initiated under the umbrella of brands that meet this prerequisite. Once a campaign is created, it cannot begin directing traffic immediately. Instead, it must go through a formal approval process. Only after the campaign has been reviewed and approved it will be authorized to send traffic.\
> \
> \*\*Attachments\*\*: You can include up to 5 file attachments (max 10MB each) by providing URLs in the \`attachmentUrls\` field. Both internal media service URLs and external URLs (e.g., Azure Blob Storage, AWS S3) are supported. External files are automatically downloaded and uploaded to the media service.<br>

```json
{"openapi":"3.0.3","info":{"title":"Numbers","version":"v1"},"tags":[{"description":"TCR Campaigns","name":"number_campaigns"}],"servers":[{"url":"https://api.bird.com","description":"Production API"}],"security":[{"accessKey":[]}],"components":{"securitySchemes":{"accessKey":{"description":"Uses the Authorization header: 'AccessKey ' followed by your access key token (e.g., 'Authorization: AccessKey AbCdEfGhIjKlMnOpQrStUvWxYzAbCdEfGhIj')","scheme":"AccessKey","type":"http"}},"schemas":{"CreateCampaign":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"Campaign name"},"usecase":{"type":"string","maxLength":50,"description":"A use case that best matches the purpose of the campaign."},"subUsecases":{"type":"array","uniqueItems":true,"description":"If use case is MIXED or LOW_VOLUME mixed an array of 2-5 use cases.","items":{"type":"string"}},"description":{"type":"string","maxLength":4096,"minLength":40,"description":"A detailed description of what the campaign is for."},"embeddedLink":{"type":"boolean","description":"Whether messages will contain links. Provide at least one sample containing a link."},"embeddedPhone":{"type":"boolean","description":"Whether messages will contain phone number. Provide at least one sample containing a phone number."},"numberPool":{"type":"boolean","description":"Whether a campaign will be associated with more than 50 numbers e.g. customer service use case."},"ageGated":{"type":"boolean","description":"Whether a campaign contains age-gated content based on carrier/ctia guidelines."},"directLending":{"type":"boolean","description":"Whether a campaign includes content related to direct lending or loan arrangements."},"subscriberOptin":{"type":"boolean","description":"Confirm customer opt in is collected and processed."},"subscriberOptout":{"type":"boolean","description":"Confirm customer opt out is collected and processed."},"subscriberHelp":{"type":"boolean","description":"Confirm an info message is returned if a customer sends \"HELP\"."},"samples":{"type":"array","description":"Between 1-5 sample messages. If directLending, embeddedPhone, embeddedLink is true provide relevant examples.","items":{"type":"string","minItems":1,"maxItems":5}},"attachmentUrls":{"type":"array","description":"Up to 5 attachment URLs (max 10MB each). Supports both internal media service URLs and external URLs.\n\n**Internal URLs**: Obtained via `POST /workspaces/{workspaceId}/tcr-brands/{brandId}/pre-signed-upload`\n\n**External URLs**: Any publicly accessible HTTPS URL (e.g., Azure Blob Storage, AWS S3). External files are automatically downloaded and uploaded to the media service.\n\nExamples:\n- `https://channels.messagebird.com/v1/media/temp/abc123` (internal)\n- `https://mybucket.blob.core.windows.net/files/consent.pdf?signature=...` (external)\n","uniqueItems":true,"items":{"type":"string","maxItems":5}},"messageFlow":{"type":"string","maxLength":2048,"minLength":40,"description":"Provide details of how the customer will opt into this campaign. If you have a live web opt-in provide the URL and ensure the page has details on the T&Cs/data collection for opting in, and how to opt out."},"helpMessage":{"type":"string","maxLength":255,"minLength":20,"description":"Help message of the campaign. A help message shall state the name of the service, contact (email or call centre), OPT IN and OPT OUT keywords."},"helpKeywords":{"type":"string","description":"A comma separated list of keywords. Support of the word HELP is the minimum requirement for requesting help/info."},"optoutKeywords":{"type":"string","description":"A comma separated list of keywords. Support of the word STOP is the minimum requirement for OPT OUT."},"optinKeywords":{"type":"string","description":"A comma separated list of keywords. Support of the word START is the minimum requirement for OPT OUT."},"optinMessage":{"type":"string","minLength":20,"description":"Provide an example of the message that will be sent after a customer has opted in."},"optoutMessage":{"type":"string","minLength":20,"description":"Provide an example of the message that will be sent after a customer has opted out."},"termsAndConditions":{"type":"boolean","enum":[true],"description":"Indicates the campaign follows CTIA messaging principles and best practices."},"resellerId":{"type":"string","format":"uuid","description":"UUID of the reseller associated with this campaign. The specified reseller MUST be ACTIVE.","nullable":true}},"required":["name","usecase","description","samples","messageFlow","helpMessage","termsAndConditions"]},"Campaign":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","description":"UUID of the campaign.","format":"uuid"},"name":{"type":"string","description":"Campaign name"},"subscription":{"$ref":"#/components/schemas/CampaignSubscription"},"status":{"type":"string","description":"Campaign status","enum":["DRAFT","FAILED","PENDING","REJECTED","APPROVED","DECLINED","SUSPENDED","DELETED","EXPIRED"]},"usecase":{"type":"string","description":"A use case that best matches the purpose of the campaign."},"subUsecases":{"type":"array","description":"If use case is MIXED or LOW_VOLUME mixed an array of 2-5 use cases.","items":{"type":"string"},"nullable":true},"description":{"type":"string","description":"A detailed description of what the campaign is for."},"embeddedLink":{"type":"boolean","description":"Whether messages will contain links. Provide at least one sample containing a link."},"embeddedPhone":{"type":"boolean","description":"Whether messages will contain phone number. Provide at least one sample containing a phone number."},"numberPool":{"type":"boolean","description":"Whether a campaign will be associated with more than 50 numbers e.g. customer service use case."},"ageGated":{"type":"boolean","description":"Whether a campaign contains age-gated content based on carrier/ctia guidelines."},"directLending":{"type":"boolean","description":"Whether a campaign includes content related to direct lending or loan arrangements."},"subscriberOptin":{"type":"boolean","description":"Confirm customer opt in is collected and processed."},"subscriberOptout":{"type":"boolean","description":"Confirm customer opt out is collected and processed."},"subscriberHelp":{"type":"boolean","description":"Confirm an info message is returned if a customer sends \"HELP\"."},"samples":{"type":"array","description":"Between 1-5 sample messages. If directLending, embeddedPhone, embeddedLink is true provide relevant examples.","items":{"type":"string","minItems":1,"maxItems":5}},"messageFlow":{"type":"string","description":"Provide details of how the customer will opt into this campaign. If you have a live web opt-in provide the URL and ensure the page has details on the T&Cs/data collection for opting in, and how to opt out."},"helpMessage":{"type":"string","description":"Help message of the campaign. A help message shall state the name of the service, contact (email or call centre), OPT IN and OPT OUT keywords."},"helpKeywords":{"type":"string","description":"A comma separated list of keywords. Support of the word HELP is the minimum requirement for requesting help/info."},"optoutKeywords":{"type":"string","description":"A comma separated list of keywords. Support of the word STOP is the minimum requirement for OPT OUT."},"optinKeywords":{"type":"string","description":"A comma separated list of keywords. Support of the word START is the minimum requirement for OPT OUT."},"optinMessage":{"type":"string","description":"Provide an example of the message that will be sent after a customer has opted in."},"optoutMessage":{"type":"string","description":"Provide an example of the message that will be sent after a customer has opted out."},"termsAndConditions":{"type":"boolean","description":"Indicates the campaign follows CTIA messaging principles and best practices."},"brandId":{"type":"string","description":"UUID of the brand associated with this campaign. The specified brand MUST be APPROVED.","format":"uuid"},"resellerId":{"type":"string","description":"UUID of the reseller associated with this campaign. The specified reseller MUST be ACTIVE.","nullable":true},"rejection":{"type":"object","description":"Rejection details","required":["description"],"properties":{"description":{"type":"string","description":"Rejection description"},"code":{"type":"string","description":"Rejection code"}}},"attachments":{"type":"array","description":"Attachments associated with this campaign.","items":{"$ref":"#/components/schemas/Attachment"}},"createdAt":{"type":"string","description":"Timestamp (UTC) when the campaign was created.","format":"date-time"},"updatedAt":{"type":"string","description":"Timestamp (UTC) when the campaign was last updated.","format":"date-time"}}},"CampaignSubscription":{"type":"object","title":"CampaignSubscription","additionalProperties":false,"description":"Describes status of Campaign Subscription","nullable":true,"properties":{"status":{"type":"string","enum":["active","inactive","canceling"]},"subscribedAt":{"type":"string","description":"Timestamp (UTC) when the subscription became active.","format":"date-time"},"updatedAt":{"type":"string","description":"Timestamp (UTC) when the subscription was last updated.","nullable":true,"format":"date-time"},"cancelledAt":{"type":"string","description":"Timestamp (UTC) when the subscription was cancelled.","nullable":true,"format":"date-time"}}},"Attachment":{"type":"object","additionalProperties":false,"required":["id","status","filename","contentType","createdAt","updatedAt"],"properties":{"id":{"type":"string","description":"The ID of the attachment.","format":"uuid"},"status":{"$ref":"#/components/schemas/AttachmentStatus"},"createdAt":{"type":"string","description":"Timestamp (UTC) when the attachment was created.","format":"date-time"},"updatedAt":{"type":"string","description":"Timestamp (UTC) when the attachment was last updated.","nullable":true,"format":"date-time"},"filename":{"type":"string","description":"The original name of the file when it was uploaded."},"mediaUrl":{"type":"string","description":"The URL to download the attachment."},"contentType":{"type":"string","description":"The detected MIME type of the file."}}},"AttachmentStatus":{"type":"string","description":"Attachment status","enum":["PENDING","ACTIVE","PENDING_DELETION","DELETED","FAILED","FAILED_DELETION"]},"ValidationError":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"A unique code that identifies the error. This code can be used to programmatically identify the error.\n","minLength":5},"message":{"type":"string","minLength":5,"description":"A human-readable message that describes the error. An example is 'The request body is missing the required field `service`.'\n"},"details":{"type":"object","additionalProperties":true,"description":"Additional details about the error. This object can contain any additional information that may be useful for debugging.\n"}}}}},"paths":{"/workspaces/{workspaceId}/tcr-brands/{brandId}/campaigns":{"post":{"description":"To create a campaign, it is essential to ensure that the brand has already been approved. Campaigns can only be initiated under the umbrella of brands that meet this prerequisite. Once a campaign is created, it cannot begin directing traffic immediately. Instead, it must go through a formal approval process. Only after the campaign has been reviewed and approved it will be authorized to send traffic.\n\n**Attachments**: You can include up to 5 file attachments (max 10MB each) by providing URLs in the `attachmentUrls` field. Both internal media service URLs and external URLs (e.g., Azure Blob Storage, AWS S3) are supported. External files are automatically downloaded and uploaded to the media service.\n","operationId":"createTCRCampaign","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCampaign"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Campaign"}}},"description":"Campaign successfully created"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}},"description":"Invalid campaign"}},"summary":"Create campaign. A campaign can only be created for an approved brand.","tags":["number_campaigns"]}}}}
```

## CampaignRequest object

<table><thead><tr><th width="199">Field</th><th>Type</th><th>Description</th><th>Mandatory</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>Name of your use case</td><td>Required</td></tr><tr><td>useCase</td><td><a href="../../tcr-enums#usecases">useCase</a></td><td>A use case that best matches the purpose of the campaign</td><td>Required</td></tr><tr><td>subUsecases</td><td>array&#x3C;<a href="../../tcr-enums#usecases">useCase</a>></td><td>If use case is MIXED or LOW_VOLUME mixed an array of 2-5 use cases</td><td>Optional. Unless useCase is LOW_VOLUME, MIXED</td></tr><tr><td>description</td><td>string</td><td>A detailed description of what the campaign is for</td><td>Required</td></tr><tr><td>embeddedLink</td><td>boolean</td><td>Whether messages will contain links. Provide at least one sample containing a link</td><td>Required</td></tr><tr><td>embeddedPhone</td><td>boolean</td><td>Whether messages will contain phone number. Provide at least one sample containing a phone number</td><td>Required</td></tr><tr><td>numberPool</td><td>boolean</td><td>Whether a campaign will be associated with more than 50 numbers e.g. customer service use case</td><td>Required</td></tr><tr><td>ageGated</td><td>boolean</td><td>Whether a campaign contains age-gated content based on carrier/ctia guidelines</td><td>Required</td></tr><tr><td>directLending</td><td>boolean</td><td>Whether a campaign includes content related to direct lending or loan arrangements</td><td>Required</td></tr><tr><td>subscriberOptin</td><td>boolean</td><td>Confirm customer opt in is collected and processed</td><td>Required</td></tr><tr><td>subscriberOptout</td><td>boolean</td><td>Confirm customer opt out is collected and processed</td><td>Required</td></tr><tr><td>subscriberHelp</td><td>boolean</td><td>Confirm an info message is returned if a customer sends “HELP”</td><td>Required</td></tr><tr><td>samples</td><td>array&#x3C;string></td><td>Between 1-5 sample messages. If directLending, embeddedPhone, embeddedLink is true provide relevant examples</td><td>Required. At least 1 sample</td></tr><tr><td>messageFlow</td><td>string</td><td>Provide details of how the customer will opt into this campaign. If you have a live web opt-in provide the URL and ensure the page has details on the T&#x26;Cs/data collection for opting in, and how to opt out</td><td>Required</td></tr><tr><td>helpKeywords</td><td>string</td><td>A comma separated list of keywords. Support of the word HELP is the minimum requirement for requesting help/info.</td><td>Required</td></tr><tr><td>optoutKeywords</td><td>string</td><td>A comma separated list of keywords. Support of the word STOP is the minimum requirement for OPT OUT.</td><td>Required</td></tr><tr><td>optInKeywords</td><td>string</td><td>A comma separated list of keywords. Support of the word START is the minimum requirement for OPT OUT.</td><td>Optional. Required if subscriberOptin is true</td></tr><tr><td>helpMessage</td><td>string</td><td>Help message of the campaign. A help message shall state the name of the service, contact (email or call centre), OPT IN and OPT OUT keywords.</td><td>Required</td></tr><tr><td>optinMessage</td><td>string</td><td><br>Provide an example of the message that will be sent after a customer has opted in.</td><td>Optional. Required if subscriberOptin is true</td></tr><tr><td>optoutMessage</td><td>sting</td><td>Provide an example of the message that will be sent after a customer has opted out.</td><td>Required</td></tr><tr><td>termsAndConditions</td><td>boolean</td><td>Indicates the campaign follows CTIA messaging principles and best practices</td><td>Required</td></tr></tbody></table>

## CampaignResponse object

| Field              | Type                                                                                           | Description                                                                                                                                                                                                   |
| ------------------ | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| useCase            | [useCase](https://docs.bird.com/api/numbers-api/api-reference/tcr-enums#usecases)              | A use case that best matches the purpose of the campaign                                                                                                                                                      |
| subUsecases        | array<[useCase](https://docs.bird.com/api/numbers-api/api-reference/tcr-enums#usecases)>       | If use case is MIXED or LOW\_VOLUME mixed an array of 2-5 use cases                                                                                                                                           |
| description        | string                                                                                         | A detailed description of what the campaign is for                                                                                                                                                            |
| embeddedLink       | boolean                                                                                        | Whether messages will contain links. Provide at least one sample containing a link                                                                                                                            |
| embeddedPhone      | boolean                                                                                        | Whether messages will contain phone number. Provide at least one sample containing a phone number                                                                                                             |
| numberPool         | boolean                                                                                        | Whether a campaign will be associated with more than 50 numbers e.g. customer service use case                                                                                                                |
| ageGated           | boolean                                                                                        | Whether a campaign contains age-gated content based on carrier/ctia guidelines                                                                                                                                |
| directLending      | boolean                                                                                        | Whether a campaign includes content related to direct lending or loan arrangements                                                                                                                            |
| subscriberOptin    | boolean                                                                                        | Confirm customer opt in is collected and processed                                                                                                                                                            |
| subscriberOptout   | boolean                                                                                        | Confirm customer opt out is collected and processed                                                                                                                                                           |
| subscriberHelp     | boolean                                                                                        | Confirm an info message is returned if a customer sends “HELP”                                                                                                                                                |
| samples            | array\<string>                                                                                 | Between 1-5 sample messages. If directLending, embeddedPhone, embeddedLink is true provide relevant examples                                                                                                  |
| messageFlow        | string                                                                                         | Provide details of how the customer will opt into this campaign. If you have a live web opt-in provide the URL and ensure the page has details on the T\&Cs/data collection for opting in, and how to opt out |
| helpKeywords       | string                                                                                         | A comma separated list of keywords. Support of the word HELP is the minimum requirement for requesting help/info.                                                                                             |
| optoutKeywords     | string                                                                                         | A comma separated list of keywords. Support of the word STOP is the minimum requirement for OPT OUT.                                                                                                          |
| optInKeywords      | string                                                                                         | A comma separated list of keywords. Support of the word START is the minimum requirement for OPT OUT.                                                                                                         |
| helpMessage        | string                                                                                         | Help message of the campaign. A help message shall state the name of the service, contact (email or call centre), OPT IN and OPT OUT keywords.                                                                |
| optinMessage       | string                                                                                         | <p><br></p>                                                                                                                                                                                                   |
| optoutMessage      | sting                                                                                          | Provide an example of the message that will be sent after a customer has opted in.                                                                                                                            |
| termsAndConditions | boolean                                                                                        | Indicates the campaign follows CTIA messaging principles and best practices                                                                                                                                   |
| brandId            | string                                                                                         | Alphanumeric identifier of the brand associated with this campaign. The specified brand MUST be APPROVED.                                                                                                     |
| campaignId         | string                                                                                         | Alphanumeric identifier of the campaign                                                                                                                                                                       |
| campaignStatus     | [campaignStatus](https://docs.bird.com/api/numbers-api/api-reference/tcr-enums#campaignstatus) | Campaign status                                                                                                                                                                                               |
