Automattic Menus API
The menus API from Automattic — 6 operation(s) for menus.
The menus API from Automattic — 6 operation(s) for menus.
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-menus-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 Menus 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 menus across 2 of this provider''s published API definitions: automattic-wordpress-com-rest-v1-1-openapi.yml, automattic-wordpress-com-wp-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
security:
- bearerAuth: []
tags:
- name: menus
paths:
/sites/{site}/menus:
get:
operationId: getSitesBySiteMenus
summary: Get a list of all navigation menus.
description: Get a list of all navigation menus.
tags:
- menus
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
menus:
type: array
items: {}
description: "A list of menu objects.\n\t\t\tA menu object contains a name, items, locations, etc.\n\t\t\tCheck the example response for the full structure.\n\t\t\t\n\t\t\tItem objects contain fields relating to that item, e.g. id, type, content_id,\n\t\t\tbut they can also contain other items objects - this nesting represents parents\n\t\t\tand child items in the item tree."
locations:
type: array
items: {}
description: Locations where menus can be placed. List of objects, one per location.
'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: site
in: path
required: true
schema:
type: string
description: Site ID or domain
- 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
/sites/{site}/menus/new:
post:
operationId: postSitesBySiteMenusNew
summary: Create a new navigation menu.
description: Create a new navigation menu.
tags:
- menus
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: Newly created menu 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: site
in: path
required: true
schema:
type: string
description: Site ID or domain
- 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:
name:
type: string
description: Name of menu
servers:
- url: https://public-api.wordpress.com/rest/v1.1
/sites/{site}/menus/{menu_id}:
get:
operationId: getSitesBySiteMenusByMenuId
summary: Get a single navigation menu.
description: Get a single navigation menu.
tags:
- menus
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
menu:
type: object
description: "A menu object.\n\t\t\tA menu object contains a name, items, locations, etc.\n\t\t\tCheck the example response for the full structure.\n\t\t\t\n\t\t\tItem objects contain fields relating to that item, e.g. id, type, content_id,\n\t\t\tbut they can also contain other items objects - this nesting represents parents\n\t\t\tand child items in the item tree."
'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: site
in: path
required: true
schema:
type: string
description: Site ID or domain
- name: menu_id
in: path
required: true
schema:
type: integer
description: Menu 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: postSitesBySiteMenusByMenuId
summary: Update a navigation menu.
description: Update a navigation menu.
tags:
- menus
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
menu:
type: object
description: Updated menu 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: site
in: path
required: true
schema:
type: string
description: Site ID or domain
- name: menu_id
in: path
required: true
schema:
type: integer
description: Menu 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:
name:
type: string
description: Name of menu
items:
type: array
items: {}
description: "A list of menu item objects.\n\t\t\t\n\t\t\tItem objects contain fields relating to that item, e.g. id, type, content_id,\n\t\t\tbut they can also contain other items objects - this nesting represents parents\n\t\t\tand child items in the item tree."
servers:
- url: https://public-api.wordpress.com/rest/v1.1
/sites/{site}/menus/{menu_id}/delete:
post:
operationId: postSitesBySiteMenusByMenuIdDelete
summary: Delete a navigation menu
description: Delete a navigation menu
tags:
- menus
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
deleted:
type: boolean
description: Has the menu been deleted?
'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: site
in: path
required: true
schema:
type: string
description: Site ID or domain
- name: menu_id
in: path
required: true
schema:
type: integer
description: Menu 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.
servers:
- url: https://public-api.wordpress.com/rest/v1.1
/wp/v2/sites/{wpcom_site}/menus:
get:
operationId: getWpV2SitesbyWpcomSiteMenus
summary: GET /wp/v2/sites/{wpcom_site}/menus
tags:
- menus
responses:
'200':
description: OK
'401':
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
parameters:
- name: wpcom_site
in: path
required: true
schema:
type: string
- name: context
in: query
required: false
schema:
type: string
enum:
- view
- embed
- edit
default: view
description: Scope under which the request is made; determines fields present in response.
- name: page
in: query
required: false
schema:
type: integer
default: 1
description: Current page of the collection.
- name: per_page
in: query
required: false
schema:
type: integer
default: 10
description: Maximum number of items to be returned in result set.
- name: search
in: query
required: false
schema:
type: string
description: Limit results to those matching a string.
- name: exclude
in: query
required: false
schema:
type: array
default: []
items:
type: integer
description: Ensure result set excludes specific IDs.
- name: include
in: query
required: false
schema:
type: array
default: []
items:
type: integer
description: Limit result set to specific IDs.
- name: offset
in: query
required: false
schema:
type: integer
description: Offset the result set by a specific number of items.
- name: order
in: query
required: false
schema:
type: string
enum:
- asc
- desc
default: asc
description: Order sort attribute ascending or descending.
- name: orderby
in: query
required: false
schema:
type: string
enum:
- id
- include
- name
- slug
- include_slugs
- term_group
- description
- count
default: name
description: Sort collection by term attribute.
- name: hide_empty
in: query
required: false
schema:
type: boolean
default: false
description: Whether to hide terms not assigned to any posts.
- name: post
in: query
required: false
schema:
type: integer
description: Limit result set to terms assigned to a specific post.
- name: slug
in: query
required: false
schema:
type: array
items:
type: string
description: Limit result set to terms with one or more specific slugs.
post:
operationId: postWpV2SitesbyWpcomSiteMenus
summary: POST /wp/v2/sites/{wpcom_site}/menus
tags:
- menus
responses:
'200':
description: OK
'401':
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
parameters:
- name: wpcom_site
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
description:
type: string
description: HTML description of the term.
name:
type: string
description: HTML title for the term.
slug:
type: string
description: An alphanumeric identifier for the term unique to its type.
meta:
type: object
description: Meta fields.
locations:
type: array
items:
type: string
description: The locations assigned to the menu.
auto_add:
type: boolean
description: Whether to automatically add top level pages to this menu.
required:
- name
servers:
- url: https://public-api.wordpress.com
/wp/v2/sites/{wpcom_site}/menus/{id}:
get:
operationId: getWpV2SitesbyWpcomSiteMenusbyId
summary: GET /wp/v2/sites/{wpcom_site}/menus/{id}
tags:
- menus
responses:
'200':
description: OK
'401':
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
parameters:
- name: wpcom_site
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
- name: context
in: query
required: false
schema:
type: string
enum:
- view
- embed
- edit
default: view
description: Scope under which the request is made; determines fields present in response.
post:
operationId: postWpV2SitesbyWpcomSiteMenusbyId
summary: POST /wp/v2/sites/{wpcom_site}/menus/{id}
tags:
- menus
responses:
'200':
description: OK
'401':
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
parameters:
- name: wpcom_site
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
description:
type: string
description: HTML description of the term.
name:
type: string
description: HTML title for the term.
slug:
type: string
description: An alphanumeric identifier for the term unique to its type.
meta:
type: object
description: Meta fields.
locations:
type: array
items:
type: string
description: The locations assigned to the menu.
auto_add:
type: boolean
description: Whether to automatically add top level pages to this menu.
put:
operationId: putWpV2SitesbyWpcomSiteMenusbyId
summary: PUT /wp/v2/sites/{wpcom_site}/menus/{id}
tags:
- menus
responses:
'200':
description: OK
'401':
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
parameters:
- name: wpcom_site
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
description:
type: string
description: HTML description of the term.
name:
type: string
description: HTML title for the term.
slug:
type: string
description: An alphanumeric identifier for the term unique to its type.
meta:
type: object
description: Meta fields.
locations:
type: array
items:
type: string
description: The locations assigned to the menu.
auto_add:
type: boolean
description: Whether to automatically add top level pages to this menu.
patch:
operationId: patchWpV2SitesbyWpcomSiteMenusbyId
summary: PATCH /wp/v2/sites/{wpcom_site}/menus/{id}
tags:
- menus
responses:
'200':
description: OK
'401':
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
parameters:
- name: wpcom_site
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
description:
type: string
description: HTML description of the term.
name:
type: string
description: HTML title for the term.
slug:
type: string
description: An alphanumeric identifier for the term unique to its type.
meta:
type: object
description: Meta fields.
locations:
type: array
items:
type: string
description: The locations assigned to the menu.
auto_add:
type: boolean
description: Whether to automatically add top level pages to this menu.
delete:
operationId: deleteWpV2SitesbyWpcomSiteMenusbyId
summary: DELETE /wp/v2/sites/{wpcom_site}/menus/{id}
tags:
- menus
responses:
'200':
description: OK
'401':
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/WPRestError'
parameters:
- name: wpcom_site
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
- name: force
in: query
required: false
schema:
type: boolean
default: false
description: Required to be true, as terms do not support trashing.
servers:
- url: https://public-api.wordpress.com
components:
schemas:
Error:
type: object
description: WordPress.com REST API error envelope (observed live).
properties:
error:
type: string
examples:
- not_found
message:
type: string
WPRestError:
type: object
description: WordPress REST API error envelope (observed on public-api.wordpress.com).
properties:
code:
type: string
example: rest_unauthorized
message:
type: string
example: Authentication required.
data:
type: object
properties:
status:
type: integer
example: 401
securitySchemes:
oauth2:
type: oauth2
description: WordPress.com OAuth 2.1 (see /.well-known/openid-configuration).
flows:
authorizationCode:
authorizationUrl: https://public-api.wordpress.com/oauth2-1/authorize
tokenUrl: https://public-api.wordpress.com/oauth2-1/token
refreshUrl: https://public-api.wordpress.com/oauth2-1/token
scopes:
global: ''
auth: ''
openid: ''
profile: ''
email: ''
users: ''
sites: ''
posts: ''
comments: ''
taxonomy: ''
follow: ''
sharing: ''
freshly-pressed: ''
notifications: ''
insights: ''
read: ''
stats: ''
media: ''
menus: ''
batch: ''
videos: ''
bearerAuth:
type: http
scheme: bearer
description: 'Authorization: Bearer <access_token>'
x-refined-from:
- automattic-wordpress-com-rest-v1-1-openapi.yml
- automattic-wordpress-com-wp-v2-openapi.yml