Ghost Members API

Manage publication members including creating, reading, updating, and deleting member records. Members are people who have signed up for the publication.

OpenAPI Specification

ghost-members-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Ghost Admin Authors Members API
  description: The Ghost Admin API provides full read and write access to all content and configuration within a Ghost publication. It enables developers to create, update, and delete posts, pages, tags, members, tiers, newsletters, and offers programmatically. Authentication is handled via JSON Web Tokens generated from an Admin API key, integration tokens, or staff access tokens. The Admin API supports everything the Ghost Admin interface can do and more, making it suitable for building custom publishing workflows, content automation, member management systems, and advanced integrations.
  version: '5.0'
  contact:
    name: Ghost Foundation
    url: https://ghost.org/docs/admin-api/
  termsOfService: https://ghost.org/terms/
servers:
- url: https://{site}.ghost.io/ghost/api/admin
  description: Ghost Pro Hosted Site
  variables:
    site:
      default: your-site
      description: Your Ghost site subdomain
- url: '{protocol}://{domain}/ghost/api/admin'
  description: Self-Hosted Ghost Instance
  variables:
    protocol:
      default: https
      enum:
      - https
      - http
    domain:
      default: localhost:2368
      description: Your Ghost instance domain and port
security:
- adminApiToken: []
tags:
- name: Members
  description: Manage publication members including creating, reading, updating, and deleting member records. Members are people who have signed up for the publication.
