---
title: "Connected ad accounts with every campaign and its latest pulled metrics"
method: GET
path: "/paid-media"
tags: ["paid-media"]
---

# Connected ad accounts with every campaign and its latest pulled metrics

`GET /paid-media`

## Request

- Base URL: `https://portal.fractionalteams.com/api/v1`
- URL: `https://portal.fractionalteams.com/api/v1/paid-media`
- Auth: HTTP bearer

The client's paid-media accounts (Reddit Ads, LinkedIn Ads), each with every campaign and the most recent pulled metrics for it: impressions, clicks and spend over a rolling 30-day window, plus the pull time. Accounts with no campaigns are listed with an empty campaign list; a campaign that has never been pulled has `latest: null`. Figures come from the daily pull (06:00 UTC), so treat them as up to a day old. Read-only.

## Query parameters

- `platform` 'reddit' | 'linkedin'

## Response `200`

One entry per ad account

- PaidMediaAccount[]
  - `platform` 'reddit' | 'linkedin', required
  - `account_id` integer, required: Portal id
  - `external_account_id` string, required: The platform's own account id
  - `label` string, required: Connection label and account name, as shown on the portal
  - `last_pulled_at` string, nullable, required: Most recent pull across the account's campaigns (null if none)
  - `campaigns` PaidMediaCampaign[], required
    - `campaign_id` integer, required: Portal id, the handle for getPaidMediaCampaignHistory
    - `external_campaign_id` string, required: The platform's own campaign id
    - `name` string, required
    - `objective` string, nullable
    - `status` string, nullable: The platform's status word as pulled, e.g. ACTIVE, PAUSED, COMPLETED
    - `last_seen_at` string: Last pull in which the platform still listed this campaign
    - `latest` PaidMediaMetrics, required: One pull: delivery over the 30-day window ending at window_end, recorded at pulled_at.
      - `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`: Unknown platform
- `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
- `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)
