Alto API

Alto API as documented publicly: 31 operations. Contract generated from the documentation by API Evangelist (2026-11-01); not the provider's own document.

Operations 31

GET /api/activity GET /api/activity #
GET /api/billing GET /api/billing #
GET /api/capabilities GET /api/capabilities #
POST /api/connect POST /api/connect #
GET /api/connect/{code} GET /api/connect/{code} #
GET /api/library GET /api/library #
POST /api/library POST /api/library #
GET /api/me GET /api/me #
POST /api/upload POST /api/upload #
POST /api/uploads POST /api/uploads #
DELETE /api/uploads/{uploadid} Alto API Reference: Uploads, Links, Viewers and Analytics #
POST /api/uploads/{uploadid}/complete Alto API Reference: Uploads, Links, Viewers and Analytics #
PUT /api/uploads/{uploadid}/parts/{part} Alto API Reference: Uploads, Links, Viewers and Analytics #
DELETE /api/videos/{id} Alto API Reference: Uploads, Links, Viewers and Analytics #
GET /api/videos/{id} Alto API Reference: Uploads, Links, Viewers and Analytics #
PATCH /api/videos/{id} Alto API Reference: Uploads, Links, Viewers and Analytics #
GET /api/videos/{id}/analytics Alto API Reference: Uploads, Links, Viewers and Analytics #
GET /api/videos/{id}/captions GET /api/videos/{id}/captions #
GET /api/videos/{id}/email-thumbnail Alto API Reference: Uploads, Links, Viewers and Analytics #
PUT /api/videos/{id}/email-thumbnail Alto API Reference: Uploads, Links, Viewers and Analytics #
POST /api/videos/{id}/keep Alto API Reference: Uploads, Links, Viewers and Analytics #
POST /api/videos/{id}/links Alto API Reference: Uploads, Links, Viewers and Analytics #
GET /api/videos/{id}/moments GET /api/videos/{id}/moments #
GET /api/videos/{id}/status Alto API Reference: Uploads, Links, Viewers and Analytics #
GET /api/videos/{id}/transcript GET /api/videos/{id}/transcript #
POST /api/videos/{id}/transcript POST /api/videos/{id}/transcript #
GET /api/viewers GET /api/viewers #
GET /api/viewers/{key} Alto API Reference: Uploads, Links, Viewers and Analytics #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/alto-video:alto-video-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

