POST
/v1/posts/{id}/publishPublish a post
Moves a draft into the publishing queue. When the profile or key requires approval, the post waits for an approver instead.
Required permission: `posts:write`
Accepts `profileId` to target a specific profile. Omit it to use the key’s home profile.
- Base URL
- https://api.cutedyno.com
- Permission
posts:write- Idempotency
- Send an
Idempotency-Keyheader so a retry cannot apply twice. How it works - MCP tool
- publish_post
Request
curl -X POST "https://api.cutedyno.com/v1/posts/POST_ID/publish" \
-H "Authorization: Bearer $CUTEDYNO_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"profileId": "profile_a1b2c3d4",
"scheduledAt": "string",
"approvers": [
"string"
]
}'Path parameters
idstringrequiredPost id.
Headers
Idempotency-KeystringoptionalA unique key so a retried request is not applied twice. Stored for 24 hours.
Body
profileIdstringoptionalProfile to act on. Defaults to the profile the API key was created in.
scheduledAtstringoptionalISO 8601 datetime, for example 2026-08-01T12:00:00Z.
approversstring[]optionalEmails to request approval from. Defaults to the key owner when approval is required.
Response
Returns 200 with the following body.
objectrequired
Example
{
"post": {
"id": "a1b2c3d4-0000-4000-8000-000000000000",
"status": "draft",
"profileId": "profile_a1b2c3d4"
}
}Errors
Failures use the standard error envelope. Branch on code, never on the message.
| Status | Code | When it happens |
|---|---|---|
| 400 | invalid_state_transition | The post is in a state that does not allow this operation, for example editing a post that already published. |
| 400 | key_not_linked_to_user | Publishing records a human actor. Recreate the key from the dashboard so it carries an owner. |
| 401 | invalid_api_key | The key does not exist, was revoked, or is malformed. Keys start with cdyn_live_. |
| 403 | approval_required | This profile or key forces posts through review, and no approver could be determined. Supply approvers, or recreate the key so it carries an owner. |
| 404 | not_found | The resource does not exist inside the resolved profile. |
| 429 | rate_limit_exceeded | Too many requests for this key. Honour the Retry-After header before retrying. |
| 500 | internal_error | Something failed on our side. Retry with the same Idempotency-Key; report the requestId if it persists. |