openapi: 3.2.0 info: title: Virtual Incision Taxonomy API (WordPress REST wp/v2) version: wp/v2 summary: Post categories, tags and the taxonomy registry. 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: Taxonomy description: Post categories, tags and the taxonomy registry. security: - {} paths: /wp/v2/categories: get: operationId: getCategories summary: GET /wp/v2/categories description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Taxonomy responses: '200': description: Success. content: application/json: schema: type: array items: $ref: '#/components/schemas/Categories' '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: 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: order in: query required: false schema: type: string enum: - asc - desc default: asc description: Order sort attribute ascending or descending. - name: orderby in: query required: false schema: type: string enum: - id - include - name - slug - include_slugs - term_group - description - count default: name description: Sort collection by term attribute. - name: hide_empty in: query required: false schema: type: boolean default: false description: Whether to hide terms not assigned to any posts. - name: parent in: query required: false schema: type: integer description: Limit result set to terms assigned to a specific parent. - name: post in: query required: false schema: type: integer description: Limit result set to terms assigned to a specific post. - name: slug in: query required: false schema: type: array items: type: string description: Limit result set to terms with one or more specific slugs. post: operationId: createCategories summary: POST /wp/v2/categories 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: - Taxonomy 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: description: type: string description: HTML description 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. parent: type: integer description: The parent term ID. meta: type: object description: Meta fields. required: - name /wp/v2/categories/{id}: get: operationId: getCategoriesById summary: GET /wp/v2/categories/{id} description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Taxonomy 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. post: operationId: createCategoriesById summary: POST /wp/v2/categories/{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: - Taxonomy 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: description: type: string description: HTML description 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. parent: type: integer description: The parent term ID. meta: type: object description: Meta fields. patch: operationId: updateCategoriesById summary: PATCH /wp/v2/categories/{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: - Taxonomy 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: description: type: string description: HTML description 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. parent: type: integer description: The parent term ID. meta: type: object description: Meta fields. delete: operationId: deleteCategoriesById summary: DELETE /wp/v2/categories/{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: - Taxonomy 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: Required to be true, as terms do not support trashing. /wp/v2/tags: get: operationId: getTags summary: GET /wp/v2/tags description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Taxonomy responses: '200': description: Success. content: application/json: schema: type: array items: $ref: '#/components/schemas/Categories' '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: 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: asc description: Order sort attribute ascending or descending. - name: orderby in: query required: false schema: type: string enum: - id - include - name - slug - include_slugs - term_group - description - count default: name description: Sort collection by term attribute. - name: hide_empty in: query required: false schema: type: boolean default: false description: Whether to hide terms not assigned to any posts. - name: post in: query required: false schema: type: integer description: Limit result set to terms assigned to a specific post. - name: slug in: query required: false schema: type: array items: type: string description: Limit result set to terms with one or more specific slugs. post: operationId: createTags summary: POST /wp/v2/tags 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: - Taxonomy 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: description: type: string description: HTML description 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. meta: type: object description: Meta fields. required: - name /wp/v2/tags/{id}: get: operationId: getTagsById summary: GET /wp/v2/tags/{id} description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Taxonomy 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: - &id002 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. post: operationId: createTagsById summary: POST /wp/v2/tags/{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: - Taxonomy 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: - *id002 requestBody: required: false content: application/json: schema: type: object properties: description: type: string description: HTML description 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. meta: type: object description: Meta fields. patch: operationId: updateTagsById summary: PATCH /wp/v2/tags/{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: - Taxonomy 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: - *id002 requestBody: required: false content: application/json: schema: type: object properties: description: type: string description: HTML description 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. meta: type: object description: Meta fields. delete: operationId: deleteTagsById summary: DELETE /wp/v2/tags/{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: - Taxonomy 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: - *id002 - name: force in: query required: false schema: type: boolean default: false description: Required to be true, as terms do not support trashing. /wp/v2/taxonomies: get: operationId: getTaxonomies summary: GET /wp/v2/taxonomies description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Taxonomy responses: '200': description: Success. content: application/json: schema: type: array items: $ref: '#/components/schemas/Categories' '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: type in: query required: false schema: type: string description: Limit results to taxonomies associated with a specific post type. /wp/v2/taxonomies/{taxonomy}: get: operationId: getTaxonomiesByTaxonomy summary: GET /wp/v2/taxonomies/{taxonomy} description: Anonymous read — observed HTTP 200 without credentials on 2026-09-04. tags: - Taxonomy 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: taxonomy in: path required: true schema: type: string description: WordPress identifier for the taxonomy 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. 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 Categories: title: category type: object properties: id: description: Unique identifier for the term. type: integer context: - view - embed - edit readonly: true count: description: Number of published posts for the term. type: integer context: - view - edit readonly: true description: description: HTML description of the term. type: string context: - view - edit link: description: URL of the term. type: string format: uri context: - view - embed - edit readonly: true name: description: HTML title for the term. type: string context: - view - embed - edit required: true slug: description: An alphanumeric identifier for the term unique to its type. type: string context: - view - embed - edit taxonomy: description: Type attribution for the term. type: string enum: - category context: - view - embed - edit readonly: true parent: description: The parent term ID. type: integer context: - view - edit meta: description: Meta fields. type: object context: - view - edit properties: [] acf: description: ACF field data type: object properties: [] Tags: title: tag type: object properties: id: description: Unique identifier for the term. type: integer context: - view - embed - edit readonly: true count: description: Number of published posts for the term. type: integer context: - view - edit readonly: true description: description: HTML description of the term. type: string context: - view - edit link: description: URL of the term. type: string format: uri context: - view - embed - edit readonly: true name: description: HTML title for the term. type: string context: - view - embed - edit required: true slug: description: An alphanumeric identifier for the term unique to its type. type: string context: - view - embed - edit taxonomy: description: Type attribution for the term. type: string enum: - post_tag context: - view - embed - edit readonly: true meta: description: Meta fields. type: object context: - view - edit properties: [] Taxonomies: title: taxonomy type: object properties: capabilities: description: All capabilities used by the taxonomy. type: object context: - edit readonly: true description: description: A human-readable description of the taxonomy. type: string context: - view - edit readonly: true hierarchical: description: Whether or not the taxonomy should have children. type: boolean context: - view - edit readonly: true labels: description: Human-readable labels for the taxonomy for various contexts. type: object context: - edit readonly: true name: description: The title for the taxonomy. type: string context: - view - edit - embed readonly: true slug: description: An alphanumeric identifier for the taxonomy. type: string context: - view - edit - embed readonly: true show_cloud: description: Whether or not the term cloud should be displayed. type: boolean context: - edit readonly: true types: description: Types associated with the taxonomy. type: array items: type: string context: - view - edit readonly: true rest_base: description: REST base route for the taxonomy. type: string context: - view - edit - embed readonly: true rest_namespace: description: REST namespace route for the taxonomy. type: string context: - view - edit - embed readonly: true visibility: description: The visibility settings for the taxonomy. type: object context: - edit readonly: true properties: public: description: Whether a taxonomy is intended for use publicly either via the admin interface or by front-end users. type: boolean publicly_queryable: description: Whether the taxonomy is publicly queryable. type: boolean show_ui: description: Whether to generate a default UI for managing this taxonomy. type: boolean show_admin_column: description: Whether to allow automatic creation of taxonomy columns on associated post-types table. type: boolean show_in_nav_menus: description: Whether to make the taxonomy available for selection in navigation menus. type: boolean show_in_quick_edit: description: Whether to show the taxonomy in the quick/bulk edit panel. type: boolean 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.