Ghost

Ghost is an open-source (MIT) publishing platform for professional publications, newsletters, memberships, and paid subscriptions. It can be self-hosted for free or run as the managed Ghost(Pro) service, with all Ghost(Pro) revenue funding the non-profit Ghost Foundation. Every Ghost site exposes two documented public REST APIs under https://{site}/ghost/api/. The Content API is a read-only, key-authenticated interface for delivering published posts, pages, tags, authors, tiers, and settings to front-ends and static sites. The Admin API is a read-write, token-authenticated (JWT) interface for managing posts, pages, members, tags, tiers, offers, newsletters, users, media, themes, and webhooks.

10 APIs 0 Features
PublishingNewslettersMembershipsSubscriptionsCMSOpen SourceContent

APIs

Ghost Content API

Read-only, key-authenticated REST API that delivers published content - posts, pages, authors, tags, tiers, and public settings - to front-ends, static site generators, and mobi...

Ghost Admin Posts API

Read-write management of posts - browse, read by id or slug, create, update, and delete. Content is stored as Lexical and can be requested or supplied as HTML via the source and...

Ghost Admin Pages API

Read-write management of static pages - browse, read by id or slug, create, update, and delete. Pages share the post data model but are not part of the chronological content feed.

Ghost Admin Members API

Manage the membership audience - browse, read, create, and update members, including their newsletter subscriptions, labels, and comp/paid status. Underpins Ghost's memberships ...

Ghost Admin Tags and Labels API

Read-write management of tags (content taxonomy) and labels (member segmentation) - browse, read, create, update, and delete. Tags organize posts and pages; labels group members.

Ghost Admin Tiers and Offers API

Manage subscription tiers and promotional offers that define paid access to a publication - browse, read, create, and update tiers and offers with their pricing, benefits, and d...

Ghost Admin Newsletters API

Manage the newsletters a publication sends - browse, read, create, and update newsletter definitions including sender details, design, and subscription behavior. A single Ghost ...

Ghost Admin Users and Site API

Read-only access to staff users (browse and read by id or slug) and to public site metadata via the /site/ endpoint, which returns title, url, and version - useful for verifying...

Ghost Admin Media and Themes API

Upload assets and manage presentation - multipart image uploads via /images/upload/, and theme package upload plus activation via /themes/. Returns stored URLs for referencing i...

Ghost Admin Webhooks API

Register outbound webhooks that fire on Ghost events (for example post.published, member.added, page.published) to trigger site rebuilds, notifications, or downstream automation...

Collections

Pricing Plans

Ghost Org Plans Pricing

5 plans

PLANS

Rate Limits

Ghost Org Rate Limits

5 limits

RATE LIMITS

FinOps

Resources

🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
👥
GitHubOrganization
GitHubOrganization
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps
📰
Blog
Blog
📄
ChangeLog
ChangeLog

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Ghost Content and Admin APIs
  version: '5.0'
items:
- info:
    name: Content API
    type: folder
  items:
  - info:
      name: Browse posts.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/content/posts/?key={{content_key}}
    docs: Returns a paginated list of published posts. Authenticated with a Content API key query parameter.
  - info:
      name: Read a post by ID.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/content/posts/:id/?key={{content_key}}
      params:
      - name: id
        value: ''
        type: path
        description: The post ID.
    docs: Reads a single published post by ID.
  - info:
      name: Read a post by slug.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/content/posts/slug/:slug/?key={{content_key}}
      params:
      - name: slug
        value: ''
        type: path
        description: The post slug.
    docs: Reads a single published post by slug.
  - info:
      name: Browse pages.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/content/pages/?key={{content_key}}
    docs: Returns a paginated list of published pages.
  - info:
      name: Browse authors.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/content/authors/?key={{content_key}}
    docs: Returns a list of authors.
  - info:
      name: Browse tags.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/content/tags/?key={{content_key}}
    docs: Returns a list of tags.
  - info:
      name: Browse tiers.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/content/tiers/?key={{content_key}}&include=monthly_price,yearly_price
    docs: Returns public subscription tiers with pricing.
  - info:
      name: Read settings.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/content/settings/?key={{content_key}}
    docs: Returns public settings for the site.
- info:
    name: Admin - Posts
    type: folder
  items:
  - info:
      name: Browse posts.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/posts/
    docs: Returns a paginated list of posts (all statuses).
  - info:
      name: Read a post by ID.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/posts/:id/
      params:
      - name: id
        value: ''
        type: path
        description: The post ID.
    docs: Reads a single post by ID.
  - info:
      name: Create a post.
      type: http
    http:
      method: POST
      url: https://{{admin_domain}}/ghost/api/admin/posts/
      body:
        type: json
        data: "{\n  \"posts\": [\n    { \"title\": \"My post\", \"status\": \"draft\" }\n  ]\n}"
    docs: Creates a post. Add ?source=html to supply content as HTML instead of Lexical.
  - info:
      name: Update a post.
      type: http
    http:
      method: PUT
      url: https://{{admin_domain}}/ghost/api/admin/posts/:id/
      params:
      - name: id
        value: ''
        type: path
        description: The post ID.
      body:
        type: json
        data: "{\n  \"posts\": [\n    { \"title\": \"Updated title\", \"updated_at\": \"2026-07-05T00:00:00.000Z\" }\n  ]\n\
          }"
    docs: Updates a post. The current updated_at must be supplied for collision detection.
  - info:
      name: Delete a post.
      type: http
    http:
      method: DELETE
      url: https://{{admin_domain}}/ghost/api/admin/posts/:id/
      params:
      - name: id
        value: ''
        type: path
        description: The post ID.
    docs: Deletes a post.
