VulnCheck · OpenAPI Overlay 1.0.0
API Evangelist enhancements to the VulnCheck API v3 OpenAPI
7 actions
7 updates
documentation
extends
../openapi/_original/vulncheck-api-openapi-original.json
Generated by API Evangelist
Written by API Evangelist tooling for VulnCheck's API. It is a proposal applied on top of the contract, not a document VulnCheck publishes.
What the actions change
descriptionx-support-urlx-status-pagex-changelog429
Targets 7
$.servers
$.components.securitySchemes.Bearer
$.security
$.info
$.info.description
$.tags
$.paths.*.*.responses
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements to the VulnCheck API v3 OpenAPI
version: 1.0.0
extends: ../openapi/_original/vulncheck-api-openapi-original.json
x-generated: '2026-09-04'
x-method: generated
x-source: >-
Derived from openapi/_original/vulncheck-api-openapi-original.json (fetched verbatim from
https://api.vulncheck.com/v3/openapi on 2026-09-04) plus
https://docs.vulncheck.com/getting-started/api-tokens,
https://docs.vulncheck.com/community/rate-limits, and live header probes.
x-note: >-
Every action below adds information the provider publishes ELSEWHERE but did not put in the
spec. Nothing here invents behaviour. The original document is never mutated; the working
copy at openapi/vulncheck-api-openapi.json carries only action 1 (the absolute server URL)
so that generated clients resolve against the documented host.
actions:
- target: $.servers
description: >-
The published spec declares a RELATIVE server, "/v3", which cannot be resolved by any
client that did not fetch the document from the API host itself. Replace it with the
absolute base every VulnCheck code sample and SDK uses.
update:
- url: https://api.vulncheck.com/v3
description: VulnCheck API v3
- target: $.components.securitySchemes.Bearer
description: >-
The scheme is declared as a bare apiKey in the Authorization header with no description.
Document the token's provenance, its three accepted transports and its expiry, all of which
are published at https://docs.vulncheck.com/getting-started/api-tokens.
update:
description: >-
VulnCheck API token, sent as "Authorization: Bearer <token>". The same token is also
accepted as a `token` query parameter and as a `token` cookie. Issue and revoke tokens at
https://console.vulncheck.com/settings/tokens. A token unused for 30 days expires. The
CLI and SDKs read it from the VC_TOKEN environment variable.
- target: $.security
description: >-
The spec declares no top-level security requirement, so a generated client reads the API as
anonymous. In fact every operation except GET /v3/openapi returns 401 without a token
(probed 2026-09-04). Apply the Bearer scheme globally.
update:
- Bearer: []
- target: $.info
description: Add contact and license context the provider publishes on its site.
update:
x-support-url: https://www.vulncheck.com/contact
x-status-page: https://status.vulncheck.com/
x-changelog: https://docs.vulncheck.com/changelog
- target: $.info.description
description: >-
Expand the one-line description into what the API actually covers, so a catalog or agent
reading only the spec understands the surface.
update: >-
Version 3 of the VulnCheck API — read-only access to VulnCheck exploit and vulnerability
intelligence. 508 named indices are individually addressable at /index/{name}, alongside
CVE search, CPE and PURL lookup, initial-access detection rules (Suricata and Snort),
VulnCheck C2 hostname and IP feeds, account entitlements, and pre-signed offline backup
downloads. Authentication is a VulnCheck API token. Community accounts are limited to
1,000 requests per minute.
- target: $.tags
description: >-
The document declares an EMPTY top-level tags array while tagging all 521 operations, so
no tag carries a description. Declare the tag groups the operations already use.
update:
- name: Indices
description: Browse and query VulnCheck's 508 named data feeds.
- name: Search
description: Cross-index CVE search and CPE component search.
- name: Component Identity
description: CPE and PURL lookups returning associated CVEs.
- name: Threat Intelligence
description: VulnCheck C2 hostname and IP feeds, and initial-access detection rules.
- name: Backups
description: Pre-signed download links for offline index archives.
- name: Account
description: Entitlement inspection and specification self-service.
- target: $.paths.*.*.responses
description: >-
HTTP 429 is documented at https://docs.vulncheck.com/community/rate-limits with a concrete
body, but is declared on NONE of the 521 operations. Add it so generated clients handle
exhaustion rather than treating it as an unknown status.
update:
'429':
description: >-
Too Many Requests. Community accounts are limited to 1,000 requests per minute across
all endpoints. No Retry-After or RateLimit-* header is returned; back off exponentially.
content:
application/json:
schema:
type: object
properties:
error:
type: boolean
errors:
type: array
items:
type: string
example:
error: true
errors:
- Rate limit exceeded. Please try again later.
x-unfixable-gaps:
note: >-
Recorded rather than patched — these need a change by VulnCheck, and an overlay that
invented values for them would be fabrication.
gaps:
- id: missing-operation-ids
detail: >-
None of the 521 operations declares an operationId. Every generated SDK must synthesize
method names from paths, and no artifact in this repo (including the MCP tool crosswalk)
can bind to a stable operation identifier. This is the single highest-value fix available
to VulnCheck on this contract.
- id: untyped-error-bodies
detail: >-
The 400/401/404/500 responses are typed as a bare `string` on every operation, though the
real body is the {"error":true,"errors":[...]} envelope. A shared components.schemas.Error
referenced from each would make failures machine-readable.
- id: untyped-search-source
detail: >-
index.CveSearchHit.source is typed `object` with the description "Structure varies by
index" — the payload a /search/cve caller most needs described is the one left undescribed.
- id: no-examples
detail: No operation carries a response example, so no example can be lifted into examples/.
- id: under-declared-401
detail: 401 is declared on 1 of 521 operations while applying to 520 of them.