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

# List available kits

> Return the externally accessible kits for the calling API key.

# List available kits

## Notes

* The response always includes `kits` and `total`.
* A `200` with an empty `kits` array means the key authenticated successfully but has no externally visible kits.
* In live testing, this also occurred for a newly created team API key after a kit had been marked `exposed`, which suggests an additional access grant or backend entitlement step beyond simply toggling exposure.

## Method behavior

Observed method handling:

* `GET /api/v1/external/kits` returns `200`
* `HEAD /api/v1/external/kits` returns `404`
* `OPTIONS /api/v1/external/kits` returns `404`

## Related schemas

* [ListKitsResponse](/rts-builder/schemas/list-kits-response)
* [ErrorResponse](/rts-builder/schemas/error-response)


## OpenAPI

````yaml openapi/rts-builder.json GET /api/v1/external/kits
openapi: 3.0.3
info:
  title: RTS Builder External API
  version: '2026-03-29'
  description: >-
    Public API for listing externally accessible RTS Builder kits, starting
    runs, polling run status, and retrieving parsed results. Verified against
    the live service on March 28, 2026 Pacific / March 29, 2026 UTC. The 201
    response for POST /api/v1/external/{kitSlug} is inferred from the internally
    verified builder run endpoint because external start access returned 403
    during live testing.
servers:
  - url: https://rts-builder.slayers.tech
    description: RTS Builder production
security:
  - ApiKeyAuth: []
tags:
  - name: External Kits
    description: Kit discovery and run creation.
  - name: Runs
    description: Run lifecycle and result retrieval.
paths:
  /api/v1/external/kits:
    get:
      tags:
        - External Kits
      summary: List available kits
      description: >-
        Returns the kits visible to the calling API key. Live testing only
        produced authenticated empty-list responses, including for a same-tenant
        key after a kit was marked exposed.
      operationId: listExternalKits
      responses:
        '200':
          description: Authenticated request succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListKitsResponse'
              examples:
                empty:
                  summary: Observed empty list response
                  value:
                    kits: []
                    total: 0
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                missingHeader:
                  summary: Missing X-API-Key header
                  value:
                    error: missing X-API-Key header
                invalidKey:
                  summary: Invalid API key
                  value:
                    error: invalid API key
components:
  schemas:
    ListKitsResponse:
      type: object
      required:
        - kits
        - total
      properties:
        kits:
          type: array
          items:
            $ref: '#/components/schemas/ExternalKit'
        total:
          type: integer
          minimum: 0
      example:
        kits: []
        total: 0
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: string
    ExternalKit:
      type: object
      description: >-
        Kit object returned by the external kits listing. No live API key
        returned a non-empty `kits` array during testing, so field-level shape
        remains unverified.
      additionalProperties: true
      example: {}
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Team-scoped RTS Builder API key.

````