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

# switch angle

> Choose which camera is on screen across recordings synced with sync_recordings. on_speech cuts the whole conversation from each person's own microphone: the shot follows the talker, holds through an interjection, and rests on the wide when the room is quiet. switches gives the cut by hand, each an angle by label or ref and a stretch in seconds. The same instant stays under the playhead either way; a stretch the chosen camera was not recording is left as it was and named; pieces playing the same camera are joined. auto_reframe keeps a person in frame and auto_zoom punches in; this is the cut between cameras. Free, except listen, which reads unheard recordings: cloud processing.



## OpenAPI

````yaml /openapi.json post /tools/switch_angle
openapi: 3.1.0
info:
  title: Eversince API
  version: '1'
  description: >-
    Every Eversince tool as one POST call, plus the routes beside them: the tool
    list, account and keys, uploads, webhooks and models. The prose is at
    https://docs.eversince.ai.
servers:
  - url: https://eversince.ai/api/v1
security:
  - bearer: []
tags:
  - name: Discovery
    description: The tool list, the same on the MCP server, the REST API and the CLI.
  - name: Workspace
    description: Jobs, balances, settings, templates, skills and the overview.
  - name: Library
    description: >-
      Items, search, import, reading media, comments, boards, calendars, the
      brand kit and public links.
  - name: Timeline
    description: 'Video editing: timelines, clips, captions, sound, language and rendering.'
  - name: Canvas
    description: 'Still editing: canvases, slides, layers and rendering.'
  - name: Generation
    description: Image, video and audio generation, upscaling, cutouts and models.
  - name: Research
    description: 'What platforms publish: pulling and keeping posts.'
  - name: Account
    description: Balances, keys, workspaces and script sessions.
  - name: Uploads
    description: Files into the library by presigned upload or by URL.
  - name: Webhooks
    description: Job results posted to a URL as they complete.
  - name: Models
    description: Generation models and cost estimates.
paths:
  /tools/switch_angle:
    post:
      tags:
        - Timeline
      summary: switch angle
      description: >-
        Choose which camera is on screen across recordings synced with
        sync_recordings. on_speech cuts the whole conversation from each
        person's own microphone: the shot follows the talker, holds through an
        interjection, and rests on the wide when the room is quiet. switches
        gives the cut by hand, each an angle by label or ref and a stretch in
        seconds. The same instant stays under the playhead either way; a stretch
        the chosen camera was not recording is left as it was and named; pieces
        playing the same camera are joined. auto_reframe keeps a person in frame
        and auto_zoom punches in; this is the cut between cameras. Free, except
        listen, which reads unheard recordings: cloud processing.
      operationId: switch_angle
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/WorkspaceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                timeline_id:
                  type: string
                  description: The timeline id.
                on_speech:
                  description: >-
                    Cut the whole group on who is talking, from each person's
                    own microphone. Give this instead of switches.
                  type: object
                  properties:
                    min_shot_seconds:
                      description: >-
                        The least a shot holds before the cut may move again.
                        Default 2.5.
                      type: number
                      minimum: 0.5
                      maximum: 30
                    ignore_shorter_than:
                      description: >-
                        Speech shorter than this never takes the shot: a laugh,
                        a "yeah". Default 1.2.
                      type: number
                      minimum: 0
                      maximum: 10
                    wide_after_seconds:
                      description: >-
                        Quiet longer than this goes to the wide, where one is
                        named. Default 4.
                      type: number
                      minimum: 0.5
                      maximum: 60
                    wide:
                      description: >-
                        The recording to hold when nobody is talking: a wide of
                        the room, by its label or ref.
                      type: string
                    listen:
                      description: >-
                        Listen to a recording nobody has listened to yet instead
                        of leaving it out. Cloud processing.
                      type: boolean
                switches:
                  description: >-
                    The cut, in order. Later switches win where they overlap
                    earlier ones.
                  minItems: 1
                  maxItems: 200
                  type: array
                  items:
                    type: object
                    properties:
                      from_seconds:
                        type: number
                        minimum: 0
                        description: >-
                          Where this angle starts showing, in seconds on the
                          timeline.
                      to_seconds:
                        type: number
                        minimum: 0
                        description: Where it stops.
                      angle:
                        type: string
                        description: >-
                          The angle's label as sync_recordings named it, or the
                          recording's item id or ref.
                    required:
                      - from_seconds
                      - to_seconds
                      - angle
                group_id:
                  description: Which synced group, when the timeline has more than one.
                  type: string
                if_revision:
                  description: >-
                    The revision get_timeline returned. A stale one fails with
                    revision_conflict instead of applying; so does no revision
                    once a user edited the timeline in the app since this
                    connection last read it.
                  anyOf:
                    - type: string
                    - type: integer
                context:
                  description: 'Optional: one sentence shown to the user beside this action.'
                  type: string
                  maxLength: 600
              required:
                - timeline_id
      responses:
        '200':
          description: >-
            Done, or a job started for work that runs longer (follow it with
            get_jobs).
          content:
            application/json:
              schema:
                type: object
                required:
                  - ok
                  - data
                  - meta
                properties:
                  ok:
                    const: true
                  data:
                    type: object
                    additionalProperties: true
                  meta:
                    type: object
                    properties:
                      request_id:
                        type: string
                      cost:
                        $ref: '#/components/schemas/Cost'
                      cloud_processing:
                        $ref: '#/components/schemas/CloudProcessing'
                  media:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        default:
          $ref: '#/components/responses/Error'
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      schema:
        type: string
      description: >-
        Retry a paid dispatch safely: the same key returns the job already
        dispatched instead of charging again.
    WorkspaceId:
      name: x-workspace-id
      in: header
      required: false
      schema:
        type: string
      description: The workspace this one call acts in, when it is not the key's own.
  schemas:
    Cost:
      type: object
      description: AI credits the call cost.
      additionalProperties: true
    CloudProcessing:
      type: object
      description: Cloud processing the call used, and what is left.
      properties:
        ran_on:
          const: cloud
        minutes:
          type: number
        queued_minutes:
          type: number
        left_minutes:
          type: number
        bought_minutes:
          type: number
        note:
          type: string
    Error:
      type: object
      required:
        - ok
        - error
      properties:
        ok:
          const: false
        error:
          type: object
          required:
            - code
            - message
            - retryable
          properties:
            code:
              type: string
            message:
              type: string
              description: What went wrong, in words to act on.
            retryable:
              type: boolean
            suggested_action:
              type: string
              description: The next step that works.
            cloud_processing:
              $ref: '#/components/schemas/CloudProcessing'
  responses:
    Error:
      description: The call was refused or failed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: >-
        An API key (es_live_…) from Settings, under API keys, or an OAuth access
        token.

````