Rate limits
Two different things are limited here, and they behave in opposite ways.
Get that distinction right and the rest of this page follows: 429 always means you are calling
us too fast, and it never means a reply to your customer was thrown away.
Your call limit
300 requests per minute by default, counted per account rather than per API key, so extra keys do not buy extra throughput.
It is a plan dimension. If your integration genuinely needs more, it is raised for your account rather than by changing a shared number — ask your account manager.
The window slides: we count the last 60 seconds continuously rather than resetting on a clock minute, so you cannot spend one minute’s allowance at the end of one window and the next at the start of the following.
When you exceed it:
details names the number you are held to, so you can tell a raised limit from the default without
asking us.
300/min is sized against real traffic, not guessed. A partner with 500 pages generates about 7 requests a minute at peak from replies. What actually consumes an allowance is polling — 500 pages polled once a minute is 500 requests a minute on its own. If you are near this limit, you are almost certainly polling something that should be a webhook.
A blunt per-IP ceiling also sits at our gateway as infrastructure protection. It is set far above every account limit, so you will meet the limit above — which names its number and can be raised — rather than an opaque gateway rejection. It is not a product dimension and is not sold.
Instagram’s limits
Enforced per Instagram account, not per app, per key or per plan. No ParsChat plan raises them.
Messaging is counted separately from the impressions budget below, so sending a DM does not draw down the quota that reading comments uses.
750 per hour is the one that binds
A private reply is a DM triggered by someone’s comment — the core of comment-to-DM automation. On comments under a post or reel you get 750 per hour, which is roughly one every five seconds sustained and does not grow with the account’s size.
This ceiling is reached by success, not by misuse. One post doing unusually well exhausts it, and no plan raises it.
Comments on a Live stream are different: 100 per second, a 480× higher ceiling. If you are building for Live selling, do not plan against 750 — it does not apply to you. Live commerce is a common pattern on Instagram, and the two limits are far enough apart that assuming the stricter one would make you queue traffic you could have sent immediately.
The send ceilings (100/s, 10/s) are orders of magnitude above anything this product generates. They are listed for completeness; you will not design around them.
The impressions budget
Everything that is not messaging — reading comments, replying publicly, hiding, listing posts — shares one 24-hour budget:
The consequence is counter-intuitive and worth stating plainly: a busy account has effectively unlimited quota, and a quiet one has almost none.
That is usually fine, because work scales with reach: a page nobody sees receives no comments to answer. Polling is the exception, because it scales with time instead.
On a page with one impression a day the whole budget is 4,800, and polling alone burns 60% of it achieving nothing.
Do not poll for new messages or comments. Use webhook events. A webhook delivery costs nothing against this budget, and on a small account polling can exhaust your customer’s entire daily quota on its own.
The 24-hour reply window
You have 24 hours to reply to an end user’s message. After that Instagram refuses the reply, whatever your automation rules say.
This is the one that bites hardest, because it is not a slowdown. A reply sent at 25 hours does not arrive late — it does not arrive.
Show your operators how long is left on a conversation rather than letting them discover the window by failing to answer.
Message history stops at 20
Instagram returns only the 20 most recent messages in a conversation. Older ones are not paginated — they are unreachable.
This is why webhook delivery matters more than it looks: if your endpoint is down, you cannot backfill what you missed beyond those 20 messages. A webhook outage is not repairable after the fact.
Treat delivery failures as something to alert on, not something to reconcile later.
Replies are queued, not dropped
When a reply cannot be sent immediately — because Instagram refused it, or because our own send queue is draining — it is held and sent later. Nothing is discarded.
Why queue rather than reject: the requests being held are automated replies to a real person who messaged a shop. Dropping one costs a customer conversation, and you could not meaningfully retry it anyway. By the time you noticed, the moment has passed.
The queue holds for two hours
A queued reply is held for at most 2 hours. After that it is dropped and recorded.
A reply is only worth sending while the person is still in the conversation. Past a couple of hours the end user has moved on. An answer arriving then reaches someone who has forgotten the question, and makes your product look erratic rather than slow.
Two hours also bounds the backlog itself: the queue is limited by time rather than by a separate depth limit.
What you see
So 429 always means “you are calling us too fast”. It never means “your customer’s reply was
thrown away.”
We do not pass Instagram’s own rate-limit state through this API. If a call fails because
Instagram refused it rather than because we did, you will see it as a failed send rather than a
429.
Files, voice and documents
Attachment size is a plan dimension. Limits are per file, checked at upload.
The usual alternative spellings are accepted too (image/jpg, video/avi, audio/m4a, audio/wave, audio/x-wav, audio/vnd.wave). This is exactly what Instagram delivers: GIF, WebP and other formats are refused at upload, rather than accepted and then failing when you send.
Every plan with API access sends all four types — the difference between tiers is size, not which kinds of file you may send.
If your agreement sets different caps, those apply instead of the table above.
These are our limits, not Instagram’s. Instagram allows considerably more (8 MB images, 25 MB for everything else). We set lower caps deliberately: adopting Instagram’s ceilings would more than double steady-state storage for a capability almost nobody uses.
What counts
A voice note is an ordinary attachment with type: voice, so the audio limit applies. At 64 kbps
— a normal voice-note bitrate — 5 MB is about 10 minutes and 10 MB about 21 minutes, so
size is rarely the constraint in practice.
Unsent uploads expire after 24 hours
An attachment you upload but never send is discarded after 24 hours.
Upload close to when you send. The two-step flow exists so a large upload can be retried without re-sending the message — not so you can stage files in advance.
How long conversations are kept
Conversation history is retained for a period that comes from the plan, then removed.
If an account holds more than one subscription, the longest retention wins. Retention is a duration, not a quota: adding a 6-month and a 1-year plan to get 18 months would be meaningless, and taking the shorter would delete history a customer paid a higher tier to keep.
Retention runs whether or not a channel is still enabled, so disabling a channel preserves its configuration and rules but does not freeze the clock on its conversations. Export anything you need to keep beyond your window.