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

# Anything else your automation serves

> The endpoints above are the ones every workspace has. Beyond them, **any** path under your base URL reaches your workspace, so a route your agent wrote is reachable the moment it exists, with its path parameters and query string intact.

Ask the agent for an endpoint that answers a question specific to your work and it will write one. Nothing has to be registered.

Every method reaches your workspace, not only GET. Your handler's own status code, content type and body come straight back.



## OpenAPI

````yaml /openapi.json get /{path}
openapi: 3.1.0
info:
  title: Workspace API
  version: 1.0.0
  description: >-
    Every workspace answers these endpoints. Nothing is registered and nothing
    is switched on: an automation that appears in your Automations tab is
    already readable here.


    The base URL is your workspace's own. Ask the agent for it, or find it under
    Settings → API on the workspace. It is stable and never changes.


    Every call carries your workspace's API key, as `Authorization: Bearer
    <key>` or in the `x-desert-api-key` header. The key is on the same settings
    page as the URL, and generating a new one there revokes the old one
    immediately.
servers:
  - url: https://www.rundesert.com/p/{workspaceId}
    description: Your workspace's public API
    variables:
      workspaceId:
        default: px_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        description: >-
          The id in your workspace's public URL. It is the address, not the
          credential — the API key is what authorises the call.
security:
  - bearerAuth: []
  - apiKeyHeader: []
tags:
  - name: Automations
    description: What this workspace can do.
  - name: Runs
    description: What it has done, and what came out.
  - name: Files
    description: Downloading what an automation produced.
  - name: Custom endpoints
    description: Anything else your agent wrote.
paths:
  /{path}:
    get:
      tags:
        - Custom endpoints
      summary: Anything else your automation serves
      description: >-
        The endpoints above are the ones every workspace has. Beyond them,
        **any** path under your base URL reaches your workspace, so a route your
        agent wrote is reachable the moment it exists, with its path parameters
        and query string intact.


        Ask the agent for an endpoint that answers a question specific to your
        work and it will write one. Nothing has to be registered.


        Every method reaches your workspace, not only GET. Your handler's own
        status code, content type and body come straight back.
      operationId: customEndpoint
      parameters:
        - name: path
          in: path
          required: true
          description: Whatever path your automation serves.
          schema:
            type: string
          example: api/endpoints/status
      responses:
        '200':
          description: Whatever your handler returned, relayed unchanged.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '502':
          description: The workspace could not be reached, or its answer was over 4MB.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: >-
            Your handler did not answer within 30 seconds of the workspace being
            awake. It is not retried.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  responses:
    Unauthorized:
      description: >-
        The API key was missing or wrong. Check Settings → API for the current
        one — generating a new key there stops the old one working immediately.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unauthorized
    RateLimited:
      description: >-
        600 requests a minute across the whole workspace, shared with anyone
        loading its pages. Wait and try again.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: rate limited
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
        detail:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Your workspace's API key, from Settings → API. Sent as `Authorization:
        Bearer dk_...`.
    apiKeyHeader:
      type: apiKey
      in: header
      name: x-desert-api-key
      description: >-
        The same key, for callers whose `Authorization` header is already spoken
        for by their own auth. Send one form or the other, not both.

````