Giphy · API Governance Rules

Giphy API Rules

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

7 Rules error 4 warn 3
View Rules File View on GitHub

Rule Categories

giphy

Rules

error
giphy-operation-id-camel-case
GIPHY operationIds must be lowerCamelCase (verb + resource).
$.paths.*[get,post,put,patch,delete].operationId
warn
giphy-operation-summary-title-case
Operation summaries must use Title Case.
$.paths.*[get,post,put,patch,delete].summary
error
giphy-tag-allow-list
All operations must use one of the canonical GIPHY tags.
$.paths.*[get,post,put,patch,delete].tags[*]
error
giphy-api-key-required
Every GIPHY operation must require an api_key parameter or security scheme.
$.paths.*[get,post,put,patch,delete]
error
giphy-versioned-paths
All paths must be versioned under /v1/ or /v2/.
$.paths
warn
giphy-rating-enum
Rating parameters must use the canonical enum (y, g, pg, pg-13, r).
$.paths.*[get,post].parameters[?(@.name=='rating')].schema.enum
warn
giphy-response-envelope
2xx responses should expose a data/meta envelope.
$.paths.*[get,post,put,patch].responses['200','201'].content.application/json.schema

Spectral Ruleset

Raw ↑
extends:
  - spectral:oas
formats:
  - oas3
  - oas3_1
documentationUrl: https://developers.giphy.com/docs/api
rules:
  # Disable noisy core rule we override below
  operation-tag-defined: off

  giphy-operation-id-camel-case:
    description: GIPHY operationIds must be lowerCamelCase (verb + resource).
    message: '{{property}} operationId "{{value}}" must be lowerCamelCase, e.g. searchGifs, getTrendingGifs.'
    severity: error
    given: $.paths.*[get,post,put,patch,delete].operationId
    then:
      function: pattern
      functionOptions:
        match: '^[a-z][a-zA-Z0-9]+$'

  giphy-operation-summary-title-case:
    description: Operation summaries must use Title Case.
    message: 'Summary "{{value}}" must be in Title Case.'
    severity: warn
    given: $.paths.*[get,post,put,patch,delete].summary
    then:
      function: pattern
      functionOptions:
        match: '^([A-Z][a-z0-9]*|GIFs?|ID|URL|API|MP4|WebP|JSON|GIPHY)(\s+([A-Z][a-z0-9]*|GIFs?|ID|URL|API|MP4|WebP|JSON|GIPHY|by|to|the|a|an|of|for|and|or|in|on))*$'

  giphy-tag-allow-list:
    description: All operations must use one of the canonical GIPHY tags.
    message: 'Tag "{{value}}" is not in the canonical list.'
    severity: error
    given: $.paths.*[get,post,put,patch,delete].tags[*]
    then:
      function: enumeration
      functionOptions:
        values:
          - GIFs
          - Stickers
          - Emoji
          - Clips
          - Animate
          - Channels
          - Categories
          - Search Discovery
          - Analytics
          - Upload
          - Utilities

  giphy-api-key-required:
    description: Every GIPHY operation must require an api_key parameter or security scheme.
    message: Operation must declare the ApiKeyAuth security or an api_key parameter.
    severity: error
    given: $.paths.*[get,post,put,patch,delete]
    then:
      function: schema
      functionOptions:
        schema:
          type: object
          anyOf:
            - required: [security]
            - properties:
                parameters:
                  type: array
                  contains:
                    type: object
                    properties:
                      name: { const: api_key }
                    required: [name]

  giphy-versioned-paths:
    description: All paths must be versioned under /v1/ or /v2/.
    message: 'Path "{{path}}" must start with /v1/ or /v2/.'
    severity: error
    given: $.paths
    then:
      field: '@key'
      function: pattern
      functionOptions:
        match: '^/v[12]/'

  giphy-rating-enum:
    description: Rating parameters must use the canonical enum (y, g, pg, pg-13, r).
    message: 'Rating enum should be [y, g, pg, pg-13, r].'
    severity: warn
    given: $.paths.*[get,post].parameters[?(@.name=='rating')].schema.enum
    then:
      function: schema
      functionOptions:
        schema:
          type: array
          items:
            enum: [y, g, pg, pg-13, r]

  giphy-response-envelope:
    description: 2xx responses should expose a data/meta envelope.
    message: '2xx responses should include `data` and `meta` properties.'
    severity: warn
    given: "$.paths.*[get,post,put,patch].responses['200','201'].content.application/json.schema"
    then:
      function: schema
      functionOptions:
        schema:
          type: object
          anyOf:
            - required: [properties]
              properties:
                properties:
                  type: object
                  required: [data, meta]
            - required: [$ref]
            - required: [allOf]
            - required: [oneOf]

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