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

# Look up a path on a volume

> Returns what exists at `path`, following symlinks, so a symlink that points at nothing is reported as missing. Use it to check that a path exists. The volume does not have to be mounted in a Sailbox.



## OpenAPI

````yaml /sailbox-openapi.json get /sailbox-volumes/{volume_id}/paths
openapi: 3.1.0
info:
  title: Sail Sailbox API
  version: '2026-09-07'
  description: >-
    Create and operate Sailboxes over HTTP. Sailboxes are fast-booting virtual
    machines that you can pause, resume, and checkpoint.


    Run commands, stream files, manage lifecycle and networking, and inspect
    usage. Turning on SSH and building an image still require an SDK or the CLI.
    See the [HTTP API guide](/sailboxes-http-api).
servers:
  - url: https://sailbox-api.sailresearch.com/v1
security:
  - BearerAuth: []
tags:
  - name: Apps
    description: Groups that own Sailboxes. One app per workload.
  - name: Lifecycle
    description: >-
      A Sailbox's whole life: create it, watch it, stop and start it, terminate
      it.
  - name: Checkpoints
    description: Save a Sailbox to start from later, and copy a running one.
  - name: Exec
    description: Run commands and control their standard input and terminals.
  - name: Files
    description: Stream regular files into and out of a Sailbox.
  - name: Networking
    description: >-
      Publish ports, serve them on hostnames you own, and identify a Sailbox to
      other Sailboxes.
  - name: Secrets
    description: >-
      Organization values that egress policy rules can add to matching requests.
      Sail never returns a stored value.
  - name: Egress policies
    description: >-
      What a Sailbox may connect to, and what happens to the HTTPS requests it
      sends.
  - name: Volumes
    description: >-
      Shared storage that outlives any one Sailbox. Alpha: these endpoints can
      still change.
  - name: SSH access
    description: Certificates for connecting to a Sailbox with `ssh`.
  - name: Usage
    description: Resource usage and spend.
  - name: Identity
    description: Who your API key belongs to.
paths:
  /sailbox-volumes/{volume_id}/paths:
    get:
      tags:
        - Volumes
      summary: Look up a path on a volume
      description: >-
        Returns what exists at `path`, following symlinks, so a symlink that
        points at nothing is reported as missing. Use it to check that a path
        exists. The volume does not have to be mounted in a Sailbox.
      operationId: getVolumePath
      parameters:
        - name: volume_id
          in: path
          required: true
          schema:
            type: string
            pattern: ^vol_
          description: Id of the volume, as returned by create.
        - name: path
          in: query
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 4096
          description: >-
            Path on the volume, relative to its root, with or without a leading
            slash: `skills/review.md` and `/skills/review.md` name the same
            file. A `..` segment is rejected.
      responses:
        '200':
          description: The entry at `path`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VolumeFileEntry'
              example:
                name: review.md
                type: file
                size: 2048
                modified_time: 1782907200.5
                mode: 420
        '400':
          description: >-
            The `path` is missing, too long, or contains a `..` segment, or an
            upload's body ended before it was complete.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: memory_limit_gib for size m must be between 8 and 128
                  type: invalid_request_error
                  param: null
                  code: null
        '401':
          description: The API key is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: Invalid API key
                  type: authentication_error
                  param: null
                  code: invalid_api_key
        '402':
          description: >-
            The organization is out of credits. The error carries a
            `billing_url` pointing at the page where you add them. Retry once
            you have.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: >-
                    Your API key has been disabled due to insufficient credits.
                    Visit https://app.sailresearch.com/billing to add credits.
                  type: billing_error
                  param: null
                  code: credits_exhausted
                  billing_url: https://app.sailresearch.com/billing
        '403':
          description: The API key is not allowed to perform this operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: sailboxes require an organization-scoped API key
                  type: permission_error
                  param: null
                  code: null
        '404':
          description: >-
            No volume with that id exists in your organization, or nothing
            exists at `path`. A missing path sets the error's `code` to
            `not_found`; a missing volume leaves it `null`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: 'no such file or directory: /skills/review.md'
                  type: not_found_error
                  param: null
                  code: not_found
        '409':
          description: >-
            The volume is not `ready`, its storage type does not support file
            access, or the path is the wrong kind for the operation, such as
            reading a directory as a file.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: 'is a directory: /skills'
                  type: conflict_error
                  param: null
                  code: failed_precondition
        '429':
          description: >-
            Too many requests in flight, or the organization is at a limit. A
            `Retry-After` header means the request never started, so retry it
            unchanged after that delay. Without one, the request ran and hit the
            limit `message` names. Some of those clear on their own, such as a
            shortage of public ports; others need you to free something up
            first. Send the request again once the cause is gone.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: >-
                    Too many concurrent requests. Please retry after some of
                    your organization's in-flight requests complete.
                  type: rate_limit_error
                  param: null
                  code: rate_limited
          headers:
            Retry-After:
              $ref: '#/components/headers/RetryAfter'
        '500':
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: failed to fetch sailbox
                  type: server_error
                  param: null
                  code: null
        '503':
          description: >-
            Too many file operations are running against volumes right now, or
            Sail is momentarily unavailable. Retry after the delay in the
            `Retry-After` header when one is present, and with backoff
            otherwise.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: Authentication service unavailable
                  type: server_error
                  param: null
                  code: null
          headers:
            Retry-After:
              $ref: '#/components/headers/RetryAfter'
        '504':
          description: The operation outran its deadline. Retry it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: idempotent request still in flight
                  type: server_error
                  param: null
                  code: null
components:
  schemas:
    VolumeFileEntry:
      type: object
      additionalProperties: false
      properties:
        name:
          type: string
          description: Name of the entry, without its directory.
        type:
          type: string
          description: >-
            What the entry is: `file`, `directory`, `symlink`, or `other`. A
            symlink is reported as itself in a listing, and as what it points at
            when you ask for one path.
        size:
          type: integer
          format: int64
          minimum: 0
          description: Size in bytes.
        modified_time:
          type: number
          description: When the entry last changed, in seconds since the Unix epoch.
        mode:
          type: integer
          minimum: 0
          maximum: 4095
          description: POSIX permission bits, as a decimal number.
      required:
        - name
        - type
        - size
        - modified_time
        - mode
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorObject'
    ErrorObject:
      type: object
      required:
        - message
        - type
        - param
        - code
      properties:
        message:
          type: string
          description: Human-readable description of what went wrong.
        type:
          type: string
          description: >-
            Error category: `invalid_request_error`, `authentication_error`,
            `permission_error`, `billing_error`, `not_found_error`,
            `conflict_error`, `rate_limit_error`, `quota_exceeded_error`,
            `not_implemented_error`, or `server_error`.
        param:
          oneOf:
            - type: string
            - type: 'null'
          description: >-
            The request field the error refers to, when the error is about one
            field.
        code:
          oneOf:
            - type: string
            - type: integer
            - type: 'null'
          description: >-
            Stable short code for the error, when one applies. Errors relayed
            from the Sailbox runtime carry its status token, for example
            `already_exists` or `failed_precondition` on a 409, which the HTTP
            status alone does not distinguish.
        billing_url:
          type: string
          format: uri
          description: Page where you add credits. Sent with a 402.
      additionalProperties: true
  headers:
    RetryAfter:
      description: >-
        How many seconds to wait before retrying. On a 429 it also means the
        request never started, so the retry can reuse the same
        `Idempotency-Key`.
      schema:
        type: integer
        minimum: 0
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key

````