Drafts
A draft is a post in status: 0 with post_by: 3. Drafts persist indefinitely, are scoped to your workspace, and never count against rate limits.
Listing drafts
There's no dedicated /drafts endpoint. The frontend filters the standard posts list:
GET /api/v1/posts?status=0The publishing UI mounts at /app/publishing?tab=draft and renders the <Drafts /> panel. Filter further with ?campaign=, ?labels=, or ?search= query parameters.
Editing a draft
PUT /api/v1/posts/:idUpdate any field — accounts, caption, media, labels, schedule. The backend re-validates the body the same way it does on create.
Changing status
Use PATCH /api/v1/posts/:id/status with { status: <0|1|2|3|4> } to move a post between states. Practically you'll only call this to:
- Move a draft to
pending(1) when you decide to publish. - Move a failed post back to
pendingto retry.
Bulk operations
There is no bulk-delete or bulk-schedule endpoint. The publishing UI iterates the selected items and calls the per-post API for each:
DELETE /api/v1/posts/:idper row to delete.PUT /api/v1/posts/:idper row to apply a label or move to a campaign.
Approval workflow
POST /api/v1/posts/:id/submit-reviewMoves the draft from approval_status: draft to pending_review. Approved drafts (admins set approval_status: approved) become eligible for publishing; rejected drafts return to draft with a reviewer comment.