openapi: 3.2.0 info: title: Neomorph Comments 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: Comments description: Comment collection. Registered and reachable, but empty - no post on this deployment carries comments. paths: /wp/v2/comments: get: tags: - Comments operationId: listComments summary: List comments description: 'Lists published items in the `comments` collection. Comment collection. Registered and reachable, but empty - no post on this deployment carries comments. 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: 0` 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 comments published after a given ISO8601 compliant date. schema: type: string format: date-time - name: author in: query description: Limit result set to comments assigned to specific user IDs. Requires authorization. schema: type: array items: type: integer - name: author_exclude in: query description: Ensure result set excludes comments assigned to specific user IDs. Requires authorization. schema: type: array items: type: integer - name: author_email in: query description: Limit result set to that from a specific author email. Requires authorization. schema: type: string default: null format: email - name: before in: query description: Limit response to comments published 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: 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 comment attribute. schema: type: string enum: - date - date_gmt - id - include - post - parent - type default: date_gmt - name: parent in: query description: Limit result set to comments of specific parent IDs. schema: type: array default: [] items: type: integer - name: parent_exclude in: query description: Ensure result set excludes specific parent IDs. schema: type: array default: [] items: type: integer - name: post in: query description: Limit result set to comments assigned to specific post IDs. schema: type: array default: [] items: type: integer - name: status in: query description: Limit result set to comments assigned a specific status. Requires authorization. schema: type: string default: approve - name: type in: query description: Limit result set to comments assigned a specific type. Requires authorization. schema: type: string default: comment - name: password in: query description: The password for the post if it is password protected. schema: type: string responses: '200': description: A page of comments. 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/Comment' '400': $ref: '#/components/responses/InvalidParam' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /wp/v2/comments/{id}: get: tags: - Comments operationId: getComments summary: Get a comment description: Retrieves a single comment from the `comments` collection by its numeric WordPress id. parameters: - name: id in: path description: Unique identifier for the comment. 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 parent post of the comment (if the post is password protected). schema: type: string responses: '200': description: The requested comment. content: application/json: schema: $ref: '#/components/schemas/Comment' '400': $ref: '#/components/responses/InvalidParam' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: Comment: type: object title: comment properties: id: type: integer readOnly: true description: Unique identifier for the comment. author: type: integer description: The ID of the user object, if author was a user. author_email: type: string format: email description: Email address for the comment author. author_ip: type: string format: ip description: IP address for the comment author. author_name: type: string description: Display name for the comment author. author_url: type: string format: uri description: URL for the comment author. author_user_agent: type: string description: User agent for the comment author. content: type: object properties: raw: type: string rendered: type: string readOnly: true description: The content for the comment. date: type: string format: date-time description: The date the comment was published, in the site's timezone. date_gmt: type: string format: date-time description: The date the comment was published, as GMT. link: type: string format: uri readOnly: true description: URL to the comment. parent: type: integer default: 0 description: The ID for the parent of the comment. post: type: integer default: 0 description: The ID of the associated post object. status: type: string description: State of the comment. type: type: string default: comment readOnly: true description: Type of the comment. meta: type: object properties: _wp_note_status: type: string enum: - resolved - reopen default: '' 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'