PostMantis
API ReferencePosts

Update a post

Updates a draft post, or reschedules a scheduled post when the request only changes `post.scheduledAt` and every delivery is still pending. PATCH must change at least one field, and `post.draft` cannot be changed through this endpoint.

PATCH
/api/posts/{postId}

Updates a draft post, or reschedules a scheduled post when the request only changes post.scheduledAt and every delivery is still pending. PATCH must change at least one field, and post.draft cannot be changed through this endpoint.

Authorization

BearerAuth
AuthorizationBearer <token>

API key from the PostMantis dashboard.

In: header

Path Parameters

postId*string

Post identifier.

Formatuuid

Request Body

TypeScript Definitions

Use the request body type in TypeScript.

post?
profiles?array<>
Items1 <= items
media?array<|>
Itemsitems <= 20
providerOptions?

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/json

application/problem+json

curl -X PATCH "https://loading/api/posts/74d6f3d9-6b68-4a2d-9d89-c4510a08ff42" \  -H "Content-Type: application/json" \  -d '{    "post": {      "body": "Revised launch copy."    },    "profiles": [      "4339a6bc-9cd3-455e-8f91-df8bc63f12d7",      "8d3ef50f-98d9-4a44-8cf7-0b7fb53ab0a8"    ]  }'
{  "data": {    "id": "1d2aafec-bf13-4ea4-b271-6f9ac1e9d069",    "body": "Revised launch copy.",    "status": "draft",    "draft": true,    "scheduledAt": null,    "createdAt": "2026-03-29T09:30:00Z",    "updatedAt": "2026-03-29T09:40:00Z",    "canceledAt": null,    "media": [],    "deliveries": [      {        "profileId": "4339a6bc-9cd3-455e-8f91-df8bc63f12d7",        "provider": "x",        "profileName": "Julius",        "status": "pending",        "scheduledAt": null,        "publishedAt": null,        "failedAt": null,        "providerPostId": null,        "url": null,        "errorMessage": null      }    ]  }}
{  "type": "https://postmantis.com/problems/invalid-request",  "title": "Invalid request",  "status": 400,  "detail": "The request payload failed validation.",  "code": "invalidRequest"}
{  "type": "https://postmantis.com/problems/unauthorized",  "title": "Unauthorized",  "status": 401,  "detail": "Missing or invalid API key.",  "code": "unauthorized"}
{  "type": "https://postmantis.com/problems/forbidden",  "title": "Forbidden",  "status": 403,  "detail": "The authenticated API key is not allowed to perform this action.",  "code": "forbidden"}
{  "type": "https://postmantis.com/problems/not-found",  "title": "Not found",  "status": 404,  "detail": "Post was not found for the authenticated account.",  "code": "notFound"}

{  "type": "https://postmantis.com/problems/conflict",  "title": "Conflict",  "status": 409,  "detail": "Only drafts can be edited through PATCH. Scheduled posts may only be rescheduled by changing post.scheduledAt while every delivery is still pending.",  "code": "conflict"}

{  "type": "https://postmantis.com/problems/payload-too-large",  "title": "Payload too large",  "status": 413,  "detail": "Remote media exceeds the 256 MB limit.",  "code": "payloadTooLarge"}
{  "type": "https://postmantis.com/problems/unsupported-media-type",  "title": "Unsupported media type",  "status": 415,  "detail": "Unsupported content type. Use application/json or multipart/form-data.",  "code": "unsupportedMediaType"}
{  "type": "https://postmantis.com/problems/conflict",  "title": "Conflict",  "status": 409,  "detail": "Referenced upload must be completed before it can be attached to a post.",  "code": "conflict"}
{  "error": "Too Many Requests"}
{  "type": "https://postmantis.com/problems/service-unavailable",  "title": "Service unavailable",  "status": 503,  "detail": "Publishing is temporarily unavailable. Try again later.",  "code": "serviceUnavailable"}