Automattic Read API
The read API from Automattic — 52 operation(s) for read.
The read API from Automattic — 52 operation(s) for read.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/automattic-read-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Automattic Read API
x-derived-by: API Evangelist enrichment pipeline
x-refined-note:
- x-derived-from differs across the merged source definitions and was not carried
version: '1.0'
description: 'Operations tagged read across 4 of this provider''s published API definitions: automattic-wordpress-com-rest-v1-1-openapi.yml, automattic-wordpress-com-rest-v1-2-openapi.yml, automattic-wordpress-com-rest-v1-3-openapi.yml, automattic-wordpress-com-wpcom-v2-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://public-api.wordpress.com/rest/v1.1
- url: https://public-api.wordpress.com/rest/v1.2
- url: https://public-api.wordpress.com/rest/v1.3
- url: https://public-api.wordpress.com
security:
- bearerAuth: []
tags:
- name: read
paths:
/read/email-settings/:
get:
operationId: getReadEmailSettings
summary: Returns the email settings
description: Returns the email settings
tags:
- read
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
settings:
type: array
items: {}
description: The 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: 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: postReadEmailSettings
summary: Returns the email settings
description: Returns the email settings
tags:
- read
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
settings:
type: array
items: {}
description: The updated 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: 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:
mail_option:
type: string
description: 'The mail format: html or text'
delivery_day:
type: integer
description: 'The index of the day of the week to send the email: 0 = Sunday, 1 = Monday, etc.'
delivery_hour:
type: integer
description: 'The index of the hour of the day to send the email: 0 = 12am, 1 = 1am, etc.'
blocked:
type: boolean
description: If this user has blocked WP.com emails
frequency:
type: string
description: The default email frequency for this user
servers:
- url: https://public-api.wordpress.com/rest/v1.1
/read/feed/:
get:
operationId: getReadFeed
summary: Get the ID and subscribe URL of one or more matching feeds by domain or URL.
description: Get the ID and subscribe URL of one or more matching feeds by domain or URL.
tags:
- read
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
feeds:
type: array
items: {}
description: Found feeds, represented by their subscribe URL and feed ID.
'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.
- name: url
in: query
required: false
schema:
type: string
description: The domain or URL of the site you would like to retrieve the feed(s) ID for. It MUST be URL-encoded.
- name: q
in: query
required: false
schema:
type: string
description: Query text
- name: offset
in: query
required: false
schema:
type: integer
description: offset to page results to
- name: number
in: query
required: false
schema:
type: integer
description: number of results to return
- name: exclude_followed
in: query
required: false
schema:
type: boolean
description: 'Exclude already followed sites in search results Default: true.'
- name: sort
in: query
required: false
schema:
type: string
description: relevance or last_updated
- name: page_handle
in: query
required: false
schema:
type: string
description: A handle for getting the next page of results when sorting by last_updated
- name: algorithm
in: query
required: false
schema:
type: string
description: Specify a particular algorithm to use to choose posts (optional)
servers:
- url: https://public-api.wordpress.com/rest/v1.1
/read/feed/{feed_url_or_id}:
get:
operationId: getReadFeedByFeedUrlOrId
summary: Get details about a feed.
description: Get details about a feed.
tags:
- read
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
blog_ID:
type: string
description: The site ID, 0 if this not a hosted site.
feed_ID:
type: string
description: The ID for this feed
name:
type: string
description: The name of the site
URL:
type: string
description: The main URL for the site
feed_URL:
type: string
description: The feed URL that WordPress polls for changes
subscribers_count:
type: integer
description: The number of subscribers for this feed
is_following:
type: boolean
description: Is the current user following this feed?
last_update:
type: string
description: The timestamp of the most recent entry in the feed
last_checked:
type: string
description: The timestamp of when we last checked the feed
marked_for_refresh:
type: boolean
description: Is the feed queued up to be refreshed soon?
next_refresh_time:
type: string
description: The timestamp for when we are going to refresh this feed
'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: feed_url_or_id
in: path
required: true
schema:
type: string
description: The URL for the feed you would like more details on, or the id of the Feed. If a URL is passed, it MUST be URL-encoded.
- 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.
servers:
- url: https://public-api.wordpress.com/rest/v1.1
/read/following/:
get:
operationId: getReadFollowing
summary: Get a list of posts from the blogs a user follows.
description: Get a list of posts from the blogs a user follows.
tags:
- read
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.
'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. Limit: 40. Default: 10.'
- name: page
in: query
required: false
schema:
type: integer
description: Return the Nth 1-indexed page of posts.
- name: order
in: query
required: false
schema:
type: string
enum:
- DESC
- ASC
description: 'DESC: (default) Return posts in descending order. For dates, that means newest to oldest.; ASC: Return posts in ascending order. For dates, that means oldest to newest.'
- name: after
in: query
required: false
schema:
type: string
format: date-time
description: Return posts dated after the specified datetime.
- name: before
in: query
required: false
schema:
type: string
format: date-time
description: Return posts dated before the specified datetime.
- name: feed_id
in: query
required: false
schema:
type: integer
description: The feed_id to fetch the posts from.
servers:
- url: https://public-api.wordpress.com/rest/v1.1
/read/following/mine:
get:
operationId: getReadFollowingMine
summary: Get a list of the feeds the user is following.
description: Get a list of the feeds the user is following.
tags:
- read
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
subscriptions:
type: array
items: {}
description: An array of the feeds the user subscribes to.
'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.
servers:
- url: https://public-api.wordpress.com/rest/v1.1
/read/following/mine/delete:
post:
operationId: postReadFollowingMineDelete
summary: Unfollow the specified blog.
description: Unfollow the specified blog.
tags:
- read
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
subscribed:
type: boolean
description: Is the user subscribed to the blog?
'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
r
# --- truncated at 32 KB (281 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/automattic/refs/heads/main/openapi/automattic-read-api-openapi.yml