Skip to content
DevMarket
Odoo ModulesWordPress PluginsWordPress ThemesShopify ThemesApp TemplatesScripts & UtilitiesBlogSell on DevMarket

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.
Confirm the order → the customer gets a personal link → a private download page. You see every link and every download.
Confirm the order → the customer gets a personal link → a private download page. You see every link and every download.
Tip: Nothing to build: you attach files to a product, tick Digital product, and sell it like any other product.

What you get

FeatureWhat it does
Digital productTick the box on any product and attach one or several files.
Personal secret linkOne link per digital order line, long and random, impossible to guess.
Email on confirmationSent in the customer's language, Arabic included, with the files listed.
Time limitThe link expires after N days (default 7, set per product if you wish).
Download counterThe link stops after N downloads (default 5). 0 means unlimited.
Private filesThe files have no public address: every download goes through the link.
ControlExtend, create a new link, revoke or resend by email; a log of every download.
Cancel safeCancelling the order revokes its links.

Requirements

ItemDetails
Odoo19.0 (Community or Enterprise)
Apps neededSales (sale) and Discuss mail (mail)
EmailAn outgoing mail server, so the customer receives the link
Web addressweb.base.url set to your public address (https recommended)
LicenseOPL-1 (Odoo Proprietary License v1.0)

Install

  1. Unzip the package. Inside is taqnix_digital_downloads.zip; unzip it to get the folder taqnix_digital_downloads.
  2. Copy the folder into one of the addons_path folders of your Odoo server and restart Odoo.
  3. Log in as an administrator, activate Developer mode, open Apps and press Update Apps List.
  4. 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.
Email on confirmation, validity in days and downloads allowed.
Email on confirmation, validity in days and downloads allowed.
SettingWhat it does
Email the links on confirmationWhen a sales order with a digital product is confirmed, the customer receives the email. Switch it off to send links by hand.
Link valid forDays after confirmation (default 7).
Downloads allowedEach 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.
The Digital product checkbox on the product form.
The Digital product checkbox on the product form.
Add one line per file: a label the customer sees, and the file.
Add one line per file: a label the customer sees, and the file.
FieldNotes
LabelWhat the customer sees, for example “Handbook (PDF)”. It can be translated.
FileUpload 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 allowed0 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.
A quotation with a digital product.
A quotation with a digital product.
After Confirm: the Downloads button, the Send download links button and the note in the chatter.
After Confirm: the Downloads button, the Send download links button and the note in the chatter.
SituationWhat happens
Order has two digital productsTwo links, in one email.
Product with no file attachedNo link; a note in the chatter tells you which product.
Customer without an email addressLinks are created, nothing is sent; a note tells you. Copy the link from the Downloads button.
Confirm twice or press Send againNo duplicate link is created.
Order cancelledIts 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.
The email in English.
The email in English.
The same email for an Arabic-speaking customer, right to left.
The same email for an Arabic-speaking customer, right to left.
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.
The download page.
The download page.
In Arabic, right to left.
In Arabic, right to left.
Link stateWhat the customer sees
ActiveThe files, the date until which the link is valid, the downloads left.
ExpiredA message to contact the shop for a new link.
Limit reachedThe same, with the limit explained.
Revoked or wrong addressA message that the link is not valid.
An expired link.
An expired link.
A link that reached its limit.
A link that reached its limit.
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.

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.
The log shows Downloaded, Link expired, Limit reached and Revoked.
The log shows Downloaded, Link expired, Limit reached and Revoked.

How it protects your files

MeasureDetail
Secret addressA random token of 43 characters. It cannot be guessed and nothing else identifies a download.
No public address for the fileThe files are stored privately. The normal Odoo file addresses do not serve them to the public.
Counter that cannot be beatenThe counter is increased in a single database step, so many simultaneous clicks can never go over the limit.
Only the files of that productA link only serves the files of its own product.
Search engines and cachesThe pages ask not to be indexed, cached or passed on in the referrer.
Revoke and cancelA 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

LimitDetail
One link per order lineThe quantity of the line is not used: a line of 3 still gives one link.
Files belong to the productProduct variants share the files of their product.
Big filesFiles 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 databasesWith several databases the link needs the database name. Set dbfilter so that the address identifies the database.
Customer portalThe links come by email and from the Downloads button for your team; they are not shown in the portal.
Mail deliveryIf 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.
ItemDetails
Modelstaqnix.digital.file (the files of a product), taqnix.download.token (a link), taqnix.download.log (the log).
Product fieldstx_is_digital, tx_file_ids, tx_link_days, tx_max_downloads.
Ordersale.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

ProblemWhat to do
No link was createdCheck that the product has Digital product ticked and at least one file; the chatter says when a file is missing.
The customer got no emailCheck 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 localhostSet web.base.url to your public address and uncheck web.base.url.freeze if needed.
The email is in the wrong languageThe 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.