---
title: "List a session's captured downloads"
method: GET
path: "/phones/sessions/{session_id}/downloads"
tags: ["downloads"]
---

# List a session's captured downloads

`GET /phones/sessions/{session_id}/downloads`

Returns the files this session captured off its phone, newest first — the direct answer to "what did this session download". Rows appear at detection, before the bytes finish moving, so a caller waiting on a file watches its capture state progress rather than an empty list.

## Path parameters

- `session_id` string, uuid, required — session whose captures to list

## Query parameters

- `q` string — filter by filename, case-insensitive substring match
- `mime_type` string — only downloads of exactly this media type
- `min_size_bytes` integer — only downloads at least this many bytes (0 = no bound)
- `max_size_bytes` integer — only downloads at most this many bytes (0 = no bound)
- `created_after` string, date-time — only downloads registered at or after this time (RFC 3339)
- `created_before` string, date-time — only downloads registered at or before this time (RFC 3339)
- `limit` integer — max items per page
- `offset` integer — pagination offset

## Response `200`

OK

- FileDownloadListResponse — One page of the org's captured downloads.
  - `$schema` string, uri — A URL to the JSON Schema for this object.
  - `downloads` FileDownloadSummary[], nullable, required — Captured files, newest first.
    - `attachment_url` string — Short-lived signed URL that downloads the file as an attachment under its name. Present only for ready captures.
    - `bytes_transferred` integer — Bytes moved so far for an in-flight phone transfer. Absent until the phone reports progress.
    - `capture_error` string — Reason the capture failed, when it did.
    - `capture_state` 'detected' | 'uploading' | 'ready' | 'skipped_size' | 'skipped_quota' | 'skipped_type' | 'dropped_teardown' | 'failed', required — Capture lifecycle: detected/uploading while in flight, ready when usable, or a terminal skip/failure with its reason recorded.
    - `checksum` string — SHA-256 of the file's bytes, computed on the phone during upload.
    - `created_at` string, date-time, required — When the capture was detected and registered.
    - `download_url` string — Short-lived signed URL to read the file's bytes. Present only for ready captures; re-list to refresh an expired one.
    - `duration_seconds` integer — Video duration in seconds.
    - `filename` string, required — Filename as it appeared on the phone.
    - `height` integer — Intrinsic pixel height of the source.
    - `id` string, required — File identifier. Unique across uploads and downloads; deliverable either way.
    - `mime_type` string, required — Media type reported by the phone.
    - `on_phone_count` integer, required — Distinct phones currently holding or receiving a copy. Deleting the file recalls these.
    - `preview_state` 'processing' | 'ready' | 'unavailable', required — Whether the preview exists, is still being generated, or will never be available for this format.
    - `reel_url` string — Short-lived signed URL for the animated hover preview. Videos only; absent until generated.
    - `session_id` string — Session that produced the file.
    - `size_bytes` integer, required — Size in bytes, as reported at detection.
    - `thumbnail_url` string — Short-lived signed URL for the generated preview image. Absent while generation is pending, and permanently absent for formats without a preview.
    - `width` integer — Intrinsic pixel width of the source.
  - `total` integer, required — Total downloads matching the query.

## Other responses

- `default` — Error

---

[API](https://skmtc.net/axilioai/apis/axilio-api.md) · [All operations](https://skmtc.net/axilioai/apis/axilio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/axilioai/axilio-api/versions/108ab4b41051/schema)
