---
title: "Get a one-hour link to read one of your media files"
method: GET
path: "/v1/files/{uuid}/media-url"
tags: ["Files"]
---

# Get a one-hour link to read one of your media files

`GET /v1/files/{uuid}/media-url`

## Request

- Base URL: `https://contentmaschine.ai/api`
- URL: `https://contentmaschine.ai/api/v1/files/{uuid}/media-url`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://contentmaschine.ai/api/oauth/authorize`, token URL `https://contentmaschine.ai/api/oauth/token`)

For video, audio and raster images. `url` is a presigned GET valid one hour that supports
HTTP range requests, so a player or decoder can read only the parts it needs. **The URL is
a credential for that hour**: do not log it or pass it on. Ask again when it expires.
A file stored only on the server disk answers with the session serve path and
`expires_at: null`. Unknown, foreign, other file types and files in a container your
token cannot read are the same 404. Free.

## Path parameters

- `uuid` string, uuid, required

## Response `200`

The link.

- object
  - `success` boolean
  - `data` object
    - `url` string: Presigned GET URL (a credential), or the serve path for a server-disk file.
    - `expires_at` string, date-time, nullable
  - `timestamp` string, date-time

## Other responses

- `401`: Missing or invalid API key.
- `403`: The token does not hold files:read.
- `404`: Unknown file, not yours, not media, OR readable only by a container scope your token lacks.
- `503`: The link could not be created right now.
- `default`: Any other error. Every failure this API emits uses the same envelope; branch on `error.type`, never on `error.message`, and quote `error.correlation_id` to support.

---

[API](https://skmtc.dev/contentmaschine/apis/contentmaschine-ai-api.md) · [All operations](https://skmtc.dev/contentmaschine/apis/contentmaschine-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/contentmaschine/apis/contentmaschine-ai-api/revisions/28c74f46051c?raw)
