Skip to content
Ultimate and Enterprise plans

Post Track API

Bring your monitor's comments into your own systems, already classified by sentiment and tagged by your team: a BI dashboard, a CRM, a data warehouse or an alert of your own. The API is read-only, speaks JSON over HTTPS and authenticates with a token you create in the app.

Base URL
https://api.posttrack.com.br/public/v1
Authentication
Authorization: Bearer ptk_…
Format
JSON, dates in ISO 8601 (UTC)
Rate limit
600 requests per minute per token

Quickstart

  1. In the web app, open the monitor, go to Settings › API access tokens and choose Create token. Only the monitor's owners and admins see this screen.
  2. Name the token after the system that will use it, keep the "Read comments" permission and pick when it expires.
  3. Copy the token, which starts with ptk_. It is shown only once: store it in your secrets manager or as an environment variable.
  4. Make your first request:
curl "https://api.posttrack.com.br/public/v1/comments?max=50" \
  -H "Authorization: Bearer $POST_TRACK_TOKEN"

Authentication

Send the token in the Authorization header of every request, after the word Bearer. Requests without a valid token get a 401.

Authorization: Bearer ptk_...
  • A token belongs to one monitor and only reads that monitor's data. To read several monitors, create a token in each one.
  • Tokens expire in 30, 90 or 365 days, or never, as chosen when created. The token list shows when each one was last used.
  • Revoking a token on the same screen stops it immediately. Revoke it whenever it may have leaked, and create a new one.
  • Keep the token on your server. The API accepts calls from a browser, but a token shipped in a web page or app can be read by anyone who opens it.

List comments

GET/public/v1/comments

Returns the monitor's comments, newest first, with the total that match the filters.

Query parameters

maxinteger
How many comments to return, from 1 to 200. Defaults to 50.
offsetinteger
How many comments to skip, for paging. Defaults to 0.
sinceISO 8601
Only comments published at or after this instant, e.g. 2026-09-01T00:00:00Z.
untilISO 8601
Only comments published at or before this instant.
sentimentstring
One of positive, negative, neutral or unclassified.
platformstring
One of facebook, instagram, tiktok, twitter, youtube, tripadvisor or googlenews.

Example

curl "https://api.posttrack.com.br/public/v1/comments?sentiment=negative&platform=instagram&since=2026-09-01T00:00:00Z" \
  -H "Authorization: Bearer $POST_TRACK_TOKEN"
{
  "total": 128,
  "data": [
    {
      "id": "c0a8012e-...",
      "message": "Three days waiting for an answer in the DMs.",
      "platform": "instagram",
      "sentiment": "negative",
      "permaLink": "https://www.instagram.com/p/...",
      "likeCount": 4,
      "replied": false,
      "fromOwner": false,
      "parentId": null,
      "publishedAt": "2026-09-02T14:31:08Z",
      "instagramMedia": {
        "id": "...",
        "message": "Our spring collection is here",
        "permaLink": "https://www.instagram.com/p/...",
        "publishedAt": "2026-09-01T12:00:00Z",
        "instagramAccount": { "id": "...", "name": "Your brand", "username": null }
      },
      "facebookPost": null,
      "tiktokVideo": null,
      "twitterPost": null,
      "youtubeVideo": null,
      "tripadvisorLocation": null,
      "tags": ["Customer service", "Delivery"]
    }
  ]
}

Get a comment

GET/public/v1/comments/{id}

Returns a single comment of the monitor by its id, in the same shape as an item of the list.

curl "https://api.posttrack.com.br/public/v1/comments/c0a8012e-..." \
  -H "Authorization: Bearer $POST_TRACK_TOKEN"

The comment object

idstring
The comment's id in Post Track.
messagestring
The text of the comment.
platformstring
The network it was collected from, with the same values as the platform filter.
sentimentstring
positive, negative, neutral or unclassified, as classified by Post Track.
permaLinkstring
Link to the comment on the network, when it has one.
likeCountinteger
Likes the comment had at the last collection.
repliedboolean
Whether the comment has been answered.
fromOwnerboolean
Whether it was written by the monitored profile itself.
parentIdstring
The id of the comment it replies to. Null for a top-level comment.
publishedAtISO 8601
When the comment was published, in UTC.
facebookPost, instagramMedia, tiktokVideo, twitterPost, youtubeVideoobject
The post the comment was made on, with its id, text, link, publication date and the profile it belongs to. Only the one for the comment's platform is filled; the others are null.
tripadvisorLocationobject
For TripAdvisor reviews, the location reviewed.
tagsstring[]
Names of the tags assigned to the comment, in alphabetical order.

Each profile in a post (a page, an account or a channel) comes as an object with id, name and username; username is only filled for TikTok and X.

Pagination

Lists are paged with max and offset. The response's total says how many comments match, so you know when to stop. To sync continuously, filter with since from the publishedAt of the last comment you stored.

const comments = []

for (let offset = 0; ; offset += 200) {
  const response = await fetch(
    `https://api.posttrack.com.br/public/v1/comments?max=200&offset=${offset}`,
    { headers: { Authorization: `Bearer ${token}` } }
  )
  const page = await response.json()

  comments.push(...page.data)

  if (page.data.length === 0 || comments.length >= page.total) break
}

Rate limits

Each token can make 600 requests per minute, counted over a sliding window. Every response tells you where you stand:

X-RateLimit-Limit
Requests allowed per window.
X-RateLimit-Remaining
Requests left in the current window.
X-RateLimit-Reset
When the window frees up again, as a Unix timestamp in seconds.
Retry-After
Only on a 429: seconds to wait before trying again.

Errors

Errors use the HTTP status and a JSON body with a readable message, in English or Portuguese according to the Accept-Language header.

{
  "message": "Invalid API access token."
}
400
A query parameter is invalid, such as max above 200 or an unknown sentiment.
401
The token is missing, malformed, revoked or expired.
403
The token lacks the comments:read permission, the monitor is inactive or its project is not on the Ultimate or Enterprise plan.
404
The comment does not exist or belongs to another monitor.
429
Too many requests. Wait the seconds in Retry-After and try again.
500
Something failed on our side. Try again later and, if it persists, write to us.

Plans and versioning

The API is part of the Ultimate and Enterprise plans. If a project moves to a lower plan, its tokens are kept but the API refuses them until the plan goes back up.

The version is in the path (/public/v1). New fields and endpoints may be added to it at any time, so ignore fields you do not know; a change that breaks existing integrations comes in a new version, announced in advance.

Questions or need an endpoint that is not here? Write to suporte@diamovi.com.br.