openapi: 3.2.0 info: title: Virtual Incision Discovery API (WordPress REST wp/v2) version: wp/v2 summary: Route, post-type and status discovery, plus the comment surface (comment count is zero on this site). description: 'Virtual Incision publishes virtualincision.com on WordPress (WP Engine), which exposes the WordPress REST API at https://virtualincision.com/wp-json/. The `wp/v2` namespace is anonymously readable and returns the company newsroom, MIRA and miniRAS marketing pages, leadership profiles, events, job postings and the media library as JSON. This document was DERIVED mechanically by API Evangelist from the route-discovery document served at https://virtualincision.com/wp-json/ and the per-collection `OPTIONS` item schemas, both fetched on 2026-09-04 — every path, method, parameter and schema below is taken verbatim from what the host served. Virtual Incision does not publish an OpenAPI definition of its own, and this is NOT a product API: MIRA, the miniaturized robotic-assisted surgery system, has no public API. This is the content API the site CMS exposes. Write operations exist on these routes but require WordPress authentication.' contact: name: Virtual Incision url: https://virtualincision.com/ x-derived-by: API Evangelist enrichment pipeline x-derived-from: https://virtualincision.com/wp-json/ x-derived-on: '2026-09-04' x-provider-published: false servers: - url: https://virtualincision.com/wp-json description: Production tags: - name: Discovery description: Route, post-type and status discovery, plus the comment surface (comment count is zero on this site). security: - {} paths: /wp/v2: get: operationId: getDiscovery summary: GET /wp/v2 description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: array items: $ref: '#/components/schemas/Types' '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - {} - applicationPassword: [] parameters: - name: namespace in: query required: false schema: type: string default: wp/v2 - name: context in: query required: false schema: type: string default: view /wp/v2/types: get: operationId: getTypes summary: GET /wp/v2/types description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: array items: $ref: '#/components/schemas/Types' '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - {} - applicationPassword: [] parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. /wp/v2/types/{type}: get: operationId: getTypesByType summary: GET /wp/v2/types/{type} description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - {} - applicationPassword: [] parameters: - name: type in: path required: true schema: type: string description: WordPress identifier for the type segment. - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. /wp/v2/statuses: get: operationId: getStatuses summary: GET /wp/v2/statuses description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: array items: $ref: '#/components/schemas/Types' '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - {} - applicationPassword: [] parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. /wp/v2/statuses/{status}: get: operationId: getStatusesByStatus summary: GET /wp/v2/statuses/{status} description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - {} - applicationPassword: [] parameters: - name: status in: path required: true schema: type: string description: WordPress identifier for the status segment. - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. /wp/v2/comments: get: operationId: getComments summary: GET /wp/v2/comments description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: array items: $ref: '#/components/schemas/Types' '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - {} - applicationPassword: [] parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. - name: page in: query required: false schema: type: integer default: 1 minimum: 1 description: Current page of the collection. - name: per_page in: query required: false schema: type: integer default: 10 minimum: 1 maximum: 100 description: Maximum number of items to be returned in result set. - name: search in: query required: false schema: type: string description: Limit results to those matching a string. - name: after in: query required: false schema: type: string format: date-time description: Limit response to comments published after a given ISO8601 compliant date. - name: author in: query required: false schema: type: array items: type: integer description: Limit result set to comments assigned to specific user IDs. Requires authorization. - name: author_exclude in: query required: false schema: type: array items: type: integer description: Ensure result set excludes comments assigned to specific user IDs. Requires authorization. - name: author_email in: query required: false schema: type: string format: email description: Limit result set to that from a specific author email. Requires authorization. - name: before in: query required: false schema: type: string format: date-time description: Limit response to comments published before a given ISO8601 compliant date. - name: exclude in: query required: false schema: type: array default: [] items: type: integer description: Ensure result set excludes specific IDs. - name: include in: query required: false schema: type: array default: [] items: type: integer description: Limit result set to specific IDs. - name: offset in: query required: false schema: type: integer description: Offset the result set by a specific number of items. - name: order in: query required: false schema: type: string enum: - asc - desc default: desc description: Order sort attribute ascending or descending. - name: orderby in: query required: false schema: type: string enum: - date - date_gmt - id - include - post - parent - type default: date_gmt description: Sort collection by comment attribute. - name: parent in: query required: false schema: type: array default: [] items: type: integer description: Limit result set to comments of specific parent IDs. - name: parent_exclude in: query required: false schema: type: array default: [] items: type: integer description: Ensure result set excludes specific parent IDs. - name: post in: query required: false schema: type: array default: [] items: type: integer description: Limit result set to comments assigned to specific post IDs. - name: status in: query required: false schema: type: string default: approve description: Limit result set to comments assigned a specific status. Requires authorization. - name: type in: query required: false schema: type: string default: comment description: Limit result set to comments assigned a specific type. Requires authorization. - name: password in: query required: false schema: type: string description: The password for the post if it is password protected. post: operationId: createComments summary: POST /wp/v2/comments description: Write operation. Requires WordPress authentication (Application Password over HTTP Basic, or a logged-in cookie plus X-WP-Nonce); anonymous callers receive HTTP 401. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - applicationPassword: [] - cookieNonce: [] requestBody: required: false content: application/json: schema: type: object properties: 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 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. 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. meta: type: object description: Meta fields. /wp/v2/comments/{id}: get: operationId: getCommentsById summary: GET /wp/v2/comments/{id} description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - {} - applicationPassword: [] parameters: - &id001 name: id in: path required: true schema: type: integer description: WordPress identifier for the id segment. - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. - name: password in: query required: false schema: type: string description: The password for the parent post of the comment (if the post is password protected). post: operationId: createCommentsById summary: POST /wp/v2/comments/{id} description: Write operation. Requires WordPress authentication (Application Password over HTTP Basic, or a logged-in cookie plus X-WP-Nonce); anonymous callers receive HTTP 401. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - applicationPassword: [] - cookieNonce: [] parameters: - *id001 requestBody: required: false content: application/json: schema: type: object properties: 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 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. parent: type: integer description: The ID for the parent of the comment. post: type: integer description: The ID of the associated post object. status: type: string description: State of the comment. meta: type: object description: Meta fields. patch: operationId: updateCommentsById summary: PATCH /wp/v2/comments/{id} description: Write operation. Requires WordPress authentication (Application Password over HTTP Basic, or a logged-in cookie plus X-WP-Nonce); anonymous callers receive HTTP 401. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - applicationPassword: [] - cookieNonce: [] parameters: - *id001 requestBody: required: false content: application/json: schema: type: object properties: 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 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. parent: type: integer description: The ID for the parent of the comment. post: type: integer description: The ID of the associated post object. status: type: string description: State of the comment. meta: type: object description: Meta fields. delete: operationId: deleteCommentsById summary: DELETE /wp/v2/comments/{id} description: Write operation. Requires WordPress authentication (Application Password over HTTP Basic, or a logged-in cookie plus X-WP-Nonce); anonymous callers receive HTTP 401. tags: - Discovery responses: '200': description: Success. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Authentication required or insufficient capability (`rest_forbidden`). content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched (`rest_no_route` / `rest_post_invalid_id`). content: application/json: schema: $ref: '#/components/schemas/WPError' security: - applicationPassword: [] - cookieNonce: [] parameters: - *id001 - name: force in: query required: false schema: type: boolean default: false description: Whether to bypass Trash and force deletion. - name: password in: query required: false schema: type: string description: The password for the parent post of the comment (if the post is password protected). components: schemas: WPError: type: object description: The WordPress REST API error envelope, returned on every 4xx/5xx. properties: code: type: string description: Machine-readable error slug, e.g. rest_no_route, rest_forbidden. message: type: string description: Human-readable message. data: type: object properties: status: type: integer description: HTTP status code. params: type: object description: Per-parameter validation messages, when present. required: - code - message - data Types: title: type type: object properties: capabilities: description: All capabilities used by the post type. type: object context: - edit readonly: true description: description: A human-readable description of the post type. type: string context: - view - edit readonly: true hierarchical: description: Whether or not the post type should have children. type: boolean context: - view - edit readonly: true viewable: description: Whether or not the post type can be viewed. type: boolean context: - edit readonly: true labels: description: Human-readable labels for the post type for various contexts. type: object context: - edit readonly: true name: description: The title for the post type. type: string context: - view - edit - embed readonly: true slug: description: An alphanumeric identifier for the post type. type: string context: - view - edit - embed readonly: true supports: description: All features, supported by the post type. type: object context: - edit readonly: true has_archive: description: If the value is a string, the value will be used as the archive slug. If the value is false the post type has no archive. type: - string - boolean context: - view - edit readonly: true taxonomies: description: Taxonomies associated with post type. type: array items: type: string context: - view - edit readonly: true rest_base: description: REST base route for the post type. type: string context: - view - edit - embed readonly: true rest_namespace: description: REST route's namespace for the post type. type: string context: - view - edit - embed readonly: true visibility: description: The visibility settings for the post type. type: object context: - edit readonly: true properties: show_ui: description: Whether to generate a default UI for managing this post type. type: boolean show_in_nav_menus: description: Whether to make the post type available for selection in navigation menus. type: boolean icon: description: The icon for the post type. type: - string - 'null' context: - view - edit - embed readonly: true template: type: - array description: The block template associated with the post type. readonly: true context: - view - edit - embed template_lock: type: - string - boolean enum: - all - insert - contentOnly - false description: The template_lock associated with the post type, or false if none. readonly: true context: - view - edit - embed Statuses: title: status type: object properties: name: description: The title for the status. type: string context: - embed - view - edit readonly: true private: description: Whether posts with this status should be private. type: boolean context: - edit readonly: true protected: description: Whether posts with this status should be protected. type: boolean context: - edit readonly: true public: description: Whether posts of this status should be shown in the front end of the site. type: boolean context: - view - edit readonly: true queryable: description: Whether posts with this status should be publicly-queryable. type: boolean context: - view - edit readonly: true show_in_list: description: Whether to include posts in the edit listing for their post type. type: boolean context: - edit readonly: true slug: description: An alphanumeric identifier for the status. type: string context: - embed - view - edit readonly: true date_floating: description: Whether posts of this status may have floating published dates. type: boolean context: - view - edit readonly: true Comments: title: comment type: object properties: id: description: Unique identifier for the comment. type: integer context: - view - edit - embed readonly: true author: description: The ID of the user object, if author was a user. type: integer context: - view - edit - embed author_email: description: Email address for the comment author. type: string format: email context: - edit author_ip: description: IP address for the comment author. type: string format: ip context: - edit author_name: description: Display name for the comment author. type: string context: - view - edit - embed author_url: description: URL for the comment author. type: string format: uri context: - view - edit - embed author_user_agent: description: User agent for the comment author. type: string context: - edit content: description: The content for the comment. type: object context: - view - edit - embed properties: raw: description: Content for the comment, as it exists in the database. type: string context: - edit rendered: description: HTML content for the comment, transformed for display. type: string context: - view - edit - embed readonly: true date: description: The date the comment was published, in the site's timezone. type: string format: date-time context: - view - edit - embed date_gmt: description: The date the comment was published, as GMT. type: string format: date-time context: - view - edit link: description: URL to the comment. type: string format: uri context: - view - edit - embed readonly: true parent: description: The ID for the parent of the comment. type: integer context: - view - edit - embed default: 0 post: description: The ID of the associated post object. type: integer context: - view - edit default: 0 status: description: State of the comment. type: string context: - view - edit type: description: Type of the comment. type: string context: - view - edit - embed readonly: true default: comment author_avatar_urls: description: Avatar URLs for the comment author. type: object context: - view - edit - embed readonly: true properties: '24': description: Avatar URL with image size of 24 pixels. type: string format: uri context: - embed - view - edit '48': description: Avatar URL with image size of 48 pixels. type: string format: uri context: - embed - view - edit '96': description: Avatar URL with image size of 96 pixels. type: string format: uri context: - embed - view - edit meta: description: Meta fields. type: object context: - view - edit properties: _wp_note_status: type: string title: '' description: Note resolution status default: '' enum: - resolved - reopen acf: description: ACF field data type: object properties: [] securitySchemes: applicationPassword: type: http scheme: basic description: WordPress Application Passwords over HTTP Basic. Issued at https://virtualincision.com/wp-admin/authorize-application.php (advertised by the wp-json root `authentication` block). cookieNonce: type: apiKey in: header name: X-WP-Nonce description: Logged-in WordPress cookie plus an X-WP-Nonce header — first-party browser context only.