Playable · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Playable API

4 actions 4 updates update extends openapi/playable-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Playable's API. It is a proposal applied on top of the contract, not a document Playable publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-notetitlex-original-titlex-apievangelist-slugx-apievangelist-reviewedx-providerx-provider-urlx-api-reference

Targets 3

$.info
$.servers
$.tags

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Playable API
  version: 1.0.0
extends: openapi/playable-api-openapi.yml
x-generated: '2026-08-12'
x-method: generated
x-source: openapi/_original/playable-openapi-original.yml
x-note: >-
  Non-destructive enhancements over the spec Playable serves at https://api.playable.com/openapi.yaml.
  The harvested original is never mutated. These actions add identity and provenance metadata and
  record the gaps found during enrichment; they do NOT invent operationIds, schemas or responses on
  the provider's behalf.
actions:
- target: $.info
  update:
    title: Playable API
    x-original-title: Swagger with Laravel
    x-apievangelist-slug: playable
    x-apievangelist-reviewed: '2026-08-12'
    x-provider: Playable ApS
    x-provider-url: https://playable.com/
    x-api-reference: https://api.playable.com/
    x-developer-docs: https://help.playable.com/en/articles/10384051-developer
    x-status-page: https://status.playable.com/
    x-license-published: false
- target: $.info
  update:
    x-apievangelist-findings:
      operation_ids: >-
        None of the 41 operations declares an operationId. Nothing in this pipeline invents them;
        every derived artifact keys operations by METHOD + path instead. Adding stable operationIds
        is the single highest-leverage change Playable could make to this contract.
      components_schemas: >-
        components.schemas is empty — every request and response body is inlined per operation, so
        no shape is reusable, referenceable or independently versionable.
      error_model: >-
        Errors are {"message": "..."} with no code and no application/problem+json. Only 400/401/403/404
        are declared; no 5xx and no rate-limit status appear anywhere despite a documented hard limit.
      rate_limit_status: >-
        The 3,600/hour limit and the X-RateLimit-* / Retry-After headers are documented in prose in
        info.description but are not modelled as response headers on any operation.
      idempotency: >-
        No idempotency contract, on a write surface that includes activate, resume, copy and
        send-email-to-winner.
      security_scheme_name: >-
        The oauth2 scheme is named "clientCredentials" — the grant type, not the scheme's identity.
      scope_descriptions: >-
        All 37 scope descriptions are the placeholder string "Grant right to", so the scope map
        carries no semantics an agent or a reviewer can act on.
- target: $.servers
  update:
    x-apievangelist-note: >-
      servers[1] https://api.dev.playable.com is labelled QA. It is declared publicly but no
      documentation explains how to obtain access to it. Treat as provider-internal.
- target: $.tags
  update:
    x-apievangelist-note: >-
      Only oauth and campaigns are declared in tags[]; the media and user tags are used on operations
      but never declared at the document level.