---
title: "Create a new creative"
method: POST
path: "/v2/creatives"
tags: ["creatives-v2"]
---

# Create a new creative

`POST /v2/creatives`

## Request

- Base URL: `https://api.tracklysms.com/api`
- URL: `https://api.tracklysms.com/api/v2/creatives`
- Auth: API key in header `X-Api-Key`

## Request body

- CreativeCreateRequest
  - `creative_type` string: Type: automated, one_time, welcome (default: automated)
  - `dates_timezone` string, nullable: Timezone for start_date/end_date: America/New_York, America/Chicago, America/Denver, America/Los_Angeles or UTC. Null = the account timezone.
  - `end_date` string, nullable: Last day the creative may be sent, inclusive (YYYY-MM-DD, in dates_timezone). Null = no end.
  - `list_control_ids` integer[]: List IDs for include/exclude control (optional)
  - `list_control_mode` string: List control mode: all (default), include, exclude (optional)
  - `message` string, required: Message template (max 1600 chars); one_time creatives may have no link placeholders
  - `name` string, required: Creative name (max 255 chars)
  - `offer_links` OfferLink[]: Offer or custom URL mappings; optional for one_time messages without link placeholders
    - `custom_url` string: HTTPS destination URL; exactly one of offer_id or custom_url is required
    - `key` string: Placeholder key (e.g., link1)
    - `offer_id` string: Offer ID; exactly one of offer_id or custom_url is required
    - `offer_source` 'sms' | 'oms': Offer source for offer_id; defaults to sms
    - `url` string: Deprecated and ignored; use custom_url for a custom destination
    - `url_params` object: Additional URL parameters
  - `start_date` string, nullable: First day the creative may be sent (YYYY-MM-DD, in dates_timezone). Null = no start limit.
  - `status` string: Status: active or paused (default: active)

## Response `201`

Creative created

- CreativeCreateResponse
  - `creative` CreativeResponse
    - `character_count` integer: Estimated character count
    - `created_at` string, date-time: Creation timestamp
    - `creative_type` string: Type: automated, one_time, welcome
    - `dates_timezone` string, nullable: Timezone for start_date/end_date: America/New_York, America/Chicago, America/Denver, America/Los_Angeles or UTC. Null = the account timezone.
    - `end_date` string, nullable: Last day the creative may be sent, inclusive (YYYY-MM-DD, in dates_timezone). Null = no end.
    - `id` integer: Creative ID
    - `list_control_ids` integer[]: List IDs for include/exclude control
    - `list_control_mode` string: List control mode: all (default), include, exclude
    - `message` string: Message template with {{linkN}} placeholders
    - `name` string: Creative name
    - `offer_links` OfferLink[]: Offer link mappings
      - `custom_url` string: HTTPS destination URL; exactly one of offer_id or custom_url is required
      - `key` string: Placeholder key (e.g., link1)
      - `offer_id` string: Offer ID; exactly one of offer_id or custom_url is required
      - `offer_source` 'sms' | 'oms': Offer source for offer_id; defaults to sms
      - `url` string: Deprecated and ignored; use custom_url for a custom destination
      - `url_params` object: Additional URL parameters
    - `offers` string[]: List of offer IDs used
    - `segment_count` integer: Estimated SMS segment count
    - `start_date` string, nullable: First day the creative may be sent (YYYY-MM-DD, in dates_timezone). Null = no start limit.
    - `status` string: Status: active, paused, archived
  - `success` boolean: Operation success

## Other responses

- `400`: Validation error
- `401`: Authentication error
- `403`: Product not enabled

---

[API](https://skmtc.dev/tracklysms/apis/trackly-sms-api.md) · [All operations](https://skmtc.dev/tracklysms/apis/trackly-sms-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tracklysms/apis/trackly-sms-api/revisions/ac1ad22cb2a9?raw)
