In short
- Official: Meta login in the panel or shareable link; recipient = IGSID; 24h window
- Unofficial: username and password (or link);
acceptInstagramTerms: true; warm-up on new accounts - In both cases you use the same API; only how you connect the account changes
Before you start
- An API key (
sk_live_...orsk_test_...for sandbox) - Instance and send permissions on the key. See Scopes
- In the examples, replace
sk_live_xxxxxwith your key
Just getting started? Use
sk_test_... and check the result in the Sandbox inbox.- Official connection
- Unofficial connection
1. Connect the account
Three paths, pick what fits your integration:1A, Via dashboard
- Instagram → New connection → Official
- Sign in with Meta (or paste manual credentials on the draft)
- When status is active, note the instance id
1B, API with a client link
shareableLink.hostedUrl to the client. On the page they see Continue with Meta. When done, the instance becomes ACTIVE.1C, API with Meta credentials
Embedded (after Facebook Login in the browser):2. How to get the recipient’s IGSID
In official mode, theto field uses IGSID (Page-scoped ID), not @username.- Webhook
instagram.received:fromfield on the inbound message - API
GET /v1/instagram/messages/inbound/{id}after the customer sends a DM - Dashboard: received message detail
3. Send the first DM
4. After the first send
Configure the Meta webhook at{your_base}/webhooks/meta/instagram, listen for instagram.received and send status. For comment hide, use the comments routes in the API reference.All send types
In the API reference, open Send Instagram message (POST /v1/instagram/messages) and pick the example in the playground: Text, Image, Video, Audio, Document, Scheduled, official IGSID, or unofficial username.

