openapi: 3.2.0 info: title: Virtual Incision Pages API (WordPress REST wp/v2) version: wp/v2 summary: Marketing and clinical pages (MIRA, miniRAS, surgeons, safety information, leadership profiles). 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: Pages description: Marketing and clinical pages (MIRA, miniRAS, surgeons, safety information, leadership profiles). security: - {} paths: /wp/v2/pages: get: operationId: getPages summary: GET /wp/v2/pages description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Pages responses: '200': description: Success. content: application/json: schema: type: array items: $ref: '#/components/schemas/Pages' '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 posts published after a given ISO8601 compliant date. - name: modified_after in: query required: false schema: type: string format: date-time description: Limit response to posts modified after a given ISO8601 compliant date. - name: author in: query required: false schema: type: array default: [] items: type: integer description: Limit result set to posts assigned to specific authors. - name: author_exclude in: query required: false schema: type: array default: [] items: type: integer description: Ensure result set excludes posts assigned to specific authors. - name: before in: query required: false schema: type: string format: date-time description: Limit response to posts published before a given ISO8601 compliant date. - name: modified_before in: query required: false schema: type: string format: date-time description: Limit response to posts modified 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: menu_order in: query required: false schema: type: integer description: Limit result set to posts with a specific menu_order value. - name: search_semantics in: query required: false schema: type: string enum: - exact description: How to interpret the search input. - 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: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title - menu_order default: date description: Sort collection by post attribute. - name: parent in: query required: false schema: type: array default: [] items: type: integer description: Limit result set to items with particular parent IDs. - name: parent_exclude in: query required: false schema: type: array default: [] items: type: integer description: Limit result set to all items except those of a particular parent ID. - name: search_columns in: query required: false schema: type: array default: [] items: type: string enum: - post_title - post_content - post_excerpt description: Array of column names to be searched. - name: slug in: query required: false schema: type: array items: type: string description: Limit result set to posts with one or more specific slugs. - name: status in: query required: false 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 description: Limit result set to posts assigned one or more statuses. post: operationId: createPages summary: POST /wp/v2/pages 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: - Pages 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: 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. parent: type: integer description: The ID for the parent of the post. 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. menu_order: type: integer description: The order of the post in relation to other posts. meta: type: object description: Meta fields. template: type: string description: The theme file to use to display the post. /wp/v2/pages/{id}: get: operationId: getPagesById summary: GET /wp/v2/pages/{id} description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Pages 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: excerpt_length in: query required: false schema: type: integer description: Override the default excerpt length. - name: password in: query required: false schema: type: string description: The password for the post if it is password protected. post: operationId: createPagesById summary: POST /wp/v2/pages/{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: - Pages 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: 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: &id002 - 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. parent: type: integer description: The ID for the parent of the post. 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: &id003 - open - closed description: Whether or not comments are open on the post. ping_status: type: string enum: &id004 - open - closed description: Whether or not the post can be pinged. menu_order: type: integer description: The order of the post in relation to other posts. meta: type: object description: Meta fields. template: type: string description: The theme file to use to display the post. patch: operationId: updatePagesById summary: PATCH /wp/v2/pages/{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: - Pages 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: 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: *id002 description: A named status for the post. password: type: string description: A password to protect access to the content and excerpt. parent: type: integer description: The ID for the parent of the post. 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: *id003 description: Whether or not comments are open on the post. ping_status: type: string enum: *id004 description: Whether or not the post can be pinged. menu_order: type: integer description: The order of the post in relation to other posts. meta: type: object description: Meta fields. template: type: string description: The theme file to use to display the post. delete: operationId: deletePagesById summary: DELETE /wp/v2/pages/{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: - Pages 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. /wp/v2/pages/{parent}/revisions: get: operationId: getPagesByParentRevisions summary: GET /wp/v2/pages/{parent}/revisions description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Pages 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: parent in: path required: true schema: type: integer description: WordPress identifier for the parent 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: 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 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: 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 - id - include - relevance - slug - include_slugs - title default: date description: Sort collection by object attribute. /wp/v2/pages/{parent}/revisions/{id}: get: operationId: getPagesByParentRevisionsById summary: GET /wp/v2/pages/{parent}/revisions/{id} description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Pages 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: - &id005 name: parent in: path required: true schema: type: integer description: WordPress identifier for the parent segment. - &id006 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. delete: operationId: deletePagesByParentRevisionsById summary: DELETE /wp/v2/pages/{parent}/revisions/{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: - Pages 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: - *id005 - *id006 - name: force in: query required: false schema: type: boolean default: false description: Required to be true, as revisions do not support trashing. 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 Pages: title: page type: object properties: date: description: The date the post was published, in the site's timezone. type: - string - 'null' format: date-time context: - view - edit - embed date_gmt: description: The date the post was published, as GMT. type: - string - 'null' format: date-time context: - view - edit guid: description: The globally unique identifier for the post. type: object context: - view - edit readonly: true properties: raw: description: GUID for the post, as it exists in the database. type: string context: - edit readonly: true rendered: description: GUID for the post, transformed for display. type: string context: - view - edit readonly: true id: description: Unique identifier for the post. type: integer context: - view - edit - embed readonly: true link: description: URL to the post. type: string format: uri context: - view - edit - embed readonly: true modified: description: The date the post was last modified, in the site's timezone. type: string format: date-time context: - view - edit readonly: true modified_gmt: description: The date the post was last modified, as GMT. type: string format: date-time context: - view - edit readonly: true slug: description: An alphanumeric identifier for the post unique to its type. type: string context: - view - edit - embed status: description: A named status for the post. type: string enum: - publish - future - draft - pending - private - acf-disabled context: - view - edit type: description: Type of post. type: string context: - view - edit - embed readonly: true password: description: A password to protect access to the content and excerpt. type: string context: - edit permalink_template: description: Permalink template for the post. type: string context: - edit readonly: true generated_slug: description: Slug automatically generated from the post title. type: string context: - edit readonly: true class_list: description: An array of the class names for the post container element. type: array context: - view - edit readonly: true items: type: string parent: description: The ID for the parent of the post. type: integer context: - view - edit title: description: The title for the post. type: object context: - view - edit - embed properties: raw: description: Title for the post, as it exists in the database. type: string context: - edit rendered: description: HTML title for the post, transformed for display. type: string context: - view - edit - embed readonly: true content: description: The content for the post. type: object context: - view - edit properties: raw: description: Content for the post, as it exists in the database. type: string context: - edit rendered: description: HTML content for the post, transformed for display. type: string context: - view - edit readonly: true block_version: description: Version of the content block format used by the post. type: integer context: - edit readonly: true protected: description: Whether the content is protected with a password. type: boolean context: - view - edit - embed readonly: true author: description: The ID for the author of the post. type: integer context: - view - edit - embed excerpt: description: The excerpt for the post. type: object context: - view - edit - embed properties: raw: description: Excerpt for the post, as it exists in the database. type: string context: - edit rendered: description: HTML excerpt for the post, transformed for display. type: string context: - view - edit - embed readonly: true protected: description: Whether the excerpt is protected with a password. type: boolean context: - view - edit - embed readonly: true featured_media: description: The ID of the featured media for the post. type: integer context: - view - edit - embed comment_status: description: Whether or not comments are open on the post. type: string enum: - open - closed context: - view - edit ping_status: description: Whether or not the post can be pinged. type: string enum: - open - closed context: - view - edit menu_order: description: The order of the post in relation to other posts. type: integer context: - view - edit meta: description: Meta fields. type: object context: - view - edit properties: _acf_changed: type: boolean title: '' description: '' default: false content-type: type: string title: '' description: '' default: '' inline_featured_image: type: boolean title: '' description: '' default: false wp_typography_post_enhancements_disabled: type: boolean title: '' description: Whether wp-Typography's typographic enhancements should be applied to the post. default: false _monsterinsights_skip_tracking: type: boolean title: '' description: '' default: false footnotes: type: string title: '' description: '' default: '' template: description: The theme file to use to display the post. type: string context: - view - edit acf: description: ACF field data type: object properties: [] links: - rel: https://api.w.org/action-publish title: The current user can publish this post. href: https://virtualincision.com/wp-json/wp/v2/pages/{id} targetSchema: type: object properties: status: type: string enum: - publish - future - rel: https://api.w.org/action-unfiltered-html title: The current user can post unfiltered HTML markup and JavaScript. href: https://virtualincision.com/wp-json/wp/v2/pages/{id} targetSchema: type: object properties: content: raw: type: string - rel: https://api.w.org/action-assign-author title: The current user can change the author on this post. href: https://virtualincision.com/wp-json/wp/v2/pages/{id} targetSchema: type: object properties: author: type: integer 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.