---
title: "Get a file"
method: GET
path: "/files/{fileId}"
tags: ["Files"]
---

# Get a file

`GET /files/{fileId}`

## Request

- Base URL: `https://api.ando.so/v1`
- URL: `https://api.ando.so/v1/files/{fileId}`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Returns metadata and a short-lived download URL when the authenticated principal uploaded the file or can currently read a live message containing it. Incomplete uploads remain visible only to the API key that created the upload intent.

## Path parameters

- `fileId` string, required: File identifier.

## Response `200`

File lifecycle state.

- PublicFileResponse: Public file response envelope.
  - `data` PublicFileResult, required: Public file lifecycle state. Ready readable files include short-lived download instructions and can be attached to message creation with file_ids.
    - `content_type` string, required: Declared MIME content type.
    - `created_at` string, date-time, required: File upload intent creation timestamp.
    - `file_id` string, required: File identifier. Matches id for message file_ids.
    - `filename` string, required: Original filename.
    - `id` string, required: File identifier.
    - `object` 'file', required: Object type.
    - `purpose` 'message_attachment', required: File purpose.
    - `size_bytes` integer, required: File size in bytes.
    - `status` 'waiting_for_upload' | 'uploaded' | 'processing' | 'ready' | 'aborted' | 'expired' | 'failed', required: File lifecycle status.
    - `updated_at` string, date-time, required: Last file lifecycle update timestamp.
    - `upload` PublicFileUploadInstructions, required: Temporary storage upload instructions.
      - `expires_at` string, date-time, required: Upload URL expiration timestamp.
      - `headers` object, required: Headers that must be sent exactly with the direct storage upload.
      - `kind` 'single_part_presigned_put', required: Upload strategy.
      - `method` 'PUT', required: Upload HTTP method.
      - `url` string, uri, required: Temporary direct upload URL.
    - `download` PublicFileDownloadInstructions: Temporary storage download instructions.
      - `expires_at` string, date-time, nullable, required: Download URL expiration timestamp.
      - `method` 'GET', required: Download HTTP method.
      - `url` string, uri, required: Temporary direct download URL.
  - `file_id` string, required: File identifier. Matches data.id.

## Other responses

- `400`: Bad request.
- `401`: Missing or invalid API key.
- `403`: Forbidden.
- `404`: Not found.
- `409`: Conflict.
- `429`: Rate limit or quota exceeded.
- `500`: Internal server error.

## Changes

- **2026-10-18** `aaceae49c08d`: 12 info
  - added the optional property `request_id` to the response with the `400` status
  - added the optional property `request_id` to the response with the `401` status
  - added the optional property `request_id` to the response with the `403` status
  - added the optional property `request_id` to the response with the `404` status
  - …8 more
- **2026-09-06** `a9b29e0cf8fd`: 1 info
  - added the optional property `data/download` to the response with the `200` status
- **2026-09-04** `2da0b5c6e637`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/ando/apis/ando-public-api/changes/files/:fileId/get.md)

---

[API](https://skmtc.dev/ando/apis/ando-public-api.md) - [All operations](https://skmtc.dev/ando/apis/ando-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/ando/apis/ando-public-api/revisions/d852746d81c2?raw)
