Skip to main content
Instagram’s private API does not publish official rate limits, but it actively monitors request cadence and flags accounts that deviate from realistic human behaviour. JxInsta communicates directly with those same endpoints, which means your application is responsible for its own pacing. Sending too many requests too quickly can result in a soft throttle, a RATE_LIMITED error, a checkpoint challenge that locks the session, or a permanent sentry block on the account. Following the guidelines below keeps your integration within observed safe thresholds.

Minimum delay between requests

Always wait at least 5 seconds between consecutive API calls on the same session. This applies to every request type — loading a profile, fetching a feed, liking a post, or following a user.
The 5-second figure is a safe lower bound based on observed behaviour, not a guaranteed threshold. For sustained automation, randomise the delay between 5 and 15 seconds to better mimic human usage patterns.
Use Thread.sleep() to introduce the pause. Always restore the interrupt flag if the sleep is interrupted.
Adding a 5-second delay between requests
// Add a 5-second delay between requests
try {
    Thread.sleep(5000);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

// Catch rate limit errors
try {
    profile.follow();
} catch (InstagramException e) {
    if (e.getReason() == InstagramException.Reasons.RATE_LIMITED
            || e.getReason() == InstagramException.Reasons.THROTTLED) {
        System.out.println("Rate limited. Wait before retrying.");
    }
}

Login attempt limits

Instagram is particularly sensitive to repeated login attempts. Sending more than 3 login requests within a 2-minute window for the same account is a strong signal of automated credential use and will likely trigger a checkpoint or temporary block.
Do not retry login after receiving CHECKPOINT_REQUIRED or TWO_FACTOR_REQUIRED. Those reasons require user interaction and cannot be resolved by retrying the same credentials.
Cache your session and reload it from disk on startup rather than logging in on every run. This keeps login attempts to a minimum across the lifetime of the account.

Daily action limits

Instagram enforces per-account daily caps on social actions. These limits vary by account age and activity history, but the following are commonly observed safe thresholds.
ActionApproximate limit
Likes~30 per hour
Follows~20–30 per hour, ~150–200 per day
Comments~30–60 per day
Direct messages~30–50 per day
New or recently created accounts have significantly stricter limits than established accounts. Start well below these thresholds when testing with a fresh account.
Spread actions evenly across the day rather than bursting all activity at once. A sustained rate near the hourly ceiling is riskier than the same total volume distributed over many hours.

Detecting rate limiting in your code

When Instagram signals that your request cadence is too high, JxInsta throws an InstagramException whose getReason() returns either RATE_LIMITED or THROTTLED. Check for these reasons and back off immediately — do not retry right away, as continuing to send requests after receiving these signals worsens the situation.
When you receive RATE_LIMITED, stop all requests on that session for at least 15 minutes. For THROTTLED, a pause of at least 5 minutes is a reasonable starting point. Consider exponential backoff for repeated occurrences in the same session.