Repository navigation
v2.21.1 — the platform constants, actually verified
v2.21.0 shipped post-publisher with a note in its limits reference reading "last verified: not yet". This release is that verification.
Four numbers were wrong, each in the direction that hurts:
| Was | Actually | |
|---|---|---|
| Instagram publishing cap | 25 posts / 24h | 100 posts / 24h |
| Instagram Reels file size | 1 GB | 300 MB (3 s – 15 min) |
| YouTube upload allowance | 1600 units of 10,000/day ≈ 6 | 100 uploads/day, on their own allocation |
| LinkedIn API version | 202401 |
202607 — the old one had aged out |
The Instagram cap would have blocked three quarters of a legitimate posting day, phrased as certainty. The Reels limit would have let a 700 MB file pass preflight, stage to S3, get fetched by Meta, and fail only then. The YouTube figure was off by sixteen times, in the direction that makes people ration something they have plenty of.
Also corrected: Telegram photos are held to sendPhoto's 10 MB rather than the general 50 MB upload ceiling, and the X module no longer asserts a "17 posts per 24h free tier" that appears nowhere in X's documentation — the verifiable ceilings are 10,000/24h per app and 100/15min per user.
What was checked and found correct
Every endpoint path and request shape across all seven platforms. TikTok's chunking rules including the 5–64 MB range, the floor-division chunk count and the single-chunk-equals-file-size rule. X's POST /2/media/upload with INIT/APPEND/FINALIZE/STATUS on a Bearer token — not the legacy upload.twitter.com host. LinkedIn's content.multiImage.images[] shape with id + altText, its x-restli-id response header and both required version headers. Threads' container flow, 500-character limit, 2–20 carousel and 250/day cap. Instagram's 2200-character caption, 30 hashtags, 8 MB images, 10-item carousel and status_code polling field.
So it does not happen again
Thirteen tests pin the verified constants — a plausible-looking wrong number is invisible in code review. platform-limits.md now marks every row with whether it was read off live documentation or carried from a parameter table that could not be machine-read, lists the source document per platform, and each corrected constant in the code carries a comment naming its source and date.
Full detail: CHANGELOG