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

# Create a video schedule

> Keep making videos and posting them on a cadence: `videos_per_day` on `days_of_week` at `post_hour` in `time_zone`, to `connection_ids`. Before each posting day (`notify_hours_before`), an AI director picks each video's template, angle and script from your marketing profile, `direction` and what is trending; the videos are then made and posted with no review. Pin parts of the recipe with `video_settings` or `allowed_templates`, or model it on a video with `source_video_id`. Creating a schedule is free. Each video it makes is charged when its script is approved, like any other video; `estimated_price_cents_per_video` is about what each costs.



## OpenAPI

````yaml /openapi.json post /v1/video-schedules
openapi: 3.1.0
info:
  title: LumisReach v1 API
  version: 1.0.0
  description: >-
    Programmatic access to the LumisReach voice platform — calls, numbers,
    caller trust, and brands.
  contact:
    name: LumisReach
    email: founders@lumisreach.com
servers:
  - url: https://api.lumisreach.com/api
security:
  - bearerAuth: []
tags:
  - name: Phone Numbers
  - name: Caller IDs
  - name: Enterprise Registration
  - name: Branded Calling
  - name: Calls
  - name: SMS
  - name: WebRTC
  - name: Reputation
  - name: Usage
  - name: Account
  - name: Billing
  - name: Conversation History
  - name: Documents
  - name: Lincoln AI
  - name: Quick Agent Actions
  - name: Sub-entities
  - name: Video schedules
  - name: Videos
