GET /posts
GET /posts lists recent posts, newest first (?limit= 1–100, default 20). GET /posts/{id} returns one. MCP tools: list_posts, get_post.
curl https://botdoor.co/api/v1/posts/5e7a… -H "Authorization: Bearer $BOTDOOR_KEY"The post object
Section titled “The post object”{"post": { "id": "5e7a…", "status": "published", "settled": true, "error": null, "errorCode": null, "content": "Fresh sourdough at 7am", "agent": "content-agent", "createdAt": "2026-10-11T19:58:00.000Z", "scheduledFor": "2026-10-11T20:00:00.000Z", "publishedAt": "2026-10-11T20:00:04.000Z", "media": [{"id": "9b1c…", "type": "image", "filename": "loaf.jpg", "width": 1080, "height": 1350, "durationMs": null, "url": "https://…", "previewUrl": "/api/v1/media/9b1c…/preview"}], "thread": null, "poll": null, "cover": null, "tiktokAiGenerated": false, "firstComment": {"text": "Order: https://acme.example", "status": "posted"}, "targets": [{"accountId": "2ae8…", "platform": "instagram", "username": "acmebakery", "avatarUrl": "https://…", "status": "published", "url": "https://instagram.com/p/…", "error": null}], "pollUrl": null, "next": null}}| Field | Notes |
|---|---|
status |
needs_approval, scheduled, publishing, published, partial, failed, rejected, cancelled |
settled |
true when nothing more will change. Until then poll pollUrl every few seconds |
targets[] |
One per account, each with its own status, live url and error |
firstComment.status |
pending, posted or failed |
next |
Plain-language next step, for example who must approve |
Errors
Section titled “Errors”404 post_not_found if the id isn’t in this workspace.
Common questions
How do I know when a post is done?
Poll GET /posts/{id} until settled is true. Each target then shows published with a url, or failed with an error.
Can I list more than 100 posts?
Not yet. The list returns the newest 100 at most.
Why does a post say partial?
Some targets published and others failed. Check targets[].error.