---
title: "What works: your best posts against your own median, and the patterns behind them"
method: GET
path: "/api/insights"
---

# What works: your best posts against your own median, and the patterns behind them

`GET /api/insights`

## Request

- Base URL: `https://postwire.io`
- URL: `https://postwire.io/api/insights`
- Auth: HTTP bearer

Every post PostWire published for the account in the last 90 days, compared with the median of the same social account on the same network (views where the network reports them, otherwise likes + reposts + replies). n is always returned; posts under 24 hours old are not ranked; a network that does not share a number is listed with the reason instead of a zero. Free plans get the 3 best posts; paid plans get the full ranking and the patterns (format, day, time of day, length, hashtags, first-line type), which need at least 10 ranked posts and 3 posts per group. On a plan without patterns, locked.patterns_preview lists the patterns that are ready with the size of each effect (x_median, n) but not the winning value, locked.best_time does the same for the best time to post, and locked.teaser sums it up (or says how many more measured posts are needed).

## Query parameters

- `brand_id` string
- `platform` string
- `tz` string

## Response `200`

{ top: [{ id, platform, value, metric, median, n, x_median, headline, why[] }], networks[], patterns | null, locked: { patterns_ready, patterns_status, patterns_preview[], best_time, teaser, more_posts_ranked } | null, insights_teaser?, upgrade? }

## Other responses

- `401`: API key required
- `404`: brand not found

---

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