Conekta · API Governance Rules

Conekta API Rules

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

11 Rules error 3 warn 4 info 3
View Rules File View on GitHub

Rule Categories

conekta

Rules

error
conekta-server-base-url
Conekta API must declare https://api.conekta.io as a server.
$.servers[*].url
warn
conekta-operation-id-pascal-case
Conekta operationIds use PascalCase (e.g., GetCharge, CreateOrder).
$.paths[*][get,post,put,patch,delete].operationId
error
conekta-operation-id-required
All Conekta operations must define an operationId.
$.paths[*][get,post,put,patch,delete]
warn
conekta-tags-required
All Conekta operations must include at least one tag.
$.paths[*][get,post,put,patch,delete]
error
conekta-bearer-auth-defined
Conekta API must declare bearer authentication.
$.components.securitySchemes.bearerAuth
warn
conekta-accept-language-required
All Conekta operations must accept the Accept-Language header (es / en).
$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'header' && @.name == 'Accept-Language')]
info
conekta-vendor-accept-header
Conekta uses an explicit Accept media type with version (application/vnd.conekta-v2.2.0+json).
$.paths[*][get,post,put,patch,delete].responses['200'].content
warn
conekta-error-responses
Each Conekta operation should document at least one 4xx error response.
$.paths[*][get,post,put,patch,delete].responses
info
conekta-snake-case-fields
Conekta JSON fields use snake_case.
$.components.schemas..properties.*~
info
conekta-pagination-params
Conekta list endpoints accept limit, next, previous, and search query params.
$.paths[*].get.parameters[?(@.in == 'query' && @.name == 'limit')]
hint
conekta-summary-title-case
Operation summaries should use Title Case.
$.paths[*][get,post,put,patch,delete].summary

Spectral Ruleset

Raw ↑
extends: spectral:oas
rules:
  conekta-server-base-url:
    description: Conekta API must declare https://api.conekta.io as a server.
    message: "Server URL must be https://api.conekta.io"
    given: "$.servers[*].url"
    severity: error
    then:
      function: pattern
      functionOptions:
        match: "^https://api\\.conekta\\.io$"

  conekta-operation-id-pascal-case:
    description: Conekta operationIds use PascalCase (e.g., GetCharge, CreateOrder).
    message: "operationId '{{value}}' should use PascalCase"
    given: "$.paths[*][get,post,put,patch,delete].operationId"
    severity: warn
    then:
      function: pattern
      functionOptions:
        match: "^[A-Z][a-zA-Z0-9]+$"

  conekta-operation-id-required:
    description: All Conekta operations must define an operationId.
    message: "Operation at {{path}} is missing operationId"
    given: "$.paths[*][get,post,put,patch,delete]"
    severity: error
    then:
      field: operationId
      function: truthy

  conekta-tags-required:
    description: All Conekta operations must include at least one tag.
    message: "Operation must include at least one tag"
    given: "$.paths[*][get,post,put,patch,delete]"
    severity: warn
    then:
      field: tags
      function: truthy

  conekta-bearer-auth-defined:
    description: Conekta API must declare bearer authentication.
    message: "Must define bearerAuth security scheme"
    given: "$.components.securitySchemes.bearerAuth"
    severity: error
    then:
      function: truthy

  conekta-accept-language-required:
    description: All Conekta operations must accept the Accept-Language header (es / en).
    message: "Operation '{{path}}' should declare the Accept-Language header parameter"
    given: "$.paths[*][get,post,put,patch,delete].parameters[?(@.in == 'header' && @.name == 'Accept-Language')]"
    severity: warn
    then:
      function: truthy

  conekta-vendor-accept-header:
    description: Conekta uses an explicit Accept media type with version (application/vnd.conekta-v2.2.0+json).
    message: "Response media type should be application/vnd.conekta-v2.2.0+json"
    given: "$.paths[*][get,post,put,patch,delete].responses['200'].content"
    severity: info
    then:
      field: "application/vnd.conekta-v2.2.0+json"
      function: truthy

  conekta-error-responses:
    description: Each Conekta operation should document at least one 4xx error response.
    message: "Operation '{{path}}' should declare a 4xx error response"
    given: "$.paths[*][get,post,put,patch,delete].responses"
    severity: warn
    then:
      function: schema
      functionOptions:
        schema:
          anyOf:
            - required: ["400"]
            - required: ["401"]
            - required: ["402"]
            - required: ["404"]
            - required: ["422"]

  conekta-snake-case-fields:
    description: Conekta JSON fields use snake_case.
    message: "Field name '{{property}}' should use snake_case"
    given: "$.components.schemas..properties.*~"
    severity: info
    then:
      function: pattern
      functionOptions:
        match: "^[a-z][a-z0-9_]*$"

  conekta-pagination-params:
    description: Conekta list endpoints accept limit, next, previous, and search query params.
    message: "List operation '{{path}}' should accept limit/next/previous query params"
    given: "$.paths[*].get.parameters[?(@.in == 'query' && @.name == 'limit')]"
    severity: info
    then:
      function: truthy

  conekta-summary-title-case:
    description: Operation summaries should use Title Case.
    message: "Summary '{{value}}' should use Title Case"
    given: "$.paths[*][get,post,put,patch,delete].summary"
    severity: hint
    then:
      function: pattern
      functionOptions:
        match: "^[A-Z][A-Za-z0-9 ,'/&\\-]+$"