> ## Documentation Index
> Fetch the complete documentation index at: https://docs.filemonk.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Order Downloads

> Retrieve all downloadable files for an order with pre-computed status flags.

Returns a flat list of every file associated with an order. Each item includes boolean flags that tell you exactly whether the file can be downloaded right now and why it might be unavailable. You do not need to implement any expiration, limit, or access-revocation logic on your end.

## Path parameters

<ParamField path="id" type="string" required>
  The order's unique identifier (UUID).
</ParamField>

## Response

<ResponseField name="order_id" type="string" required>
  The order's unique identifier.
</ResponseField>

<ResponseField name="order_name" type="string" required>
  The order name/number, e.g. `#1042`.
</ResponseField>

<ResponseField name="downloads" type="array" required>
  Flat list of download objects. Each object represents one file or licence key.

  <Expandable title="Download properties">
    <ResponseField name="id" type="string" required>
      Unique identifier for this download entry (UUID).
    </ResponseField>

    <ResponseField name="product_name" type="string" required>
      Name of the product this file belongs to.
    </ResponseField>

    <ResponseField name="file_name" type="string" required>
      Name of the file, e.g. `artwork-collection.zip`. For licence keys this is `Licence Key`.
    </ResponseField>

    <ResponseField name="file_type" type="string" required>
      MIME type of the file, e.g. `application/pdf`. For licence keys this is `licence/key`.
    </ResponseField>

    <ResponseField name="file_size_bytes" type="integer" required>
      File size in bytes. Returns `0` for external links and licence keys.
    </ResponseField>

    <ResponseField name="download_url" type="string | null" required>
      A signed download URL for internal files or the external URL for external files. `null` when `downloadable` is `false`.
    </ResponseField>

    <ResponseField name="download_count" type="integer" required>
      Number of times this file has been downloaded for this order.
    </ResponseField>

    <ResponseField name="download_limit" type="integer | null" required>
      Maximum downloads allowed per file as configured in your store settings. `null` means unlimited.
    </ResponseField>

    <ResponseField name="download_limit_reached" type="boolean" required>
      `true` if `download_count` has reached or exceeded `download_limit`.
    </ResponseField>

    <ResponseField name="expires_at" type="string | null" required>
      ISO 8601 timestamp of when the download expires, based on the order creation date plus your store's download limit days setting. `null` if no expiration is configured.
    </ResponseField>

    <ResponseField name="download_expired" type="boolean" required>
      `true` if the current time is past `expires_at`.
    </ResponseField>

    <ResponseField name="access_revoked" type="boolean" required>
      `true` if access to this file has been revoked, e.g. due to a refund or cancellation.
    </ResponseField>

    <ResponseField name="is_preorder" type="boolean" required>
      `true` if this file belongs to a preorder product.
    </ResponseField>

    <ResponseField name="preorder_available_at" type="string | null" required>
      ISO 8601 timestamp of the preorder release date. `null` for non-preorder items.
    </ResponseField>

    <ResponseField name="preorder_released" type="boolean" required>
      `true` if the preorder has been released (or if the item is not a preorder). `false` if the release date is in the future.
    </ResponseField>

    <ResponseField name="is_licence_key" type="boolean" required>
      `true` if this entry represents a licence key instead of a downloadable file.
    </ResponseField>

    <ResponseField name="licence_key" type="string | null" required>
      The licence key value if this is a licence key type and one has been assigned. `null` otherwise.
    </ResponseField>

    <ResponseField name="downloadable" type="boolean" required>
      Master flag. `true` only when **all** of the following are met: download has not expired, download limit has not been reached, access has not been revoked, and the preorder has been released (if applicable).
    </ResponseField>
  </Expandable>
</ResponseField>

## Understanding the `downloadable` flag

The `downloadable` field is a convenience flag that combines all the individual status checks:

| Condition        | Field                    | `downloadable` is `false` when...         |
| ---------------- | ------------------------ | ----------------------------------------- |
| Time expiration  | `download_expired`       | The download window has passed            |
| Count limit      | `download_limit_reached` | The customer has used all their downloads |
| Access revoked   | `access_revoked`         | The order was refunded or cancelled       |
| Preorder pending | `preorder_released`      | The preorder hasn't been released yet     |

<Tip>
  If you only need to know whether a file is available, check the `downloadable` field. Use the individual flags when you need to display a specific reason to the user.
</Tip>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET 'https://app.filemonk.io/api/v1/external/orders/a1b2c3d4-e5f6-7890-abcd-ef1234567890/downloads' \
    -H 'X-Auth-Token: fm_api_key_your_key_here'
  ```

  ```javascript Node.js theme={null}
  const orderId = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
  const response = await fetch(
    `https://app.filemonk.io/api/v1/external/orders/${orderId}/downloads`,
    { headers: { 'X-Auth-Token': 'fm_api_key_your_key_here' } }
  );
  const data = await response.json();

  const availableDownloads = data.downloads.filter(d => d.downloadable);
  ```

  ```python Python theme={null}
  import requests

  order_id = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
  response = requests.get(
      f'https://app.filemonk.io/api/v1/external/orders/{order_id}/downloads',
      headers={'X-Auth-Token': 'fm_api_key_your_key_here'}
  )
  data = response.json()

  available = [d for d in data['downloads'] if d['downloadable']]
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "order_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "order_name": "#1042",
    "downloads": [
      {
        "id": "d1e2f3a4-b5c6-7890-def0-123456789abc",
        "product_name": "Digital Art Pack",
        "file_name": "artwork-collection.zip",
        "file_type": "application/zip",
        "file_size_bytes": 52428800,
        "download_url": "https://app.filemonk.io/rails/active_storage/blobs/redirect/signed-token/artwork-collection.zip",
        "download_count": 2,
        "download_limit": 5,
        "download_limit_reached": false,
        "expires_at": "2026-04-01T14:30:00Z",
        "download_expired": false,
        "access_revoked": false,
        "is_preorder": false,
        "preorder_available_at": null,
        "preorder_released": true,
        "is_licence_key": false,
        "licence_key": null,
        "downloadable": true
      },
      {
        "id": "e2f3a4b5-c6d7-8901-ef01-23456789abcd",
        "product_name": "Digital Art Pack",
        "file_name": "bonus-brushes.zip",
        "file_type": "application/zip",
        "file_size_bytes": 10485760,
        "download_url": null,
        "download_count": 5,
        "download_limit": 5,
        "download_limit_reached": true,
        "expires_at": "2026-04-01T14:30:00Z",
        "download_expired": false,
        "access_revoked": false,
        "is_preorder": false,
        "preorder_available_at": null,
        "preorder_released": true,
        "is_licence_key": false,
        "licence_key": null,
        "downloadable": false
      },
      {
        "id": "f3a4b5c6-d7e8-9012-f012-3456789abcde",
        "product_name": "Pro Software License",
        "file_name": "Licence Key",
        "file_type": "licence/key",
        "file_size_bytes": 0,
        "download_url": null,
        "download_count": 0,
        "download_limit": null,
        "download_limit_reached": false,
        "expires_at": null,
        "download_expired": false,
        "access_revoked": false,
        "is_preorder": false,
        "preorder_available_at": null,
        "preorder_released": true,
        "is_licence_key": true,
        "licence_key": "ABCD-1234-EFGH-5678",
        "downloadable": true
      }
    ]
  }
  ```

  ```json 404 theme={null}
  {
    "error": "Order not found"
  }
  ```
</ResponseExample>
