# Create new Campaign in TCR Create a 10DLC campaign at TCR (The Campaign Registry). Campaign fees and carrier requirements are determined by the brand and use-case being used. To check the campaign requirements, use the campaign:qualify API. Endpoint: POST /v1/projects/{projectId}/campaignRegistrations:submit Version: 1.0 Security: BasicAuth, OAuth2 ## Path parameters: - `projectId` (string, required) Sinch uses projects to group resources such as contacts and apps together to manage and connect a unique set of keys and secret IDs for all your Sinch API products. To identify a project, it is given a unique alphanumeric identifier that ties it to your account. Your project ID can be found in the Customer Dashboard. ## Request fields (application/json): - `brandId` (string, required) The brand is the company or entity represented in the campaign. The brand ID is an alphanumeric identifier that always begins with a "B". When registering a brand in The Campaign Registry (TCR), TCR returns a brand ID value, example: BESINCH. For more info, see [Brand Registrations](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/tag/Brand-Registration/). - `useCase` (string, required) Select a use case that is the primary use case that is most applicable to the service that messages are providing to subscribers. Standard use cases are immediately available for all qualified registered brands, whereas special use cases require vetting or pre/post approval by mobile network operators (MNOs). Special use cases are sensitive or critical in nature and may require vetting or pre/post registration approval by mobile network operators (MNOs). Requirements may vary according to each MNO. For more information on standard use case versus special use case campaigns, see [10DLC Use Cases - Standard Use Cases vs Special Use Cases](https://community.sinch.com/t5/10DLC/10DLC-Use-Cases-Standard-Use-Cases-vs-Special-Use-Cases/ta-p/7028/). Enum: "2FA", "ACCOUNT_NOTIFICATION", "CUSTOMER_CARE", "DELIVERY_NOTIFICATION", "FRAUD_ALERT", "HIGHER_EDUCATION", "LOW_VOLUME", "MARKETING", "MIXED", "POLLING_VOTING", "PUBLIC_SERVICE_ANNOUNCEMENT", "SECURITY_ALERT", "AGENTS_FRANCHISES", "CARRIER_EXEMPT", "CHARITY", "EMERGENCY", "K12_EDUCATION", "POLITICAL", "PROXY", "SOCIAL", "SWEEPSTAKE" - `campaignName` (string, required) This is an optional name to help track and view your campaign within Sinch's platform. Use a name that is easily recognizable, this will help you identify your campaign later within the Sinch customer dashboard. This name is not part of the campaign registration in TCR. - `description` (string, required) Describe in detail the service the message program is providing to the end user and the purpose of the brand's messages (i.e. appointment reminders, OTP alerts, etc.). The description should match the selected use case and identify who is sending the messages, who is receiving the messages, and why messages are being sent. - `sample1` (string, required) Provide sample production message content. Include the Brand name and opt out instructions (e.g. Reply STOP to stop) in every message. If you have selected Mixed use case, please provide examples of each sub use case selected. Example: "{Brand name}: We are contacting you today to let you know your order is ready for pickup. Reply STOP to stop." - `sample2` (string, required) Message sample. Some campaign tiers require 2 or more message samples, depending on sub-usecases. Example: "{Brand name}: Your confirmation code is SINCH1234. Please enter it on the authentication website. Reply STOP to stop." - `sample3` (string, required) Message sample. Some campaign tiers require 3 or more message samples, depending on sub-usecases. Example: "{Brand name}: Shop at www.example.com for all your retail needs! From clothing to home goods, we've got you covered. Visit us today and save! Reply STOP to stop. " - `stopMessage` (string, required) Message sent in response to a STOP keyword. It must confirm that the end user has unsubscribed from the message program and will not receive any further messages. Include the brand name. You can also include customer care contact information (e.g. support email or phone number). Example: "You have been unsubscribed and will not receive any more messages from {Brand name}. For more information call {phone number} or email {email address}." - `optInMessage` (string, required) Initial message that is sent confirming the end user's subscription. Include the brand name, opt-out instructions (reply STOP to stop), customer care instructions (reply HELP for help), message frequency (#msgs/mo, msg frequency varies, recurring messages, etc.) and the "message and data rates may apply" disclosure (Msg & Data rates may apply). Example: "You have opted in to receive messages from {Brand name}! Msg freq varies. Msg & data rates may apply. Reply HELP for help. Reply STOP to stop." - `helpMessage` (string, required) Message sent in response to HELP. Include the brand name and additional customer care contact information (e.g. support email or phone number). Example: "{Brand name}: For help call {phone number} or email {email address} Reply STOP to stop." - `autoRenewal` (boolean, required) Will your campaign automatically renew? If "Yes", a monthly recurring fee will be charged to the account. If "No", only the initial setup fee will be charged, and the campaign will expire after three months unless it is reviewed manually. - `embeddedLink` (boolean, required) Will your message content include a URL? Note that public URL shorteners are not allowed. - `embeddedPhone` (boolean, required) Will your message content include embedded phone numbers? - `numberPool` (boolean, required) Will your campaign support a number pool (more than 50 numbers)? If yes, your use case should clearly support the need for a number pool. For more info, see [When should I use a number pool for my 10DLC campaign](https://community.sinch.com/t5/10DLC/When-should-I-use-a-number-pool-for-my-10DLC-campaign/ta-p/12432). - `ageGated` (boolean, required) Will your traffic include any content related to age-restricted goods or services? If yes, you must implement an age gate verification process. - `directLending` (boolean, required) Are you a financial institution engaged in direct, first-party lending to your customers? If yes, note that your campaign description should clearly indicate direct lending, even if your use case is not related to your lending services (e.g. OTP). - `subscriberOptIn` (boolean, required) Will your campaign collect and process end user opt-ins? This is mandatory for all use cases, except for Machine-to-Machine. - `subscriberOptOut` (boolean, required) Message sent in response to a STOP keyword. It must confirm that the end user has unsubscribed from the message program and will not receive any further messages. Include the brand name. You can also include customer care contact information (e.g. support email or phone number). - `subscriberHelp` (boolean, required) Message sent in response to HELP. Include the brand name and additional customer care contact information (e.g. support email or phone number). - `optinKeywords` (string, required) If subscribers can opt-in via a keyword, enter keyword(s) here (alphanumeric comma separated values, no blank spaces). Example: "Join,Subscribe,Agree" - `optoutKeywords` (string, required) Subscriber opt-out keywords. Default values are STOP, QUIT, END, CANCEL and UNSUBSCRIBE. If you accept additional opt-out keywords, you can enter them here (alphanumeric comma separated values, no blank spaces). Example: "Stop,Quit,Cancel" - `helpKeywords` (string, required) Subscriber help keywords. Default value is HELP. If you accept additional help keywords, you can enter them here. (alphanumeric comma separated values, no blank spaces). Example: "Help,Info" - `messageFlow` (string, required) Provide instructions for how end users opt-in to receive messages. A compliant opt-in is critical to the approval of your campaign. Include all opt-in mechanisms (e.g. keyword/text-to-join, online form, point-of-sale (POS) system, verbal consent, interactive voice response (IVR) system, paper form) and a clear program description. The Call-to-Action should include opt-out instructions (reply STOP to stop), customer care instructions (reply HELP for help), message frequency (#msgs/mo, msg frequency varies, recurring messages, etc.) and message and data rates disclosure (Msg & Data rates may apply). Example: "Users will opt-in to receive messages from {Brand name} via {opt-in mechanism}" - `sample4` (string) Message sample. Some campaign tiers require 4 or more message samples, depending on sub-usecases. - `subUseCases` (array) If you have selected a mixed use case, select all sub use cases that apply to your message program. Choose between 2 and 5 sub use cases for this campaign. The input(s) should be one of the accepted enum values. Enum: "2FA", "ACCOUNT_NOTIFICATION", "CUSTOMER_CARE", "DELIVERY_NOTIFICATION", "FRAUD_ALERT", "HIGHER_EDUCATION", "MARKETING", "POLLING_VOTING", "PUBLIC_SERVICE_ANNOUNCEMENT", "SECURITY_ALERT" - `terms_and_conditions_link` (string) A URL to a page containing the terms and conditions. Example: "https://my.website.com/toc" - `privacy_policy_link` (string) A URL to a page containing the privacy policy. Example: "https://my.website.com/privacy_policy" - `attachments` (boolean) If this property is set to true, this will delay the submission of the campaign until all necessary documentation is uploaded using the [Upload Campaign Files](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/tag/10DLC-Campaign-Registration/#tag/10DLC-Campaign-Registration/operation/CampaignRegistrationExternalService_UploadCampaignFiles) operation. - `vertical` (string) This field has been deprecated and is no longer being captured. ## Response 200 fields (application/json): - `campaignRegistrationId` (string) Sinch generated campaign ID (ULID format). Note that this is not the TCR campaign ID. The TCR Campaign ID will be available once the campaign has been approved and submitted to TCR. ## Response 400 fields (application/json): - `error` (object, required) - `error.code` (integer, required) The error code. Example: 400 - `error.message` (string, required) The error message. Example: "Invalid argument." - `error.status` (string) The status of the error. Example: "INVALID_ARGUMENT" - `error.details` (array) An array of objects describing the error in more detail, if applicable. - `error.details.type` (string) A more specific description of the error. Example: "BadRequest" - `error.details.resourceType` (string) The type of resource relevant to the error, if applicable. - `error.details.resourceName` (string) The name of the resource, if applicable. - `error.details.owner` (string) The owner of the resource, if applicable. - `error.details.description` (string) A description of the error, if applicable. - `error.details.fieldViolations` (array) An array of all the field violations which contributed to the error. - `error.details.fieldViolations.field` (string) The field which produced the error. Example: "order_by" - `error.details.fieldViolations.description` (string) The description of the error. Example: "Invalid `order_by` number." ## Response 429 fields (application/json): - `error` (object, required) - `error.code` (integer, required) The error code. Example: 400 - `error.message` (string, required) The error message. Example: "Invalid argument." - `error.status` (string) The status of the error. Example: "INVALID_ARGUMENT" - `error.details` (array) An array of objects describing the error in more detail, if applicable. - `error.details.type` (string) A more specific description of the error. Example: "BadRequest" - `error.details.resourceType` (string) The type of resource relevant to the error, if applicable. - `error.details.resourceName` (string) The name of the resource, if applicable. - `error.details.owner` (string) The owner of the resource, if applicable. - `error.details.description` (string) A description of the error, if applicable. - `error.details.fieldViolations` (array) An array of all the field violations which contributed to the error. - `error.details.fieldViolations.field` (string) The field which produced the error. Example: "order_by" - `error.details.fieldViolations.description` (string) The description of the error. Example: "Invalid `order_by` number." ## Response 500 fields (application/json): - `error` (object, required) - `error.code` (integer, required) The error code. Example: 400 - `error.message` (string, required) The error message. Example: "Invalid argument." - `error.status` (string) The status of the error. Example: "INVALID_ARGUMENT" - `error.details` (array) An array of objects describing the error in more detail, if applicable. - `error.details.type` (string) A more specific description of the error. Example: "BadRequest" - `error.details.resourceType` (string) The type of resource relevant to the error, if applicable. - `error.details.resourceName` (string) The name of the resource, if applicable. - `error.details.owner` (string) The owner of the resource, if applicable. - `error.details.description` (string) A description of the error, if applicable. - `error.details.fieldViolations` (array) An array of all the field violations which contributed to the error. - `error.details.fieldViolations.field` (string) The field which produced the error. Example: "order_by" - `error.details.fieldViolations.description` (string) The description of the error. Example: "Invalid `order_by` number."