> ## 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.

# List Digital Products

> Retrieve a paginated list of all digital products in your store.

## Overview

A **digital product** represents the link between a Shopify product (or variant) and one or more
assets in Filemonk. When a customer purchases the Shopify product, they receive access to the
linked assets for download.

## Query parameters

<ParamField query="shopify_product_id" type="integer">
  Filter by Shopify product ID (numeric). Returns all digital products linked to this product,
  including any variant-level links.
</ParamField>

<ParamField query="page" type="integer" default="1">
  Page number for pagination.
</ParamField>

<ParamField query="per_page" type="integer" default="25">
  Number of digital products per page. Minimum: 1, maximum: 100.
</ParamField>

## Response

<ResponseField name="digital_products" type="array" required>
  List of digital product objects.

  <Expandable title="Digital product properties">
    <ResponseField name="id" type="string" required>
      Unique digital product identifier (UUID).
    </ResponseField>

    <ResponseField name="shopify_product_id" type="integer | null">
      The numeric Shopify product ID.
    </ResponseField>

    <ResponseField name="shopify_variant_id" type="integer | null">
      The numeric Shopify variant ID. `null` if linked at the product level (applies to all variants).
    </ResponseField>

    <ResponseField name="assets" type="array" required>
      The assets attached to this digital product.
    </ResponseField>

    <ResponseField name="upsert_always" type="boolean" required>
      When `true`, a new copy of this digital product's assets is created for each order.
    </ResponseField>

    <ResponseField name="custom_message" type="string | null">
      Custom message shown to customers on the download page.
    </ResponseField>

    <ResponseField name="preorder_enabled" type="boolean" required>
      Whether this is a preorder product.
    </ResponseField>

    <ResponseField name="preorder_launch_date" type="string | null">
      ISO 8601 timestamp of when preorder content becomes available.
    </ResponseField>

    <ResponseField name="preorder_subject" type="string | null">
      Email subject for the preorder notification.
    </ResponseField>

    <ResponseField name="preorder_heading" type="string | null">
      Heading shown on the download page while in preorder.
    </ResponseField>

    <ResponseField name="preorder_description" type="string | null">
      Description shown on the download page while in preorder.
    </ResponseField>

    <ResponseField name="created_at" type="string" required>
      ISO 8601 timestamp of when the digital product was created.
    </ResponseField>

    <ResponseField name="updated_at" type="string" required>
      ISO 8601 timestamp of when the digital product was last updated.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object" required>
  Pagination metadata.

  <Expandable title="Pagination properties">
    <ResponseField name="current_page" type="integer" required>
      Current page number.
    </ResponseField>

    <ResponseField name="per_page" type="integer" required>
      Number of items per page.
    </ResponseField>

    <ResponseField name="total_count" type="integer" required>
      Total number of digital products matching the filters.
    </ResponseField>

    <ResponseField name="total_pages" type="integer" required>
      Total number of pages.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET 'https://app.filemonk.io/api/v1/external/digital_products?per_page=10' \
    -H 'X-Auth-Token: fm_api_key_your_key_here'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    'https://app.filemonk.io/api/v1/external/digital_products?per_page=10',
    { headers: { 'X-Auth-Token': 'fm_api_key_your_key_here' } }
  );
  const data = await response.json();
  ```

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

  response = requests.get(
      'https://app.filemonk.io/api/v1/external/digital_products',
      headers={'X-Auth-Token': 'fm_api_key_your_key_here'},
      params={'per_page': 10}
  )
  data = response.json()
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "digital_products": [
      {
        "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "shopify_product_id": 8847261098265,
        "shopify_variant_id": null,
        "assets": [
          {
            "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
            "type": "external",
            "name": "Photoshop Brushes Pack",
            "filename": "brushes-pack-v2.zip",
            "external_url": "https://cdn.example.com/files/brushes-pack-v2.zip",
            "content_type": "application/zip",
            "byte_size": 0,
            "created_at": "2026-03-01T14:30:00Z"
          }
        ],
        "upsert_always": false,
        "custom_message": "Thanks for your purchase!",
        "preorder_enabled": false,
        "preorder_launch_date": null,
        "preorder_subject": null,
        "preorder_heading": null,
        "preorder_description": null,
        "created_at": "2026-03-05T10:00:00Z",
        "updated_at": "2026-03-05T10:00:00Z"
      }
    ],
    "pagination": {
      "current_page": 1,
      "per_page": 10,
      "total_count": 5,
      "total_pages": 1
    }
  }
  ```

  ```json 401 theme={null}
  {
    "error": "Invalid API key"
  }
  ```
</ResponseExample>
