---
title: "Read a campaign creation approval"
method: GET
path: "/v1/workspaces/{workspaceId}/ads/approvals/{approvalId}"
tags: ["Ads"]
---

# Read a campaign creation approval

`GET /v1/workspaces/{workspaceId}/ads/approvals/{approvalId}`

## 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/approvals/{approvalId}`
- Auth: HTTP bearer

Read one approval for creating a paid campaign or boost: its status, when it expires, what would be created and the Maeve review page. Only the person who asked can read it, as only they can open the review page. Read-only. It cannot approve. Only the person who asked can approve, signed in to Maeve on the review page, so give them the reviewUrl and read again later. Once it is approved, repeat the creation request unchanged with its approvalId.

## Path parameters

- `approvalId` string, required
- `workspaceId` string, uuid, required

## Response `200`

Read a campaign creation approval

- object
  - `data` object, 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
            - `mediaId` string, uuid, required
            - `videoId` string, required
            - `imageId` string, required
          - `pinterestAd` object
            - `index` integer, required
            - `pinId` string
          - `label` string, required
          - `value` string, required
          - `media` object
            - `mediaId` string, uuid, required
            - `type` 'image' | 'video', required
        - `audience` object[], required
          - `tikTokCover` object
            - `mediaId` string, uuid, required
            - `videoId` string, required
            - `imageId` string, required
          - `pinterestAd` object
            - `index` integer, required
            - `pinId` string
          - `label` string, required
          - `value` string, required
          - `media` object
            - `mediaId` string, uuid, required
            - `type` 'image' | 'video', required
        - `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.
  - `meta` unknown, required

---

[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)
