Suggested posts and video cards
Ready-to-edit video posts the platform creates from the brand book each week, plus the raw motion-card renderer behind them. Both surfaces are agent-first: approving a suggestion renders its video into the media library, then you create the post from that media.
List suggested posts
/api/v1/suggested-postsEach suggestion carries a title, funnel stage, base caption, and the animated card's copy (heading, body, CTA, and a source line backed by citations the research pass actually returned, never model-invented). Suggestions never publish anything themselves, and generation runs on paid plans (Free workspaces see an empty list). Default shows what's waiting (status=suggested); ?status=all includes history. Scope posts:read.
curl https://postme.live/api/v1/suggested-posts \
-H "Authorization: Bearer pml_live_AbCdEf123456_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Approve a suggested post
/api/v1/suggested-posts/{id}/approveReturns 202 with a generation_id and renders ONE short video (5 to 10 seconds, the aspect the card carries) into the media library, charging one ai_videos unit (refunded if the render fails). Poll GET /generations/{generation_id} until ready, then create the post yourself with POST /posts using the rendered media id; the suggestion's base_caption is the caption written for it. A failed render returns the row to suggested with an error_message, so approve can be retried. Only a suggested row can be approved; anything else is 409. Scope posts:write, Idempotency-Key required.
curl -X POST https://postme.live/api/v1/suggested-posts/9c1f.../approve \
-H "Authorization: Bearer pml_live_AbCdEf123456_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Idempotency-Key: $(uuidgen)"Render a video card
/api/v1/video-cardsThe motion-card engine, directly: a short animated brand card (5 to 10 seconds, the length follows the copy; H.264 with a licensed music bed) built from content slots. Motif, theme, and music default to a style derived from the brand book's colours, voice, and tagline, so content alone produces on-brand output. The first frame always shows the finished layout; it becomes the thumbnail on every platform. Consumes one ai_videos unit up front (402 when the monthly budget is out; auto-refunded on a failed render). Scope posts:write, Idempotency-Key required.
curl -X POST https://postme.live/api/v1/video-cards \
-H "Authorization: Bearer pml_live_AbCdEf123456_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"content": {
"badge": "Proof",
"heading": "One desk for every channel",
"body": {
"kind": "list",
"items": [
"Post to five platforms from one draft",
"Captions tailored per channel",
"Analytics polled back into one view"
]
},
"cta": { "label": "Start posting" }
},
"aspect": "4:5"
}'Response: 202 Accepted
{
"id": "5f0a3d1e-...",
"kind": "video",
"status": "queued",
"template_id": "motion-card",
"aspect_ratio": "4:5",
"media": [],
"error_message": null,
"meta": { "note": "rendering is asynchronous; poll GET /generations/{id} until ready" }
}Poll a generation
/api/v1/generations/{id}Lifecycle: queued → rendering → ready | failed. On ready, media[] carries the rendered MP4 (id and URL); attach that media id to a post with POST /posts. Renders usually take one to three minutes; poll every 15 to 30 seconds. Scope media:read.
Content slot limits
| Slot | Limit | Notes |
|---|---|---|
content.badge | 40 chars | Optional kicker, 1 to 3 words. Rendered as an accent-outlined pill. |
content.heading | 90 chars | The hook. Three to eight words reads best at display size. |
content.body | paragraph ≤320 chars, or 2 to 5 items ≤90 chars each | Use a list only for true parallel items; the closing line is optional. |
content.source | 90 chars | Plain citation line (gartner.com · 2026). Only cite sources you can stand behind. |
content.cta.label | 40 chars | One pill, an action of 2 to 4 words. |
On MCP
The same four operations are tools on the MCP server: postmelive_list_suggested_posts, postmelive_approve_suggested_post, postmelive_create_video_card, and postmelive_get_generation. Approval renders a video and bills one ai_videos unit; agents should confirm with their user before approving.