Webflow API and Documentation · API Governance Rules

Webflow API and Documentation — webflow rules

Spectral linting rules defining API design standards and conventions for Webflow API and Documentation.

26 Rules error 8 warn 10 info 8
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

delete get info no openapi operation parameter paths request response schema security servers

Rules

warn
info-title-webflow-prefix
API title must start with "Webflow" to match provider naming convention.
$.info
warn
info-description-required
API must have a non-empty description.
$.info
error
info-version-required
API info must include a version.
$.info
error
openapi-version-3
Webflow API specs must use OpenAPI 3.x.
$
warn
servers-defined
At least one server must be defined.
$
error
servers-https
Server URLs must use HTTPS.
$.servers[*]
info
servers-webflow-domain
Webflow API servers must use the api.webflow.com domain.
$.servers[*]
warn
paths-no-trailing-slash
Paths must not end with a trailing slash.
$.paths[*]~
info
paths-snake-case-segments
Webflow path segments use snake_case (underscores).
$.paths[*]~
error
operation-summary-required
Every operation must have a summary.
$.paths[*][get,post,put,patch,delete]
warn
operation-summary-title-case
Operation summaries must start with an uppercase letter.
$.paths[*][get,post,put,patch,delete].summary
error
operation-id-required
Every operation must have an operationId.
$.paths[*][get,post,put,patch,delete]
info
operation-id-kebab-case
Operation IDs in Webflow APIs use kebab-case.
$.paths[*][get,post,put,patch,delete].operationId
warn
operation-tags-required
Every operation must have at least one tag.
$.paths[*][get,post,put,patch,delete]
warn
parameter-description-required
Every parameter must have a description.
$.paths[*][get,post,put,patch,delete].parameters[*]
warn
request-body-content-type
Request bodies must define application/json content type.
$.paths[*][post,put,patch].requestBody.content
error
response-success-required
Every operation must define 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 define 401 Unauthorized response.
$.paths[*][get,post,put,patch,delete].responses
info
schema-camelcase-properties
Webflow API schema properties use camelCase naming.
$.components.schemas[*].properties[*]~
info
schema-description-recommended
Component schemas should have descriptions.
$.components.schemas[*]
warn
security-schemes-defined
Security schemes must be defined.
$.components
info
security-oauth2-or-apikey
Webflow uses OAuth 2.0 and API key authentication.
$.components.securitySchemes[*].type
error
get-no-request-body
GET operations must not have a request body.
$.paths[*].get
info
delete-returns-204
DELETE operations should return 204 No Content.
$.paths[*].delete.responses
error
no-empty-descriptions
Descriptions must not be empty strings.
$..description

Spectral Ruleset

