Get the PDF download URL of an invoice
Returns a temporary pre-signed URL to download the invoice PDF.
- URL: expires in five minutes and only allows GET.
- Waiting: a PDF is produced asynchronously, so this request waits for it (up to ten seconds) instead of handing you a polling loop to write. Bound the wait with Prefer: wait=N, or opt out with Prefer: wait=0.
- 202: only when the wait elapsed with the PDF still in flight. No body is returned; ask again after Retry-After.
- Drafts: a draft has no fiscal PDF and answers 400 INVOICE_NOT_ISSUED_NO_PDF immediately — that one never waits. Issue it, or render it with GET …/{invoice_id}/pdf/preview.
- Not registered with the AEAT: under VeriFactu the PDF carries the QR code of the invoice's registration. An invoice whose registration was rejected before reaching the AEAT, or that was voided without ever being registered, has no PDF and answers 400 INVOICE_NOT_REGISTERED_NO_PDF immediately. Its verifactu.error_message says why.
- Never modified: the PDF of an issued invoice is generated once — with its VeriFactu QR when it applies — and stays the document you delivered. Voiding the invoice or issuing a corrective against it does not change the PDF: read the invoice's status to know it.
Request
- Base URL: https://app.beel.es/api
- URL: https://app.beel.es/api/v1/companies/{company_id}/invoices/{invoice_id}/pdf
- Auth: HTTP bearer
Headers
RFC 7240 preference bounding how long this request may wait for a PDF that is still being generated: Prefer: wait=N, with N in seconds.
By default the request waits (up to the server cap) and answers 200 with the URL, so the 202 is the exception rather than the normal path. Use Prefer: wait=0 to opt out and get the old poll-only behaviour: an immediate 202 while the PDF is in flight.
A value above the cap is lowered to it, and the 202 then echoes what was actually applied in Preference-Applied: wait=<seconds> — so you never have to discover the cap by trial and error. A value that is not a non-negative integer is ignored altogether (RFC 7240: a preference that is not understood is not an error), and the request falls back to the default wait with no Preference-Applied header.
Response
Download URL generated successfully
Example response
{
"success": true,
"data": {
"download_url": "https://storage.example.com/beel-invoices/invoices/user-uuid/factura-uuid.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...",
"expires_in_seconds": 300,
"file_name": "factura_2025-001.pdf"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}Changes
No recorded changes to this operation across all 1 revision of this API.