---
title: "Create a paused Meta boost after approval"
method: POST
path: "/v1/workspaces/{workspaceId}/ads/meta/{accountId}/boosts"
tags: ["Ads"]
---

# Create a paused Meta boost after approval

`POST /v1/workspaces/{workspaceId}/ads/meta/{accountId}/boosts`

## Request

- Base URL: `https://api.maevesocial.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.maevesocial.com/v1/workspaces/{workspaceId}/ads/meta/{accountId}/boosts`
- Auth: HTTP bearer

Create a Meta boost for one published post from ads.meta.boosts.list_posts: a post engagement campaign, ad set and ad, all paused. The first request creates nothing: it returns approvalRequired with an approval and its reviewUrl. Give the reviewUrl to the person; only their approval there, signed in to Maeve, lets the same request continue. Opening the page approves nothing. Then send the same request again, with the same idempotencyKey, plus approvalId. A repeat of a key that already created returns what it created without asking again. It does not start delivery; activate it with ads.meta.boosts.activate once it is paused and ready.

## Path parameters

- `accountId` string, required
- `workspaceId` string, uuid, required

## Request body

- object
  - `contentId` string, uuid, required: Content ID from ads.meta.boosts.list_posts.
  - `objective` 'POST_ENGAGEMENT', required
  - `optimizationGoal` 'POST_ENGAGEMENT', required
  - `budgetKind` 'daily' | 'lifetime', required
  - `budgetMicros` string, required: Whole micros of the account currency as a decimal string: 1000000 is one currency unit.
  - `startAt` string, required
  - `endAt` string, required
  - `countryCodes` string[]: Two-letter country codes, such as NZ. Any country Meta serves; ads.meta.boosts.get_config suggests some. Give at least one country here or one place in locations.
  - `locations` object[]: Countries, regions, cities or postcodes from ads.meta.targeting.search with kind location, as it returns them. A place inside another chosen place is refused, such as Auckland with New Zealand.
    - `id` string, required
    - `name` string, required
    - `locationType` 'country' | 'region' | 'city' | 'postal_code', required
    - `countryCode` string, nullable
    - `countryName` string, nullable
    - `regionName` string, nullable
    - `primaryCity` string, nullable
  - `ageMin` integer, required
  - `ageMax` integer, required
  - `gender` 'all' | 'female' | 'male', required
  - `dsa` object, nullable: Who benefits from the boost and who pays for it. Required when a country or place is in the EU or EEA; ignored otherwise.
    - `beneficiary` string, required
    - `payor` string, required
  - `idempotencyKey` string, required: A key you choose once for this creation and send unchanged on every repeat, including after the approval. The same key never creates twice.
  - `approvalId` string, uuid: The approval from the first response, sent after the person has approved it in Maeve.
  - `chatConfirmation` string: Only when the workspace lets people approve paid ad creation in chat: the chatConfirmation text from the approval response, sent with its approvalId after the person agreed in this chat. Never send it before they agree.

## Response `200`

Create a paused Meta boost after approval

