---
title: "Create campaign with media"
method: POST
path: "/campaigns/create-with-media"
tags: ["Campaigns"]
---

# Create campaign with media

`POST /campaigns/create-with-media`

## Request

- Base URL: `https://api.textla.com/v1`
- URL: `https://api.textla.com/v1/campaigns/create-with-media`
- Auth: HTTP bearer

Creates a campaign with media attached: the `campaign` part is a Create Campaign Input as JSON and `media` is one to three files (600 KB in total; supported types include JPEG, GIF, PNG, audio, video and PDF). Everything else works as in Create Campaign, and POST /campaigns/preview with `has_media` previews the send instead. The media count, size and type limits (MediaLimitExceeded, MediaTooLarge, MediaTypeNotSupported) are enforced with the other API-side validation.

## Request body `multipart/form-data`

- object
  - `campaign` string, required
  - `media` string[], required

## Response `201`

Created

- Campaign
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `audience` AudienceFilter, required
    - `all_contacts` boolean, nullable, required
    - `groups` LabelFilter, required
      - `exclude` string[], nullable, required
      - `include` string[], nullable, required
      - `match` string, nullable, required
    - `keywords` LabelFilter, required
      - `exclude` string[], nullable, required
      - `include` string[], nullable, required
      - `match` string, nullable, required
    - `tags` LabelFilter, required
      - `exclude` string[], nullable, required
      - `include` string[], nullable, required
      - `match` string, nullable, required
  - `batch_count` integer, required
  - `created_at` integer, required
  - `current_batch` CurrentBatch, required
    - `id` string, required
    - `status` string, required
  - `failure_code` string, nullable, required
  - `id` string, required
  - `media` Media[], nullable, required
    - `content_type` string, required
    - `height` integer, nullable, required
    - `id` string, required
    - `name` string, required
    - `size_bytes` integer, required
    - `url` string, nullable, required
    - `width` integer, nullable, required
  - `message` string, required
  - `message_count` integer, required
  - `name` string, required
  - `phone_number` string, required
  - `rejection_reason` string, nullable, required
  - `send_at` integer, nullable, required
  - `status` string, required
  - `updated_at` integer, required

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Payment Required
- `403`: Forbidden
- `412`: Precondition Failed
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `500`: Internal Server Error
- `501`: Not Implemented
- `502`: Bad Gateway
- `503`: Service Unavailable
- `504`: Gateway Timeout

---

[API](https://skmtc.dev/textla/apis/textla-api.md) - [All operations](https://skmtc.dev/textla/apis/textla-api/llms.txt) - [OpenAPI document](https://skmtc.dev/textla/apis/textla-api/revisions/473f03350bc1?raw)
