{ "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, "caveats": [ { "code": "followup_goes_to_everyone", "message": "The follow-up goes to everyone who received the first message, including people who already tapped the link." } ], "media_id": "3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31"}
Automations
Create an automation
Builds a comment-to-DM automation on one of your posts or reels. It is always
created as a draft, so nothing reaches anyone until you
set it live.
The post decides the workspace and the account, so media_id is the one id you
need. A post runs one live automation at a time; if another is already live on it,
the call is refused with 409 live_automation_on_media rather than leaving you a
draft that can never go live.
The response is the automation as saved, which is not always exactly as asked for.
caveats names anything that was adjusted. Read from the response, not from your
request.
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.
Body
application/json
A new automation. media_id, keywords and dm_message are required.
The direct message the fan receives, carrying the link. Write it in the language
your audience reads; an automation sends in whatever language its copy is in.
With an opener set, this becomes the second message. Up to 1,000 characters.
Two or three links, in the order the fan sees them, instead of link_url. One
message carries at most three links; that ceiling is Instagram's. How many a
workspace can attach depends on its plan.
An opt-in message sent first. When set, dm_message becomes the second message
and the fan receives it only after they reply. You don't need an opener to
deliver a link: the one private reply a comment earns can carry the link on its
own. An opener makes the link follow a yes, and the fan's reply opens the 24-hour
window for anything sent after it. Up to 1,000 characters.
A second message sent later, to everyone who received the first one. It can't be
held back from people who already tapped the link. It needs something that opens
the 24-hour window first, so an opener_message, follow_gate or email_gate.
Whether it sends depends on the workspace's plan. Up to 1,000 characters.
How long after the first message the follow-up goes out, from 30 minutes to 20
hours (1,200 minutes). The ceiling is Instagram's 24-hour window minus headroom.
Required with followup_message.
Required range: 30 <= x <= 1200
Response
The automation, saved as a draft.
The automation as saved, and anything that was adjusted on the way in.
The post it is attached to. Present when binding is specific.
Example:
"3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31"
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"inDM API","description":"Build, launch and read Instagram comment-to-DM automations from your own code.","colors":{"primary":"#B8452B","light":"#E0714F","dark":"#9E3A23"},"logo":{"light":"https://mintcdn.com/in-dm/dZECcUr6LPCo8pKP/logo/light.svg?fit=max\u0026auto=format\u0026n=dZECcUr6LPCo8pKP\u0026q=85\u0026s=930f4fd67b20c66f17a96391df0a7dc1","dark":"https://mintcdn.com/in-dm/dZECcUr6LPCo8pKP/logo/dark.svg?fit=max\u0026auto=format\u0026n=dZECcUr6LPCo8pKP\u0026q=85\u0026s=3d2b9b5785eea8b6502f0ec3e8c8901d","href":"https://indm.social"},"favicon":"https://mintcdn.com/in-dm/dZECcUr6LPCo8pKP/favicon.svg?fit=max\u0026auto=format\u0026n=dZECcUr6LPCo8pKP\u0026q=85\u0026s=b34dc1c87ed2b98febba7fc8b6c687bb","api":{"openapi":"openapi.yaml","playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","javascript","python"]}},"background":{"color":{"light":"#FDFCFC","dark":"#0B0B0A"}},"navbar":{"links":[{"href":"mailto:support@indm.social","label":"Support"}],"primary":{"type":"button","label":"Open inDM","href":"https://app.indm.social"}},"footer":{"socials":{"instagram":"https://www.instagram.com/indm.social","website":"https://indm.social"}},"seo":{"metatags":{"canonical":"https://docs.indm.social"},"indexing":"navigable"},"fonts":{"heading":{"family":"Fraunces","weight":600},"body":{"family":"Hanken Grotesk"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"in-dm","hasAudioNarration":false,"actualSubdomain":"in-dm","customDomains":["docs.indm.social"],"gitSource":{"type":"github","owner":"indm-social","repo":"project-social","deployBranch":"main","contentDirectory":"api-docs","isPrivate":true,"mountPath":"","label":"","_id":"6aec389be2217a8df5084569"},"chroma":{"latestBuiltDeploymentHistoryId":"6aec38b2e2217a8df50847ac","collectionId":"5558e828-a155-4053-ba25-bc656a472b13","liveDeploymentHistoryId":"6aec38b2e2217a8df50847ac","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aec477a754501e0c6b5577b","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"API Reference","count":17},{"language":"default","tag":"Guides","count":11},{"language":"default","tag":"Automations","count":7},{"language":"default","tag":"Working with the API","count":6},{"language":"default","tag":"Accounts","count":5},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Media","count":2},{"language":"default","tag":"Recipes","count":2},{"language":"default","tag":"Workspace","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"api-reference/automations/create-automation","slug":"/api-reference/automations/create-automation","pageMetadata":{"openapi":"post /automations","title":"Create an automation","description":"Builds a comment-to-DM automation on one of your posts or reels. It is always\ncreated as a `draft`, so nothing reaches anyone until you\n[set it live](/api-reference/automations/set-automation-status).\n\nThe post decides the workspace and the account, so `media_id` is the one id you\nneed. A post runs one live automation at a time; if another is already live on it,\nthe call is refused with `409 live_automation_on_media` rather than leaving you a\ndraft that can never go live.\n\nThe response is the automation as saved, which is not always exactly as asked for.\n`caveats` names anything that was adjusted. Read from the response, not from your\nrequest.\n\nNeeds a `full` key.\n","href":"/api-reference/automations/create-automation"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Builds a comment-to-DM automation on one of your posts or reels. It is always\\ncreated as a \", _jsx(_components.code, {\n children: \"draft\"\n }), \", so nothing reaches anyone until you\\n\", _jsx(_components.a, {\n href: \"/api-reference/automations/set-automation-status\",\n children: \"set it live\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The post decides the workspace and the account, so \", _jsx(_components.code, {\n children: \"media_id\"\n }), \" is the one id you\\nneed. A post runs one live automation at a time; if another is already live on it,\\nthe call is refused with \", _jsx(_components.code, {\n children: \"409 live_automation_on_media\"\n }), \" rather than leaving you a\\ndraft that can never go live.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The response is the automation as saved, which is not always exactly as asked for.\\n\", _jsx(_components.code, {\n children: \"caveats\"\n }), \" names anything that was adjusted. Read from the response, not from your\\nrequest.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Needs a \", _jsx(_components.code, {\n children: \"full\"\n }), \" key.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"post /automations","title":"Create an automation","description":"Builds a comment-to-DM automation on one of your posts or reels. It is always\ncreated as a `draft`, so nothing reaches anyone until you\n[set it live](/api-reference/automations/set-automation-status).\n\nThe post decides the workspace and the account, so `media_id` is the one id you\nneed. A post runs one live automation at a time; if another is already live on it,\nthe call is refused with `409 live_automation_on_media` rather than leaving you a\ndraft that can never go live.\n\nThe response is the automation as saved, which is not always exactly as asked for.\n`caveats` names anything that was adjusted. Read from the response, not from your\nrequest.\n\nNeeds a `full` key.\n","href":"/api-reference/automations/create-automation"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createAutomation","tags":["Automations"],"summary":"Create an automation","description":"Builds a comment-to-DM automation on one of your posts or reels. It is always\ncreated as a `draft`, so nothing reaches anyone until you\n[set it live](/api-reference/automations/set-automation-status).\n\nThe post decides the workspace and the account, so `media_id` is the one id you\nneed. A post runs one live automation at a time; if another is already live on it,\nthe call is refused with `409 live_automation_on_media` rather than leaving you a\ndraft that can never go live.\n\nThe response is the automation as saved, which is not always exactly as asked for.\n`caveats` names anything that was adjusted. Read from the response, not from your\nrequest.\n\nNeeds a `full` key.\n","x-indm-scope":"full","requestBody":"7b24dfa7-e04b-4a15-b9b1-b71afee885ae","responses":{"201":"6796d583-9510-49e9-86a9-1e482d05fb87","400":"6df440ea-62bd-4a02-a165-0a666363a613","401":"f697af37-4368-4efc-9c60-6d02fb9591ee","403":"aa88fdca-9cda-48d1-beef-9d033634eedd","404":"fe8b2db9-7f75-49f0-b966-b792ccb4226b","409":"aff5cfba-09a4-4b96-9b59-e82a7b1668e0","429":"eb3657f7-63c3-41c5-b83c-3656bee07e00","500":"f26bc906-f8f7-4c31-99bf-3f7a6c08325c"},"method":"post","type":"path","servers":["e5f23c24-da12-4d01-bf2f-38f8531a1e04"],"security":["2f3e715c-04e3-4543-bae9-44e7de536f28"],"path":"/automations","baseUrlOptions":["https://api.indm.social/v1"],"title":"Create an automation","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"A new automation. `media_id`, `keywords` and `dm_message` are required.","required":["media_id","keywords","dm_message"],"properties":{"media_id":{"type":"string","format":"uuid","description":"The post or reel to attach it to, from [List media](/api-reference/media/list-media).","example":"3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31","isRequired":true,"uniqueKey":"media_id","typeLabel":"string\u003cuuid>"},"keywords":{"type":"array","minItems":1,"maxItems":20,"description":"The words that trigger it. Case-insensitive, so `GUIDE` also matches `guide`.\nA keyword belongs to one automation. Up to 20.\n","items":{"type":"string","uniqueKey":"keywords.items.[INDEX]","typeLabel":"string"},"example":["GUIDE"],"isRequired":true,"uniqueKey":"keywords","typeLabel":"string[]"},"dm_message":{"type":"string","maxLength":1000,"description":"The direct message the fan receives, carrying the link. Write it in the language\nyour audience reads; an automation sends in whatever language its copy is in.\nWith an opener set, this becomes the second message. Up to 1,000 characters.\n","example":"Here's the spring planting guide. Enjoy it.","isRequired":true,"uniqueKey":"dm_message","typeLabel":"string"},"account_id":{"type":"string","format":"uuid","description":"Optional. inDM takes the account from `media_id`, so you can leave this out.","uniqueKey":"account_id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","description":"A short name for your own list in inDM.","example":"Spring guide reel","uniqueKey":"name","typeLabel":"string"},"button_label":{"type":"string","maxLength":20,"description":"The opt-in button's label. Up to 20 characters.","example":"Send me the guide","uniqueKey":"button_label","typeLabel":"string"},"public_reply":{"type":"string","maxLength":2200,"description":"A public reply posted under the fan's comment. Up to 2,200 characters.","example":"Sent it to your DMs.","uniqueKey":"public_reply","typeLabel":"string"},"link_url":{"type":"string","format":"uri","description":"The one link the DM delivers. Starts with `https://` or `http://`. For more than\none link, use `links` instead.\n","example":"https://example.com/spring-guide","uniqueKey":"link_url","typeLabel":"string\u003curi>"},"link_title":{"type":"string","maxLength":20,"description":"The label on the link's button. Up to 20 characters.","example":"Open the guide","uniqueKey":"link_title","typeLabel":"string"},"links":{"type":"array","maxItems":3,"description":"Two or three links, in the order the fan sees them, instead of `link_url`. One\nmessage carries at most three links; that ceiling is Instagram's. How many a\nworkspace can attach depends on its plan.\n","items":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Where the link goes. Starts with `https://` or `http://`.","example":"https://example.com/spring-guide","isRequired":true,"uniqueKey":"links.items.[INDEX].url","typeLabel":"string\u003curi>"},"title":{"type":"string","maxLength":20,"description":"The label on the link's button. Up to 20 characters.","example":"Open the guide","uniqueKey":"links.items.[INDEX].title","typeLabel":"string"}},"uniqueKey":"links.items.[INDEX]","typeLabel":"object"},"uniqueKey":"links","typeLabel":"object[]"},"opener_message":{"type":"string","maxLength":1000,"description":"An opt-in message sent first. When set, `dm_message` becomes the second message\nand the fan receives it only after they reply. You don't need an opener to\ndeliver a link: the one private reply a comment earns can carry the link on its\nown. An opener makes the link follow a yes, and the fan's reply opens the 24-hour\nwindow for anything sent after it. Up to 1,000 characters.\n","uniqueKey":"opener_message","typeLabel":"string"},"opener_plain_text":{"type":"boolean","description":"Send the opener as plain text with no button, so any reply counts as the\nopt-in. Only meaningful with `opener_message`.\n","uniqueKey":"opener_plain_text","typeLabel":"boolean"},"follow_gate":{"type":"boolean","description":"Ask the fan to follow the account before the link arrives. Needs a link. After\nfour asks the link is delivered anyway.\n","uniqueKey":"follow_gate","typeLabel":"boolean"},"follow_gate_message":{"type":"string","description":"Your own words for the follow ask, in place of inDM's. Needs `follow_gate`.","uniqueKey":"follow_gate_message","typeLabel":"string"},"follow_gate_visit_label":{"type":"string","maxLength":20,"description":"The label on the button that opens your profile. Up to 20 characters. Needs `follow_gate`.","uniqueKey":"follow_gate_visit_label","typeLabel":"string"},"follow_gate_following_label":{"type":"string","maxLength":20,"description":"The label on the button a fan taps once they follow. Up to 20 characters. Needs `follow_gate`.","uniqueKey":"follow_gate_following_label","typeLabel":"string"},"email_gate":{"type":"boolean","description":"Ask the fan for an email address before the link arrives. Needs a link.","uniqueKey":"email_gate","typeLabel":"boolean"},"email_gate_message":{"type":"string","description":"Your own words for the email ask, in place of inDM's. Needs `email_gate`.","uniqueKey":"email_gate_message","typeLabel":"string"},"followup_message":{"type":"string","maxLength":1000,"description":"A second message sent later, to everyone who received the first one. It can't be\nheld back from people who already tapped the link. It needs something that opens\nthe 24-hour window first, so an `opener_message`, `follow_gate` or `email_gate`.\nWhether it sends depends on the workspace's plan. Up to 1,000 characters.\n","uniqueKey":"followup_message","typeLabel":"string"},"followup_delay_minutes":{"type":"integer","minimum":30,"maximum":1200,"description":"How long after the first message the follow-up goes out, from 30 minutes to 20\nhours (1,200 minutes). The ceiling is Instagram's 24-hour window minus headroom.\nRequired with `followup_message`.\n","uniqueKey":"followup_delay_minutes","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"media_id":"3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31","name":"Spring guide reel","keywords":["GUIDE"],"public_reply":"Sent it to your DMs.","dm_message":"Here's the spring planting guide. Enjoy it.","button_label":"Send me the guide","link_url":"https://example.com/spring-guide","link_title":"Open the guide"},"examples":{"Example":{"title":"Example","value":{"media_id":"3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31","name":"Spring guide reel","keywords":["GUIDE"],"public_reply":"Sent it to your DMs.","dm_message":"Here's the spring planting guide. Enjoy it.","button_label":"Send me the guide","link_url":"https://example.com/spring-guide","link_title":"Open the guide"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"6796d583-9510-49e9-86a9-1e482d05fb87":{"description":"The automation, saved as a draft.","headers":{"X-Request-Id":{"description":"A unique id for this request. Include it when you write to support and we can find the request at once.","schema":{"type":"string"},"example":"req_8Qm2ZcY4vN7tLp1K"},"RateLimit-Limit":{"description":"Requests this key may make per minute, across every route. Sent once the key is accepted.","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current one-minute window. `0` when a write is refused for the write limit.","schema":{"type":"integer"},"example":117},"RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"schema":{"type":"object","description":"The automation as saved, and anything that was adjusted on the way in.","required":["caveats","dm_message","button_label","public_replies","links","opener_message","opener_plain_text","follow_gate","email_gate","follow_gate_message","follow_gate_visit_label","follow_gate_following_label","email_gate_message","followup_message","followup_delay_minutes","id","name","status","trigger","binding","account_id","keywords","dm_sent_count","created_at","updated_at"],"properties":{"id":{"type":"string","format":"uuid","example":"9a4b1c7e-2d3f-4a5b-8c6d-1e2f3a4b5c6d","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","example":"Spring guide reel","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"status":{"type":"string","enum":["draft","live","paused"],"example":"live","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"trigger":{"type":"string","description":"What fires it, such as `comment`.","example":"comment","isRequired":true,"uniqueKey":"trigger","typeLabel":"string"},"binding":{"type":"string","description":"How it is attached to content: `specific` for one post, `next` for the next post\nthe account publishes, `any` for every post.\n","example":"specific","isRequired":true,"uniqueKey":"binding","typeLabel":"string"},"account_id":{"type":"string","format":"uuid","example":"6f1c2a9e-3b7d-4e21-9a55-0c8d2f4b7e10","isRequired":true,"uniqueKey":"account_id","typeLabel":"string\u003cuuid>"},"keywords":{"type":"array","description":"The words that trigger it, as stored.","items":{"type":"string","uniqueKey":"keywords.items.[INDEX]","typeLabel":"string"},"example":["GUIDE"],"isRequired":true,"uniqueKey":"keywords","typeLabel":"string[]"},"dm_sent_count":{"type":"integer","description":"DMs this automation has sent since it was created.","example":182,"isRequired":true,"uniqueKey":"dm_sent_count","typeLabel":"integer"},"created_at":{"type":"string","format":"date-time","example":"2026-11-05T09:02:11Z","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","example":"2026-11-05T09:04:30Z","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"dm_message":{"type":"string","description":"The message carrying the link. With an opener, this is the second message.","example":"Here's the spring planting guide. Enjoy it.","isRequired":true,"uniqueKey":"dm_message","typeLabel":"string"},"button_label":{"type":"string","description":"The opt-in button's label.","example":"Send me the guide","isRequired":true,"uniqueKey":"button_label","typeLabel":"string"},"public_replies":{"type":"array","description":"The public replies inDM posts under a fan's comment, one per comment. Empty when there are none.","items":{"type":"string","uniqueKey":"public_replies.items.[INDEX]","typeLabel":"string"},"example":["Sent it to your DMs."],"isRequired":true,"uniqueKey":"public_replies","typeLabel":"string[]"},"links":{"type":"array","description":"The links the DM delivers, in the order the fan sees them. Empty when there are none.","items":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Where the link goes. Starts with `https://` or `http://`.","example":"https://example.com/spring-guide","isRequired":true,"uniqueKey":"links.items.[INDEX].url","typeLabel":"string\u003curi>"},"title":{"type":"string","maxLength":20,"description":"The label on the link's button. Up to 20 characters.","example":"Open the guide","uniqueKey":"links.items.[INDEX].title","typeLabel":"string"}},"uniqueKey":"links.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"links","typeLabel":"object[]"},"opener_message":{"type":"string","description":"The opt-in message sent first. Empty when there is no opener.","example":"","isRequired":true,"uniqueKey":"opener_message","typeLabel":"string"},"opener_plain_text":{"type":"boolean","description":"Whether the opener is sent as plain text with no button.","example":false,"isRequired":true,"uniqueKey":"opener_plain_text","typeLabel":"boolean"},"follow_gate":{"type":"boolean","description":"Whether the fan is asked to follow before the link arrives.","example":false,"isRequired":true,"uniqueKey":"follow_gate","typeLabel":"boolean"},"email_gate":{"type":"boolean","description":"Whether the fan is asked for an email address before the link arrives.","example":false,"isRequired":true,"uniqueKey":"email_gate","typeLabel":"boolean"},"follow_gate_message":{"type":"string","description":"Your own words for the follow ask. Empty when inDM's wording is used.","example":"","isRequired":true,"uniqueKey":"follow_gate_message","typeLabel":"string"},"follow_gate_visit_label":{"type":"string","description":"The label on the button that opens your profile. Empty for inDM's.","example":"","isRequired":true,"uniqueKey":"follow_gate_visit_label","typeLabel":"string"},"follow_gate_following_label":{"type":"string","description":"The label on the button a fan taps once they follow. Empty for inDM's.","example":"","isRequired":true,"uniqueKey":"follow_gate_following_label","typeLabel":"string"},"email_gate_message":{"type":"string","description":"Your own words for the email ask. Empty when inDM's wording is used.","example":"","isRequired":true,"uniqueKey":"email_gate_message","typeLabel":"string"},"followup_message":{"type":"string","description":"The second message sent later. Empty when there is no follow-up.","example":"","isRequired":true,"uniqueKey":"followup_message","typeLabel":"string"},"followup_delay_minutes":{"type":"integer","description":"How long after the first message the follow-up goes out. `0` when there is no follow-up.","example":0,"isRequired":true,"uniqueKey":"followup_delay_minutes","typeLabel":"integer"},"caveats":{"type":"array","description":"Anything about the saved automation that differs from the request, or that is\nworth knowing before it goes live. Empty when there is nothing to add.\n","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"A stable code for what was adjusted.","example":"followup_goes_to_everyone","isRequired":true,"uniqueKey":"caveats.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"What it means, in a sentence.","example":"The follow-up goes to everyone who received the first message, including people who already tapped the link.","isRequired":true,"uniqueKey":"caveats.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"caveats.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"caveats","typeLabel":"object[]"},"media_id":{"type":"string","format":"uuid","description":"The post it is attached to. Present when `binding` is `specific`.","example":"3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31","uniqueKey":"media_id","typeLabel":"string\u003cuuid>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"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,"caveats":[{"code":"followup_goes_to_everyone","message":"The follow-up goes to everyone who received the first message, including people who already tapped the link."}],"media_id":"3d2a7f10-9c4e-4b8a-a1f2-6e0b5d7c9a31"}}},"exampleType":"generated"}},"exampleType":"generated"},"6df440ea-62bd-4a02-a165-0a666363a613":{"description":"The request can't be processed as sent. `param` names the field when there is one.","headers":{"X-Request-Id":{"description":"A unique id for this request. Include it when you write to support and we can find the request at once.","schema":{"type":"string"},"example":"req_8Qm2ZcY4vN7tLp1K"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error has this shape.","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url"],"properties":{"type":{"type":"string","description":"The family of error. Each maps to one HTTP status.","enum":["invalid_request","authentication_error","permission_error","plan_limit","not_found","conflict","rate_limited","api_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, specific code. Branch on this, never on `message`. Every code is\nlisted on [Errors](/errors).\n","example":"dm_message_too_long","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A sentence for a person, saying what happened and what to do next. It may change; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"A link to this code on the [Errors](/errors) page.","example":"https://docs.indm.social/errors#dm_message_too_long","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"param":{"type":"string","description":"The request field the error is about. Left out when no single field is.","example":"dm_message","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"invalid_request","code":"button_label_too_long","message":"The button label is 26 characters. Instagram shows up to 20, so it would be cut off.","param":"button_label","doc_url":"https://docs.indm.social/errors#button_label_too_long"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"button_label_too_long","message":"The button label is 26 characters. Instagram shows up to 20, so it would be cut off.","param":"button_label","doc_url":"https://docs.indm.social/errors#button_label_too_long"}}}},"exampleType":"examples"}},"exampleType":"examples"},"f697af37-4368-4efc-9c60-6d02fb9591ee":{"description":"The API key is missing, malformed, expired or revoked.","headers":{"X-Request-Id":{"description":"A unique id for this request. Include it when you write to support and we can find the request at once.","schema":{"type":"string"},"example":"req_8Qm2ZcY4vN7tLp1K"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error has this shape.","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url"],"properties":{"type":{"type":"string","description":"The family of error. Each maps to one HTTP status.","enum":["invalid_request","authentication_error","permission_error","plan_limit","not_found","conflict","rate_limited","api_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, specific code. Branch on this, never on `message`. Every code is\nlisted on [Errors](/errors).\n","example":"dm_message_too_long","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A sentence for a person, saying what happened and what to do next. It may change; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"A link to this code on the [Errors](/errors) page.","example":"https://docs.indm.social/errors#dm_message_too_long","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"param":{"type":"string","description":"The request field the error is about. Left out when no single field is.","example":"dm_message","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"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"}},"examples":{"Example":{"title":"Example","value":{"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"}}}},"exampleType":"examples"}},"exampleType":"examples"},"aa88fdca-9cda-48d1-beef-9d033634eedd":{"description":"The key's scope doesn't cover this route (`permission_error`), or the workspace's\nplan doesn't include what this write needs (`plan_limit`).\n","headers":{"X-Request-Id":{"description":"A unique id for this request. Include it when you write to support and we can find the request at once.","schema":{"type":"string"},"example":"req_8Qm2ZcY4vN7tLp1K"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error has this shape.","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url"],"properties":{"type":{"type":"string","description":"The family of error. Each maps to one HTTP status.","enum":["invalid_request","authentication_error","permission_error","plan_limit","not_found","conflict","rate_limited","api_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, specific code. Branch on this, never on `message`. Every code is\nlisted on [Errors](/errors).\n","example":"dm_message_too_long","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A sentence for a person, saying what happened and what to do next. It may change; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"A link to this code on the [Errors](/errors) page.","example":"https://docs.indm.social/errors#dm_message_too_long","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"param":{"type":"string","description":"The request field the error is about. Left out when no single field is.","example":"dm_message","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"insufficient_scope":{"title":"insufficient_scope","value":{"error":{"type":"permission_error","code":"insufficient_scope","message":"This key is read-only, and POST /v1/automations changes things. Use a key with full access.","doc_url":"https://docs.indm.social/errors#insufficient_scope"}}},"plan_limit":{"title":"plan_limit","value":{"error":{"type":"plan_limit","code":"followup_requires_paid_plan","message":"Follow-up messages send on Growth. Everything else in this request can be saved without the follow-up.","param":"followup_message","doc_url":"https://docs.indm.social/errors#followup_requires_paid_plan"}}}},"exampleType":"examples"}},"exampleType":"examples"},"fe8b2db9-7f75-49f0-b966-b792ccb4226b":{"description":"Nothing with that id exists in this key's workspace.","headers":{"X-Request-Id":{"description":"A unique id for this request. Include it when you write to support and we can find the request at once.","schema":{"type":"string"},"example":"req_8Qm2ZcY4vN7tLp1K"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error has this shape.","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url"],"properties":{"type":{"type":"string","description":"The family of error. Each maps to one HTTP status.","enum":["invalid_request","authentication_error","permission_error","plan_limit","not_found","conflict","rate_limited","api_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, specific code. Branch on this, never on `message`. Every code is\nlisted on [Errors](/errors).\n","example":"dm_message_too_long","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A sentence for a person, saying what happened and what to do next. It may change; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"A link to this code on the [Errors](/errors) page.","example":"https://docs.indm.social/errors#dm_message_too_long","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"param":{"type":"string","description":"The request field the error is about. Left out when no single field is.","example":"dm_message","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"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"}},"examples":{"Example":{"title":"Example","value":{"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"}}}},"exampleType":"examples"}},"exampleType":"examples"},"aff5cfba-09a4-4b96-9b59-e82a7b1668e0":{"description":"The request clashes with the current state, such as a second live automation on one post.","headers":{"X-Request-Id":{"description":"A unique id for this request. Include it when you write to support and we can find the request at once.","schema":{"type":"string"},"example":"req_8Qm2ZcY4vN7tLp1K"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error has this shape.","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url"],"properties":{"type":{"type":"string","description":"The family of error. Each maps to one HTTP status.","enum":["invalid_request","authentication_error","permission_error","plan_limit","not_found","conflict","rate_limited","api_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, specific code. Branch on this, never on `message`. Every code is\nlisted on [Errors](/errors).\n","example":"dm_message_too_long","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A sentence for a person, saying what happened and what to do next. It may change; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"A link to this code on the [Errors](/errors) page.","example":"https://docs.indm.social/errors#dm_message_too_long","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"param":{"type":"string","description":"The request field the error is about. Left out when no single field is.","example":"dm_message","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"conflict","code":"live_automation_on_media","message":"Another automation is already live on this post. Pause it first, so a fan who comments gets one DM.","param":"media_id","doc_url":"https://docs.indm.social/errors#live_automation_on_media"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"conflict","code":"live_automation_on_media","message":"Another automation is already live on this post. Pause it first, so a fan who comments gets one DM.","param":"media_id","doc_url":"https://docs.indm.social/errors#live_automation_on_media"}}}},"exampleType":"examples"}},"exampleType":"examples"},"eb3657f7-63c3-41c5-b83c-3656bee07e00":{"description":"This key went past its rate limit. Wait for `Retry-After` seconds, then try again.","headers":{"X-Request-Id":{"description":"A unique id for this request. Include it when you write to support and we can find the request at once.","schema":{"type":"string"},"example":"req_8Qm2ZcY4vN7tLp1K"},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"},"example":18},"RateLimit-Limit":{"description":"Requests this key may make per minute, across every route. Sent once the key is accepted.","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current one-minute window. `0` when a write is refused for the write limit.","schema":{"type":"integer"},"example":117},"RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"schema":{"type":"object","description":"Every error has this shape.","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url"],"properties":{"type":{"type":"string","description":"The family of error. Each maps to one HTTP status.","enum":["invalid_request","authentication_error","permission_error","plan_limit","not_found","conflict","rate_limited","api_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, specific code. Branch on this, never on `message`. Every code is\nlisted on [Errors](/errors).\n","example":"dm_message_too_long","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A sentence for a person, saying what happened and what to do next. It may change; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"A link to this code on the [Errors](/errors) page.","example":"https://docs.indm.social/errors#dm_message_too_long","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"param":{"type":"string","description":"The request field the error is about. Left out when no single field is.","example":"dm_message","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"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"}},"examples":{"Example":{"title":"Example","value":{"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"}}}},"exampleType":"examples"}},"exampleType":"examples"},"f26bc906-f8f7-4c31-99bf-3f7a6c08325c":{"description":"Something failed on our side. Retrying with backoff is safe for reads. The same body\ncomes with `503` when inDM briefly can't reach its database.\n","headers":{"X-Request-Id":{"description":"A unique id for this request. Include it when you write to support and we can find the request at once.","schema":{"type":"string"},"example":"req_8Qm2ZcY4vN7tLp1K"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error has this shape.","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url"],"properties":{"type":{"type":"string","description":"The family of error. Each maps to one HTTP status.","enum":["invalid_request","authentication_error","permission_error","plan_limit","not_found","conflict","rate_limited","api_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, specific code. Branch on this, never on `message`. Every code is\nlisted on [Errors](/errors).\n","example":"dm_message_too_long","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A sentence for a person, saying what happened and what to do next. It may change; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"A link to this code on the [Errors](/errors) page.","example":"https://docs.indm.social/errors#dm_message_too_long","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"param":{"type":"string","description":"The request field the error is about. Left out when no single field is.","example":"dm_message","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"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"}},"examples":{"Example":{"title":"Example","value":{"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"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"2f3e715c-04e3-4543-bae9-44e7de536f28":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"indm_ API key","description":"An API key from **Settings → API keys** in the inDM app, sent as\n`Authorization: Bearer indm_...`. Keys belong to one workspace and carry a scope:\n`read` for GET routes and the validate dry run, `full` for everything. Keep keys on\nyour server; never ship one to a browser or a mobile app.\n","scopes":[],"schemeName":"apiKey"}}},"servers":{"e5f23c24-da12-4d01-bf2f-38f8531a1e04":{"url":"https://api.indm.social/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"indm_ API key","description":"An API key from **Settings → API keys** in the inDM app, sent as\n`Authorization: Bearer indm_...`. Keys belong to one workspace and carry a scope:\n`read` for GET routes and the validate dry run, `full` for everything. Keep keys on\nyour server; never ship one to a browser or a mobile app.\n","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An API key from **Settings → API keys** in the inDM app, sent as\n`Authorization: Bearer indm_...`. Keys belong to one workspace and carry a scope:\n`read` for GET routes and the validate dry run, `full` for everything. Keep keys on\nyour server; never ship one to a browser or a mobile app.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"in-dm","siteName":"inDM API","title":"Create an automation - inDM API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T08:05:21.784Z","originalFileLocation":"api-reference/automations/create-automation.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Builds a comment-to-DM automation on one of your posts or reels. It is always created as a draft, so nothing reaches anyone until you set it live. The post decides the workspace and the account, so media_id is the one id you need. A post runs one live automation at a time; if another is already live on it, the call is refused with 409 live_automation_on_media rather than leaving you a draft that can never go live. The response is the automation as saved, which is not always exactly as asked for. caveats names anything that was adjusted. Read from the response, not from your request. Needs a full key.\">\u003cmeta data-mint-head name=\"application-name\" content=\"inDM API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create an automation - inDM API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Builds a comment-to-DM automation on one of your posts or reels. It is always created as a draft, so nothing reaches anyone until you set it live. The post decides the workspace and the account, so media_id is the one id you need. A post runs one live automation at a time; if another is already live on it, the call is refused with 409 live_automation_on_media rather than leaving you a draft that can never go live. The response is the automation as saved, which is not always exactly as asked for. caveats names anything that was adjusted. Read from the response, not from your request. Needs a full key.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"inDM API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.indm.social/api-reference/automations/create-automation\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://in-dm.mintlify.app/_mintlify/api/og/v2?division=Automations\u0026amp;title=Create+an+automation\u0026amp;description=Builds+a+comment-to-DM+automation+on+one+of+your+posts+or+reels.+It+is+always%0Acreated+as+a+%60draft%60%2C+so+nothing+reaches+anyone+until+you%0A%5Bset+it+live%5D%28%2Fapi-refer\u0026amp;theme=22118b16346918b8b2483116\u0026amp;signature=6e45a12d846196b99af8aab07ebee4878bfe4c8fcb018aff9787d6d718e23c34\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create an automation - inDM API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Builds a comment-to-DM automation on one of your posts or reels. It is always created as a draft, so nothing reaches anyone until you set it live. The post decides the workspace and the account, so media_id is the one id you need. A post runs one live automation at a time; if another is already live on it, the call is refused with 409 live_automation_on_media rather than leaving you a draft that can never go live. The response is the automation as saved, which is not always exactly as asked for. caveats names anything that was adjusted. Read from the response, not from your request. Needs a full key.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://in-dm.mintlify.app/_mintlify/api/og/v2?division=Automations\u0026amp;title=Create+an+automation\u0026amp;description=Builds+a+comment-to-DM+automation+on+one+of+your+posts+or+reels.+It+is+always%0Acreated+as+a+%60draft%60%2C+so+nothing+reaches+anyone+until+you%0A%5Bset+it+live%5D%28%2Fapi-refer\u0026amp;theme=22118b16346918b8b2483116\u0026amp;signature=6e45a12d846196b99af8aab07ebee4878bfe4c8fcb018aff9787d6d718e23c34\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/in-dm/Bj_8VlqhxizGMWMU/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"inDM API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#B8452B\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.indm.social/api-reference/automations/create-automation\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/automations/create-automation.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.indm.social/#organization\",\"name\":\"inDM API\",\"url\":\"https://docs.indm.social\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/in-dm/dZECcUr6LPCo8pKP/logo/light.svg?fit=max\u0026auto=format\u0026n=dZECcUr6LPCo8pKP\u0026q=85\u0026s=930f4fd67b20c66f17a96391df0a7dc1\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.indm.social#website\",\"name\":\"inDM API\",\"url\":\"https://docs.indm.social\",\"publisher\":{\"@id\":\"https://docs.indm.social/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.indm.social/api-reference/automations/create-automation#webpage\",\"url\":\"https://docs.indm.social/api-reference/automations/create-automation\",\"name\":\"Create an automation\",\"description\":\"Builds a comment-to-DM automation on one of your posts or reels. It is always created as a draft, so nothing reaches anyone until you set it live. The post decides the workspace and the account, so media_id is the one id you need. A post runs one live automation at a time; if another is already live on it, the call is refused with 409 live_automation_on_media rather than leaving you a draft that can never go live. The response is the automation as saved, which is not always exactly as asked for. caveats names anything that was adjusted. Read from the response, not from your request. Needs a full key.\",\"dateModified\":\"2026-11-05T08:05:21.784Z\",\"isPartOf\":{\"@id\":\"https://docs.indm.social#website\"},\"breadcrumb\":{\"@id\":\"https://docs.indm.social/api-reference/automations/create-automation#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.indm.social/api-reference/automations/create-automation#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Automations\",\"item\":\"https://docs.indm.social/api-reference/automations/list-automations\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create an automation\",\"item\":\"https://docs.indm.social/api-reference/automations/create-automation\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.indm.social/api-reference/automations/create-automation#apireference\",\"headline\":\"Create an automation\",\"name\":\"Create an automation\",\"description\":\"Builds a comment-to-DM automation on one of your posts or reels. It is always created as a draft, so nothing reaches anyone until you set it live. The post decides the workspace and the account, so media_id is the one id you need. A post runs one live automation at a time; if another is already live on it, the call is refused with 409 live_automation_on_media rather than leaving you a draft that can never go live. The response is the automation as saved, which is not always exactly as asked for. caveats names anything that was adjusted. Read from the response, not from your request. Needs a full key.\",\"url\":\"https://docs.indm.social/api-reference/automations/create-automation\",\"mainEntityOfPage\":{\"@id\":\"https://docs.indm.social/api-reference/automations/create-automation#webpage\"},\"dateModified\":\"2026-11-05T08:05:21.784Z\",\"publisher\":{\"@id\":\"https://docs.indm.social/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.indm.social#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"inDM API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"inDM API","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"API reference","sidebarTitle":"Overview","href":"/api-reference/introduction"}]},{"group":"Workspace","pages":[{"openapi":"get /workspace","title":"Get the workspace","href":"/api-reference/workspace/get-workspace"}]},{"group":"Accounts","pages":[{"openapi":"get /accounts","title":"List accounts","href":"/api-reference/accounts/list-accounts"},{"openapi":"get /accounts/{account_id}","title":"Get an account","href":"/api-reference/accounts/get-account"},{"openapi":"get /accounts/{account_id}/health","title":"Check account health","href":"/api-reference/accounts/get-account-health"},{"openapi":"post /accounts/{account_id}/refresh","title":"Refresh content","href":"/api-reference/accounts/refresh-account"},{"openapi":"get /accounts/{account_id}/refresh/{job_id}","title":"Get a refresh","href":"/api-reference/accounts/get-refresh"}]},{"group":"Media","pages":[{"openapi":"get /media","title":"List media","href":"/api-reference/media/list-media"},{"openapi":"get /media/{media_id}","title":"Get a media item","href":"/api-reference/media/get-media"}]},{"group":"Automations","pages":[{"openapi":"get /automations","title":"List automations","href":"/api-reference/automations/list-automations"},{"openapi":"get /automations/{automation_id}","title":"Get an automation","description":"One automation with its full setup: keywords, every message, links, gates and\nfollow-up. The field names match the update body, so you can edit what you read and\nsend it back. The one difference: `public_replies` lists every public reply, where an\nupdate sets one as `public_reply`.\n\nNeeds a `read` or `full` key.\n","href":"/api-reference/automations/get-automation"},{"openapi":"post /automations","title":"Create an automation","href":"/api-reference/automations/create-automation"},{"openapi":"patch /automations/{automation_id}","title":"Update an automation","description":"Changes an existing automation. Send only the fields you want to change:\n\n- A field you leave out stays as it is.\n- An empty string `\"\"` removes an optional text field, such as `public_reply`,\n `opener_message` or `followup_message`.\n- `keywords` and `links` replace the whole list. Sending `links: []` removes every\n link.\n\nIt does not change whether the automation is live or paused;\n[Set automation status](/api-reference/automations/set-automation-status) does that.\nOn a live automation the change is in effect for the next comment.\n\nNeeds a `full` key.\n","href":"/api-reference/automations/update-automation"},{"openapi":"post /automations/{automation_id}/status","title":"Set automation status","href":"/api-reference/automations/set-automation-status"},{"openapi":"get /automations/{automation_id}/stats","title":"Get automation stats","href":"/api-reference/automations/get-automation-stats"},{"openapi":"post /automations/validate","title":"Validate an automation","href":"/api-reference/automations/validate-automation"}]}]}]},"basePath":"","title":"Create an automation - inDM API","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DX1Meug0.js","utils-B_OMIQVC.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-ChxhRPMa.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CuKvD8Iv.js","snippetPresets-C5d7p2hp.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CfHcE8m4.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C1zZV314.js","shallow-CmQhqCJn.js","getApiPlaygroundDisplay-YRo9s1O7.js","CodeSnippet-RN1MTdfk.js","CodeSnippets-DKLPHxJA.js","Page-BAvA99GL.js","getPastedJson-bz0M41mU.js","icon-CsmhpPrv.js","MethodPill-CNGsVE77.js","DuplicateIcon-DilfU_Z2.js","createIcon-BdsYzQck.js","DynamicMarkdown-CbqEDjbV.js","SectionHeading-O6hXpFCN.js","axios-vUo_bRtp.js","Markdown-nKm-uidQ.js","clsx-ClVdStUn.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CIQkMg3R.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-ImrFS4Fy.js"]}