openapi: 3.2.0 info: title: Neomorph Team API version: wp/v2 summary: Anonymously readable WordPress REST content API behind neomorph.com. description: The read-only content surface Neomorph exposes at https://neomorph.com/wp-json. Neomorph, Inc. is a venture-backed, clinical-stage biotechnology company at 5590 Morehouse Drive in San Diego, California, founded in 2020 to design molecular glue degraders that reshape E3 ubiquitin ligases into neomorphic surfaces and eliminate previously undruggable proteins. It runs no developer program and markets no product API. This document is an API Evangelist derivation of the WordPress `wp/v2` and `oembed/1.0` routes the site publishes, restricted to the operations verified to return data anonymously on 2026-08-26. See x-api-evangelist-provenance. contact: name: Neomorph, Inc. url: https://neomorph.com/contact/ x-api-evangelist-provenance: Derived by the API Evangelist enrichment pipeline from the live WordPress REST route index at https://neomorph.com/wp-json/ (432 routes across 23 namespaces) and from the per-route OPTIONS descriptors that deployment returns, verified against live anonymous responses on 2026-08-26. Every parameter and every response property below appears verbatim in that deployment's own route/schema descriptors, and every collection count in a description was read from the X-WP-Total response header on that date. Neomorph publishes no OpenAPI, no developer portal and no API reference for this surface; the humanURL in apis.yml points at the upstream WordPress REST handbook that defines the wp/v2 contract. Write operations and every authenticated route (/wp/v2/users, /wp/v2/settings, /wp/v2/menu-items, /wp/v2/block-types, /wp/v2/elementor_library, the wp-abilities/v1 namespace and the whole plugin-administration surface) are deliberately excluded - they were probed anonymously and returned 401/403. Nothing here was obtained with credentials. servers: - url: https://neomorph.com/wp-json description: Production content API tags: - name: Team description: Team custom post type - management, board of directors and scientific founders (19 published at harvest time). - name: Team Categories description: 'team_category taxonomy grouping the Team collection. Four terms are registered: Management (11), Board of Directors (7), Scientific Founders (4) and Scientific Advisory Board (0).' paths: /wp/v2/team: get: tags: - Team operationId: listTeam summary: List team description: 'Lists published items in the `team` collection. Team custom post type - management, board of directors and scientific founders (19 published at harvest time). Paginated; `X-WP-Total` and `X-WP-TotalPages` are returned as response headers and are exposed cross-origin via `Access-Control-Expose-Headers`. Anonymous read returned HTTP 200 with `X-WP-Total: 19` on 2026-08-26.' parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: per_page in: query description: Maximum number of items to be returned in result set. schema: type: integer default: 10 minimum: 1 maximum: 100 - name: search in: query description: Limit results to those matching a string. schema: type: string - name: after in: query description: Limit response to posts published after a given ISO8601 compliant date. schema: type: string format: date-time - name: modified_after in: query description: Limit response to posts modified after a given ISO8601 compliant date. schema: type: string format: date-time - name: before in: query description: Limit response to posts published before a given ISO8601 compliant date. schema: type: string format: date-time - name: modified_before in: query description: Limit response to posts modified before a given ISO8601 compliant date. schema: type: string format: date-time - name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array default: [] items: type: integer - name: include in: query description: Limit result set to specific IDs. schema: type: array default: [] items: type: integer - name: search_semantics in: query description: How to interpret the search input. schema: type: string enum: - exact - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: desc - name: orderby in: query description: Sort collection by post attribute. schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title default: date - name: search_columns in: query description: Array of column names to be searched. schema: type: array default: [] items: type: string enum: - post_title - post_content - post_excerpt - name: slug in: query description: Limit result set to posts with one or more specific slugs. schema: type: array items: type: string - name: status in: query description: Limit result set to posts assigned one or more statuses. 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 - leads - any - name: tax_relation in: query description: Limit result set based on relationship between multiple taxonomies. schema: type: string enum: - AND - OR - name: team_category in: query description: Limit result set to items with specific terms assigned in the team_category taxonomy. schema: type: - object - array oneOf: - type: array items: type: integer - type: object properties: terms: type: array default: [] items: type: integer include_children: type: boolean default: false operator: type: string enum: - AND - OR default: OR additionalProperties: false - name: team_category_exclude in: query description: Limit result set to items except those with specific terms assigned in the team_category taxonomy. schema: type: - object - array oneOf: - type: array items: type: integer - type: object properties: terms: type: array default: [] items: type: integer include_children: type: boolean default: false additionalProperties: false responses: '200': description: A page of team. headers: X-WP-Total: description: Total number of items in the collection. schema: type: integer X-WP-TotalPages: description: Total number of pages available. schema: type: integer content: application/json: schema: type: array items: $ref: '#/components/schemas/Team' '400': $ref: '#/components/responses/InvalidParam' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /wp/v2/team/{id}: get: tags: - Team operationId: getTeam summary: Get a team member description: Retrieves a single team member from the `team` collection by its numeric WordPress id. parameters: - name: id in: path description: Unique identifier for the post. schema: type: integer required: true - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: password in: query description: The password for the post if it is password protected. schema: type: string responses: '200': description: The requested team member. content: application/json: schema: $ref: '#/components/schemas/Team' '400': $ref: '#/components/responses/InvalidParam' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /wp/v2/team_category: get: tags: - Team Categories operationId: listTeamCategory summary: List team categories description: 'Lists published items in the `team_category` collection. team_category taxonomy grouping the Team collection. Four terms are registered: Management (11), Board of Directors (7), Scientific Founders (4) and Scientific Advisory Board (0). Paginated; `X-WP-Total` and `X-WP-TotalPages` are returned as response headers and are exposed cross-origin via `Access-Control-Expose-Headers`. Anonymous read returned HTTP 200 with `X-WP-Total: 4` on 2026-08-26.' parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: per_page in: query description: Maximum number of items to be returned in result set. schema: type: integer default: 10 minimum: 1 maximum: 100 - name: search in: query description: Limit results to those matching a string. schema: type: string - name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array default: [] items: type: integer - name: include in: query description: Limit result set to specific IDs. schema: type: array default: [] items: type: integer - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: asc - name: orderby in: query description: Sort collection by term attribute. schema: type: string enum: - id - include - name - slug - include_slugs - term_group - description - count default: name - name: hide_empty in: query description: Whether to hide terms not assigned to any posts. schema: type: boolean default: false - name: parent in: query description: Limit result set to terms assigned to a specific parent. schema: type: integer - name: post in: query description: Limit result set to terms assigned to a specific post. schema: type: integer default: null - name: slug in: query description: Limit result set to terms with one or more specific slugs. schema: type: array items: type: string responses: '200': description: A page of team_category. headers: X-WP-Total: description: Total number of items in the collection. schema: type: integer X-WP-TotalPages: description: Total number of pages available. schema: type: integer content: application/json: schema: type: array items: $ref: '#/components/schemas/TeamCategory' '400': $ref: '#/components/responses/InvalidParam' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /wp/v2/team_category/{id}: get: tags: - Team Categories operationId: getTeamCategory summary: Get a team category description: Retrieves a single team category from the `team_category` collection by its numeric WordPress id. parameters: - name: id in: path description: Unique identifier for the term. schema: type: integer required: true - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view responses: '200': description: The requested team category. content: application/json: schema: $ref: '#/components/schemas/TeamCategory' '400': $ref: '#/components/responses/InvalidParam' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: Team: type: object title: team properties: date: type: - string - 'null' format: date-time description: The date the post was published, in the site's timezone. date_gmt: type: - string - 'null' format: date-time description: The date the post was published, as GMT. guid: type: object properties: raw: type: string readOnly: true rendered: type: string readOnly: true readOnly: true description: The globally unique identifier for the post. id: type: integer readOnly: true description: Unique identifier for the post. link: type: string format: uri readOnly: true description: URL to the post. modified: type: string format: date-time readOnly: true description: The date the post was last modified, in the site's timezone. modified_gmt: type: string format: date-time readOnly: true description: The date the post was last modified, 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. type: type: string readOnly: true description: Type of post. password: type: string description: A password to protect access to the content and excerpt. permalink_template: type: string readOnly: true description: Permalink template for the post. generated_slug: type: string readOnly: true description: Slug automatically generated from the post title. class_list: type: array items: type: string readOnly: true description: An array of the class names for the post container element. title: type: object properties: raw: type: string rendered: type: string readOnly: true description: The title for the post. featured_media: type: integer description: The ID of the featured media for the post. meta: type: object properties: _acf_changed: type: boolean default: false site-sidebar-layout: type: string default: default site-content-layout: type: string default: '' ast-site-content-layout: type: string default: default site-content-style: type: string default: default site-sidebar-style: type: string default: default ast-global-header-display: type: string default: '' ast-banner-title-visibility: type: string default: '' ast-main-header-display: type: string default: '' ast-hfb-above-header-display: type: string default: '' ast-hfb-below-header-display: type: string default: '' ast-hfb-mobile-header-display: type: string default: '' site-post-title: type: string default: '' ast-breadcrumbs-content: type: string default: '' ast-featured-img: type: string default: '' footer-sml-layout: type: string default: '' ast-disable-related-posts: type: string default: '' theme-transparent-header-meta: type: string default: '' adv-header-id-meta: type: string default: '' stick-header-meta: type: string default: '' header-above-stick-meta: type: string default: '' header-main-stick-meta: type: string default: '' header-below-stick-meta: type: string default: '' astra-migrate-meta-layouts: type: string default: default ast-page-background-enabled: type: string default: default ast-page-background-meta: type: object default: desktop: background-color: var(--ast-global-color-5) background-image: '' background-repeat: repeat background-position: center center background-size: auto background-attachment: scroll background-type: '' background-media: '' overlay-type: '' overlay-color: '' overlay-opacity: '' overlay-gradient: '' tablet: background-color: '' background-image: '' background-repeat: repeat background-position: center center background-size: auto background-attachment: scroll background-type: '' background-media: '' overlay-type: '' overlay-color: '' overlay-opacity: '' overlay-gradient: '' mobile: background-color: '' background-image: '' background-repeat: repeat background-position: center center background-size: auto background-attachment: scroll background-type: '' background-media: '' overlay-type: '' overlay-color: '' overlay-opacity: '' overlay-gradient: '' properties: desktop: type: object properties: background-color: type: string background-image: type: string background-repeat: type: string background-position: type: string background-size: type: string background-attachment: type: string background-type: type: string background-media: type: string overlay-type: type: string overlay-color: type: string overlay-opacity: type: string overlay-gradient: type: string additionalProperties: false tablet: type: object properties: background-color: type: string background-image: type: string background-repeat: type: string background-position: type: string background-size: type: string background-attachment: type: string background-type: type: string background-media: type: string overlay-type: type: string overlay-color: type: string overlay-opacity: type: string overlay-gradient: type: string additionalProperties: false mobile: type: object properties: background-color: type: string background-image: type: string background-repeat: type: string background-position: type: string background-size: type: string background-attachment: type: string background-type: type: string background-media: type: string overlay-type: type: string overlay-color: type: string overlay-opacity: type: string overlay-gradient: type: string additionalProperties: false additionalProperties: false ast-content-background-meta: type: object default: desktop: background-color: var(--ast-global-color-4) background-image: '' background-repeat: repeat background-position: center center background-size: auto background-attachment: scroll background-type: '' background-media: '' overlay-type: '' overlay-color: '' overlay-opacity: '' overlay-gradient: '' tablet: background-color: var(--ast-global-color-4) background-image: '' background-repeat: repeat background-position: center center background-size: auto background-attachment: scroll background-type: '' background-media: '' overlay-type: '' overlay-color: '' overlay-opacity: '' overlay-gradient: '' mobile: background-color: var(--ast-global-color-4) background-image: '' background-repeat: repeat background-position: center center background-size: auto background-attachment: scroll background-type: '' background-media: '' overlay-type: '' overlay-color: '' overlay-opacity: '' overlay-gradient: '' properties: desktop: type: object properties: background-color: type: string background-image: type: string background-repeat: type: string background-position: type: string background-size: type: string background-attachment: type: string background-type: type: string background-media: type: string overlay-type: type: string overlay-color: type: string overlay-opacity: type: string overlay-gradient: type: string additionalProperties: false tablet: type: object properties: background-color: type: string background-image: type: string background-repeat: type: string background-position: type: string background-size: type: string background-attachment: type: string background-type: type: string background-media: type: string overlay-type: type: string overlay-color: type: string overlay-opacity: type: string overlay-gradient: type: string additionalProperties: false mobile: type: object properties: background-color: type: string background-image: type: string background-repeat: type: string background-position: type: string background-size: type: string background-attachment: type: string background-type: type: string background-media: type: string overlay-type: type: string overlay-color: type: string overlay-opacity: type: string overlay-gradient: type: string additionalProperties: false additionalProperties: false wds_primary_team_category: type: integer default: 0 _elementor_edit_mode: type: string enum: - '' - builder default: '' _elementor_template_type: type: string enum: - post - wp-post - wp-page - kit - not-supported - page - section - container - floating-buttons - cloud-template-preview - widget - popup - header - footer - single - single-post - single-page - archive - search-results - error-404 - code_snippet - loop-item - '' default: '' _elementor_data: type: string default: '' _elementor_page_settings: type: object default: '{}' properties: hide_title: type: string enum: - 'yes' - 'no' default: '' additionalProperties: true _elementor_conditions: type: array default: [] additionalProperties: true description: Meta fields. template: type: string description: The theme file to use to display the post. team_category: type: array items: type: integer description: The terms assigned to the post in the team_category taxonomy. acf: type: object properties: [] description: ACF field data TeamCategory: type: object title: team_category properties: id: type: integer readOnly: true description: Unique identifier for the term. count: type: integer readOnly: true description: Number of published posts for the term. description: type: string description: HTML description of the term. link: type: string format: uri readOnly: true description: URL of the term. name: type: string description: HTML title for the term. slug: type: string description: An alphanumeric identifier for the term unique to its type. taxonomy: type: string enum: - team_category readOnly: true description: Type attribution for the term. parent: type: integer description: The parent term ID. meta: type: object properties: [] description: Meta fields. acf: type: object properties: [] description: ACF field data Error: type: object title: WP_Error description: The WordPress REST error envelope. It is NOT RFC 9457 application/problem+json; it is served as application/json. properties: code: type: string description: Machine-readable error slug, e.g. rest_post_invalid_id. message: type: string description: Human-readable error message. data: type: object description: Error detail. properties: status: type: integer description: HTTP status code. params: type: object description: Per-parameter validation messages, on 400. details: type: object description: Per-parameter validation detail, on 400. required: - code - message responses: InvalidParam: description: Invalid parameter. Returns `rest_invalid_param` with a per-parameter breakdown in `data.params`. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: 'Authentication required. Returns `rest_forbidden` (or a route-specific slug) with `data.status: 401`.' content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: 'No route or resource matched. Returns `rest_no_route` or a `rest_*_invalid_id` slug with `data.status: 404`.' content: application/json: schema: $ref: '#/components/schemas/Error'