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

# Schedule a YouTube pack

> Schedule a footage edit's whole pack on a YouTube channel. Queues the long cut and every finished short of one footage edit on one connected YouTube channel, each with its packaged title, description (chapters included), tags and thumbnail, released by YouTube's own schedule: long videos 12 hours apart (or the channel's own spacing), two shorts a day, each short at least an hour after its long video, never in the past, around everything already queued. Requires the separate publish API-key scope and a retry key; every output honors workspace approval policy. Repeating the call leaves queued outputs unchanged. Free.



## OpenAPI

````yaml /openapi.json post /v1/publish/pack
openapi: 3.1.0
info:
  title: Sigmora API
  version: 1.0.0
  description: >-
    The priced, versioned public API. Every call authenticates with a workspace
    API key (`Authorization: Bearer sk_live_…`), names the project it files its
    output under, and reports what it cost. `GET /v1/capabilities` answers what
    this deployment can serve right now and at what price; anything it reports
    as unavailable answers 503 `capability_unavailable` rather than 404.
servers:
  - url: https://api.sigmora.org
security:
  - bearerAuth: []
tags:
  - name: Meta
    description: What this deployment serves, what it costs, and what you have spent.
  - name: Projects
    description: The container every capability files its output under.
  - name: Sessions
    description: Durable bindings between an external harness session and one project.
  - name: Assets
    description: 'Project media: direct-to-storage uploads, imports, ingest and transcripts.'
  - name: Jobs
    description: Where every asynchronous capability is collected, whatever produced it.
  - name: Text
    description: Scripts, research, articles, translation and question sets.
  - name: Video
    description: Narrated renders, footage edits, shorts and moment selection.
  - name: UGC
    description: >-
      Creator-led vertical videos: AI creators, their faces and voices, frames
      and clips.
  - name: Editing
    description: >-
      Sigma, the editor: conversational turns, granular transcript edits,
      approvals.
  - name: 3D
    description: Animated 3D renders from a description or a photograph.
  - name: Image
    description: Thumbnails, sized for the platform they are posted to.
  - name: Audio
    description: Generated music and audio engineering in Audiotool projects.
  - name: Publishing
    description: Connected destinations and queued posts.
  - name: Webhooks
    description: Signed, at-least-once delivery of job and publishing events.
  - name: Workflows
    description: Context snapshots, versioned recipes, costed proposals and their runs.
  - name: Agents
    description: Describe an outcome and let a bounded plan of capabilities run.
  - name: Research
    description: >-
      Observed hooks, creator outliers and production briefs from saved
      analyses.
  - name: Themes
    description: The canonical content taxonomy, and the niche profiles built on it.
  - name: Signals
    description: Evidence-backed trends and scored viral content.
  - name: Discovery
    description: Compiled watch plans, their runs, and source freshness.
  - name: Watchlist
    description: 'Accounts you watch: their usual reach and the posts that beat it.'
  - name: Performance
    description: Your own channels' videos against their usual, and fixes to live videos.
  - name: Autopilot
    description: The durable trend-to-distribution workflow and its checkpoints.
  - name: Campaigns
    description: Distribution records shared by the API, the dashboard and autopilot.
  - name: Brands
    description: >-
      Cross-platform identities with their own voice, rules and publishing
      commitments.
  - name: Products
    description: What a campaign promotes.
paths:
  /v1/publish/pack:
    post:
      tags:
        - Publishing
      summary: Schedule a YouTube pack
      description: >-
        Schedule a footage edit's whole pack on a YouTube channel. Queues the
        long cut and every finished short of one footage edit on one connected
        YouTube channel, each with its packaged title, description (chapters
        included), tags and thumbnail, released by YouTube's own schedule: long
        videos 12 hours apart (or the channel's own spacing), two shorts a day,
        each short at least an hour after its long video, never in the past,
        around everything already queued. Requires the separate publish API-key
        scope and a retry key; every output honors workspace approval policy.
        Repeating the call leaves queued outputs unchanged. Free.
      operationId: publish.pack
      parameters:
        - name: idempotency-key
          in: header
          required: true
          description: >-
            Required stable id for this logical write; reuse it after a timeout.
            Upload endpoints also require the same value in body.idempotencyKey.
          schema:
            type: string
            minLength: 1
            maxLength: 255
            description: >-
              Required stable id for this logical write; reuse it after a
              timeout. Upload endpoints also require the same value in
              body.idempotencyKey.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                parentJobId:
                  type: string
                  minLength: 1
                  maxLength: 200
                  description: >-
                    The footage edit (its parent job id, as video.edit returned
                    it) whose finished long cut and shorts are scheduled.
                connectedAccountId:
                  type: string
                  minLength: 1
                  maxLength: 200
                  description: A connected YouTube account from publish.destinations.list.
                startAt:
                  description: >-
                    Optional RFC 3339 earliest release; omit to release as soon
                    as the upload allows (about two hours ahead). Must not be in
                    the past.
                  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|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                playlistIds:
                  description: >-
                    Optional YouTube playlist ids every video of the pack is
                    added to after upload.
                  maxItems: 10
                  type: array
                  items:
                    type: string
                    minLength: 2
                    maxLength: 64
                timeZone:
                  description: >-
                    Optional IANA zone of the audience, used when the channel
                    has no Brand posting schedule; UTC otherwise.
                  type: string
                  maxLength: 64
                aiDisclosure:
                  description: >-
                    Set true to mark every video as altered or synthetic content
                    on YouTube. Your choice: Sigmora never sets it on its own.
                  type: boolean
              required:
                - parentJobId
                - connectedAccountId
              additionalProperties: false
            example:
              parentJobId: job_7e3c2f
              connectedAccountId: acct_youtube_main
              startAt: '2026-08-15T07:00:00Z'
              playlistIds:
                - PLx3f1c9a2b7d4e8f0
              timeZone: Africa/Nairobi
              aiDisclosure: false
      responses:
        '201':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    const: true
                  parentJobId:
                    type: string
                    minLength: 1
                    maxLength: 200
                  connectedAccountId:
                    type: string
                    minLength: 1
                    maxLength: 200
                  timeZone:
                    type: string
                    description: The zone the plan was placed in.
                  entries:
                    type: array
                    items:
                      type: object
                      properties:
                        videoJobId:
                          type: string
                          minLength: 1
                          maxLength: 200
                        kind:
                          type: string
                          enum:
                            - long
                            - short
                          description: Long cut or short.
                        title:
                          type: string
                          description: >-
                            The title it publishes under (first packaged title
                            option).
                        queueItemId:
                          type: string
                          minLength: 1
                          maxLength: 200
                        releaseAt:
                          type: string
                          description: >-
                            When YouTube releases the video (YouTube-native
                            schedule; private until then).
                        uploadAt:
                          description: When Sigmora uploads it, ahead of the release.
                          type:
                            - string
                            - 'null'
                        status:
                          type: string
                          description: >-
                            Queue state: scheduled, pending-approval,
                            review-required, ...
                        alreadyQueued:
                          type: boolean
                          description: >-
                            True when an earlier request already queued this
                            output on this channel.
                      required:
                        - videoJobId
                        - kind
                        - title
                        - queueItemId
                        - releaseAt
                        - uploadAt
                        - status
                        - alreadyQueued
                      additionalProperties: {}
                    description: Each output and when it releases, earliest first.
                  skipped:
                    type: array
                    items:
                      type: object
                      properties:
                        videoJobId:
                          type: string
                          minLength: 1
                          maxLength: 200
                        kind:
                          anyOf:
                            - type: string
                              enum:
                                - long
                                - short
                            - type: 'null'
                        reason:
                          type: string
                      required:
                        - videoJobId
                        - kind
                        - reason
                      additionalProperties: {}
                    description: Outputs not scheduled, and why.
                required:
                  - success
                  - parentJobId
                  - connectedAccountId
                  - timeZone
                  - entries
                  - skipped
                additionalProperties: {}
        '202':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    const: true
                  parentJobId:
                    type: string
                    minLength: 1
                    maxLength: 200
                  connectedAccountId:
                    type: string
                    minLength: 1
                    maxLength: 200
                  timeZone:
                    type: string
                    description: The zone the plan was placed in.
                  entries:
                    type: array
                    items:
                      type: object
                      properties:
                        videoJobId:
                          type: string
                          minLength: 1
                          maxLength: 200
                        kind:
                          type: string
                          enum:
                            - long
                            - short
                          description: Long cut or short.
                        title:
                          type: string
                          description: >-
                            The title it publishes under (first packaged title
                            option).
                        queueItemId:
                          type: string
                          minLength: 1
                          maxLength: 200
                        releaseAt:
                          type: string
                          description: >-
                            When YouTube releases the video (YouTube-native
                            schedule; private until then).
                        uploadAt:
                          description: When Sigmora uploads it, ahead of the release.
                          type:
                            - string
                            - 'null'
                        status:
                          type: string
                          description: >-
                            Queue state: scheduled, pending-approval,
                            review-required, ...
                        alreadyQueued:
                          type: boolean
                          description: >-
                            True when an earlier request already queued this
                            output on this channel.
                      required:
                        - videoJobId
                        - kind
                        - title
                        - queueItemId
                        - releaseAt
                        - uploadAt
                        - status
                        - alreadyQueued
                      additionalProperties: {}
                    description: Each output and when it releases, earliest first.
                  skipped:
                    type: array
                    items:
                      type: object
                      properties:
                        videoJobId:
                          type: string
                          minLength: 1
                          maxLength: 200
                        kind:
                          anyOf:
                            - type: string
                              enum:
                                - long
                                - short
                            - type: 'null'
                        reason:
                          type: string
                      required:
                        - videoJobId
                        - kind
                        - reason
                      additionalProperties: {}
                    description: Outputs not scheduled, and why.
                required:
                  - success
                  - parentJobId
                  - connectedAccountId
                  - timeZone
                  - entries
                  - skipped
                additionalProperties: {}
        '400':
          description: 'Failure. `code` is one of: invalid_request.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Failure. `code` is one of: unauthorized.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Failure. `code` is one of: insufficient_credits, budget_capped.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'Failure. `code` is one of: forbidden, origin_not_allowed.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: 'Failure. `code` is one of: not_found.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: 'Failure. `code` is one of: conflict.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: 'Failure. `code` is one of: payload_too_large.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Failure. `code` is one of: rate_limited.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: 'Failure. `code` is one of: upstream_error, internal_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: >-
            Failure. `code` is one of: capability_unavailable,
            upstream_unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      required:
        - success
        - error
        - code
      properties:
        success:
          const: false
        error:
          type: string
          description: >-
            Human-readable. Copy may change between releases — do not match on
            it.
        code:
          type: string
          enum:
            - invalid_request
            - unauthorized
            - forbidden
            - origin_not_allowed
            - not_found
            - conflict
            - payload_too_large
            - insufficient_credits
            - budget_capped
            - content_not_cleared
            - rate_limited
            - capability_unavailable
            - upstream_unavailable
            - upstream_error
            - internal_error
          description: Stable machine-readable cause. Branch on this.
        details:
          description: Optional structured context, e.g. the credits shortfall.
        requestId:
          type: string
          description: >-
            Identifies this request in our logs. Include it when you contact
            support.
        timestamp:
          type: string
          format: date-time
          description: When the failure was produced.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A workspace API key.

````

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