EVE Online · API Governance Rules
EVE Online API Rules
Spectral linting rules defining API design standards and conventions for EVE Online.
37 Rules
error 11
warn 16
info 10
Rule Categories
http
info
operation
parameter
paths
response
schema
security
servers
tag
Rules
warn
info-title-eve-online
info.title must mention EVE or ESI to identify this as the EVE Swagger Interface.
$.info
error
info-description-required
info.description is required and should briefly describe the EVE Swagger Interface.
$.info
error
info-version-required
info.version is required so clients can pin against an X-Compatibility-Date.
$.info
error
servers-https-only
ESI is HTTPS only.
$.servers[*].url
info
servers-evetech-host
ESI servers should be hosted under evetech.net.
$.servers[*].url
warn
paths-snake-case-segments
ESI uses snake_case path segments (e.g. /characters/{character_id}/skill_queue/).
$.paths[*]~
info
paths-trailing-slash
ESI canonically uses trailing slashes on paths (e.g. /alliances/).
$.paths[*]~
error
paths-no-query-string
Path templates should not include a query string.
$.paths[*]~
warn
paths-id-parameter-naming
Path ID parameters should be {something_id} (snake_case).
$.paths[*]~
error
operation-operationid-required
Every operation must have an operationId (used by SDK generators).
$.paths[*][get,post,put,delete,patch]
warn
operation-operationid-snake-case
ESI operationIds are snake_case with verb prefix (get_, post_, put_, delete_).
$.paths[*][get,post,put,delete,patch].operationId
error
operation-summary-required
Every operation must have a summary.
$.paths[*][get,post,put,delete,patch]
warn
operation-summary-eve-prefix
Summaries should start with 'EVE Online ' for consistent SDK doc strings.
$.paths[*][get,post,put,delete,patch].summary
warn
operation-description-required
Every operation must have a description.
$.paths[*][get,post,put,delete,patch]
error
operation-tags-required
Every operation must have at least one tag for grouping (Universe, Market, etc.).
$.paths[*][get,post,put,delete,patch]
info
operation-rate-limit-extension
Operations should declare x-rate-limit when the route belongs to a rate-limit group.
$.paths[*][get,post,put,delete,patch]
info
operation-cached-seconds-extension
GET operations should declare x-cached-seconds for cache-friendly clients.
$.paths[*].get
warn
parameter-snake-case-names
Query/path/header parameter names should be snake_case (datasource, character_id, type_id).
$.paths[*][get,post,put,delete,patch].parameters[*]
warn
parameter-description-required
Every parameter must have a description.
$.paths[*][get,post,put,delete,patch].parameters[*]
warn
parameter-datasource-enum
The datasource parameter must enumerate available shards (tranquility).
$.paths[*][get,post,put,delete,patch].parameters[?(@.name=='datasource')]
warn
parameter-token-deprecation
The 'token' query parameter is deprecated; use the Authorization Bearer header.
$.paths[*][get,post,put,delete,patch].parameters[?(@.name=='token')]
warn
response-200-or-204
Mutating routes (POST/PUT/DELETE) should respond with 200, 201, or 204.
$.paths[*][post,put,delete].responses
info
response-error-shape
Error responses (4xx, 5xx) should include an 'error' string field.
$.paths[*][get,post,put,delete,patch].responses[?(@property.match(/4..|5../))].content.application/json.schema.properties
info
response-420-rate-limit
Public ESI routes should declare 420 Error Rate Limited (legacy) for parity.
$.paths[*][get,post,put,delete,patch].responses
error
response-content-application-json
ESI responses are application/json.
$.paths[*][get,post,put,delete,patch].responses[?(@property.match(/2../))].content
warn
schema-property-snake-case
Schema property names should be snake_case (character_id, security_status).
$.components.schemas[*].properties[*]~
info
schema-id-naming
ID properties should follow the {entity}_id convention (character_id, corporation_id).
$.components.schemas[*].properties[*]~
warn
schema-iso-date-time-format
Date-time properties should be ISO 8601 (format: date-time).
$.components.schemas[*].properties[?(@property.match(/_(at|date|time)$/))]
error
security-evesso-scheme
ESI must define the 'evesso' OAuth 2.0 security scheme.
$.components.securitySchemes
error
security-evesso-oauth2
The 'evesso' scheme must be type oauth2.
$.components.securitySchemes.evesso
warn
security-evesso-scope-naming
ESI OAuth2 scopes follow esi-._.v.
$.components.securitySchemes.evesso.flows[*].scopes[*]~
warn
security-protected-route-declares-scope
Operations that require auth must list at least one esi-* scope under security.
$.paths[*][get,post,put,delete,patch][?(@.security)].security[*].evesso
info
tag-title-case
Tag names should be Title Case (Universe, Faction Warfare, User Interface).
$.tags[*].name
info
tag-description
Every declared tag should have a description.
$.tags[*]
error
http-get-no-body
GET operations must not declare a requestBody.
$.paths[*].get
warn
http-delete-no-body
DELETE operations should not declare a requestBody.
$.paths[*].delete
info
parameter-if-none-match-on-get
GET routes that are cacheable should accept the If-None-Match header.
$.paths[*].get