alto-video-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: Alto API
  version: '2026-11-01'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-01: 31 operation(s) read from 1 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; Alto has published no machine-readable contract that the pipeline
    could find. Engine: local.'
  x-evidence-tiers:
    code-example: 35
    documentation: -4
    pages-with-code: 1
    pages-read: 1
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-01'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://alto.video/docs/api
paths:
  /api/activity:
    get:
      operationId: get_api_activity
      tags:
      - Api
      summary: GET /api/activity
      x-source: https://alto.video/docs/api
      parameters:
      - name: before
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiActivityResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS \"https://alto.video/api/activity?before=MjAyNi0wOS0yNVQwOTo0MToxNy4wMzZafGIyYzdlOWE0LTVmMWQtNGIzZS04YTZjLTlkMGUyZjdiMWM1OA\"\
          \  -H \"Authorization: Bearer $ALTO_API_KEY\"\n Transcripts and chapters \n On every plan, Alto makes a transcript for each video when\
          \ it processes the file: the transcript itself, captions for the share page, and chapters when the video has speech, has no chapters\
          \ yet and"
  /api/billing:
    get:
      operationId: get_api_billing
      tags:
      - Api
      summary: GET /api/billing
      x-source: https://alto.video/docs/api
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiBillingResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS https://alto.video/api/billing -H \"Authorization: Bearer $ALTO_API_KEY\"\n Uploads \n A video file goes up in parts\
          \ through /api/uploads . The finished upload answers a src , which POST /api/library turns into a video, or PATCH /api/videos/{id} uses\
          \ to replace a video's file. Images for covers go up in one request to POST /api/upload . \n POST /api/uploads \n Starts an upload in\
          \ parts. This is"
  /api/capabilities:
    get:
      operationId: get_api_capabilities
      tags:
      - Api
      summary: GET /api/capabilities
      x-source: https://alto.video/docs/api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS https://alto.video/api/capabilities -H \"Authorization: Bearer $ALTO_API_KEY\"\n GET /api/billing \n The account's\
          \ plan, how it is paid for, and this month's use against the plan's limits. \n Response 200 : \n Field Type Notes \n plan string free\
          \ or pro . \n source string or null Why the account is on Pro: polar (a subscription) or grant (Pro given by Alto). null on Free. \n\
          \ interval string month "
  /api/connect:
    post:
      operationId: post_api_connect
      tags:
      - Api
      summary: POST /api/connect
      x-source: https://alto.video/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiConnectRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS -X POST https://alto.video/api/connect  -H \"Content-Type: application/json\"  -d '{\"machine\":\"build-server-2\"\
          }'\n GET /api/connect/{code} \n Reports where a connect request stands, and hands over the key once. No key. \n Path: code is the code\
          \ from POST /api/connect . \n Response 200 : \n Field Type Notes \n status string pending (not approved yet), approved , claimed (a\
          \ poll already collected t"
  /api/connect/{code}:
    get:
      operationId: get_api_connect_code
      tags:
      - Api
      summary: GET /api/connect/{code}
      x-source: https://alto.video/docs/api
      parameters:
      - name: code
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiConnectCodeResponse'
      x-evidence:
        kind: documentation
  /api/library:
    get:
      operationId: get_api_library
      tags:
      - Api
      summary: GET /api/library
      x-source: https://alto.video/docs/api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS https://alto.video/api/library -H \"Authorization: Bearer $ALTO_API_KEY\"\n GET /api/videos/{id} \n One video, with\
          \ its share links. alto status and alto chapters read it. \n Path: id is the video's id. \n Response 200 : \n Field Type Notes \n video\
          \ object The video object , with retention . \n generatedChapters array The chapters this file's transcript generated, which \"chapters\"\
          : \"generated\" put"
    post:
      operationId: post_api_library
      tags:
      - Api
      summary: POST /api/library
      x-source: https://alto.video/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiLibraryRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS -X POST https://alto.video/api/library  -H \"Authorization: Bearer $ALTO_API_KEY\" -H \"Content-Type: application/json\"\
          \  -d '{\"title\":\"Fleet QA for Pruitt Logistics\",\"description\":\"The three-minute walkthrough of Fleet QA at the Reno depot.\"\
          ,\"duration\":184,\"src\":\"/api/media/uploads/Xb7kQ2mNp4Rt9vLw3yZs8cDf1gHj6KaE/0b7e4f2a-9c1d-4e8b-a6f3-5d2c8e1b9a70.mp4\",\"poster\"\
          :\"\"}'\n GET /api/library \n Ev"
  /api/links:
    get:
      operationId: get_api_links
      tags:
      - Api
      summary: GET /api/links
      x-source: https://alto.video/docs/api
      parameters:
      - name: video
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiLinksResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS \"https://alto.video/api/links?video=3f9c2a71b8d44e0f9a6c15e2d7b08c43\"  -H \"Authorization: Bearer $ALTO_API_KEY\"\
          \n PATCH /api/links/{id} \n Changes who a link is for, its note, whether it works, or when it expires. Send any of the fields below;\
          \ the rest stay as they are. \n Path: id is the link's id. \n Body: \n Field Type Notes \n name string 1 to 120 characters. label is\
          \ taken instead when nam"
  /api/links/{id}:
    patch:
      operationId: patch_api_links_id
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchApiLinksIdRequest'
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatchApiLinksIdResponse'
      x-evidence:
        kind: documentation
  /api/me:
    get:
      operationId: get_api_me
      tags:
      - Api
      summary: GET /api/me
      x-source: https://alto.video/docs/api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS https://alto.video/api/me -H \"Authorization: Bearer $ALTO_API_KEY\"\n GET /api/capabilities \n What the account can\
          \ upload: the plan's limits, what this month has used, and whether Alto converts files on this deployment. The key is optional. Without\
          \ a working key, the answer is the Free plan's numbers with nothing used. \n Response 200 : \n Field Type Notes \n transcoding boolean\
          \ Whether Alto c"
  /api/upload:
    post:
      operationId: post_api_upload
      tags:
      - Api
      summary: POST /api/upload
      x-source: https://alto.video/docs/api
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS -X POST https://alto.video/api/upload  -H \"Authorization: Bearer $ALTO_API_KEY\" -H \"Content-Type: image/jpeg\" \
          \ --data-binary @cover.jpg\n Videos \n The video object \n GET /api/videos/{id} , PATCH /api/videos/{id} , POST /api/videos/{id}/keep\
          \ and GET /api/library answer videos in this shape. \n Field Type Notes \n id string The video's id. \n userId string The account's\
          \ id. \n title string \n des"
  /api/uploads:
    post:
      operationId: post_api_uploads
      tags:
      - Api
      summary: POST /api/uploads
      x-source: https://alto.video/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiUploadsRequest'
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiUploadsResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS -X POST https://alto.video/api/uploads  -H \"Authorization: Bearer $ALTO_API_KEY\" -H \"Content-Type: application/json\"\
          \  -d '{\"type\":\"video/mp4\",\"bytes\":131072000,\"duration\":184}'\n PUT /api/uploads/{uploadId}/parts/{part} \n Stores one part\
          \ of an upload. Part n is the file's bytes from (n - 1) × partBytes up to, but not including, n × partBytes , or to the end of the file\
          \ for the last part. \n"
  /api/uploads/{uploadid}:
    delete:
      operationId: delete_api_uploads_uploadid
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: uploadid
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteApiUploadsUploadidResponse'
      x-evidence:
        kind: documentation
  /api/uploads/{uploadid}/complete:
    post:
      operationId: post_api_uploads_uploadid_complete
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: uploadid
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiUploadsUploadidCompleteRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiUploadsUploadidCompleteResponse'
      x-evidence:
        kind: documentation
  /api/uploads/{uploadid}/parts/{part}:
    put:
      operationId: put_api_uploads_uploadid_parts_part
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: uploadid
        in: path
        required: true
        schema:
          type: string
      - name: part
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PutApiUploadsUploadidPartsPartResponse'
      x-evidence:
        kind: documentation
  /api/videos/{id}:
    delete:
      operationId: delete_api_videos_id
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteApiVideosIdResponse'
      x-evidence:
        kind: documentation
    get:
      operationId: get_api_videos_id
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiVideosIdResponse'
      x-evidence:
        kind: documentation
    patch:
      operationId: patch_api_videos_id
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchApiVideosIdRequest'
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatchApiVideosIdResponse'
      x-evidence:
        kind: documentation
  /api/videos/{id}/analytics:
    get:
      operationId: get_api_videos_id_analytics
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiVideosIdAnalyticsResponse'
      x-evidence:
        kind: documentation
  /api/videos/{id}/captions:
    get:
      operationId: get_api_videos_id_captions
      tags:
      - Api
      summary: GET /api/videos/{id}/captions
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiVideosIdCaptionsResponse'
      x-evidence:
        kind: documentation
  /api/videos/{id}/email-thumbnail:
    get:
      operationId: get_api_videos_id_email_thumbnail
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiVideosIdEmailThumbnailResponse'
      x-evidence:
        kind: documentation
    put:
      operationId: put_api_videos_id_email_thumbnail
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PutApiVideosIdEmailThumbnailRequest'
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PutApiVideosIdEmailThumbnailResponse'
      x-evidence:
        kind: documentation
  /api/videos/{id}/keep:
    post:
      operationId: post_api_videos_id_keep
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiVideosIdKeepResponse'
      x-evidence:
        kind: documentation
  /api/videos/{id}/links:
    patch:
      operationId: patch_api_videos_id_links
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchApiVideosIdLinksRequest'
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatchApiVideosIdLinksResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_videos_id_links
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiVideosIdLinksRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiVideosIdLinksResponse'
      x-evidence:
        kind: documentation
  /api/videos/{id}/moments:
    get:
      operationId: get_api_videos_id_moments
      tags:
      - Api
      summary: GET /api/videos/{id}/moments
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiVideosIdMomentsResponse'
      x-evidence:
        kind: documentation
  /api/videos/{id}/status:
    get:
      operationId: get_api_videos_id_status
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiVideosIdStatusResponse'
      x-evidence:
        kind: documentation
  /api/videos/{id}/transcript:
    get:
      operationId: get_api_videos_id_transcript
      tags:
      - Api
      summary: GET /api/videos/{id}/transcript
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiVideosIdTranscriptResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_videos_id_transcript
      tags:
      - Api
      summary: POST /api/videos/{id}/transcript
      x-source: https://alto.video/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiVideosIdTranscriptRequest'
      responses:
        '202':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/viewers:
    get:
      operationId: get_api_viewers
      tags:
      - Api
      summary: GET /api/viewers
      x-source: https://alto.video/docs/api
      parameters:
      - name: filter
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sS \"https://alto.video/api/viewers?filter=engaged\" -H \"Authorization: Bearer $ALTO_API_KEY\"\n GET /api/viewers/{key}\
          \ \n One person's whole story: plays, how much they watched, replays, the videos they opened, and what they did, newest first. \n Plan:\
          \ Pro, with a key or in the studio. \n Path: key is a row's key from GET /api/viewers , URL-encoded ( r%3Adana%40pruitt.example ). \n\
          \ Response 200 : \n"
  /api/viewers/{key}:
    get:
      operationId: get_api_viewers_key
      tags:
      - Api
      summary: 'Alto API Reference: Uploads, Links, Viewers and Analytics'
      x-source: https://alto.video/docs/api
      parameters:
      - name: key
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiViewersKeyResponse'
      x-evidence:
        kind: documentation