Raw ↑
rules:
  # INFO / METADATA
  info-title-webflow-prefix:
    description: API title must start with "Webflow" to match provider naming convention.
    message: "{{property}} title should start with 'Webflow'"
    severity: warn
    given: "$.info"
    then:
      field: title
      function: pattern
      functionOptions:
        match: "^Webflow"

  info-description-required:
    description: API must have a non-empty description.
    message: "{{property}} description is required"
    severity: warn
    given: "$.info"
    then:
      field: description
      function: truthy

  info-version-required:
    description: API info must include a version.
    message: "{{property}} must have a version"
    severity: error
    given: "$.info"
    then:
      field: version
      function: truthy

  # OPENAPI VERSION
  openapi-version-3:
    description: Webflow API specs must use OpenAPI 3.x.
    message: "{{property}} must be OpenAPI 3.x"
    severity: error
    given: "$"
    then:
      field: openapi
      function: pattern
      functionOptions:
        match: "^3\\."

  # SERVERS
  servers-defined:
    description: At least one server must be defined.
    message: "{{property}} servers must be defined"
    severity: warn
    given: "$"
    then:
      field: servers
      function: truthy

  servers-https:
    description: Server URLs must use HTTPS.
    message: "{{value}} must use HTTPS"
    severity: error
    given: "$.servers[*]"
    then:
      field: url
      function: pattern
      functionOptions:
        match: "^https://"

  servers-webflow-domain:
    description: Webflow API servers must use the api.webflow.com domain.
    message: "{{value}} should use api.webflow.com"
    severity: info
    given: "$.servers[*]"
    then:
      field: url
      function: pattern
      functionOptions:
        match: "api\\.webflow\\.com"

  # PATHS — NAMING CONVENTIONS
  paths-no-trailing-slash:
    description: Paths must not end with a trailing slash.
    message: "{{property}} must not end with a slash"
    severity: warn
    given: "$.paths[*]~"
    then:
      function: pattern
      functionOptions:
        notMatch: "/$"

  paths-snake-case-segments:
    description: Webflow path segments use snake_case (underscores).
    message: "{{property}} path segments should use snake_case"
    severity: info
    given: "$.paths[*]~"
    then:
      function: pattern
      functionOptions:
        notMatch: "[A-Z]"

  # OPERATIONS
  operation-summary-required:
    description: Every operation must have a summary.
    message: "{{property}} must have a summary"
    severity: error
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: summary
      function: truthy

  operation-summary-title-case:
    description: Operation summaries must start with an uppercase letter.
    message: "{{property}} summary must start with uppercase"
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete].summary"
    then:
      function: pattern
      functionOptions:
        match: "^[A-Z]"

  operation-id-required:
    description: Every operation must have an operationId.
    message: "{{property}} must have an operationId"
    severity: error
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: operationId
      function: truthy

  operation-id-kebab-case:
    description: Operation IDs in Webflow APIs use kebab-case.
    message: "{{value}} operationId should use kebab-case"
    severity: info
    given: "$.paths[*][get,post,put,patch,delete].operationId"
    then:
      function: pattern
      functionOptions:
        notMatch: "_"

  operation-tags-required:
    description: Every operation must have at least one tag.
    message: "{{property}} must have at least one tag"
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: tags
      function: truthy

  # PARAMETERS
  parameter-description-required:
    description: Every parameter must have a description.
    message: "{{property}} parameter must have a description"
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete].parameters[*]"
    then:
      field: description
      function: truthy

  # REQUEST BODIES
  request-body-content-type:
    description: Request bodies must define application/json content type.
    message: "{{property}} request body should define application/json"
    severity: warn
    given: "$.paths[*][post,put,patch].requestBody.content"
    then:
      field: application/json
      function: truthy

  # RESPONSES
  response-success-required:
    description: Every operation must define at least one 2xx response.
    message: "{{property}} must have a success response"
    severity: error
    given: "$.paths[*][get,post,put,patch,delete].responses"
    then:
      function: schema
      functionOptions:
        schema:
          oneOf:
            - required: ["200"]
            - required: ["201"]
            - required: ["204"]

  response-description-required:
    description: Every response must have a description.
    message: "{{property}} 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 define 401 Unauthorized response.
    message: "{{property}} should include 401 Unauthorized"
    severity: info
    given: "$.paths[*][get,post,put,patch,delete].responses"
    then:
      field: "401"
      function: truthy

  # SCHEMAS — PROPERTY NAMING
  schema-camelcase-properties:
    description: Webflow API schema properties use camelCase naming.
    message: "{{property}} should use camelCase"
    severity: info
    given: "$.components.schemas[*].properties[*]~"
    then:
      function: pattern
      functionOptions:
        notMatch: "_"

  schema-description-recommended:
    description: Component schemas should have descriptions.
    message: "{{property}} should have a description"
    severity: info
    given: "$.components.schemas[*]"
    then:
      field: description
      function: truthy

  # SECURITY
  security-schemes-defined:
    description: Security schemes must be defined.
    message: "{{property}} must define security schemes"
    severity: warn
    given: "$.components"
    then:
      field: securitySchemes
      function: truthy

  security-oauth2-or-apikey:
    description: Webflow uses OAuth 2.0 and API key authentication.
    message: "{{property}} must use OAuth2 or ApiKey scheme"
    severity: info
    given: "$.components.securitySchemes[*].type"
    then:
      function: enumeration
      functionOptions:
        values:
          - oauth2
          - apiKey
          - http

  # HTTP METHOD CONVENTIONS
  get-no-request-body:
    description: GET operations must not have a request body.
    message: "{{property}} GET must not have requestBody"
    severity: error
    given: "$.paths[*].get"
    then:
      field: requestBody
      function: falsy

  delete-returns-204:
    description: DELETE operations should return 204 No Content.
    message: "{{property}} DELETE should return 204"
    severity: info
    given: "$.paths[*].delete.responses"
    then:
      field: "204"
      function: truthy

  # GENERAL QUALITY
  no-empty-descriptions:
    description: Descriptions must not be empty strings.
    message: "{{property}} description must not be empty"
    severity: error
    given: "$..description"
    then:
      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/webflow-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.