paths:
  /v1/video-schedules:
    post:
      tags:
        - Video schedules
      summary: Create a video schedule
      description: >-
        Keep making videos and posting them on a cadence: `videos_per_day` on
        `days_of_week` at `post_hour` in `time_zone`, to `connection_ids`.
        Before each posting day (`notify_hours_before`), an AI director picks
        each video's template, angle and script from your marketing profile,
        `direction` and what is trending; the videos are then made and posted
        with no review. Pin parts of the recipe with `video_settings` or
        `allowed_templates`, or model it on a video with `source_video_id`.
        Creating a schedule is free. Each video it makes is charged when its
        script is approved, like any other video;
        `estimated_price_cents_per_video` is about what each costs.
      operationId: v1_video_schedules_post
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            A UUID. When present, deduplicates repeat submissions. See
            /api-reference/idempotency.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: http://json-schema.org/draft-07/schema#
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 120
                videos_per_day:
                  type: integer
                  minimum: 1
                  maximum: 10
                days_of_week:
                  description: 0 = Sunday to 6 = Saturday. Omit or empty for every day.
                  maxItems: 7
                  type: array
                  items:
                    type: integer
                    minimum: 0
                    maximum: 6
                post_hour:
                  description: Hour of the day posts go out. Default 9.
                  type: integer
                  minimum: 0
                  maximum: 23
                time_zone:
                  description: IANA time zone, e.g. America/New_York. Default UTC.
                  type: string
                  minLength: 1
                  maxLength: 64
                starts_on:
                  type: string
                  pattern: ^\d{4}-\d{2}-\d{2}$
                  description: First posting day, YYYY-MM-DD
                ends_on:
                  description: Last posting day. Omit or null to run until paused.
                  anyOf:
                    - type: string
                      pattern: ^\d{4}-\d{2}-\d{2}$
                    - type: 'null'
                connection_ids:
                  minItems: 1
                  type: array
                  items:
                    type: string
                    format: uuid
                    pattern: >-
                      ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                  description: Accounts every video is posted to
                caption:
                  description: >-
                    One caption for every post. Omit to have one written per
                    video.
                  anyOf:
                    - type: string
                      maxLength: 4000
                    - type: 'null'
                direction:
                  description: What the videos should be about, in your words
                  anyOf:
                    - type: string
                      maxLength: 2000
                    - type: 'null'
                allowed_templates:
                  description: >-
                    Templates the director may pick from. Omit or empty for any
                    it can make.
                  maxItems: 8
                  type: array
                  items:
                    type: string
                    enum:
                      - talking_avatar
                      - remotion
                      - freeform_ai
                      - meme_hook
                      - interview
                      - phone_mockup
                      - slideshow
                      - real_footage
                notify_hours_before:
                  description: >-
                    How far ahead the videos are planned and you are told what
                    is coming. Default 1.
                  type: integer
                  minimum: 0
                  maximum: 24
                notify_by_email:
                  type: boolean
                video_settings:
                  description: >-
                    Recipe parts pinned for every video: presenter, style,
                    format, length, source.
                  type: object
                  properties:
                    format:
                      type: string
                      enum:
                        - vertical
                        - horizontal
                    target_duration_seconds:
                      type: number
                      enum:
                        - 10
                        - 15
                        - 20
                        - 30
                        - 45
                        - 60
                        - 120
                        - 180
                        - 300
                    source_url:
                      type: string
                      format: uri
                    source_text:
                      type: string
                      minLength: 1
                      maxLength: 5000
                    preset:
                      type: string
                    avatar_provider:
                      type: string
                      enum:
                        - heygen
                        - tavus
                        - elevenlabs
                    avatar_layout:
                      type: string
                      enum:
                        - center
                        - bubble_bottom_left
                        - bubble_bottom_right
                    avatar_id:
                      type: string
                      format: uuid
                      pattern: >-
                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                    replica_id:
                      type: string
                      minLength: 1
                      maxLength: 100
                    voice_id:
                      type: string
                      minLength: 1
                      maxLength: 100
                    video_model:
                      type: string
                    subtitle_style:
                      type: string
                      enum:
                        - none
                        - classic
                        - boxed
                        - bold_words
                    subtitle_position:
                      anyOf:
                        - type: string
                          enum:
                            - top
                            - middle
                            - bottom
                        - type: 'null'
                    subtitle_size:
                      type: string
                      enum:
                        - small
                        - medium
                        - large
                  additionalProperties: false
                source_video_id:
                  description: >-
                    Model the schedule on this video: its template and recipe
                    are pinned
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              required:
                - name
                - videos_per_day
                - starts_on
                - connection_ids
              additionalProperties: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $schema: http://json-schema.org/draft-07/schema#
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                        pattern: >-
                          ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                      name:
                        type: string
                      status:
                        type: string
                        enum:
                          - active
                          - paused
                          - completed
                        description: '`completed` once it ran through `ends_on`'
                      cadence:
                        type: string
                        description: In words, e.g. "2 videos every Mon, Wed, Fri at 9am"
                      videos_per_day:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      days_of_week:
                        type: array
                        items:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                      post_hour:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      time_zone:
                        type: string
                      starts_on:
                        type: string
                      ends_on:
                        type:
                          - string
                          - 'null'
                      skip_dates:
                        type: array
                        items:
                          type: string
                      notify_hours_before:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      notify_by_email:
                        type: boolean
                      connection_ids:
                        type: array
                        items:
                          type: string
                          format: uuid
                          pattern: >-
                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                      caption:
                        type:
                          - string
                          - 'null'
                      direction:
                        type:
                          - string
                          - 'null'
                      allowed_templates:
                        type: array
                        items:
                          type: string
                      video_settings:
                        anyOf:
                          - type: object
                            properties:
                              format:
                                type: string
                                enum:
                                  - vertical
                                  - horizontal
                              target_duration_seconds:
                                type: number
                                enum:
                                  - 10
                                  - 15
                                  - 20
                                  - 30
                                  - 45
                                  - 60
                                  - 120
                                  - 180
                                  - 300
                              source_url:
                                type: string
                                format: uri
                              source_text:
                                type: string
                                minLength: 1
                                maxLength: 5000
                              preset:
                                type: string
                              avatar_provider:
                                type: string
                                enum:
                                  - heygen
                                  - tavus
                                  - elevenlabs
                              avatar_layout:
                                type: string
                                enum:
                                  - center
                                  - bubble_bottom_left
                                  - bubble_bottom_right
                              avatar_id:
                                type: string
                                format: uuid
                                pattern: >-
                                  ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                              replica_id:
                                type: string
                                minLength: 1
                                maxLength: 100
                              voice_id:
                                type: string
                                minLength: 1
                                maxLength: 100
                              video_model:
                                type: string
                              subtitle_style:
                                type: string
                                enum:
                                  - none
                                  - classic
                                  - boxed
                                  - bold_words
                              subtitle_position:
                                anyOf:
                                  - type: string
                                    enum:
                                      - top
                                      - middle
                                      - bottom
                                  - type: 'null'
                              subtitle_size:
                                type: string
                                enum:
                                  - small
                                  - medium
                                  - large
                            additionalProperties: false
                          - type: 'null'
                      source_video_id:
                        anyOf:
                          - type: string
                            format: uuid
                            pattern: >-
                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                          - type: 'null'
                      next_run:
                        anyOf:
                          - type: object
                            properties:
                              day:
                                type: string
                              post_at:
                                type: string
                                format: date-time
                                pattern: >-
                                  ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                              plan_at:
                                type: string
                                format: date-time
                                pattern: >-
                                  ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                                description: When that day's videos are planned and made
                            required:
                              - day
                              - post_at
                              - plan_at
                            additionalProperties: false
                          - type: 'null'
                      last_run_on:
                        type:
                          - string
                          - 'null'
                      last_error:
                        type:
                          - string
                          - 'null'
                      estimated_price_cents_per_video:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                        description: >-
                          About what each video costs. Each one is charged when
                          its script is approved, like any other video.
                      estimate_depends_on_template:
                        type: boolean
                        description: >-
                          True when the director picks the template per video,
                          so the real price can differ
                      created_at:
                        type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                    required:
                      - id
                      - name
                      - status
                      - cadence
                      - videos_per_day
                      - days_of_week
                      - post_hour
                      - time_zone
                      - starts_on
                      - ends_on
                      - skip_dates
                      - notify_hours_before
                      - notify_by_email
                      - connection_ids
                      - caption
                      - direction
                      - allowed_templates
                      - video_settings
                      - source_video_id
                      - next_run
                      - last_run_on
                      - last_error
                      - estimated_price_cents_per_video
                      - estimate_depends_on_template
                      - created_at
                    additionalProperties: false
                required:
                  - data
                additionalProperties: false
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '409':
          description: Conflict (incl. idempotency conflicts)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
components:
  schemas:
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
            message:
              type: string
            fields:
              type: object
              additionalProperties:
                type: string
            doc_url:
              type: string
              format: uri
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````