---
title: "Get downloads for an order"
description: "What the buyer of an order can download right now: one row per file with its download url (null while a watermark is still being applied, or when access is revoked, expired or the download limit is reached), the watermar"
url: https://docs.filemonk.io/v2/api-reference/orders/get-downloads-for-an-order/
api: "API v2 reference"
method: GET
path: "/orders/{id}/downloads"
---

# Get downloads for an order

`GET https://app.filemonk.io/api/v2/external/orders/{id}/downloads`

What the buyer of an order can download right now: one row per file with its download url (null while a watermark is still being applied, or when access is revoked, expired or the download limit is reached), the watermark state and the download count. A watermarked file's url is a signed link that stops working at url_expires_at; a plain file's url is a redirect that does not expire and a link is its own address, so both have url_expires_at null.

## Path parameters

- `id` (string, required)

## Returns

- `data` (array of objects, required)
  - `file_id` (string, nullable, required): e.g. `66e2751c-9812-422c-864d-f8ce6a95c605`
  - `asset` (object, required)
    - `id` (string, nullable, required): e.g. `96fbe30b-c819-4cb8-9666-814c0c8853f1`
    - `name` (string, nullable, required): e.g. `Beginner's Guide.pdf`
    - `type` (string, nullable, required): e.g. `file`
    - `filename` (string, nullable, required): e.g. `Beginner's Guide.pdf`
    - `content_type` (string, nullable, required): e.g. `application/pdf`
    - `byte_size` (integer, nullable, required): e.g. `116711`
  - `url` (string, nullable, required): e.g. `https://files.filemonk.io/orders/5600000000001/guide.pdf?…`
  - `url_expires_at` (string, nullable, required): e.g. `2026-10-31T00:48:11Z`
  - `watermark` (object, required)
    - `enabled` (boolean, nullable, required): e.g. `true`
    - `status` (string, nullable, required): e.g. `ready`
  - `download_count` (integer, nullable, required): e.g. `0`

Rate limit: this call costs 1 point ([rate limits](https://docs.filemonk.io/v2/errors-and-rate-limits/)).

## Example request

```sh
curl "https://app.filemonk.io/api/v2/external/orders/3e84eb8d-e1d9-4e92-a4b2-a419c7f1122f/downloads" \
  -H "X-Auth-Token: $FILEMONK_API_KEY"
```

## 200

Success: the requested resource.

```json
{
  "data": [
    {
      "file_id": "66e2751c-9812-422c-864d-f8ce6a95c605",
      "asset": {
        "id": "96fbe30b-c819-4cb8-9666-814c0c8853f1",
        "name": "Beginner's Guide.pdf",
        "type": "file",
        "filename": "Beginner's Guide.pdf",
        "content_type": "application/pdf",
        "byte_size": 116711
      },
      "url": "https://files.filemonk.io/orders/5600000000001/guide.pdf?X-Amz-Expires=3600&X-Amz-Signature=3f6c…",
      "url_expires_at": "2026-10-31T00:48:11Z",
      "watermark": {
        "enabled": true,
        "status": "ready"
      },
      "download_count": 0
    }
  ]
}
```

## 401

Missing or invalid API key.

```json
{
  "errors": [
    "Invalid API key"
  ]
}
```

## 404

The resource does not exist for this shop, or the action path is not registered.

```json
{
  "errors": [
    "Order not found: c3d4e5f6-7a8b-4c9d-8e0f-1a2b3c4d5e6f"
  ]
}
```

## 422

The request failed validation, or sent a key the action does not take (`code: &quot;unknown_parameters&quot;` with `unknown` and `accepted`). Nothing was saved.

```json
{
  "errors": [
    "access.download_limit_count must be an integer of at least 0"
  ],
  "field_errors": {
    "access.download_limit_count": [
      "must be an integer of at least 0"
    ]
  }
}
```

## 429

Rate limited. Cost-weighted per API key, shared with API v1: a read costs 1 point, a write 2, 40 points per fixed 60-second window. Every response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` (Unix time the window ends); a 429 adds `Retry-After` (seconds), `retry_after`, `retryable: true` and a `next_step` in the body. A 429 did nothing: wait `retry_after` seconds, then send the same request again. The budget is per key, so every tool or script using the key shares it; prefer one list call with `per_page` over many single reads.

```json
{
  "errors": [
    "You have exceeded the rate limit of 40 points per 60 seconds. Read requests cost 1 point(s) and write requests cost 2 point(s). Please retry after 12 second(s)."
  ],
  "code": "rate_limited",
  "retry_after": 12,
  "error": "Rate limit exceeded",
  "message": "You have exceeded the rate limit of 40 points per 60 seconds. Read requests cost 1 point(s) and write requests cost 2 point(s). Please retry after 12 second(s)."
}
```

