Skip to content
reelspanDocs

After you post

Publishing limits

See how many more posts a profile's Instagram and Threads accounts may publish in the next 24 hours, read live from each network's own quota.

GETapi.reelspan.com/v1/publishing-limitsTry it →

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"
{
  "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=instagram or platform=threads asks for one only; then a network that isn't connected gets 404 profile_platform_mapping_invalid.
  • posts: used in the window, the network's limit, what is remaining, and the window's length in window_seconds (24 hours). Threads adds replies, counted separately; a first_comment on Threads is a reply.
  • limit_reached is true when 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.

Parameters

  • profilestring · query
  • profile_usernamestring · query
  • userstring · query
  • platformstring · query

    instagramthreads

  • refreshstring · query

    truefalse

Responses

200 Limits

{
  "success": true,
  "limits": {
    "instagram": {
      "posts": {
        "used": 0,
        "limit": 0,
        "remaining": 0,
        "window_seconds": 0
      },
      "limit_reached": true,
      "fetched_at": "string",
      "cached": true
    },
    "threads": {
      "posts": {
        "used": 0,
        "limit": 0,
        "remaining": 0,
        "window_seconds": 0
      },
      "replies": {
        "used": 0,
        "limit": 0,
        "remaining": 0,
        "window_seconds": 0
      },
      "limit_reached": true,
      "fetched_at": "string",
      "cached": true
    }
  },
  "errors": {}
}

400 Invalid input

{
  "success": false,
  "message": "string",
  "error": "string",
  "error_code": "string"
}

404 No such profile or account

{
  "success": false,
  "message": "string",
  "error": "string",
  "error_code": "string"
}

Something unclear or missing? Write to [email protected] and we’ll fix the page.