Home
7digital
7digital API Rules
7digital API Rules
Spectral linting rules defining API design standards and conventions for 7digital.
36 Rules
error 17
warn 15
info 4
Authorship not recorded
No authorship marker is recorded for this file. It is not presented as the provider's; it was most likely written by an API Evangelist pass before outputs were stamped.
Rule Categories
delete
global
info
no
oauth
openapi
operation
parameter
path
post
request
response
schema
servers
tag
Rules
error
info-title-prefix
API title must begin with "7digital" (the provider brand).
$.info.title
error
info-description-required
API info MUST include a non-trivial description (>= 60 chars).
$.info
error
info-version-required
API info MUST include a version.
$.info
warn
info-contact-required
API info SHOULD declare a contact (Client Success).
$.info
warn
info-license-required
API info SHOULD declare a license (commercial agreement).
$.info
error
openapi-version-pinned
OpenAPI must be 3.0.x.
$.openapi
error
servers-required
At least one server MUST be defined.
$
error
servers-https-only
Server URLs MUST use https (TLS).
$.servers[*].url
info
servers-7digital-host
Production servers SHOULD live under api.7digital.com.
$.servers[*].url
error
path-no-trailing-slash
Paths MUST NOT end with a trailing slash.
$.paths.*~
warn
path-camel-case-segments
Path segments use camelCase (e.g. `unlimitedStreaming`) per the existing 7digital convention.
$.paths.*~
error
operation-id-required
Every operation MUST declare an operationId.
$.paths.*[get,post,put,patch,delete]
error
operation-id-camel-case
operationId MUST be camelCase.
$.paths.*[get,post,put,patch,delete].operationId
warn
operation-id-verb-prefix
operationId SHOULD start with a known verb prefix.
$.paths.*[get,post,put,patch,delete].operationId
error
operation-summary-required
Every operation MUST declare a summary.
$.paths.*[get,post,put,patch,delete]
error
operation-summary-prefix
Operation summaries MUST begin with "7digital ".
$.paths.*[get,post,put,patch,delete].summary
warn
operation-description-required
Every operation MUST declare a description.
$.paths.*[get,post,put,patch,delete]
error
operation-tags-required
Every operation MUST be tagged.
$.paths.*[get,post,put,patch,delete]
info
operation-microcks-extension
Operations SHOULD declare x-microcks-operation for mock-server compatibility.
$.paths.*[get,post,put,patch,delete]
warn
global-tags-defined
Global tags array SHOULD be defined with descriptions.
$
warn
tag-description-required
Each global tag MUST have a description.
$.tags[*]
info
tag-title-case
Global tag names use Title Case (e.g. "Interactive Radio").
$.tags[*].name
warn
parameter-description-required
Each parameter MUST have a description.
$..parameters[*]
error
parameter-schema-required
Each parameter MUST have a schema.type.
$..parameters[*]
warn
parameter-camel-case
Parameter names use camelCase (e.g. `pageSize`, `releaseId`).
$..parameters[*].name
warn
request-body-content-type
Request bodies SHOULD use application/json or application/x-www-form-urlencoded (OAuth signing).
$.paths.*[post,put,patch,delete].requestBody.content
error
response-success-required
Each operation MUST declare at least one 2xx response.
$.paths.*[get,post,put,patch,delete].responses
warn
response-description-required
Every response MUST have a description.
$.paths.*[get,post,put,patch,delete].responses.*
info
response-error-401
Operations SHOULD declare a 401 response (authentication failure).
$.paths.*[get,post,put,patch,delete].responses
warn
schema-property-camel-case
Schema properties use camelCase (e.g. `releaseId`, `previewUrl`).
$.components.schemas..properties.*~
warn
schema-type-required
Schemas MUST declare a type or composition keyword.
$.components.schemas.*
error
global-security-required
A global security requirement MUST be defined (OAuth 1.0).
$
error
oauth-security-scheme-defined
Security schemes MUST include an OAuth 1.0 scheme.
$.components.securitySchemes
error
no-get-request-body
GET operations MUST NOT declare a request body.
$.paths.*.get
warn
post-put-patch-request-body
POST, PUT, and PATCH operations SHOULD declare a request body.
$.paths.*[post,put,patch]
warn
delete-no-request-body
DELETE operations MUST NOT declare a request body.
$.paths.*.delete
Spectral Ruleset
# 7digital Spectral Ruleset
# Generated for api-evangelist/7digital — enforces the conventions observed
# across the 7digital classic API (v1.2) and the modern MassiveMusic Streaming
# Platform API.
extends:
- spectral:oas
rules:
# ── INFO / METADATA ─────────────────────────────────────────────────────
info-title-prefix:
description: API title must begin with "7digital" (the provider brand).
severity: error
given: $.info.title
then:
function: pattern
functionOptions:
match: "^7digital"
info-description-required:
description: API info MUST include a non-trivial description (>= 60 chars).
severity: error
given: $.info
then:
field: description
function: length
functionOptions:
min: 60
info-version-required:
description: API info MUST include a version.
severity: error
given: $.info
then:
field: version
function: truthy
info-contact-required:
description: API info SHOULD declare a contact (Client Success).
severity: warn
given: $.info
then:
field: contact
function: truthy
info-license-required:
description: API info SHOULD declare a license (commercial agreement).
severity: warn
given: $.info
then:
field: license
function: truthy
# ── OPENAPI VERSION + SERVERS ──────────────────────────────────────────
openapi-version-pinned:
description: OpenAPI must be 3.0.x.
severity: error
given: $.openapi
then:
function: pattern
functionOptions:
match: "^3\\.0\\."
servers-required:
description: At least one server MUST be defined.
severity: error
given: $
then:
field: servers
function: schema
functionOptions:
schema:
type: array
minItems: 1
servers-https-only:
description: Server URLs MUST use https (TLS).
severity: error
given: $.servers[*].url
then:
function: pattern
functionOptions:
match: "^https://"
servers-7digital-host:
description: Production servers SHOULD live under api.7digital.com.
severity: info
given: $.servers[*].url
then:
function: pattern
functionOptions:
match: "api\\.7digital\\.com"
# ── PATHS ──────────────────────────────────────────────────────────────
path-no-trailing-slash:
description: Paths MUST NOT end with a trailing slash.
severity: error
given: $.paths.*~
then:
function: pattern
functionOptions:
notMatch: "/$"
path-camel-case-segments:
description: Path segments use camelCase (e.g. `unlimitedStreaming`) per the existing 7digital convention.
severity: warn
given: $.paths.*~
then:
function: pattern
functionOptions:
match: "^(/[a-zA-Z][a-zA-Z0-9-]*(\\{[a-zA-Z][a-zA-Z0-9]*\\})?)+$"
# ── OPERATIONS ─────────────────────────────────────────────────────────
operation-id-required:
description: Every operation MUST declare an operationId.
severity: error
given: $.paths.*[get,post,put,patch,delete]
then:
field: operationId
function: truthy
operation-id-camel-case:
description: operationId MUST be camelCase.
severity: error
given: $.paths.*[get,post,put,patch,delete].operationId
then:
function: pattern
functionOptions:
match: "^[a-z][a-zA-Z0-9]*$"
operation-id-verb-prefix:
description: operationId SHOULD start with a known verb prefix.
severity: warn
given: $.paths.*[get,post,put,patch,delete].operationId
then:
function: pattern
functionOptions:
match: "^(get|list|find|search|browse|create|update|delete|remove|add|apply|complete|signup|authenticate|stream|download|transfer|report|post|put|deliver|select|register|resolve|match|credit|authorize|authorise)[A-Z]"
operation-summary-required:
description: Every operation MUST declare a summary.
severity: error
given: $.paths.*[get,post,put,patch,delete]
then:
field: summary
function: truthy
operation-summary-prefix:
description: Operation summaries MUST begin with "7digital ".
severity: error
given: $.paths.*[get,post,put,patch,delete].summary
then:
function: pattern
functionOptions:
match: "^7digital "
operation-description-required:
description: Every operation MUST declare a description.
severity: warn
given: $.paths.*[get,post,put,patch,delete]
then:
field: description
function: truthy
operation-tags-required:
description: Every operation MUST be tagged.
severity: error
given: $.paths.*[get,post,put,patch,delete]
then:
field: tags
function: schema
functionOptions:
schema:
type: array
minItems: 1
operation-microcks-extension:
description: Operations SHOULD declare x-microcks-operation for mock-server compatibility.
severity: info
given: $.paths.*[get,post,put,patch,delete]
then:
field: x-microcks-operation
function: truthy
# ── TAGS ───────────────────────────────────────────────────────────────
global-tags-defined:
description: Global tags array SHOULD be defined with descriptions.
severity: warn
given: $
then:
field: tags
function: schema
functionOptions:
schema:
type: array
minItems: 1
tag-description-required:
description: Each global tag MUST have a description.
severity: warn
given: $.tags[*]
then:
field: description
function: truthy
tag-title-case:
description: Global tag names use Title Case (e.g. "Interactive Radio").
severity: info
given: $.tags[*].name
then:
function: pattern
functionOptions:
match: "^[A-Z][A-Za-z0-9]*( [A-Z][A-Za-z0-9]*)*$"
# ── PARAMETERS ─────────────────────────────────────────────────────────
parameter-description-required:
description: Each parameter MUST have a description.
severity: warn
given: $..parameters[*]
then:
field: description
function: truthy
parameter-schema-required:
description: Each parameter MUST have a schema.type.
severity: error
given: $..parameters[*]
then:
field: schema
function: truthy
parameter-camel-case:
description: Parameter names use camelCase (e.g. `pageSize`, `releaseId`).
severity: warn
given: $..parameters[*].name
then:
function: pattern
functionOptions:
match: "^[a-z][a-zA-Z0-9]*$"
# ── REQUEST BODIES ─────────────────────────────────────────────────────
request-body-content-type:
description: Request bodies SHOULD use application/json or application/x-www-form-urlencoded (OAuth signing).
severity: warn
given: $.paths.*[post,put,patch,delete].requestBody.content
then:
function: schema
functionOptions:
schema:
type: object
anyOf:
- required: ["application/json"]
- required: ["application/x-www-form-urlencoded"]
# ── RESPONSES ──────────────────────────────────────────────────────────
response-success-required:
description: Each operation MUST declare at least one 2xx response.
severity: error
given: $.paths.*[get,post,put,patch,delete].responses
then:
function: schema
functionOptions:
schema:
type: object
anyOf:
- required: ["200"]
- required: ["201"]
- required: ["202"]
- required: ["204"]
response-description-required:
description: Every response MUST have a description.
severity: warn
given: $.paths.*[get,post,put,patch,delete].responses.*
then:
field: description
function: truthy
response-error-401:
description: Operations SHOULD declare a 401 response (authentication failure).
severity: info
given: $.paths.*[get,post,put,patch,delete].responses
then:
field: "401"
function: truthy
# ── SCHEMAS ────────────────────────────────────────────────────────────
schema-property-camel-case:
description: Schema properties use camelCase (e.g. `releaseId`, `previewUrl`).
severity: warn
given: $.components.schemas..properties.*~
then:
function: pattern
functionOptions:
match: "^[a-z][a-zA-Z0-9]*$"
schema-type-required:
description: Schemas MUST declare a type or composition keyword.
severity: warn
given: $.components.schemas.*
then:
function: schema
functionOptions:
schema:
type: object
anyOf:
- required: ["type"]
- required: ["allOf"]
- required: ["oneOf"]
- required: ["anyOf"]
- required: ["$ref"]
# ── SECURITY ───────────────────────────────────────────────────────────
global-security-required:
description: A global security requirement MUST be defined (OAuth 1.0).
severity: error
given: $
then:
field: security
function: truthy
oauth-security-scheme-defined:
description: Security schemes MUST include an OAuth 1.0 scheme.
severity: error
given: $.components.securitySchemes
then:
field: oauth1
function: truthy
# ── HTTP METHOD CONVENTIONS ────────────────────────────────────────────
no-get-request-body:
description: GET operations MUST NOT declare a request body.
severity: error
given: $.paths.*.get
then:
field: requestBody
function: falsy
post-put-patch-request-body:
description: POST, PUT, and PATCH operations SHOULD declare a request body.
severity: warn
given: $.paths.*[post,put,patch]
then:
field: requestBody
function: truthy
delete-no-request-body:
description: DELETE operations MUST NOT declare a request body.
severity: warn
given: $.paths.*.delete
then:
field: requestBody
function: falsy
Every ruleset here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for spectral rules
4 MCP tools reach this
find_rulesBrowse and filter every ruleset in the catalog.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This ruleset
curl "https://apis.io/api/v1/rules/7digital-rules"
All spectral rules
curl "https://apis.io/api/v1/rules?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms .
A second provider on the same verified email joins the account you already have.