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

# Start a recording

> Opens a recording on the channel. Capture begins once a worker picks the recording up, so the returned recording is scheduled rather than already recording. The channel must be active with no open recording, and its live source must be recordable: a source that is not answers 409 with the reason as the problem type, and a source that could not be resolved in time answers 503 with Retry-After. Requires the `capture:access` permission.



## OpenAPI

````yaml https://api.up.telestream.com/capture/v1/openapi.json put /{space_id}/channels/{channel_id}/start
openapi: 3.1.0
info:
  contact:
    email: cloudsupport@telestream.net
    name: API Support
    url: https://www.telestream.com
  description: >-
    Programmatic access to recording: the channels that record your live sources
    to storage, and the recording settings they record with.

    Compatibility. Within a version we only add: new endpoints, new optional
    request fields and new optional response fields, and new problem types.
    Clients must ignore response fields and problem types they do not recognise,
    and fall back to the HTTP status class for an unrecognised problem type.
    Anything else - removing or renaming a field, narrowing a type, requiring a
    previously optional field, a new enum value in a response, or changing the
    status for an existing condition - arrives as a new major version under a
    new path.

    A version stays available until it is retired. A retired operation answers
    410 Gone with the operation-retired problem type; a retirement is announced
    when it is decided rather than on a fixed schedule.
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  termsOfService: https://www.telestream.net/telestream-cloud/terms.htm
  title: Telestream Capture API
  version: 1.0.0
servers:
  - url: https://api.up.telestream.com/capture/v1
security:
  - apiKey: []
tags:
  - description: What the presented API key may do.
    name: Access
  - description: Channels and their recording lifecycle.
    name: Channels
  - description: How a channel records.
    name: Recording settings
  - description: Reusable named recording settings, managed independently of any channel.
    name: Recording settings templates
paths:
  /{space_id}/channels/{channel_id}/start:
    parameters:
      - $ref: '#/components/parameters/SpaceId'
      - $ref: '#/components/parameters/ChannelId'
    put:
      tags:
        - Channels
      summary: Start a recording
      description: >-
        Opens a recording on the channel. Capture begins once a worker picks the
        recording up, so the returned recording is scheduled rather than already
        recording. The channel must be active with no open recording, and its
        live source must be recordable: a source that is not answers 409 with
        the reason as the problem type, and a source that could not be resolved
        in time answers 503 with Retry-After. Requires the `capture:access`
        permission.
      operationId: StartChannelRecording
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Recording'
          description: The recording was opened.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  parameters:
    SpaceId:
      description: The space to act in.
      in: path
      name: space_id
      required: true
      schema:
        format: uuid
        type: string
    ChannelId:
      description: The channel's id.
      in: path
      name: channel_id
      required: true
      schema:
        format: uuid
        type: string
  schemas:
    Recording:
      description: One attempt of a recording job.
      properties:
        aborted:
          description: >-
            Whether the recording was asked to stop immediately rather than run
            on to its end point.
          type: boolean
        attempt_number:
          description: Zero-based position of this attempt within its request.
          type: integer
        ended_at:
          format: date-time
          type: string
        id:
          format: uuid
          type: string
        outputs:
          items:
            $ref: '#/components/schemas/RecordingOutput'
          type: array
        request_id:
          description: Groups every attempt of one recording job.
          format: uuid
          type: string
        requested_start_at:
          description: With requested_stop_at, the window the recording was asked to cover.
          format: date-time
          type: string
        requested_stop_at:
          format: date-time
          type: string
        started_at:
          format: date-time
          type: string
        status:
          $ref: '#/components/schemas/RecordingStatus'
      required:
        - id
        - request_id
        - attempt_number
        - aborted
        - status
      type: object
    RecordingOutput:
      properties:
        file_name:
          type: string
        location_url:
          description: Where the output is written, as a `tmi://` URL.
          type: string
      required:
        - file_name
        - location_url
      type: object
    RecordingStatus:
      description: >-
        `scheduled` is requested but not started; `recording` is in progress;
        `complete` finished as requested; `failed` hit an error; `aborted` was
        cut short, so its outputs may be incomplete.
      enum:
        - scheduled
        - recording
        - complete
        - failed
        - aborted
      type: string
    Problem:
      description: An RFC 9457 problem document.
      properties:
        detail:
          description: >-
            What went wrong this time, in words meant for a person. Branch on
            `type` rather than parsing it.
          type: string
        instance:
          description: The request path the problem occurred on.
          type: string
        status:
          description: >-
            The HTTP status code, repeated so a logged payload is
            self-describing.
          type: integer
        title:
          description: A short, stable summary of the problem type.
          type: string
        trace_id:
          description: Correlates this response with the server-side logs.
          type: string
        type:
          description: >-
            Identifies the kind of problem. Branch on this rather than on the
            message.
          type: string
      required:
        - type
        - title
        - status
      type: object
  responses:
    BadRequest:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: The request could not be understood.
    Unauthorized:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: The request carries no usable API key.
      headers:
        WWW-Authenticate:
          description: The scheme to present a key with.
          schema:
            type: string
    Forbidden:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: The caller may not perform this action in this space.
    NotFound:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: The resource does not exist.
    Conflict:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: >-
        The action is refused by the current state of the resource, or of
        something it depends on. The problem type names the condition to fix.
    InternalError:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: The request could not be completed.
    ServiceUnavailable:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: A transient condition prevented the request; it is worth retrying.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
  securitySchemes:
    apiKey:
      description: >-
        A platform API key, presented as `Authorization: Bearer <API_KEY>`. Each
        operation says which permission the key needs.
      scheme: bearer
      type: http

````

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