Blubrry API · OpenAPI Overlay 1.0.0

API Evangelist enhancements — Blubrry Podcast Hosting & Statistics API

5 actions 5 updates security extends openapi/blubrry-api-restful-api-for-podcast-publishing-statistics-podcaster-openapi.yaml
Generated by API Evangelist Written by API Evangelist tooling for Blubrry API's API. It is a proposal applied on top of the contract, not a document Blubrry API publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

securitySchemessecurityx-apis-io-sourcex-apis-io-providerx-apis-io-artifactsx-rate-limitsx-idempotencyx-reversibility

Targets 4

$.components
$
$.info
$.paths['/stats/{keyword}/totals.json'].get

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements — Blubrry Podcast Hosting & Statistics API
  version: 1.0.0
extends: openapi/blubrry-api-restful-api-for-podcast-publishing-statistics-podcaster-openapi.yaml
x-generated: '2026-09-06'
x-method: generated
x-source: https://blubrry.com/developer/api/podcaster.yaml + https://blubrry.com/developer/api/oauth-2/
x-note: Non-destructive Overlay 1.0.0 capturing the API Evangelist enrichment of Blubrry's own contract.
  Every value here is traceable to Blubrry's published documentation or to a live probe recorded in this
  repository; nothing is invented, and the original spec is not mutated.
actions:
- target: $.components
  description: Blubrry documents OAuth 2.0 on https://blubrry.com/developer/api/oauth-2/ but the published
    contract declares no securitySchemes. Add the documented scheme so the contract states its own auth
    model.
  update:
    securitySchemes:
      OAuth2:
        type: oauth2
        description: OAuth 2.0 authorization-code. Client ID/secret are created from Manage Account ->
          Developers -> Create API Key. Access tokens expire after 1 hour; refresh tokens do not expire
          but can be revoked. No scopes are supported. Documented at https://blubrry.com/developer/api/oauth-2/
        flows:
          authorizationCode:
            authorizationUrl: https://api.blubrry.com/oauth2/authorize
            tokenUrl: https://api.blubrry.com/oauth2/token
            refreshUrl: https://api.blubrry.com/oauth2/token
            scopes: {}
- target: $
  description: Apply the documented OAuth 2.0 requirement to every operation; the API rejects unauthenticated
    calls with 401.
  update:
    security:
    - OAuth2: []
- target: $.info
  description: Record the provenance, the authoritative source of this contract, and the enrichment artifacts
    derived from it.
  update:
    x-apis-io-source: https://blubrry.com/developer/api/podcaster.yaml
    x-apis-io-provider: blubrry-api-restful-api-for-podcast-publishing-statistics
    x-apis-io-artifacts:
    - conventions/blubrry-api-restful-api-for-podcast-publishing-statistics-conventions.yml
    - errors/blubrry-api-restful-api-for-podcast-publishing-statistics-problem-types.yml
    - data-model/blubrry-api-restful-api-for-podcast-publishing-statistics-data-model.yml
    - lifecycle/blubrry-api-restful-api-for-podcast-publishing-statistics-lifecycle.yml
    - conformance/blubrry-api-restful-api-for-podcast-publishing-statistics-conformance.yml
- target: $.info
  description: 'State the runtime facts the contract omits: no published rate limits, no rate-limit response
    headers, no idempotency mechanism on the 8 mutating operations, and no delete-episode operation (addEpisode
    is irreversible through the API).'
  update:
    x-rate-limits:
      documented: false
      headers: []
      status_on_exhaustion: null
      source: rate-limits/blubrry-api-restful-api-for-podcast-publishing-statistics-rate-limits.yml
    x-idempotency:
      supported: false
      coverage: none
      source: conventions/blubrry-api-restful-api-for-podcast-publishing-statistics-conventions.yml
    x-reversibility:
      grade: documented
      coverage: partial
      source: conventions/blubrry-api-restful-api-for-podcast-publishing-statistics-conventions.yml
- target: $.paths['/stats/{keyword}/totals.json'].get
  description: The summary says "(Deprecated)" but the OpenAPI deprecated flag is not set, so tooling
    that reads the flag cannot see it. Set it.
  update:
    deprecated: true