Skip to content
yeetpostyeetpost

Meta

Health, uptime, public counts and the spec itself.


The spec, and the health of the API.

Get the current health of the API

GET/health

Reports whether the database answers and whether each background worker has finished a loop recently. A worker is ok when its last successful iteration is within three of its loop intervals, and never sooner than two minutes, so that a queue taking a minute to drain is not called an outage. status is degraded when any check is not ok. No API key needed. The answer is cached for 10 seconds, so time can be up to 10 seconds behind. Both health endpoints share one limit of 60 requests a minute per IP.

curl "https://api.yeetpost.com/api/v2/health"
response 200
{  "status": "ok",  "checks": {    "database": {      "ok": true,      "latencyMs": 3    },    "scheduledPosts": {      "ok": true,      "lastRunAt": "2026-08-29T11:04:58.120Z",      "lastOkAt": "2026-08-29T11:04:58.120Z"    },    "webhookDeliveries": {      "ok": true,      "lastRunAt": "2026-08-29T11:04:57.870Z",      "lastOkAt": "2026-08-29T11:04:57.870Z"    },    "xUsageSweep": {      "ok": true,      "lastRunAt": "2026-08-29T11:04:31.004Z",      "lastOkAt": "2026-08-29T11:04:31.004Z"    }  },  "version": "2.0.0",  "time": "2026-08-29T11:05:00.512Z"}

response 200

The health of the API. The status code is 200 whether the API is ok or degraded: read status.

response body

statusstringrequired

ok | degraded

checksobjectrequired
checks.databaseobjectrequired
checks.database.okbooleanrequired
checks.database.latencyMsintegerrequired

How long the health query took.

checks.scheduledPostsobjectrequired

One background worker loop. ok is false when the loop has not finished an iteration within three of its intervals, and when it has never finished one at all.

checks.scheduledPosts.okbooleanrequired
checks.scheduledPosts.lastRunAtstring <date-time> | nullrequired

When the loop last ran, whether or not that iteration finished.

checks.scheduledPosts.lastOkAtstring <date-time> | nullrequired

When the loop last finished an iteration.

checks.webhookDeliveriesobjectrequired

One background worker loop. ok is false when the loop has not finished an iteration within three of its intervals, and when it has never finished one at all.

checks.webhookDeliveries.okbooleanrequired
checks.webhookDeliveries.lastRunAtstring <date-time> | nullrequired

When the loop last ran, whether or not that iteration finished.

checks.webhookDeliveries.lastOkAtstring <date-time> | nullrequired

When the loop last finished an iteration.

checks.xUsageSweepobjectrequired

One background worker loop. ok is false when the loop has not finished an iteration within three of its intervals, and when it has never finished one at all.

checks.xUsageSweep.okbooleanrequired
checks.xUsageSweep.lastRunAtstring <date-time> | nullrequired

When the loop last ran, whether or not that iteration finished.

checks.xUsageSweep.lastOkAtstring <date-time> | nullrequired

When the loop last finished an iteration.

versionstringrequired

The API version that answered.

timestring <date-time>required

When the health was measured, ISO 8601 UTC.

Get daily uptime for the last 90 days

GET/health/history

The health of the API is sampled once a minute and kept for 90 days. This endpoint aggregates those samples per UTC day. What is measured is minutes, not samples: a day owes 1440 of them, today owes the minutes already behind it, and a minute with no sample counts as degraded exactly like a sample that came back degraded. A day owes minutes only from the first sample ever taken onwards, so a day that was over before sampling began is unmeasured and comes back with uptimePercent null. Every day of the window is in the answer, so a day that was sampled and came back with nothing is 0 percent rather than missing. No API key needed, and the answer is cached for 60 seconds. Both health endpoints share one limit of 60 requests a minute per IP.

curl "https://api.yeetpost.com/api/v2/health/history"
response 200
{  "days": [    {      "day": "2026-08-27",      "uptimePercent": null,      "samples": 0,      "degradedMinutes": 0    },    {      "day": "2026-08-28",      "uptimePercent": 100,      "samples": 1440,      "degradedMinutes": 0    },    {      "day": "2026-08-29",      "uptimePercent": 99.72,      "samples": 718,      "degradedMinutes": 2    }  ]}

query parameters

daysinteger, 1 to 90, default 90optional

How many days back to aggregate, 1 to 90.

response 200

One aggregate per UTC day, oldest first.

response body

daysobject[]required
days[].daystringrequired

The UTC day, YYYY-MM-DD.

days[].uptimePercentnumber | nullrequired

Ok minutes over the minutes the day owed, to two decimals. Missing minutes count against it. Null when the day was over before the first sample was ever taken: nobody was watching it, so it is unmeasured rather than down.

days[].samplesintegerrequired

How many of that day's minutes got a sample. A full day is 1440, and anything less is a stretch the API did not report in.

days[].degradedMinutesintegerrequired

Minutes of that day that were not ok, the ones with no sample included. Zero for an unmeasured day.

errors

Invalid query parameters. This endpoint takes no API key, so it carries no request id or rate limit headers.

What each code means and the fix: errors.

Get public usage counts for the product

GET/stats

Public numbers about yeetpost as a whole, which is what the marketing site's proof pill draws. Nothing here is about one account: postsThisWeek and postsAllTime count posts that reached a platform (no error, not a draft, not taken down, not still waiting in a queue), sandbox connections and test-key traffic left out, and liveConnections counts the connections that can be posted to right now. The counts are whole numbers exactly as counted, so round them yourself. No API key needed. The answer is cached for 60 seconds, and this endpoint has its own limit of 60 requests a minute per IP.

curl "https://api.yeetpost.com/api/v2/stats"
response 200
{  "postsThisWeek": 1284,  "postsAllTime": 41903,  "liveConnections": 372,  "platformsLive": [    "linkedin",    "x",    "bluesky",    "discord",    "telegram",    "mastodon"  ],  "time": "2026-08-30T11:05:00.512Z"}

response 200

The public counts, and the platforms a post can go out to today.

response body

postsThisWeekintegerrequired

Posts that reached a platform in the last 7 days.

postsAllTimeintegerrequired

Posts that reached a platform, ever.

liveConnectionsintegerrequired

Connections that can be posted to right now, sandbox ones left out.

platformsLivestring[]required

The platforms a post can go out to today.

timestring <date-time>required

When the counts were taken, ISO 8601 UTC.

Get this spec

GET/openapi.json

Returns this OpenAPI document. No API key needed.

curl "https://api.yeetpost.com/api/v2/openapi.json"

response 200

The OpenAPI 3.1 document for the yeetpost API.