Offerpad WordPress REST API

The stock WordPress REST API served by Offerpad's WP Engine-hosted marketing site at https://www.offerpad.com/wp-json/. Confirmed live and anonymously readable on 2026-07-26 (HTTP 200, application/json, 387,532 bytes), the root discovery document self-describes 411 routes across 20 namespaces including wp/v2, yoast/v1, gf/v2 (Gravity Forms), redirection/v1 and elementor/v1, and advertises WordPress application passwords as its authentication scheme. This is a content-management surface for pages, posts, media and site metadata — it is NOT a real estate, listing, valuation or transaction API, and Offerpad does not document or support it as a developer product. It is catalogued here because it is the only publicly callable, machine-describable API found on any Offerpad host.

OpenAPI Specification

offerpad-wordpress-wp-v2-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Offerpad WordPress REST API (wp/v2)
  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)
tags:
- name: index
  description: WordPress index resource routes.
- name: block-directory
  description: WordPress block-directory resource routes.
- name: block-patterns
  description: WordPress block-patterns resource routes.
- name: block-renderer
  description: WordPress block-renderer resource routes.
- name: block-types
  description: WordPress block-types resource routes.
- name: blocks
  description: WordPress blocks resource routes.
- name: categories
  description: WordPress categories resource routes.
- name: comments
  description: WordPress comments resource routes.
- name: e-floating-buttons
  description: WordPress e-floating-buttons resource routes.
- name: elementor_library
  description: WordPress elementor_library resource routes.
- name: elementor_snippet
  description: WordPress elementor_snippet resource routes.
- name: font-collections
  description: WordPress font-collections resource routes.
- name: font-families
  description: WordPress font-families resource routes.
- name: global-styles
  description: WordPress global-styles resource routes.
- name: icons
  description: WordPress icons resource routes.
- name: locations
  description: WordPress locations resource routes.
- name: media
  description: WordPress media resource routes.
- name: menu-items
  description: WordPress menu-items resource routes.
- name: menu-locations
  description: WordPress menu-locations resource routes.
- name: menus
  description: WordPress menus resource routes.
- name: navigation
  description: WordPress navigation resource routes.
- name: pages
  description: WordPress pages resource routes.
- name: pattern-directory
  description: WordPress pattern-directory resource routes.
- name: plugins
  description: WordPress plugins resource routes.
- name: posts
  description: WordPress posts resource routes.
- name: review
  description: WordPress review resource routes.
- name: search
  description: WordPress search resource routes.
- name: settings
  description: WordPress settings resource routes.
- name: sidebars
  description: WordPress sidebars resource routes.
- name: states
  description: WordPress states resource routes.
- name: statuses
  description: WordPress statuses resource routes.
- name: tags
  description: WordPress tags resource routes.
- name: taxonomies
  description: WordPress taxonomies resource routes.
- name: template-parts
  description: WordPress template-parts resource routes.
- name: templates
  description: WordPress templates resource routes.
- name: themes
  description: WordPress themes resource routes.
- name: types
  description: WordPress types resource routes.
- name: users
  description: WordPress users resource routes.
- name: widget-types
  description: WordPress widget-types resource routes.
- name: widgets
  description: WordPress widgets resource routes.
- name: wp_pattern_category
  description: WordPress wp_pattern_category resource routes.
components:
  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.
  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
