> ## Documentation Index
> Fetch the complete documentation index at: https://streamloop.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List a stream's destinations

> Where the stream publishes, in the order they were added: each destination, whether it is enabled, and its delivery state while the stream runs.



## OpenAPI

````yaml https://api.streamloop.app/v1/openapi.json get /streams/{id}/destinations
openapi: 3.1.0
info:
  contact:
    name: Streamloop
    url: https://streamloop.app
  description: >-
    The Streamloop REST API. Authenticate with either an `X-API-Key` header (a
    Streamloop API key, prefix `sl_` — simplest for programmatic clients) or an
    OAuth 2.1 bearer access token (obtain one via https://auth.streamloop.app).
    With an API key, name the workspace in `X-Workspace-Id` (GET /workspaces
    lists yours). Collections are cursor-paginated (`limit` + `cursor`,
    returning `{ data, page }`). Errors are RFC 7807 problem documents.
  summary: >-
    Programmatic access to Streamloop — create and control 24/7 loop streams,
    manage media, destinations, playlists, and billing.
  title: Streamloop API
  version: 1.0.0
servers:
  - description: Production
    url: https://api.streamloop.app/v1
security:
  - oauth2: []
  - bearerAuth: []
  - apiKey: []
tags:
  - description: The authenticated user's account and workspaces.
    name: account
  - description: Credits, usage analytics, invoices, and top-ups.
    name: billing
  - description: Crypto deposit options for topping up credits.
    name: crypto
  - description: Manage streaming destinations (custom RTMP).
    name: destinations
  - description: Service metadata, discovery documents, and batch execution.
    name: meta
  - description: 'Stream and scene playlists: list, create, edit and publish.'
    name: playlists
  - description: >-
      Create, control, schedule, and monitor 24/7 streams: their destinations
      and scene.
    name: streams
  - description: Upload and manage source media (video/audio).
    name: uploads
paths:
  /streams/{id}/destinations:
    get:
      tags:
        - streams
      summary: List a stream's destinations
      description: >-
        Where the stream publishes, in the order they were added: each
        destination, whether it is enabled, and its delivery state while the
        stream runs.
      operationId: listStreamDestinations
      parameters:
        - description: >-
            Workspace this request operates in — the workspace id (`wksp_…`) or
            the organization id, from GET /workspaces. Required with an API key,
            which carries no workspace (400 `WORKSPACE_REQUIRED` without it).
            With an OAuth token it defaults to the workspace the token was
            issued for. Responds 403 `WORKSPACE_FORBIDDEN` when the caller is
            not a current member, rather than falling back to another workspace.
          in: header
          name: X-Workspace-Id
          required: false
          schema:
            type: string
        - description: Resource identifier.
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/StreamDestinations'
                  - type: 'null'
          description: Successful response.
          headers:
            RateLimit:
              description: >-
                The same three as one structured field: limit=, remaining=,
                reset= (IETF RateLimit header fields draft).
              schema:
                type: string
            RateLimit-Limit:
              description: Requests allowed per window.
              schema:
                type: integer
            RateLimit-Policy:
              description: 'The quota and its window in seconds: 600;w=60.'
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the window resets.
              schema:
                type: integer
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: 'No workspace selected: send X-Workspace-Id (WORKSPACE_REQUIRED).'
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Missing or invalid access token.
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: The token lacks the required scope or access to the resource.
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: The resource does not exist or is not visible to the caller.
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            The request is invalid, or refused for the resource as it is (the
            code says why).
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Rate limit exceeded. Retry after the indicated delay.
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
        '502':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unexpected failure (UPSTREAM_ERROR).
      security:
        - oauth2:
            - streamloop:read
        - bearerAuth: []
        - apiKey: []
components:
  schemas:
    StreamDestinations:
      properties:
        destinations:
          description: Outputs in creation order.
          items:
            properties:
              createdAt:
                format: date-time
                type: string
              destination:
                properties:
                  id:
                    type: string
                  kind:
                    enum:
                      - custom_rtmp
                      - youtube
                    type: string
                  name:
                    type: string
                required:
                  - id
                  - kind
                  - name
                type: object
              destinationID:
                type: string
              disabledReason:
                type:
                  - string
                  - 'null'
              enabled:
                type: boolean
              state:
                enum:
                  - idle
                  - connecting
                  - live
                  - reconnecting
                  - cooldown
                  - paused
                  - failed
                type: string
              stateReason:
                type:
                  - string
                  - 'null'
              stateSince:
                format: date-time
                type:
                  - string
                  - 'null'
            required:
              - createdAt
              - destination
              - destinationID
              - enabled
              - state
            type: object
          type: array
        id:
          type: string
      required:
        - destinations
        - id
      type: object
    Problem:
      additionalProperties:
        description: Details of the refusal beyond its code, e.g. reason.
      description: RFC 7807 problem-details error body.
      properties:
        code:
          description: >-
            A stable, machine-readable error code: branch on it, not on the HTTP
            status. 400: BAD_REQUEST, INVALID_BATCH, WORKSPACE_REQUIRED. 401:
            UNAUTHENTICATED. 402: INSUFFICIENT_CREDITS. 403: FORBIDDEN,
            INSUFFICIENT_SCOPE, MULTISTREAM_NOT_ENABLED. 404: NOT_FOUND. 405:
            METHOD_NOT_ALLOWED. 409: CONFLICT, DESTINATION_DUPLICATE,
            DESTINATION_LIMIT, IMMUTABLE_WHILE_LIVE, IN_USE, LAST_DESTINATION,
            MIRROR_DESTINATION_CHANGE_BLOCKED, NOT_LIVE, STALE_DRAFT,
            STREAM_ILLEGAL_TRANSITION, STREAM_LIVE, UPLOAD_ALREADY_COMPLETED,
            UPLOAD_INCOMPLETE, YOUTUBE_DESTINATION_LIMIT. 410: GONE. 422:
            DESTINATION_INCOMPATIBLE, FILE_TOO_LARGE, IDEMPOTENCY_KEY_REUSED,
            INVALID_INPUT, SCENE_ASSET_MISSING, SCENE_MISSING,
            SCENE_NOT_PUBLISHED, SCENE_PLAYLISTS_UNSUPPORTED,
            SCENE_PLAYLIST_MISSING, SCENE_QUALITY_UNSUPPORTED,
            STREAM_GUARD_FAILED, UNSUPPORTED_TYPE, UPLOAD_REMOVED. 429:
            RATE_LIMITED. 500: INTERNAL. 502: UPSTREAM_ERROR. 503:
            EXTERNAL_UPLOAD_ENQUEUE_FAILED, UNAVAILABLE. Other codes: 404 for
            *_NOT_FOUND, 403 for *_FORBIDDEN, 503 for *_UNAVAILABLE, else 422.
            502 UPSTREAM_ERROR is an unexpected failure.
          type: string
        detail:
          description: A human-readable explanation specific to this occurrence.
          type: string
        status:
          description: The HTTP status code.
          type: integer
        title:
          description: A short, human-readable summary of the problem.
          type: string
        type:
          description: A URI reference identifying the problem type.
          format: uri-reference
          type: string
      required:
        - type
        - title
        - status
        - detail
        - code
      type: object
  securitySchemes:
    oauth2:
      description: OAuth 2.1 authorization-code flow with PKCE.
      flows:
        authorizationCode:
          authorizationUrl: https://auth.streamloop.app/api/auth/oauth2/authorize
          scopes:
            streamloop:billing: Read billing/usage and create top-up links
            streamloop:destructive: Delete streams and destinations
            streamloop:read: Read streams, destinations, playlists, and billing status
            streamloop:write: Create and control streams, destinations, and playlists
          tokenUrl: https://auth.streamloop.app/api/auth/oauth2/token
      type: oauth2
    bearerAuth:
      bearerFormat: JWT
      description: An OAuth 2.1 bearer access token.
      scheme: bearer
      type: http
    apiKey:
      description: >-
        A Streamloop API key (prefix `sl_`), sent in the `X-API-Key` header.
        Create and manage keys in the dashboard. The simplest auth for
        programmatic / agent clients — no OAuth flow required; the key acts as
        its owning user.
      in: header
      name: X-API-Key
      type: apiKey

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.