# Create 10DLC campaign

> Create a 10DLC campaign under an existing brand. The campaign starts in draft status. Submit it for carrier review using the submit endpoint.

`POST https://api.zavu.dev/v1/10dlc/campaigns`

Create a 10DLC campaign under an existing brand. The campaign starts in draft status. Submit it for carrier review using the submit endpoint.

## Body

- `brandId` (string, required): ID of the brand to create this campaign under.
- `name` (string, required)
- `useCase` (string, required): Campaign use case (e.g., ACCOUNT_NOTIFICATION, MARKETING, 2FA).
- `subUseCases` (string[])
- `description` (string, required)
- `sampleMessages` (string[], required)
- `subscriberOptIn` (boolean, required)
- `subscriberOptOut` (boolean, required)
- `subscriberHelp` (boolean, required)
- `numberPooling` (boolean, required)
- `directLending` (boolean, required)
- `embeddedLink` (boolean, required)
- `embeddedPhone` (boolean, required)
- `affiliateMarketing` (boolean, required)
- `ageGated` (boolean, required)
- `messageFlow` (string)
- `helpMessage` (string)
- `optInKeywords` (string[])
- `optOutKeywords` (string[])

## Responses

### 201

Campaign created in draft status.

- `campaign` (object, required)
  - `id` (string, required)
  - `brandId` (string, required): ID of the brand this campaign belongs to.
  - `name` (string, required)
  - `useCase` (string, required): Campaign use case type.
  - `subUseCases` (string[], nullable)
  - `description` (string, required): Description of the messaging campaign.
  - `sampleMessages` (string[], required): Sample messages representative of campaign content.
  - `subscriberOptIn` (boolean, required)
  - `subscriberOptOut` (boolean, required)
  - `subscriberHelp` (boolean, required)
  - `numberPooling` (boolean, required)
  - `directLending` (boolean, required)
  - `embeddedLink` (boolean, required)
  - `embeddedPhone` (boolean, required)
  - `affiliateMarketing` (boolean, required)
  - `ageGated` (boolean, required)
  - `messageFlow` (string, nullable)
  - `helpMessage` (string, nullable)
  - `optInKeywords` (string[], nullable)
  - `optOutKeywords` (string[], nullable)
  - `status` (string, required): Status of a 10DLC campaign registration. - `draft`: created, not yet submitted. - `pending`: submitted, awaiting the carriers. Re-read from the carrier every 30 minutes, so it moves on its own. - `approved`: SMS to +1 numbers can go out from numbers assigned to it. The monthly fee is charged while it is approved. - `rejected`: refused by the carriers. The one-time registration fee is refunded. - `failed`: the registration did not reach the carriers. The fee is refunded. - `expired`: was approved and has lapsed. One of: `draft`, `pending`, `approved`, `rejected`, `expired`, `failed`.
  - `dailyLimit` (integer, nullable): Daily message limit based on brand trust score.
  - `failureReason` (string, nullable)
  - `registrationCostCents` (integer, nullable): One-time registration cost in cents.
  - `monthlyFeeCents` (integer, nullable): Recurring monthly fee in cents.
  - `submittedAt` (string<date-time>, nullable)
  - `approvedAt` (string<date-time>, nullable)
  - `createdAt` (string<date-time>, required)
  - `updatedAt` (string<date-time>, required)

### 400

Invalid request.

- `code` (string, required)
- `message` (string, required)
- `details` (object)

### 401

Unauthorized.

- `code` (string, required)
- `message` (string, required)
- `details` (object)

### 404

Brand not found.

- `code` (string, required)
- `message` (string, required)
- `details` (object)

## Example

```bash
curl -X POST "https://api.zavu.dev/v1/10dlc/campaigns" \
  -H "Authorization: Bearer $ZAVUDEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "brandId": "brand_abc123",
  "name": "Order Notifications",
  "useCase": "ACCOUNT_NOTIFICATION",
  "description": "Send order status updates and shipping notifications to customers who opted in.",
  "sampleMessages": [
    "Hi {{name}}, your order #{{order_id}} has shipped! Track it at {{url}}",
    "Your order #{{order_id}} has been delivered. Thank you for your purchase!"
  ],
  "subscriberOptIn": true,
  "subscriberOptOut": true,
  "subscriberHelp": true,
  "numberPooling": false,
  "directLending": false,
  "embeddedLink": true,
  "embeddedPhone": false,
  "affiliateMarketing": false,
  "ageGated": false
}'
```

```typescript
import Zavudev from "@zavudev/sdk";

const zavu = new Zavudev({ apiKey: process.env.ZAVUDEV_API_KEY });

const result = await zavu.number10dlc.campaigns.create({
  brandId: "brand_abc123",
  name: "Order Notifications",
  useCase: "ACCOUNT_NOTIFICATION",
  description: "Send order status updates and shipping notifications to customers who opted in.",
  sampleMessages: [
    "Hi {{name}}, your order #{{order_id}} has shipped! Track it at {{url}}",
    "Your order #{{order_id}} has been delivered. Thank you for your purchase!",
  ],
  subscriberOptIn: true,
  subscriberOptOut: true,
  subscriberHelp: true,
  numberPooling: false,
  directLending: false,
  embeddedLink: true,
  embeddedPhone: false,
  affiliateMarketing: false,
  ageGated: false,
});

console.log(result);
```
