Workleap · API Governance Rules

Workleap — wl api guidelines rules

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

19 Rules error 2 warn 17
Published by Workleap Served by the provider at https://github.com/workleap/wl-api-guidelines/blob/764bd20880f60765a48197b7ee0afca9bc0bd2bd/.workleap.rules.yaml; the copy below was fetched from there.
View Rules File View on GitHub

Rule Categories

items must path schema schemas

Rules

error
schema-ids-must-have-alphanumeric-characters-only
All schema ids must only contain alphanumeric characters. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-ids-must-have-alphanumeric-characters-only
$.components.schemas
warn
schemas-properties-must-have-a-type
All schemas properties must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type
$..schemas.*.properties.*
warn
schemas-properties-must-have-a-type-backend
All schemas properties must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type
$..schemas.*.properties.*
warn
schemas-properties-must-have-a-type-frontend
All schemas properties must have a type, schema reference, or composition keyword (allOf/anyOf/oneOf). Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type
$..schemas.*.properties.*
warn
path-schema-properties-must-have-a-type
All path schema properties must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type
$..schema.properties.*
warn
path-schema-properties-must-have-a-type-backend
All path schema properties must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type
$..schema.properties.*
warn
path-schema-properties-must-have-a-type-frontend
All path schema properties must have a type, schema reference, or composition keyword (allOf/anyOf/oneOf). Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type
$..schema.properties.*
warn
schema-object-must-have-a-type
All schema objects must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-object-must-have-a-type
$.components.schemas.*
warn
schema-object-must-have-a-type-backend
All schema objects must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-object-must-have-a-type
$.components.schemas.*
warn
schema-object-must-have-a-type-frontend
All schema objects must have a type, schema reference, or composition keyword (allOf/anyOf/oneOf). Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-object-must-have-a-type
$.components.schemas.*
warn
items-must-have-a-type
All items must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#items-must-have-a-type
$.components.schemas..items
warn
items-must-have-a-type-backend
All items must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#items-must-have-a-type
$.components.schemas..items
warn
items-must-have-a-type-frontend
All items must have a type, schema reference, or composition keyword (allOf/anyOf/oneOf). Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#items-must-have-a-type
$.components.schemas..items
warn
schema-name-length-must-be-short
Schema name must not be too long to support client generation. Current limitation comes from Ruby packages which uses tar and has a limit of 100 characters. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-name-length-must-be-short
$.components.schemas[*]~
warn
must-not-use-base-server-url
Must not use base server url in spec to be able to generate a single client compatible with multiple environments. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-not-use-base-server-url
$.servers[*].url
warn
must-accept-content-types
All endpoint bodies MUST accept the header with (one of) Content-Type: application/json, multipart/form-data, application/octet-stream. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-accept-content-types
$.paths[*].*.requestBody.content
warn
must-return-content-types
Endpoint bodies for 200 responses MUST return the header with (one of) Content-Type: application/json, image/png, application/octet-stream. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-return-content-types
$.paths[*].*.responses['200'].content
warn
must-support-client-credentials-oauth2
Contract must support client credentials with oauth2. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-support-client-credentials-oauth2
$.components.securitySchemes.*
error
must-use-get-post-methods
BFF API endpoints must only use GET or POST methods. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-use-get-post-methods
$.paths[*]

Spectral Ruleset

