---
title: "One campaign's pull history as a chronological series"
method: GET
path: "/paid-media/campaigns/{campaignId}/history"
tags: ["paid-media"]
---

# One campaign's pull history as a chronological series

`GET /paid-media/campaigns/{campaignId}/history`

## Request

- Base URL: `https://portal.fractionalteams.com/api/v1`
- URL: `https://portal.fractionalteams.com/api/v1/paid-media/campaigns/{campaignId}/history`
- Auth: HTTP bearer

Each daily pull's 30-day window with impressions, clicks and spend, oldest first, plus the campaign's platform, account, objective and status. Defaults to the most recent 90 pulls; narrow with `since` and `limit`.

## Path parameters

- `campaignId` integer, required

## Query parameters

- `since` string, date
- `limit` integer

## Response `200`

The campaign and its metrics series

- PaidMediaCampaignHistory
  - `campaign` object, required
    - `campaign_id` integer, required
    - `external_campaign_id` string
    - `name` string, required
    - `objective` string, nullable
    - `status` string, nullable
    - `last_seen_at` string
    - `platform` 'reddit' | 'linkedin', required
    - `account_label` string
    - `external_account_id` string
  - `metrics` PaidMediaMetrics[], required: Oldest first; one entry per pull
    - `window_start` string, date, required
    - `window_end` string, date, required
    - `impressions` integer, required
    - `clicks` integer, required
    - `spend_minor_units` integer, required: Spend in the currency's minor units (pence, cents, grosze)
    - `spend` number, required: The same spend in major units (spend_minor_units ÷ 100)
    - `currency` string, required: ISO 4217 code, e.g. GBP
    - `pulled_at` string, required: When the pull ran (UTC)

## Other responses

- `400`: Malformed since or limit
- `401`: Missing or invalid API key (a malformed ftpk_ key never falls back to the demo workspace).
- `403`: The key does not include the paid_media section
- `404`: Not found, or another client's campaign
- `429`: Rate limit exceeded (120 requests per minute per key). Honour Retry-After / RateLimit-Reset.

---

[API](https://skmtc.dev/fractionalteams/apis/fractional-teams-portal-api.md) · [All operations](https://skmtc.dev/fractionalteams/apis/fractional-teams-portal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fractionalteams/apis/fractional-teams-portal-api/revisions/9f81154af4dc?raw)