components:
  schemas:
    GetApiActivityResponse:
      type: object
      properties:
        state:
          type: string
        segments:
          type: array
          items: {}
        language:
          type: string
        error:
          type: string
        chapters:
          type: integer
        blocked:
          type: string
    GetApiBillingResponse:
      type: object
      properties:
        part:
          type: integer
        etag:
          type: string
    PostApiConnectRequest:
      type: object
      properties:
        machine:
          type: string
    GetApiConnectCodeResponse:
      type: object
      properties:
        status:
          type: string
          description: pending, approved, claimed, or expired
        key:
          type: string
          description: API key (only on first approved poll)
        email:
          type: string
          description: Account email (when key present)
        name:
          type: string
          description: Account name (when key present)
    PostApiLibraryRequest:
      type: object
      properties:
        title:
          type: string
        description:
          type: string
        duration:
          type: integer
        src:
          type: string
        poster:
          type: string
    GetApiLinksResponse:
      type: object
      properties:
        link:
          type: object
          properties:
            id:
              type: string
            videoId:
              type: string
            videoTitle:
              type: string
            url:
              type: string
            path:
              type: string
            name:
              type: string
            email:
              type: string
            company:
              type: string
            title:
              type: string
            note:
              type: string
            createdAt:
              type: string
              format: date-time
            expiresAt:
              type:
              - string
              - 'null'
            disabledAt:
              type: string
              format: date-time
            status:
              type: string
            expiringSoon:
              type: boolean
            watchedPct:
              type:
              - string
              - 'null'
            views:
              type: integer
            lastViewedAt:
              type:
              - string
              - 'null'
    PatchApiLinksIdRequest:
      type: object
      properties:
        name:
          type: string
          description: New recipient name
        email:
          type: string
          description: New recipient email
        company:
          type: string
          description: New recipient company
    PatchApiLinksIdResponse:
      type: object
      properties:
        ok:
          type: boolean
          description: true if update succeeded
    PostApiUploadsRequest:
      type: object
      properties:
        type:
          type: string
        bytes:
          type: integer
        duration:
          type: integer
    PostApiUploadsResponse:
      type: object
      properties:
        part:
          type: integer
        etag:
          type: string
    DeleteApiUploadsUploadidResponse:
      type: object
      properties:
        ok:
          type: boolean
          description: true if cancelled.
    PostApiUploadsUploadidCompleteRequest:
      type: object
      properties:
        parts:
          type: array
          description: Array of {part, etag} for each part.
      required:
      - parts
    PostApiUploadsUploadidCompleteResponse:
      type: object
      properties:
        src:
          type: string
          description: The file, for src in POST /api/library or PATCH /api/videos/{id}.
    PutApiUploadsUploadidPartsPartResponse:
      type: object
      properties:
        part:
          type: number
          description: The part number.
        etag:
          type: string
          description: Keep it for complete.
    DeleteApiVideosIdResponse:
      type: object
      properties:
        ok:
          type: boolean
          description: true if deletion succeeded
    GetApiVideosIdResponse:
      type: object
      properties:
        video:
          type: object
          description: The full video object with retention.
        generatedChapters:
          type: array
          description: Chapters generated from transcript.
        slug:
          type: string
          description: The link name.
        sharePath:
          type: string
          description: What follows /v/ in the main share link.
        shareUrl:
          type: string
          description: The main share link.
        links:
          type: array
          description: Recipient links for the video.
    PatchApiVideosIdRequest:
      type: object
      properties:
        title:
          type: string
          description: New title.
        description:
          type: string
          description: New description.
        duration:
          type: number
          description: New length in seconds.
        src:
          type: string
          description: New src from a completed upload.
        poster:
          type: string
          description: New poster src.
        slug:
          type: string
          description: New link name.
    PatchApiVideosIdResponse:
      type: object
      properties:
        ok:
          type: boolean
          description: true if updated.
    GetApiVideosIdAnalyticsResponse:
      type: object
      properties:
        analytics:
          type: object
          description: Analytics data for the video
    GetApiVideosIdCaptionsResponse:
      type: object
      properties:
        captions:
          type: string
          description: WebVTT caption file
    GetApiVideosIdEmailThumbnailResponse:
      type: object
      properties:
        emailThumbnail:
          type: string
          description: URL of the email thumbnail image
    PutApiVideosIdEmailThumbnailRequest:
      type: object
      properties:
        emailThumbnail:
          type: string
          description: New thumbnail image URL
      required:
      - emailThumbnail
    PutApiVideosIdEmailThumbnailResponse:
      type: object
      properties:
        ok:
          type: boolean
          description: true if update succeeded
    PostApiVideosIdKeepResponse:
      type: object
      properties:
        ok:
          type: boolean
          description: true if keep succeeded
    PatchApiVideosIdLinksRequest:
      type: object
      properties:
        links:
          type: array
          description: Array of link objects to replace existing links
      required:
      - links
    PatchApiVideosIdLinksResponse:
      type: object
      properties:
        ok:
          type: boolean
          description: true if replacement succeeded
    PostApiVideosIdLinksRequest:
      type: object
      properties:
        name:
          type: string
          description: Recipient name
        email:
          type: string
          description: Recipient email
        company:
          type: string
          description: Recipient company
      required:
      - name
      - email
    PostApiVideosIdLinksResponse:
      type: object
      properties:
        link:
          type: object
          description: Created link object
    GetApiVideosIdMomentsResponse:
      type: object
      properties:
        moments:
          type: array
          description: Array of moments (details not listed on the page)
    GetApiVideosIdStatusResponse:
      type: object
      properties:
        status:
          type: string
          description: Video status (processing, ready, failed, archived)
        transcodeState:
          type: string
          description: Conversion state (pending, running, done, failed, skipped)
    GetApiVideosIdTranscriptResponse:
      type: object
      properties:
        transcript:
          type: object
          description: Transcript data (fields not detailed on the page)
    PostApiVideosIdTranscriptRequest:
      type: object
      properties:
        language:
          type: string
          description: Optional language code
    GetApiViewersKeyResponse:
      type: object
      properties:
        viewer:
          type: object
          description: Viewer details
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
security:
- bearer: []
tags:
- name: Api