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

# Create an authenticated upload

> Creates a signed upload for one Simulator artifact. Send the bytes to the returned URL before it expires.



## OpenAPI

````yaml /openapi/simulation.yaml post /v1/uploads
openapi: 3.1.0
info:
  description: >-
    The continuous-simulation API builds reusable Simulators and runs isolated
    Simulations and Worlds. This document describes the stable v1 public
    contract.
  title: continuous-simulation API
  version: v1
servers:
  - description: Continuous production API.
    url: https://api.continuouslabs.ai
security: []
tags:
  - description: Read deployment metadata for the public API.
    name: meta
    x-group: API metadata
  - description: Create and control isolated runtime instances of ready Simulators.
    name: simulations
    x-group: Simulations
  - description: Build, inspect, tag, publish, and delete reusable Simulator artifacts.
    name: simulators
    x-group: Simulators
  - description: Upload and publish Simulator artifacts.
    name: uploads
    x-group: Artifact uploads
  - description: Create and control coordinated groups of Simulations.
    name: worlds
    x-group: Worlds
paths:
  /v1/uploads:
    post:
      tags:
        - uploads
      summary: Create an authenticated upload
      description: >-
        Creates a signed upload for one Simulator artifact. Send the bytes to
        the returned URL before it expires.
      operationId: create-upload
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUploadRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateUploadResponse'
          description: Created
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '408':
          $ref: '#/components/responses/RequestTimeout'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - apiKeyAuth: []
        - sessionBearerAuth: []
        - sessionCookie: []
components:
  schemas:
    CreateUploadRequest:
      additionalProperties: false
      examples:
        - byte_size: 1048576
          content_type: application/vnd.continuous.simulator-artifact+json
          purpose: simulator_artifact
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - https://example.com/schemas/CreateUploadRequest.json
          format: uri
          readOnly: true
          type: string
        byte_size:
          description: Set the exact upload size in bytes.
          format: int64
          maximum: 268435456
          minimum: 1
          type: integer
        content_type:
          description: Use application/vnd.continuous.simulator-artifact+json.
          type: string
        purpose:
          description: Use simulator_artifact for a generated Simulator bundle.
          enum:
            - simulator_artifact
          type: string
      required:
        - purpose
        - content_type
        - byte_size
      type: object
    CreateUploadResponse:
      additionalProperties: false
      examples:
        - expires_at: '2026-01-15T12:15:00Z'
          put_url: https://example.invalid/signed-upload
          required_headers:
            Content-Type: application/vnd.continuous.simulator-artifact+json
          upload_id: upl_01J8Z5X4K7M2N9P0Q1R2S3T4V8
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - https://example.com/schemas/CreateUploadResponse.json
          format: uri
          readOnly: true
          type: string
        expires_at:
          format: date-time
          type: string
        put_url:
          type: string
        required_headers:
          additionalProperties:
            type: string
          type: object
        upload_id:
          type: string
      required:
        - upload_id
        - put_url
        - required_headers
        - expires_at
      type: object
    Error:
      additionalProperties: false
      examples:
        - code: simulator_not_ready
          detail: simulator is not ready
      properties:
        code:
          minLength: 1
          type: string
        detail:
          minLength: 1
          type: string
      required:
        - code
        - detail
      type: object
  responses:
    BadRequest:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Bad Request
    Unauthorized:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Unauthorized
    Forbidden:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Forbidden
    RequestTimeout:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Request Timeout
    PayloadTooLarge:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Request Entity Too Large
    UnsupportedMediaType:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Unsupported Media Type
    UnprocessableEntity:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Unprocessable Entity
    InternalServerError:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Internal Server Error
    ServiceUnavailable:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Service Unavailable
  securitySchemes:
    apiKeyAuth:
      bearerFormat: Continuous API key
      description: >-
        Use a Continuous API key. Send it in the Authorization header as a
        Bearer token.
      scheme: bearer
      type: http
    sessionBearerAuth:
      bearerFormat: sealed session
      description: >-
        Use a sealed user session Bearer token. This method supports browser and
        session-only operations.
      scheme: bearer
      type: http
    sessionCookie:
      description: >-
        Use the sealed browser session cookie. This method supports browser and
        session-only operations.
      in: cookie
      name: wos-session
      type: apiKey

````