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

# Digital Product Delivery

> Sell Stripe products and automatically deliver files after purchase

Sell digital products (ebooks, templates, audio, courses) with Stripe checkout while Sequenzy handles everything after the payment: file delivery, tagging, and follow-up sequences.

## How it works

1. **Connect Stripe** in Settings → Integrations. Sequenzy syncs your Stripe product catalog into Settings → Products.
2. **Attach a deliverable file** to a product. Upload the file to Sequenzy (PDF, ePub, ZIP, images, audio, video - up to 100MB) or link to a file hosted elsewhere.
3. **Sell with any Stripe checkout** - payment links, Stripe Checkout, or your own integration. No special setup is needed on the checkout side.
4. **The purchase event delivers the file.** When the buyer completes checkout, Sequenzy receives the Stripe webhook, matches the purchased products against your catalog, and attaches the file info to the `saas.purchase` event.

## Sending the file in a sequence

Create a sequence with the **Event received** trigger and the `saas.purchase` event. If you sell multiple products, use the **Only for product** picker to start the sequence for one specific product, or add property filters manually (for example `productIds equals prod_XXX`).

In the sequence email, reference the file with merge tags:

* `{{event.download.url}}` - the file URL for the first purchased product with a deliverable
* `{{event.download.name}}` - the file name (or product title when the file has no name)
* `{{event.downloads}}` - all deliverables when an order contains multiple products

A typical delivery email is a short thank-you message with a button whose link is `{{event.download.url}}`. For files up to 7MB, you can instead open the email step's settings, choose **From trigger**, set the URL to `{{event.download.url}}`, and set the filename to `{{event.download.name}}`. Sequenzy then attaches the purchased file separately for every enrollment. Keep larger files as download links for deliverability and message-size safety.

## Keeping products in sync

* The product catalog syncs automatically when you connect Stripe, and you can re-sync anytime from Settings → Products
* Products archived in Stripe stay in Sequenzy (so attached files are kept) and are marked as archived
* Attached files survive re-syncs - product names, prices, and images update without touching your delivery settings

## API, CLI, and MCP

Everything above is also available programmatically:

* **API** - [List Products](/api-reference/products/list), [Attach Delivery File](/api-reference/products/attach-delivery), [Create Upload URL](/api-reference/products/upload-url), [Sync Stripe Products](/api-reference/products/sync)
* **CLI** - `sequenzy products list`, `sequenzy products upsert my-ebook --title "The Ebook" --file ./ebook.pdf`, `sequenzy products attach-file prod_abc --file ./guide.pdf`, `sequenzy products sync` (see [CLI docs](/concepts/cli))
* **MCP** - `list_products`, `upsert_products`, `delete_product`, `attach_product_file` (with `url` or local `filePath`), `remove_product_file`, `sync_products` tools (see [MCP docs](/concepts/mcp))

The product-scoped delivery sequence can also be created programmatically: pass `propertyFilters` to [Create Sequence](/api-reference/sequences/create) (or the `create_sequence` MCP tool, or `sequenzy sequences create --property-filters-json ...`), for example `[{"path": "productIds", "operator": "equals", "value": "prod_XXX"}]`.

## Notes

* Uploaded files are stored under unguessable URLs, so links shared in email cannot be enumerated
* Buyers are created as subscribers automatically when the purchase webhook arrives, so delivery works even for brand-new customers
* Subscriptions work too: renewal payments (`invoice.paid`) carry the same download properties, which is useful for re-delivering access links
