Reporting API

A live, machine-readable feed of your PodSquadIQ campaign reporting — the same numbers your reporting portal shows — for pulling into Pressboard or any other analytics system automatically. JSON over HTTPS, no SDK required.

Access requires an API key for your account — your account manager issues and rotates them. These docs are public; your data never is.

Authentication

Every request needs your account’s API key (it looks like rk_4f82…). Pass it either way — query parameter ?key=rk_… or header x-api-key: rk_…. Treat it like a password: anyone holding it can read your reporting.

Pulling your reporting

GET https://podsquadiq.com/api/reports/feed
ParameterRequiredMeaning
keyyesYour API key (or send the x-api-key header instead).
from, tonoInclusive date window, both YYYY-MM-DD (U.S. Eastern Time days). Adds a range block to every item with totals for just those days.
daily=1noAdds a daily array to every item — one row per ET day. Combine with from/to to bound it.

One JSON document comes back, scoped to your account: podcast campaigns under podcasts, editorial / tracked-link media under trackedLinks. Every item carries its mediaNumber — the 6-digit id on every report and invoice, stable for the life of a campaign — plus flight dates, goals, pctOfGoal, campaign-to-date counts (views, plays, qualified listens, downloads, CTA clicks for podcasts; ad impressions and clicks for editorials), and engagements where the editorial measures them — engaged visits on the story page, pixel-measured when a pixel is installed, otherwise 30-second dwell-tag visits (one figure, never both summed) — plus onSite30s/onSite60s, time-on-site depth milestones (visible time), once the dwell tag has fired.

Metric definitions

Example

curl "https://podsquadiq.com/api/reports/feed?key=rk_YOUR_KEY&from=2026-08-13&to=2026-08-14&daily=1"
{
  "account": "Your Company",
  "generatedAt": "2026-08-14T18:22:41.000Z",
  "timezone": "America/New_York (ET days)",
  "range": { "from": "2026-08-13", "to": "2026-08-14" },
  "podcasts": [
    {
      "mediaNumber": "100007",
      "title": "Family Matters: A Conversation with Clint Wurzberger",
      "flightStart": "Jul 09, 2026",
      "flightEnd": "Aug 09, 2026",
      "listenGoal": 236,
      "pctOfGoal": 100,
      "campaignToDate": {
        "views": 4030, "plays": 3828, "qualifiedListens": 236,
        "downloads": 10, "ctaClicks": 8
      },
      "daily": [
        { "date": "2026-08-13", "views": 63, "plays": 51,
          "qualifiedListens": 5, "downloads": 1, "ctaClicks": 0 }
      ]
    }
  ],
  "trackedLinks": [
    {
      "mediaNumber": "100016",
      "title": "Got 3 Minutes? It Could Transform Your Life",
      "goal": { "unit": "impressions", "value": 500000 },
      "pctOfGoal": 64,
      "campaignToDate": { "impressions": 322480, "clicks": 1310 }
    }
  ]
}

Pulling on a schedule

Errors are simple: 401 means a missing or invalid key; 200 always carries the full document for your account. Prefer spreadsheets? The portal’s Summary and Daily CSV buttons export the same data by hand — the feed exists so nobody has to.

Pushing your own numbers (optional)

POST https://podsquadiq.com/api/reports/ingest

If you measure delivery on your side and want it reflected back in your reporting, push it with the same key (as the x-api-key header — preferred for a write token, so it stays out of request logs). It’s stored as your self-reported number and shown back to you separately; it never changes the delivery figures PodSquadIQ bills on.

{
  "source": "pressboard",
  "rows": [
    { "mediaNumber": "100016", "date": "2026-08-14",
      "impressions": 125000, "clicks": 412 }
  ]
}