Why Does My PDFMonkey Download URL Return a 403 Error?
Last updated March 23, 2026
If you try to access a document’s download URL and receive a 403 Forbidden error, the URL has expired.
Why this happens
Download URLs are temporary signed links valid for 1 hour after they are generated. Once that time passes, the URL stops working and returns a 403 error. This is expected behavior: the URL is designed to be short-lived for security.
Every time you fetch a document’s details (via the API, an integration, or the Dashboard), you receive a fresh download URL with a new 1-hour window. The generated file itself remains available on PDFMonkey’s servers until it is deleted; only the signed URL expires.
How to fix it
Fetch the document again to get a fresh download URL. You do not need to regenerate the document.
Via the API
Send a GET request to retrieve the document. The response includes a new download_url:
curl https://api.pdfmonkey.io/api/v1/documents/YOUR_DOCUMENT_ID \
-H "Authorization: Bearer YOUR_SECRET_API_KEY"
See the Documents API reference for the full response format.
Via an integration
Use a “Get Document” or “Find Document” action in Zapier, Make, n8n, or another platform to refresh the URL.
Via the Dashboard
Open the document in the Dashboard. The download link shown on the document detail page is always current.
Via the Ruby SDK
Call document.reload! to fetch the latest attributes, including a fresh download_url:
document = PdfMonkey::Document.find("YOUR_DOCUMENT_ID")
document.reload!
document.download_url # => fresh URL valid for 1 hour
See the Ruby SDK documentation for setup instructions.
How to avoid this
- Download immediately after generation. When you receive a webhook notification or poll for completion, download the file right away rather than storing the URL for later.
- Store the file, not the URL. If you need the generated file later, save it to your own storage (S3, Google Drive, etc.) instead of relying on the temporary PDFMonkey download URL.
- Use share links for permanent access. If you need a stable URL to share in emails or embed in web pages, enable Share Links (available on Pro+ and Premium plans). Unlike download URLs, share links never expire.
- Re-fetch when needed. If none of the above apply and you need the file later, fetch the document details again to get a fresh URL. It takes a single GET request.
Frequently asked questions
Does the 403 error mean my document was deleted?
Not necessarily. A 403 means the signed URL expired, not that the file is gone. Fetch the document again via the API; if you get a new download_url, the file is still available. If the document has been deleted (via TTL or manually), the API returns a 404 instead.
How long exactly is a download URL valid?
Exactly 1 hour from the moment the URL is generated (when you fetch the document details). The clock does not start from when the document was created or when generation completed.
Does this apply to image output too?
Yes. Download URLs work the same way regardless of output format (PDF, PNG, JPG, or WebP). They all expire after 1 hour.
Can I extend the expiration time?
No. The 1-hour duration is fixed and cannot be configured. If you need longer-lived links, use Share Links or save the file to your own storage.
Related pages
- The Download URL — how temporary signed URLs work and when they expire
- The Download URL Is Empty — fix a
nulldownload URL (different issue from 403) - Share Links — permanent public URLs that never expire
- Webhooks — get notified the moment a document is ready to download
- Retention and Automatic Deletion — how long files are stored before cleanup
- Document Statuses and Lifecycle — understand when
download_urlbecomes available - API Documents reference — full endpoint and field documentation
Frequently asked questions
- Why does the PDFMonkey download URL give a 403 error?
- Download URLs expire after 1 hour. Fetch the document again via the API, an integration, or the Ruby SDK to get a fresh URL with a new 1-hour window.
- How do I get a new download URL after it expires?
- Fetch the document again via the API (GET /api/v1/documents/:id), through an integration like Zapier or Make, or in the Dashboard. Each fetch returns a fresh URL valid for 1 hour. You do not need to regenerate the document.
- Can I get a permanent download link that never expires?
- Yes. Enable Share Links on Pro+ or Premium plans to get a permanent public URL for each document. Unlike download URLs, share links do not expire.