Sysco · API Governance Rules

Sysco API Rules

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

13 Rules error 6 warn 6 info 1
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.
View Rules File View on GitHub

Rule Categories

delivery list operation order paths post product response

Rules

error
operation-operationId
All operations must have an operationId.
$.paths[*][get,post,put,patch,delete]
error
operation-summary
All operations must have a summary.
$.paths[*][get,post,put,patch,delete]
warn
operation-summary-title-case
Operation summaries must use Title Case.
$.paths[*][get,post,put,patch,delete].summary
warn
operation-tags
All operations must have at least one tag.
$.paths[*][get,post,put,patch,delete]
warn
operation-description
All operations should have a description.
$.paths[*][get,post,put,patch,delete]
error
product-supc-field
Product schema must include a productId (SUPC) field.
$.components.schemas.Product.properties
error
order-delivery-date
Order schema must include a deliveryDate field.
$.components.schemas.Order.properties
error
order-item-quantity
OrderItem schema must include a quantity field.
$.components.schemas.OrderItem.properties
warn
list-pagination-page
List operations should support page parameter for pagination.
$.paths[*].get
info
response-schema-ref
Response schemas should use $ref for maintainability.
$.paths[*][*].responses['200'].content['application/json'].schema
error
post-request-body
POST operations must include a request body.
$.paths[*].post
warn
paths-kebab-case
Path segments must use kebab-case (lowercase with hyphens).
$.paths
warn
delivery-eta-field
Delivery schema should include estimatedArrival for tracking.
$.components.schemas.Delivery.properties

Spectral Ruleset

Raw ↑
extends: spectral:oas
rules:
  # Require operationId
  operation-operationId:
    description: All operations must have an operationId.
    severity: error
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: operationId
      function: truthy

  # Require summary
  operation-summary:
    description: All operations must have a summary.
    severity: error
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: summary
      function: truthy

  # Enforce Title Case on summaries
  operation-summary-title-case:
    description: Operation summaries must use Title Case.
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete].summary"
    then:
      function: pattern
      functionOptions:
        match: "^[A-Z][a-zA-Z0-9 ]*$"

  # Require tags on all operations
  operation-tags:
    description: All operations must have at least one tag.
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: tags
      function: truthy

  # Require description on operations
  operation-description:
    description: All operations should have a description.
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: description
      function: truthy

  # Products must include SUPC field
  product-supc-field:
    description: Product schema must include a productId (SUPC) field.
    severity: error
    given: "$.components.schemas.Product.properties"
    then:
      field: productId
      function: truthy

  # Orders must include deliveryDate
  order-delivery-date:
    description: Order schema must include a deliveryDate field.
    severity: error
    given: "$.components.schemas.Order.properties"
    then:
      field: deliveryDate
      function: truthy

  # Order items must have required quantity
  order-item-quantity:
    description: OrderItem schema must include a quantity field.
    severity: error
    given: "$.components.schemas.OrderItem.properties"
    then:
      field: quantity
      function: truthy

  # List operations must support pagination
  list-pagination-page:
    description: List operations should support page parameter for pagination.
    severity: warn
    given: "$.paths[*].get"
    then:
      field: parameters
      function: truthy

  # Response schemas should be referenced
  response-schema-ref:
    description: Response schemas should use $ref for maintainability.
    severity: info
    given: "$.paths[*][*].responses['200'].content['application/json'].schema"
    then:
      function: truthy

  # POST operations must have request body
  post-request-body:
    description: POST operations must include a request body.
    severity: error
    given: "$.paths[*].post"
    then:
      field: requestBody
      function: truthy

  # Paths must use kebab-case
  paths-kebab-case:
    description: Path segments must use kebab-case (lowercase with hyphens).
    severity: warn
    given: "$.paths"
    then:
      function: pattern
      functionOptions:
        match: "^(/[a-z0-9{}-]+)+$"

  # Delivery tracking should include estimatedArrival
  delivery-eta-field:
    description: Delivery schema should include estimatedArrival for tracking.
    severity: warn
    given: "$.components.schemas.Delivery.properties"
    then:
      field: estimatedArrival
      function: truthy

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/sysco-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.