---
title: "Create a campaign for a profile's brand"
method: POST
path: "/v3/profiles/{profileId}/campaigns"
tags: ["Profiles"]
---

# Create a campaign for a profile's brand

`POST /v3/profiles/{profileId}/campaigns`

Creates a new campaign scoped under the brand of the specified profile. Each campaign must include at least one use case with sample messages.

## Path parameters

- `profileId` string, uuid, required

## Headers

- `Idempotency-Key` string
- `x-profile-id` string, uuid

## Request body

- SentDmServicesEndpointsCustomerAPIv3RequestsCampaignsCreateBrandCampaignRequest — Request to create a campaign for a brand
  - `sandbox` boolean — Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution
  - `campaign` SentDmServicesEndpointsCustomerAPIv3RequestsCampaignsCampaignData, required — Campaign data for create or update operation
    - `name` string, required — Campaign name
    - `description` string, required — Campaign description
    - `type` string, required — Campaign type (e.g., "KYC", "App")
    - `useCases` SentDmServicesEndpointsCustomerAPIv3RequestsCampaignsCampaignUseCaseData[], required — List of use cases with sample messages
      - `messagingUseCaseUs` 'MARKETING' | 'ACCOUNT_NOTIFICATION' | 'CUSTOMER_CARE' | 'FRAUD_ALERT' | 'TWO_FA' | 'DELIVERY_NOTIFICATION' | 'SECURITY_ALERT' | 'M2M' | 'MIXED' | 'HIGHER_EDUCATION' | 'POLLING_VOTING' | 'PUBLIC_SERVICE_ANNOUNCEMENT' | 'LOW_VOLUME', required
      - `sampleMessages` string[], required — Sample messages for this use case (1-5 messages, max 1024 characters each)
    - `messageFlow` string, nullable — Description of how messages flow in the campaign
    - `privacyPolicyLink` string, uri, nullable — URL to privacy policy
    - `termsAndConditionsLink` string, uri, nullable — URL to terms and conditions
    - `optinMessage` string, nullable — Message sent when user opts in
    - `optoutMessage` string, nullable — Message sent when user opts out
    - `helpMessage` string, nullable — Message sent when user requests help
    - `optinKeywords` string, nullable — Comma-separated keywords that trigger opt-in (e.g., "YES, START, SUBSCRIBE")
    - `optoutKeywords` string, nullable — Comma-separated keywords that trigger opt-out (e.g., "STOP, UNSUBSCRIBE, END")
    - `helpKeywords` string, nullable — Comma-separated keywords that trigger help message (e.g., "HELP, INFO, SUPPORT")

## Response `201`

Campaign created successfully

- SentDmServicesEndpointsCustomerAPIv3ResponsesApiResponseOfTcrCampaignWithUseCasesResponse — Standard API response envelope for all v3 endpoints
  - `success` boolean — Indicates whether the request was successful
  - `data` SentDmServicesCommonServicesCampaignsContractsTcrCampaignWithUseCasesResponse
    - `id` string, uuid — Unique identifier
    - `createdAt` string, date-time
    - `updatedAt` string, date-time, nullable
    - `kycSubmissionFormId` string, uuid, nullable
    - `type` string
    - `customerId` string, uuid
    - `name` string
    - `description` string
    - `submittedToTCR` boolean
    - `submittedAt` string, date-time, nullable
    - `billedDate` string, date-time, nullable
    - `cost` number, nullable
    - `telnyxCampaignId` string, nullable
    - `tcrCampaignId` string, nullable
    - `cspId` string, nullable
    - `status` 'SENT_CREATED' | 'ACTIVE' | 'EXPIRED'
    - `brandId` string, uuid, nullable
    - `resellerId` string, nullable
    - `messageFlow` string, nullable
    - `privacyPolicyLink` string, nullable
    - `termsAndConditionsLink` string, nullable
    - `optinMessage` string, nullable
    - `optoutMessage` string, nullable
    - `helpMessage` string, nullable
    - `optinKeywords` string, nullable
    - `optoutKeywords` string, nullable
    - `helpKeywords` string, nullable
    - `upstreamCnpId` string, nullable
    - `sharingStatus` 'PENDING' | 'ACCEPTED' | 'DECLINED'
    - `dcaElectionsComplete` boolean, nullable
    - `dcaElectionsCompletedAt` string, date-time, nullable
    - `useCases` SentDmServicesCommonEntitiesTcrCampaignUseCase[]
      - `id` string, uuid — Unique identifier
      - `createdAt` string, date-time
      - `updatedAt` string, date-time, nullable
      - `campaignId` string, uuid
      - `customerId` string, uuid
      - `messagingUseCaseUs` 'MARKETING' | 'ACCOUNT_NOTIFICATION' | 'CUSTOMER_CARE' | 'FRAUD_ALERT' | 'TWO_FA' | 'DELIVERY_NOTIFICATION' | 'SECURITY_ALERT' | 'M2M' | 'MIXED' | 'HIGHER_EDUCATION' | 'POLLING_VOTING' | 'PUBLIC_SERVICE_ANNOUNCEMENT' | 'LOW_VOLUME'
      - `sampleMessages` string[]
    - `tcrSyncError` string, nullable
  - `error` SentDmServicesEndpointsCustomerAPIv3ResponsesApiError — Error information
    - `code` string — Machine-readable error code (e.g., "RESOURCE_001")
    - `message` string — Human-readable error message
    - `details` object, nullable — Additional validation error details (field-level errors)
    - `doc_url` string, nullable — URL to documentation about this error
  - `meta` SentDmServicesEndpointsCustomerAPIv3ResponsesApiMeta — Request and response metadata
    - `request_id` string — Unique identifier for this request (for tracing and support)
    - `timestamp` string, date-time — Server timestamp when the response was generated
    - `version` string — API version used for this request

## Other responses

- `400` — Invalid request - validation errors or inherit_tcr_campaign=true
- `401` — Unauthorized - Valid API key required
- `403` — Forbidden
- `404` — Profile or brand not found
- `500` — Internal server error occurred

---

[API](https://skmtc.net/sentdm/apis/sent-dm-api-v3.md) · [All operations](https://skmtc.net/sentdm/apis/sent-dm-api-v3/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sentdm/sent-dm-api-v3/revisions/c451eca46f1b/schema)
