> ## 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.

# Create Run

> Train a policy. Only `robot` and `task.objective` are required; everything else has a verified default.

Returns 202 with one run per seed (sharing a `group_id`). A run trains, then packages its outputs: the policy
as ONNX and a checkpoint, the MuJoCo scene with a script that runs the policy in it, clips, and a report with a
verdict. Poll GET /v1/rl_runs/{id} or subscribe to rl_run.completed / rl_run.failed / rl_run.canceled.
Tokens are reserved now and settled by the minute when the run ends. Send an `Idempotency-Key` to make
retries safe.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/rl_runs
openapi: 3.1.0
info:
  title: Kite Platform API
  description: >-
    Public API for Kite. Authenticate with `Authorization: Bearer kite_...`, and
    send `Kite-Version: 2026-09-27` 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-09-27'
servers:
  - url: https://api.kiteml.com
    description: Kite Platform API
security:
  - bearerAuth: []
tags:
  - name: Augmentations
    description: 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 (private beta).
  - name: RL runs
    description: >-
      Train a robot policy in simulation from a task spec; get the policy, its
      scene and a verdict.
  - 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.
paths:
  /v1/rl_runs:
    post:
      tags:
        - RL runs
      summary: Create Run
      description: >-
        Train a policy. Only `robot` and `task.objective` are required;
        everything else has a verified default.


        Returns 202 with one run per seed (sharing a `group_id`). A run trains,
        then packages its outputs: the policy

        as ONNX and a checkpoint, the MuJoCo scene with a script that runs the
        policy in it, clips, and a report with a

        verdict. Poll GET /v1/rl_runs/{id} or subscribe to rl_run.completed /
        rl_run.failed / rl_run.canceled.

        Tokens are reserved now and settled by the minute when the run ends.
        Send an `Idempotency-Key` to make

        retries safe.
      operationId: create_run_v1_rl_runs_post
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            anyOf:
              - type: string
                maxLength: 255
              - type: 'null'
            title: Idempotency-Key
        - $ref: '#/components/parameters/KiteVersion'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RlRunCreate'
            example:
              budget:
                iterations: 500
                max_tokens: 400
              description: >-
                Walk forward at a steady pace with a level body and alternating
                feet.
              from:
                policy: 4d574ce4c547
              hardware_tier: gcp_gpu_l4
              metadata:
                example: rl_runs/walk.json
              outputs:
                formats:
                  - onnx
                  - pt
                  - torchscript
                videos:
                  - command:
                      vx: 0.3
                    seconds: 8
              robot: open_duck_mini_v2
              seeds: 1
              task:
                commands:
                  vx:
                    - 0.2
                    - 0.4
                  vy:
                    - -0.05
                    - 0.05
                  yaw:
                    - -0.2
                    - 0.2
                objective: velocity
              title: 'Open Duck: steady walk (fine-tuned)'
      responses:
        '202':
          description: One run per seed, queued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RlRunList-Input'
              example:
                data:
                  - budget:
                      iterations: 500
                      max_tokens: 400
                      num_envs: 2048
                    created_at: '2026-09-28T19:15:36.753577Z'
                    description: >-
                      Walk forward at a steady pace with a level body and
                      alternating feet.
                    engine: '2026-09-28'
                    from:
                      mode: fork
                      policy: 4d574ce4c547
                    group_id: rlg_01M3MQ39HV4YNTWNNY2GHM55VC
                    hardware_tier: gcp_gpu_l4
                    id: rlr_01M3MQ39HVAEBQ3F64K6JDF9XR
                    metadata:
                      example: rl_runs/walk.json
                    metrics:
                      terms: {}
                    object: rl_run
                    outputs:
                      formats:
                        - onnx
                        - pt
                        - torchscript
                      videos:
                        - command:
                            vx: 0.3
                          seconds: 8
                    progress: 0
                    robot: open_duck_mini_v2
                    seed: 0
                    status: queued
                    status_message: waiting for a machine
                    task:
                      commands:
                        vx:
                          - 0.2
                          - 0.4
                        vy:
                          - -0.05
                          - 0.05
                        yaw:
                          - -0.2
                          - 0.2
                      objective: velocity
                      params: {}
                      scene:
                        items: []
                    title: 'Open Duck: steady walk (fine-tuned)'
                    tokens:
                      charged: 0
                      refunded: 0
                      reserved: 167
                    visibility: private
                has_more: false
                object: list
        '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`)
        '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'
        default: '2026-09-27'
  schemas:
    RlRunCreate:
      properties:
        robot:
          type: string
          title: Robot
          description: See GET /v1/rl_runs/catalog
        engine:
          anyOf:
            - type: string
            - type: 'null'
          title: Engine
          description: >-
            The dated trainer to use (default: the latest, or the parent's for a
            fork or continue of your run). A run keeps its engine
        task:
          $ref: '#/components/schemas/RlTask'
        budget:
          $ref: '#/components/schemas/RlBudget'
        seeds:
          anyOf:
            - type: integer
            - items:
                type: integer
              type: array
          title: Seeds
          description: >-
            A count (1-5) or explicit seeds: one run per seed, sharing a
            `group_id`
          default: 1
        from:
          anyOf:
            - $ref: '#/components/schemas/RlFrom'
            - type: 'null'
        outputs:
          $ref: '#/components/schemas/RlOutputs'
        hardware_tier:
          anyOf:
            - type: string
            - type: 'null'
          title: Hardware Tier
          description: See GET /v1/rl_runs/catalog (default `gcp_gpu_l4`)
        visibility:
          type: string
          enum:
            - private
            - public
          title: Visibility
          description: >-
            `public` lists the run in the policy catalog once it finishes with a
            `pass` verdict
          default: private
        title:
          anyOf:
            - type: string
              maxLength: 120
            - type: 'null'
          title: Title
        description:
          anyOf:
            - type: string
              maxLength: 2000
            - type: 'null'
          title: Description
          description: >-
            What the behavior should look like; the report's judge compares the
            clip against it
        metadata:
          additionalProperties:
            type: string
          type: object
          title: Metadata
          description: Your labels, echoed on the run
        webhook_metadata:
          anyOf:
            - type: object
            - type: 'null'
          title: Webhook Metadata
          description: Echoed on the run and its events
      type: object
      required:
        - robot
        - task
      title: RlRunCreate
      description: Train a policy. Only `robot` and `task.objective` are required.
      examples:
        - budget:
            iterations: 500
            max_tokens: 400
          description: >-
            Walk forward at a steady pace with a level body and alternating
            feet.
          from:
            policy: 4d574ce4c547
          hardware_tier: gcp_gpu_l4
          metadata:
            example: rl_runs/walk.json
          outputs:
            formats:
              - onnx
              - pt
              - torchscript
            videos:
              - command:
                  vx: 0.3
                seconds: 8
          robot: open_duck_mini_v2
          seeds: 1
          task:
            commands:
              vx:
                - 0.2
                - 0.4
              vy:
                - -0.05
                - 0.05
              yaw:
                - -0.2
                - 0.2
            objective: velocity
          title: 'Open Duck: steady walk (fine-tuned)'
    RlRunList-Input:
      properties:
        object:
          type: string
          enum:
            - list
          const: list
          title: Object
          default: list
        data:
          items:
            $ref: '#/components/schemas/RlRun'
          type: array
          title: Data
        has_more:
          type: boolean
          title: Has More
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
      type: object
      required:
        - data
        - has_more
      title: RlRunList
      examples:
        - data:
            - budget:
                iterations: 500
                max_tokens: 400
                num_envs: 2048
              created_at: '2026-09-28T19:15:36.753577Z'
              description: >-
                Walk forward at a steady pace with a level body and alternating
                feet.
              engine: '2026-09-28'
              from:
                mode: fork
                policy: 4d574ce4c547
              group_id: rlg_01M3MQ39HV4YNTWNNY2GHM55VC
              hardware_tier: gcp_gpu_l4
              id: rlr_01M3MQ39HVAEBQ3F64K6JDF9XR
              metadata:
                example: rl_runs/walk.json
              metrics:
                terms: {}
              object: rl_run
              outputs:
                formats:
                  - onnx
                  - pt
                  - torchscript
                videos:
                  - command:
                      vx: 0.3
                    seconds: 8
              progress: 0
              robot: open_duck_mini_v2
              seed: 0
              status: queued
              status_message: waiting for a machine
              task:
                commands:
                  vx:
                    - 0.2
                    - 0.4
                  vy:
                    - -0.05
                    - 0.05
                  yaw:
                    - -0.2
                    - 0.2
                objective: velocity
                params: {}
                scene:
                  items: []
              title: 'Open Duck: steady walk (fine-tuned)'
              tokens:
                charged: 0
                refunded: 0
                reserved: 167
              visibility: private
          has_more: false
          object: list
    ApiErrorResponse:
      properties:
        error:
          $ref: '#/components/schemas/ApiErrorBody'
      type: object
      required:
        - error
      title: ApiErrorResponse
      description: Every /v1 error has this shape.
    RlTask:
      properties:
        objective:
          type: string
          enum:
            - velocity
            - imitation
            - balance
          title: Objective
          description: >-
            `velocity`: walk, turn or stand on command. `imitation`: follow a
            reference motion (`motion`). `balance`: stand on a scene item
            (`item`)
        commands:
          anyOf:
            - $ref: '#/components/schemas/RlCommands'
            - type: 'null'
          description: velocity only
        motion:
          anyOf:
            - type: string
            - type: 'null'
          title: Motion
          description: 'imitation only: the motion id of the clip to imitate'
        item:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Item
          description: 'balance only: the index of the scene item to stand on'
        scene:
          $ref: '#/components/schemas/RlScene'
        params:
          additionalProperties:
            type: number
          type: object
          title: Params
          description: >-
            Reward and randomization parameters to override; GET
            /v1/rl_runs/catalog lists every one with its default and bounds
      type: object
      required:
        - objective
      title: RlTask
      description: What to learn.
    RlBudget:
      properties:
        preset:
          anyOf:
            - type: string
              enum:
                - probe
                - standard
            - type: 'null'
          title: Preset
          description: >-
            `probe`: 300 iterations, a first signal in minutes. `standard` (the
            default): the iterations this objective was verified with
        iterations:
          anyOf:
            - type: integer
              maximum: 6000
              minimum: 10
            - type: 'null'
          title: Iterations
          description: Overrides the preset
        num_envs:
          anyOf:
            - type: integer
              maximum: 8192
              minimum: 16
            - type: 'null'
          title: Num Envs
          description: Parallel worlds (default 2048)
        max_tokens:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Tokens
          description: >-
            Per run: training stops, keeping its policy, once it has used this
            many tokens
      type: object
      title: RlBudget
    RlFrom:
      properties:
        run:
          anyOf:
            - type: string
            - type: 'null'
          title: Run
          description: One of your runs (`rlr_…`)
        policy:
          anyOf:
            - type: string
            - type: 'null'
          title: Policy
          description: A public policy's id, from kiteml.com/rl-studio
        mode:
          type: string
          enum:
            - fork
            - continue
          title: Mode
          description: >-
            `fork`: its weights and training schedule, with this run's spec and
            a fresh optimizer. `continue`: also its optimizer (your runs only)
          default: fork
        checkpoint:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Checkpoint
          description: 'A saved iteration of `run` (default: its latest)'
      type: object
      title: RlFrom
      description: Start from another policy instead of from scratch.
    RlOutputs:
      properties:
        formats:
          items:
            type: string
            enum:
              - onnx
              - pt
              - torchscript
          type: array
          title: Formats
        videos:
          items:
            $ref: '#/components/schemas/RlVideoRequest'
          type: array
          maxItems: 4
          title: Videos
          description: One clip per command
        huggingface:
          anyOf:
            - $ref: '#/components/schemas/RlHuggingFace'
            - type: 'null'
          description: Also upload the bundle to your Hub account
      type: object
      title: RlOutputs
      description: >-
        Extras beyond what every run produces (ONNX, the checkpoint, the scene,
        one clip, the report).
    RlRun:
      properties:
        id:
          type: string
          title: Id
          description: '`rlr_` + a time-ordered ULID'
        object:
          type: string
          enum:
            - rl_run
          const: rl_run
          title: Object
          default: rl_run
        status:
          type: string
          enum:
            - queued
            - processing
            - canceling
            - succeeded
            - failed
            - canceled
          title: Status
        phase:
          anyOf:
            - type: string
            - type: 'null'
          title: Phase
          description: >-
            Within `queued`/`processing`/`canceling`: `queued`, `starting`,
            `training`, `packaging`
        status_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Status Message
        progress:
          type: number
          maximum: 1
          minimum: 0
          title: Progress
        robot:
          type: string
          title: Robot
        engine:
          type: string
          title: Engine
        group_id:
          type: string
          title: Group Id
        seed:
          type: integer
          title: Seed
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        task:
          type: object
          title: Task
          description: 'The resolved task: every default filled in'
        budget:
          type: object
          title: Budget
        from:
          anyOf:
            - type: object
            - type: 'null'
          title: From
        outputs:
          type: object
          title: Outputs
        hardware_tier:
          type: string
          title: Hardware Tier
        visibility:
          type: string
          title: Visibility
        metrics:
          $ref: '#/components/schemas/RlRunMetrics'
        report:
          anyOf:
            - $ref: '#/components/schemas/RlRunReportSummary'
            - type: 'null'
          description: Once packaged
        output:
          anyOf:
            - $ref: '#/components/schemas/RlRunOutput'
            - type: 'null'
          description: 'Once packaged: where the bundle is'
        error:
          anyOf:
            - $ref: '#/components/schemas/RlRunError'
            - type: 'null'
        tokens:
          $ref: '#/components/schemas/RlRunTokens'
        metadata:
          additionalProperties:
            type: string
          type: object
          title: Metadata
        webhook_metadata:
          anyOf:
            - type: object
            - type: 'null'
          title: Webhook Metadata
        created_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Created At
        started_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Started At
        completed_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Completed At
      type: object
      required:
        - id
        - status
        - progress
        - robot
        - engine
        - group_id
        - seed
        - task
        - budget
        - outputs
        - hardware_tier
        - visibility
        - metrics
        - tokens
      title: RlRun
      description: One policy training in simulation.
      examples:
        - budget:
            iterations: 500
            max_tokens: 400
            num_envs: 2048
          completed_at: '2026-09-28T19:59:53.818362Z'
          created_at: '2026-09-28T19:15:36.753577Z'
          description: >-
            Walk forward at a steady pace with a level body and alternating
            feet.
          engine: '2026-09-28'
          from:
            mode: fork
            policy: 4d574ce4c547
          group_id: rlg_01M3MQ39HV4YNTWNNY2GHM55VC
          hardware_tier: gcp_gpu_l4
          id: rlr_01M3MQ39HVAEBQ3F64K6JDF9XR
          metadata:
            example: rl_runs/walk.json
          metrics:
            elapsed_s: 411.4
            env_steps: 24576000
            iteration: 500
            max_iterations: 500
            mean_reward: 6.39074
            steps_per_second: 59745
            terms:
              clearance: 0.46359
              feet: 0.04187
              head: 0
              pose: 0.81887
              regularizers: -0.545
              slip: -0.00441
              track: 3.61929
              upright: 1.99652
          object: rl_run
          output:
            archive_url: /v1/rl_runs/rlr_01M3MQ39HVAEBQ3F64K6JDF9XR/archive
            bytes: 12294261
            files: 43
            files_url: /v1/rl_runs/rlr_01M3MQ39HVAEBQ3F64K6JDF9XR/files
            policy_url: >-
              /v1/rl_runs/rlr_01M3MQ39HVAEBQ3F64K6JDF9XR/files/policy/policy.onnx
            report_url: /v1/rl_runs/rlr_01M3MQ39HVAEBQ3F64K6JDF9XR/report
            sha256: d085065b6d2bf18d5b0bffd67c8b8ed0834136e446d608fce13834ea2976706f
            video_url: /v1/rl_runs/rlr_01M3MQ39HVAEBQ3F64K6JDF9XR/files/media/video.mp4
          outputs:
            formats:
              - onnx
              - pt
              - torchscript
            videos:
              - command:
                  vx: 0.3
                seconds: 8
          progress: 1
          report:
            best_checkpoint: 500
            verdict: pass
          robot: open_duck_mini_v2
          seed: 0
          started_at: '2026-09-28T19:51:13.239324Z'
          status: succeeded
          status_message: 'done: verdict pass'
          task:
            commands:
              vx:
                - 0.2
                - 0.4
              vy:
                - -0.05
                - 0.05
              yaw:
                - -0.2
                - 0.2
            objective: velocity
            params: {}
            scene:
              items: []
          title: 'Open Duck: steady walk (fine-tuned)'
          tokens:
            charged: 117
            refunded: 50
            reserved: 167
          visibility: private
    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
    RlCommands:
      properties:
        vx:
          anyOf:
            - items:
                type: number
              type: array
              maxItems: 2
              minItems: 2
            - type: 'null'
          title: Vx
          description: Forward speed, m/s
        vy:
          anyOf:
            - items:
                type: number
              type: array
              maxItems: 2
              minItems: 2
            - type: 'null'
          title: Vy
          description: Sideways speed, m/s
        yaw:
          anyOf:
            - items:
                type: number
              type: array
              maxItems: 2
              minItems: 2
            - type: 'null'
          title: Yaw
          description: Turn rate, rad/s
      type: object
      title: RlCommands
      description: >-
        Ranges each episode's command is drawn from, [low, high]. Omitted ones
        keep the robot's verified band.
    RlScene:
      properties:
        items:
          items:
            $ref: '#/components/schemas/RlItem'
          type: array
          maxItems: 8
          title: Items
      type: object
      title: RlScene
    RlVideoRequest:
      properties:
        command:
          additionalProperties:
            type: number
          type: object
          title: Command
          description: '{vx, vy, yaw} to hold for the clip'
        seconds:
          type: number
          maximum: 20
          minimum: 1
          title: Seconds
          default: 10
      type: object
      required:
        - command
      title: RlVideoRequest
    RlHuggingFace:
      properties:
        repo_id:
          type: string
          maxLength: 200
          title: Repo Id
          description: >-
            Model repo name; the namespace is your connected Hugging Face
            account
        private:
          type: boolean
          title: Private
          default: true
      type: object
      required:
        - repo_id
      title: RlHuggingFace
    RlRunMetrics:
      properties:
        iteration:
          anyOf:
            - type: integer
            - type: 'null'
          title: Iteration
          description: Iterations trained so far (this run's own)
        max_iterations:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Iterations
        env_steps:
          anyOf:
            - type: integer
            - type: 'null'
          title: Env Steps
        mean_reward:
          anyOf:
            - type: number
            - type: 'null'
          title: Mean Reward
          description: Mean reward per step over the last iterations
        steps_per_second:
          anyOf:
            - type: number
            - type: 'null'
          title: Steps Per Second
        elapsed_s:
          anyOf:
            - type: number
            - type: 'null'
          title: Elapsed S
          description: Training time so far; what is billed
        terms:
          additionalProperties:
            type: number
          type: object
          title: Terms
          description: Mean reward per step, by term
      type: object
      title: RlRunMetrics
    RlRunReportSummary:
      properties:
        verdict:
          type: string
          title: Verdict
          description: >-
            `pass`, `fail` or `needs_review`; the full report is GET
            /v1/rl_runs/{id}/report
        best_checkpoint:
          type: integer
          title: Best Checkpoint
      type: object
      required:
        - verdict
        - best_checkpoint
      title: RlRunReportSummary
    RlRunOutput:
      properties:
        policy_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Policy Url
          description: 'The trained policy, `policy/policy.onnx`. An API path: send your key'
        video_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Video Url
          description: The policy on video, `media/video.mp4`; null if no clip was rendered
        files:
          type: integer
          title: Files
        bytes:
          type: integer
          title: Bytes
          description: Size of the archive
        sha256:
          anyOf:
            - type: string
            - type: 'null'
          title: Sha256
          description: 'Of the archive: check the download against it'
        archive_url:
          type: string
          title: Archive Url
        files_url:
          type: string
          title: Files Url
        report_url:
          type: string
          title: Report Url
        huggingface:
          anyOf:
            - type: object
            - type: 'null'
          title: Huggingface
      type: object
      required:
        - files
        - bytes
        - archive_url
        - files_url
        - report_url
      title: RlRunOutput
    RlRunError:
      properties:
        code:
          type: string
          title: Code
          description: >-
            `submission_failed`, `warm_start_failed`, `training_diverged`,
            `gpu_capacity_unavailable`, `training_failed`, `packaging_failed`
        message:
          type: string
          title: Message
      type: object
      required:
        - code
        - message
      title: RlRunError
    RlRunTokens:
      properties:
        reserved:
          type: integer
          title: Reserved
          description: 'Taken at create: the estimate (or `budget.max_tokens`)'
        charged:
          type: integer
          title: Charged
          description: >-
            Training minutes used, at the tier's rate, when the run produced a
            policy; 0 for a failed run or a cancel with nothing to package
        refunded:
          type: integer
          title: Refunded
      type: object
      required:
        - reserved
        - charged
        - refunded
      title: RlRunTokens
    RlItem:
      properties:
        shape:
          type: string
          enum:
            - sphere
            - box
            - capsule
          title: Shape
        size:
          items:
            type: number
            maximum: 0.6
            minimum: 0.005
          type: array
          maxItems: 3
          minItems: 1
          title: Size
          description: >-
            sphere [radius]; box [half x, half y, half z]; capsule [radius, half
            length]; each 0.005-0.6 m
        pos:
          items:
            type: number
            maximum: 3
            minimum: -3
          type: array
          maxItems: 2
          minItems: 2
          title: Pos
          description: '[x, y] on the floor, m from the spawn (within 3 m)'
        mass:
          type: number
          maximum: 20
          minimum: 0.01
          title: Mass
          description: kg
        label:
          anyOf:
            - type: string
              maxLength: 40
            - type: 'null'
          title: Label
        color:
          anyOf:
            - items:
                type: number
                maximum: 1
                minimum: 0
              type: array
              maxItems: 3
              minItems: 3
            - type: 'null'
          title: Color
          description: RGB, 0-1
        roll_friction:
          anyOf:
            - type: number
              maximum: 0.05
              minimum: 0
            - type: 'null'
          title: Roll Friction
          description: 0 rolls freely; ~0.01 for a ball the robot stands on
        spin_friction:
          anyOf:
            - type: number
              maximum: 0.05
              minimum: 0
            - type: 'null'
          title: Spin Friction
      type: object
      required:
        - shape
        - size
        - pos
        - mass
      title: RlItem
      description: >-
        A physical item in the training scene: a free body with mass and
        collision.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        A Kite API key (`kite_...`), from **Platform API → Keys** in the
        dashboard.

````