ActionStreamer · OpenAPI Overlay 1.0.0

ActionStreamer Web API — API Evangelist enhancement overlay

7 actions 7 updates servers extends openapi/_original/actionstreamer-openapi-original.json
Generated by API Evangelist Written by API Evangelist tooling for ActionStreamer's API. It is a proposal applied on top of the contract, not a document ActionStreamer publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

serverssecuritySchemessecurityx-media-transportx-conventions400401419

Targets 4

$
$.components
$.paths.*.*.responses
$.info

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: ActionStreamer Web API — API Evangelist enhancement overlay
  version: 1.0.0
x-generated: '2026-09-06'
x-method: generated
x-source: openapi/_original/actionstreamer-openapi-original.json
x-target: openapi/_original/actionstreamer-openapi-original.json
x-note: >-
  An OpenAPI Overlay 1.0.0 document capturing API Evangelist's enhancements to the ActionStreamer
  Web API contract. It is applied to, and never mutates, the provider's original specification. Every
  value added here is sourced from ActionStreamer's own published documentation — the base URL and
  the HMAC-SHA256 scheme come from the authentication guide and the HTTP API quickstart, and the
  error responses come from the errors and response handling guide. Nothing is invented. The
  securityScheme is modelled as an apiKey-in-header pair because OpenAPI 3.0.1 has no native
  signature scheme type; the description carries the actual signing rules.
extends: openapi/_original/actionstreamer-openapi-original.json
actions:
- target: $
  description: >-
    Add the servers block. The published contract declares no servers at all; the developer portal's
    own overview page states "servers declared: False". The host below is documented in the
    authentication guide and the HTTP API quickstart.
  update:
    servers:
    - url: https://api.actionstreamer.com/v1
      description: 'ActionStreamer production Web API (versioned base, as documented in the HTTP API quickstart)'
    - url: https://api.actionstreamer.com
      description: 'ActionStreamer production Web API (root base; the quickstart documents both forms)'
- target: $.components
  description: >-
    Add the securitySchemes the contract omits. ActionStreamer authenticates every endpoint with
    HMAC-SHA256 request signing, documented at
    https://developer.actionstreamer.com/docs/Guides/authentication, but declares no scheme, so
    generated clients emit unauthenticated calls.
  update:
    securitySchemes:
      ActionStreamerAccessKey:
        type: apiKey
        in: header
        name: X-AccessKey
        description: >-
          The access key issued in the ActionStreamer portal under Settings > API Keys. Sent
          alongside X-Signature, X-Timestamp and X-Nonce. Also echoed in the Authorization header as
          `HMAC-SHA256 {access_key}`.
      ActionStreamerSignature:
        type: apiKey
        in: header
        name: X-Signature
        description: >-
          Hex-encoded HMAC-SHA256 digest of the canonical string, keyed with the account secret. The
          canonical string is METHOD, PATH, HEADER_STRING, PARAMETER_STRING, BODY joined by newlines
          and trimmed. Content-Type is removed from the header set before signing; header keys and
          query/form parameters are sorted and rendered as `key: value` lines; the path is normalized
          to start with `/` with no trailing slash. Must accompany X-AccessKey, X-Timestamp (Unix
          epoch seconds) and X-Nonce (a UUIDv4, unique per request, for replay protection).
- target: $
  description: Apply the HMAC scheme globally, since every documented endpoint requires a signed request.
  update:
    security:
    - ActionStreamerAccessKey: []
      ActionStreamerSignature: []
- target: $
  description: >-
    Record the platform's media transport standards at the document root. Both are already evidenced
    inside the contract, in the Stream schema's own example (publishURL srt://, readURL /webrtc/),
    but are not declared anywhere a machine can read them as capabilities.
  update:
    x-media-transport:
      publish:
        protocol: SRT
        scheme: 'srt://'
        host: media.actionstreamer.com
        evidence: '#/components/schemas/Stream/example/publishURL'
      playback:
        protocol: WebRTC
        host: media.actionstreamer.com
        evidence: '#/components/schemas/Stream/example/readURL'
      note: 'Media itself is carried out of band; the Web API manages Stream records and hands back the URLs.'
- target: $
  description: >-
    Record the cross-cutting runtime semantics an integrator needs and the contract does not state.
    Values are taken from ActionStreamer's published guides; absences are recorded as absences.
  update:
    x-conventions:
      versioning: 'path prefix, v1; no version negotiation header and no published version policy'
      list_convention: 'reads are frequently POST /<resource>/list with a JSON filter body rather than GET with query parameters'
      pagination: 'not documented — no page/limit/offset or cursor convention, and no total or next field on list responses'
      idempotency: 'not supported — no Idempotency-Key on a 161-operation write surface; X-Nonce is auth replay protection only'
      rate_limits: 'not published — no RateLimit-* headers and no 429 declared'
      request_id: 'not returned — the errors guide asks clients to log path, method, status and body instead'
      error_envelope: 'not standardized — the errors guide states clients must handle both structured JSON and plain-text error bodies'
      event_delivery: 'long-poll (POST /v1/event/list/pending/longpoll) and dequeue (POST /v1/event/dequeue); no webhooks or callbacks anywhere in the contract'
      detail: conventions/actionstreamer-conventions.yml
- target: $.paths.*.*.responses
  description: >-
    Add the error responses ActionStreamer documents in its errors guide but declares on only one of
    247 operations. Status codes, titles and meanings are verbatim from
    https://developer.actionstreamer.com/docs/Guides/errors — no response schema is asserted, because
    the provider states the error envelope is not standardized.
  update:
    '400':
      description: 'Invalid request body or invalid input.'
    '401':
      description: 'Unauthorized — authentication failed or was not supplied. Re-check the HMAC canonical string.'
    '419':
      description: 'Session expired (non-standard status code). Applies to portal session-token auth; create a new session and retry.'
    '500':
      description: 'Internal server error. Retry with backoff and log path, method, status and body.'
- target: $.info
  description: Attribute the enhancement so a consumer can tell provider content from API Evangelist content.
  update:
    x-enhanced-by:
      by: API Evangelist
      date: '2026-09-06'
      profile: https://apis.io/provider/actionstreamer
      original_spec: https://api.actionstreamer.com/swagger/v1/swagger.json
      original_publish_date: '2026-07-07'
      changes:
      - added servers (absent from the original)
      - added securitySchemes and a root security requirement (absent from the original)
      - added documented 400/401/419/500 responses (the original declares one 4xx across 247 operations)
      - added x-media-transport and x-conventions extensions
      not_changed:
      - 'operationIds: the original declares none, and inventing them would create identifiers that do not match the provider''s own reference pages'
      - 'schemas, parameters and request bodies: left exactly as published'