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

# TUS protocol capabilities

> Report supported TUS-protocol version, extensions, and per-upload size cap as response headers.



## OpenAPI

````yaml https://roughy-api-staging.fly.dev/v1/openapi.json options /v1/uploads
openapi: 3.1.0
info:
  title: Roughy Public API
  version: 0.0.0
servers:
  - url: https://roughy-api-staging.fly.dev
    description: Staging
security: []
tags:
  - name: Projects
    description: >-
      Workflow containers. Every asset lives inside a project; a project groups
      everything for one piece of work (an episode, an interview, a talk).
  - name: Assets
    description: >-
      The unit of media. `POST /assets` creates one and opens its upload in a
      single call: the response body is the asset (its `upload_url` carries the
      transfer URL while `pending_upload`), and the TUS transfer URL also comes
      back in the `Location` header. List, detail (with signed download URL),
      and delete round it out. Each asset belongs to exactly one project;
      `language` is set at create and immutable.
  - name: Uploads
    description: >-
      Drive the TUS-resumable transfer that streams an asset's bytes. `POST
      /assets` opens the upload; `PATCH`/`HEAD` move and resume the bytes,
      `DELETE` cancels (removing the asset). Lost the transfer URL? Re-`GET` the
      asset — while it's `pending_upload`, `upload_url` carries it.
  - name: Cuts
    description: >-
      A kept-segment plan for an asset, computed automatically by Roughy. Create
      one with `POST /cuts {asset_id, script?}`, list with `GET /cuts`, read a
      cut, export it to NLE formats, and export its generated subtitle (SRT /
      VTT).
  - name: Renders
    description: >-
      Renders an asset to a video (`mp4`/`mov`) or audio (`m4a`/`mp3`) output,
      optionally applying a `cut_id`. `POST /renders {asset_id, cut_id?,
      output}` creates one; list, read (with a signed download URL), and cancel
      as a top-level `/renders` resource.
  - name: Webhooks
    description: >-
      Register endpoints to receive signed terminal-state events (cut / render /
      asset) instead of polling.
  - name: Credits
    description: Credit balance and usage history.
  - name: Users
    description: Your account and profile.
  - name: OAuth
    description: >-
      Device authorization grant (RFC 8628), served at app.roughy.ai/oauth/* for
      the editor plugin. Internal surface — not part of the public /v1 SDK.
  - name: billing
    description: Stripe customer portal, invoices, subscriptions.
  - name: api-keys
    description: Mint and revoke API keys.
  - name: auth
    description: Sign up, log in, log out, and OAuth flows for the dashboard.
  - name: webhooks
    description: Inbound provider webhooks (Stripe, Resend, ElevenLabs).
  - name: email-preferences
    description: Per-category transactional-email opt-out preferences.
  - name: sse
    description: Server-sent live updates per asset.
  - name: health
    description: Liveness and readiness probes.
paths:
  /v1/uploads:
    options:
      tags:
        - Uploads
      summary: TUS protocol capabilities
      description: >-
        Report supported TUS-protocol version, extensions, and per-upload size
        cap as response headers.
      operationId: upload_options_v1_uploads_options
      responses:
        '204':
          description: TUS capability headers.
          headers:
            Tus-Resumable:
              description: TUS protocol version (`1.0.0`).
              schema:
                type: string
            Tus-Version:
              description: Supported TUS protocol versions.
              schema:
                type: string
            Tus-Extension:
              description: Supported TUS extensions (`termination,expiration`).
              schema:
                type: string
            Tus-Max-Size:
              description: Maximum total upload size in bytes.
              schema:
                type: string

````