Drafts and scheduled posts, and failed ones (409 post_not_editable otherwise). A failed post, or the failed accounts of a partial one, is sent again after the change: now, or at a future scheduled_at (failed posts only; 400 schedule_not_allowed for a partial one). Only failed accounts can be changed there; the accounts already published keep their text and media. 409 post_partly_published: part of that account's post already went out (a thread), so it is continued with POST /v1/posts/{id}/retry instead. targets[] changes the accounts already in the post: a field sent replaces that account’s (options as a whole), content or media_ids null makes it follow the post again, a field left out stays. Accounts cannot be added or removed (400 account_not_in_post).
Requires the write scope.
bearerAuthorizationBearer <token>An API key (tb_live_...) from the dashboard, or an OAuth access token.
id*stringuuidmulaichat-workspace?stringLimits an owner key to one profile (id or external_id). Unknown: 404 profile_not_found.
application/json- body
content?stringlength <= 5000media_ids?array<>items <= 20media_urls?array<>1 <= items <= 20scheduled_at?stringdate-timetargets?array<>items <= 10The post.
application/json- response
id*stringuuidprofile_id*stringuuidcontent*string|nulltype*string"text""image""video""carousel"status*string"draft""scheduled""publishing""published""partial""failed""canceled"source*string"dashboard""api""mcp"idea_id*|nullscheduled_at*|nullcreated_at*stringdate-timemedia*array<>targets*array<>curl -X PATCH 'https://api.mulaichat.com/v1/posts/497f6eca-6276-4993-bfeb-53cbbbba6f08' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8", "content": "string", "type": "text", "status": "draft", "source": "dashboard", "idea_id": "513dcbd6-3206-4305-8a7e-8651161eebfb", "scheduled_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "media": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "type": "image", "expired": true, "public_url": "string", "poster_url": "string", "alt_text": "string", "original_name": "string" } ], "targets": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65", "platform": "threads", "username": "string", "display_name": "string", "status": "pending", "options": { "property1": null, "property2": null }, "content": "string", "media": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "type": "image", "expired": true, "public_url": "string", "poster_url": "string", "alt_text": "string", "original_name": "string" } ], "cover": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "type": "image", "expired": true, "public_url": "string", "poster_url": "string", "alt_text": "string", "original_name": "string" }, "platform_post_id": "string", "permalink": "string", "error_code": "string", "error_message": "string", "retry_after": "2019-08-24T14:15:22Z", "published_at": "2019-08-24T14:15:22Z", "first_comment": { "status": "pending", "comment_id": "string", "error_code": "string", "error_message": "string" } } ]}Retry failed targets POST
Retries continue where publishing stopped; nothing is posted twice. Requires the write scope.
Create a profile POST
An external_id already in use returns that profile with 200, so the request is safe to repeat. Free plan: 403 plan_required; more than 1,000 profiles: 422 profile_limit. Requires the write scope. Owner key or session only: a profile key gets 403 owner_key_required.