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

# Submit a driver

> Queue a driver image, by digest in the team's repository, for the next nightly evaluation (`simforge challenge submit`).



## OpenAPI

````yaml /api-reference/openapi.json post /api/cli/challenge/submissions
openapi: 3.1.0
info:
  title: SimForge Cloud API
  version: '2026-10-29'
  description: >-
    The public SimForge API: what `simforge --cloud`, `simforge login` and the
    Python client call. Authenticate with a bearer token: the access token
    `simforge login` stores, an AI agent's access token (its recipe is
    `/auth.md`), or an `sfk_` API key. A `/api/v1` 401 carries
    `WWW-Authenticate: Bearer
    resource_metadata="<host>/.well-known/oauth-protected-resource"`. `/api/v1`
    errors are an `ErrorEnvelope`; `/api/cli` and `/agent` errors are an OAuth
    error object.


    Versions: send `SimForge-Version: <date>` (2026-10-01, 2026-10-21,
    2026-10-22, 2026-10-23, 2026-10-24, 2026-10-28, 2026-10-29) and every
    `/api/v1` response is in that version's shape and names it in the same
    header; this document describes 2026-10-29. A request without the header
    gets 2026-10-01, where an error's hint is `detail.hint` and `GET
    /api/v1/evaluations` names its rows `jobs`. A header that is not a date, or
    a date before 2026-10-01, is `400 bad_request`. Every response also carries
    `SimForge-Cli-Minimum`: the oldest `simforge` CLI the server serves.


    Retries: from 2026-10-21, send a new `Idempotency-Key` (1-255 characters)
    with every POST, PUT, PATCH and DELETE, and the same key when retrying that
    request. The first request's answer is kept for 24 hours and a repeat gets
    it again with `Idempotent-Replayed: true`; the key with any other request,
    or while the first is still running, is `409 idempotency_conflict`
    (`retryable` while running). A 5xx answer is not kept. Creating an API key
    refuses a key (its secret is shown once).
  license:
    name: Apache-2.0
    identifier: Apache-2.0
servers:
  - url: https://dev.simforge.ai
    description: Development (dev.simforge.ai)
security: []
tags:
  - name: Sign-in
    description: >-
      `simforge login`: OAuth 2.0 device and browser sign-in for the CLI, the
      session behind a token. AI agents sign in through auth.md (`/auth.md`):
      register, a person approves, then the claim and JWT-bearer grants.
  - name: Account
    description: The principal, its workspaces, API keys and usage, and system status.
  - name: Runs
    description: >-
      Cloud runs (`--cloud`): renders, simulations, Recast log ingestion and
      transfers, their events and artifacts.
  - name: Models
    description: Customer fine-tunes and their workspace-owned model weights.
  - name: Datasets
    description: >-
      Datasets, their files as signed links (`simforge.dataset-files/v1`,
      `simforge datasets pull`), and copies out of shared datasets (SIMLOG-25k).
  - name: Maps and vehicles
    description: >-
      Maps the workspace can use, the vehicles a scenario can bind and the asset
      gallery.
  - name: Authoring
    description: >-
      Hosted scenario authoring: drafts, transactions, validation and map
      discovery.
  - name: Distribution
    description: >-
      The runtime and map pack agreement and signed downloads (`simforge runtime
      install`, `simforge maps pull`).
  - name: Telemetry
    description: Runtime usage telemetry, a condition of the runtime terms.
  - name: Benchmark
    description: Renderer benchmark results and scene packs (`simforge bench`).
  - name: Challenge
    description: >-
      The driving challenge: team, registry login and submissions (`simforge
      challenge`).
paths:
  /api/cli/challenge/submissions:
    post:
      tags:
        - Challenge
      summary: Submit a driver
      description: >-
        Queue a driver image, by digest in the team's repository, for the next
        nightly evaluation (`simforge challenge submit`).
      operationId: createChallengeSubmission
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChallengeSubmitRequest'
      responses:
        '201':
          description: The queued submission.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChallengeSubmissionReceipt'
        '400':
          description: 'The request failed: an OAuth error object.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CliOAuthError'
        '401':
          description: 'The request failed: an OAuth error object.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CliOAuthError'
        '403':
          description: 'The request failed: an OAuth error object.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CliOAuthError'
        '404':
          description: 'The request failed: an OAuth error object.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CliOAuthError'
        '409':
          description: 'The request failed: an OAuth error object.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CliOAuthError'
        '429':
          description: 'The request failed: an OAuth error object.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CliOAuthError'
      security:
        - simforgeToken:
            - challenge:write
components:
  schemas:
    ChallengeSubmitRequest:
      type: object
      properties:
        track:
          type: string
          enum:
            - dev
            - final
        image:
          type: string
          minLength: 1
          maxLength: 512
          description: >-
            `<registry>/<repository>@sha256:<digest>`, already pushed to the
            team's repository.
      required:
        - track
        - image
      additionalProperties: false
    ChallengeSubmissionReceipt:
      type: object
      properties:
        submission:
          type: object
          properties:
            id:
              type: string
            teamId:
              type: string
            track:
              type: string
              enum:
                - dev
                - final
            imageRef:
              type: string
            imageDigest:
              type: string
            status:
              type: string
              enum:
                - queued
                - scheduled
                - evaluating
                - scored
                - failed
                - rejected
            night:
              type: string
            score:
              type:
                - number
                - 'null'
            errorCode:
              type:
                - string
                - 'null'
            errorReason:
              type:
                - string
                - 'null'
            createdAt:
              type: string
            scoredAt:
              type:
                - string
                - 'null'
          required:
            - id
            - teamId
            - track
            - imageRef
            - imageDigest
            - status
            - night
            - score
            - errorCode
            - errorReason
            - createdAt
            - scoredAt
      required:
        - submission
    CliOAuthError:
      type: object
      properties:
        error:
          type: string
          description: >-
            Machine code: an RFC 6749/8628 error (`invalid_grant`,
            `authorization_pending`, `slow_down`, `invalid_token`,
            `insufficient_scope`) or a SimForge code (`not_found`,
            `rate_limited`, …).
        error_description:
          type: string
          description: One sentence for a person.
        detail:
          type: object
          additionalProperties: {}
      required:
        - error
        - error_description
  securitySchemes:
    simforgeToken:
      type: http
      scheme: bearer
      description: >-
        A `sfc_at_…` access token from `simforge login`, or an `sfk_…` API key.
        An operation's security lists the scopes the credential must hold.

````

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