GreyNoise Intelligence · API Governance Rules
GreyNoise Intelligence API Rules
Spectral linting rules defining API design standards and conventions for GreyNoise Intelligence.
33 Rules
error 15
warn 15
info 3
Rule Categories
greynoise
Rules
error
greynoise-info-title-prefix
API title must begin with "GreyNoise".
$.info.title
error
greynoise-info-version-semver
API version must be a semver string (e.g. 3.0.0).
$.info.version
error
greynoise-info-description-required
Info description is required and must be at least 40 characters.
$.info
warn
greynoise-info-contact-required
A contact email is required (typically [email protected]).
$.info.contact
warn
greynoise-info-license-required
A license entry is required.
$.info
error
greynoise-openapi-version
OpenAPI version must be 3.0.x to match GreyNoise published specs.
$.openapi
error
greynoise-servers-defined
At least one server entry must be defined.
$.servers
error
greynoise-servers-https
All server URLs must use HTTPS.
$.servers[*].url
warn
greynoise-servers-canonical-host
Primary server URL should be https://api.greynoise.io.
$.servers[0].url
error
greynoise-paths-lowercase
Paths must be all lowercase.
$.paths.*~
error
greynoise-paths-no-trailing-slash
Paths must not end with a trailing slash.
$.paths.*~
warn
greynoise-paths-versioned
Paths should begin with /v1, /v2, /v3, or /ping (utility).
$.paths.*~
error
greynoise-operation-summary-required
Every operation must have a summary in Title Case.
$.paths.*[get,post,put,patch,delete]
warn
greynoise-operation-description-required
Every operation must have a description.
$.paths.*[get,post,put,patch,delete]
error
greynoise-operation-operationid-required
Every operation must declare an operationId.
$.paths.*[get,post,put,patch,delete]
warn
greynoise-operation-tags-required
Every operation must declare at least one tag.
$.paths.*[get,post,put,patch,delete]
warn
greynoise-tags-defined-globally
A global tags array should be defined.
$
warn
greynoise-tag-title-case
Tag names should be in Title Case (e.g. "IP Lookup", "GNQL").
$.tags[*].name
warn
greynoise-parameter-description
Every parameter must have a description.
$.paths.*[get,post,put,patch,delete].parameters[*]
warn
greynoise-parameter-name-snake-case
Parameter names should be snake_case (GreyNoise convention).
$.paths.*[get,post,put,patch,delete].parameters[*].name
error
greynoise-api-key-in-header
API key must be passed via header, never query string.
$.paths.*[get,post,put,patch,delete].parameters[?(@.name=='key' || @.name=='api_key' || @.name=='apikey')]
warn
greynoise-request-body-json
Request bodies must include application/json.
$.paths.*[post,put,patch].requestBody.content
error
greynoise-response-2xx-required
Every operation must declare at least one 2xx response.
$.paths.*[get,post,put,patch,delete].responses
info
greynoise-response-401-recommended
Authenticated operations should declare a 401 response.
$.paths.*[get,post,put,patch,delete].responses
info
greynoise-response-429-recommended
Operations should declare a 429 (rate-limit) response.
$.paths.*[get,post,put,patch,delete].responses
warn
greynoise-response-description-required
Every response must have a description.
$.paths.*[get,post,put,patch,delete].responses.*
warn
greynoise-schema-property-snake-case
Schema property names should be snake_case (GreyNoise convention).
$.components.schemas[*].properties.*~
warn
greynoise-schema-type-required
Schemas should declare a type (unless using oneOf/allOf/anyOf/$ref).
error
greynoise-security-defined-globally
A global security entry must be defined.
$
error
greynoise-security-scheme-apikey-header
The APIKeyHeaderAuth scheme must be apiKey/header named "key".
$.components.securitySchemes.APIKeyHeaderAuth
error
greynoise-get-no-request-body
GET operations must not declare a requestBody.
$.paths.*.get
warn
greynoise-delete-no-request-body
DELETE operations must not declare a requestBody.
$.paths.*.delete
info
greynoise-operation-examples-encouraged
Operations are encouraged to provide response examples for Microcks mocking.
$.paths.*[get,post,put,patch,delete].responses['200'].content.application/json