Skip to content

Create a digital product

POST/digital_products

Costs 2 rate-limit points · Rate limits

Make a Shopify product or one of its variants a digital product, as the Products page's Add does: give shopify_product_id (whole product) or shopify_variant_id (one variant; add shopify_product_id too unless Filemonk already knows the variant), the files to deliver as files: [{id, folder}], and optionally delivery.message, delivery.attach_to_every_order, preorder {enabled, launch_at, email {subject, heading, description}} (enabling a pre-order needs launch_at and delivery.message) and update_email {subject, body}.

preorder.enabled: true needs preorder.launch_at at least two hours ahead and a delivery.message (422 naming the missing field otherwise). 404 when Shopify has no such product or variant in this store. 409 when the product or variant already is a digital product (PATCH it instead). Buyers of existing orders are not emailed; use POST /digital_products/:id/notify_buyers.

Also searched asadd digital productattach files to a productmake this product digitalset up delivery for a variantnew digital product

Request body

  • shopify_product_idstring
    Example: gid://shopify/Product/9642107044135
  • shopify_variant_idany
  • filesarray of objects
    Show 2 child attributesHide child attributes
    • idstring
      Example: e2b7727e-45ad-42b7-b842-cc4615205b10
    • folderstring
      Example: Extras
  • deliveryobject
    Show 2 child attributesHide child attributes
    • messagestring
      Example: Thanks for your order! Your files are below.
    • attach_to_every_orderboolean
      Example: false
  • preorderany
  • update_emailany

Errors

401

Missing or invalid API key.

404

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

409

The request conflicts with the current state (an order Shopify is not ready to fulfil, a digital product that already exists). Nothing was changed; read the message, don't retry blindly.

422

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

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.

Every error has the same shape: see Errors.

POST/digital_products
curl -X POST "https://app.filemonk.io/api/v2/external/digital_products" \
  -H "X-Auth-Token: $FILEMONK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "shopify_product_id": "gid://shopify/Product/9642107044135",
    "files": [
      {
        "id": "e2b7727e-45ad-42b7-b842-cc4615205b10",
        "folder": "Extras"
      }
    ],
    "delivery": {
      "message": "Thanks for your order! Your files are below.",
      "attach_to_every_order": false
    }
  }'
Response
{
  "id": "7ea3c05d-6f29-42b6-b24f-43260caeaa32",
  "scope": "product",
  "shopify_product_id": "gid://shopify/Product/9642107044135",
  "shopify_variant_id": null,
  "title": "Watercolour Course",
  "variant_title": null,
  "sku": null,
  "exists_on_shopify": null,
  "files": [
    {
      "id": "7ea42f2a-6dbe-459c-b8a4-27b0eb823e52",
      "name": "price-list.csv",
      "type": "file",
      "byte_size": 100634,
      "folder": null
    },
    {
      "id": "96fbe30b-c819-4cb8-9666-814c0c8853f1",
      "name": "Beginner's Guide.pdf",
      "type": "file",
      "byte_size": 116711,
      "folder": null
    }
  ],
  "folders": [],
  "delivery": {
    "message": null,
    "attach_to_every_order": false
  },
  "preorder": {
    "enabled": false,
    "launch_at": null,
    "released": true,
    "email": {
      "subject": null,
      "heading": null,
      "description": null
    }
  },
  "update_email": {
    "subject": null,
    "body": null
  },
  "orders_count": 46,
  "created_at": "2025-05-31T13:37:52Z",
  "updated_at": "2025-05-31T13:37:52Z"
}