TribeTale API Docs
Admin APIPosts

Edit, publish, schedule, or unpublish a post.

PUT
/posts/{id}/

Edits a post. If source=html is supplied, posts[0].html is converted into Ghost editor source formats.

Publish by changing status to published. Schedule by changing status to scheduled and setting a future published_at; the model rejects published-to-scheduled transitions. Email-only posts published with email_only: true are stored as status: sent.

newsletter_id is read-only in the request body. The newsletter query parameter is an active newsletter slug and is only applied when the post's status changes to published, scheduled, or sent. email_segment is an NQL recipient filter; it is only set when newsletter is supplied during the same publish/schedule/send transition. If newsletter is supplied without email_segment, Ghost resets the recipient filter to all.

Authorization

GhostAdminJWT
Authorization<token>

Send Authorization: Ghost <JWT>. This is a custom Ghost scheme, not standard Bearer.

The JWT is signed with HS256 using the Admin API key secret after hex decoding it to bytes. The JWT header must include kid set to the Admin API key id. Ghost verifies the aud claim against the requested Admin or Content API path and enforces a maximum token age of 5 minutes.

In: header

Path Parameters

id*string

Query Parameters

include?string

Comma-separated includes. Allowed values include tags, authors, authors.roles, email, tiers, newsletter, count.conversions, count.signups, count.paid_conversions, count.clicks, sentiment, count.positive_feedback, count.negative_feedback, post_revisions, and post_revisions.author.

formats?string

Comma-separated post formats. Allowed values are mobiledoc, lexical, html, and plaintext.

source?string

Convert the supplied html field into Ghost editor source formats.

newsletter?string

Active newsletter slug used when publishing, scheduling, or sending a post.

email_segment?string

NQL member recipient filter; only applied together with newsletter on publish/schedule/send transitions.

force_rerender?boolean

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X PUT "https://example.com/posts/64f0f2c75b8d5b0012345678/?include=tags%2Cauthors%2Cnewsletter&formats=html%2Clexical&newsletter=default-newsletter&email_segment=status%3Apaid" \  -H "Content-Type: application/json" \  -d '{    "posts": [      {        "title": "Weekly update",        "status": "published",        "published_at": "2026-06-03T16:00:00.000Z",        "email_only": false      }    ]  }'
{
  "posts": [
    {
      "id": "string",
      "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
      "title": "string",
      "slug": "string",
      "mobiledoc": "string",
      "lexical": "string",
      "html": "string",
      "plaintext": "string",
      "feature_image": "http://example.com",
      "featured": true,
      "type": "post",
      "status": "draft",
      "visibility": "string",
      "email_segment": "string",
      "newsletter_id": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "updated_at": "2019-08-24T14:15:22Z",
      "published_at": "2019-08-24T14:15:22Z",
      "custom_excerpt": "string",
      "codeinjection_head": "string",
      "codeinjection_foot": "string",
      "custom_template": "string",
      "canonical_url": "http://example.com",
      "tags": [
        {
          "id": "string",
          "name": "string",
          "slug": "string",
          "description": "string",
          "feature_image": "http://example.com",
          "visibility": "public",
          "url": "http://example.com",
          "og_image": "string",
          "og_title": "string",
          "og_description": "string",
          "twitter_image": "string",
          "twitter_title": "string",
          "twitter_description": "string",
          "meta_title": "string",
          "meta_description": "string",
          "codeinjection_head": "string",
          "codeinjection_foot": "string",
          "canonical_url": "string",
          "accent_color": "string",
          "created_at": "2019-08-24T14:15:22Z",
          "updated_at": "2019-08-24T14:15:22Z",
          "count": {}
        }
      ],
      "authors": [
        {
          "id": "string",
          "name": "string",
          "slug": "string",
          "profile_image": "http://example.com",
          "cover_image": "http://example.com",
          "bio": "string",
          "website": "http://example.com",
          "location": "string",
          "facebook": "string",
          "twitter": "string",
          "url": "http://example.com"
        }
      ],
      "primary_tag": {
        "id": "string",
        "name": "string",
        "slug": "string",
        "description": "string",
        "feature_image": "http://example.com",
        "visibility": "public",
        "url": "http://example.com",
        "og_image": "string",
        "og_title": "string",
        "og_description": "string",
        "twitter_image": "string",
        "twitter_title": "string",
        "twitter_description": "string",
        "meta_title": "string",
        "meta_description": "string",
        "codeinjection_head": "string",
        "codeinjection_foot": "string",
        "canonical_url": "string",
        "accent_color": "string",
        "created_at": "2019-08-24T14:15:22Z",
        "updated_at": "2019-08-24T14:15:22Z",
        "count": {}
      },
      "primary_author": {
        "id": "string",
        "name": "string",
        "slug": "string",
        "profile_image": "http://example.com",
        "cover_image": "http://example.com",
        "bio": "string",
        "website": "http://example.com",
        "location": "string",
        "facebook": "string",
        "twitter": "string",
        "url": "http://example.com"
      },
      "newsletter": {
        "id": "string",
        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
        "name": "string",
        "description": "string",
        "feedback_enabled": true,
        "slug": "string",
        "sender_name": "string",
        "sender_email": "string",
        "sender_reply_to": "newsletter",
        "status": "active",
        "visibility": "string",
        "subscribe_on_signup": true,
        "sort_order": 0,
        "header_image": "http://example.com",
        "created_at": "2019-08-24T14:15:22Z",
        "updated_at": "2019-08-24T14:15:22Z"
      },
      "tiers": [
        {
          "id": "string",
          "name": "string",
          "description": "string",
          "slug": "string",
          "active": true,
          "type": "free",
          "welcome_page_url": "http://example.com",
          "visibility": "public",
          "benefits": [
            "string"
          ],
          "currency": "string",
          "monthly_price": 0,
          "yearly_price": 0,
          "trial_days": 0,
          "created_at": "2019-08-24T14:15:22Z",
          "updated_at": "2019-08-24T14:15:22Z"
        }
      ],
      "og_image": "http://example.com",
      "og_title": "string",
      "og_description": "string",
      "twitter_image": "http://example.com",
      "twitter_title": "string",
      "twitter_description": "string",
      "meta_title": "string",
      "meta_description": "string",
      "email_subject": "string",
      "frontmatter": "string",
      "feature_image_alt": "string",
      "feature_image_caption": "string",
      "email_only": false
    }
  ]
}