---
title: "Create a paused campaign"
method: POST
path: "/api/v1/ads/campaigns"
tags: ["Ads"]
---

# Create a paused campaign

`POST /api/v1/ads/campaigns`

## Request

- Base URL: `https://app.tryadeli.com`
- URL: `https://app.tryadeli.com/api/v1/ads/campaigns`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/adeli/apis/adeli-api/docs/api/v1/ads/campaigns/post.ts> (a function with typed inputs; its response is checked against the schema)

Meta boosts a Page post; TikTok creates a campaign, ad group and video ad; LinkedIn sponsors a post by the ad account's Page as a campaign group, campaign and creative, all drafts. Everything is created paused or as a draft: nothing spends until setAdStatus activates it.

## Query parameters

- `accountId` string, uuid
- `profileId` string, uuid
- `platform` 'meta_ads' | 'tiktok_ads' | 'linkedin_ads'

## Headers

- `Idempotency-Key` string, required

## Request body

- union
  - object
    - `adAccountId` string, required
    - `pagePostId` string, required
    - `dailyBudget` number, required
    - `startDate` string, required
    - `endDate` string, required
    - `campaignName` string, required
  - object
    - `adAccountId` string, required
    - `campaignName` string, required
    - `goal` 'traffic' | 'reach' | 'video_views', required
    - `dailyBudget` number, required
    - `startDate` string, required
    - `endDate` string, required
    - `targeting` object, required
      - `locationIds` string[], required
      - `ageGroups` string[]
      - `gender` 'GENDER_MALE' | 'GENDER_FEMALE' | 'GENDER_UNLIMITED'
      - `languages` string[]
      - `interestCategoryIds` string[]
    - `creative` object, required
      - `video` union, required
        - object
          - `uploadId` string, required
        - object
          - `url` string, uri, required
      - `coverImage` union
        - object
          - `uploadId` string, required
        - object
          - `url` string, uri, required
      - `adText` string, required
      - `callToAction` 'LEARN_MORE' | 'SHOP_NOW' | 'SIGN_UP' | 'CONTACT_US' | 'DOWNLOAD' | 'BOOK_NOW' | 'ORDER_NOW' | 'WATCH_NOW' | 'GET_QUOTE' | 'APPLY_NOW'
      - `landingPageUrl` string, uri
    - `identity` union, required
      - object
        - `identityId` string, required
      - object
        - `displayName` string, required
        - `avatar` union, required
          - object
            - `uploadId` string, required
          - object
            - `url` string, uri, required
  - object
    - `adAccountId` string, required
    - `campaignName` string, required
    - `goal` 'website_visits' | 'engagement' | 'brand_awareness' | 'video_views', required
    - `postUrn` string, required
    - `dailyBudget` number, required
    - `bid` number
    - `startDate` string, required
    - `endDate` string, required
    - `targeting` object, required
      - `locations` string[], required
      - `jobFunctions` string[]
      - `seniorities` string[]
      - `industries` string[]
      - `companySizes` string[]
      - `interfaceLocale` string
    - `politicalIntent` 'NOT_POLITICAL', required

## Response `200`

Success

- union
  - object
    - `campaign` object, required
      - `id` string, uuid, required
      - `profileId` string, uuid, required
      - `facebookConnectionId` string, uuid, nullable, required
      - `metaAdsConnectionId` string, uuid, nullable, required
      - `adAccountId` string, required
      - `pageId` string, required
      - `pagePostId` string, required
      - `idempotencyKey` string, required
      - `campaignId` string, nullable, required
      - `adSetId` string, nullable, required
      - `creativeId` string, nullable, required
      - `adId` string, nullable, required
      - `status` 'pending' | 'paused' | 'active' | 'failed' | 'rolled_back' | 'deleted', required
      - `failureReason` string, nullable, required
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required
    - `objects` object, required
      - `campaignId` string, required
      - `adSetId` string, required
      - `creativeId` string, required
      - `adId` string, required
    - `preview` object, nullable, required
      - `format` string, required
      - `body` string, required
      - `url` string, uri, nullable, required
      - `width` number, nullable, required
      - `height` number, nullable, required
    - `replayed` boolean, required
  - object
    - `platform` 'meta_ads' | 'tiktok_ads' | 'linkedin_ads', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid, required
    - `campaign` object, required
      - `id` string, uuid, required
      - `profileId` string, uuid, required
      - `tiktokAdsConnectionId` string, uuid, nullable, required
      - `advertiserId` string, required
      - `idempotencyKey` string, required
      - `campaignId` string, nullable, required
      - `adGroupId` string, nullable, required
      - `adId` string, nullable, required
      - `status` 'pending' | 'paused' | 'active' | 'failed' | 'rolled_back' | 'deleted', required
      - `failureReason` string, nullable, required
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required
    - `objects` object, required
      - `campaignId` string, required
      - `adGroupId` string, required
      - `adId` string, required
    - `replayed` boolean, required
  - object
    - `platform` 'meta_ads' | 'tiktok_ads' | 'linkedin_ads', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid, required
    - `campaign` object, required
      - `id` string, uuid, required
      - `profileId` string, uuid, required
      - `linkedinAdsConnectionId` string, uuid, nullable, required
      - `adAccountId` string, required
      - `idempotencyKey` string, required
      - `campaignGroupId` string, nullable, required
      - `campaignId` string, nullable, required
      - `creativeId` string, nullable, required
      - `postUrn` string, nullable, required
      - `status` 'pending' | 'draft' | 'paused' | 'active' | 'failed' | 'rolled_back' | 'deleted', required
      - `failureReason` string, nullable, required
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required
    - `objects` object, required
      - `campaignId` string, required
      - `adGroupId` string, required
      - `adId` string, required
    - `replayed` boolean, required

## Other responses

- `201`: Success
- `400`: Invalid request or provider failure
- `401`: Missing or invalid API key
- `403`: The connection lacks a permission or provider-confirmed resource
- `404`: Profile, account, or object not found
- `409`: The request conflicts with existing state
- `422`: The connected account cannot perform this operation
- `429`: Provider quota or rate limit exhausted
- `502`: Invalid request or provider failure

---

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