Sentloop
Docs

Instagram: the 24-hour reply window

No app may start an Instagram conversation. What that means for a birthday message.

What Meta and Instagram actually permit in 2026, checked rather than assumed. Every line traces to a source at the bottom.

Professional API:                        SUPPORTED
Personal-account API:                    UNSUPPORTED
Server-side scheduled sending:           SUPPORTED  (Professional, conditional)
Native Instagram scheduling:             SUPPORTED  (in-app only, 29 days)
Third-party invocation of native:        UNSUPPORTED
Device-independent delivery:             SUPPORTED  (Professional, conditional)
                                         UNSUPPORTED (personal, unconditional)

The word doing the work is conditional, and it is explained under "Important restrictions". Skipping it produces a product that lies.


Professional API - SUPPORTED

Two routes exist. The newer one matters because it removes a requirement people usually assume is unavoidable.

Instagram API with Instagram Login - "does not require a Facebook Page to be linked to the Instagram professional account." Authentication is Business Login for Instagram: the user signs in to Instagram directly, with no Facebook account in the loop. Creator accounts need no linked Page at all.

Instagram API with Facebook Login - the older path, Page-linked.

SentLoop should prefer Instagram Login. It is fewer steps, fewer accounts, and it is the difference between "connect Instagram" and "first create a Facebook Page".

Required permissions

instagram_business_basic              base scope, required alongside
instagram_business_manage_messages    reading and sending DMs

Both need Advanced Access and therefore Meta App Review. Until that is granted the app can only message accounts with a role on it, which is a real constraint on any consumer launch and not a formality.

Server-side scheduled sending - SUPPORTED, conditionally

This is the brief's central goal and it genuinely works for Professional accounts:

SentLoop scheduler  →  Meta Send API  →  Instagram  →  Recipient

No device of the user's is involved. The phone can be off. SentLoop's backend wakes at 08:00, re-checks eligibility, and calls Meta. That is true device-independent delivery, and it is already exercised by npm run verify:instagram.

The condition is who you may send to, not when.


Personal-account API - UNSUPPORTED

There is no Instagram API for personal accounts. Not restricted - absent. No OAuth scope, no endpoint, no review process that grants one.

Anything advertising personal-account DM sending is driving the private mobile protocol or a logged-in session. Both are forbidden by the brief and by Meta's terms, and SentLoop does neither.


Native Instagram scheduling - SUPPORTED in-app, UNSUPPORTED for third parties

Instagram shipped native DM scheduling: type the message, press and hold the send button, pick a date and time, up to 29 days ahead. A banner in the thread shows how many are pending. It works for personal accounts, which is exactly where the API cannot reach.

So the obvious question is whether SentLoop can ask Instagram to do that. It cannot, and the reason is structural rather than a missing permission.

Instagram's entire documented third-party surface is Stories sharing:

Platform Mechanism
iOS instagram-stories://share?source_application=%@, plus pasteboard keys such as com.instagram.sharedSticker.backgroundImage
Android Implicit intent com.instagram.share.ADD_TO_STORY

There is no documented URL scheme, intent, share extension, App Intent or Shortcuts action for composing, sending, or scheduling a DM.

And even if Instagram published an App Intent tomorrow, it would not close this. App Intents are invoked by Siri, Shortcuts, Spotlight and the Action button - not by an arbitrary third-party app calling into another app's process. The user could build a Shortcut; SentLoop's server could not trigger one. That is device-assisted by definition, which is a different product claim.

This mirrors the finding in APPLE_API_FINDINGS.md for iMessage: a native scheduling feature existing is not the same as a third party being able to invoke it.


Important restrictions

Conversations are user-initiated. Meta: "Conversations only begin when an Instagram user sends a message to your app user." There is no cold DM through the official API, at any tier, for any account type.

The 24-hour window. Once someone messages you, you may reply freely for 24 hours. Outside it the API refuses.

Marketing Messages - the one mechanism that reaches outside the window, and it does not do what it first appears to. The opt-in request itself may only be sent inside the 24-hour window, and opting in does not reopen that window. So it still requires the person to have messaged first. It is also scoped to the topic they opted into: using it to carry "want to play soccer tomorrow?" would be using a marketing channel for something it was not approved for, which SentLoop will not do for the same reason it refused to reuse an order-confirmation template on WhatsApp.

Human Agent tag extends to 7 days, for customer support handoffs. A birthday note is not customer support.

Rate limits. Meta enforces per-account throughput; Instagram's own anti-spam systems add a practical ceiling well below it. Treat 429 and policy errors as distinct: one is temporary, the other is permanent, and retrying the second is how an account gets restricted.


What this means for SentLoop

Account Route Phone needed?
Professional, recipient messaged in last 24h Meta Send API, server-side No
Professional, opted into a Marketing Message topic Marketing Messages, server-side, topic-scoped No
Professional, no prior contact Nothing sends. Handoff. Yes
Personal, any recipient No API exists. Handoff, or native scheduling by hand. Yes

The honest headline: SentLoop can deliver Instagram DMs with the phone off, for Professional accounts, to people who have messaged you. Everything else is a handoff, labelled as one.


Not verified here

  • Test 1 (Professional, phone off) was not run end to end against a live account. This deployment has no Instagram Professional account connected - connecting one needs the account holder. The code path is exercised against a stubbed Meta endpoint by npm run verify:instagram, which asserts an in-window send goes out automatically and an out-of-window one is never recorded as sent.
  • Test 2 (personal, native scheduling) is not possible. There is no supported mechanism to invoke, so there is nothing to test. Documented rather than attempted, per the brief.
  • Whether Instagram's native scheduling survives the phone being offline at delivery time was not tested. It is not reachable by SentLoop either way, so it does not change any product decision.

Sources