security: []
paths:
  /wp/v2:
    get:
      operationId: getNamespaceIndex
      summary: Get the wp/v2 namespace index
      tags:
      - index
      parameters:
      - name: namespace
        schema:
          default: wp/v2
        required: false
        in: query
      - name: context
        schema:
          default: view
        required: false
        in: query
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '400': &id001
          description: 'Invalid parameter(s). Probed live: {"code":"rest_invalid_param"}'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WPError'
        '401': &id002
          description: 'Authentication required or capability missing. Probed live: {"code":"rest_forbidden"}'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WPError'
        '404': &id003
          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/block-directory/search:
    get:
      operationId: listBlockDirectorySearch
      summary: List block directory search
      tags:
      - block-directory
      parameters:
      - name: context
        schema:
          type: string
          enum:
          - view
          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: 10
          minimum: 1
          maximum: 100
        required: false
        description: Maximum number of items to be returned in result set.
        in: query
      - name: term
        schema:
          type: string
          minLength: 1
        required: true
        description: Limit result set to blocks matching the search term.
        in: query
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
  /wp/v2/block-patterns/categories:
    get:
      operationId: listBlockPatternsCategories
      summary: List block patterns categories
      tags:
      - block-patterns
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
  /wp/v2/block-patterns/patterns:
    get:
      operationId: listBlockPatternsPatterns
      summary: List block patterns patterns
      tags:
      - block-patterns
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
  /wp/v2/block-renderer/{name}:
    get:
      operationId: getBlockRendererByName
      summary: Retrieve block renderer
      tags:
      - block-renderer
      parameters:
      - name: name
        in: path
        required: true
        schema:
          type: string
        description: Unique registered name for the block.
      - name: context
        schema:
          type: string
          enum: &id004
          - edit
          default: view
        required: false
        description: Scope under which the request is made; determines fields present in response.
        in: query
      - name: attributes
        schema:
          type: object
          default: &id005 []
        required: false
        description: Attributes for the block.
        in: query
      - name: post_id
        schema:
          type: integer
        required: false
        description: ID of the post context.
        in: query
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
    post:
      operationId: createBlockRendererByName
      summary: Create block renderer
      tags:
      - block-renderer
      parameters:
      - name: name
        in: path
        required: true
        schema:
          type: string
        description: Unique registered name for the block.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                context:
                  type: string
                  enum: *id004
                  default: view
                  description: Scope under which the request is made; determines fields present in response.
                attributes:
                  type: object
                  default: *id005
                  description: Attributes for the block.
                post_id:
                  type: integer
                  description: ID of the post context.
      security:
      - applicationPasswords: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '201':
          description: Resource created.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
  /wp/v2/block-types:
    get:
      operationId: listBlockTypes
      summary: List block types
      tags:
      - block-types
      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: namespace
        schema:
          type: string
        required: false
        description: Block namespace.
        in: query
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
  /wp/v2/block-types/{namespace}:
    get:
      operationId: getBlockTypesByNamespace
      summary: Retrieve block types
      tags:
      - block-types
      parameters:
      - name: namespace
        in: path
        required: true
        schema:
          type: string
        description: Block namespace.
      - 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': *id001
        '401': *id002
        '404': *id003
  /wp/v2/block-types/{namespace}/{name}:
    get:
      operationId: getBlockTypesByNamespaceByName
      summary: Retrieve block types
      tags:
      - block-types
      parameters:
      - name: name
        in: path
        required: true
        schema:
          type: string
        description: Block name.
      - name: namespace
        in: path
        required: true
        schema:
          type: string
        description: Block namespace.
      - 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': *id001
        '401': *id002
        '404': *id003
  /wp/v2/blocks:
    get:
      operationId: listBlocks
      summary: List blocks
      tags:
      - blocks
      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: 10
          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: desc
        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
          default: date
        required: false
        description: Sort collection by post 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: wp_pattern_category
        schema:
          type:
          - object
          - array
        required: false
        description: Limit result set to items with specific terms assigned in the wp_pattern_category taxonomy.
        in: query
      - name: wp_pattern_category_exclude
        schema:
          type:
          - object
          - array
        required: false
        description: Limit result set to items except those with specific terms assigned in the wp_pattern_category
          taxonomy.
        in: query
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
    post:
      operationId: createBlocks
      summary: Create blocks
      tags:
      - blocks
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                date:
                  type: string
                  format: date-time
                  description: The date the post was published, in the site's timezone.
                date_gmt:
                  type: string
                  format: date-time
                  description: The date the post was published, as GMT.
                slug:
                  type: string
                  description: An alphanumeric identifier for the post unique to its type.
                status:
                  type: string
                  enum:
                  - publish
                  - future
                  - draft
                  - pending
                  - private
                  - acf-disabled
                  description: A named status for the post.
                password:
                  type: string
                  description: A password to protect access to the content and excerpt.
                title:
                  type: object
                  description: The title for the post.
                content:
                  type: object
                  description: The content for the post.
                excerpt:
                  type: object
                  description: The excerpt for the post.
                meta:
                  type: object
                  description: Meta fields.
                template:
                  type: string
                  description: The theme file to use to display the post.
                wp_pattern_category:
                  type: array
                  items:
                    type: integer
                  description: The terms assigned to the post in the wp_pattern_category taxonomy.
      security:
      - applicationPasswords: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '201':
          description: Resource created.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
  /wp/v2/blocks/{id}:
    get:
      operationId: getBlocksById
      summary: Retrieve blocks
      tags:
      - blocks
      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
      - name: excerpt_length
        schema:
          type: integer
        required: false
        description: Override the default excerpt length.
        in: query
      - name: password
        schema:
          type: string
        required: false
        description: The password for the post if it is password protected.
        in: query
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
    post:
      operationId: createBlocksById
      summary: Create blocks
      tags:
      - blocks
      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:
                date:
                  type: string
                  format: date-time
                  description: The date the post was published, in the site's timezone.
                date_gmt:
                  type: string
                  format: date-time
                  description: The date the post was published, as GMT.
                slug:
                  type: string
                  description: An alphanumeric identifier for the post unique to its type.
                status:
                  type: string
                  enum:
                  - publish
                  - future
                  - draft
                  - pending
                  - private
                  - acf-disabled
                  description: A named status for the post.
                password:
                  type: string
                  description: A password to protect access to the content and excerpt.
                title:
                  type: object
                  description: The title for the post.
                content:
                  type: object
                  description: The content for the post.
                excerpt:
                  type: object
                  description: The excerpt for the post.
                meta:
                  type: object
                  description: Meta fields.
                template:
                  type: string
                  description: The theme file to use to display the post.
                wp_pattern_category:
                  type: array
                  items:
                    type: integer
                  description: The terms assigned to the post in the wp_pattern_category taxonomy.
      security:
      - applicationPasswords: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '201':
          description: Resource created.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
    delete:
      operationId: deleteBlocksById
      summary: Delete blocks
      tags:
      - blocks
      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': *id001
        '401': *id002
        '404': *id003
  /wp/v2/blocks/{id}/autosaves:
    get:
      operationId: getBlocksByIdAutosaves
      summary: Retrieve blocks autosaves
      tags:
      - blocks
      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': *id001
        '401': *id002
        '404': *id003
    post:
      operationId: createBlocksByIdAutosaves
      summary: Create blocks autosaves
      tags:
      - blocks
      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
                  description: The ID for the parent of the autosave.
                date:
                  type: string
                  format: date-time
                  description: The date the post was published, in the site's timezone.
                date_gmt:
                  type: string
                  format: date-time
                  description: The date the post was published, as GMT.
                slug:
                  type: string
                  description: An alphanumeric identifier for the post unique to its type.
                status:
                  type: string
                  enum:
                  - publish
                  - future
                  - draft
                  - pending
                  - private
                  - acf-disabled
                  description: A named status for the post.
                password:
                  type: string
                  description: A password to protect access to the content and excerpt.
                title:
                  type: object
                  description: The title for the post.
                content:
                  type: object
                  description: The content for the post.
                excerpt:
                  type: object
                  description: The excerpt for the post.
                meta:
                  type: object
                  description: Meta fields.
                template:
                  type: string
                  description: The theme file to use to display the post.
                wp_pattern_category:
                  type: array
                  items:
                    type: integer
                  description: The terms assigned to the post in the wp_pattern_category taxonomy.
      security:
      - applicationPasswords: []
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
        '201':
          description: Resource created.
          content:
            application/json:
              schema:
                type: object
        '400': *id001
        '401': *id002
        '404': *id003
  /wp/v2/blocks/{parent}/autosaves/{id}:
    get:
      operationId: getBlocksByParentAutosavesById
      summary: Retrieve blocks autosaves
      tags:
      - blocks
      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': *id001
        '401': *id002
        '404': *id003
  /wp/v2/blocks/{parent}/revisions:
    get:
      operationId: getBlocksByParentRevisions
      summary: Retrieve blocks revisions
      tags:
      - blocks
      parameters:
      - name: parent
        in: path
        required: true
        schema:
          type: integer
        description: The ID for the parent of the revision.
      - 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
          minimum: 1
          maximum: 100
        require

# --- truncated at 32 KB (389 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/offerpad/refs/heads/main/openapi/offerpad-wordpress-wp-v2-openapi.yml