> ## 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.

# Remove an upload

> Removes the upload from the media library for good: its stored bytes and every file derived from it are deleted, and it no longer lists. An upload that never finished (no complete after the PUT, an import that failed) is dropped too: nothing was stored. Refused with 409 IN_USE while a playlist or a recent stream still uses it (remove it from those playlists first), 404 NOT_FOUND, 422 UNSUPPORTED_TYPE for an image. Removing an already-removed upload succeeds.



## OpenAPI

````yaml https://api.streamloop.app/v1/openapi.json delete /uploads/{id}
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:
  /uploads/{id}:
    delete:
      tags:
        - uploads
      summary: Remove an upload
      description: >-
        Removes the upload from the media library for good: its stored bytes and
        every file derived from it are deleted, and it no longer lists. An
        upload that never finished (no complete after the PUT, an import that
        failed) is dropped too: nothing was stored. Refused with 409 IN_USE
        while a playlist or a recent stream still uses it (remove it from those
        playlists first), 404 NOT_FOUND, 422 UNSUPPORTED_TYPE for an image.
        Removing an already-removed upload succeeds.
      operationId: removeUpload
      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:
        '204':
          description: No content.
          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.
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            Conflicts with the resource's current state, e.g. STREAM_LIVE or
            IN_USE.
        '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:destructive
        - bearerAuth: []
        - apiKey: []
components:
  schemas:
    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.