Analytics
A post's numbers, and totals per day and per platform.
The numbers yeetpost reads back off the platforms after a post goes out.
Get a post's numbers
GET/posts/{postId}/metrics
The numbers yeetpost has read back from the platform for one post: the newest read, and every read before it.
A post is read an hour after it goes out, then hourly for 48 hours, then once a day until it is 30 days old. Before the first read latest is null.
What each platform reports differs, and a number a platform does not report is null rather than 0. Bluesky and Mastodon give likes, reposts and replies for free. LinkedIn gives likes and comments on any share, and impressions and clicks only on a page. X gives impressions, likes, reposts and replies, and X charges for the read, so it is off unless the account has X analytics enabled.
Rate limit: 60 requests per minute per API key.
curl "https://api.yeetpost.com/api/v2/posts/6f1b0c8a-1f3d-4d3e-9a2b-2f5a1c9e7d10/metrics" \ -H "x-api-key: $YEETPOST_API_KEY"{ "latest": { "fetchedAt": "2026-08-30T10:00:00.000Z", "impressions": null, "likes": 12, "reposts": 3, "replies": 1, "clicks": null }, "history": [ { "fetchedAt": "2026-08-29T10:00:00.000Z", "impressions": null, "likes": 4, "reposts": 1, "replies": 0, "clicks": null }, { "fetchedAt": "2026-08-30T10:00:00.000Z", "impressions": null, "likes": 12, "reposts": 3, "replies": 1, "clicks": null } ]}path parameters
Id of the post, as returned by POST /posts or GET /posts.
response 200
The post's numbers.
headers: x-request-id, x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset
response body
The most recent read, null when the post has not been read yet. A post is first read an hour after it goes out.
Every read, oldest first. A post is read hourly for 48 hours and then daily until it is 30 days old, so a finished history is 78 reads.
An ISO 8601 timestamp in UTC, in the same format as the timestamps you send in: 2026-08-26T09:24:11.412Z.
How many times the post was shown. X and LinkedIn pages report it; Bluesky, Mastodon and personal LinkedIn profiles do not. Null means the platform does not report this number, which is not the same as zero.
Likes, favourites or reactions, whatever the platform calls them. Null means the platform does not report this number, which is not the same as zero.
Reposts, retweets or boosts. On Bluesky quotes are counted here too. LinkedIn does not report it. Null means the platform does not report this number, which is not the same as zero.
Replies or comments. Null means the platform does not report this number, which is not the same as zero.
Link clicks. LinkedIn pages report it; nobody else does. Null means the platform does not report this number, which is not the same as zero.
errors
The post id is not a valid id.
Missing or invalid API key.
No post of yours with that id.
More than 60 requests in a minute for this API key. Back off and retry.
Something went wrong on our side. Quote the x-request-id when you report it. A failure can happen before the rate limit is checked, so this response carries the request id and nothing else.
What each code means and the fix: errors.
Totals, a per-day series and a per-platform split
GET/analytics
Every post that went out in a window, with the newest numbers read for each of them.
Counters are running totals, so a post counts once, at whatever its newest read said. A post counts on the day it went out, which is what makes days a series you can chart.
The window is named in whole UTC days at both ends. Left out, it is the last 30 days, which is exactly as long as a post's numbers are refreshed for. The longest window is 365 days.
Scoped like everything else: a test key counts sandbox posts only, and a key scoped to a profile counts that profile's posts only.
Rate limit: 60 requests per minute per API key.
curl "https://api.yeetpost.com/api/v2/analytics" \ -H "x-api-key: $YEETPOST_API_KEY"{ "totals": { "posts": 2, "readPosts": 2, "impressions": null, "likes": 16, "reposts": 4, "replies": 1, "clicks": null }, "days": [ { "day": "2026-08-29", "posts": 1, "impressions": 0, "likes": 4, "reposts": 1, "replies": 0 }, { "day": "2026-08-30", "posts": 1, "impressions": 0, "likes": 12, "reposts": 3, "replies": 1 } ], "byPlatform": [ { "platformId": "bluesky", "posts": 2, "impressions": 0, "likes": 16, "reposts": 4, "replies": 1, "clicks": 0 } ], "from": "2026-08-29", "to": "2026-08-30"}query parameters
First UTC day of the window, inclusive, as YYYY-MM-DD.
Last UTC day of the window, inclusive, as YYYY-MM-DD.
Count only the posts that went out through this profile's connections.
Count only the posts that went out to this platform, such as bluesky.
Count only the posts that went out through this connection.
response 200
The window.
headers: x-request-id, x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset
response body
Posts that went out in the window.
How many of those posts have been read at least once.
Null when readPosts is 0: nothing has been read yet, which is not the same as reading zero of it.
One entry per UTC day of the window, gaps included, so it can be charted as it comes. A post counts on the day it went out, and its numbers count with it.
The same window split by platform. A platform with no posts in the window is not listed.
The platform, such as bluesky or mastodon.
First UTC day of the window, inclusive.
Last UTC day of the window, inclusive.
errors
Missing or invalid API key.
More than 60 requests in a minute for this API key. Back off and retry.
Something went wrong on our side. Quote the x-request-id when you report it. A failure can happen before the rate limit is checked, so this response carries the request id and nothing else.
What each code means and the fix: errors.