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

# Approve Augmentation

> **Beta.** Usable today, but this endpoint can change before it is stable, without a new `Kite-Version`. Changes are announced before they ship.

**Beta.** Approve a background / world run whose preview passed (`awaiting_approval`): its episodes are
charged and start. Not enough tokens, or the account's monthly budget hard limit reached, is a 402 and the run
keeps waiting, so it can be approved after a top-up.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/augmentations/{aug_id}/approve
openapi: 3.1.0
info:
  title: Kite Platform API
  description: >-
    Public API for Kite. Authenticate with `Authorization: Bearer kite_...`, and
    send `Kite-Version: 2026-10-12` to pin the dated contract your code was
    written against (without it you get 2026-09-27). Every response carries the
    version that served it.
  version: '2026-10-12'
servers:
  - url: https://api.kiteml.com
    description: Kite Platform API
security:
  - bearerAuth: []
tags:
  - name: Augmentations
    description: Beta. Generate new episodes from a LeRobot dataset.
  - name: Training runs
    description: Fine-tune a policy on a dataset, one run per policy.
  - name: Twins
    description: >-
      Rebuild a robot episode as an interactable MuJoCo scene (beta, enabled per
      account).
  - name: RL runs
    description: >-
      Train a robot policy in simulation from a task spec; get the policy, its
      scene and a verdict.
  - name: Evaluations
    description: >-
      Evaluate a policy on a Kite SDK spec on Kite's machines: episodes,
      evaluators and a scorecard (beta).
  - name: Scenario runs
    description: >-
      Run a policy across built-in simulated scenarios; get its success rate,
      failure reasons and edge cases (beta).
  - name: Scenarios
    description: >-
      Beta. The scenarios a scenario run runs, and your own, composed from
      robots, tasks and objects.
  - name: Objects and environments
    description: Beta. Bring your own objects and environments to your scenarios.
  - name: Catalog
    description: Policies, hardware tiers, and dataset inspection.
  - name: Operations
    description: Poll any run by its id.
  - name: Webhooks
    description: Endpoints that receive events, and the event log.
  - name: API keys
    description: The key making the request.
  - name: Usage
    description: Token usage and credit balance.
  - name: Requests
    description: >-
      The request log: every call of the last 30 days, who made it and how it
      ended.
  - name: Status
    description: Whether Kite is up, part by part. Needs no key.
paths:
  /v1/augmentations/{aug_id}/approve:
    post:
      tags:
        - Augmentations
      summary: Approve Augmentation
      description: >-
        **Beta.** Usable today, but this endpoint can change before it is
        stable, without a new `Kite-Version`. Changes are announced before they
        ship.


        **Beta.** Approve a background / world run whose preview passed
        (`awaiting_approval`): its episodes are

        charged and start. Not enough tokens, or the account's monthly budget
        hard limit reached, is a 402 and the run

        keeps waiting, so it can be approved after a top-up.
      operationId: approve_augmentation_v1_augmentations__aug_id__approve_post
      parameters:
        - name: aug_id
          in: path
          required: true
          schema:
            type: string
            title: Aug Id
        - $ref: '#/components/parameters/KiteVersion'
      responses:
        '200':
          description: The augmentation, running every episode
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Augmentation'
              example:
                awaiting_approval: false
                config:
                  episode_count: 3
                created_at: '2026-09-27T01:00:00Z'
                id: aug_01K62QZ8V4X9C3N7M5T2R8W6HB
                instructions: Make the table dark walnut and the light warm
                model: video
                object: augmentation
                output:
                  files:
                    - bytes: 3186
                      path: meta/info.json
                      url: >-
                        https://storage.googleapis.com/kite-augment/augment/meta/info.json?X-Goog-Signature=abc
                  type: download
                plan:
                  changes:
                    - description: make the table dark walnut
                      kind: in_front
                  engine: video
                  reason: The table's material changes, which needs new video.
                  source_revision: b28c65d7b892cb8dd4ed61f45158484374330086
                progress: 1
                source:
                  repo_id: lerobot/svla_so101_pickplace
                  type: huggingface
                status: succeeded
                status_message: Output published
                tokens:
                  charged: 32670
                webhook_metadata:
                  ref: run-42
        '400':
          description: >-
            Invalid request (`parameter_invalid`, `unsupported_version`, ...);
            `param` names the field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '401':
          description: Missing or invalid API key (`unauthenticated`)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '402':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
          description: >-
            Not enough credits for this run (`insufficient_tokens`), or the
            account's monthly budget is spent and its hard limit is on
            (`budget_exceeded`)
        '403':
          description: >-
            The key lacks a scope this route needs (`missing_scope`), or the
            feature is not enabled for the account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
          description: >-
            No such resource (`resource_not_found`); another account's ids
            answer the same
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
          description: >-
            Conflicts with the resource's state or an earlier request (e.g.
            `not_cancelable`, `idempotency_key_reused`)
        '429':
          description: >-
            Rate or concurrency limited (`rate_limit_exceeded`,
            `concurrency_limit_exceeded`, `capacity_exceeded`); honor
            `Retry-After`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
