Digital File Sales & Secure Token Downloader for Odoo 19 documentation
A guide to selling digital files from Odoo: making a product digital, the personal download link, the email and download page, managing links and reading the download log.
Documents version 1.0.0Updated Oct 23, 2026
Start here
In plain words: You sell a PDF, a template pack, a course or any other file. The customer pays or the order is confirmed, and Odoo emails a personal download link on its own. The link stops working after the number of days or downloads you set, and every download is logged.
Tip: Nothing to build: you attach files to a product, tick Digital product, and sell it like any other product.
What you get
| Feature | What it does |
|---|---|
| Digital product | Tick the box on any product and attach one or several files. |
| Personal secret link | One link per digital order line, long and random, impossible to guess. |
| Email on confirmation | Sent in the customer's language, Arabic included, with the files listed. |
| Time limit | The link expires after N days (default 7, set per product if you wish). |
| Download counter | The link stops after N downloads (default 5). 0 means unlimited. |
| Private files | The files have no public address: every download goes through the link. |
| Control | Extend, create a new link, revoke or resend by email; a log of every download. |
| Cancel safe | Cancelling the order revokes its links. |
Requirements
| Item | Details |
|---|---|
| Odoo | 19.0 (Community or Enterprise) |
| Apps needed | Sales (sale) and Discuss mail (mail) |
| An outgoing mail server, so the customer receives the link | |
| Web address | web.base.url set to your public address (https recommended) |
| License | OPL-1 (Odoo Proprietary License v1.0) |
Install
- Unzip the package. Inside is
taqnix_digital_downloads.zip; unzip it to get the foldertaqnix_digital_downloads. - Copy the folder into one of the
addons_pathfolders of your Odoo server and restart Odoo. - Log in as an administrator, activate Developer mode, open Apps and press Update Apps List.
- Remove the “Apps” filter, search Digital File Sales and press Install.
# or from the command line ./odoo-bin -c odoo.conf -d YOUR_DATABASE -i taqnix_digital_downloads --stop-after-init
Settings
In plain words: Open Settings → Digital Downloads. These are the defaults of the company; a product can override them.
| Setting | What it does |
|---|---|
| Email the links on confirmation | When a sales order with a digital product is confirmed, the customer receives the email. Switch it off to send links by hand. |
| Link valid for | Days after confirmation (default 7). |
| Downloads allowed | Each file download counts once (default 5). 0 means unlimited. |
Make a product digital
In plain words: Open the product, tick Digital product next to Sales and Purchase, then open the new Digital Files tab.
| Field | Notes |
|---|---|
| Label | What the customer sees, for example “Handbook (PDF)”. It can be translated. |
| File | Upload the file. Its size is shown to the customer. |
| Link valid for (days) | 0 uses the company default; any other number is used for this product. |
| Downloads allowed | 0 uses the company default; any other number is used for this product. |
Tip: Use a Service product type if the customer should not get a delivery order. A product of type Goods also works, but then Odoo creates a delivery for it.
When the order is confirmed
In plain words: Confirm a quotation as usual. Odoo creates one link for each digital line, emails it to the customer and leaves a note in the chatter. A Downloads button appears on the order.
| Situation | What happens |
|---|---|
| Order has two digital products | Two links, in one email. |
| Product with no file attached | No link; a note in the chatter tells you which product. |
| Customer without an email address | Links are created, nothing is sent; a note tells you. Copy the link from the Downloads button. |
| Confirm twice or press Send again | No duplicate link is created. |
| Order cancelled | Its links are revoked. Confirm it again and a new link is created. |
| Order is paid online (eCommerce) | Odoo confirms the order when the payment is received, so the link goes out then. |
The email
In plain words: The email is sent in the language of the customer. It lists the files, the expiry date and the number of downloads, and has one button.
Tip: Use Send download links on the order to email the active links again, for example when the customer lost the message. Revoked and expired links are not sent.
What the customer sees
In plain words: The button opens a plain page with the files and a Download button for each. It follows the customer's language.
| Link state | What the customer sees |
|---|---|
| Active | The files, the date until which the link is valid, the downloads left. |
| Expired | A message to contact the shop for a new link. |
| Limit reached | The same, with the limit explained. |
| Revoked or wrong address | A message that the link is not valid. |
In plain words: Opening the page does not use up a download; only pressing Download for a file does. Two files in one order use two downloads.
Manage the links
In plain words: Sales → Orders → Digital Downloads lists every link with its customer, expiry, downloads used and state.
| Button | What it does | Who |
|---|---|---|
| Email to customer | Emails the link again. | Sales |
| Extend | Adds another validity period and another allowance of downloads. The address stays the same. | Sales managers |
| New link | A new secret address, a fresh expiry and a zero counter. The old address stops working. | Sales managers |
| Revoke | Stops the link at once. | Sales managers |
Tip: Use New link if a customer says the link leaked. The old address is dead as soon as you press it.
The download log
In plain words: Every download, and every refused attempt on a known link, is logged with the date, the file, the result, the IP address and the browser. Find it in Sales → Reporting → Download Log or on the link.
How it protects your files
| Measure | Detail |
|---|---|
| Secret address | A random token of 43 characters. It cannot be guessed and nothing else identifies a download. |
| No public address for the file | The files are stored privately. The normal Odoo file addresses do not serve them to the public. |
| Counter that cannot be beaten | The counter is increased in a single database step, so many simultaneous clicks can never go over the limit. |
| Only the files of that product | A link only serves the files of its own product. |
| Search engines and caches | The pages ask not to be indexed, cached or passed on in the referrer. |
| Revoke and cancel | A revoked link or one of a cancelled order stops at once. |
Important: A download link is only as private as the email that carries it. Anyone who has the link can download until it expires. Serve your Odoo over HTTPS and keep the validity short.
Limits
| Limit | Detail |
|---|---|
| One link per order line | The quantity of the line is not used: a line of 3 still gives one link. |
| Files belong to the product | Product variants share the files of their product. |
| Big files | Files are served by Odoo. The size you can upload through the browser is limited by your server settings, and a reverse proxy may limit downloads. For very large files use a fast server. |
| Several databases | With several databases the link needs the database name. Set dbfilter so that the address identifies the database. |
| Customer portal | The links come by email and from the Downloads button for your team; they are not shown in the portal. |
| Mail delivery | If your server cannot send email, the link is still created and can be copied. |
For developers
In plain words: Skip this chapter if you only use the module.
| Item | Details |
|---|---|
| Models | taqnix.digital.file (the files of a product), taqnix.download.token (a link), taqnix.download.log (the log). |
| Product fields | tx_is_digital, tx_file_ids, tx_link_days, tx_max_downloads. |
| Order | sale.order._tx_issue_links(send=True) creates the missing links; _tx_send_links(tokens) sends the email. |
| Routes | /taqnix/download/<token> (page) and /taqnix/download/<token>/<file_id> (the file). |
# issue the links of an order from your own code
order._tx_issue_links(send=False)
for token in order.tx_token_ids:
print(token.download_url, token.state, token.remaining)
# count a download atomically; False when the link cannot be used
if token._claim_download():
...Troubleshooting
| Problem | What to do |
|---|---|
| No link was created | Check that the product has Digital product ticked and at least one file; the chatter says when a file is missing. |
| The customer got no email | Check the customer has an email address and your outgoing mail server works (Settings → Technical → Emails). |
| The link opens “not valid” | The address is incomplete, or the link was replaced with New link. |
| “Link expired” | Press Extend on the link, then Email to customer. |
| The link points to localhost | Set web.base.url to your public address and uncheck web.base.url.freeze if needed. |
| The email is in the wrong language | The language comes from the customer's contact form. |
Updating and removing
Replace the folder with the new version, restart Odoo and run -u taqnix_digital_downloads. Links, files and logs are kept. Before you uninstall, note that the links, files and logs are deleted with the module.
Support
Installation help and bug fixes are included for 6 months, with lifetime updates. Contact us through the marketplace page where you bought the module or write to support@taqnix.com with your Odoo version and a screenshot.