Offerpad Posts API

WordPress posts resource routes.

Operations 11

GET /wp/v2/posts List posts #
POST /wp/v2/posts Create posts #
GET /wp/v2/posts/{id} Retrieve posts #
POST /wp/v2/posts/{id} Create posts #
DELETE /wp/v2/posts/{id} Delete posts #
GET /wp/v2/posts/{id}/autosaves Retrieve posts autosaves #
POST /wp/v2/posts/{id}/autosaves Create posts autosaves #
GET /wp/v2/posts/{parent}/autosaves/{id} Retrieve posts autosaves #
GET /wp/v2/posts/{parent}/revisions Retrieve posts revisions #
GET /wp/v2/posts/{parent}/revisions/{id} Retrieve posts revisions #
DELETE /wp/v2/posts/{parent}/revisions/{id} Delete posts revisions #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/offerpad-posts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

offerpad-posts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Offerpad WordPress REST API (wp/v2) Posts 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: posts
  description: WordPress posts resource routes.
paths:
  /wp/v2/posts:
    get:
      operationId: listPosts
      summary: List posts
      tags:
      - posts
      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: author
        schema:
          type: array
          default: []
          items:
            type: integer
        required: false
        description: Limit result set to posts assigned to specific authors.
        in: query
      - name: author_exclude
        schema:
          type: array
          default: []
          items:
            type: integer
        required: false
        description: Ensure result set excludes posts assigned to specific authors.
        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: categories
        schema:
          type:
          - object
          - array
        required: false
        description: Limit result set to items with specific terms assigned in the categories taxonomy.
        in: query
      - name: categories_exclude
        schema:
          type:
          - object
          - array
        required: false
        description: Limit result set to items except those with specific terms assigned in the categories taxonomy.
        in: query
      - name: tags
        schema:
          type:
          - object
          - array
        required: false
        description: Limit result set to items with specific terms assigned in the tags taxonomy.
        in: query
      - name: tags_exclude
        schema:
          type:
          - object
          - array
        required: false
        description: Limit result set to items except those with specific terms assigned in the tags taxonomy.
        in: query
      - name: sticky
        schema:
          type: boolean
        required: false
        description: Limit result set to items that are sticky.
        in: query
      - name: ignore_sticky
        schema:
          type: boolean
          default: true
        required: false
        description: Whether to ignore sticky posts or not.
        in: query
      - name: format
        schema:
          type: array
          items:
            type: string
            enum:
            - standard
            - aside
            - chat
            - gallery
            - link
            - image
            - quote
            - status
            - video
            - audio
        required: false
        description: Limit result set to items assigned one or more given formats.
        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: createPosts
      summary: Create posts
      tags:
      - posts
      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.
                author:
                  type: integer
                  description: The ID for the author of the post.
                excerpt:
                  type: object
                  description: The excerpt for the post.
                featured_media:
                  type: integer
                  description: The ID of the featured media for the post.
                comment_status:
                  type: string
                  enum:
                  - open
                  - closed
                  description: Whether or not comments are open on the post.
                ping_status:
                  type: string
                  enum:
                  - open
                  - closed
                  description: Whether or not the post can be pinged.
                format:
                  type: string
                  enum:
                  - standard
                  - aside
                  - chat
                  - gallery
                  - link
                  - image
                  - quote
                  - status
                  - video
                  - audio
                  description: The format for the post.
                meta:
                  type: object
                  description: Meta fields.
                sticky:
                  type: boolean
                  description: Whether or not the post should be treated as sticky.
                template:
                  type: string
                  description: The theme file to use to display the post.
                categories:
                  type: array
                  items:
                    type: integer
                  description: The terms assigned to the post in the category taxonomy.
                tags:
                  type: array
                  items:
                    type: integer
                  description: The terms assigned to the post in the post_tag 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':
          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/posts/{id}:
    get:
      operationId: getPostsById
      summary: Retrieve posts
      tags:
      - posts
      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':
          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: createPostsById
      summary: Create posts
      tags:
      - posts
      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.
                author:
                  type: integer
                  description: The ID for the author of the post.
                excerpt:
                  type: object
                  description: The excerpt for the post.
                featured_media:
                  type: integer
                  description: The ID of the featured media for the post.
                comment_status:
                  type: string
                  enum:
                  - open
                  - closed
                  description: Whether or not comments are open on the post.
                ping_status:
                  type: string
                  enum:
                  - open
                  - closed
                  description: Whether or not the post can be pinged.
                format:
                  type: string
                  enum:
                  - standard
                  - aside
                  - chat
                  - gallery
                  - link
                  - image
                  - quote
                  - status
                  - video
                  - audio
                  description: The format for the post.
                meta:
                  type: object
                  description: Meta fields.
                sticky:
                  type: boolean
                  description: Whether or not the post should be treated as sticky.
                template:
                  type: string
                  description: The theme file to use to display the post.
                categories:
                  type: array
                  items:
                    type: integer
                  description: The terms assigned to the post in the category taxonomy.
                tags:
                  type: array
                  items:
                    type: integer
                  description: The terms assigned to the post in the post_tag 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':
          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: deletePostsById
      summary: Delete posts
      tags:
      - posts
      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/posts/{id}/autosaves:
    get:
      operationId: getPostsByIdAutosaves
      summary: Retrieve posts autosaves
      tags:
      - posts
      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: createPostsByIdAutosaves
      summary: Create posts autosaves
      tags:
      - posts
      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.
                author:
                  type: integer
                  description: The ID for the author of the post.
                excerpt:
                  type: object
                  description: The excerpt for the post.
                featured_media:
                  type: integer
                  description: The ID of the featured media for the post.
                comment_status:
                  type: string
                  enum:
                  - open
                  - closed
                  description: Whether or not comments are open on the post.
                ping_status:
                  type: string
                  enum:
                  - open
                  - closed
                  description: Whether or not the post can be pinged.
                format:
                  type: string
                  enum:
                  - standard
                  - aside
                  - chat
                  - gallery
                  - link
                  - image
                  - quote
                  - status
                  - video
                  - audio
                  description: The format for the post.
                meta:
                  type: object
                  description: Meta fields.
                sticky:
                  type: boolean
                  description: Whether or not the post should be treated as sticky.
                template:
                  type: string
                  description: The theme file to use to display the post.
                categories:
                  type: array
                  items:
                    type: integer
                  description: The terms assigned to the post in the category taxonomy.
                tags:
                  type: array
                  items:
                    type: integer
                  description: The terms assigned to the post in the post_tag 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':
          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/posts/{parent}/autosaves/{id}:
    get:
      operationId: getPostsByParentAutosavesById
      summary: Retrieve posts autosaves
      tags:
      - posts
      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'
  /wp/v2/posts/{parent}/revisions:
    get:
      operationId: getPostsByParentRevisions
      summary: Retrieve posts revisions
      tags:
      - posts
      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
        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: 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: 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:
          - date
          - id
          - include
          - relevance
          - slug
          - include_slugs
          - title
          default: date
        required: false
        description: Sort collection by object attribute.
        in: query
      response

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