components:
  parameters:
    KiteVersion:
      name: Kite-Version
      in: header
      required: false
      description: >-
        The dated contract your code was written against. Without it you get
        2026-09-27; every response says which version served it.
      schema:
        type: string
        enum:
          - '2026-09-27'
          - '2026-10-12'
        default: '2026-09-27'
  schemas:
    Augmentation:
      properties:
        id:
          type: string
          title: Id
          description: '`aug_` + a time-ordered ULID'
        object:
          type: string
          enum:
            - augmentation
          const: augmentation
          title: Object
          default: augmentation
        status:
          type: string
          enum:
            - processing
            - succeeded
            - failed
            - canceled
          title: Status
        progress:
          type: number
          maximum: 1
          minimum: 0
          title: Progress
          description: >-
            Of the current phase (import, generate, publish): it starts again
            from 0 at each
        status_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Status Message
          description: What it is doing now, or the last thing it did
        error:
          anyOf:
            - $ref: '#/components/schemas/AugmentationError'
            - type: 'null'
          description: Set when `failed`
        model:
          type: string
          title: Model
          description: >-
            `auto` until the planner decides, then `relight`, `video`,
            `background`, `world` or `mixed`
        source:
          $ref: '#/components/schemas/AugmentationSource'
        instructions:
          type: string
          title: Instructions
        config:
          $ref: '#/components/schemas/AugmentationConfig'
        environments:
          anyOf:
            - $ref: '#/components/schemas/AugmentationEnvironments'
            - type: 'null'
        must_keep:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Must Keep
        plan:
          anyOf:
            - $ref: '#/components/schemas/AugmentationPlan'
            - type: 'null'
          description: 'Set once the run is planned: what it does and why'
        awaiting_approval:
          type: boolean
          title: Awaiting Approval
          description: >-
            The preview passed and the run waits for POST
            /v1/augmentations/{id}/approve
          default: false
        gates:
          anyOf:
            - $ref: '#/components/schemas/AugmentationGates'
            - type: 'null'
          description: Background and world, once the episodes ran
        output:
          oneOf:
            - $ref: '#/components/schemas/AugmentationHuggingFaceOutput'
            - $ref: '#/components/schemas/AugmentationDownloadOutput'
          title: Output
          description: Where the episodes go, as given at create
          discriminator:
            propertyName: type
            mapping:
              download: '#/components/schemas/AugmentationDownloadOutput'
              huggingface: '#/components/schemas/AugmentationHuggingFaceOutput'
        tokens:
          $ref: '#/components/schemas/AugmentationTokens'
        webhook_metadata:
          anyOf:
            - type: object
            - type: 'null'
          title: Webhook Metadata
        created_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Created At
      type: object
      required:
        - id
        - status
        - progress
        - model
        - source
        - instructions
        - config
        - output
        - tokens
      title: Augmentation
      description: >-
        One augmentation of a Hugging Face LeRobot dataset, keeping its motion:
        every episode relit, or new episodes

        generated by video augmentation.
      examples:
        - awaiting_approval: false
          config:
            episode_count: 3
          created_at: '2026-09-27T01:00:00Z'
          id: aug_01K62QZ8V4X9C3N7M5T2R8W6HB
          instructions: Make the table dark walnut and the light warm
          model: video
          object: augmentation
          output:
            files:
              - bytes: 3186
                path: meta/info.json
                url: >-
                  https://storage.googleapis.com/kite-augment/augment/meta/info.json?X-Goog-Signature=abc
            type: download
          plan:
            changes:
              - description: make the table dark walnut
                kind: in_front
            engine: video
            reason: The table's material changes, which needs new video.
            source_revision: b28c65d7b892cb8dd4ed61f45158484374330086
          progress: 1
          source:
            repo_id: lerobot/svla_so101_pickplace
            type: huggingface
          status: succeeded
          status_message: Output published
          tokens:
            charged: 32670
          webhook_metadata:
            ref: run-42
    ApiErrorResponse:
      properties:
        error:
          $ref: '#/components/schemas/ApiErrorBody'
      type: object
      required:
        - error
      title: ApiErrorResponse
      description: Every /v1 error has this shape.
    AugmentationError:
      properties:
        code:
          type: string
          title: Code
          description: >-
            `system`, `generation`, `capacity`, `insufficient_tokens`,
            `dataset_unavailable`, `incompatible_dataset`, `hf_unauthorized`,
            `model_not_feasible`, `out_of_scope`, `environment_not_ready`,
            `environment_not_found`, `parameter_invalid`, `gates_failed`, or
            `pipeline_failed` when the run recorded no code
        message:
          anyOf:
            - type: string
            - type: 'null'
          title: Message
          description: What went wrong and what to do; safe to show a user
      type: object
      required:
        - code
      title: AugmentationError
    AugmentationSource:
      properties:
        type:
          type: string
          enum:
            - huggingface
          const: huggingface
          title: Type
          default: huggingface
        repo_id:
          type: string
          maxLength: 500
          minLength: 3
          title: Repo Id
          description: HF dataset id, e.g. 'lerobot/pusht'
      type: object
      required:
        - repo_id
      title: AugmentationSource
    AugmentationConfig:
      properties:
        episode_count:
          type: integer
          maximum: 500
          minimum: 1
          title: Episode Count
          description: >-
            Video augmentation: episodes to generate, from the start of the
            dataset (at most 50). Relighting covers every episode, and reports
            the dataset's count here; the background and world engines report
            the episodes they make (`episodes` x `variants`)
          default: 3
        variation_prompts:
          anyOf:
            - items:
                type: string
              type: array
              maxItems: 500
            - type: 'null'
          title: Variation Prompts
          description: One prompt per episode; overrides episode_count when provided
        relight:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/RelightParams'
              type: object
            - type: 'null'
          title: Relight
          description: >-
            Relight parameters per camera ("top" or "observation.images.top"),
            or "*" for every camera; a camera's own entry overrides "*" field by
            field. With `model` left out or `auto`, selects relighting and skips
            the planner.
        episodes:
          anyOf:
            - type: string
              enum:
                - all
              const: all
            - type: integer
              minimum: 1
            - items:
                type: integer
                minimum: 0
              type: array
              minItems: 1
            - type: 'null'
          title: Episodes
          description: >-
            Background and world: the source episodes to augment, `all`, the
            first N, or a list of episode indices (in that order, each once)
            (default: `episode_count` when given or with model `auto`, else
            `all`). Not capped: a whole dataset runs on the augment workers
        preview_first:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Preview First
          description: >-
            Background and world only; relight and video ignore it. Default
            true: augment windows at the start, middle and end of one episode
            per camera first and check their quality gates (a camera that fails
            moves to the next engine) before charging for the rest. From the
            console the run then waits for POST /v1/augmentations/{id}/approve;
            with an API key it goes on by itself once the gates pass
        variants:
          anyOf:
            - type: integer
              maximum: 10
              minimum: 1
            - type: 'null'
          title: Variants
          description: >-
            Background and world: environments per source episode (default 1);
            each is its own episode, with its own environment
        allow_video_fallback:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Allow Video Fallback
          description: >-
            Model `auto`: when no scene engine can do the request on a camera
            (or a camera fails its preview on all of them), use generative video
            there instead of failing the run. Video costs many times more and
            keeps no pixel exactly; never used when the request asks to keep
            things exactly or names `must_keep` (default false: the run fails
            before any charge, with the measured reasons and the video price)
        labelling:
          anyOf:
            - type: string
              enum:
                - rig
                - episode
                - auto
            - type: 'null'
          title: Labelling
          description: >-
            Background and world: what the background segmenter learns from.
            `rig`: the rig profile's sites only; an episode filmed where no
            profiled site serves a camera (a new room or camera placement) is
            skipped, not charged. `episode`: such an episode labels that camera
            itself (a segmenter trained on detections of the episode's own
            frames and probed on them, which decides the camera), for a
            surcharge per labelled camera (its GPU time: a fixed part plus one
            per frame) shown in `plan.estimate.labelling_tokens`. `auto`
            (default): `episode` when `allow_episode_labelling` is true, else
            `rig`
        allow_episode_labelling:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Allow Episode Labelling
          description: >-
            With `labelling` `auto`: let episodes the rig profile can't serve
            label themselves, for the surcharge (default false: they are
            skipped, and the plan prices this option where the rig profile
            measured it passing)
        allow_environment_substitutes:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Allow Environment Substitutes
          description: >-
            Background and world: when the place the instructions name matches
            no ready environment ("a forest"), use environments matched to the
            rig's light instead, with a warning (default false: the run fails
            before any charge with `environment_not_found`)
      type: object
      title: AugmentationConfig
    AugmentationEnvironments:
      properties:
        ids:
          anyOf:
            - items:
                type: string
              type: array
              maxItems: 20
              minItems: 1
            - type: 'null'
          title: Ids
          description: Environment ids (`aenv_...`) or library ids, used in turn
        filter:
          anyOf:
            - $ref: '#/components/schemas/EnvironmentFilter'
            - type: 'null'
        prompt:
          anyOf:
            - type: string
              maxLength: 2000
              minLength: 3
            - type: 'null'
          title: Prompt
          description: >-
            Make new environments from a description (minutes; not enabled for
            every account). The run waits for them
        count:
          anyOf:
            - type: integer
              maximum: 20
              minimum: 1
            - type: 'null'
          title: Count
          description: How many to pick or make (default 3)
      type: object
      title: AugmentationEnvironments
      description: >-
        What the background and world engines put behind the work cell: exactly
        one of `ids` or `prompt`, or a

        `filter` and/or `count` to pick from your ready environments and the
        Kite library (fitted to the rig's light).
    AugmentationPlan:
      properties:
        engine:
          type: string
          enum:
            - relight
            - video
            - background
            - world
            - mixed
          title: Engine
          description: >-
            `relight`: colour and exposure of every episode, motion untouched.
            `video`: generative video augmentation. `background` / `world`: a
            new place behind the work cell (`mixed` when cameras differ, see
            `cameras`)
        reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Reason
          description: Why, in a sentence
        relight:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/RelightParams'
              type: object
            - type: 'null'
          title: Relight
          description: >-
            For `relight`: parameters per camera, or `*` for every camera; a
            camera's own entry overrides `*` field by field. Cameras left out
            are copied unchanged
        video_instruction:
          anyOf:
            - type: string
            - type: 'null'
          title: Video Instruction
          description: 'For `video` chosen from reference photos: the edit derived from them'
        source_revision:
          anyOf:
            - type: string
            - type: 'null'
          title: Source Revision
          description: >-
            For `relight` and the scene engines: the commit of the source
            dataset the run reads from start to finish
        cameras:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/AugmentationCameraPlan'
              type: object
            - type: 'null'
          title: Cameras
          description: 'Background and world: each camera''s engines and why'
        changes:
          anyOf:
            - items:
                $ref: '#/components/schemas/AugmentationChange'
              type: array
            - type: 'null'
          title: Changes
          description: What the request changes, as classified
        must_keep:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Must Keep
        environments:
          anyOf:
            - items:
                $ref: '#/components/schemas/AugmentationPlanEnvironment'
              type: array
            - type: 'null'
          title: Environments
          description: Used in turn, one per episode and variant
        rig_profile:
          anyOf:
            - $ref: '#/components/schemas/AugmentationRigProfile'
            - type: 'null'
        estimate:
          anyOf:
            - $ref: '#/components/schemas/AugmentationPlanEstimate'
            - type: 'null'
          description: What the episodes will cost, charged when they start
        preview:
          anyOf:
            - $ref: '#/components/schemas/AugmentationPreview'
            - type: 'null'
          description: 'With `config.preview_first`: one episode per camera, in windows'
        feasibility:
          anyOf:
            - $ref: '#/components/schemas/AugmentationFeasibility'
            - type: 'null'
        labelling:
          anyOf:
            - type: string
              enum:
                - rig
                - episode
            - type: 'null'
          title: Labelling
          description: >-
            Background and world: `episode` when episodes the rig profile can't
            serve label themselves (`config.labelling`), else `rig`
        warnings:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Warnings
          description: >-
            What the plan could not do as asked (an option left unused, episodes
            skipped, a change not made)
      type: object
      required:
        - engine
      title: AugmentationPlan
    AugmentationGates:
      properties:
        passed:
          type: integer
          title: Passed
          description: Episodes that passed every gate and shipped
        failed:
          type: integer
          title: Failed
          description: Episodes that failed a gate or could not run; refunded
        failures:
          items:
            $ref: '#/components/schemas/AugmentationGateFailure'
          type: array
          title: Failures
          description: The first 20 gate failures
      type: object
      required:
        - passed
        - failed
        - failures
      title: AugmentationGates
      description: >-
        Background and world: every episode is measured before it ships, and one
        that fails a gate never does.
    AugmentationHuggingFaceOutput:
      properties:
        type:
          type: string
          enum:
            - huggingface
          const: huggingface
          title: Type
          default: huggingface
        repo_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Repo Id
          description: The Hugging Face dataset the episodes are pushed to
        url:
          anyOf:
            - type: string
            - type: 'null'
          title: Url
          description: 'Once `succeeded`: the pushed dataset on huggingface.co'
      type: object
      title: AugmentationHuggingFaceOutput
    AugmentationDownloadOutput:
      properties:
        type:
          type: string
          enum:
            - download
          const: download
          title: Type
          default: download
        files:
          anyOf:
            - items:
                $ref: '#/components/schemas/AugmentationOutputFile'
              type: array
            - type: 'null'
          title: Files
          description: >-
            Only on GET /v1/augmentations/{id} once `succeeded`: every file of
            the LeRobot dataset. The key is absent everywhere else (lists,
            create, cancel, webhook events)
      type: object
      title: AugmentationDownloadOutput
    AugmentationTokens:
      properties:
        charged:
          type: integer
          title: Charged
          description: >-
            Charged up front when the work starts. Video augmentation refunds
            the episodes it never generates, and a relight that fails is
            refunded in full, when the run ends (see GET /v1/usage); refunds are
            not subtracted here
      type: object
      required:
        - charged
      title: AugmentationTokens
    ApiErrorBody:
      properties:
        type:
          type: string
          title: Type
          description: >-
            invalid_request_error, authentication_error, permission_error,
            not_found_error, conflict_error, rate_limit_error, or api_error
        code:
          type: string
          title: Code
          description: 'Machine-readable: branch on this, not on the message'
        message:
          type: string
          title: Message
        param:
          anyOf:
            - type: string
            - type: 'null'
          title: Param
          description: The request field the error is about, when there is one
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Request Id
          description: Also in the X-Request-Id header; quote it to support
        details:
          anyOf:
            - type: object
            - type: 'null'
          title: Details
          description: >-
            Extra data for some codes (e.g. the cameras a dataset does have, for
            camera_not_found)
      type: object
      required:
        - type
        - code
        - message
      title: ApiErrorBody
    RelightParams:
      properties:
        exposure:
          type: number
          maximum: 3
          minimum: -5
          title: Exposure
          description: Brightness in stops (-1 = half the light).
          default: 0
        temperature:
          type: number
          maximum: 12000
          minimum: 1500
          title: Temperature
          description: >-
            Colour temperature of the simulated light in kelvin. 6500 =
            unchanged, ~3000 = warm tungsten, ~9000 = cool overcast. Never
            changes brightness.
          default: 6500
        tint:
          type: number
          maximum: 1
          minimum: -1
          title: Tint
          description: Green (-) to magenta (+) shift.
          default: 0
        contrast:
          type: number
          maximum: 2
          minimum: 0.5
          title: Contrast
          description: 'S-curve around mid-grey: >1 deepens shadows and lifts highlights.'
          default: 1
        saturation:
          type: number
          maximum: 2
          minimum: 0
          title: Saturation
          description: Colour intensity; 1 = unchanged.
          default: 1
      type: object
      title: RelightParams
    EnvironmentFilter:
      properties:
        category:
          anyOf:
            - type: string
              maxLength: 40
            - type: 'null'
          title: Category
          description: >-
            workshop, warehouse, hangar, garage, office, factory, lab, hall, or
            your own
        lighting:
          anyOf:
            - type: string
              enum:
                - daylight
                - artificial
            - type: 'null'
          title: Lighting
      type: object
      title: EnvironmentFilter
    AugmentationCameraPlan:
      properties:
        engines:
          items:
            type: string
          type: array
          title: Engines
          description: >-
            Run in order on this camera: `background`, `world` or `video`, then
            `relight` when the light changes too; none when it sees nothing
            behind the work cell and passes through
        reason:
          type: string
          title: Reason
        episodes:
          anyOf:
            - additionalProperties:
                type: integer
              type: object
            - type: 'null'
          title: Episodes
          description: >-
            Of the selected source episodes, by the rig site each is on: how
            many this camera can run its scene engine on (`scene`), passes
            through on because it sees nothing behind the work cell there
            (`pass_through`), labels from the episode itself (`labelled`,
            `config.labelling`), or can't run on (`blocked`: the episode is
            skipped)
      type: object
      required:
        - engines
        - reason
      title: AugmentationCameraPlan
    AugmentationChange:
      properties:
        description:
          type: string
          title: Description
        kind:
          type: string
          enum:
            - photometric
            - behind_cell
            - in_front
            - dynamic
            - out_of_scope
          title: Kind
          description: >-
            `dynamic`: people or something that moves, which only generative
            video can animate
      type: object
      required:
        - description
        - kind
      title: AugmentationChange
    AugmentationPlanEnvironment:
      properties:
        id:
          type: string
          title: Id
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
        yaw_deg:
          anyOf:
            - type: number
            - type: 'null'
          title: Yaw Deg
          description: >-
            How far the panorama is turned, so its daylight falls where the
            rig's light comes from
      type: object
      required:
        - id
      title: AugmentationPlanEnvironment
    AugmentationRigProfile:
      properties:
        key:
          type: string
          title: Key
          description: The rig's profile, reused by later runs on the same rig
        robot_model:
          type: string
          title: Robot Model
        cameras:
          additionalProperties:
            $ref: '#/components/schemas/AugmentationRigCamera'
          type: object
          title: Cameras
      type: object
      required:
        - key
        - robot_model
        - cameras
      title: AugmentationRigProfile
    AugmentationPlanEstimate:
      properties:
        tokens:
          type: integer
          title: Tokens
        episodes:
          type: integer
          title: Episodes
          description: 'Episodes it makes: source episodes x environment variants'
        labelling_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Labelling Tokens
          description: >-
            Of `tokens`, the surcharge for episodes that label cameras
            themselves (`config.labelling`)
      type: object
      required:
        - tokens
        - episodes
      title: AugmentationPlanEstimate
    AugmentationPreview:
      properties:
        episode_index:
          type: integer
          title: Episode Index
        passed:
          type: boolean
          title: Passed
          description: Every camera passed (some perhaps on a fallback engine)
        cameras:
          additionalProperties:
            $ref: '#/components/schemas/AugmentationPreviewCamera'
          type: object
          title: Cameras
      type: object
      required:
        - episode_index
        - passed
        - cameras
      title: AugmentationPreview
    AugmentationFeasibility:
      properties:
        selected:
          type: integer
          title: Selected
          description: Source episodes selected by `config.episodes`
        runnable:
          type: integer
          title: Runnable
          description: Those every camera can run on; only these are charged and run
        skipped:
          items:
            $ref: '#/components/schemas/AugmentationEpisodeCount'
          type: array
          title: Skipped
          description: Why the others are skipped, most common first
      type: object
      required:
        - selected
        - runnable
        - skipped
      title: AugmentationFeasibility
    AugmentationGateFailure:
      properties:
        episode_index:
          type: integer
          title: Episode Index
        camera:
          anyOf:
            - type: string
            - type: 'null'
          title: Camera
        reasons:
          items:
            type: string
          type: array
          title: Reasons
      type: object
      required:
        - episode_index
        - reasons
      title: AugmentationGateFailure
    AugmentationOutputFile:
      properties:
        path:
          type: string
          title: Path
          description: Relative to the dataset root, e.g. `meta/info.json`
        bytes:
          type: integer
          title: Bytes
        url:
          type: string
          title: Url
          description: >-
            A signed storage link (no credentials; valid for an hour), or this
            API's own `/v1/augmentations/{id}/files/{path}` when signing is
            unavailable, which needs your Authorization header
        source_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Source Url
          description: >-
            For a relight's videos: the same file of the source dataset on
            Hugging Face, at the commit the run read, with the same timestamps
            (the before to `url`'s after). Null for every other file
      type: object
      required:
        - path
        - bytes
        - url
      title: AugmentationOutputFile
    AugmentationRigCamera:
      properties:
        motion:
          type: string
          enum:
            - static
            - moving
          title: Motion
        located:
          type: boolean
          title: Located
          description: Its lens and pose were measured, not guessed
        segmenter:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Segmenter
          description: >-
            The rig's background segmenter passed its probe here; null when not
            recorded
        travel_m:
          type: number
          title: Travel M
          description: How far it moves over episode 0, from the robot's kinematics
      type: object
      required:
        - motion
        - located
        - travel_m
      title: AugmentationRigCamera
    AugmentationPreviewCamera:
      properties:
        engines_used:
          items:
            type: string
          type: array
          title: Engines Used
        passed:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Passed
          description: null when not previewed (video, or passing through)
        episode_index:
          anyOf:
            - type: integer
            - type: 'null'
          title: Episode Index
          description: The source episode previewed on this camera
        windows:
          anyOf:
            - items:
                type: object
              type: array
            - type: 'null'
          title: Windows
          description: 'Each previewed window: `start` frame, `frames`, `passed`, `metrics`'
        gates:
          type: object
          title: Gates
          description: >-
            The quality gates' `metrics` (the visual judge's as `judge`:
            `passed`, `failed` or `skipped`) and `failures`
        video_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Video Url
          description: This API's path for the preview clip
      type: object
      required:
        - engines_used
        - gates
      title: AugmentationPreviewCamera
    AugmentationEpisodeCount:
      properties:
        reason:
          type: string
          title: Reason
        episodes:
          type: integer
          title: Episodes
      type: object
      required:
        - reason
        - episodes
      title: AugmentationEpisodeCount
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        A Kite API key (`kite_...`), from **Platform API → Keys** in the
        dashboard.

````

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