Posttar API

Reports

3 endpoints for reports, with parameters and a real response example.

GET/projects/{id}/reports/summary

Get a period summary

How many posts the project has published, scheduled, and in draft, optionally within a period. Also reports how many published posts were never measured, which is absence of measurement, not zero views.

ParameterInTypeDescription
idrequiredpathstringmax 200 charsOpaque id from a previous response. Do not build one: an id that is not a valid identifier is refused with invalid_input, and one that belongs to another workspace with not_found.
fromquerystringStart of the period, by publication date. ISO 8601, a date (2026-09-01) or a full instant (2026-09-01T13:00:00Z). Anything else is refused with invalid_input and never ignored. Without it, the whole history.
toquerystringEnd of the period, by publication date. ISO 8601, a date (2026-09-01) or a full instant (2026-09-01T13:00:00Z). Anything else is refused with invalid_input and never ignored.

Response

{
  "period": {
    "from": null,
    "to": null
  },
  "published": 0,
  "scheduled": 0,
  "drafts": 21,
  "publishedWithoutMetrics": 0,
  "publishedWithoutDate": 0
}

GET/projects/{id}/reports/performance

Get posts' performance

Published posts with each one's numbers, in two lists that are never mixed: measured ones with real views, likes, and comments, and unmeasured ones Posttar never measured (their views are null, which is not the same as zero).

ParameterInTypeDescription
idrequiredpathstringmax 200 charsOpaque id from a previous response. Do not build one: an id that is not a valid identifier is refused with invalid_input, and one that belongs to another workspace with not_found.
fromquerystringStart of the period, by publication date. ISO 8601, a date (2026-09-01) or a full instant (2026-09-01T13:00:00Z). Anything else is refused with invalid_input and never ignored. Without it, the whole history.
toquerystringEnd of the period, by publication date. ISO 8601, a date (2026-09-01) or a full instant (2026-09-01T13:00:00Z). Anything else is refused with invalid_input and never ignored.
limitqueryintegerDefault 20, max 100.
cursorMeasuredquerystringmax 2048 charsOpaque cursor from this response's nextMeasured. Pages the measured ranking, and does not touch the other list.
cursorWithoutMetricsquerystringmax 2048 charsOpaque cursor from this response's nextWithoutMetrics. Pages the withoutMetrics list, and does not touch the ranking.

Response

{
  "period": {
    "from": null,
    "to": null
  },
  "measured": [],
  "totalMeasured": 0,
  "nextMeasured": null,
  "withoutMetrics": [],
  "totalWithoutMetrics": 0,
  "nextWithoutMetrics": null,
  "totals": null
}

GET/projects/{id}/reports/daily

Get the account day by day

The project's whole Instagram account, one entry per day: views, reach, likes, comments, saves, shares and interactions. Stories, posts made outside Posttar and ads are included, so it does not match the sum of the posts' performance. Days follow Instagram's own day, in dayTimezone. A day missing from days has no number yet, which is not zero. partialDay is the day still in progress, whose numbers keep growing.

ParameterInTypeDescription
idrequiredpathstringmax 200 charsOpaque id from a previous response. Do not build one: an id that is not a valid identifier is refused with invalid_input, and one that belongs to another workspace with not_found.
fromquerystringFirst day, YYYY-MM-DD (a full ISO instant is accepted and cut to its date). Defaults to 29 days before to. Anything else is refused with invalid_input.
toquerystringLast day, YYYY-MM-DD. Defaults to today. The period can have at most 400 days.

Response

{
  "period": {
    "from": "2026-08-22",
    "to": "2026-08-24"
  },
  "dayTimezone": "America/Los_Angeles",
  "account": {
    "username": "yourbrand",
    "active": true
  },
  "days": [
    {
      "date": "2026-08-22",
      "views": 2902,
      "reach": 624,
      "likes": 41,