Raw ↑
# harvested from https://github.com/workleap/wl-api-guidelines/blob/764bd20880f60765a48197b7ee0afca9bc0bd2bd/.workleap.rules.yaml on 2026-10-09 — a Spectral ruleset published in the provider's own GitHub repository (workleap/wl-api-guidelines); found by GitHub code search, fetched verbatim
x-method: harvested
x-stamped: 2026-10-09
x-source-url: https://github.com/workleap/wl-api-guidelines/blob/764bd20880f60765a48197b7ee0afca9bc0bd2bd/.workleap.rules.yaml
extends: [[spectral:oas, off]]
documentationUrl: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets
rules:
  duplicated-entry-in-enum: true
  no-eval-in-markdown: true
  no-script-tags-in-markdown: true
  openapi-tags-uniqueness: true
  operation-operationId: true
  operation-operationId-valid-in-url: true
  operation-operationId-unique: true
  operation-success-response: true
  path-keys-no-trailing-slash: true
  path-params: true
  typed-enum: true
  oas3-schema: true
  oas3-operation-security-defined: true

  schema-ids-must-have-alphanumeric-characters-only:
    description: 'All schema ids must only contain alphanumeric characters. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-ids-must-have-alphanumeric-characters-only'
    given: "$.components.schemas"
    severity: error
    then:
      field: "@key"
      function: pattern
      functionOptions:
        match: '^[a-zA-Z0-9]+$'

  # For backward compatibility
  schemas-properties-must-have-a-type:
    description: "All schemas properties must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type"
    recommended: true
    severity: warn
    given: $..schemas.*.properties.*
    then: &type-or-ref-check
      - function: truthy
      - function: schema
        functionOptions:
          schema:
            anyOf:
              - required: ["type"]
              - required: ["$ref"]

  schemas-properties-must-have-a-type-backend:
    description: "All schemas properties must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type"
    recommended: true
    severity: warn
    given: $..schemas.*.properties.*
    then: *type-or-ref-check

  schemas-properties-must-have-a-type-frontend:
    description: "All schemas properties must have a type, schema reference, or composition keyword (allOf/anyOf/oneOf). Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type"
    recommended: true
    severity: warn
    given: $..schemas.*.properties.*
    then: &type-or-composition-check
      - function: truthy
      - function: schema
        functionOptions:
          schema:
            anyOf:
              - required: ["type"]
              - required: ["$ref"]
              - required: ["allOf"]
              - required: ["anyOf"]
              - required: ["oneOf"]

  # For backward compatibility
  path-schema-properties-must-have-a-type:
    description: "All path schema properties must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type"
    recommended: true
    severity: warn
    given: $..schema.properties.*
    then: *type-or-ref-check

  path-schema-properties-must-have-a-type-backend:
    description: "All path schema properties must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type"
    recommended: true
    severity: warn
    given: $..schema.properties.*
    then: *type-or-ref-check

  path-schema-properties-must-have-a-type-frontend:
    description: "All path schema properties must have a type, schema reference, or composition keyword (allOf/anyOf/oneOf). Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schemas-properties-must-have-a-type-and-path-schema-properties-must-have-a-type"
    recommended: true
    severity: warn
    given: $..schema.properties.*
    then: *type-or-composition-check

  # For backward compatibility
  schema-object-must-have-a-type:
    description: "All schema objects must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-object-must-have-a-type"
    recommended: true
    severity: warn
    given: $.components.schemas.*
    then: *type-or-ref-check

  schema-object-must-have-a-type-backend:
    description: "All schema objects must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-object-must-have-a-type"
    recommended: true
    severity: warn
    given: $.components.schemas.*
    then: *type-or-ref-check

  schema-object-must-have-a-type-frontend:
    description: "All schema objects must have a type, schema reference, or composition keyword (allOf/anyOf/oneOf). Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-object-must-have-a-type"
    recommended: true
    severity: warn
    given: $.components.schemas.*
    then: *type-or-composition-check

  # For backward compatibility
  items-must-have-a-type:
    description: "All items must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#items-must-have-a-type"
    recommended: true
    severity: warn
    given: $.components.schemas..items
    then: *type-or-ref-check

  items-must-have-a-type-backend:
    description: "All items must have a type or schema reference. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#items-must-have-a-type"
    recommended: true
    severity: warn
    given: $.components.schemas..items
    then: *type-or-ref-check

  items-must-have-a-type-frontend:
    description: "All items must have a type, schema reference, or composition keyword (allOf/anyOf/oneOf). Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#items-must-have-a-type"
    recommended: true
    severity: warn
    given: $.components.schemas..items
    then: *type-or-composition-check

  schema-name-length-must-be-short:
    description: "Schema name must not be too long to support client generation. Current limitation comes from Ruby packages which uses tar and has a limit of 100 characters. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#schema-name-length-must-be-short"
    given: $.components.schemas[*]~
    then:
      function: length
      functionOptions:
        max: 95

  must-not-use-base-server-url:
    description: "Must not use base server url in spec to be able to generate a single client compatible with multiple environments. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-not-use-base-server-url"
    severity: warn
    given: $.servers[*].url
    then:
      function: falsy

  must-accept-content-types:
    description: "All endpoint bodies MUST accept the header with (one of) Content-Type: application/json, multipart/form-data, application/octet-stream. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-accept-content-types"
    message: "{{description}}"
    severity: warn
    given: $.paths[*].*.requestBody.content
    then:
      field: "@key"
      function: enumeration
      functionOptions:
        values:
          -  application/json
          -  multipart/form-data
          -  application/octet-stream

  must-return-content-types:
    description: "Endpoint bodies for 200 responses MUST return the header with (one of) Content-Type: application/json, image/png, application/octet-stream. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-return-content-types"
    message: "{{description}}"
    severity: warn
    given: $.paths[*].*.responses['200'].content
    then:
      field: "@key"
      function: enumeration
      functionOptions:
        values:
          -  application/json
          -  image/png
          -  application/octet-stream

  must-support-client-credentials-oauth2:
    description: "Contract must support client credentials with oauth2. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-support-client-credentials-oauth2"
    recommended: true
    severity: warn
    given: $.components.securitySchemes.*
    then:
      field: type
      function: enumeration
      functionOptions:
        values:
          - oauth2

  must-use-get-post-methods:
    description: "BFF API endpoints must only use GET or POST methods. Refer to: https://gsoftdev.atlassian.net/wiki/spaces/TEC/pages/3858235678/IDP+OpenAPI+Rulesets#must-use-get-post-methods"
    recommended: true
    severity: error
    given: $.paths[*]
    then:
      field: "@key"
      function: enumeration
      functionOptions:
        values:
          - get
          - post

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/workleap-wl-api-guidelines-spectral-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.