---
title: "List download logs"
description: "Every download across the shop, newest first, paginated (page, per_page up to 200). order_id (Filemonk id, Shopify order gid or id, or #name) and asset_id narrow to one order or file; from / to are ISO 8601 bounds on whe"
url: https://docs.filemonk.io/v2/api-reference/download-logs/list-download-logs/
api: "API v2 reference"
method: GET
path: "/download_logs"
---

# List download logs

`GET https://app.filemonk.io/api/v2/external/download_logs`

Every download across the shop, newest first, paginated (page, per_page up to 200). order_id (Filemonk id, Shopify order gid or id, or #name) and asset_id narrow to one order or file; from / to are ISO 8601 bounds on when the download happened.

## Query parameters

- `page` (integer): 1-based page number.
- `per_page` (integer): Rows per page, max 200.
- `order_id` (string)
- `asset_id` (string)
- `from` (string)
- `to` (string)

## Returns

- `data` (array of objects, required)
  - `id` (string, nullable, required): e.g. `a401ec79-a062-4ab0-96e6-a588931583cc`
  - `downloaded_at` (string, nullable, required): e.g. `2026-10-12T19:50:17Z`
  - `order` (object, required)
    - `id` (string, nullable, required): e.g. `71e9bb0e-1e22-4513-af29-60aceeeb3755`
    - `name` (string, nullable, required): e.g. `#1058`
  - `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`
  - `digital_product_id` (string, nullable, required): e.g. `7ea3c05d-6f29-42b6-b24f-43260caeaa32`
  - `file` (object, required)
    - `filename` (string, nullable, required): e.g. `Watercolour Basics Workbook.pdf`
    - `content_type` (string, nullable, required): e.g. `application/pdf`
    - `byte_size` (integer, nullable, required): e.g. `116711`
  - `licence_tag` (any, required)
  - `client` (object, required)
    - `ip_address` (string, nullable, required): e.g. `203.0.113.7`
    - `country_code` (any, required)
    - `user_agent` (string, nullable, required): e.g. `Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) Ap…`
    - `referrer` (string, nullable, required): e.g. `https://app.filemonk.io/orders/71e9bb0e-1e22-4513-af29-60…`
  - `cdn_provider` (string, nullable, required): e.g. `cloudflare`
- `meta` (object, required): Paging of a list (`page`, `per_page` query params).
  - `total_count` (integer, required): Rows across all pages.
  - `page` (integer, required): 1-based page number.
  - `per_page` (integer, required): Rows per page, max 200.
  - `total_pages` (integer, required): e.g. `1`

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

## Examples

### List download logs

```sh
curl "https://app.filemonk.io/api/v2/external/download_logs" \
  -H "X-Auth-Token: $FILEMONK_API_KEY"
```

### List download logs filtered by order_id and asset_id

```sh
curl "https://app.filemonk.io/api/v2/external/download_logs?order_id=c3d4e5f6-7a8b-4c9d-8e0f-1a2b3c4d5e6f&asset_id=9f1c2a7e-3b4d-4e5f-8a6b-7c8d9e0f1a2b" \
  -H "X-Auth-Token: $FILEMONK_API_KEY"
```

## 200

Success: one page of rows.

```json
{
  "data": [
    {
      "id": "a401ec79-a062-4ab0-96e6-a588931583cc",
      "downloaded_at": "2026-10-12T19:50:17Z",
      "order": {
        "id": "71e9bb0e-1e22-4513-af29-60aceeeb3755",
        "name": "#1058"
      },
      "asset": {
        "id": "96fbe30b-c819-4cb8-9666-814c0c8853f1",
        "name": "Beginner's Guide.pdf",
        "type": "file"
      },
      "digital_product_id": "7ea3c05d-6f29-42b6-b24f-43260caeaa32",
      "file": {
        "filename": "Watercolour Basics Workbook.pdf",
        "content_type": "application/pdf",
        "byte_size": 116711
      },
      "licence_tag": null,
      "client": {
        "ip_address": "203.0.113.7",
        "country_code": null,
        "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1",
        "referrer": "https://app.filemonk.io/orders/71e9bb0e-1e22-4513-af29-60aceeeb3755?view_as_merchant=true"
      },
      "cdn_provider": "cloudflare"
    }
  ],
  "meta": {
    "total_count": 18,
    "page": 1,
    "per_page": 50,
    "total_pages": 1
  }
}
```

## 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)."
}
```

