Common recipes
Step-by-step API v2 recipes: troubleshoot a missing delivery, resend a download email, revoke access, change download limits, count orders and licence keys, and edit customer-facing texts.
Last updated
Paths are relative to https://app.filemonk.io/api/v2/external, and every call needs your key in the X-Auth-Token header. Remember that # is written %23 in a URL, so order #1042 is /orders/%231042.
Why didn’t my customer get their file?
Section titled “Why didn’t my customer get their file?”-
Run the troubleshooter
GET /orders/:id/troubleshootchecks Shopify, the stored order, the product’s files, the order conditions, access, cancellation and whether a download email went out. It ends with adiagnosisthat names the request that fixes each finding.Terminal window curl 'https://app.filemonk.io/api/v2/external/orders/%231042/troubleshoot' \-H 'X-Auth-Token: fm_api_key_your_key_here' -
Look at the emails
GET /emails?order_id=<order>lists the emails for the order. Read each email’sstatus:bounced,rejectedorcomplainedmeans the address failed. No row at all means no email was sent. -
Check the files and the downloads
GET /orders/:id/downloadslists the files the buyer can get.GET /download_logs?order_id=<order>shows whether they downloaded them anyway. -
Resend if you need to
POST /orders/:id/send_emailsends the download email again, optionally to another address withto. It really emails the buyer, so do it once you are sure.
Resend a download email
Section titled “Resend a download email”curl -X POST 'https://app.filemonk.io/api/v2/external/orders/%231042/send_email' \ -H 'X-Auth-Token: fm_api_key_your_key_here' \ -H 'Content-Type: application/json' \ -d '{"to": "buyer@example.com"}'Leave out to to send it to the address on the order. For many orders at once, use POST /orders/send_emails.
Set up download emails
Section titled “Set up download emails”GET /settingsand checkemail.enabled.GET /digital_productsand check each product’sfiles_count. A product with no files delivers nothing.- Turn emails on with
PATCH /settingsand{"email": {"enabled": true}}. - Send yourself a sample with
POST /settings/test_email.
Give a buyer more downloads
Section titled “Give a buyer more downloads”POST /orders/:id/reset_downloads sets the order’s download counts back to zero. To change the limits for every order, see Change the download limit.
Revoke or restore an order’s access
Section titled “Revoke or restore an order’s access”There is no separate revoke action. Access is state, so you set it with a PATCH:
curl -X PATCH 'https://app.filemonk.io/api/v2/external/orders/%231042' \ -H 'X-Auth-Token: fm_api_key_your_key_here' \ -H 'Content-Type: application/json' \ -d '{"access": {"revoked": true}}'Send {"access": {"revoked": false}} to restore it.
Change the download limit
Section titled “Change the download limit”curl -X PATCH 'https://app.filemonk.io/api/v2/external/settings' \ -H 'X-Auth-Token: fm_api_key_your_key_here' \ -H 'Content-Type: application/json' \ -d '{"download_limits": {"per_file_count": 3, "days": 30}}'per_file_count is how many times each file can be downloaded, and days is how many days after the order the files stay available. null on either means unlimited. show only decides whether the download page displays the limits to the buyer; it does not turn them on or off.
Change a customer-facing text
Section titled “Change a customer-facing text”- Read the texts for a language:
GET /settings/texts?locale=de. - Change the one you want. Fields you leave out are untouched:
sent with{"locale": "de","texts": { "download_page": { "texts": { "thanks": "Danke für deinen Einkauf!" } } }}
PATCH /settings/texts.
The heading or intro line of the download page is download_page.texts.thanks. Email wording is under email.* (subject, body). Read the tree first and use the key whose current text matches what you want to change.
How many orders do I have, and which is the latest?
Section titled “How many orders do I have, and which is the latest?”curl 'https://app.filemonk.io/api/v2/external/orders?per_page=1' \ -H 'X-Auth-Token: fm_api_key_your_key_here'Read meta.total_count for the count; the one record in data is the newest. The list is newest first by ordered_at, when the buyer ordered. Use sort=created_at desc to order by when Filemonk recorded it. See Pagination and sorting.
How many licence keys are left?
Section titled “How many licence keys are left?”GET /licence_tags and read totals.pending. That number is shop-wide and filters do not change it. For one tag, read that tag’s licences.pending. total includes keys already assigned or used, so it is not the number left.
Give an order a licence key
Section titled “Give an order a licence key”POST /orders/:id/licences/assign assigns the keys the order is still owed. To give it one specific key, PUT /orders/:id/licences/:licence_id. To take one back, DELETE the same path (this one previews first).
Check a licence key
Section titled “Check a licence key”POST /licences/check tells you whether a key is valid and where it went; GET /licences/lookup finds a key by its value.
Connect an AI assistant
Section titled “Connect an AI assistant”See AI connectors (MCP).
Thanks for letting us know.
Still stuck? Ask Quinn or chat with support