PublishQPublishQ

Update post

Update a draft or scheduled post. You can change the content, the scheduled date, or both. Published and publishing posts cannot be updated.

PATCH
/posts/{id}

Update a draft or scheduled post. You can change the content, the scheduled date, or both. Published and publishing posts cannot be updated.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

PublishQ API key sent as Authorization: Bearer pq_live_....

In: header

Path Parameters

id*string
Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://publishq.com/api/v1/posts/1b5c779b-d7de-4e4e-bf55-95b9317b6d93" \  -H "Content-Type: application/json" \  -d '{    "content": "Updated copy with a stronger hook and cleaner CTA 🚀",    "scheduledAt": "2026-04-15T14:00:00Z",    "mediaIds": [      "d4c3b2a1-0987-6543-21fe-dcba09876543"    ],    "thumbnailTimestamp": 5500  }'
{
  "id": "1b5c779b-d7de-4e4e-bf55-95b9317b6d93",
  "content": "Updated copy with a stronger hook and cleaner CTA 🚀",
  "status": "SCHEDULED",
  "mediaIds": [
    "d4c3b2a1-0987-6543-21fe-dcba09876543"
  ],
  "thumbnailTimestamp": 5500,
  "scheduledAt": "2026-04-15T14:00:00Z",
  "createdAt": "2026-03-30T10:00:00Z",
  "accounts": [
    {
      "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "platform": "TWITTER",
      "accountName": "@publishq",
      "status": "SCHEDULED"
    },
    {
      "accountId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "platform": "LINKEDIN",
      "accountName": "PublishQ",
      "status": "SCHEDULED"
    }
  ]
}
{
  "error": {
    "title": "Forbidden",
    "status": 403,
    "code": "insufficient_scope",
    "message": "The API key does not have the required scope: posts:write",
    "instance": "/api/v1/posts",
    "details": {
      "property1": null,
      "property2": null
    }
  }
}

{
  "error": {
    "title": "Unauthorized",
    "status": 401,
    "code": "missing_auth",
    "message": "Missing Authorization header",
    "instance": "/api/v1/posts"
  }
}

{
  "error": {
    "title": "Payment Required",
    "status": 402,
    "code": "posting_limits_exceeded",
    "message": "Posting limits exceeded",
    "instance": "/api/v1/posts",
    "details": {
      "limitErrors": [
        "Monthly scheduled post limit reached"
      ],
      "upgradeRequired": true
    }
  }
}
{
  "error": {
    "title": "Forbidden",
    "status": 403,
    "code": "insufficient_scope",
    "message": "Missing required scope: posts:write",
    "instance": "/api/v1/posts/1b5c779b-d7de-4e4e-bf55-95b9317b6d93"
  }
}
{
  "error": {
    "title": "Not Found",
    "status": 404,
    "code": "post_not_found",
    "message": "Post not found",
    "instance": "/api/v1/posts"
  }
}
{
  "error": {
    "title": "Forbidden",
    "status": 403,
    "code": "insufficient_scope",
    "message": "The API key does not have the required scope: posts:write",
    "instance": "/api/v1/posts",
    "details": {
      "property1": null,
      "property2": null
    }
  }
}
{
  "error": {
    "title": "Too Many Requests",
    "status": 429,
    "code": "rate_limit_exceeded",
    "message": "Too Many Requests",
    "instance": "/api/v1/posts/1b5c779b-d7de-4e4e-bf55-95b9317b6d93",
    "details": {
      "retryAfter": 60
    }
  }
}