curl --request GET \
--url https://api.indm.social/v1/accounts/{account_id}/health \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.indm.social/v1/accounts/{account_id}/health', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.indm.social/v1/accounts/{account_id}/health"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"account_id": "6f1c2a9e-3b7d-4e21-9a55-0c8d2f4b7e10",
"username": "maya.grows",
"status": "connected",
"live_automations": 2,
"automations_that_cannot_fire": [],
"send_speed_per_hour": 200,
"messages_waiting": 4,
"messages_failed_last_24h": 0,
"messages_failed_last_7d": 1,
"instagram_errors_last_7d": {
"Instagram refused to message specific people": 1
},
"reason": "token_expired",
"dark_since": "2023-11-07T05:31:56Z",
"last_inbound_received_at": "2026-11-05T08:52:40Z"
}{
"error": {
"type": "authentication_error",
"code": "api_key_expired",
"message": "This API key expired on 3 Feb 2027. Create a new one under Settings → API keys.",
"doc_url": "https://docs.indm.social/errors#api_key_expired"
}
}{
"error": {
"type": "not_found",
"code": "media_not_found",
"message": "There's no post with that id in this workspace. GET /v1/media lists them; refresh the account first if it was just published.",
"param": "media_id",
"doc_url": "https://docs.indm.social/errors#media_not_found"
}
}{
"error": {
"type": "rate_limited",
"code": "rate_limited",
"message": "That's more than 120 requests a minute on one key. Wait 18s and try again.",
"doc_url": "https://docs.indm.social/errors#rate_limited"
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Something went wrong on our end. Try again; if it keeps happening, quote request req_8Qm2ZcY4vN7tLp1K to support@indm.social.",
"doc_url": "https://docs.indm.social/errors#internal_error"
}
}Check account health
An end-to-end check of one account: whether Instagram has paused the connection and why, how fast it sends and how much is waiting, which errors Instagram has returned lately, and whether any live automation is set up in a way that can’t fire. The answer to “why did nobody get the DM?”.
A queue is not a fault. inDM spaces sends on purpose so Instagram keeps trusting
the account; messages_waiting drains at send_speed_per_hour.
Needs a read or full key.
curl --request GET \
--url https://api.indm.social/v1/accounts/{account_id}/health \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.indm.social/v1/accounts/{account_id}/health', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.indm.social/v1/accounts/{account_id}/health"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"account_id": "6f1c2a9e-3b7d-4e21-9a55-0c8d2f4b7e10",
"username": "maya.grows",
"status": "connected",
"live_automations": 2,
"automations_that_cannot_fire": [],
"send_speed_per_hour": 200,
"messages_waiting": 4,
"messages_failed_last_24h": 0,
"messages_failed_last_7d": 1,
"instagram_errors_last_7d": {
"Instagram refused to message specific people": 1
},
"reason": "token_expired",
"dark_since": "2023-11-07T05:31:56Z",
"last_inbound_received_at": "2026-11-05T08:52:40Z"
}{
"error": {
"type": "authentication_error",
"code": "api_key_expired",
"message": "This API key expired on 3 Feb 2027. Create a new one under Settings → API keys.",
"doc_url": "https://docs.indm.social/errors#api_key_expired"
}
}{
"error": {
"type": "not_found",
"code": "media_not_found",
"message": "There's no post with that id in this workspace. GET /v1/media lists them; refresh the account first if it was just published.",
"param": "media_id",
"doc_url": "https://docs.indm.social/errors#media_not_found"
}
}{
"error": {
"type": "rate_limited",
"code": "rate_limited",
"message": "That's more than 120 requests a minute on one key. Wait 18s and try again.",
"doc_url": "https://docs.indm.social/errors#rate_limited"
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Something went wrong on our end. Try again; if it keeps happening, quote request req_8Qm2ZcY4vN7tLp1K to support@indm.social.",
"doc_url": "https://docs.indm.social/errors#internal_error"
}
}Authorizations
An API key from Settings → API keys in the inDM app, sent as
Authorization: Bearer indm_.... Keys belong to one workspace and carry a scope:
read for GET routes and the validate dry run, full for everything. Keep keys on
your server; never ship one to a browser or a mobile app.
Path Parameters
The account id from List accounts.
Response
The account's health.
"6f1c2a9e-3b7d-4e21-9a55-0c8d2f4b7e10"
The Instagram handle, without the @.
"maya.grows"
connected when everything is running. needs_reconnect when Instagram has
paused the connection; nothing syncs or sends until it is reconnected in the app.
connected, needs_reconnect, disconnected, error "connected"
Automations live on this account now.
2
Names of live automations set up in a way that can never trigger, such as one with no keywords. Empty when there are none.
[]
How many messages this account sends per hour, at most. inDM spaces sends on purpose so Instagram keeps trusting the account.
200
Messages queued for this account right now. A queue drains at send_speed_per_hour; it is not a fault.
4
Messages Instagram refused in the last 24 hours.
0
Messages Instagram refused in the last 7 days. The true total for the window instagram_errors_last_7d breaks down.
1
What Instagram refused in the last 7 days and how often, keyed by a plain-words
summary of each refusal. The keys are written for people, so show them rather
than branching on them. Read the total from messages_failed_last_7d. Empty
when nothing was refused.
Show child attributes
Show child attributes
{
"Instagram refused to message specific people": 1
}
A stable slug for why the account isn't connected. Present only when it isn't.
"token_expired"
When the account stopped working. Present only when it has.
When inDM last heard from Instagram about a comment or message on this account. A long silence on an active account is worth a look.
"2026-11-05T08:52:40Z"