WordPress.com REST API v1.1

The primary WordPress.com REST API. 253 endpoints covering sites, posts, pages, comments, media, taxonomy, menus, themes, stats, Reader subscriptions, notifications, sharing and account management. Self-describing: every endpoint's method, path, parameters and response fields are published at /rest/v1.1/help.

OpenAPI Specification

automattic-wordpress-com-rest-v1-1-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: WordPress.com REST API v1.1
  version: v1.1
  description: 'The WordPress.com REST API, operated by Automattic. Derived by API Evangelist from Automattic''s
    own self-describing help document at https://public-api.wordpress.com/rest/v1.1/help (Accept: application/json),
    which publishes every endpoint''s method, path, description, path/query/body parameters and response fields.
    Security schemes come from https://public-api.wordpress.com/.well-known/openid-configuration. The error envelope
    was observed live.'
  termsOfService: https://wordpress.com/tos/
  contact:
    name: WordPress.com Developer Resources
    url: https://developer.wordpress.com/docs/api/
  x-derived-from: https://public-api.wordpress.com/rest/v1.1/help
  x-derived-by: API Evangelist enrichment pipeline
servers:
- url: https://public-api.wordpress.com/rest/v1.1
tags:
- name: alternates
- name: batch
- name: comments
- name: comments-tree
- name: follow
- name: freshly-pressed
- name: general
- name: import
- name: insights
- name: manual-payments
- name: marketing
- name: me
- name: media
- name: menus
- name: notifications
- name: people
- name: posts
- name: protect
- name: read
- name: sharing
- name: site
- name: sites
- name: stats
- name: taxonomy
- name: tests
- name: themes
- name: users
- name: videos
- name: wrangler
paths:
  /batch/:
    get:
      operationId: getBatch
      summary: Run several GET endpoints and return them as an array.
      description: Run several GET endpoints and return them as an array.
      tags:
      - batch
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authorization required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
      - name: http_envelope
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Some environments (like in-browser JavaScript or Flash) block or divert
          responses with a non-200 HTTP status code.  Setting this parameter will force the HTTP status code to
          always be 200.  The JSON response is wrapped in an "envelope" containing the "real" HTTP status code and
          headers.'
      - name: pretty
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Output pretty JSON'
      - name: meta
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Loads data from the endpoints found in the ''meta'' part of the response. Comma-separated
          list. Example: meta=site,likes'
      - name: fields
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Returns specified fields only. Comma-separated list. Example: fields=ID,title'
      - name: callback
        in: query
        required: false
        schema:
          type: string
        description: An optional JSONP callback function.
      - name: urls
        in: query
        required: false
        schema:
          type: array
          items: {}
        description: Array of endpoints to call
  /freshly-pressed/:
    get:
      operationId: getFreshlyPressed
      summary: Get a list of Freshly Pressed posts.
      description: Get a list of Freshly Pressed posts.
      tags:
      - freshly-pressed
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  ID:
                    type: integer
                    description: The post ID.
                  site_ID:
                    type: integer
                    description: The site ID.
                  author:
                    type: object
                    description: The author of the post.
                  date:
                    type: string
                    format: date-time
                    description: The post's creation time.
                  modified:
                    type: string
                    format: date-time
                    description: The post's most recent update time.
                  title:
                    type: string
                    description: context dependent.
                  URL:
                    type: string
                    format: uri
                    description: The full permalink URL to the post.
                  short_URL:
                    type: string
                    format: uri
                    description: The wp.me short URL.
                  content:
                    type: string
                    description: context dependent.
                  excerpt:
                    type: string
                    description: context dependent.
                  slug:
                    type: string
                    description: The name (slug) for the post, used in URLs.
                  guid:
                    type: string
                    description: The GUID for the post.
                  status:
                    type: string
                    description: 'publish: The post is published.; draft: The post is saved as a draft.; pending:
                      The post is pending editorial approval.; private: The post is published privately; future:
                      The post is scheduled for future publishing.; trash: The post is in the trash.; auto-draft:
                      The post is a placeholder for a new post.'
                    enum:
                    - publish
                    - draft
                    - pending
                    - private
                    - future
                    - trash
                    - auto-draft
                  sticky:
                    type: boolean
                    description: Is the post sticky?
                  password:
                    type: string
                    description: The plaintext password protecting the post, or, more likely, the empty string if
                      the post is not password protected.
                  parent:
                    type: string
                    description: A reference to the post's parent, if it has one.
                  type:
                    type: string
                    description: The post's post_type. Post types besides post, page and revision need to be whitelisted
                      using the rest_api_allowed_post_types filter.
                  comments_open:
                    type: boolean
                    description: Is the post open for comments?
                  pings_open:
                    type: boolean
                    description: Is the post open for pingbacks, trackbacks?
                  likes_enabled:
                    type: boolean
                    description: Is the post open to likes?
                  sharing_enabled:
                    type: boolean
                    description: Should sharing buttons show on this post?
                  comment_count:
                    type: integer
                    description: The number of comments for this post.
                  like_count:
                    type: integer
                    description: The number of likes for this post.
                  i_like:
                    type: boolean
                    description: Does the current user like this post?
                  is_reblogged:
                    type: boolean
                    description: Did the current user reblog this post?
                  is_following:
                    type: boolean
                    description: Is the current user following this blog?
                  global_ID:
                    type: string
                    description: A unique WordPress.com-wide representation of a post.
                  featured_image:
                    type: string
                    format: uri
                    description: The URL to the featured image for this post if it has one.
                  post_thumbnail:
                    type: object
                    description: The attachment object for the featured image if it has one.
                  format:
                    type: string
                    description: 'standard: Standard; aside: Aside; chat: Chat; gallery: Gallery; link: Link; image:
                      Image; quote: Quote; status: Status; video: Video; audio: Audio'
                    enum:
                    - standard
                    - aside
                    - chat
                    - gallery
                    - link
                    - image
                    - quote
                    - status
                    - video
                    - audio
                  geo:
                    type: string
                  menu_order:
                    type: integer
                    description: (Pages Only) The order pages should appear in.
                  publicize_URLs:
                    type: array
                    items: {}
                    description: Array of Facebook URLs published by this post.
                  tags:
                    type: object
                    description: Hash of tags (keyed by tag name) applied to the post.
                  categories:
                    type: object
                    description: Hash of categories (keyed by category name) applied to the post.
                  attachments:
                    type: object
                    description: Hash of post attachments (keyed by attachment ID).
                  metadata:
                    type: array
                    items: {}
                    description: Array of post metadata keys and values. All unprotected meta keys are available
                      by default for read requests. Both unprotected and protected meta keys are available for authenticated
                      requests with access. Protected meta keys can be made available with the rest_api_allowed_public_metadata
                      filter.
                  meta:
                    type: object
                    description: API result meta data
                  current_user_can:
                    type: object
                    description: List of permissions. Note, deprecated in favor of `capabilities`
                  capabilities:
                    type: object
                    description: List of post-specific permissions for the user; publish_post, edit_post, delete_post
                  date_range:
                    type: object
                    description: date range covered by current results.
                  number:
                    type: integer
                    description: The number of posts brought back by current query.
                  posts:
                    type: array
                    items: {}
                    description: An array of post objects, with added Freshly Pressed info, in the editorial property
                      for each post.
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authorization required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
      - name: http_envelope
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Some environments (like in-browser JavaScript or Flash) block or divert
          responses with a non-200 HTTP status code.  Setting this parameter will force the HTTP status code to
          always be 200.  The JSON response is wrapped in an "envelope" containing the "real" HTTP status code and
          headers.'
      - name: pretty
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Output pretty JSON'
      - name: meta
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Loads data from the endpoints found in the ''meta'' part of the response. Comma-separated
          list. Example: meta=site,likes'
      - name: fields
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Returns specified fields only. Comma-separated list. Example: fields=ID,title'
      - name: callback
        in: query
        required: false
        schema:
          type: string
        description: An optional JSONP callback function.
      - name: number
        in: query
        required: false
        schema:
          type: integer
        description: 'The number of posts to return. Default: 10. Limit: 40. Default: 10.'
      - name: after
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Return posts picked on or after the specified datetime.
      - name: before
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Return posts picked on or before the specified datetime.
      - name: content_width
        in: query
        required: false
        schema:
          type: integer
        description: 'When in context=display, images/embeds in post content will be set to the desired maximum
          width. Default: 480.'
      - name: thumb_width
        in: query
        required: false
        schema:
          type: integer
        description: 'Desired width of thumbnail images, in pixels. Default: 252.'
      - name: thumb_height
        in: query
        required: false
        schema:
          type: integer
        description: 'Desired height of thumbnail images, in pixels. Default: 160.'
      - name: format
        in: query
        required: false
        schema:
          type: string
        description: 'Output format. Accepts "json" or "rss". Default: json. Default: ''json''.'
  /insights:
    get:
      operationId: getInsights
      summary: Get a list of stats/metrics/insights that the current user has access to.
      description: Get a list of stats/metrics/insights that the current user has access to.
      tags:
      - insights
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  ID:
                    type: integer
                    description: Unique ID for a WordPress.com Application
                  name:
                    type: string
                    description: Name of WordPress.com Application
                  insights:
                    type: array
                    items: {}
                    description: List of metrics
                  today:
                    type: array
                    items: {}
                    description: A list of today's metrics
                  has_custom:
                    type: boolean
                    description: Does a report have custom (whitelisted) stats?
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authorization required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - display
          - edit
        description: 'display: (default) Formats the output as HTML for display.  Shortcodes are parsed, paragraph
          tags are added, etc..; edit: Formats the output for editing.  Shortcodes are left unparsed, significant
          whitespace is kept, etc..'
      - name: http_envelope
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Some environments (like in-browser JavaScript or Flash) block or divert
          responses with a non-200 HTTP status code.  Setting this parameter will force the HTTP status code to
          always be 200.  The JSON response is wrapped in an "envelope" containing the "real" HTTP status code and
          headers.'
      - name: pretty
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Output pretty JSON'
      - name: meta
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Loads data from the endpoints found in the ''meta'' part of the response. Comma-separated
          list. Example: meta=site,likes'
      - name: fields
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Returns specified fields only. Comma-separated list. Example: fields=ID,title'
      - name: callback
        in: query
        required: false
        schema:
          type: string
        description: An optional JSONP callback function.
  /insights/{slug}:
    get:
      operationId: getInsightsBySlug
      summary: Get raw data for a particular graph.
      description: Get raw data for a particular graph.
      tags:
      - insights
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  points:
                    type: integer
                    description: The number of datapoints returned.
                  data:
                    type: array
                    items: {}
                    description: Numbers of actions by timestamp.
                  summaries:
                    type: array
                    items: {}
                    description: Summary for the current day/week/month/year/decade, including % change.
                  started_tracking:
                    type: string
                    description: The date stats began collecting.
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authorization required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
        description: Report slug (rest-api-calls, rest-api-writes, etc). If a slash is present, it must be urlencoded.
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - display
          - edit
        description: 'display: (default) Formats the output as HTML for display.  Shortcodes are parsed, paragraph
          tags are added, etc..; edit: Formats the output for editing.  Shortcodes are left unparsed, significant
          whitespace is kept, etc..'
      - name: http_envelope
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Some environments (like in-browser JavaScript or Flash) block or divert
          responses with a non-200 HTTP status code.  Setting this parameter will force the HTTP status code to
          always be 200.  The JSON response is wrapped in an "envelope" containing the "real" HTTP status code and
          headers.'
      - name: pretty
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Output pretty JSON'
      - name: meta
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Loads data from the endpoints found in the ''meta'' part of the response. Comma-separated
          list. Example: meta=site,likes'
      - name: fields
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Returns specified fields only. Comma-separated list. Example: fields=ID,title'
      - name: callback
        in: query
        required: false
        schema:
          type: string
        description: An optional JSONP callback function.
      - name: unit
        in: query
        required: false
        schema:
          type: string
        description: By default, weekly stats are provided in the data array. You can also pass daily, monthly,
          or cumulative to get totals for different time periods.
      - name: after
        in: query
        required: false
        schema:
          type: integer
        description: Return data only since the specified UNIX time.
      - name: before
        in: query
        required: false
        schema:
          type: integer
        description: Return data collected on or before the specified UNIX time.
  /jetpack-blogs/:
    get:
      operationId: getJetpackBlogs
      summary: Get a list of your Jetpack-enabled blogs.
      description: Get a list of your Jetpack-enabled blogs.
      tags:
      - site
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Was the operation successful?
                  blogs:
                    type: array
                    items: {}
                    description: List of Jetpack-enabled blogs
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authorization required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - display
          - edit
        description: 'display: (default) Formats the output as HTML for display.  Shortcodes are parsed, paragraph
          tags are added, etc..; edit: Formats the output for editing.  Shortcodes are left unparsed, significant
          whitespace is kept, etc..'
      - name: http_envelope
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Some environments (like in-browser JavaScript or Flash) block or divert
          responses with a non-200 HTTP status code.  Setting this parameter will force the HTTP status code to
          always be 200.  The JSON response is wrapped in an "envelope" containing the "real" HTTP status code and
          headers.'
      - name: pretty
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Output pretty JSON'
      - name: meta
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Loads data from the endpoints found in the ''meta'' part of the response. Comma-separated
          list. Example: meta=site,likes'
      - name: fields
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Returns specified fields only. Comma-separated list. Example: fields=ID,title'
      - name: callback
        in: query
        required: false
        schema:
          type: string
        description: An optional JSONP callback function.
  /jetpack-blogs/{blog_id}/:
    get:
      operationId: getJetpackBlogsByBlogId
      summary: Get Jetpack settings.
      description: Get Jetpack settings.
      tags:
      - site
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Was the operation successful?
                  settings:
                    type: array
                    items: {}
                    description: Available settings.
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authorization required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
      - name: blog_id
        in: path
        required: true
        schema:
          type: integer
        description: The blog id
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - display
          - edit
        description: 'display: (default) Formats the output as HTML for display.  Shortcodes are parsed, paragraph
          tags are added, etc..; edit: Formats the output for editing.  Shortcodes are left unparsed, significant
          whitespace is kept, etc..'
      - name: http_envelope
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Some environments (like in-browser JavaScript or Flash) block or divert
          responses with a non-200 HTTP status code.  Setting this parameter will force the HTTP status code to
          always be 200.  The JSON response is wrapped in an "envelope" containing the "real" HTTP status code and
          headers.'
      - name: pretty
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Output pretty JSON'
      - name: meta
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Loads data from the endpoints found in the ''meta'' part of the response. Comma-separated
          list. Example: meta=site,likes'
      - name: fields
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Returns specified fields only. Comma-separated list. Example: fields=ID,title'
      - name: callback
        in: query
        required: false
        schema:
          type: string
        description: An optional JSONP callback function.
    post:
      operationId: postJetpackBlogsByBlogId
      summary: Update Jetpack settings.
      description: Update Jetpack settings.
      tags:
      - site
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Was the operation successful?
                  message:
                    type: string
                    description: Message describing the error code.
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Authorization required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
      - name: blog_id
        in: path
        required: true
        schema:
          type: integer
        description: The blog id
      - name: context
        in: query
        required: false
        schema:
          type: string
          enum:
          - display
          - edit
        description: 'display: (default) Formats the output as HTML for display.  Shortcodes are parsed, paragraph
          tags are added, etc..; edit: Formats the output for editing.  Shortcodes are left unparsed, significant
          whitespace is kept, etc..'
      - name: http_envelope
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Some environments (like in-browser JavaScript or Flash) block or divert
          responses with a non-200 HTTP status code.  Setting this parameter will force the HTTP status code to
          always be 200.  The JSON response is wrapped in an "envelope" containing the "real" HTTP status code and
          headers.'
      - name: pretty
        in: query
        required: false
        schema:
          type: boolean
        description: 'false: (default); true: Output pretty JSON'
      - name: meta
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Loads data from the endpoints found in the ''meta'' part of the response. Comma-separated
          list. Example: meta=site,likes'
      - name: fields
        in: query
        required: false
        schema:
          type: string
        description: 'Optional. Returns specified fields only. Comma-separated list. Example: fields=ID,title'
      - name: callback
        in: query
        required: false
        schema:
          type: string
        description: An optional JSONP callback function.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                monitor_active:
                  type: st

# --- truncated at 32 KB (1170 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/automattic/refs/heads/main/openapi/automattic-wordpress-com-rest-v1-1-openapi.yml
Where this information came from

This is an independent, third-party profile of WordPress.com REST API v1.1, published by API Evangelist. We do not operate, host, resell, or support these APIs, and we are not affiliated with or endorsed by the company unless stated above. Everything here is built from publicly available information — the company's own site, developer portal, documentation, public repositories, and the specifications it publishes for public use. Nothing is obtained by breaching a system, defeating an access control, or using credentials.

The Kin Score and Agent Readiness rating are independently calculated assessments of a company's public API artifacts, scored against a published rubric. They are not certifications, endorsements, security assessments, or audits.

Corrections, re-scores, and removal are free — no partnership or purchase required, and you do not need to justify the request. A removed company is recorded as unrated, never scored zero for having asked. Acknowledgement within one business day; removal within two.

info@apievangelist.com · Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.