---
title: "Preview the total and blockers before review"
method: GET
path: "/campaigns/{id}/preview"
tags: ["Campaigns"]
---

# Preview the total and blockers before review

`GET /campaigns/{id}/preview`

## Request

- Base URL: `https://gtmswag.com/api/v1`
- URL: `https://gtmswag.com/api/v1/campaigns/{id}/preview`
- Auth: HTTP bearer

The exact total for people without a gift yet, `blockers`, `nextAction` (`review` or `provide_sender_address`), `fulfillmentRequirements` and any `prepaidOffer`. Creates nothing and takes no payment.

## Path parameters

- `id` string, required

## Response `200`

Success: `{"data": CampaignPreview}`.

- CampaignPreviewResponse: The success body: `{"data": CampaignPreview}`.
  - `data` CampaignPreview, required: The exact total, blockers and next step for people without a gift yet. Creates nothing.
    - `campaignId` string, required
    - `policyVersion` integer, required
    - `recipientCount` integer, required
    - `totalCents` integer, required
    - `nextAction` 'review' | 'provide_sender_address', required: review: ready for human review, subject to blockers and any returned prepaidOffer. provide_sender_address: this draft needs sender-supplied US shipping details before it can be paid.
    - `unavailableReason` 'live_addressless_unavailable' | 'null', nullable, required
    - `prepaidOffer` object
      - `version` string, required
      - `productId` string, required
      - `unitCents` integer, required
      - `currency` 'usd', required
      - `shippingStates` string[], required
      - `claimDays` integer, required
      - `qualificationVersion` string, required
    - `fulfillmentRequirements` object[]
      - `recipientId` string, required
      - `recipientName` string, required
      - `recipientEmail` string, required
      - `kind` 'photo_sourcing' | 'address_confirmation' | 'sender_address_required', required
      - `message` string, required
    - `blockers` string[]

## Other responses

- `401`: Not authenticated: `AUTH_REQUIRED`. no credentials, or an OAuth token on a route that only takes workspace keys; the key is malformed, unknown or revoked.
- `404`: Not found: `NOT_FOUND`. Each example says when.
- `429`: Too many requests: `RATE_LIMIT`. more than 240 requests in the current minute for this workspace (REST and MCP share the limit); wait `retryAfterMs`.
- `default`: Any other refusal or failure, such as 403 CSRF (a cross-origin `Origin` header), 403 HTTPS_REQUIRED or 500 INTERNAL_ERROR, with what to do next.

---

[API](https://skmtc.dev/gtmswag/apis/gtm-swag-api.md) · [All operations](https://skmtc.dev/gtmswag/apis/gtm-swag-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gtmswag/apis/gtm-swag-api/revisions/9ff86fa99afe?raw)
