---
title: "Project engagement roll-up"
method: GET
path: "/insights"
---

# Project engagement roll-up

`GET /insights`

## Request

- Base URL: `https://xpost.to/api/v1`
- URL: `https://xpost.to/api/v1/insights`
- Auth: HTTP bearer

Post/delivery counts, metric totals, and a per-platform breakdown over the window. "How are we doing?" in one call. Optionally sliced to one platform and/or one format (feed post / reel / story).

Every answer carries `coverage`, which says why an empty answer is empty. `deliveries` is what went out in the window, and the three counts under it PARTITION it — `with_metrics + unreportable + awaiting === deliveries`, always: `with_metrics` is what the totals could be built from, `unreportable` has no numbers and never will (deleted, expired, or a kind of post the platform never reports on), `awaiting` is simply not in yet. `unsupported` is a SUBSET of `unreportable`, not a fourth bucket: deliveries nobody will ever report on — stories, which Instagram and Facebook report nothing about, ever. So `format=story` returns zero totals however many stories went out; read `coverage.unsupported` before calling a window quiet. `ever_delivered` ignores the window and every filter, and separates "nothing here" from "nothing ever".

## Query parameters

- `since_days` integer
- `platform` string
- `format` 'feed' | 'reel' | 'story'

## Response `200`

Roll-up

- object
  - `posts` integer
  - `deliveries` integer
  - `totals` object
  - `by_platform` unknown[]
    - unknown
  - `coverage` object
    - `deliveries` integer
    - `with_metrics` integer
    - `unreportable` integer
    - `unsupported` integer
    - `awaiting` integer
    - `last_synced_at` string, nullable
    - `ever_delivered` integer

## Other responses

- `401`: Missing or invalid API key
- `429`: Rate limited

---

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