Autron · API Governance Rules

Autron API Rules

Spectral linting rules defining API design standards and conventions for Autron.

28 Rules error 18 warn 9 info 1
Generated by API Evangelist Written by API Evangelist tooling for Autron's APIs. It is a starting point, not a ruleset Autron publishes or enforces.
View Rules File View on GitHub

Rule Categories

info operation parameter path response tag

Rules

error
operation-has-operationid
Every operation declares an operationId (measured: 100% of this contract)
$.paths[*][get,post,put,patch,delete]
warn
operation-has-summary
Every operation has a summary (measured: 99% of this contract)
$.paths[*][get,post,put,patch,delete]
error
operation-has-tags
Every operation is tagged (measured: 100% of this contract)
$.paths[*][get,post,put,patch,delete]
warn
operation-has-success-response
Every operation declares a 2xx response (measured: 98% of this contract)
$.paths[*][get,post,put,patch,delete].responses
warn
operation-secured
Every operation declares its own security requirement (measured: 94% of this contract)
$.paths[*][get,post,put,patch,delete]
error
path-segment-casing-kebab
Path segments are kebab case (measured: 100% of this contract)
$.paths[*]~
warn
path-no-trailing-slash
Paths carry no trailing slash (measured: 90% of this contract)
$.paths[*]~
error
path-params-in-braces
Path parameters use {braces}, not :colon (measured: 100% of this contract)
$.paths[*]~
error
info-title-present
Info declares title (measured: 100% of this contract)
$.info
error
info-version-present
Info declares version (measured: 100% of this contract)
$.info
error
tag-name-present
Tag declares name (measured: 100% of this contract)
$.tags[*]
warn
tag-name-casing-kebab
Tag.name is kebab case (measured: 95% of this contract)
$.tags[*].name
error
tag-description-present
Tag declares description (measured: 100% of this contract)
$.tags[*]
error
tag-description-min-length
Tag.description runs at least 23 characters (measured: 100% of this contract)
$.tags[*].description
error
operation-tags-present
Operation declares tags (measured: 100% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace]
warn
operation-summary-present
Operation declares summary (measured: 99% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace]
warn
operation-summary-min-length
Operation.summary runs at least 18 characters (measured: 95% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace].summary
warn
operation-description-min-length
Operation.description runs at least 38 characters (measured: 96% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace].description
error
operation-operationid-present
Operation declares operationId (measured: 100% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace]
error
operation-responses-present
Operation declares responses (measured: 100% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace]
warn
operation-security-present
Operation declares security (measured: 94% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace]
error
parameter-name-present
Parameter declares name (measured: 100% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*]
info
parameter-name-casing-snake
Parameter.name is snake case (measured: 84% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*].name
error
parameter-in-present
Parameter declares in (measured: 100% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*]
error
parameter-in-values
Parameter.in is one of body, query (measured: 100% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*].in
error
parameter-description-min-length
Parameter.description runs at least 24 characters (measured: 100% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*].description
error
response-description-present
Response declares description (measured: 100% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace].responses[*]
error
response-description-min-length
Response.description runs at least 7 characters (measured: 100% of this contract)
$.paths[*][get,put,post,delete,patch,options,head,trace].responses[*].description

Spectral Ruleset

autron-ai-rules.yml Raw ↑
# authorship: generated by API Evangelist tooling (derive-rules.py, 2026-11-02). x-method: generated
# Every rule below was MEASURED against Autron's own contract before it was written; a rule is present only
# when the contract satisfies it at 80% or more. Severity: 100% -> error, >= 90% -> warn, else info.
# Provenance:
#   - operation-has-operationid: 100%
#   - operation-has-summary: 99%
#   - operation-has-tags: 100%
#   - operation-has-success-response: 99%
#   - operation-secured: 95%
#   - path-segment-casing-kebab: 100%
#   - path-no-trailing-slash: 90%
#   - path-params-in-braces: 100%
#   - info-title-present: 100%
#   - info-version-present: 100%
#   - tag-name-present: 100%
#   - tag-name-casing-kebab: 96%
#   - tag-description-present: 100%
#   - tag-description-min-length: 100%
#   - operation-tags-present: 100%
#   - operation-summary-present: 99%
#   - operation-summary-min-length: 96%
#   - operation-description-min-length: 97%
#   - operation-operationid-present: 100%
#   - operation-responses-present: 100%
#   - operation-security-present: 95%
#   - parameter-name-present: 100%
#   - parameter-name-casing-snake: 84%
#   - parameter-in-present: 100%
#   - parameter-in-values: 100%
#   - parameter-description-min-length: 100%
#   - response-description-present: 100%
#   - response-description-min-length: 100%
x-method: generated
x-generator: derive-rules.py
x-generated: '2026-11-02'
x-source:
- openapi/_original/swagger.json
x-self-check:
  status: checked
  rules: 28
  dropped: {}
