Instagram and Threads cap how many posts an account can publish through their APIs in a moving 24-hour window. This endpoint asks each network how much of that an account has used, so you can hold a post back instead of watching it fail.
curl "https://api.reelspan.com/v1/publishing-limits?profile=my-brand" \
-H "Authorization: Bearer $REELSPAN_API_KEY"import { Reelspan } from 'reelspan';
const reelspan = new Reelspan();
const { limits } = await reelspan.request('GET', '/v1/publishing-limits', { query: { profile: 'my-brand' } });from reelspan import Reelspan
reelspan = Reelspan()
limits = reelspan.request("GET", "/v1/publishing-limits", query={"profile": "my-brand"})["limits"]{
"success": true,
"limits": {
"instagram": {
"posts": { "used": 12, "limit": 50, "remaining": 38, "window_seconds": 86400 },
"limit_reached": false,
"fetched_at": "2026-11-07T10:15:02.114Z",
"cached": false
},
"threads": {
"posts": { "used": 4, "limit": 250, "remaining": 246, "window_seconds": 86400 },
"replies": { "used": 31, "limit": 1000, "remaining": 969, "window_seconds": 86400 },
"limit_reached": false,
"fetched_at": "2026-11-07T10:15:02.380Z",
"cached": false
}
}
}The answer
- One entry per network the profile has connected, of Instagram and Threads. A network that isn't connected is left out.
platform=instagramorplatform=threadsasks for one only; then a network that isn't connected gets 404profile_platform_mapping_invalid. posts:usedin the window, the network'slimit, what isremaining, and the window's length inwindow_seconds(24 hours). Threads addsreplies, counted separately; afirst_commenton Threads is a reply.limit_reachedistruewhen no posts are left.- The numbers come from the networks. Instagram reports a quota of 50 posts, and a carousel counts as one. Threads allows 250 posts and 1,000 replies.
The profile goes in profile (profile_username and user work too).
Caching
Each account's answer is kept for 60 seconds, so calls in a burst don't each reach the network: cached is true on those, and fetched_at says when the numbers were read. Add refresh=true to read them again now.
When a network doesn't answer
A network that fails doesn't fail the call. It is left out of limits and listed under errors instead:
{
"success": true,
"limits": {
"threads": { "posts": { "used": 4, "limit": 250, "remaining": 246, "window_seconds": 86400 }, "replies": { "used": 31, "limit": 1000, "remaining": 969, "window_seconds": 86400 }, "limit_reached": false, "fetched_at": "2026-11-07T10:15:02.380Z", "cached": false }
},
"errors": {
"instagram": { "error": "The Instagram account needs to be reconnected", "error_code": "reauth_required" }
}
}reauth_required means the account must be reconnected; any other code is the network's own.
Reading limits needs a key with the read scope. See Network posting limits for the caps on other networks.