Move a scheduled post to a new firing time. Only allowed when status=queued AND scheduledAt is still in the future — once a post enters publishing or any terminal state, the window closes and the request returns 409.
The operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new scheduledAt if the queue swap succeeded. A post.rescheduled webhook fires on success, carrying both the old and new timestamps.
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
Supported platforms. tiktok posts upload to the creator's TikTok inbox as a draft that the creator confirms in the TikTok app; Direct Post is not implemented yet.
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
{
"error": {
"code": "preflight_failed",
"message": "Bluesky posts are capped at 300 graphemes; this body is 312.",
"rule": "bluesky.text.max_graphemes",
"platform": "bluesky",
"remediation": "Trim 12 graphemes, or split into a thread.",
"docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
"ruleUrl": "https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes",
"requestId": "req_01HY6X4AWBJM2K9F2PTQMRD9JQ"
}
}
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"letmepost.dev","description":"Open-source social media publishing API. Preflight validation, transparent errors, idempotency, stable platform versions.","colors":{"primary":"#2D7652","light":"#53C68C","dark":"#185838"},"logo":{"light":"https://letmepost.dev/logo.png","dark":"https://letmepost.dev/logo-dark.png","href":"https://letmepost.dev"},"favicon":"https://mintcdn.com/letmepost/QaElXW2ODd0bViHR/favicon.ico?fit=max\u0026auto=format\u0026n=QaElXW2ODd0bViHR\u0026q=85\u0026s=fe7e3a244fe9f49eaa7aae13e9faccd6","appearance":{"default":"system"},"navbar":{"links":[{"icon":"github","href":"https://github.com/letmepost/letmepost.dev","label":"GitHub"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.letmepost.dev"}},"footer":{"socials":{"github":"https://github.com/rosekamallove/letmepost.dev","x":"https://x.com/letmepostdotdev"},"links":[{"header":"Product","items":[{"label":"Landing","href":"https://letmepost.dev"},{"label":"Status","href":"https://letmepost.dev/status"},{"label":"Changelog","href":"/changelog"}]},{"header":"Resources","items":[{"label":"OpenAPI spec","href":"/api-reference/openapi.json"},{"label":"llms.txt","href":"/llms.txt"},{"label":"GitHub","href":"https://github.com/rosekamallove/letmepost.dev"}]},{"header":"Legal","items":[{"label":"Privacy","href":"https://letmepost.dev/privacy"},{"label":"Terms","href":"https://letmepost.dev/terms"},{"label":"Data deletion","href":"https://letmepost.dev/data-deletion"}]}]},"search":{"prompt":"Search docs..."},"seo":{"metatags":{"og:site_name":"letmepost.dev","og:image":"https://letmepost.dev/og-image.png","og:type":"website","twitter:card":"summary_large_image","twitter:site":"@letmepostdotdev","twitter:creator":"@letmepostdotdev","twitter:image":"https://letmepost.dev/og-image.png"},"indexing":"navigable"},"styling":{"codeblocks":"system","latex":true},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"letmepost","hasAudioNarration":false,"actualSubdomain":"letmepost","customDomains":["docs.letmepost.dev"],"gitSource":{"type":"github","owner":"letmepost","repo":"letmepost.dev","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6abf59edf4152f81f3c3672b","collectionId":"9bf4ef8b-7485-491a-8aa3-7ac318b01d1a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6abf59edf4152f81f3c3672b"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6abf59edf4152f81f3c3672b","clientVersion":"0.0.4064","searchFilterCounts":[{"language":"default","tag":"Resources","count":92},{"language":"default","tag":"Preflight rules","count":79},{"language":"default","tag":"API Reference","count":24},{"language":"default","tag":"Quickstart","count":21},{"language":"default","tag":"Pinterest","count":17},{"language":"default","tag":"Webhooks","count":17},{"language":"default","tag":"Errors","count":13},{"language":"default","tag":"Bluesky","count":13},{"language":"default","tag":"Twitter / X","count":12},{"language":"default","tag":"Instagram","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/posts/reschedule-a-queued-post","slug":"/api-reference/posts/reschedule-a-queued-post","pageMetadata":{"title":"Reschedule a queued post","description":"Move a scheduled post to a new firing time. Only allowed when `status=queued` AND `scheduledAt` is still in the future — once a post enters `publishing` or any terminal state, the window closes and the request returns `409`.\n\nThe operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new `scheduledAt` if the queue swap succeeded. A `post.rescheduled` webhook fires on success, carrying both the old and new timestamps.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/posts/{id}","href":"/api-reference/posts/reschedule-a-queued-post","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 p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Move a scheduled post to a new firing time. Only allowed when \", _jsx(_components.code, {\n children: \"status=queued\"\n }), \" AND \", _jsx(_components.code, {\n children: \"scheduledAt\"\n }), \" is still in the future — once a post enters \", _jsx(_components.code, {\n children: \"publishing\"\n }), \" or any terminal state, the window closes and the request returns \", _jsx(_components.code, {\n children: \"409\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new \", _jsx(_components.code, {\n children: \"scheduledAt\"\n }), \" if the queue swap succeeded. A \", _jsx(_components.code, {\n children: \"post.rescheduled\"\n }), \" webhook fires on success, carrying both the old and new timestamps.\"]\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":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Reschedule a queued post","description":"Move a scheduled post to a new firing time. Only allowed when `status=queued` AND `scheduledAt` is still in the future — once a post enters `publishing` or any terminal state, the window closes and the request returns `409`.\n\nThe operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new `scheduledAt` if the queue swap succeeded. A `post.rescheduled` webhook fires on success, carrying both the old and new timestamps.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/posts/{id}","href":"/api-reference/posts/reschedule-a-queued-post","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Posts"],"summary":"Reschedule a queued post","description":"Move a scheduled post to a new firing time. Only allowed when `status=queued` AND `scheduledAt` is still in the future — once a post enters `publishing` or any terminal state, the window closes and the request returns `409`.\n\nThe operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new `scheduledAt` if the queue swap succeeded. A `post.rescheduled` webhook fires on success, carrying both the old and new timestamps.","security":["83eebc40-579b-449b-9657-d5689132496f"],"parameters":["e6b80522-3343-43cb-8d77-8811c2d447ff"],"requestBody":"eb79b359-6954-4eb6-8401-945e5ba0a7fc","responses":{"200":"069bd070-b332-4516-9775-d467495b9eec","400":"52e1e016-f8e1-45b7-8767-27e64f11dac9","401":"ba5621d8-a488-4465-9cfc-f925a01d2ff8","404":"429f5607-882e-4a25-b23c-eee8c7372afb","409":"04d97a4b-522d-4519-a409-7a31f5452128","429":"bf7f62a9-863c-4988-b06d-6772da823d86"},"method":"patch","type":"path","servers":["5b71789d-31ea-44f1-9f44-c26099cbbb32"],"path":"/v1/posts/{id}","baseUrlOptions":["https://api.letmepost.dev"],"title":"Reschedule a queued post","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"e6b80522-3343-43cb-8d77-8811c2d447ff":{"name":"id","in":"path","required":true,"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["scheduledAt"],"properties":{"scheduledAt":{"type":"string","format":"date-time","description":"ISO-8601 timestamp with timezone. Must be at least 1 second in the future.","isRequired":true,"uniqueKey":"scheduledAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"scheduledAt":"2023-11-07T05:31:56Z"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"069bd070-b332-4516-9775-d467495b9eec":{"description":"Reschedule applied; row reflects the new `scheduledAt`.","headers":{"X-RateLimit-Limit":{"description":"Per-route request ceiling for this endpoint. A static contract — sliding-window remaining/reset live on the IETF-draft `RateLimit-*` headers (no prefix) when enforcement is active.","schema":{"type":"integer","minimum":1,"example":1000}},"X-Request-Id":{"description":"Per-request correlation id, also echoed inside the error envelope as `error.requestId`.","schema":{"type":"string","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}},"content":{"application/json":{"schema":{"type":"object","description":"A single per-target post row from the post log.","required":["id","profileId","accountId","account","platform","status","text","mediaRefs","scheduledAt","publishedAt","platformUri","platformCid","createdAt","updatedAt"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"profileId":{"type":"string","isRequired":true,"uniqueKey":"profileId","typeLabel":"string"},"accountId":{"type":"string","isRequired":true,"uniqueKey":"accountId","typeLabel":"string"},"account":{"type":"object","required":["id","platform","platformAccountId","displayName"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"account.id","typeLabel":"string"},"platform":{"type":"string","enum":["bluesky","facebook","instagram","linkedin","pinterest","threads","tiktok","twitter"],"description":"Supported platforms. `tiktok` posts upload to the creator's TikTok inbox as a draft that the creator confirms in the TikTok app; Direct Post is not implemented yet.","isRequired":true,"uniqueKey":"account.platform","typeLabel":"enum\u003cstring>"},"platformAccountId":{"type":"string","isRequired":true,"uniqueKey":"account.platformAccountId","typeLabel":"string"},"displayName":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"account.displayName.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"account.displayName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"account.displayName","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"account","typeLabel":"object"},"platform":{"type":"string","enum":["bluesky","facebook","instagram","linkedin","pinterest","threads","tiktok","twitter"],"description":"Supported platforms. `tiktok` posts upload to the creator's TikTok inbox as a draft that the creator confirms in the TikTok app; Direct Post is not implemented yet.","isRequired":true,"uniqueKey":"platform","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["queued","validated","publishing","published","failed","rejected","canceled"],"description":"Lifecycle state of a single per-target post row. `canceled` is the terminal state reached via `DELETE /v1/posts/{id}` on a queued scheduled post.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"text":{"type":"string","isRequired":true,"uniqueKey":"text","typeLabel":"string"},"mediaRefs":{"type":"array","items":{"oneOf":[{}],"uniqueKey":"mediaRefs.items.[INDEX]","typeLabel":"any"},"isRequired":true,"uniqueKey":"mediaRefs","typeLabel":"any[]"},"scheduledAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"scheduledAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"scheduledAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"scheduledAt","typeLabel":"string\u003cdate-time> | null"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"publishedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"publishedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"publishedAt","typeLabel":"string\u003cdate-time> | null"},"platformUri":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"platformUri.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"platformUri.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"platformUri","typeLabel":"string | null"},"platformCid":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"platformCid.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"platformCid.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"platformCid","typeLabel":"string | null"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"updatedAt","typeLabel":"string\u003cdate-time>"},"error":{"oneOf":[{}],"uniqueKey":"error","typeLabel":"any"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"\u003cstring>","profileId":"\u003cstring>","accountId":"\u003cstring>","account":{"id":"\u003cstring>","platform":"bluesky","platformAccountId":"\u003cstring>","displayName":"\u003cstring>"},"platform":"bluesky","status":"queued","text":"\u003cstring>","mediaRefs":["\u003cunknown>"],"scheduledAt":"2023-11-07T05:31:56Z","publishedAt":"2023-11-07T05:31:56Z","platformUri":"\u003cstring>","platformCid":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","error":"\u003cunknown>"}}},"exampleType":"generated"}},"exampleType":"generated"},"52e1e016-f8e1-45b7-8767-27e64f11dac9":{"description":"`validation_failed` — request body or query parameters didn't match the schema. Rules surfaced include `body.json`, `targets.required`, `targets.max`, `mode_conflict`, `targets.options.platform_mismatch`, `targets.account.platform_mismatch`, `target.account.not_connected`, `target.account.ambiguous`, `scheduledAt.future`, `scheduledAt.no_first_comment`, `scheduledAt.no_bluesky_reply`.","headers":{"X-RateLimit-Limit":{"description":"Per-route request ceiling for this endpoint. A static contract — sliding-window remaining/reset live on the IETF-draft `RateLimit-*` headers (no prefix) when enforcement is active.","schema":{"type":"integer","minimum":1,"example":1000}},"X-Request-Id":{"description":"Per-request correlation id, also echoed inside the error envelope as `error.requestId`.","schema":{"type":"string","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}},"content":{"application/json":{"schema":{"type":"object","description":"Stable error envelope. Every non-2xx response uses this shape. `docUrl` is always present; `ruleUrl` is present whenever `rule` is set.","required":["error"],"properties":{"error":{"type":"object","required":["code","message","docUrl","requestId"],"properties":{"code":{"type":"string","enum":["validation_failed","preflight_failed","platform_auth_failed","platform_rejected","platform_unavailable","platform_not_enabled","internal_error","unauthenticated","unauthorized","not_found","idempotency_conflict","rate_limited","quota_exceeded"],"description":"Canonical error codes. See https://letmepost.dev/docs/errors/ for per-code documentation.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable summary. Stable enough to log, not stable enough to switch on — switch on `code` and `rule`.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docUrl":{"type":"string","format":"uri","description":"Link to the docs page for this `code`.","example":"https://docs.letmepost.dev/errors/preflight_failed","isRequired":true,"uniqueKey":"error.docUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","description":"Per-request correlation id, also echoed in the `X-Request-Id` response header.","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"rule":{"type":"string","description":"The specific preflight rule or validator that failed (e.g. `bluesky.text.max_graphemes`, `targets.options.platform_mismatch`).","example":"bluesky.text.max_graphemes","uniqueKey":"error.rule","typeLabel":"string"},"platform":{"type":"string","enum":["bluesky","facebook","instagram","linkedin","pinterest","threads","tiktok","twitter"],"description":"Supported platforms. `tiktok` posts upload to the creator's TikTok inbox as a draft that the creator confirms in the TikTok app; Direct Post is not implemented yet.","uniqueKey":"error.platform","typeLabel":"enum\u003cstring>"},"platformVersion":{"type":"string","description":"Pinned upstream API version the call targeted (e.g. `graph-v23.0` for Facebook).","uniqueKey":"error.platformVersion","typeLabel":"string"},"platformResponse":{"description":"Raw upstream platform response, when available.","uniqueKey":"error.platformResponse","typeLabel":"any"},"remediation":{"type":"string","description":"Actionable next step for the caller — short, imperative.","uniqueKey":"error.remediation","typeLabel":"string"},"ruleUrl":{"type":"string","format":"uri","description":"Link to the docs page for this preflight `rule`. Present whenever `rule` is set.","example":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","uniqueKey":"error.ruleUrl","typeLabel":"string\u003curi>"},"traceId":{"type":"string","description":"OpenTelemetry trace id, when tracing is active.","uniqueKey":"error.traceId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}}},"exampleType":"generated"}},"exampleType":"generated"},"ba5621d8-a488-4465-9cfc-f925a01d2ff8":{"description":"`unauthenticated` — missing or invalid Bearer key.","headers":{"X-RateLimit-Limit":{"description":"Per-route request ceiling for this endpoint. A static contract — sliding-window remaining/reset live on the IETF-draft `RateLimit-*` headers (no prefix) when enforcement is active.","schema":{"type":"integer","minimum":1,"example":1000}},"X-Request-Id":{"description":"Per-request correlation id, also echoed inside the error envelope as `error.requestId`.","schema":{"type":"string","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}},"content":{"application/json":{"schema":{"type":"object","description":"Stable error envelope. Every non-2xx response uses this shape. `docUrl` is always present; `ruleUrl` is present whenever `rule` is set.","required":["error"],"properties":{"error":{"type":"object","required":["code","message","docUrl","requestId"],"properties":{"code":{"type":"string","enum":["validation_failed","preflight_failed","platform_auth_failed","platform_rejected","platform_unavailable","platform_not_enabled","internal_error","unauthenticated","unauthorized","not_found","idempotency_conflict","rate_limited","quota_exceeded"],"description":"Canonical error codes. See https://letmepost.dev/docs/errors/ for per-code documentation.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable summary. Stable enough to log, not stable enough to switch on — switch on `code` and `rule`.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docUrl":{"type":"string","format":"uri","description":"Link to the docs page for this `code`.","example":"https://docs.letmepost.dev/errors/preflight_failed","isRequired":true,"uniqueKey":"error.docUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","description":"Per-request correlation id, also echoed in the `X-Request-Id` response header.","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"rule":{"type":"string","description":"The specific preflight rule or validator that failed (e.g. `bluesky.text.max_graphemes`, `targets.options.platform_mismatch`).","example":"bluesky.text.max_graphemes","uniqueKey":"error.rule","typeLabel":"string"},"platform":{"type":"string","enum":["bluesky","facebook","instagram","linkedin","pinterest","threads","tiktok","twitter"],"description":"Supported platforms. `tiktok` posts upload to the creator's TikTok inbox as a draft that the creator confirms in the TikTok app; Direct Post is not implemented yet.","uniqueKey":"error.platform","typeLabel":"enum\u003cstring>"},"platformVersion":{"type":"string","description":"Pinned upstream API version the call targeted (e.g. `graph-v23.0` for Facebook).","uniqueKey":"error.platformVersion","typeLabel":"string"},"platformResponse":{"description":"Raw upstream platform response, when available.","uniqueKey":"error.platformResponse","typeLabel":"any"},"remediation":{"type":"string","description":"Actionable next step for the caller — short, imperative.","uniqueKey":"error.remediation","typeLabel":"string"},"ruleUrl":{"type":"string","format":"uri","description":"Link to the docs page for this preflight `rule`. Present whenever `rule` is set.","example":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","uniqueKey":"error.ruleUrl","typeLabel":"string\u003curi>"},"traceId":{"type":"string","description":"OpenTelemetry trace id, when tracing is active.","uniqueKey":"error.traceId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}}},"exampleType":"generated"}},"exampleType":"generated"},"429f5607-882e-4a25-b23c-eee8c7372afb":{"description":"`not_found` — the resource does not exist in the caller's organization (or, for profile-scoped keys, in the caller's profile).","headers":{"X-RateLimit-Limit":{"description":"Per-route request ceiling for this endpoint. A static contract — sliding-window remaining/reset live on the IETF-draft `RateLimit-*` headers (no prefix) when enforcement is active.","schema":{"type":"integer","minimum":1,"example":1000}},"X-Request-Id":{"description":"Per-request correlation id, also echoed inside the error envelope as `error.requestId`.","schema":{"type":"string","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}},"content":{"application/json":{"schema":{"type":"object","description":"Stable error envelope. Every non-2xx response uses this shape. `docUrl` is always present; `ruleUrl` is present whenever `rule` is set.","required":["error"],"properties":{"error":{"type":"object","required":["code","message","docUrl","requestId"],"properties":{"code":{"type":"string","enum":["validation_failed","preflight_failed","platform_auth_failed","platform_rejected","platform_unavailable","platform_not_enabled","internal_error","unauthenticated","unauthorized","not_found","idempotency_conflict","rate_limited","quota_exceeded"],"description":"Canonical error codes. See https://letmepost.dev/docs/errors/ for per-code documentation.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable summary. Stable enough to log, not stable enough to switch on — switch on `code` and `rule`.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docUrl":{"type":"string","format":"uri","description":"Link to the docs page for this `code`.","example":"https://docs.letmepost.dev/errors/preflight_failed","isRequired":true,"uniqueKey":"error.docUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","description":"Per-request correlation id, also echoed in the `X-Request-Id` response header.","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"rule":{"type":"string","description":"The specific preflight rule or validator that failed (e.g. `bluesky.text.max_graphemes`, `targets.options.platform_mismatch`).","example":"bluesky.text.max_graphemes","uniqueKey":"error.rule","typeLabel":"string"},"platform":{"type":"string","enum":["bluesky","facebook","instagram","linkedin","pinterest","threads","tiktok","twitter"],"description":"Supported platforms. `tiktok` posts upload to the creator's TikTok inbox as a draft that the creator confirms in the TikTok app; Direct Post is not implemented yet.","uniqueKey":"error.platform","typeLabel":"enum\u003cstring>"},"platformVersion":{"type":"string","description":"Pinned upstream API version the call targeted (e.g. `graph-v23.0` for Facebook).","uniqueKey":"error.platformVersion","typeLabel":"string"},"platformResponse":{"description":"Raw upstream platform response, when available.","uniqueKey":"error.platformResponse","typeLabel":"any"},"remediation":{"type":"string","description":"Actionable next step for the caller — short, imperative.","uniqueKey":"error.remediation","typeLabel":"string"},"ruleUrl":{"type":"string","format":"uri","description":"Link to the docs page for this preflight `rule`. Present whenever `rule` is set.","example":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","uniqueKey":"error.ruleUrl","typeLabel":"string\u003curi>"},"traceId":{"type":"string","description":"OpenTelemetry trace id, when tracing is active.","uniqueKey":"error.traceId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}}},"exampleType":"generated"}},"exampleType":"generated"},"04d97a4b-522d-4519-a409-7a31f5452128":{"description":"Post is no longer in the modifiable window (status != `queued` or `scheduledAt` already passed). Error rule: `post.status` or `post.scheduledAt.window`.","content":{"application/json":{"schema":{"type":"object","description":"Stable error envelope. Every non-2xx response uses this shape. `docUrl` is always present; `ruleUrl` is present whenever `rule` is set.","required":["error"],"properties":{"error":{"type":"object","required":["code","message","docUrl","requestId"],"properties":{"code":{"type":"string","enum":["validation_failed","preflight_failed","platform_auth_failed","platform_rejected","platform_unavailable","platform_not_enabled","internal_error","unauthenticated","unauthorized","not_found","idempotency_conflict","rate_limited","quota_exceeded"],"description":"Canonical error codes. See https://letmepost.dev/docs/errors/ for per-code documentation.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable summary. Stable enough to log, not stable enough to switch on — switch on `code` and `rule`.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docUrl":{"type":"string","format":"uri","description":"Link to the docs page for this `code`.","example":"https://docs.letmepost.dev/errors/preflight_failed","isRequired":true,"uniqueKey":"error.docUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","description":"Per-request correlation id, also echoed in the `X-Request-Id` response header.","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"rule":{"type":"string","description":"The specific preflight rule or validator that failed (e.g. `bluesky.text.max_graphemes`, `targets.options.platform_mismatch`).","example":"bluesky.text.max_graphemes","uniqueKey":"error.rule","typeLabel":"string"},"platform":{"type":"string","enum":["bluesky","facebook","instagram","linkedin","pinterest","threads","tiktok","twitter"],"description":"Supported platforms. `tiktok` posts upload to the creator's TikTok inbox as a draft that the creator confirms in the TikTok app; Direct Post is not implemented yet.","uniqueKey":"error.platform","typeLabel":"enum\u003cstring>"},"platformVersion":{"type":"string","description":"Pinned upstream API version the call targeted (e.g. `graph-v23.0` for Facebook).","uniqueKey":"error.platformVersion","typeLabel":"string"},"platformResponse":{"description":"Raw upstream platform response, when available.","uniqueKey":"error.platformResponse","typeLabel":"any"},"remediation":{"type":"string","description":"Actionable next step for the caller — short, imperative.","uniqueKey":"error.remediation","typeLabel":"string"},"ruleUrl":{"type":"string","format":"uri","description":"Link to the docs page for this preflight `rule`. Present whenever `rule` is set.","example":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","uniqueKey":"error.ruleUrl","typeLabel":"string\u003curi>"},"traceId":{"type":"string","description":"OpenTelemetry trace id, when tracing is active.","uniqueKey":"error.traceId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}}},"exampleType":"generated"}},"exampleType":"generated"},"bf7f62a9-863c-4988-b06d-6772da823d86":{"description":"`rate_limited` — too many requests. Inspect `X-RateLimit-Limit` (static ceiling) and the IETF-draft `RateLimit-*` headers (sliding-window remaining/reset) before retrying.","headers":{"X-RateLimit-Limit":{"description":"Per-route request ceiling for this endpoint. A static contract — sliding-window remaining/reset live on the IETF-draft `RateLimit-*` headers (no prefix) when enforcement is active.","schema":{"type":"integer","minimum":1,"example":1000}},"X-Request-Id":{"description":"Per-request correlation id, also echoed inside the error envelope as `error.requestId`.","schema":{"type":"string","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}},"content":{"application/json":{"schema":{"type":"object","description":"Stable error envelope. Every non-2xx response uses this shape. `docUrl` is always present; `ruleUrl` is present whenever `rule` is set.","required":["error"],"properties":{"error":{"type":"object","required":["code","message","docUrl","requestId"],"properties":{"code":{"type":"string","enum":["validation_failed","preflight_failed","platform_auth_failed","platform_rejected","platform_unavailable","platform_not_enabled","internal_error","unauthenticated","unauthorized","not_found","idempotency_conflict","rate_limited","quota_exceeded"],"description":"Canonical error codes. See https://letmepost.dev/docs/errors/ for per-code documentation.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable summary. Stable enough to log, not stable enough to switch on — switch on `code` and `rule`.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docUrl":{"type":"string","format":"uri","description":"Link to the docs page for this `code`.","example":"https://docs.letmepost.dev/errors/preflight_failed","isRequired":true,"uniqueKey":"error.docUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","description":"Per-request correlation id, also echoed in the `X-Request-Id` response header.","example":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"rule":{"type":"string","description":"The specific preflight rule or validator that failed (e.g. `bluesky.text.max_graphemes`, `targets.options.platform_mismatch`).","example":"bluesky.text.max_graphemes","uniqueKey":"error.rule","typeLabel":"string"},"platform":{"type":"string","enum":["bluesky","facebook","instagram","linkedin","pinterest","threads","tiktok","twitter"],"description":"Supported platforms. `tiktok` posts upload to the creator's TikTok inbox as a draft that the creator confirms in the TikTok app; Direct Post is not implemented yet.","uniqueKey":"error.platform","typeLabel":"enum\u003cstring>"},"platformVersion":{"type":"string","description":"Pinned upstream API version the call targeted (e.g. `graph-v23.0` for Facebook).","uniqueKey":"error.platformVersion","typeLabel":"string"},"platformResponse":{"description":"Raw upstream platform response, when available.","uniqueKey":"error.platformResponse","typeLabel":"any"},"remediation":{"type":"string","description":"Actionable next step for the caller — short, imperative.","uniqueKey":"error.remediation","typeLabel":"string"},"ruleUrl":{"type":"string","format":"uri","description":"Link to the docs page for this preflight `rule`. Present whenever `rule` is set.","example":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","uniqueKey":"error.ruleUrl","typeLabel":"string\u003curi>"},"traceId":{"type":"string","description":"OpenTelemetry trace id, when tracing is active.","uniqueKey":"error.traceId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"preflight_failed","message":"Bluesky posts are capped at 300 graphemes; this body is 312.","rule":"bluesky.text.max_graphemes","platform":"bluesky","remediation":"Trim 12 graphemes, or split into a thread.","docUrl":"https://docs.letmepost.dev/errors/preflight_failed","ruleUrl":"https://docs.letmepost.dev/preflight/bluesky-text-max_graphemes","requestId":"req_01HY6X4AWBJM2K9F2PTQMRD9JQ"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"83eebc40-579b-449b-9657-d5689132496f":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"lmp_live_… or lmp_test_…","description":"Mint an API key in the dashboard. See https://letmepost.dev/docs/authentication/.","scopes":[]}}},"servers":{"5b71789d-31ea-44f1-9f44-c26099cbbb32":{"url":"https://api.letmepost.dev","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"lmp_live_… or lmp_test_…","description":"Mint an API key in the dashboard. See https://letmepost.dev/docs/authentication/.","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Mint an API key in the dashboard. See https://letmepost.dev/docs/authentication/.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearer","name":"Authorization"}],"title":"bearer"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"letmepost","siteName":"letmepost.dev","title":"Reschedule a queued post - letmepost.dev","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-02T06:23:49.946Z","originalFileLocation":"api-reference/posts/reschedule-a-queued-post.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=\"Move a scheduled post to a new firing time. Only allowed when status=queued AND scheduledAt is still in the future — once a post enters publishing or any terminal state, the window closes and the request returns 409. The operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new scheduledAt if the queue swap succeeded. A post.rescheduled webhook fires on success, carrying both the old and new timestamps.\">\u003cmeta data-mint-head name=\"application-name\" content=\"letmepost.dev\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/letmepost/jukYb3Pk2kyHHam0/_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/letmepost/jukYb3Pk2kyHHam0/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/letmepost/jukYb3Pk2kyHHam0/_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/letmepost/jukYb3Pk2kyHHam0/_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/letmepost/jukYb3Pk2kyHHam0/_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/letmepost/jukYb3Pk2kyHHam0/_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/letmepost/jukYb3Pk2kyHHam0/_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/letmepost/jukYb3Pk2kyHHam0/_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/letmepost/jukYb3Pk2kyHHam0/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Reschedule a queued post - letmepost.dev\">\u003cmeta data-mint-head property=\"og:description\" content=\"Move a scheduled post to a new firing time. Only allowed when status=queued AND scheduledAt is still in the future — once a post enters publishing or any terminal state, the window closes and the request returns 409. The operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new scheduledAt if the queue swap succeeded. A post.rescheduled webhook fires on success, carrying both the old and new timestamps.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"letmepost.dev\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://letmepost.dev/og-image.png\">\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=\"Reschedule a queued post - letmepost.dev\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Move a scheduled post to a new firing time. Only allowed when status=queued AND scheduledAt is still in the future — once a post enters publishing or any terminal state, the window closes and the request returns 409. The operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new scheduledAt if the queue swap succeeded. A post.rescheduled webhook fires on success, carrying both the old and new timestamps.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://letmepost.dev/og-image.png\">\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/letmepost/jukYb3Pk2kyHHam0/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"letmepost.dev\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2D7652\">\u003cmeta data-mint-head name=\"twitter:creator\" content=\"@letmepostdotdev\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/posts/reschedule-a-queued-post.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.letmepost.dev/#organization\",\"name\":\"letmepost.dev\",\"url\":\"https://docs.letmepost.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://letmepost.dev/logo.png\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.letmepost.dev#website\",\"name\":\"letmepost.dev\",\"url\":\"https://docs.letmepost.dev\",\"publisher\":{\"@id\":\"https://docs.letmepost.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post#webpage\",\"url\":\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post\",\"name\":\"Reschedule a queued post\",\"description\":\"Move a scheduled post to a new firing time. Only allowed when status=queued AND scheduledAt is still in the future — once a post enters publishing or any terminal state, the window closes and the request returns 409. The operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new scheduledAt if the queue swap succeeded. A post.rescheduled webhook fires on success, carrying both the old and new timestamps.\",\"dateModified\":\"2026-10-02T06:23:49.946Z\",\"isPartOf\":{\"@id\":\"https://docs.letmepost.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Posts\",\"item\":\"https://docs.letmepost.dev/api-reference/posts/list-posts-post-log\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reschedule a queued post\",\"item\":\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post#apireference\",\"headline\":\"Reschedule a queued post\",\"name\":\"Reschedule a queued post\",\"description\":\"Move a scheduled post to a new firing time. Only allowed when status=queued AND scheduledAt is still in the future — once a post enters publishing or any terminal state, the window closes and the request returns 409. The operation is atomic: the API replaces the BullMQ job (removes the old delayed job, enqueues a new one at the updated delay) and only persists the new scheduledAt if the queue swap succeeded. A post.rescheduled webhook fires on success, carrying both the old and new timestamps.\",\"url\":\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post\",\"mainEntityOfPage\":{\"@id\":\"https://docs.letmepost.dev/api-reference/posts/reschedule-a-queued-post#webpage\"},\"image\":\"https://letmepost.dev/og-image.png\",\"dateModified\":\"2026-10-02T06:23:49.946Z\",\"publisher\":{\"@id\":\"https://docs.letmepost.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.letmepost.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"letmepost.dev\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"letmepost.dev","nav":{"global":null,"tabs":[{"tab":"Quickstart","icon":"rocket","pages":[{"title":"Quickstart","href":"/quickstart"}]},{"tab":"Platforms","icon":"layer-group","pages":[{"title":"Platforms","href":"/platforms-overview"}]},{"tab":"Webhooks","icon":"webhook","pages":[{"title":"Webhooks","href":"/webhooks"}]},{"tab":"API Reference","icon":"brackets-curly","groups":[{"group":"Posts","pages":[{"title":"List posts (post log)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/posts","href":"/api-reference/posts/list-posts-post-log"},{"title":"Publish or schedule a multi-target post","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/posts","href":"/api-reference/posts/publish-or-schedule-a-multi-target-post"},{"title":"Fetch a single post with its publish attempts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/posts/{id}","href":"/api-reference/posts/fetch-a-single-post-with-its-publish-attempts"},{"title":"Cancel a queued scheduled post","description":"Cancel a scheduled post before it fires. Only allowed when `status=queued` AND `scheduledAt` is still in the future — same window as `PATCH`. Removes the BullMQ job and transitions the row to `status=canceled`. A `post.canceled` webhook fires on success.\n\nIf a worker is already processing the job when cancellation lands, the worker's conditional `UPDATE … WHERE status IN ('queued','validated')` short-circuits and the publish never happens.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/posts/{id}","href":"/api-reference/posts/cancel-a-queued-scheduled-post"},{"title":"Reschedule a queued post","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/posts/{id}","href":"/api-reference/posts/reschedule-a-queued-post"}]},{"group":"Media","pages":[{"title":"List uploaded media","description":"Cursor-paginated. Scoped to the caller's organization, and (when the key is profile-scoped) to that profile. Org-wide keys may narrow with `?profileId=`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/media","href":"/api-reference/media/list-uploaded-media"},{"title":"Upload media (multipart)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/media","href":"/api-reference/media/upload-media-multipart"}]},{"group":"Accounts","pages":[{"title":"List connected accounts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/accounts","href":"/api-reference/accounts/list-connected-accounts"},{"title":"Fetch a connected account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/accounts/{id}","href":"/api-reference/accounts/fetch-a-connected-account"},{"title":"Disconnect (hard delete)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/accounts/{id}","href":"/api-reference/accounts/disconnect-hard-delete"},{"title":"Start a connect flow","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/accounts/connect/{platform}","href":"/api-reference/accounts/start-a-connect-flow"},{"title":"Finish a connect flow","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/accounts/connect/{platform}/complete","href":"/api-reference/accounts/finish-a-connect-flow"},{"title":"List Pinterest boards on a connected account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/accounts/{id}/pinterest/boards","href":"/api-reference/accounts/list-pinterest-boards-on-a-connected-account"},{"title":"Create a Pinterest board","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/accounts/{id}/pinterest/boards","href":"/api-reference/accounts/create-a-pinterest-board"},{"title":"Set the default Pinterest board for publishes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/accounts/{id}/pinterest/default-board","href":"/api-reference/accounts/set-the-default-pinterest-board-for-publishes"}]},{"group":"API Keys","pages":[{"title":"List API keys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/api-keys","href":"/api-reference/api-keys/list-api-keys"},{"title":"Mint an API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/api-keys","href":"/api-reference/api-keys/mint-an-api-key"},{"title":"Revoke an API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/api-keys/{id}","href":"/api-reference/api-keys/revoke-an-api-key"}]},{"group":"Webhooks","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/webhook-endpoints","href":"/api-reference/webhooks/list-webhook-endpoints"},{"title":"Register a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/webhook-endpoints","href":"/api-reference/webhooks/register-a-webhook-endpoint"},{"title":"Fetch a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/webhook-endpoints/{id}","href":"/api-reference/webhooks/fetch-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/webhook-endpoints/{id}","href":"/api-reference/webhooks/delete-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/webhook-endpoints/{id}","href":"/api-reference/webhooks/update-a-webhook-endpoint"},{"title":"Send a synthetic test delivery","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/webhook-endpoints/{id}/test","href":"/api-reference/webhooks/send-a-synthetic-test-delivery"}]}]},{"tab":"Resources","icon":"book","pages":[{"title":"Resources","href":"/errors/validation_failed"}]}]},"basePath":"","title":"Reschedule a queued post - letmepost.dev","buildId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","deploymentId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-hfTk6MZX.js","utils-Bfp7HcY4.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D8dSW7yV.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CFgQXcZO.js","snippetPresets-dMW1-pV3.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-BsZAA8xk.js","ApiExamples-DyrCOido.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Bwwdcyh3.js","shallow-drVXTg79.js","getApiPlaygroundDisplay-GMPxUzWV.js","CodeSnippet-wTmV0wP6.js","CodeSnippets-D_QxCJEq.js","getPastedJson-Dev-X0Xy.js","icon-7L2WL0jD.js","MethodPill-Ble59Dl_.js","DuplicateIcon-r-98uLGh.js","createIcon-DaFzipjW.js","DynamicMarkdown-Jk8YAWGN.js","SectionHeading-nLgrCDOg.js","axios-vUo_bRtp.js","Markdown-_QGow1Wo.js","clsx-v8ssfMzu.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CjboTi0T.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DkAyo-p5.js"]}