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.
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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.