{
"error": {
"code": "invalid_media",
"message": "Unknown object_key: u123/api_..._chart.png. Upload media first via POST /v1/media."
}
}
{
"error": {
"code": "invalid_api_key",
"message": "Unknown or revoked API key"
}
}
{
"error": {
"code": "writes_main_account_only",
"message": "Accounts shared with you are read-only through the API. Writes work on your own main and linked accounts."
}
}
{
"error": {
"code": "account_not_found",
"message": "No account with that id belongs to this key"
}
}
{
"error": {
"code": "idempotency_key_reuse",
"message": "This Idempotency-Key was already used with a different request body."
}
}
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.",
"retry_after": 42
}
}
{
"error": {
"code": "upstream_error",
"message": "Failed to fetch scheduled posts. Try again shortly."
}
}
{
"error": {
"code": "upstream_unavailable",
"message": "The scheduling service is temporarily unavailable. Retry with the same Idempotency-Key."
}
}
Scheduling
Create a draft or scheduled post, or publish now
Creates a post: a draft when scheduled_for is omitted, a scheduled
post otherwise. Works for your main account or any account linked to it
(account_id); accounts shared with you are read-only. Supports the
Idempotency-Key header for safe retries (see the Idempotency guide).
Successful creation returns 201.
Publishing now. Send scheduled_for: "now" and the post goes to X
immediately. This is irreversible, so the rules are tighter:
Idempotency-Key is REQUIRED (400 invalid_parameter without it).
Reuse the same key on any retry: it never publishes twice.
title and scratchpad are rejected with 400 (a published post
has no draft to organize), and Bluesky is never cross-posted.
A retry that arrives while the first attempt is still publishing
returns 409 idempotency_in_flight with a Retry-After header.
After that window the API checks whether the first attempt landed
and replays its result instead of posting again.
The 201 carries status: "sent" with posted_at, x_post_id
and url, and scheduled_for: null.
Advanced settings and Auto DM inherit your Default Post Settings
exactly as they do for a scheduled post.
A thread that fails part way through leaves no scheduled-post record
at all, so check GET /v1/posts before retrying: the parts X did
accept are already live.
Images attach per part: parts[].media is an array of
{ object_key, alt_text? } items, with object_key from
POST /v1/media (uploaded bytes required first). Up to 4 images or
exactly 1 GIF per part; alt_text is capped at 1,000 characters.
Video is not supported yet.
Advanced settings (auto_retweet, auto_delete, auto_plug,
auto_dm, super_followers_only): omit a setting to inherit its
Default Post Settings value from the SuperX app, send an object (or
true/false for super_followers_only) to override, or send
null to turn it off for this post. Exactly five settings inherit
this way: auto retweet, auto delete, auto plug, auto DM, and Super
Followers only. Other composer defaults (for example Bluesky
cross-posting or share-with-followers) are never applied to API
posts.
auto_dm direct-messages the people who reply to or repost the post
once it is live. Your plan caps how many posts a month may carry one
(posts_with_auto_dm in GET /v1/dm/limits): when that cap stops
it, the post is still created and the response carries
auto_dm_skipped: true instead of failing. Reading a post back shows
that an auto DM is attached but never its message text.
{
"error": {
"code": "invalid_media",
"message": "Unknown object_key: u123/api_..._chart.png. Upload media first via POST /v1/media."
}
}
{
"error": {
"code": "invalid_api_key",
"message": "Unknown or revoked API key"
}
}
{
"error": {
"code": "writes_main_account_only",
"message": "Accounts shared with you are read-only through the API. Writes work on your own main and linked accounts."
}
}
{
"error": {
"code": "account_not_found",
"message": "No account with that id belongs to this key"
}
}
{
"error": {
"code": "idempotency_key_reuse",
"message": "This Idempotency-Key was already used with a different request body."
}
}
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.",
"retry_after": 42
}
}
Unique key (max 64 characters) for safe retries. Replays carry the "Idempotency-Replayed" response header set to "true". Keys are retained for 24 hours.
Thread parts, 1 to 25 items. Total text across parts is limited to 25,000 characters. A part's text is optional when the part has media (a media-only post) and comes back as an empty string. A post with no text and no media at all is rejected.
UTC ISO-8601 with explicit Z or offset: at least 60 seconds in the future, at most 18 months out. Omit to create a draft. The literal string "now" publishes to X immediately and requires an Idempotency-Key (see the operation description).
Auto plug: reply with a template once the post hits a likes threshold. Omit to inherit your defaults; null turns it off for this post. Unknown template ids fail with 400 unknown_plug_template.
Any account you own, meaning your main account (the default when omitted) or one linked to it. An account shared with you returns 403 writes_main_account_only.
Response
The created post (echo of the accepted request, not the stored row). Replayed idempotent requests also return this body with the "Idempotency-Replayed" header set to "true". Applied advanced settings, inherited or explicit, are NOT echoed here; read them back via GET /v1/scheduled-posts, adding ?status=sent for a post published with scheduled_for: "now".
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SuperX","colors":{"primary":"#F4503B","light":"#FB7359","dark":"#D93820"},"logo":{"light":"https://mintcdn.com/superx/ZOrKRYsYXbBhitoI/logo/light.svg?fit=max\u0026auto=format\u0026n=ZOrKRYsYXbBhitoI\u0026q=85\u0026s=d465c38938c34f6ab75cfc50d0039be2","dark":"https://mintcdn.com/superx/ZOrKRYsYXbBhitoI/logo/dark.svg?fit=max\u0026auto=format\u0026n=ZOrKRYsYXbBhitoI\u0026q=85\u0026s=b717e05282be47857b4c42e3c9f28b15"},"favicon":"https://mintcdn.com/superx/ZOrKRYsYXbBhitoI/favicon.png?fit=max\u0026auto=format\u0026n=ZOrKRYsYXbBhitoI\u0026q=85\u0026s=05aaa6612cdd959e0edb14d963806660","appearance":{"default":"system"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"superx","hasAudioNarration":false,"actualSubdomain":"superx","customDomains":["docs.superx.so"],"gitSource":{"type":"github","owner":"superx-so","repo":"superx-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ac68ff611e54a617d7548d2","collectionId":"371386e6-3679-44e4-aa28-f1b7adee5865","liveDeploymentHistoryId":"6ac68ff611e54a617d7548d2","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ac68ff611e54a617d7548d2","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"API Reference","count":106},{"language":"default","tag":"Signals","count":12},{"language":"default","tag":"Documentation","count":10},{"language":"default","tag":"Articles","count":10},{"language":"default","tag":"Scheduling","count":10},{"language":"default","tag":"Audience","count":9},{"language":"default","tag":"Contact Lists","count":9},{"language":"default","tag":"Datasets","count":8},{"language":"default","tag":"Context","count":7},{"language":"default","tag":"Engage","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now","slug":"/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now","pageMetadata":{"title":"Create a draft or scheduled post, or publish now","description":"Creates a post: a draft when `scheduled_for` is omitted, a scheduled\npost otherwise. Works for your main account or any account linked to it\n(`account_id`); accounts shared with you are read-only. Supports the\n`Idempotency-Key` header for safe retries (see the Idempotency guide).\nSuccessful creation returns `201`.\n\n**Publishing now.** Send `scheduled_for: \"now\"` and the post goes to X\nimmediately. This is irreversible, so the rules are tighter:\n\n- `Idempotency-Key` is REQUIRED (`400 invalid_parameter` without it).\n Reuse the same key on any retry: it never publishes twice.\n- `title` and `scratchpad` are rejected with `400` (a published post\n has no draft to organize), and Bluesky is never cross-posted.\n- A retry that arrives while the first attempt is still publishing\n returns `409 idempotency_in_flight` with a `Retry-After` header.\n After that window the API checks whether the first attempt landed\n and replays its result instead of posting again.\n- The `201` carries `status: \"sent\"` with `posted_at`, `x_post_id`\n and `url`, and `scheduled_for: null`.\n- Advanced settings and Auto DM inherit your Default Post Settings\n exactly as they do for a scheduled post.\n- A thread that fails part way through leaves no scheduled-post record\n at all, so check `GET /v1/posts` before retrying: the parts X did\n accept are already live.\n\nImages attach per part: `parts[].media` is an array of\n`{ object_key, alt_text? }` items, with `object_key` from\n`POST /v1/media` (uploaded bytes required first). Up to 4 images or\nexactly 1 GIF per part; `alt_text` is capped at 1,000 characters.\nVideo is not supported yet.\n\nAdvanced settings (`auto_retweet`, `auto_delete`, `auto_plug`,\n`auto_dm`, `super_followers_only`): omit a setting to inherit its\nDefault Post Settings value from the SuperX app, send an object (or\n`true`/`false` for `super_followers_only`) to override, or send\n`null` to turn it off for this post. Exactly five settings inherit\nthis way: auto retweet, auto delete, auto plug, auto DM, and Super\nFollowers only. Other composer defaults (for example Bluesky\ncross-posting or share-with-followers) are never applied to API\nposts.\n\n`auto_dm` direct-messages the people who reply to or repost the post\nonce it is live. Your plan caps how many posts a month may carry one\n(`posts_with_auto_dm` in `GET /v1/dm/limits`): when that cap stops\nit, the post is still created and the response carries\n`auto_dm_skipped: true` instead of failing. Reading a post back shows\nthat an auto DM is attached but never its message text.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/scheduled-posts","href":"/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now","autogeneratedByOpenApi":true},"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 code: \"code\",\n li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates a post: a draft when \", _jsx(_components.code, {\n children: \"scheduled_for\"\n }), \" is omitted, a scheduled\\npost otherwise. Works for your main account or any account linked to it\\n(\", _jsx(_components.code, {\n children: \"account_id\"\n }), \"); accounts shared with you are read-only. Supports the\\n\", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" header for safe retries (see the Idempotency guide).\\nSuccessful creation returns \", _jsx(_components.code, {\n children: \"201\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Publishing now.\"\n }), \" Send \", _jsx(_components.code, {\n children: \"scheduled_for: \\\"now\\\"\"\n }), \" and the post goes to X\\nimmediately. This is irreversible, so the rules are tighter:\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" is REQUIRED (\", _jsx(_components.code, {\n children: \"400 invalid_parameter\"\n }), \" without it).\\nReuse the same key on any retry: it never publishes twice.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"title\"\n }), \" and \", _jsx(_components.code, {\n children: \"scratchpad\"\n }), \" are rejected with \", _jsx(_components.code, {\n children: \"400\"\n }), \" (a published post\\nhas no draft to organize), and Bluesky is never cross-posted.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"A retry that arrives while the first attempt is still publishing\\nreturns \", _jsx(_components.code, {\n children: \"409 idempotency_in_flight\"\n }), \" with a \", _jsx(_components.code, {\n children: \"Retry-After\"\n }), \" header.\\nAfter that window the API checks whether the first attempt landed\\nand replays its result instead of posting again.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"The \", _jsx(_components.code, {\n children: \"201\"\n }), \" carries \", _jsx(_components.code, {\n children: \"status: \\\"sent\\\"\"\n }), \" with \", _jsx(_components.code, {\n children: \"posted_at\"\n }), \", \", _jsx(_components.code, {\n children: \"x_post_id\"\n }), \"\\nand \", _jsx(_components.code, {\n children: \"url\"\n }), \", and \", _jsx(_components.code, {\n children: \"scheduled_for: null\"\n }), \".\"]\n }), \"\\n\", _jsx(_components.li, {\n children: \"Advanced settings and Auto DM inherit your Default Post Settings\\nexactly as they do for a scheduled post.\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"A thread that fails part way through leaves no scheduled-post record\\nat all, so check \", _jsx(_components.code, {\n children: \"GET /v1/posts\"\n }), \" before retrying: the parts X did\\naccept are already live.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Images attach per part: \", _jsx(_components.code, {\n children: \"parts[].media\"\n }), \" is an array of\\n\", _jsx(_components.code, {\n children: \"{ object_key, alt_text? }\"\n }), \" items, with \", _jsx(_components.code, {\n children: \"object_key\"\n }), \" from\\n\", _jsx(_components.code, {\n children: \"POST /v1/media\"\n }), \" (uploaded bytes required first). Up to 4 images or\\nexactly 1 GIF per part; \", _jsx(_components.code, {\n children: \"alt_text\"\n }), \" is capped at 1,000 characters.\\nVideo is not supported yet.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Advanced settings (\", _jsx(_components.code, {\n children: \"auto_retweet\"\n }), \", \", _jsx(_components.code, {\n children: \"auto_delete\"\n }), \", \", _jsx(_components.code, {\n children: \"auto_plug\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"auto_dm\"\n }), \", \", _jsx(_components.code, {\n children: \"super_followers_only\"\n }), \"): omit a setting to inherit its\\nDefault Post Settings value from the SuperX app, send an object (or\\n\", _jsx(_components.code, {\n children: \"true\"\n }), \"/\", _jsx(_components.code, {\n children: \"false\"\n }), \" for \", _jsx(_components.code, {\n children: \"super_followers_only\"\n }), \") to override, or send\\n\", _jsx(_components.code, {\n children: \"null\"\n }), \" to turn it off for this post. Exactly five settings inherit\\nthis way: auto retweet, auto delete, auto plug, auto DM, and Super\\nFollowers only. Other composer defaults (for example Bluesky\\ncross-posting or share-with-followers) are never applied to API\\nposts.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"auto_dm\"\n }), \" direct-messages the people who reply to or repost the post\\nonce it is live. Your plan caps how many posts a month may carry one\\n(\", _jsx(_components.code, {\n children: \"posts_with_auto_dm\"\n }), \" in \", _jsx(_components.code, {\n children: \"GET /v1/dm/limits\"\n }), \"): when that cap stops\\nit, the post is still created and the response carries\\n\", _jsx(_components.code, {\n children: \"auto_dm_skipped: true\"\n }), \" instead of failing. Reading a post back shows\\nthat an auto DM is attached but never its message text.\"]\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":{"title":"Create a draft or scheduled post, or publish now","description":"Creates a post: a draft when `scheduled_for` is omitted, a scheduled\npost otherwise. Works for your main account or any account linked to it\n(`account_id`); accounts shared with you are read-only. Supports the\n`Idempotency-Key` header for safe retries (see the Idempotency guide).\nSuccessful creation returns `201`.\n\n**Publishing now.** Send `scheduled_for: \"now\"` and the post goes to X\nimmediately. This is irreversible, so the rules are tighter:\n\n- `Idempotency-Key` is REQUIRED (`400 invalid_parameter` without it).\n Reuse the same key on any retry: it never publishes twice.\n- `title` and `scratchpad` are rejected with `400` (a published post\n has no draft to organize), and Bluesky is never cross-posted.\n- A retry that arrives while the first attempt is still publishing\n returns `409 idempotency_in_flight` with a `Retry-After` header.\n After that window the API checks whether the first attempt landed\n and replays its result instead of posting again.\n- The `201` carries `status: \"sent\"` with `posted_at`, `x_post_id`\n and `url`, and `scheduled_for: null`.\n- Advanced settings and Auto DM inherit your Default Post Settings\n exactly as they do for a scheduled post.\n- A thread that fails part way through leaves no scheduled-post record\n at all, so check `GET /v1/posts` before retrying: the parts X did\n accept are already live.\n\nImages attach per part: `parts[].media` is an array of\n`{ object_key, alt_text? }` items, with `object_key` from\n`POST /v1/media` (uploaded bytes required first). Up to 4 images or\nexactly 1 GIF per part; `alt_text` is capped at 1,000 characters.\nVideo is not supported yet.\n\nAdvanced settings (`auto_retweet`, `auto_delete`, `auto_plug`,\n`auto_dm`, `super_followers_only`): omit a setting to inherit its\nDefault Post Settings value from the SuperX app, send an object (or\n`true`/`false` for `super_followers_only`) to override, or send\n`null` to turn it off for this post. Exactly five settings inherit\nthis way: auto retweet, auto delete, auto plug, auto DM, and Super\nFollowers only. Other composer defaults (for example Bluesky\ncross-posting or share-with-followers) are never applied to API\nposts.\n\n`auto_dm` direct-messages the people who reply to or repost the post\nonce it is live. Your plan caps how many posts a month may carry one\n(`posts_with_auto_dm` in `GET /v1/dm/limits`): when that cap stops\nit, the post is still created and the response carries\n`auto_dm_skipped: true` instead of failing. Reading a post back shows\nthat an auto DM is attached but never its message text.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/scheduled-posts","href":"/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Scheduling"],"operationId":"createScheduledPost","summary":"Create a draft or scheduled post, or publish now","description":"Creates a post: a draft when `scheduled_for` is omitted, a scheduled\npost otherwise. Works for your main account or any account linked to it\n(`account_id`); accounts shared with you are read-only. Supports the\n`Idempotency-Key` header for safe retries (see the Idempotency guide).\nSuccessful creation returns `201`.\n\n**Publishing now.** Send `scheduled_for: \"now\"` and the post goes to X\nimmediately. This is irreversible, so the rules are tighter:\n\n- `Idempotency-Key` is REQUIRED (`400 invalid_parameter` without it).\n Reuse the same key on any retry: it never publishes twice.\n- `title` and `scratchpad` are rejected with `400` (a published post\n has no draft to organize), and Bluesky is never cross-posted.\n- A retry that arrives while the first attempt is still publishing\n returns `409 idempotency_in_flight` with a `Retry-After` header.\n After that window the API checks whether the first attempt landed\n and replays its result instead of posting again.\n- The `201` carries `status: \"sent\"` with `posted_at`, `x_post_id`\n and `url`, and `scheduled_for: null`.\n- Advanced settings and Auto DM inherit your Default Post Settings\n exactly as they do for a scheduled post.\n- A thread that fails part way through leaves no scheduled-post record\n at all, so check `GET /v1/posts` before retrying: the parts X did\n accept are already live.\n\nImages attach per part: `parts[].media` is an array of\n`{ object_key, alt_text? }` items, with `object_key` from\n`POST /v1/media` (uploaded bytes required first). Up to 4 images or\nexactly 1 GIF per part; `alt_text` is capped at 1,000 characters.\nVideo is not supported yet.\n\nAdvanced settings (`auto_retweet`, `auto_delete`, `auto_plug`,\n`auto_dm`, `super_followers_only`): omit a setting to inherit its\nDefault Post Settings value from the SuperX app, send an object (or\n`true`/`false` for `super_followers_only`) to override, or send\n`null` to turn it off for this post. Exactly five settings inherit\nthis way: auto retweet, auto delete, auto plug, auto DM, and Super\nFollowers only. Other composer defaults (for example Bluesky\ncross-posting or share-with-followers) are never applied to API\nposts.\n\n`auto_dm` direct-messages the people who reply to or repost the post\nonce it is live. Your plan caps how many posts a month may carry one\n(`posts_with_auto_dm` in `GET /v1/dm/limits`): when that cap stops\nit, the post is still created and the response carries\n`auto_dm_skipped: true` instead of failing. Reading a post back shows\nthat an auto DM is attached but never its message text.\n","parameters":["ebceca9a-cd9b-40f3-83b4-d4a6035a2fa9"],"requestBody":"aed54caa-185d-41a9-a12f-d408007a6cdf","responses":{"201":"417e2d9b-a930-46c2-9ef4-063aaf480518","400":"0ad51120-91e4-403e-b46a-58dc38bdacc2","401":"db6fbb3f-52ae-474b-9186-d3d39e51509b","403":"673118b6-ae9d-441d-bfab-b3c334719c63","404":"b129bc31-0280-4094-9ac5-875bba3f653d","409":"22bbc710-878c-4a60-84e9-2c7c5bea7686","429":"cf1288e6-b5af-4623-8552-724daec4abe1","500":"1e6d39e8-05f2-491e-837d-380c4126e566","502":"81f53a2d-0b9c-48a0-a6e3-c6ee9477a436","503":"5f7ee6a4-7698-4490-94fe-9bbc07dcc85c"},"method":"post","type":"path","servers":["3d538a38-214d-4480-97a3-9a44d5c3102b"],"security":["d3f7d345-7007-489f-b114-dac4df3cb92f"],"path":"/v1/scheduled-posts","baseUrlOptions":["https://api.superx.so"],"title":"Create a draft or scheduled post, or publish now","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ebceca9a-cd9b-40f3-83b4-d4a6035a2fa9":{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key (max 64 characters) for safe retries. Replays carry the \"Idempotency-Replayed\" response header set to \"true\". Keys are retained for 24 hours.","schema":{"type":"string","maxLength":64,"isRequired":false,"description":"Unique key (max 64 characters) for safe retries. Replays carry the \"Idempotency-Replayed\" response header set to \"true\". Keys are retained for 24 hours.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The post text (single post). Provide either `text` or `parts`. Media rides `parts`, so a post with media, including a media-only post, uses `parts`.","uniqueKey":"text","typeLabel":"string"},"parts":{"type":"array","description":"Thread parts, 1 to 25 items. Total text across parts is limited to 25,000 characters. A part's `text` is optional when the part has `media` (a media-only post) and comes back as an empty string. A post with no text and no media at all is rejected.","items":{"type":"object","properties":{"text":{"type":"string","description":"Part text. Optional when the part has `media`.","uniqueKey":"parts.items.[INDEX].text","typeLabel":"string"},"media":{"type":"array","maxItems":4,"description":"Images for this part (up to 4, or exactly 1 GIF). `object_key` from `POST /v1/media`.","items":{"type":"object","required":["object_key"],"properties":{"object_key":{"type":"string","isRequired":true,"uniqueKey":"parts.items.[INDEX].media.items.[INDEX].object_key","typeLabel":"string"},"alt_text":{"type":"string","maxLength":1000,"description":"Accessibility description delivered to X with the image.","uniqueKey":"parts.items.[INDEX].media.items.[INDEX].alt_text","typeLabel":"string"}},"uniqueKey":"parts.items.[INDEX].media.items.[INDEX]","typeLabel":"object"},"uniqueKey":"parts.items.[INDEX].media","typeLabel":"object[]"}},"uniqueKey":"parts.items.[INDEX]","typeLabel":"object"},"uniqueKey":"parts","typeLabel":"object[]"},"scheduled_for":{"oneOf":[{"type":"string","description":"UTC ISO-8601 with explicit Z or offset: at least 60 seconds in the future, at most 18 months out. Omit to create a draft. The literal string `\"now\"` publishes to X immediately and requires an `Idempotency-Key` (see the operation description).","format":"date-time","uniqueKey":"scheduled_for.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"string","description":"UTC ISO-8601 with explicit Z or offset: at least 60 seconds in the future, at most 18 months out. Omit to create a draft. The literal string `\"now\"` publishes to X immediately and requires an `Idempotency-Key` (see the operation description).","enum":["now"],"uniqueKey":"scheduled_for.oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"scheduled_for","typeLabel":"string\u003cdate-time> | enum\u003cstring>"},"title":{"type":"string","maxLength":300,"description":"Draft title shown in the SuperX app. Organizational only, never posted.","uniqueKey":"title","typeLabel":"string"},"scratchpad":{"type":"string","maxLength":30000,"description":"Private working notes attached to the post. Never posted.","uniqueKey":"scratchpad","typeLabel":"string"},"tags":{"type":"array","maxItems":20,"description":"Tag ids to assign (from `GET /v1/tags`). Unknown ids fail the whole request with `400 unknown_tag` before anything is created.","items":{"type":"string","uniqueKey":"tags.items.[INDEX]","typeLabel":"string"},"uniqueKey":"tags","typeLabel":"string[]"},"auto_retweet":{"oneOf":[{"type":"object","description":"Auto retweet. Omit to inherit your Default Post Settings; `null` turns it off for this post.","required":["after_hours"],"properties":{"after_hours":{"type":"integer","minimum":1,"maximum":12,"description":"Retweet the post this many hours after it goes live.","isRequired":true,"uniqueKey":"auto_retweet.oneOf.0.after_hours","typeLabel":"integer"},"remove_after_hours":{"type":"integer","minimum":1,"maximum":12,"description":"Remove the retweet this many hours later. Omit to keep it.","uniqueKey":"auto_retweet.oneOf.0.remove_after_hours","typeLabel":"integer"}},"uniqueKey":"auto_retweet.oneOf.0","typeLabel":"object"},{"type":"null","description":"Auto retweet. Omit to inherit your Default Post Settings; `null` turns it off for this post.","required":["after_hours"],"properties":{"after_hours":{"type":"integer","minimum":1,"maximum":12,"description":"Retweet the post this many hours after it goes live."},"remove_after_hours":{"type":"integer","minimum":1,"maximum":12,"description":"Remove the retweet this many hours later. Omit to keep it."}},"uniqueKey":"auto_retweet.oneOf.1","typeLabel":"null"}],"uniqueKey":"auto_retweet","typeLabel":"object | null"},"auto_delete":{"oneOf":[{"type":"object","description":"Auto delete underperforming posts. Omit to inherit your defaults; `null` turns it off for this post.","required":["after_hours"],"properties":{"after_hours":{"type":"integer","minimum":1,"maximum":12,"description":"Delete the post this many hours after it goes live if it is under the views threshold.","isRequired":true,"uniqueKey":"auto_delete.oneOf.0.after_hours","typeLabel":"integer"},"threshold":{"type":"integer","minimum":0,"description":"Views threshold (default 1000).","uniqueKey":"auto_delete.oneOf.0.threshold","typeLabel":"integer"}},"uniqueKey":"auto_delete.oneOf.0","typeLabel":"object"},{"type":"null","description":"Auto delete underperforming posts. Omit to inherit your defaults; `null` turns it off for this post.","required":["after_hours"],"properties":{"after_hours":{"type":"integer","minimum":1,"maximum":12,"description":"Delete the post this many hours after it goes live if it is under the views threshold."},"threshold":{"type":"integer","minimum":0,"description":"Views threshold (default 1000)."}},"uniqueKey":"auto_delete.oneOf.1","typeLabel":"null"}],"uniqueKey":"auto_delete","typeLabel":"object | null"},"auto_plug":{"oneOf":[{"type":"object","description":"Auto plug: reply with a template once the post hits a likes threshold. Omit to inherit your defaults; `null` turns it off for this post. Unknown template ids fail with `400 unknown_plug_template`.","required":["template_id","threshold"],"properties":{"template_id":{"type":"string","description":"Plug template id (from `GET /v1/plug-templates`).","isRequired":true,"uniqueKey":"auto_plug.oneOf.0.template_id","typeLabel":"string"},"threshold":{"type":"integer","minimum":1,"description":"Likes threshold that triggers the plug reply.","isRequired":true,"uniqueKey":"auto_plug.oneOf.0.threshold","typeLabel":"integer"}},"uniqueKey":"auto_plug.oneOf.0","typeLabel":"object"},{"type":"null","description":"Auto plug: reply with a template once the post hits a likes threshold. Omit to inherit your defaults; `null` turns it off for this post. Unknown template ids fail with `400 unknown_plug_template`.","required":["template_id","threshold"],"properties":{"template_id":{"type":"string","description":"Plug template id (from `GET /v1/plug-templates`)."},"threshold":{"type":"integer","minimum":1,"description":"Likes threshold that triggers the plug reply."}},"uniqueKey":"auto_plug.oneOf.1","typeLabel":"null"}],"uniqueKey":"auto_plug","typeLabel":"object | null"},"auto_dm":{"oneOf":[{"type":"object","description":"Auto DM: message the people who reply to or repost this post once it is live. Omit to inherit your defaults; `null` turns it off for this post.","required":["message"],"properties":{"message":{"type":"string","minLength":1,"maxLength":1000,"description":"The direct message. `[name]`, `[first]` and `[handle]` are filled in per recipient. Always required on a non-null `auto_dm`.","isRequired":true,"uniqueKey":"auto_dm.oneOf.0.message","typeLabel":"string"},"triggers":{"type":"object","additionalProperties":false,"description":"Who gets the DM. At least one must be true; defaults to reply only. Any other key is rejected with `400 invalid_parameter`.","properties":{"reply":{"type":"boolean","description":"DM the people who reply to the post.","uniqueKey":"auto_dm.oneOf.0.triggers.reply","typeLabel":"boolean"},"repost":{"type":"boolean","description":"DM the people who repost the post.","uniqueKey":"auto_dm.oneOf.0.triggers.repost","typeLabel":"boolean"},"retweet":{"type":"boolean","description":"Alias of `repost`, accepted so the value a post reads back (which reports `retweet`) can be sent straight back. Sending both with different values is a `400`.","uniqueKey":"auto_dm.oneOf.0.triggers.retweet","typeLabel":"boolean"}},"uniqueKey":"auto_dm.oneOf.0.triggers","typeLabel":"object"},"enabled":{"type":"boolean","default":true,"description":"`false` behaves exactly like sending `auto_dm: null`: the Auto DM is cleared and nothing is stored. Prefer `null`.","uniqueKey":"auto_dm.oneOf.0.enabled","typeLabel":"boolean"},"max_dms":{"type":"integer","minimum":1,"maximum":100,"default":100,"description":"Most people to DM for this post. The plan's per-post cap still applies.","uniqueKey":"auto_dm.oneOf.0.max_dms","typeLabel":"integer"},"batch_mode":{"type":"boolean","description":"Send the DMs in one batch rather than as engagement arrives.","uniqueKey":"auto_dm.oneOf.0.batch_mode","typeLabel":"boolean"}},"uniqueKey":"auto_dm.oneOf.0","typeLabel":"object"},{"type":"null","description":"Auto DM: message the people who reply to or repost this post once it is live. Omit to inherit your defaults; `null` turns it off for this post.","required":["message"],"properties":{"message":{"type":"string","minLength":1,"maxLength":1000,"description":"The direct message. `[name]`, `[first]` and `[handle]` are filled in per recipient. Always required on a non-null `auto_dm`."},"triggers":{"type":"object","additionalProperties":false,"description":"Who gets the DM. At least one must be true; defaults to reply only. Any other key is rejected with `400 invalid_parameter`.","properties":{"reply":{"type":"boolean","description":"DM the people who reply to the post."},"repost":{"type":"boolean","description":"DM the people who repost the post."},"retweet":{"type":"boolean","description":"Alias of `repost`, accepted so the value a post reads back (which reports `retweet`) can be sent straight back. Sending both with different values is a `400`."}}},"enabled":{"type":"boolean","default":true,"description":"`false` behaves exactly like sending `auto_dm: null`: the Auto DM is cleared and nothing is stored. Prefer `null`."},"max_dms":{"type":"integer","minimum":1,"maximum":100,"default":100,"description":"Most people to DM for this post. The plan's per-post cap still applies."},"batch_mode":{"type":"boolean","description":"Send the DMs in one batch rather than as engagement arrives."}},"uniqueKey":"auto_dm.oneOf.1","typeLabel":"null"}],"uniqueKey":"auto_dm","typeLabel":"object | null"},"super_followers_only":{"type":"boolean","description":"Post to Super Followers only. Omit to inherit your defaults.","uniqueKey":"super_followers_only","typeLabel":"boolean"},"account_id":{"type":"string","description":"Any account you own, meaning your main account (the default when omitted) or one linked to it. An account shared with you returns `403 writes_main_account_only`.","uniqueKey":"account_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"single":{"title":"single","value":{"text":"Shipping day.","scheduled_for":"2026-07-08T15:00:00Z"}},"thread":{"title":"thread","value":{"parts":[{"text":"Why most scheduling tools get threads wrong:"},{"text":"They treat a thread as one blob of text instead of parts."}]}},"organized":{"title":"organized","value":{"text":"Rough cut of the launch teaser.","title":"Launch teaser v1","tags":["V1StGXR8_Z5jdHi6B-myT"]}},"with_image":{"title":"with_image","value":{"parts":[{"text":"Chart of the week.","media":[{"object_key":"u123/api_1751980800000_9f3a1c2b_chart.png","alt_text":"Line chart of weekly revenue trending up"}]}],"scheduled_for":"2026-07-08T15:00:00Z"}},"advanced":{"title":"advanced","value":{"text":"Shipping day.","scheduled_for":"2026-07-08T15:00:00Z","auto_retweet":{"after_hours":6,"remove_after_hours":4},"auto_plug":{"template_id":"tpl_abc123","threshold":50},"auto_delete":null}},"publish_now":{"title":"publish_now","value":{"text":"Shipping now.","scheduled_for":"now"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"417e2d9b-a930-46c2-9ef4-063aaf480518":{"description":"The created post (echo of the accepted request, not the stored row). Replayed idempotent requests also return this body with the \"Idempotency-Replayed\" header set to \"true\". Applied advanced settings, inherited or explicit, are NOT echoed here; read them back via GET /v1/scheduled-posts, adding `?status=sent` for a post published with `scheduled_for: \"now\"`.","headers":{"Idempotency-Replayed":{"description":"Present and \"true\" when this response was replayed from a previous request with the same Idempotency-Key.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"The limit of the rate window closest to exhaustion.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in that window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when that window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","uniqueKey":"data.id","typeLabel":"string"},"status":{"type":"string","enum":["draft","scheduled","sent"],"description":"`sent` only for `scheduled_for: \"now\"`.","uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"scheduled_for":{"oneOf":[{"type":"string","format":"date-time","description":"Null for a draft and for a post published with `scheduled_for: \"now\"`.","uniqueKey":"data.scheduled_for.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Null for a draft and for a post published with `scheduled_for: \"now\"`.","uniqueKey":"data.scheduled_for.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.scheduled_for","typeLabel":"string\u003cdate-time> | null"},"parts":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","uniqueKey":"data.parts.items.[INDEX].text","typeLabel":"string"},"media":{"type":"array","description":"Present only when the part carries media.","items":{"type":"object","properties":{"object_key":{"type":"string","uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX].object_key","typeLabel":"string"},"url":{"type":"string","uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX].url","typeLabel":"string"},"file_type":{"type":"string","uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX].file_type","typeLabel":"string"},"size":{"oneOf":[{"type":"integer","uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX].size.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX].size.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX].size","typeLabel":"integer | null"},"alt_text":{"oneOf":[{"type":"string","uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX].alt_text.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX].alt_text.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX].alt_text","typeLabel":"string | null"}},"uniqueKey":"data.parts.items.[INDEX].media.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.parts.items.[INDEX].media","typeLabel":"object[]"}},"uniqueKey":"data.parts.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.parts","typeLabel":"object[]"},"title":{"oneOf":[{"type":"string","uniqueKey":"data.title.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.title.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.title","typeLabel":"string | null"},"scratchpad":{"oneOf":[{"type":"string","uniqueKey":"data.scratchpad.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.scratchpad.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.scratchpad","typeLabel":"string | null"},"tags":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","uniqueKey":"data.tags.items.[INDEX].id","typeLabel":"string"},"name":{"type":"string","uniqueKey":"data.tags.items.[INDEX].name","typeLabel":"string"},"color":{"type":"string","uniqueKey":"data.tags.items.[INDEX].color","typeLabel":"string"}},"uniqueKey":"data.tags.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.tags","typeLabel":"object[]"},"created_at":{"type":"string","format":"date-time","uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time>"},"posted_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the post went out. Present only for `scheduled_for: \"now\"`.","uniqueKey":"data.posted_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the post went out. Present only for `scheduled_for: \"now\"`.","uniqueKey":"data.posted_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.posted_at","typeLabel":"string\u003cdate-time> | null"},"x_post_id":{"oneOf":[{"type":"string","description":"The X post id. Present only for `scheduled_for: \"now\"`.","uniqueKey":"data.x_post_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The X post id. Present only for `scheduled_for: \"now\"`.","uniqueKey":"data.x_post_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.x_post_id","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","description":"Permalink to the post on X. Present only for `scheduled_for: \"now\"`.","uniqueKey":"data.url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Permalink to the post on X. Present only for `scheduled_for: \"now\"`.","uniqueKey":"data.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.url","typeLabel":"string | null"},"auto_dm_skipped":{"type":"boolean","description":"Present (and true) only when a plan limit stripped the inherited Auto DM from this post. Absent otherwise, and always absent from a result the API recovered after an interrupted publish (the flag is not stored on the post), so treat its absence as \"unknown\" on a retried request.","uniqueKey":"data.auto_dm_skipped","typeLabel":"boolean"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"data":{"id":"V1StGXR8_Z5jdHi6B-myT","status":"scheduled","scheduled_for":"2026-07-08T15:00:00.000Z","parts":[{"text":"Shipping day."}],"title":null,"scratchpad":null,"tags":[],"created_at":"2026-07-06T10:00:00.000Z"}},"examples":{"Example":{"title":"Example","value":{"data":{"id":"V1StGXR8_Z5jdHi6B-myT","status":"scheduled","scheduled_for":"2026-07-08T15:00:00.000Z","parts":[{"text":"Shipping day."}],"title":null,"scratchpad":null,"tags":[],"created_at":"2026-07-06T10:00:00.000Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"0ad51120-91e4-403e-b46a-58dc38bdacc2":{"description":"Invalid parameter, invalid request, unknown tag id (`unknown_tag`), unknown plug template id (`unknown_plug_template`), or a media problem: unknown or foreign `object_key` (`invalid_media`), bytes never uploaded (`media_not_uploaded`), not a supported image (`unsupported_media_type`), or over the size cap (`media_too_large`).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying (rate-limit errors only).","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"invalid_media","message":"Unknown object_key: u123/api_..._chart.png. Upload media first via POST /v1/media."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_media","message":"Unknown object_key: u123/api_..._chart.png. Upload media first via POST /v1/media."}}}},"exampleType":"examples"}},"exampleType":"examples"},"db6fbb3f-52ae-474b-9186-d3d39e51509b":{"description":"Missing/malformed Authorization header (`unauthorized`) or an unknown/revoked key (`invalid_api_key`).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying (rate-limit errors only).","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"invalid_api_key","message":"Unknown or revoked API key"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_api_key","message":"Unknown or revoked API key"}}}},"exampleType":"examples"}},"exampleType":"examples"},"673118b6-ae9d-441d-bfab-b3c334719c63":{"description":"Read-only key (`insufficient_scope`), an account shared with you\n(`writes_main_account_only`; shared accounts are read-only through\nthe API, your own linked accounts are not), onboarding not finished\n(`onboarding_required`), post quota used up\n(`post_quota_exceeded`), the connected X account needing to be\nre-authorized in the SuperX app (`reauth_required`, publishing\nonly), or a lapsed subscription (legacy string envelope).\n","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","isRequired":true,"uniqueKey":"oneOf.0.error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying (rate-limit errors only).","uniqueKey":"oneOf.0.error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Legacy shape used ONLY by the shared subscription middleware: a plain\nstring `error` field. Seen on `403` when the subscription has lapsed\n(string starts with \"subscription_required:\") and on `500` when\nsubscription verification fails (string starts with \"internal_error:\").\n","required":["error"],"properties":{"error":{"type":"string","example":"subscription_required: The SuperX API requires an active subscription","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"writes_main_account_only","message":"Accounts shared with you are read-only through the API. Writes work on your own main and linked accounts."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"writes_main_account_only","message":"Accounts shared with you are read-only through the API. Writes work on your own main and linked accounts."}}}},"exampleType":"examples"}},"exampleType":"examples"},"b129bc31-0280-4094-9ac5-875bba3f653d":{"description":"account_id is not one of your accounts.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying (rate-limit errors only).","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"account_not_found","message":"No account with that id belongs to this key"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"account_not_found","message":"No account with that id belongs to this key"}}}},"exampleType":"examples"}},"exampleType":"examples"},"22bbc710-878c-4a60-84e9-2c7c5bea7686":{"description":"The Idempotency-Key was already used with a different request body (`idempotency_key_reuse`); or, when publishing now, an earlier request with the same key is still publishing (`idempotency_in_flight`, with a `Retry-After` header: wait, then retry the SAME key) or the post has already been published (`post_already_published`).","headers":{"Retry-After":{"description":"Seconds to wait before retrying, on `idempotency_in_flight`.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying (rate-limit errors only).","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"idempotency_key_reuse","message":"This Idempotency-Key was already used with a different request body."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"idempotency_key_reuse","message":"This Idempotency-Key was already used with a different request body."}}}},"exampleType":"examples"}},"exampleType":"examples"},"cf1288e6-b5af-4623-8552-724daec4abe1":{"description":"Rate limit exceeded (limits vary by plan). Honor Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"The limit of the rate window closest to exhaustion.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in that window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when that window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying (rate-limit errors only).","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"rate_limited","message":"Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.","retry_after":42}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited","message":"Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.","retry_after":42}}}},"exampleType":"examples"}},"exampleType":"examples"},"1e6d39e8-05f2-491e-837d-380c4126e566":{"description":"Unexpected server error. May also use the legacy string envelope when subscription verification fails.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","isRequired":true,"uniqueKey":"oneOf.0.error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying (rate-limit errors only).","uniqueKey":"oneOf.0.error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Legacy shape used ONLY by the shared subscription middleware: a plain\nstring `error` field. Seen on `403` when the subscription has lapsed\n(string starts with \"subscription_required:\") and on `500` when\nsubscription verification fails (string starts with \"internal_error:\").\n","required":["error"],"properties":{"error":{"type":"string","example":"subscription_required: The SuperX API requires an active subscription","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"internal_error","message":"Failed to fetch posts"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"internal_error","message":"Failed to fetch posts"}}}},"exampleType":"examples"}},"exampleType":"examples"},"81f53a2d-0b9c-48a0-a6e3-c6ee9477a436":{"description":"A dependent SuperX service returned an unexpected response.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying (rate-limit errors only).","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"upstream_error","message":"Failed to fetch scheduled posts. Try again shortly."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"upstream_error","message":"Failed to fetch scheduled posts. Try again shortly."}}}},"exampleType":"examples"}},"exampleType":"examples"},"5f7ee6a4-7698-4490-94fe-9bbc07dcc85c":{"description":"The scheduling service is temporarily unreachable. Safe to retry; reuse your Idempotency-Key on POST.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying (rate-limit errors only).","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"upstream_unavailable","message":"The scheduling service is temporarily unavailable. Retry with the same Idempotency-Key."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"upstream_unavailable","message":"The scheduling service is temporarily unavailable. Retry with the same Idempotency-Key."}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"d3f7d345-7007-489f-b114-dac4df3cb92f":{"apiKey":{"type":"http","scheme":"bearer","description":"A SuperX API key (\"sxk_...\"), created in the SuperX app under Account > API / MCP / CLI. Keys are server-side secrets.","scopes":[],"schemeName":"apiKey"}}},"servers":{"3d538a38-214d-4480-97a3-9a44d5c3102b":{"url":"https://api.superx.so"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"A SuperX API key (\"sxk_...\"), created in the SuperX app under Account > API / MCP / CLI. Keys are server-side secrets.","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A SuperX API key (\"sxk_...\"), created in the SuperX app under Account > API / MCP / CLI. Keys are server-side secrets.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"superx","siteName":"SuperX","title":"Create a draft or scheduled post, or publish now - SuperX","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-07T18:31:25.277Z","originalFileLocation":"api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now.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=\"Creates a post: a draft when scheduled_for is omitted, a scheduled post otherwise. Works for your main account or any account linked to it (account_id); accounts shared with you are read-only. Supports the Idempotency-Key header for safe retries (see the Idempotency guide). Successful creation returns 201. Publishing now. Send scheduled_for: \u0026quot;now\u0026quot; and the post goes to X immediately. This is irreversible, so the rules are tighter: - Idempotency-Key is REQUIRED (400 invalid_parameter without it). Reuse the same key on any retry: it never publishes twice. - title and scratchpad are rejected with 400 (a published post has no draft to organize), and Bluesky is never cross-posted. - A retry that arrives while the first attempt is still publishing returns 409 idempotency_in_flight with a Retry-After header. After that window the API checks whether the first attempt landed and replays its result instead of posting again. - The 201 carries status: \u0026quot;sent\u0026quot; with posted_at, x_post_id and url, and scheduled_for: null. - Advanced settings and Auto DM inherit your Default Post Settings exactly as they do for a scheduled post. - A thread that fails part way through leaves no scheduled-post record at all, so check GET /v1/posts before retrying: the parts X did accept are already live. Images attach per part: parts[].media is an array of { object_key, alt_text? } items, with object_key from POST /v1/media (uploaded bytes required first). Up to 4 images or exactly 1 GIF per part; alt_text is capped at 1,000 characters. Video is not supported yet. Advanced settings (auto_retweet, auto_delete, auto_plug, auto_dm, super_followers_only): omit a setting to inherit its Default Post Settings value from the SuperX app, send an object (or true/false for super_followers_only) to override, or send null to turn it off for this post. Exactly five settings inherit this way: auto retweet, auto delete, auto plug, auto DM, and Super Followers only. Other composer defaults (for example Bluesky cross-posting or share-with-followers) are never applied to API posts. auto_dm direct-messages the people who reply to or repost the post once it is live. Your plan caps how many posts a month may carry one (posts_with_auto_dm in GET /v1/dm/limits): when that cap stops it, the post is still created and the response carries auto_dm_skipped: true instead of failing. Reading a post back shows that an auto DM is attached but never its message text.\">\u003cmeta data-mint-head name=\"application-name\" content=\"SuperX\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/superx/Ohz_C_TMxE84ikvK/_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/superx/Ohz_C_TMxE84ikvK/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/superx/Ohz_C_TMxE84ikvK/_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/superx/Ohz_C_TMxE84ikvK/_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/superx/Ohz_C_TMxE84ikvK/_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/superx/Ohz_C_TMxE84ikvK/_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/superx/Ohz_C_TMxE84ikvK/_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/superx/Ohz_C_TMxE84ikvK/_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/superx/Ohz_C_TMxE84ikvK/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a draft or scheduled post, or publish now - SuperX\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a post: a draft when scheduled_for is omitted, a scheduled post otherwise. Works for your main account or any account linked to it (account_id); accounts shared with you are read-only. Supports the Idempotency-Key header for safe retries (see the Idempotency guide). Successful creation returns 201. Publishing now. Send scheduled_for: \u0026quot;now\u0026quot; and the post goes to X immediately. This is irreversible, so the rules are tighter: - Idempotency-Key is REQUIRED (400 invalid_parameter without it). Reuse the same key on any retry: it never publishes twice. - title and scratchpad are rejected with 400 (a published post has no draft to organize), and Bluesky is never cross-posted. - A retry that arrives while the first attempt is still publishing returns 409 idempotency_in_flight with a Retry-After header. After that window the API checks whether the first attempt landed and replays its result instead of posting again. - The 201 carries status: \u0026quot;sent\u0026quot; with posted_at, x_post_id and url, and scheduled_for: null. - Advanced settings and Auto DM inherit your Default Post Settings exactly as they do for a scheduled post. - A thread that fails part way through leaves no scheduled-post record at all, so check GET /v1/posts before retrying: the parts X did accept are already live. Images attach per part: parts[].media is an array of { object_key, alt_text? } items, with object_key from POST /v1/media (uploaded bytes required first). Up to 4 images or exactly 1 GIF per part; alt_text is capped at 1,000 characters. Video is not supported yet. Advanced settings (auto_retweet, auto_delete, auto_plug, auto_dm, super_followers_only): omit a setting to inherit its Default Post Settings value from the SuperX app, send an object (or true/false for super_followers_only) to override, or send null to turn it off for this post. Exactly five settings inherit this way: auto retweet, auto delete, auto plug, auto DM, and Super Followers only. Other composer defaults (for example Bluesky cross-posting or share-with-followers) are never applied to API posts. auto_dm direct-messages the people who reply to or repost the post once it is live. Your plan caps how many posts a month may carry one (posts_with_auto_dm in GET /v1/dm/limits): when that cap stops it, the post is still created and the response carries auto_dm_skipped: true instead of failing. Reading a post back shows that an auto DM is attached but never its message text.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SuperX\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://superx.mintlify.app/_mintlify/api/og/v2?division=Scheduling\u0026amp;title=Create+a+draft+or+scheduled+post%2C+or+publish+now\u0026amp;description=Creates+a+post%3A+a+draft+when+%60scheduled_for%60+is+omitted%2C+a+scheduled%0Apost+otherwise.+Works+for+your+main+account+or+any+account+linked+to+it%0A%28%60account_id%60%29%3B+acc\u0026amp;theme=4e9a0bdaa172d4dfc537fe9f\u0026amp;signature=1d9c14a1f410d9d9fa4c509057e6c1fed84e16f893b4662e45f932d820e02c71\">\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 a draft or scheduled post, or publish now - SuperX\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a post: a draft when scheduled_for is omitted, a scheduled post otherwise. Works for your main account or any account linked to it (account_id); accounts shared with you are read-only. Supports the Idempotency-Key header for safe retries (see the Idempotency guide). Successful creation returns 201. Publishing now. Send scheduled_for: \u0026quot;now\u0026quot; and the post goes to X immediately. This is irreversible, so the rules are tighter: - Idempotency-Key is REQUIRED (400 invalid_parameter without it). Reuse the same key on any retry: it never publishes twice. - title and scratchpad are rejected with 400 (a published post has no draft to organize), and Bluesky is never cross-posted. - A retry that arrives while the first attempt is still publishing returns 409 idempotency_in_flight with a Retry-After header. After that window the API checks whether the first attempt landed and replays its result instead of posting again. - The 201 carries status: \u0026quot;sent\u0026quot; with posted_at, x_post_id and url, and scheduled_for: null. - Advanced settings and Auto DM inherit your Default Post Settings exactly as they do for a scheduled post. - A thread that fails part way through leaves no scheduled-post record at all, so check GET /v1/posts before retrying: the parts X did accept are already live. Images attach per part: parts[].media is an array of { object_key, alt_text? } items, with object_key from POST /v1/media (uploaded bytes required first). Up to 4 images or exactly 1 GIF per part; alt_text is capped at 1,000 characters. Video is not supported yet. Advanced settings (auto_retweet, auto_delete, auto_plug, auto_dm, super_followers_only): omit a setting to inherit its Default Post Settings value from the SuperX app, send an object (or true/false for super_followers_only) to override, or send null to turn it off for this post. Exactly five settings inherit this way: auto retweet, auto delete, auto plug, auto DM, and Super Followers only. Other composer defaults (for example Bluesky cross-posting or share-with-followers) are never applied to API posts. auto_dm direct-messages the people who reply to or repost the post once it is live. Your plan caps how many posts a month may carry one (posts_with_auto_dm in GET /v1/dm/limits): when that cap stops it, the post is still created and the response carries auto_dm_skipped: true instead of failing. Reading a post back shows that an auto DM is attached but never its message text.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://superx.mintlify.app/_mintlify/api/og/v2?division=Scheduling\u0026amp;title=Create+a+draft+or+scheduled+post%2C+or+publish+now\u0026amp;description=Creates+a+post%3A+a+draft+when+%60scheduled_for%60+is+omitted%2C+a+scheduled%0Apost+otherwise.+Works+for+your+main+account+or+any+account+linked+to+it%0A%28%60account_id%60%29%3B+acc\u0026amp;theme=4e9a0bdaa172d4dfc537fe9f\u0026amp;signature=1d9c14a1f410d9d9fa4c509057e6c1fed84e16f893b4662e45f932d820e02c71\">\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/superx/Ohz_C_TMxE84ikvK/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SuperX\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#F4503B\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.superx.so/#organization\",\"name\":\"SuperX\",\"url\":\"https://docs.superx.so\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/superx/ZOrKRYsYXbBhitoI/logo/light.svg?fit=max\u0026auto=format\u0026n=ZOrKRYsYXbBhitoI\u0026q=85\u0026s=d465c38938c34f6ab75cfc50d0039be2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.superx.so#website\",\"name\":\"SuperX\",\"url\":\"https://docs.superx.so\",\"publisher\":{\"@id\":\"https://docs.superx.so/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now#webpage\",\"url\":\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now\",\"name\":\"Create a draft or scheduled post, or publish now\",\"description\":\"Creates a post: a draft when scheduled_for is omitted, a scheduled post otherwise. Works for your main account or any account linked to it (account_id); accounts shared with you are read-only. Supports the Idempotency-Key header for safe retries (see the Idempotency guide). Successful creation returns 201. Publishing now. Send scheduled_for: \\\"now\\\" and the post goes to X immediately. This is irreversible, so the rules are tighter: - Idempotency-Key is REQUIRED (400 invalid_parameter without it). Reuse the same key on any retry: it never publishes twice. - title and scratchpad are rejected with 400 (a published post has no draft to organize), and Bluesky is never cross-posted. - A retry that arrives while the first attempt is still publishing returns 409 idempotency_in_flight with a Retry-After header. After that window the API checks whether the first attempt landed and replays its result instead of posting again. - The 201 carries status: \\\"sent\\\" with posted_at, x_post_id and url, and scheduled_for: null. - Advanced settings and Auto DM inherit your Default Post Settings exactly as they do for a scheduled post. - A thread that fails part way through leaves no scheduled-post record at all, so check GET /v1/posts before retrying: the parts X did accept are already live. Images attach per part: parts[].media is an array of { object_key, alt_text? } items, with object_key from POST /v1/media (uploaded bytes required first). Up to 4 images or exactly 1 GIF per part; alt_text is capped at 1,000 characters. Video is not supported yet. Advanced settings (auto_retweet, auto_delete, auto_plug, auto_dm, super_followers_only): omit a setting to inherit its Default Post Settings value from the SuperX app, send an object (or true/false for super_followers_only) to override, or send null to turn it off for this post. Exactly five settings inherit this way: auto retweet, auto delete, auto plug, auto DM, and Super Followers only. Other composer defaults (for example Bluesky cross-posting or share-with-followers) are never applied to API posts. auto_dm direct-messages the people who reply to or repost the post once it is live. Your plan caps how many posts a month may carry one (posts_with_auto_dm in GET /v1/dm/limits): when that cap stops it, the post is still created and the response carries auto_dm_skipped: true instead of failing. Reading a post back shows that an auto DM is attached but never its message text.\",\"dateModified\":\"2026-10-07T18:31:25.277Z\",\"isPartOf\":{\"@id\":\"https://docs.superx.so#website\"},\"breadcrumb\":{\"@id\":\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Scheduling\",\"item\":\"https://docs.superx.so/api-reference/scheduling/write-post-drafts-in-your-voice\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a draft or scheduled post, or publish now\",\"item\":\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now#apireference\",\"headline\":\"Create a draft or scheduled post, or publish now\",\"name\":\"Create a draft or scheduled post, or publish now\",\"description\":\"Creates a post: a draft when scheduled_for is omitted, a scheduled post otherwise. Works for your main account or any account linked to it (account_id); accounts shared with you are read-only. Supports the Idempotency-Key header for safe retries (see the Idempotency guide). Successful creation returns 201. Publishing now. Send scheduled_for: \\\"now\\\" and the post goes to X immediately. This is irreversible, so the rules are tighter: - Idempotency-Key is REQUIRED (400 invalid_parameter without it). Reuse the same key on any retry: it never publishes twice. - title and scratchpad are rejected with 400 (a published post has no draft to organize), and Bluesky is never cross-posted. - A retry that arrives while the first attempt is still publishing returns 409 idempotency_in_flight with a Retry-After header. After that window the API checks whether the first attempt landed and replays its result instead of posting again. - The 201 carries status: \\\"sent\\\" with posted_at, x_post_id and url, and scheduled_for: null. - Advanced settings and Auto DM inherit your Default Post Settings exactly as they do for a scheduled post. - A thread that fails part way through leaves no scheduled-post record at all, so check GET /v1/posts before retrying: the parts X did accept are already live. Images attach per part: parts[].media is an array of { object_key, alt_text? } items, with object_key from POST /v1/media (uploaded bytes required first). Up to 4 images or exactly 1 GIF per part; alt_text is capped at 1,000 characters. Video is not supported yet. Advanced settings (auto_retweet, auto_delete, auto_plug, auto_dm, super_followers_only): omit a setting to inherit its Default Post Settings value from the SuperX app, send an object (or true/false for super_followers_only) to override, or send null to turn it off for this post. Exactly five settings inherit this way: auto retweet, auto delete, auto plug, auto DM, and Super Followers only. Other composer defaults (for example Bluesky cross-posting or share-with-followers) are never applied to API posts. auto_dm direct-messages the people who reply to or repost the post once it is live. Your plan caps how many posts a month may carry one (posts_with_auto_dm in GET /v1/dm/limits): when that cap stops it, the post is still created and the response carries auto_dm_skipped: true instead of failing. Reading a post back shows that an auto DM is attached but never its message text.\",\"url\":\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now\",\"mainEntityOfPage\":{\"@id\":\"https://docs.superx.so/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now#webpage\"},\"dateModified\":\"2026-10-07T18:31:25.277Z\",\"publisher\":{\"@id\":\"https://docs.superx.so/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.superx.so#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SuperX\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SuperX","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Identity","pages":[{"title":"Get the key owner","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/me","href":"/api-reference/identity/get-the-key-owner"},{"title":"List your accounts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/accounts","href":"/api-reference/identity/list-your-accounts"}]},{"group":"Content","pages":[{"title":"List published posts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/posts","href":"/api-reference/content/list-published-posts"},{"title":"List replies you sent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/replies","href":"/api-reference/content/list-replies-you-sent"}]},{"group":"Analytics","pages":[{"title":"Get analytics","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/posts/analytics","href":"/api-reference/analytics/get-analytics"}]},{"group":"Scheduling","pages":[{"title":"Write post drafts in your voice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/posts/draft","href":"/api-reference/scheduling/write-post-drafts-in-your-voice"},{"title":"Rewrite a post in your voice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/posts/remix","href":"/api-reference/scheduling/rewrite-a-post-in-your-voice"},{"title":"List drafts and scheduled posts","description":"The account's drafts and scheduled posts, most recently updated first,\nso page 1 is the newest work. Use `page` to walk back through older\nones rather than raising `limit`. That ordering covers every `status`,\nnot just drafts: scheduled and sent posts come back most recently\nupdated first too.\n\nA `from` or `to` filter makes this a calendar query instead: those\nresults come back in post-time order, oldest first, whatever the\nstatus.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/scheduled-posts","href":"/api-reference/scheduling/list-drafts-and-scheduled-posts"},{"title":"Create a draft or scheduled post, or publish now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/scheduled-posts","href":"/api-reference/scheduling/create-a-draft-or-scheduled-post-or-publish-now"},{"title":"Retime queued posts in bulk","description":"Moves up to 500 queued posts to new times in ONE transaction: either\nevery move lands or none do.\n\nOnly posts in the queue move. Drafts, sent posts and error rows are\ncounted in `skipped` and are never retimed. Each `scheduled_for`\nfollows the same window as a single create: at least 60 seconds in the\nfuture, at most 18 months out.\n\nCosts one write. `Idempotency-Key` is not supported and not needed:\nre-running the same moves converges on the same result.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/scheduled-posts/bulk/retime","href":"/api-reference/scheduling/retime-queued-posts-in-bulk"},{"title":"Enable auto retweet on queued posts in bulk","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/scheduled-posts/bulk/auto-retweet","href":"/api-reference/scheduling/enable-auto-retweet-on-queued-posts-in-bulk"},{"title":"Delete queued posts in bulk","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/scheduled-posts/bulk/delete","href":"/api-reference/scheduling/delete-queued-posts-in-bulk"},{"title":"Delete a draft or scheduled post","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/scheduled-posts/{id}","href":"/api-reference/scheduling/delete-a-draft-or-scheduled-post"},{"title":"Edit a draft or scheduled post","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/scheduled-posts/{id}","href":"/api-reference/scheduling/edit-a-draft-or-scheduled-post"},{"title":"List plug templates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/plug-templates","href":"/api-reference/scheduling/list-plug-templates"}]},{"group":"Tools","pages":[{"title":"Edit one selected piece of a post","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/tools/inline-edit","href":"/api-reference/tools/edit-one-selected-piece-of-a-post"},{"title":"Rewrite a post one preset way","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/tools/rephrase","href":"/api-reference/tools/rewrite-a-post-one-preset-way"},{"title":"Check a statement against a web search","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/tools/factcheck","href":"/api-reference/tools/check-a-statement-against-a-web-search"},{"title":"Score a draft against this account's own posts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/posts/viral-score","href":"/api-reference/tools/score-a-draft-against-this-accounts-own-posts"},{"title":"Sort recent posts on a topic into Read, Pass or Not sure","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/posts/triage","href":"/api-reference/tools/sort-recent-posts-on-a-topic-into-read-pass-or-not-sure"}]},{"group":"Audience","pages":[{"title":"List replies you received","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/replies/received","href":"/api-reference/audience/list-replies-you-received"},{"title":"Read an audience list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/audience/{kind}","href":"/api-reference/audience/read-an-audience-list"},{"title":"List engaged contacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contacts","href":"/api-reference/audience/list-engaged-contacts"},{"title":"Get one contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contacts/{id}","href":"/api-reference/audience/get-one-contact"},{"title":"List one contact's replies to you","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contacts/{id}/replies","href":"/api-reference/audience/list-one-contacts-replies-to-you"},{"title":"List notes on a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contacts/{id}/notes","href":"/api-reference/audience/list-notes-on-a-contact"},{"title":"Add a note to a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contacts/{id}/notes","href":"/api-reference/audience/add-a-note-to-a-contact"},{"title":"Delete a note on a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/contacts/{id}/notes/{noteId}","href":"/api-reference/audience/delete-a-note-on-a-contact"},{"title":"Edit a note on a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/contacts/{id}/notes/{noteId}","href":"/api-reference/audience/edit-a-note-on-a-contact"}]},{"group":"Inspiration","pages":[{"title":"Search the inspiration library","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/inspiration","href":"/api-reference/inspiration/search-the-inspiration-library"},{"title":"Search the inspiration media index","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/inspiration/media","href":"/api-reference/inspiration/search-the-inspiration-media-index"}]},{"group":"Contact Lists","pages":[{"title":"List contact lists","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contact-lists","href":"/api-reference/contact-lists/list-contact-lists"},{"title":"Create a contact list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contact-lists","href":"/api-reference/contact-lists/create-a-contact-list"},{"title":"Delete a contact list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/contact-lists/{id}","href":"/api-reference/contact-lists/delete-a-contact-list"},{"title":"Rename a contact list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/contact-lists/{id}","href":"/api-reference/contact-lists/rename-a-contact-list"},{"title":"List contact list members","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contact-lists/{id}/members","href":"/api-reference/contact-lists/list-contact-list-members"},{"title":"Add a contact list member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contact-lists/{id}/members","href":"/api-reference/contact-lists/add-a-contact-list-member"},{"title":"Remove a contact list member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/contact-lists/{id}/members/{memberId}","href":"/api-reference/contact-lists/remove-a-contact-list-member"},{"title":"Add contact list members in bulk","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contact-lists/{id}/members/bulk","href":"/api-reference/contact-lists/add-contact-list-members-in-bulk"},{"title":"Remove contact list members in bulk","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contact-lists/{id}/members/bulk-delete","href":"/api-reference/contact-lists/remove-contact-list-members-in-bulk"}]},{"group":"Signals","pages":[{"title":"List signal agents","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/signals/agents","href":"/api-reference/signals/list-signal-agents"},{"title":"Create a signal agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/signals/agents","href":"/api-reference/signals/create-a-signal-agent"},{"title":"Delete a signal agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/signals/agents/{id}","href":"/api-reference/signals/delete-a-signal-agent"},{"title":"Update a signal agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/signals/agents/{id}","href":"/api-reference/signals/update-a-signal-agent"},{"title":"Add a signal to an agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/signals/agents/{id}/signals","href":"/api-reference/signals/add-a-signal-to-an-agent"},{"title":"Remove a signal from an agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/signals/agents/{id}/signals/{signalId}","href":"/api-reference/signals/remove-a-signal-from-an-agent"},{"title":"Set feedback on a lead","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/signals/leads/{id}/feedback","href":"/api-reference/signals/set-feedback-on-a-lead"},{"title":"Search for leads on X now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/signals/leads/search","href":"/api-reference/signals/search-for-leads-on-x-now"},{"title":"List signal leads","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/signals/leads","href":"/api-reference/signals/list-signal-leads"},{"title":"Suggest keyword watches","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/signals/keywords/suggest","href":"/api-reference/signals/suggest-keyword-watches"},{"title":"Expand an audience description into a rubric","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/signals/icp/expand","href":"/api-reference/signals/expand-an-audience-description-into-a-rubric"},{"title":"Build an audience profile from a website","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/signals/icp/expand-from-url","href":"/api-reference/signals/build-an-audience-profile-from-a-website"}]},{"group":"Engage","pages":[{"title":"List Engage feeds","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/engage/feeds","href":"/api-reference/engage/list-engage-feeds"},{"title":"Create an Engage feed","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/engage/feeds","href":"/api-reference/engage/create-an-engage-feed"},{"title":"Delete an Engage feed","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/engage/feeds/{id}","href":"/api-reference/engage/delete-an-engage-feed"},{"title":"Update an Engage feed","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/engage/feeds/{id}","href":"/api-reference/engage/update-an-engage-feed"},{"title":"Get posts from an Engage feed","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/engage/feeds/{id}/posts","href":"/api-reference/engage/get-posts-from-an-engage-feed"},{"title":"Get mentions of the account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/engage/mentions","href":"/api-reference/engage/get-mentions-of-the-account"},{"title":"Draft one reply to a post","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/engage/reply-draft","href":"/api-reference/engage/draft-one-reply-to-a-post"}]},{"group":"Media","pages":[{"title":"Presign an image upload","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/media","href":"/api-reference/media/presign-an-image-upload"}]},{"group":"Workers","pages":[{"title":"List Workers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/workers","href":"/api-reference/workers/list-workers"},{"title":"List Worker suggestions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/workers/suggestions","href":"/api-reference/workers/list-worker-suggestions"},{"title":"Save a suggestion as a draft","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/workers/suggestions/{id}/draft","href":"/api-reference/workers/save-a-suggestion-as-a-draft"},{"title":"Schedule a suggestion","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/workers/suggestions/{id}/schedule","href":"/api-reference/workers/schedule-a-suggestion"},{"title":"Dismiss a suggestion","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/workers/suggestions/{id}/dismiss","href":"/api-reference/workers/dismiss-a-suggestion"}]},{"group":"Context","pages":[{"title":"Get context settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/context","href":"/api-reference/context/get-context-settings"},{"title":"Update context settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/context","href":"/api-reference/context/update-context-settings"},{"title":"Replace the product list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /v1/context/products","href":"/api-reference/context/replace-the-product-list"},{"title":"Remove one product","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/context/products/{id}","href":"/api-reference/context/remove-one-product"},{"title":"Add or edit one product","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/context/products/{id}","href":"/api-reference/context/add-or-edit-one-product"},{"title":"Rebuild the generated style guide","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/context/style-guide/regenerate","href":"/api-reference/context/rebuild-the-generated-style-guide"},{"title":"Refresh a product from its page","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/context/products/{id}/scrape","href":"/api-reference/context/refresh-a-product-from-its-page"}]},{"group":"DMs","pages":[{"title":"Queue a DM campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/dm/campaigns","href":"/api-reference/dms/queue-a-dm-campaign"},{"title":"Read one DM campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/dm/campaigns/{id}","href":"/api-reference/dms/read-one-dm-campaign"},{"title":"Cancel a campaign's unsent messages","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/dm/campaigns/{id}","href":"/api-reference/dms/cancel-a-campaigns-unsent-messages"},{"title":"List the DM queue","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/dm/queue","href":"/api-reference/dms/list-the-dm-queue"},{"title":"DM allowances and usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/dm/limits","href":"/api-reference/dms/dm-allowances-and-usage"}]},{"group":"Queue","pages":[{"title":"Get queue settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/queue-settings","href":"/api-reference/queue/get-queue-settings"},{"title":"Update queue settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/queue-settings","href":"/api-reference/queue/update-queue-settings"}]},{"group":"Tags","pages":[{"title":"List tags","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/tags","href":"/api-reference/tags/list-tags"},{"title":"Create a tag","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/tags","href":"/api-reference/tags/create-a-tag"},{"title":"Delete a tag","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/tags/{id}","href":"/api-reference/tags/delete-a-tag"},{"title":"Rename or recolor a tag","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/tags/{id}","href":"/api-reference/tags/rename-or-recolor-a-tag"}]},{"group":"Articles","pages":[{"title":"List articles","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/articles","href":"/api-reference/articles/list-articles"},{"title":"Create an article draft","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/articles","href":"/api-reference/articles/create-an-article-draft"},{"title":"Get an article","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/articles/{id}","href":"/api-reference/articles/get-an-article"},{"title":"Delete an article","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/articles/{id}","href":"/api-reference/articles/delete-an-article"},{"title":"Edit an article","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/articles/{id}","href":"/api-reference/articles/edit-an-article"},{"title":"Publish an article to X now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/articles/{id}/publish","href":"/api-reference/articles/publish-an-article-to-x-now"},{"title":"Schedule or reschedule an article","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/articles/{id}/schedule","href":"/api-reference/articles/schedule-or-reschedule-an-article"},{"title":"Unschedule an article","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/articles/{id}/unschedule","href":"/api-reference/articles/unschedule-an-article"},{"title":"Generate an AI cover image","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/articles/{id}/cover","href":"/api-reference/articles/generate-an-ai-cover-image"},{"title":"List saved cover styles","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/cover-styles","href":"/api-reference/articles/list-saved-cover-styles"}]},{"group":"Datasets","pages":[{"title":"List datasets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets","href":"/api-reference/datasets/list-datasets"},{"title":"Collect an audience into a dataset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/datasets","href":"/api-reference/datasets/collect-an-audience-into-a-dataset"},{"title":"Get a dataset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets/{id}","href":"/api-reference/datasets/get-a-dataset"},{"title":"Get dataset rows","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets/{id}/rows","href":"/api-reference/datasets/get-dataset-rows"},{"title":"Export a dataset as CSV","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets/{id}/export","href":"/api-reference/datasets/export-a-dataset-as-csv"},{"title":"Add a dataset's people to a contact list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/datasets/{id}/contacts","href":"/api-reference/datasets/add-a-datasets-people-to-a-contact-list"},{"title":"Draft outreach messages onto a research dataset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/datasets/{id}/outreach-drafts","href":"/api-reference/datasets/draft-outreach-messages-onto-a-research-dataset"},{"title":"Refine a dataset by what each person wrote","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/datasets/{id}/refine","href":"/api-reference/datasets/refine-a-dataset-by-what-each-person-wrote"}]},{"group":"X Lookups","pages":[{"title":"Look up one public post live","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/x/posts/{id}","href":"/api-reference/x-lookups/look-up-one-public-post-live"},{"title":"Top replies to a public post","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/x/posts/{id}/replies","href":"/api-reference/x-lookups/top-replies-to-a-public-post"},{"title":"Look up one public profile live","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/x/users/{handle}","href":"/api-reference/x-lookups/look-up-one-public-profile-live"},{"title":"Latest posts of a public account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/x/users/{handle}/posts","href":"/api-reference/x-lookups/latest-posts-of-a-public-account"}]},{"group":"Meta","pages":[{"title":"Machine-readable quickstart","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/docs","href":"/api-reference/meta/machine-readable-quickstart"}]}]}]},"basePath":"","title":"Create a draft or scheduled post, or publish now - SuperX","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"]}