ReCode Therapeutics Search API

Cross-content search across every REST-exposed post type.

OpenAPI Specification

recode-therapeutics-search-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: ReCode Therapeutics Content Search API
  version: 1.0.0
  summary: The anonymously readable WordPress REST content API behind recodetx.com.
  description: 'ReCode Therapeutics runs no developer program and markets no product API. The only machine-readable contract reachable from the public internet without credentials is the WordPress REST API registered at https://recodetx.com/wp-json/, which the site publishes as a consequence of running WordPress on WP Engine behind Cloudflare.


    This document is DERIVED by the API Evangelist enrichment pipeline from the route index the site itself publishes at https://recodetx.com/wp-json/ (376 routes across 16 namespaces) and was verified against live anonymous responses on 2026-08-05. **Only operations that actually returned data without credentials are modelled here.** Everything write-side (POST/PUT/PATCH/ DELETE on every collection), and the administrative namespaces the site also registers (`aioseo/v1`, `elementor/v1`, `elementor-pro/v1`, `elementor-ai/v1`, `redirection/v1`, `wpe_sign_on_plugin/v1`, `wp-site-health/v1`, `wp-block-editor/v1`, `wp-abilities/v1`), return 401 `rest_forbidden` anonymously and are deliberately omitted rather than documented as capabilities.


    What the surface actually yields: 82 press releases and publications, 18 corporate pages, a 305-item media library, two site-specific custom post types registered into `wp/v2` (`events`, 50 items — conference and investor appearances; and `values`, 6 items — the company''s stated values), the category and tag taxonomies, the registered type/status/taxonomy metadata, cross-content search, and the oEmbed 1.0 provider endpoint. Unlike many corporate WordPress installs, `content.rendered` IS populated on posts and pages here (5.7 KB on the most recent press release, 53 KB on the home page), so the API returns real prose and not just identity metadata.


    Note on `/wp/v2/users`: the site leaves author enumeration open, and the collection returns 200 with 5 author records anonymously. The operation is documented here because it is genuinely part of the observed surface, but API Evangelist deliberately packages no agent skill and no MCP tool against it, and records no individual from it. See `x-personal-data` on that operation.'
  contact:
    name: ReCode Therapeutics
    url: https://recodetx.com/
  license:
    name: Not stated
    url: https://recodetx.com/terms-conditions/
  x-derived-from: https://recodetx.com/wp-json/
  x-verified: '2026-08-05'
  x-upstream-contract: https://developer.wordpress.org/rest-api/
servers:
- url: https://recodetx.com/wp-json
  description: Production WordPress REST API for recodetx.com (WP Engine, fronted by Cloudflare).
tags:
- name: search
  description: Cross-content search across every REST-exposed post type.
paths:
  /wp/v2/search:
    get:
      operationId: searchContent
      tags:
      - search
      summary: Search across every REST-exposed post type
      description: Returns lightweight hits (id, title, url, type, subtype) across posts and the custom types. A search for `mrna` returned 79 hits spanning the `post` and `events` subtypes at verification. Use `subtype` to constrain to one collection.
      parameters:
      - name: search
        in: query
        required: true
        description: The search term.
        schema:
          type: string
      - name: type
        in: query
        description: Object type to search — `post` (any post type) or `term`.
        schema:
          type: string
          enum:
          - post
          - term
          default: post
      - name: subtype
        in: query
        description: Restrict to a registered subtype, e.g. `post`, `page`, `events`, `values`.
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          description: Search hits.
          headers:
            X-WP-Total:
              $ref: '#/components/headers/XWPTotal'
            X-WP-TotalPages:
              $ref: '#/components/headers/XWPTotalPages'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SearchResult'
components:
  parameters:
    page:
      name: page
      in: query
      description: 1-based page of the collection to return.
      schema:
        type: integer
        minimum: 1
        default: 1
    perPage:
      name: per_page
      in: query
      description: Items per page. Maximum 100 — a request for 101 is rejected with 400 `rest_invalid_param` (verified 2026-08-05).
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 10
  schemas:
    Links:
      type: object
      description: HAL-style link relations. `self`, `collection`, `about`, `author`, `replies`, `wp:featuredmedia`, `wp:attachment`, `wp:term`, and `curies` mapping the `wp:` prefix.
      additionalProperties: true
    SearchResult:
      type: object
      description: A lightweight cross-type search hit.
      properties:
        id:
          type: integer
        title:
          type: string
        url:
          type: string
          format: uri
        type:
          type: string
          enum:
          - post
          - term
        subtype:
          type: string
          description: The registered post type the hit came from, e.g. `post`, `events`.
        _links:
          $ref: '#/components/schemas/Links'
      required:
      - id
      - title
      - url
      - type
      - subtype
  headers:
    XWPTotal:
      description: Total number of items in the unpaged collection.
      schema:
        type: integer
    XWPTotalPages:
      description: Total number of pages available at the current per_page.
      schema:
        type: integer