openapi: 3.2.0 info: title: Offerpad WordPress REST API (wp/v2) Menu Items API version: 2.0.0 summary: The wp/v2 namespace of the WordPress REST API served by Offerpad's marketing site. description: DERIVED, NOT PUBLISHED BY OFFERPAD. Offerpad publishes no OpenAPI definition and does not document or support this surface as a developer product. This document was derived mechanically by API Evangelist from the live WordPress route-discovery document fetched from https://www.offerpad.com/wp-json/ on 2026-07-26 (411 routes across 20 namespaces; the wp/v2 namespace is captured here). Every path, method, parameter name, type, enum, default and description is copied verbatim from that discovery document. Response bodies are intentionally left as generic objects because the discovery document does not publish response schemas; error responses are grounded in payloads probed live against this host. This is a content-management surface for the marketing site - it is NOT a real estate, listing, valuation or transaction API. contact: name: Offerpad url: https://www.offerpad.com/contact/ x-apievangelist-method: derived x-apievangelist-source: openapi/offerpad-wp-json-discovery.json x-apievangelist-derived: '2026-07-26' x-upstream-documentation: https://developer.wordpress.org/rest-api/ servers: - url: https://www.offerpad.com/wp-json description: Offerpad marketing site (WP Engine) security: [] tags: - name: menu-items description: WordPress menu-items resource routes. paths: /wp/v2/menu-items: get: operationId: listMenuItems summary: List menu items tags: - menu-items parameters: - name: context schema: type: string enum: - view - embed - edit default: view required: false description: Scope under which the request is made; determines fields present in response. in: query - name: page schema: type: integer default: 1 minimum: 1 required: false description: Current page of the collection. in: query - name: per_page schema: type: integer default: 100 minimum: 1 maximum: 100 required: false description: Maximum number of items to be returned in result set. in: query - name: search schema: type: string required: false description: Limit results to those matching a string. in: query - name: after schema: type: string format: date-time required: false description: Limit response to posts published after a given ISO8601 compliant date. in: query - name: modified_after schema: type: string format: date-time required: false description: Limit response to posts modified after a given ISO8601 compliant date. in: query - name: before schema: type: string format: date-time required: false description: Limit response to posts published before a given ISO8601 compliant date. in: query - name: modified_before schema: type: string format: date-time required: false description: Limit response to posts modified before a given ISO8601 compliant date. in: query - name: exclude schema: type: array default: [] items: type: integer required: false description: Ensure result set excludes specific IDs. in: query - name: include schema: type: array default: [] items: type: integer required: false description: Limit result set to specific IDs. in: query - name: search_semantics schema: type: string enum: - exact required: false description: How to interpret the search input. in: query - name: offset schema: type: integer required: false description: Offset the result set by a specific number of items. in: query - name: order schema: type: string enum: - asc - desc default: asc required: false description: Order sort attribute ascending or descending. in: query - name: orderby schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title - menu_order default: menu_order required: false description: Sort collection by object attribute. in: query - name: search_columns schema: type: array default: [] items: type: string enum: - post_title - post_content - post_excerpt required: false description: Array of column names to be searched. in: query - name: slug schema: type: array items: type: string required: false description: Limit result set to posts with one or more specific slugs. in: query - name: status schema: type: array default: publish items: type: string enum: - publish - future - draft - pending - private - trash - auto-draft - inherit - request-pending - request-confirmed - request-failed - request-completed - acf-disabled - any required: false description: Limit result set to posts assigned one or more statuses. in: query - name: tax_relation schema: type: string enum: - AND - OR required: false description: Limit result set based on relationship between multiple taxonomies. in: query - name: menus schema: type: - object - array required: false description: Limit result set to items with specific terms assigned in the menus taxonomy. in: query - name: menus_exclude schema: type: - object - array required: false description: Limit result set to items except those with specific terms assigned in the menus taxonomy. in: query - name: menu_order schema: type: integer required: false description: Limit result set to posts with a specific menu_order value. in: query responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: 'Invalid parameter(s). Probed live: {"code":"rest_invalid_param"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: 'Authentication required or capability missing. Probed live: {"code":"rest_forbidden"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: 'No route matched, or the resource id is invalid. Probed live: {"code":"rest_no_route"} / {"code":"rest_post_invalid_id"}' content: application/json: schema: $ref: '#/components/schemas/WPError' post: operationId: createMenuItems summary: Create menu items tags: - menu-items requestBody: required: false content: application/json: schema: type: object properties: title: type: - string - object description: The title for the object. type: type: string enum: - taxonomy - post_type - post_type_archive - custom default: custom description: The family of objects originally represented, such as "post_type" or "taxonomy". status: type: string enum: - publish - future - draft - pending - private - acf-disabled default: publish description: A named status for the object. parent: type: integer default: 0 minimum: 0 description: The ID for the parent of the object. attr_title: type: string description: Text for the title attribute of the link element for this menu item. classes: type: array items: type: string description: Class names for the link element of this menu item. description: type: string description: The description of this menu item. menu_order: type: integer default: 1 minimum: 1 description: The DB ID of the nav_menu_item that is this item's menu parent, if any, otherwise 0. object: type: string description: The type of object originally represented, such as "category", "post", or "attachment". object_id: type: integer default: 0 minimum: 0 description: The database ID of the original object this menu item represents, for example the ID for posts or the term_id for categories. target: type: string enum: - _blank - '' description: The target attribute of the link element for this menu item. url: type: string format: uri description: The URL to which this menu item points. xfn: type: array items: type: string description: The XFN relationship expressed in the link of this menu item. menus: type: integer description: The terms assigned to the object in the nav_menu taxonomy. meta: type: object description: Meta fields. security: - applicationPasswords: [] responses: '200': description: Successful response. content: application/json: schema: type: object '201': description: Resource created. content: application/json: schema: type: object '400': description: 'Invalid parameter(s). Probed live: {"code":"rest_invalid_param"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: 'Authentication required or capability missing. Probed live: {"code":"rest_forbidden"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: 'No route matched, or the resource id is invalid. Probed live: {"code":"rest_no_route"} / {"code":"rest_post_invalid_id"}' content: application/json: schema: $ref: '#/components/schemas/WPError' /wp/v2/menu-items/{id}: get: operationId: getMenuItemsById summary: Retrieve menu items tags: - menu-items parameters: - name: id in: path required: true schema: type: integer description: Unique identifier for the post. - name: context schema: type: string enum: - view - embed - edit default: view required: false description: Scope under which the request is made; determines fields present in response. in: query responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: 'Invalid parameter(s). Probed live: {"code":"rest_invalid_param"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: 'Authentication required or capability missing. Probed live: {"code":"rest_forbidden"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: 'No route matched, or the resource id is invalid. Probed live: {"code":"rest_no_route"} / {"code":"rest_post_invalid_id"}' content: application/json: schema: $ref: '#/components/schemas/WPError' post: operationId: createMenuItemsById summary: Create menu items tags: - menu-items parameters: - name: id in: path required: true schema: type: integer description: Unique identifier for the post. requestBody: required: false content: application/json: schema: type: object properties: title: type: - string - object description: The title for the object. type: type: string enum: - taxonomy - post_type - post_type_archive - custom description: The family of objects originally represented, such as "post_type" or "taxonomy". status: type: string enum: - publish - future - draft - pending - private - acf-disabled description: A named status for the object. parent: type: integer minimum: 0 description: The ID for the parent of the object. attr_title: type: string description: Text for the title attribute of the link element for this menu item. classes: type: array items: type: string description: Class names for the link element of this menu item. description: type: string description: The description of this menu item. menu_order: type: integer minimum: 1 description: The DB ID of the nav_menu_item that is this item's menu parent, if any, otherwise 0. object: type: string description: The type of object originally represented, such as "category", "post", or "attachment". object_id: type: integer minimum: 0 description: The database ID of the original object this menu item represents, for example the ID for posts or the term_id for categories. target: type: string enum: - _blank - '' description: The target attribute of the link element for this menu item. url: type: string format: uri description: The URL to which this menu item points. xfn: type: array items: type: string description: The XFN relationship expressed in the link of this menu item. menus: type: integer description: The terms assigned to the object in the nav_menu taxonomy. meta: type: object description: Meta fields. security: - applicationPasswords: [] responses: '200': description: Successful response. content: application/json: schema: type: object '201': description: Resource created. content: application/json: schema: type: object '400': description: 'Invalid parameter(s). Probed live: {"code":"rest_invalid_param"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: 'Authentication required or capability missing. Probed live: {"code":"rest_forbidden"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: 'No route matched, or the resource id is invalid. Probed live: {"code":"rest_no_route"} / {"code":"rest_post_invalid_id"}' content: application/json: schema: $ref: '#/components/schemas/WPError' delete: operationId: deleteMenuItemsById summary: Delete menu items tags: - menu-items parameters: - name: id in: path required: true schema: type: integer description: Unique identifier for the post. - name: force schema: type: boolean default: false required: false description: Whether to bypass Trash and force deletion. in: query responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: 'Invalid parameter(s). Probed live: {"code":"rest_invalid_param"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: 'Authentication required or capability missing. Probed live: {"code":"rest_forbidden"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: 'No route matched, or the resource id is invalid. Probed live: {"code":"rest_no_route"} / {"code":"rest_post_invalid_id"}' content: application/json: schema: $ref: '#/components/schemas/WPError' /wp/v2/menu-items/{id}/autosaves: get: operationId: getMenuItemsByIdAutosaves summary: Retrieve menu items autosaves tags: - menu-items parameters: - name: id in: path required: true schema: type: string description: Path parameter id declared by the route regex. - name: parent schema: type: integer required: false description: The ID for the parent of the autosave. in: query - name: context schema: type: string enum: - view - embed - edit default: view required: false description: Scope under which the request is made; determines fields present in response. in: query responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: 'Invalid parameter(s). Probed live: {"code":"rest_invalid_param"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: 'Authentication required or capability missing. Probed live: {"code":"rest_forbidden"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: 'No route matched, or the resource id is invalid. Probed live: {"code":"rest_no_route"} / {"code":"rest_post_invalid_id"}' content: application/json: schema: $ref: '#/components/schemas/WPError' post: operationId: createMenuItemsByIdAutosaves summary: Create menu items autosaves tags: - menu-items parameters: - name: id in: path required: true schema: type: string description: Path parameter id declared by the route regex. requestBody: required: false content: application/json: schema: type: object properties: parent: type: integer minimum: 0 description: The ID for the parent of the object. title: type: - string - object description: The title for the object. type: type: string enum: - taxonomy - post_type - post_type_archive - custom description: The family of objects originally represented, such as "post_type" or "taxonomy". status: type: string enum: - publish - future - draft - pending - private - acf-disabled description: A named status for the object. attr_title: type: string description: Text for the title attribute of the link element for this menu item. classes: type: array items: type: string description: Class names for the link element of this menu item. description: type: string description: The description of this menu item. menu_order: type: integer minimum: 1 description: The DB ID of the nav_menu_item that is this item's menu parent, if any, otherwise 0. object: type: string description: The type of object originally represented, such as "category", "post", or "attachment". object_id: type: integer minimum: 0 description: The database ID of the original object this menu item represents, for example the ID for posts or the term_id for categories. target: type: string enum: - _blank - '' description: The target attribute of the link element for this menu item. url: type: string format: uri description: The URL to which this menu item points. xfn: type: array items: type: string description: The XFN relationship expressed in the link of this menu item. menus: type: integer description: The terms assigned to the object in the nav_menu taxonomy. meta: type: object description: Meta fields. security: - applicationPasswords: [] responses: '200': description: Successful response. content: application/json: schema: type: object '201': description: Resource created. content: application/json: schema: type: object '400': description: 'Invalid parameter(s). Probed live: {"code":"rest_invalid_param"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: 'Authentication required or capability missing. Probed live: {"code":"rest_forbidden"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: 'No route matched, or the resource id is invalid. Probed live: {"code":"rest_no_route"} / {"code":"rest_post_invalid_id"}' content: application/json: schema: $ref: '#/components/schemas/WPError' /wp/v2/menu-items/{parent}/autosaves/{id}: get: operationId: getMenuItemsByParentAutosavesById summary: Retrieve menu items autosaves tags: - menu-items parameters: - name: id in: path required: true schema: type: integer description: The ID for the autosave. - name: parent in: path required: true schema: type: integer description: The ID for the parent of the autosave. - name: context schema: type: string enum: - view - embed - edit default: view required: false description: Scope under which the request is made; determines fields present in response. in: query responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: 'Invalid parameter(s). Probed live: {"code":"rest_invalid_param"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: 'Authentication required or capability missing. Probed live: {"code":"rest_forbidden"}' content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: 'No route matched, or the resource id is invalid. Probed live: {"code":"rest_no_route"} / {"code":"rest_post_invalid_id"}' content: application/json: schema: $ref: '#/components/schemas/WPError' components: schemas: WPError: type: object description: WordPress REST error envelope, observed live on this host. properties: code: type: string description: Machine-readable error code, e.g. rest_no_route. message: type: string description: Human-readable error message. data: type: object properties: status: type: integer description: HTTP status code, repeated in the body. params: type: object description: Per-parameter validation messages (rest_invalid_param). details: type: object description: Per-parameter structured error detail. required: - code - message examples: - code: rest_post_invalid_id message: Invalid post ID. data: status: 404 securitySchemes: applicationPasswords: type: http scheme: basic description: WordPress application passwords, advertised by the discovery document at https://www.offerpad.com/wp-admin/authorize-application.php. Sent as HTTP Basic credentials. Required for write operations and for reads in the edit context; issuing a credential requires an Offerpad WordPress account, which is not self-serve.