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

# Request a file upload

> Request with `name`, `content_type` and exact byte `size`, e.g. `{"name":"photo.png","content_type":"image/png","size":12345}`. Any type of file, up to 20 MiB each. PUT raw bytes (not JSON or base64) to the returned `url` with every returned header within 15 minutes; browsers set `content-length` from the body. Uploads are write-once; repeating the PUT returns 412. Pass the returned `id` in `input_files` when creating a run. Files in the landing zone expire after 24 hours and are deleted asynchronously. Files attached to a run are retained permanently and their references can be reused by your organization.



## OpenAPI

````yaml https://tracks.alpic.ai/api/openapi.json post /files
openapi: 3.1.0
info:
  title: Tracks API
  version: 0.0.1
  description: >-
    Run coding agents such as Claude Code in isolated sandboxes with an API key
    of your organization. Create a run with a prompt, then follow its output and
    what it costs, or launch an experiment to compare agents on your scenarios.
servers:
  - url: https://tracks.alpic.ai/api
security: []
tags:
  - name: Runs
    description: Start coding agents and follow their work.
  - name: Files
    description: Upload files to place in a run's sandbox.
  - name: Connections
    description: >-
      Let agents use MCP servers as one of their users, without their
      credentials entering the sandbox.
  - name: Experiments
    description: >-
      Define scenarios to give several agents in several variants, judged on
      what they did.
  - name: Executions
    description: Launch experiments and read their results.
  - name: Library
    description: What your experiments can give their agents.
  - name: System
paths:
  /files:
    post:
      tags:
        - Files
      summary: Request a file upload
      description: >-
        Request with `name`, `content_type` and exact byte `size`, e.g.
        `{"name":"photo.png","content_type":"image/png","size":12345}`. Any type
        of file, up to 20 MiB each. PUT raw bytes (not JSON or base64) to the
        returned `url` with every returned header within 15 minutes; browsers
        set `content-length` from the body. Uploads are write-once; repeating
        the PUT returns 412. Pass the returned `id` in `input_files` when
        creating a run. Files in the landing zone expire after 24 hours and are
        deleted asynchronously. Files attached to a run are retained permanently
        and their references can be reused by your organization.
      operationId: files.createUpload
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: >-
                    Filename, without directories; up to 128 ASCII letters,
                    digits, spaces, dots, hyphens or underscores, starting with
                    a letter or digit.
                content_type:
                  type: string
                  description: >-
                    MIME type, without parameters; `application/octet-stream`
                    when unknown.
                size:
                  type: integer
                  minimum: 1
                  maximum: 20971520
                  description: Exact size in bytes, from 1 to 20 MiB.
              required:
                - name
                - content_type
                - size
              additionalProperties: false
        required: true
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: Reference returned when requesting a file upload.
                  url:
                    type: string
                  method:
                    type: string
                    enum:
                      - PUT
                  headers:
                    type: object
                    additionalProperties:
                      type: string
                  upload_expires_at:
                    type: string
                  expires_at:
                    type: string
                required:
                  - id
                  - url
                  - method
                  - headers
                  - upload_expires_at
                  - expires_at
                additionalProperties: false
        '400':
          description: >-
            The request is invalid: a value is missing, has the wrong type or is
            out of range. Fix it before sending the request again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidRequestEncoded'
        '401':
          description: >-
            The API key is missing, malformed or revoked, or its organization is
            closed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKeyRefusedEncoded'
      security:
        - bearer: []
components:
  schemas:
    InvalidRequestEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - InvalidRequest
        message:
          type: string
          description: Every problem found, in one sentence.
        location:
          type: string
          enum:
            - path
            - query
            - header
            - body
          description: The part of the request that is wrong.
        issues:
          type: array
          items:
            $ref: '#/components/schemas/RequestIssue'
          description: Each problem found, with where it is.
      required:
        - _tag
        - message
        - location
        - issues
      additionalProperties: false
    ApiKeyRefusedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - ApiKeyRefused
        message:
          type: string
      required:
        - _tag
        - message
      additionalProperties: false
    RequestIssue:
      type: object
      properties:
        path:
          type: array
          items:
            anyOf:
              - type: string
              - type: number
              - type: string
                enum:
                  - Infinity
                  - '-Infinity'
                  - NaN
          description: >-
            Keys leading to the wrong value inside that part of the request,
            such as `["agent", "model"]`. Empty when the problem concerns that
            part as a whole.
        message:
          type: string
          description: What is wrong with the value.
      required:
        - path
        - message
      additionalProperties: false
      description: One problem found in the request.
  securitySchemes:
    bearer:
      description: >-
        An API key of your organization, starting with `trk_`, sent as
        `Authorization: Bearer <key>`.
      type: http
      scheme: bearer

````

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