- info:
    name: Admin - Pages
    type: folder
  items:
  - info:
      name: Browse pages.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/pages/
    docs: Returns a paginated list of pages.
  - info:
      name: Create a page.
      type: http
    http:
      method: POST
      url: https://{{admin_domain}}/ghost/api/admin/pages/
      body:
        type: json
        data: "{\n  \"pages\": [\n    { \"title\": \"About\", \"status\": \"published\" }\n  ]\n}"
    docs: Creates a page.
  - info:
      name: Update a page.
      type: http
    http:
      method: PUT
      url: https://{{admin_domain}}/ghost/api/admin/pages/:id/
      params:
      - name: id
        value: ''
        type: path
        description: The page ID.
      body:
        type: json
        data: "{\n  \"pages\": [ {} ]\n}"
    docs: Updates a page.
  - info:
      name: Delete a page.
      type: http
    http:
      method: DELETE
      url: https://{{admin_domain}}/ghost/api/admin/pages/:id/
      params:
      - name: id
        value: ''
        type: path
        description: The page ID.
    docs: Deletes a page.
- info:
    name: Admin - Members
    type: folder
  items:
  - info:
      name: Browse members.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/members/
    docs: Returns a paginated list of members.
  - info:
      name: Create a member.
      type: http
    http:
      method: POST
      url: https://{{admin_domain}}/ghost/api/admin/members/
      body:
        type: json
        data: "{\n  \"members\": [\n    { \"email\": \"reader@example.com\", \"name\": \"Reader\" }\n  ]\n}"
    docs: Creates a member.
  - info:
      name: Update a member.
      type: http
    http:
      method: PUT
      url: https://{{admin_domain}}/ghost/api/admin/members/:id/
      params:
      - name: id
        value: ''
        type: path
        description: The member ID.
      body:
        type: json
        data: "{\n  \"members\": [ {} ]\n}"
    docs: Updates a member.
- info:
    name: Admin - Tags & Labels
    type: folder
  items:
  - info:
      name: Browse tags.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/tags/
    docs: Returns a list of tags.
  - info:
      name: Create a tag.
      type: http
    http:
      method: POST
      url: https://{{admin_domain}}/ghost/api/admin/tags/
      body:
        type: json
        data: "{\n  \"tags\": [ { \"name\": \"News\" } ]\n}"
    docs: Creates a tag.
  - info:
      name: Browse labels.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/labels/
    docs: Returns a list of member labels.
- info:
    name: Admin - Tiers & Offers
    type: folder
  items:
  - info:
      name: Browse tiers.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/tiers/
    docs: Returns a list of subscription tiers.
  - info:
      name: Browse offers.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/offers/
    docs: Returns a list of promotional offers.
- info:
    name: Admin - Newsletters
    type: folder
  items:
  - info:
      name: Browse newsletters.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/newsletters/
    docs: Returns a list of newsletters.
  - info:
      name: Create a newsletter.
      type: http
    http:
      method: POST
      url: https://{{admin_domain}}/ghost/api/admin/newsletters/
      body:
        type: json
        data: "{\n  \"newsletters\": [ { \"name\": \"Weekly\" } ]\n}"
    docs: Creates a newsletter.
- info:
    name: Admin - Users & Site
    type: folder
  items:
  - info:
      name: Browse users.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/users/
    docs: Returns a list of staff users (read-only).
  - info:
      name: Read site metadata.
      type: http
    http:
      method: GET
      url: https://{{admin_domain}}/ghost/api/admin/site/
    docs: Returns public site metadata (title, url, version).
- info:
    name: Admin - Media & Themes
    type: folder
  items:
  - info:
      name: Upload an image.
      type: http
    http:
      method: POST
      url: https://{{admin_domain}}/ghost/api/admin/images/upload/
      body:
        type: form-data
        data:
        - name: file
          type: file
          value: ''
        - name: purpose
          type: text
          value: image
    docs: Uploads an image via multipart/form-data and returns the stored URL.
  - info:
      name: Upload a theme.
      type: http
    http:
      method: POST
      url: https://{{admin_domain}}/ghost/api/admin/themes/upload/
      body:
        type: form-data
        data:
        - name: file
          type: file
          value: ''
    docs: Uploads a theme zip package.
  - info:
      name: Activate a theme.
      type: http
    http:
      method: PUT
      url: https://{{admin_domain}}/ghost/api/admin/themes/:name/activate/
      params:
      - name: name
        value: ''
        type: path
        description: The theme name.
    docs: Activates an uploaded theme.
- info:
    name: Admin - Webhooks
    type: folder
  items:
  - info:
      name: Create a webhook.
      type: http
    http:
      method: POST
      url: https://{{admin_domain}}/ghost/api/admin/webhooks/
      body:
        type: json
        data: "{\n  \"webhooks\": [\n    { \"event\": \"post.published\", \"target_url\": \"https://example.com/hook\" }\n\
          \  ]\n}"
    docs: Registers an outbound webhook. There is no endpoint to read existing webhooks.
  - info:
      name: Update a webhook.
      type: http
    http:
      method: PUT
      url: https://{{admin_domain}}/ghost/api/admin/webhooks/:id/
      params:
      - name: id
        value: ''
        type: path
        description: The webhook ID.
      body:
        type: json
        data: "{\n  \"webhooks\": [ {} ]\n}"
    docs: Updates a webhook.
  - info:
      name: Delete a webhook.
      type: http
    http:
      method: DELETE
      url: https://{{admin_domain}}/ghost/api/admin/webhooks/:id/
      params:
      - name: id
        value: ''
        type: path
        description: The webhook ID.
    docs: Deletes a webhook.
bundled: true