Instagram DM API from your own account
Send a direct message from your connected Instagram account: open a new conversation with a handle (or the messaging_id from instagram.profile), or reply in an existing thread by chat_id. You are the sender of record. A first message to someone who does not follow you lands in their requests folder.
Unipile:
all inputs
✓ marks a combination proven with a real provider call. Others are wired and unit-tested; their first live run verifies them.
| Provider | Status |
|---|---|
Unipile |
live |
Unit: per_message · unmatched results billed: no
Priced per message sent; a refused send bills nothing. Instagram tolerates about 100 actions a day and 10 an hour per account; new accounts start lower.
The exact quote is returned by /v1/inspect before every call and held with headroom (1.5x the quote) on execution. The quote is the price floor: if the provider's actual cost overruns it, the run bills at about 1.5x cost, never above the hold. The unused part of every hold is released.
curl https://api.routergrowth.com/v1/run \ -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \ -d '{ "capability": "instagram.message", "input": { "text": "..." }, "routing": {"provider": "auto"} }'
{
"properties": {
"account_id": {
"description": "The account name (or id) from instagram.accounts; optional when you have one account",
"type": "string"
},
"chat_id": {
"description": "From instagram.messages: reply in that thread",
"type": "string"
},
"handle": {
"description": "Start a new conversation with this account (@handle)",
"type": "string"
},
"messaging_id": {
"description": "From instagram.profile; skips the lookup",
"type": "string"
},
"profile_url": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
}
chat_id · message_id · messaging_id · handle