---
title: "Get a file download URL"
method: GET
path: "/v1/resources/{resourceId}/files/download-url"
tags: ["Resources"]
---

# Get a file download URL

`GET /v1/resources/{resourceId}/files/download-url`

## Request

- Base URL: `https://api.monid.ai`
- URL: `https://api.monid.ai/v1/resources/{resourceId}/files/download-url`
- Auth: HTTP bearer

Returns `{ url, expiresAt }` — a short-lived signed URL for the file at `path` on a workspace file system; GET it to stream the bytes. Pass `redirect=true` for a 302 straight to the URL (`curl -L`). For a shareable URL with a longer TTL, run the provider's /cat endpoint.

## Path parameters

- `resourceId` string, required: Resource identifier (ULID).

## Query parameters

- `path` string, required: File path relative to the FS root.
- `redirect` 'true': `true` answers a 302 redirect to the signed URL instead of the JSON body (the `curl -L` ergonomic).

## Headers

- `X-Monid-Agent-Model` string
- `X-Monid-Agent-Harness` string
- `X-Monid-Agent-Session-Id` string

## Response `200`

The signed download URL

- object
  - `url` string, required
  - `expiresAt` string, required

## Other responses

- `302`: Redirect to the signed URL (`redirect=true`)
- `401`: Unauthorized — missing or invalid credentials
- `403`: Forbidden — caller has no workspace or no access
- `404`: Resource or path not found
- `429`: Rate limited (errorCode `RATE_LIMITED`, message `Rate limited. Retry after Ns.`) — the `Retry-After` header carries whole seconds until the caller may retry; `RateLimit-Limit/-Remaining/-Reset` describe the binding limit as numbers only (also sent on allowed responses that matched a rule; responses that matched no rule, or an `unlimited` exemption, carry none of them). Applies to every authenticated `/v1` route (per API key / user / workspace); POST /v1/run additionally enforces per-provider/endpoint run limits.
- `500`: Internal server error

## Changes

- **2026-10-20** `631143e91790`: 8 info
  - added the new optional `header` request parameter `X-Monid-Agent-Harness`
  - added the new optional `header` request parameter `X-Monid-Agent-Model`
  - added the new optional `header` request parameter `X-Monid-Agent-Session-Id`
  - removed the `PROMO_REDEEM_DISABLED` enum value from the `errorCode` response property for the response status `401`
  - …4 more
- **2026-10-05** `b944bb23906c`: 8 warning, 1 info
  - added the new `PROMO_REDEEM_DISABLED` enum value to the `errorCode` response property for the response status `401`
  - added the new `PROMO_REDEEM_DISABLED` enum value to the `errorCode` response property for the response status `403`
  - added the new `PROMO_REDEEM_DISABLED` enum value to the `errorCode` response property for the response status `404`
  - added the new `PROMO_REDEEM_DISABLED` enum value to the `errorCode` response property for the response status `500`
  - …5 more
- **2026-09-25** `5abada71ceae`: 52 warning
  - added the new `IDENTITY_ALREADY_LINKED` enum value to the `errorCode` response property for the response status `401`
  - added the new `IDENTITY_ALREADY_LINKED` enum value to the `errorCode` response property for the response status `403`
  - added the new `IDENTITY_ALREADY_LINKED` enum value to the `errorCode` response property for the response status `404`
  - added the new `IDENTITY_ALREADY_LINKED` enum value to the `errorCode` response property for the response status `500`
  - …48 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/monid/apis/monid-api/changes/v1/resources/:resourceId/files/download-url/get.md)

---

[API](https://skmtc.dev/monid/apis/monid-api.md) · [All operations](https://skmtc.dev/monid/apis/monid-api/llms.txt) · [OpenAPI document](https://skmtc.dev/monid/apis/monid-api/revisions/79c4c3aaa5ff?raw)
