Workspot · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Workspot Control REST API

7 actions 7 updates update extends openapi/workspot-control-openapi.json
Generated by API Evangelist Written by API Evangelist tooling for Workspot's API. It is a proposal applied on top of the contract, not a document Workspot publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-slugx-apievangelist-harvestedx-apievangelist-source-urlx-apievangelist-spec-versionx-apievangelist-operationsx-apievangelist-pathsx-apievangelist-definitionsx-apievangelist-source-defect

Targets 2

$.info
$.tags

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Workspot Control REST API
  version: 1.0.0
extends: openapi/workspot-control-openapi.json
x-generated: '2026-09-04'
x-method: generated
x-source: >-
  Derived from https://api.workspot.com/v2/api-docs plus Workspot's own published
  documentation at docs.workspot.com. This overlay records API Evangelist observations
  about the harvested contract; it never mutates the original, which is preserved verbatim
  at openapi/workspot-control-openapi-original.json.
actions:
- target: $.info
  description: Record catalog provenance and the observed contract shape.
  update:
    x-apievangelist-slug: workspot
    x-apievangelist-harvested: '2026-09-04'
    x-apievangelist-source-url: https://api.workspot.com/v2/api-docs
    x-apievangelist-spec-version: swagger-2.0
    x-apievangelist-operations: 105
    x-apievangelist-paths: 85
    x-apievangelist-definitions: 120

- target: $.info
  description: >-
    Record the JSON syntax defect in the provider's own published document. The upstream
    /v2/api-docs response is NOT valid JSON — three "example" arrays contain unquoted bare
    tokens. A strict parser rejects the whole document, which means most standard toolchains
    cannot consume Workspot's contract as served.
  update:
    x-apievangelist-source-defect:
      kind: invalid-json
      detail: >-
        Two "example" arrays serialize bare unquoted tokens instead of JSON strings —
        [550e8400-e29b-41d4-a716-446655440003, 550e8400-e29b-41d4-a716-446655440007] in
        DeleteStaleDeviceRequest.deviceIds, and [rdgw1, rdgw2] in the gateway-name example.
      impact: json.loads(), and any strict Swagger parser, fails on the document as served.
      remediation_applied: >-
        openapi/workspot-control-openapi.json is the byte-for-byte same document with only
        those bare tokens quoted, so it parses. No path, operation, parameter, response or
        definition was added, removed or altered.
      unmodified_original: openapi/workspot-control-openapi-original.json

- target: $.info
  description: Record that the contract omits its own security model.
  update:
    x-apievangelist-contract-gaps:
      security_schemes_declared: 0
      note: >-
        The document declares no securityDefinitions and applies no security to any of its
        105 operations, yet every operation declares 401 and 403 responses. The real model —
        OAuth 2.0 password grant with Basic client credentials, or an Entra ID token — exists
        only in prose at docs.workspot.com. An agent reading only the machine-readable
        contract cannot discover how to authenticate.
      declared_5xx_responses: 0
      declared_404_responses: 0
      declared_429_responses: 0
      throttling_documented_but_undeclared: >-
        The API guide documents 20 GET/min and 15 write/min per-customer throttling returning
        HTTP 429, but no operation declares a 429 response.
      captured_in:
      - authentication/workspot-authentication.yml
      - errors/workspot-problem-types.yml
      - rate-limits/workspot-rate-limits.yml

- target: $.info
  description: Record the servers the document does not name.
  update:
    x-apievangelist-servers:
      declared_host: api.workspot.com
      declared_schemes: null
      note: >-
        The Swagger declares host api.workspot.com and basePath / but no schemes array.
        Workspot's documentation states the PREFERRED base URLs are regional —
        https://api.us.workspot.com and https://api.eu.workspot.com — with api.workspot.com
        retained as the older address. All three serve this same document. A tenant is
        reachable only in the region hosting its Control deployment.
      verified_hosts:
      - {host: 'https://api.workspot.com', api_docs_status: 200}
      - {host: 'https://api.us.workspot.com', api_docs_status: 200}
      - {host: 'https://api.eu.workspot.com', api_docs_status: 200}

- target: $.info
  description: Record the asynchronous execution model, which the contract does not express.
  update:
    x-apievangelist-async-model:
      pattern: submit-then-poll
      note: >-
        23 operations declare 202 Accepted and return a StatusURL that must be polled via
        GET /v1.0/operation/{operationId} until status is Succeeded or Failed. The Swagger
        expresses this only as a 202 response; the polling contract, the InProgress status
        value and the errorInfo envelope are documented in prose alone.
      poll_operation: statusCheckUsingGET
      captured_in: conventions/workspot-conventions.yml

- target: $.tags
  description: >-
    Record that the entire 105-operation surface carries a single tag, "APIs", which makes
    tag-based navigation and per-resource spec splitting impossible without re-derivation.
  update:
    x-apievangelist-tagging:
      declared_tags: 1
      declared_tag_names: [APIs]
      operations_per_tag: 105
      note: >-
        Every operation is tagged "APIs". The natural resource groupings — pools, desktops,
        users, groups, bundles, cloudAppPools, applications, clouds, templates, rdgateways,
        globalDesktops, licenses, staleDevices, policies, reports, operation — are visible
        only in the path structure. Recovered in data-model/workspot-data-model.yml.

- target: $.info
  description: Record the write-safety posture agents most need before acting.
  update:
    x-apievangelist-agent-safety:
      idempotency: none
      idempotency_note: 63 mutating operations, no idempotency key or replay-protection contract.
      reversibility: documented
      reversibility_note: >-
        cancelMoveDesktopUsingPOST and cancelUpgradeDesktopUsingPOST are real reversal paths,
        but no time window is published for either, and no DELETE has any undo or restore.
      dry_run: partial
      dry_run_note: Templates support draftTemplateUsingPOST and previewTemplateUsingPOST; nothing else can be simulated.
      captured_in: conventions/workspot-conventions.yml