curl --request GET \
--url https://api.indm.social/v1/automations/{automation_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.indm.social/v1/automations/{automation_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.indm.social/v1/automations/{automation_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "9a4b1c7e-2d3f-4a5b-8c6d-1e2f3a4b5c6d",
"name": "Spring guide reel",
"status": "live",
"trigger": "comment",
"binding": "specific",
"account_id": "6f1c2a9e-3b7d-4e21-9a55-0c8d2f4b7e10",
"keywords": [
"GUIDE"
],
"dm_sent_count": 182,
"created_at": "2026-11-05T09:02:11Z",
"updated_at": "2026-11-05T09:04:30Z",
"dm_message": "Here's the spring planting guide. Enjoy it.",
"button_label": "Send me the guide",
"public_replies": [
"Sent it to your DMs."
],
"links": [
{
"url": "https://example.com/spring-guide",
"title": "Open the guide"
}
],
"opener_message": "",
"opener_plain_text": false,
"follow_gate": false,
"email_gate": false,
"follow_gate_message": "",
"follow_gate_visit_label": "",
"follow_gate_following_label": "",
"email_gate_message": "",
"followup_message": "",
"followup_delay_minutes": 0,
"media_id": "3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31"
}{
"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"
}
}Get an automation
One automation with its full setup: keywords, every message, links, gates and
follow-up. The field names match the update body, so you can edit what you read and
send it back. The one difference: public_replies lists every public reply, where an
update sets one as public_reply.
Needs a read or full key.
curl --request GET \
--url https://api.indm.social/v1/automations/{automation_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.indm.social/v1/automations/{automation_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.indm.social/v1/automations/{automation_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "9a4b1c7e-2d3f-4a5b-8c6d-1e2f3a4b5c6d",
"name": "Spring guide reel",
"status": "live",
"trigger": "comment",
"binding": "specific",
"account_id": "6f1c2a9e-3b7d-4e21-9a55-0c8d2f4b7e10",
"keywords": [
"GUIDE"
],
"dm_sent_count": 182,
"created_at": "2026-11-05T09:02:11Z",
"updated_at": "2026-11-05T09:04:30Z",
"dm_message": "Here's the spring planting guide. Enjoy it.",
"button_label": "Send me the guide",
"public_replies": [
"Sent it to your DMs."
],
"links": [
{
"url": "https://example.com/spring-guide",
"title": "Open the guide"
}
],
"opener_message": "",
"opener_plain_text": false,
"follow_gate": false,
"email_gate": false,
"follow_gate_message": "",
"follow_gate_visit_label": "",
"follow_gate_following_label": "",
"email_gate_message": "",
"followup_message": "",
"followup_delay_minutes": 0,
"media_id": "3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31"
}{
"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 automation id from List automations.
Response
The automation.
An automation's full setup: everything Update an automation
can change, as it is stored now. The names match the update body, so you can edit
what you read and send it back. The one difference: public_replies lists every
public reply, where a create or update body sets one as public_reply.
"9a4b1c7e-2d3f-4a5b-8c6d-1e2f3a4b5c6d"
"Spring guide reel"
draft, live, paused "live"
What fires it, such as comment.
"comment"
How it is attached to content: specific for one post, next for the next post
the account publishes, any for every post.
"specific"
"6f1c2a9e-3b7d-4e21-9a55-0c8d2f4b7e10"
The words that trigger it, as stored.
["GUIDE"]
DMs this automation has sent since it was created.
182
"2026-11-05T09:02:11Z"
"2026-11-05T09:04:30Z"
The message carrying the link. With an opener, this is the second message.
"Here's the spring planting guide. Enjoy it."
The opt-in button's label.
"Send me the guide"
The public replies inDM posts under a fan's comment, one per comment. Empty when there are none.
["Sent it to your DMs."]
The links the DM delivers, in the order the fan sees them. Empty when there are none.
Show child attributes
Show child attributes
The opt-in message sent first. Empty when there is no opener.
""
Whether the opener is sent as plain text with no button.
false
Whether the fan is asked to follow before the link arrives.
false
Whether the fan is asked for an email address before the link arrives.
false
Your own words for the follow ask. Empty when inDM's wording is used.
""
The label on the button that opens your profile. Empty for inDM's.
""
The label on the button a fan taps once they follow. Empty for inDM's.
""
Your own words for the email ask. Empty when inDM's wording is used.
""
The second message sent later. Empty when there is no follow-up.
""
How long after the first message the follow-up goes out. 0 when there is no follow-up.
0
The post it is attached to. Present when binding is specific.
"3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31"