Every API here is available over the APIs.io API and to AI agents over MCP.
{"openapi":"3.0.3","info":{"title":"AdaptlyPost Public API","version":"1.0.0","description":"REST API for creating, scheduling, and managing social media posts across Facebook, Instagram, Threads, TikTok, X (Twitter), Bluesky, Mastodon, LinkedIn, Pinterest, YouTube, Google Business Profile, Tumblr, WordPress and Telegram. Register webhooks to receive `post.published`, `post.partially_failed`, `post.failed`, `post.scheduled`, `account.unauthorized`, `image.completed` and `image.failed` events. Read post performance through the `/analytics/*` endpoints: views, likes, comments, shares, followers and engagement rate per workspace, per platform, per day and per post, with a comparison against the previous window of the same length. Connecting an account imports its posts from the last 180 days, and analytics are kept from then on for as long as the account stays connected, so any date range in that history can be queried. A post keeps refreshing for 180 days after it is published and then holds its last captured numbers. Refreshes run on a schedule; `POST /analytics/sync` asks for one now. Webhook deliveries are signed: the `x-adaptly-signature` header contains `sha256=HMAC_SHA256(secret, \"{x-adaptly-timestamp}.{rawBody}\")`. Every response carries the RFC 9331 rate-limit fields so a client can pace itself instead of discovering the limit through a 429: `RateLimit-Policy`, `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset`, the seconds until the window rolls over. A 429 adds `Retry-After` with the same number of seconds. Limits are counted per API key."},"servers":[{"url":"https://post.adaptlypost.com/post/api/v1"}],"security":[{"bearerAuth":[]}],"paths":{"/me":{"get":{"operationId":"getMe","summary":"Describe the calling key","tags":["Account"],"responses":{"200":{"description":"The calling key, its role and its permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Open to every valid key, whatever its role, so an agent can find out what it may do before it tries.","parameters":[{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}]}},"/workspaces":{"get":{"operationId":"listWorkspaces","summary":"List the workspaces the caller can act in","description":"An OAuth sign-in reaches every workspace its member belongs to, across organizations; an API key reaches only its own. Send a returned `id` in the `X-Workspace-Id` header to act in that workspace. `current` marks the workspace this call landed in. Open to every valid key, whatever its role, so an agent can find out what it may do before it tries.","tags":["Account"],"responses":{"200":{"description":"The reachable workspaces","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceList"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}]}},"/social-posts":{"post":{"operationId":"createPost","summary":"Create a post (immediate, scheduled, or draft)","description":"A draft (`saveAsDraft: true`) needs only `posts.draft`. A post with a future `scheduledAt` also needs `posts.schedule`, and a post that publishes now also needs `posts.publish`; without it the call answers 403 `permission_denied`. Requires the `posts.draft` permission.","tags":["Posts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialPostRequest"}}}},"responses":{"201":{"description":"Post created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostResponse"}}}},"400":{"description":"Validation error. When the post itself is invalid, `code` is `post_validation_failed` and `issues` lists every problem found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.draft`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}]},"get":{"operationId":"listPosts","summary":"List posts","tags":["Posts"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"sortOrder","in":"query","schema":{"type":"string","enum":["NEWEST","OLDEST"]}},{"name":"statuses","in":"query","schema":{"type":"array","items":{"type":"string","enum":["DRAFT","SCHEDULED","PENDING","PUBLISHING","COMPLETED","PARTIAL_FAILURE","FAILED"]}},"explode":true,"description":"Filter by status"},{"name":"platforms","in":"query","schema":{"type":"array","items":{"type":"string","enum":["FACEBOOK","INSTAGRAM","THREADS","TIKTOK","TWITTER","BLUESKY","LINKEDIN","PINTEREST","YOUTUBE","MASTODON","TELEGRAM","GOOGLE_BUSINESS","TUMBLR","WORDPRESS"]}},"explode":true,"description":"Posts targeting any of these platforms"},{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"responses":{"200":{"description":"Paginated posts","content":{"application/json":{"schema":{"type":"object","properties":{"posts":{"type":"array","items":{"$ref":"#/components/schemas/Post"}},"total":{"type":"integer"},"hasMore":{"type":"boolean"}}}}}},"400":{"description":"Unknown query parameter or invalid filter value. The message names the offending parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.read`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Requires the `posts.read` permission."}},"/social-posts/validate":{"post":{"operationId":"validatePost","summary":"Dry-run a post without creating it","description":"Takes the same body as `POST /social-posts` and runs every check the create call runs, plus the ones that usually fail only at publish time (TikTok creator limits, YouTube upload quota, expired tokens, Pinterest boards, X credits), without creating a post, uploading media or writing anything. Always answers 200 with a report: `valid` is false when any issue has severity `ERROR`. Issues tied to one account are listed under that account in `accounts`; the rest are in `issues`. `notChecked` lists what only the platform can decide at publish time, so `valid: true` is not a guarantee. The report also names the permissions creating the post would need, and a missing one shows up as a `PERMISSION_DENIED` issue. Requires the `posts.draft` permission.","tags":["Posts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialPostRequest"}}}},"responses":{"200":{"description":"Validation report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostValidationReport"}}}},"400":{"description":"Malformed request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.draft`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}]}},"/social-posts/bulk/validate":{"post":{"operationId":"validateBulkPosts","summary":"Dry-run a bulk schedule without creating posts","description":"Takes the same body as `POST /social-posts/bulk` and answers with one validation report per item, in request order. Requires the `posts.draft` permission.","tags":["Posts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkSchedulePostsRequest"}}}},"responses":{"200":{"description":"Validation report per item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkPostValidationReport"}}}},"400":{"description":"Malformed request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.draft`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}]}},"/social-posts/bulk":{"post":{"operationId":"bulkSchedulePosts","summary":"Bulk schedule up to 100 posts","tags":["Posts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkSchedulePostsRequest"}}}},"responses":{"201":{"description":"Bulk scheduling result","content":{"application/json":{"schema":{"type":"object","properties":{"totalScheduled":{"type":"integer"},"totalFailed":{"type":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"postId":{"type":"string"},"success":{"type":"boolean"},"isScheduled":{"type":"boolean"},"scheduledAt":{"type":"string","format":"date-time"},"errorMessage":{"type":"string"}}}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.schedule`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Requires the `posts.schedule` permission.","parameters":[{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}]}},"/social-posts/{id}":{"get":{"operationId":"getPost","summary":"Get a post by ID","tags":["Posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"responses":{"200":{"description":"The post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.read`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Requires the `posts.read` permission."},"patch":{"operationId":"updatePost","summary":"Update a draft or scheduled post","tags":["Posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSocialPostRequest"}}}},"responses":{"200":{"description":"Updated post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.draft`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Requires the `posts.draft` permission."},"delete":{"operationId":"deletePost","summary":"Delete a post","tags":["Posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.draft`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Post is being published and cannot be deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Requires the `posts.draft` permission."}},"/social-posts/{id}/results":{"get":{"operationId":"getPostResults","summary":"Get per-platform publishing results for a post","tags":["Posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"responses":{"200":{"description":"Per-platform results","content":{"application/json":{"schema":{"type":"object","properties":{"postId":{"type":"string"},"status":{"$ref":"#/components/schemas/PostStatus"},"results":{"type":"array","items":{"type":"object","properties":{"platformId":{"type":"string"},"platform":{"$ref":"#/components/schemas/PlatformType"},"accountName":{"type":"string"},"status":{"$ref":"#/components/schemas/PlatformPostStatus"},"platformPostId":{"type":"string"},"errorMessage":{"type":"string"},"tiktokDraftFallback":{"type":"boolean","description":"TikTok delivered the content to the inbox as a draft because the daily active-user cap was hit"},"publishedAt":{"type":"string","format":"date-time"}}}}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.read`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Requires the `posts.read` permission."}},"/social-posts/{id}/publish":{"post":{"operationId":"publishDraft","summary":"Publish or schedule a draft post","description":"Without `scheduledAt` the draft is scheduled for its planned date when it has one in the future, and published now otherwise; send `publishNow: true` to publish a dated draft now. Scheduling the draft for a future date also needs `posts.schedule`, and publishing it now also needs `posts.publish`, so a key that holds only `posts.draft` cannot publish; the call answers 403 `permission_denied`. Requires the `posts.draft` permission.","tags":["Posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishDraftRequest"}}}},"responses":{"201":{"description":"Publish result","content":{"application/json":{"schema":{"type":"object","properties":{"postId":{"type":"string"},"queuedPlatforms":{"type":"array","items":{"$ref":"#/components/schemas/PlatformType"}},"isScheduled":{"type":"boolean"},"scheduledAt":{"type":"string","format":"date-time"}}}}}},"400":{"description":"Post is not a draft, or both `scheduledAt` and `publishNow` were sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.draft`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/social-posts/{id}/unschedule":{"post":{"operationId":"unschedulePost","summary":"Unschedule a post","description":"Turns a scheduled or dated draft post back into an undated draft. Requires the `posts.draft` permission.","tags":["Posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"responses":{"200":{"description":"The post as an undated draft","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"description":"Post is neither a draft nor scheduled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.draft`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/social-posts/{id}/retry":{"post":{"operationId":"retryFailedPlatforms","summary":"Retry failed platforms of a post","tags":["Posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryFailedPlatformsRequest"}}}},"responses":{"201":{"description":"Retry result","content":{"application/json":{"schema":{"type":"object","properties":{"postId":{"type":"string"},"queuedPlatforms":{"type":"array","items":{"$ref":"#/components/schemas/PlatformType"}},"isScheduled":{"type":"boolean"}}}}}},"400":{"description":"A value in `platformIds` matches no platform entry of the post, or none of the matched entries has failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.publish`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Requires the `posts.publish` permission."}},"/recurring-posts":{"get":{"operationId":"listRecurringPosts","summary":"List recurring posts","description":"Series created by passing `recurrence` to `POST /social-posts`. Only the next occurrence of an active series exists as a scheduled post. Requires the `posts.read` permission.","tags":["Recurring posts"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"statuses","in":"query","schema":{"type":"array","items":{"type":"string","enum":["ACTIVE","PAUSED","ENDED"]}},"explode":true},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"responses":{"200":{"description":"Paginated recurring posts","content":{"application/json":{"schema":{"type":"object","properties":{"recurringPosts":{"type":"array","items":{"$ref":"#/components/schemas/RecurringPost"}},"total":{"type":"integer"},"hasMore":{"type":"boolean"}}}}}},"400":{"description":"Unknown query parameter or invalid filter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.read`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/recurring-posts/{id}":{"get":{"operationId":"getRecurringPost","summary":"Get a recurring post","tags":["Recurring posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Recurring post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"responses":{"200":{"description":"The recurring post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringPost"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.read`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Recurring post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Requires the `posts.read` permission."},"delete":{"operationId":"deleteRecurringPost","summary":"Delete a recurring post","description":"Stops the series and deletes its upcoming scheduled post. Posts that already went out are kept. Requires the `posts.draft` permission.","tags":["Recurring posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Recurring post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.draft`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Recurring post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/recurring-posts/{id}/pause":{"post":{"operationId":"pauseRecurringPost","summary":"Pause a recurring post","description":"Stops creating occurrences and deletes the upcoming scheduled post. Requires the `posts.draft` permission.","tags":["Recurring posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Recurring post ID"},{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"type":"string"},"description":"The workspace to act in, for OAuth sign-ins that reach several workspaces. Take the id from `GET /workspaces`. Without it the call lands in the default workspace. A workspace the caller cannot reach answers 403 with `code: workspace_access_denied`. An API key belongs to one workspace: send its own id or leave the header out"}],"responses":{"200":{"description":"The paused recurring post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringPost"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's role does not hold `posts.draft`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionDeniedError"}}}},"404":{"description":"Recurring post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/recurring-posts/{id}/resume":{"post":{"operationId":"resumeRecurringPost","summary":"Resume a recurring post","description":"Continues from the next occurrence after now. Occurrences missed while paused are not published. Requires the `posts.draft` permission.","tags":["Recurring posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Recur
# --- truncated at 32 KB (191 KB total) ---
# Full source: https://artifacts.apis.io/adaptlypost-com/openapi/_original/adaptlypost-com-api-openapi.json