Pagination
Cursor pagination on the three listings that can grow without bound.
Three listings can grow without bound and take a cursor: GET /posts, GET /projects/:id/reports/performance and GET /projects/:id/radar/inspirations. Every other listing has a fixed ceiling, by business rule or by plan, and needs no cursor.
The cursor is opaque. Do not read one or build one: pass back in cursor exactly what came in the next field of the previous response. When next comes back null, the pages are over.
curl -H "Authorization: Bearer ptr_live_..." \
"https://api.posttar.com/v1/posts?limit=2&cursor=eyJjaGF2ZSI6IjIwMjYtMDktMTNUMDU6MTg6MDYuOTE4Njcz..."A malformed cursor is refused with invalid_input. It never silently falls back to page one, which would make a while (next) loop spin forever on the same rows.