Skip to content
Sign in Waitlist

Metrics

GET /v1/insights scope read

Cards, top posts, results per channel (one row per account when a network has several; channel filters one), summary and the 48 h reading.

HeadersAuthorization: Bearer praeko_… and X-Praeko-Contract: en. Always send both.

Parameters

Name In Description
channel query Account id when the network has several (from GET /v1/channels). Without it, the default channel.

Example

curl "https://praeko.app/v1/insights" \
  -H "Authorization: Bearer $PRAEKO_KEY" \
  -H "X-Praeko-Contract: en"

Response

Success status When
200 Success.
Response 200
{
  "period": {
    "from": "2026-10-08T14:02:11.482Z",
    "to": "2026-11-07T14:02:11.482Z"
  },
  "previousPeriod": {
    "from": "2026-09-08T14:02:11.482Z",
    "to": "2026-10-08T14:02:11.482Z"
  },
  "filters": {
    "channel": null,
    "type": null,
    "tag": null
  },
  "cards": {
    "posts": 6,
    "followers": 1842,
    "followersChange": 37,
    "reactions": 412,
    "comments": 58,
    "engagement": 9,
    "overallEngagement": 9,
    "views": 5120,
    "shares": null,
    "saves": null,
    "reach": null,
    "watchTimeMin": null,
    "avgWatchTimeSec": null,
    "followersGained": null,
    "previous": {
      "posts": 4,
      "followers": 1805,
      "followersChange": null,
      "reactions": 301,
      "comments": 40,
      "engagement": 8,
      "overallEngagement": 8,
      "views": 3900,
      "shares": null,
      "saves": null,
      "reach": null,
      "watchTimeMin": null,
      "avgWatchTimeSec": null,
      "followersGained": null
    },
    "change": {
      "posts": {
        "absolute": 2,
        "pct": 50
      },
      "followers": {
        "absolute": 37,
        "pct": 2
      },
      "reactions": {
        "absolute": 111,
        "pct": 37
      },
      "comments": {
        "absolute": 18,
        "pct": 45
      },
      "engagement": null,
      "views": {
        "absolute": 1220,
        "pct": 31
      },
      "shares": null,
      "saves": null,
      "reach": null,
      "watchTimeMin": null,
      "avgWatchTimeSec": null,
      "followersGained": null
    }
  },
  "sources": {
    "current": {},
    "previous": {},
    "bufferAggregate": false,
    "aggregateUpdatedAt": null,
    "scope": "all"
  },
  "topPosts": [
    {
      "title": "The test that only failed on Mondays",
      "network": "youtube",
      "type": "short",
      "publishedAt": "2026-11-01T12:00:00.000Z",
      "reactions": 87,
      "comments": 12,
      "views": 1240,
      "engagement": 8,
      "url": "https://youtu.be/dQw4w9WgXcQ",
      "thumb": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
      "thumbType": "url",
      "noMetrics": false
    }
  ],
  "channels": [
    {
      "network": "youtube",
      "name": "Marcone's Channel",
      "avatar": "/v1/channels/youtube/avatar",
      "posts": 6,
      "reactions": 412,
      "comments": 58,
      "views": 5120,
      "engagement": 9,
      "shares": null,
      "saves": null,
      "reach": null,
      "watchTimeMin": null,
      "avgWatchTimeSec": null
    }
  ],
  "summary": [
    {
      "title": "Technical Shorts are in the lead",
      "text": "Behind-the-code posts got twice as many views as the others."
    }
  ],
  "posts": {
    "total": 1,
    "page": 1,
    "limit": 50,
    "sort": "reactions",
    "direction": "desc",
    "items": [
      {
        "id": "youtube:dQw4w9WgXcQ",
        "network": "youtube",
        "channelId": "01KA3V0R5D8M2WQ7X4HT9NZ1BF",
        "title": "The test that only failed on Mondays",
        "type": "short",
        "publishedAt": "2026-11-01T12:00:00Z",
        "url": "https://youtu.be/dQw4w9WgXcQ",
        "origin": "imported",
        "thumb": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
        "thumbType": "url",
        "reactions": 87,
        "comments": 12,
        "views": 1240,
        "shares": null,
        "saves": null,
        "reach": null,
        "watchTimeMin": null,
        "avgWatchTimeSec": null,
        "engagement": 8,
        "noMetrics": false,
        "postId": null,
        "tags": [
          "testing"
        ]
      }
    ]
  },
  "reading48h": [],
  "reading48hText": "| Date | Network | Post | Views | Likes | Comments | Followers | Source |\n|---|---|---|---|---|---|---|---|",
  "collection": {
    "last": "2026-11-07T14:02:11.482Z",
    "postsWithMetrics": 6,
    "postsWithoutMetrics": 0,
    "collecting": false,
    "storedReadings": 24,
    "imported": 12,
    "lastImport": "2026-11-07T14:02:11.482Z"
  }
}

null numbers mean "the network does not report it" (never zero). Filters: from, to, channel, network, type, tag, sort, page, limit. summary and reading48hText are free text the server writes in Portuguese; the example shows it in English.

Errors

No errors specific to this route besides the common ones.

Errors on any route

Status code When
401 unauthorized The Authorization: Bearer … header is missing.
401 invalid_api_key The key does not exist.
401 revoked_api_key The key has been revoked.
401 expired_api_key The key has expired.
403 forbidden The key's scope is not enough for this route (see the scope badge).
429 rate_limited The per-minute request limit was exceeded.

The body of every error is { "error": { "code", "message", "details"? } }. See all error codes.

Try it

Try it

The live test uses your key and your account. It stays off when you are not signed in.

Sign in to try it
Question or mistake on this page? contato@praeko.appView .md

Type to search pages, routes and error codes.