paths:
  /members/:
    get:
      operationId: adminBrowseMembers
      summary: Browse members
      description: Retrieve a paginated list of publication members. Supports filtering by status, label, newsletter subscription, and other member properties.
      tags:
      - Members
      parameters:
      - $ref: '#/components/parameters/fields'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/order'
      responses:
        '200':
          description: A list of members
          content:
            application/json:
              schema:
                type: object
                properties:
                  members:
                    type: array
                    items:
                      $ref: '#/components/schemas/Member'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: adminCreateMember
      summary: Create a member
      description: Create a new member. The email field is required. Optionally include name, labels, and newsletter subscriptions.
      tags:
      - Members
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - members
              properties:
                members:
                  type: array
                  items:
                    $ref: '#/components/schemas/MemberInput'
                  minItems: 1
                  maxItems: 1
      responses:
        '201':
          description: Member created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  members:
                    type: array
                    items:
                      $ref: '#/components/schemas/Member'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /members/{id}/:
    get:
      operationId: adminReadMember
      summary: Read a member by ID
      description: Retrieve a single member by their unique identifier.
      tags:
      - Members
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: A single member
          content:
            application/json:
              schema:
                type: object
                properties:
                  members:
                    type: array
                    items:
                      $ref: '#/components/schemas/Member'
                    minItems: 1
                    maxItems: 1
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: adminUpdateMember
      summary: Update a member
      description: Update an existing member by their unique identifier. Can be used to change name, email, labels, note, and newsletter subscriptions.
      tags:
      - Members
      parameters:
      - $ref: '#/components/parameters/resourceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - members
              properties:
                members:
                  type: array
                  items:
                    $ref: '#/components/schemas/MemberInput'
                  minItems: 1
                  maxItems: 1
      responses:
        '200':
          description: Member updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  members:
                    type: array
                    items:
                      $ref: '#/components/schemas/Member'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
    delete:
      operationId: adminDeleteMember
      summary: Delete a member
      description: Permanently delete a member by their unique identifier.
      tags:
      - Members
      parameters:
      - $ref: '#/components/parameters/resourceId'
      responses:
        '204':
          description: Member deleted successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  parameters:
    fields:
      name: fields
      in: query
      required: false
      description: Comma-separated list of fields to return in the response.
      schema:
        type: string
    page:
      name: page
      in: query
      required: false
      description: Page number for paginated results. Defaults to 1.
      schema:
        type: integer
        minimum: 1
        default: 1
    order:
      name: order
      in: query
      required: false
      description: Field and direction to order results by.
      schema:
        type: string
    filter:
      name: filter
      in: query
      required: false
      description: Apply fine-grained filters using Ghost's NQL query language.
      schema:
        type: string
    limit:
      name: limit
      in: query
      required: false
      description: Maximum number of resources to return per page. Defaults to 15.
      schema:
        oneOf:
        - type: integer
          minimum: 1
        - type: string
          enum:
          - all
        default: 15
    resourceId:
      name: id
      in: path
      required: true
      description: The unique identifier of the resource
      schema:
        type: string
        format: uuid
  schemas:
    MemberInput:
      type: object
      description: Input fields for creating or updating a member.
      properties:
        email:
          type: string
          format: email
          description: Member email address
        name:
          type: string
          description: Member display name
          nullable: true
        note:
          type: string
          description: Internal note about the member
          nullable: true
        labels:
          type: array
          description: Labels to apply to the member
          items:
            type: object
            properties:
              name:
                type: string
                description: Label name
              slug:
                type: string
                description: Label slug
        newsletters:
          type: array
          description: Newsletter subscriptions
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: Newsletter identifier
    Member:
      type: object
      description: A member represents a person who has signed up for the publication, either as a free or paid subscriber.
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier
        uuid:
          type: string
          format: uuid
          description: Universally unique identifier
        email:
          type: string
          format: email
          description: Member email address
        name:
          type: string
          description: Member display name
          nullable: true
        note:
          type: string
          description: Internal note about the member
          nullable: true
        geolocation:
          type: string
          description: Geolocation data from signup
          nullable: true
        status:
          type: string
          description: Member status based on subscription state
          enum:
          - free
          - paid
          - comped
        labels:
          type: array
          description: Labels applied to the member
          items:
            $ref: '#/components/schemas/Label'
        subscriptions:
          type: array
          description: Paid subscriptions associated with the member
          items:
            $ref: '#/components/schemas/Subscription'
        newsletters:
          type: array
          description: Newsletters the member is subscribed to
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: Newsletter identifier
              name:
                type: string
                description: Newsletter name
              status:
                type: string
                description: Subscription status
        avatar_image:
          type: string
          format: uri
          description: Gravatar URL for the member
        email_count:
          type: integer
          description: Number of emails sent to this member
          minimum: 0
        email_opened_count:
          type: integer
          description: Number of emails opened by this member
          minimum: 0
        email_open_rate:
          type: number
          description: Email open rate percentage
          nullable: true
          minimum: 0
          maximum: 100
        created_at:
          type: string
          format: date-time
          description: Signup timestamp
        updated_at:
          type: string
          format: date-time
          description: Last update timestamp
    PaginationMeta:
      type: object
      description: Pagination metadata
      properties:
        pagination:
          type: object
          properties:
            page:
              type: integer
              description: Current page
              minimum: 1
            limit:
              type: integer
              description: Items per page
              minimum: 1
            pages:
              type: integer
              description: Total pages
              minimum: 1
            total:
              type: integer
              description: Total items
              minimum: 0
            next:
              type: integer
              description: Next page number
              nullable: true
            prev:
              type: integer
              description: Previous page number
              nullable: true
    Subscription:
      type: object
      description: A paid subscription associated with a member, typically managed through Stripe.
      properties:
        id:
          type: string
          description: Subscription identifier
        customer:
          type: object
          description: Stripe customer details
          properties:
            id:
              type: string
              description: Stripe customer ID
            name:
              type: string
              description: Customer name
              nullable: true
            email:
              type: string
              format: email
              description: Customer email
        status:
          type: string
          description: Subscription status
          enum:
          - active
          - trialing
          - canceled
          - unpaid
          - past_due
        start_date:
          type: string
          format: date-time
          description: Subscription start date
        default_payment_card_last4:
          type: string
          description: Last 4 digits of the payment card
          nullable: true
          pattern: ^\d{4}$
        cancel_at_period_end:
          type: boolean
          description: Whether the subscription cancels at period end
        cancellation_reason:
          type: string
          description: Reason for cancellation
          nullable: true
        current_period_end:
          type: string
          format: date-time
          description: End of current billing period
        price:
          type: object
          description: Price details
          properties:
            id:
              type: string
              description: Stripe price ID
            price_id:
              type: string
              description: Ghost price identifier
            nickname:
              type: string
              description: Price nickname
            amount:
              type: integer
              description: Amount in smallest currency unit
              minimum: 0
            interval:
              type: string
              description: Billing interval
              enum:
              - month
              - year
            type:
              type: string
              description: Price type
            currency:
              type: string
              description: ISO 4217 currency code
              pattern: ^[A-Z]{3}$
        tier:
          $ref: '#/components/schemas/Tier'
    ErrorResponse:
      type: object
      description: Standard Ghost API error response
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
                description: Human-readable error message
              type:
                type: string
                description: Error type identifier
              context:
                type: string
                description: Additional error context
                nullable: true
    Label:
      type: object
      description: A label for categorizing and segmenting members.
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier
        name:
          type: string
          description: Label name
        slug:
          type: string
          description: URL-safe slug
        created_at:
          type: string
          format: date-time
          description: Creation timestamp
        updated_at:
          type: string
          format: date-time
          description: Last update timestamp
    Tier:
      type: object
      description: A membership tier with pricing and benefits configuration.
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier
        name:
          type: string
          description: Tier name
        slug:
          type: string
          description: URL-safe slug
        description:
          type: string
          description: Tier description
          nullable: true
        active:
          type: boolean
          description: Whether the tier is active
        type:
          type: string
          description: Tier type
          enum:
          - free
          - paid
        welcome_page_url:
          type: string
          format: uri
          description: Welcome page URL after signup
          nullable: true
        visibility:
          type: string
          description: Public visibility
          enum:
          - public
          - none
        monthly_price:
          type: integer
          description: Monthly price in smallest currency unit
          nullable: true
          minimum: 0
        yearly_price:
          type: integer
          description: Yearly price in smallest currency unit
          nullable: true
          minimum: 0
        currency:
          type: string
          description: ISO 4217 currency code
          nullable: true
          pattern: ^[A-Z]{3}$
        trial_days:
          type: integer
          description: Number of free trial days
          minimum: 0
        benefits:
          type: array
          description: Tier benefits
          items:
            type: string
        created_at:
          type: string
          format: date-time
          description: Creation timestamp
        updated_at:
          type: string
          format: date-time
          description: Last update timestamp
  responses:
    Unauthorized:
      description: Authentication failed or token is missing or invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: The requested resource was not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    ValidationError:
      description: Request body validation failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    adminApiToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JSON Web Token generated from an Admin API key. The key is split into an ID and secret at the colon separator. The ID is used as the kid header and the secret is used to sign the token with HS256.
externalDocs:
  description: Ghost Admin API Documentation
  url: https://ghost.org/docs/admin-api/