extends:
- - spectral:oas
  - recommended
formats:
- oas3
rules:
  operation-has-operationid:
    description: 'Every operation declares an operationId (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,post,put,patch,delete]
    then:
      field: operationId
      function: truthy
    x-pattern-key: Operation.operationId|present
  operation-has-summary:
    description: 'Every operation has a summary (measured: 99% of this contract)'
    severity: warn
    given: $.paths[*][get,post,put,patch,delete]
    then:
      field: summary
      function: truthy
    x-pattern-key: Operation.summary|present
  operation-has-tags:
    description: 'Every operation is tagged (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,post,put,patch,delete]
    then:
      field: tags
      function: truthy
    x-pattern-key: Operation.tags|present
  operation-has-success-response:
    description: 'Every operation declares a 2xx response (measured: 98% of this contract)'
    severity: warn
    given: $.paths[*][get,post,put,patch,delete].responses
    then:
      function: schema
      functionOptions:
        schema:
          type: object
          patternProperties:
            ^2\d\d$: {}
          minProperties: 1
    x-pattern-key: Operation.responses|schema:07e20b47
  operation-secured:
    description: 'Every operation declares its own security requirement (measured: 94% of this contract)'
    severity: warn
    given: $.paths[*][get,post,put,patch,delete]
    then:
      field: security
      function: truthy
    x-pattern-key: Operation.security|present
  path-segment-casing-kebab:
    description: 'Path segments are kebab case (measured: 100% of this contract)'
    severity: error
    given: $.paths[*]~
    then:
      function: pattern
      functionOptions:
        match: ^(/[a-z0-9]+(-[a-z0-9]+)*|/\{[^}]+\})+/?$
    x-pattern-key: Paths.{key}|pattern:^(/[a-z0-9]+(-[a-z0-9]+)*|/\{[^}]+\})+/?$
  path-no-trailing-slash:
    description: 'Paths carry no trailing slash (measured: 90% of this contract)'
    severity: warn
    given: $.paths[*]~
    then:
      function: pattern
      functionOptions:
        notMatch: ./$
    x-pattern-key: Paths.{key}|pattern:!./$
  path-params-in-braces:
    description: 'Path parameters use {braces}, not :colon (measured: 100% of this contract)'
    severity: error
    given: $.paths[*]~
    then:
      function: pattern
      functionOptions:
        notMatch: ':'
    x-pattern-key: 'Paths.{key}|pattern:!:'
  info-title-present:
    description: 'Info declares title (measured: 100% of this contract)'
    severity: error
    given: $.info
    then:
      field: title
      function: defined
    x-pattern-key: Info.title|present
  info-version-present:
    description: 'Info declares version (measured: 100% of this contract)'
    severity: error
    given: $.info
    then:
      field: version
      function: defined
    x-pattern-key: Info.version|present
  tag-name-present:
    description: 'Tag declares name (measured: 100% of this contract)'
    severity: error
    given: $.tags[*]
    then:
      field: name
      function: defined
    x-pattern-key: Tag.name|present
  tag-name-casing-kebab:
    description: 'Tag.name is kebab case (measured: 95% of this contract)'
    severity: warn
    given: $.tags[*].name
    then:
      function: pattern
      functionOptions:
        match: ^[a-z0-9]+(-[a-z0-9]+)*$
    x-pattern-key: Tag.name|pattern:^[a-z0-9]+(-[a-z0-9]+)*$
  tag-description-present:
    description: 'Tag declares description (measured: 100% of this contract)'
    severity: error
    given: $.tags[*]
    then:
      field: description
      function: defined
    x-pattern-key: Tag.description|present
  tag-description-min-length:
    description: 'Tag.description runs at least 23 characters (measured: 100% of this contract)'
    severity: error
    given: $.tags[*].description
    then:
      function: length
      functionOptions:
        min: 23
    x-pattern-key: Tag.description|length
  operation-tags-present:
    description: 'Operation declares tags (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,put,post,delete,patch,options,head,trace]
    then:
      field: tags
      function: defined
    x-pattern-key: Operation.tags|present
  operation-summary-present:
    description: 'Operation declares summary (measured: 99% of this contract)'
    severity: warn
    given: $.paths[*][get,put,post,delete,patch,options,head,trace]
    then:
      field: summary
      function: defined
    x-pattern-key: Operation.summary|present
  operation-summary-min-length:
    description: 'Operation.summary runs at least 18 characters (measured: 95% of this contract)'
    severity: warn
    given: $.paths[*][get,put,post,delete,patch,options,head,trace].summary
    then:
      function: length
      functionOptions:
        min: 18
    x-pattern-key: Operation.summary|length
  operation-description-min-length:
    description: 'Operation.description runs at least 38 characters (measured: 96% of this contract)'
    severity: warn
    given: $.paths[*][get,put,post,delete,patch,options,head,trace].description
    then:
      function: length
      functionOptions:
        min: 38
    x-pattern-key: Operation.description|length
  operation-operationid-present:
    description: 'Operation declares operationId (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,put,post,delete,patch,options,head,trace]
    then:
      field: operationId
      function: defined
    x-pattern-key: Operation.operationId|present
  operation-responses-present:
    description: 'Operation declares responses (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,put,post,delete,patch,options,head,trace]
    then:
      field: responses
      function: defined
    x-pattern-key: Operation.responses|present
  operation-security-present:
    description: 'Operation declares security (measured: 94% of this contract)'
    severity: warn
    given: $.paths[*][get,put,post,delete,patch,options,head,trace]
    then:
      field: security
      function: defined
    x-pattern-key: Operation.security|present
  parameter-name-present:
    description: 'Parameter declares name (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*]
    then:
      field: name
      function: defined
    x-pattern-key: Parameter.name|present
  parameter-name-casing-snake:
    description: 'Parameter.name is snake case (measured: 84% of this contract)'
    severity: info
    given: $.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*].name
    then:
      function: pattern
      functionOptions:
        match: ^[a-z0-9]+(_[a-z0-9]+)*$
    x-pattern-key: Parameter.name|pattern:^[a-z0-9]+(_[a-z0-9]+)*$
  parameter-in-present:
    description: 'Parameter declares in (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*]
    then:
      field: in
      function: defined
    x-pattern-key: Parameter.in|present
  parameter-in-values:
    description: 'Parameter.in is one of body, query (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*].in
    then:
      function: enumeration
      functionOptions:
        values:
        - body
        - query
    x-pattern-key: Parameter.in|enum:body,query
  parameter-description-min-length:
    description: 'Parameter.description runs at least 24 characters (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,put,post,delete,patch,options,head,trace].parameters[*].description
    then:
      function: length
      functionOptions:
        min: 24
    x-pattern-key: Parameter.description|length
  response-description-present:
    description: 'Response declares description (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,put,post,delete,patch,options,head,trace].responses[*]
    then:
      field: description
      function: defined
    x-pattern-key: Response.description|present
  response-description-min-length:
    description: 'Response.description runs at least 7 characters (measured: 100% of this contract)'
    severity: error
    given: $.paths[*][get,put,post,delete,patch,options,head,trace].responses[*].description
    then:
      function: length
      functionOptions:
        min: 7
    x-pattern-key: Response.description|length

Work with this as data

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/autron-ai-rules"
All spectral rules
curl "https://apis.io/api/v1/rules?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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.