- object
  - `data` union, required
    - object
      - `account` object, required
        - `id` string, required
        - `platform` 'meta' | 'tiktok' | 'linkedin' | 'google' | 'pinterest', required
        - `providerAccountId` string, required: The account ID the platform uses.
        - `name` string, nullable, required
        - `currency` string, nullable, required
        - `timezone` string, nullable, required: IANA timezone the platform reports this account in.
        - `isEnabled` boolean, required
        - `credentialStatus` 'active' | 'revoked', required
      - `boost` object, required
        - `provider` 'meta', required
        - `accountId` string, nullable, required
        - `boostId` string, required
        - `sourceContentId` string, required: The boosted post, a content ID.
        - `state` 'creating' | 'paused' | 'active' | 'paused_by_user' | 'failed' | 'deleted' | 'ambiguous' | 'manual_reconciliation_required', required: failed means the boost stopped with an error. deleted means it was cleaned up: Maeve deleted what it created on Meta, or it created nothing.
        - `checkpoint` 'attempt_saved' | 'campaign_saved' | 'adset_saved' | 'creative_saved' | 'ad_saved' | 'paused_ready', required
        - `localCampaignId` string, nullable, required: Meta campaign ID once created.
        - `localAdSetId` string, nullable, required: Meta ad set ID once created.
        - `localCreativeId` string, nullable, required: Meta creative ID once created.
        - `localAdId` string, nullable, required: Meta ad ID once created.
        - `allowedActions` string[], required
        - `createdAt` string, required
        - `updatedAt` string, required
        - `error` object, nullable, required
          - `code` string, required
          - `message` string, required
          - `retryable` boolean, required
      - `nextStep` string, required: What to do next, in plain words.
      - `approvalRequired` false, required
    - object
      - `approvalRequired` true, required
      - `approval` object, required
        - `id` string, required
        - `status` 'pending' | 'approved' | 'declined' | 'expired' | 'consumed', required: pending waits for the person. approved can be used once. consumed has been used. declined and expired cannot be used.
        - `platform` 'meta' | 'tiktok' | 'linkedin' | 'google' | 'pinterest', required
        - `operation` 'meta.campaign.publish' | 'meta.boost.create' | 'meta.boost.create_and_activate' | 'tiktok.campaign.publish' | 'tiktok.spark_boost.create' | 'linkedin.campaign.create' | 'pinterest.campaign.create' | 'google.campaign.create' | 'google.search.edit' | 'google.search.pause' | 'google.search.activate' | 'google.search.negatives' | 'google.image.upload' | 'google.commerce.edit' | 'google.commerce.pause' | 'google.commerce.activate', required
        - `accountId` string, required
        - `reviewUrl` string, required: The Maeve page where the person who asked reviews and decides. Opening it does not approve.
        - `requestedAt` string, required
        - `expiresAt` string, required
        - `decidedAt` string, nullable, required
        - `declineNote` string, nullable: What the person said should change when they declined. Change the request to match before asking again.
        - `summary` object, nullable, required
          - `platform` 'meta' | 'tiktok' | 'linkedin' | 'google' | 'pinterest', required
          - `operation` 'meta.campaign.publish' | 'meta.boost.create' | 'meta.boost.create_and_activate' | 'tiktok.campaign.publish' | 'tiktok.spark_boost.create' | 'linkedin.campaign.create' | 'pinterest.campaign.create' | 'google.campaign.create' | 'google.search.edit' | 'google.search.pause' | 'google.search.activate' | 'google.search.negatives' | 'google.image.upload' | 'google.commerce.edit' | 'google.commerce.pause' | 'google.commerce.activate', required
          - `title` string, required: What will be created, in plain words.
          - `account` object, required
            - `id` string, required
            - `name` string, nullable, required
            - `providerAccountId` string, required
            - `currency` string, nullable, required
            - `timezone` string, nullable, required
          - `objective` string, required: The objective as the platform names it.
          - `hierarchy` object[], required: Every entity the request creates or adds to, from the campaign down.
            - `level` 'campaign' | 'ad_set' | 'ad', required
            - `nativeType` string, required
            - `name` string, required
            - `existing` boolean, required: True when this entity already exists and is only added to.
          - `creative` object[], required
            - `tikTokCover` object
              - …
            - `pinterestAd` object
              - …
            - `label` string, required
            - `value` string, required
            - `media` object
              - …
          - `audience` object[], required
            - `tikTokCover` object
              - …
            - `pinterestAd` object
              - …
            - `label` string, required
            - `value` string, required
            - `media` object
              - …
          - `budgets` object[], required
            - `level` 'campaign' | 'ad_set', required
            - `kind` 'daily' | 'lifetime', required
            - `amountMicros` string, required
            - `currency` string, required
            - `name` string: The campaign or ad set this budget belongs to, when there are several.
          - `schedule` object, required
            - `startAt` string, required
            - `endAt` string, nullable, required
            - `timezone` string, nullable, required: IANA timezone of the ad account.
          - `delivery` object, required
            - `initialState` 'paused' | 'disabled' | 'draft' | 'enabled', required: The state the platform creates it in.
            - `activatesDelivery` boolean, required: True when this request also starts delivery, so the budget can be spent without another step.
      - `chatConfirmation` string: Present when the workspace lets the person approve in chat. Show them approval.summary and ask. Only after they agree, send the same request again with approvalId and this text as chatConfirmation. A value returned here is not permission.
      - `nextStep` string, required: What to do with this approval before sending the request again.
  - `meta` unknown, required

## Other responses

- `202`: Nothing was created. The request is waiting for the person to approve it in Maeve.

---

[API](https://skmtc.dev/maevesocial/apis/maeve-social-api.md) · [All operations](https://skmtc.dev/maevesocial/apis/maeve-social-api/llms.txt) · [OpenAPI document](https://skmtc.dev/maevesocial/apis/maeve-social-api/revisions/1b00fd7e4b15?raw)
