Base URL: https://api.roofquery.com. Authenticate with Authorization: Bearer <your key> — except the four file routes, which take no key.
Copies this whole page as Markdown, so you can paste it into an assistant and have it write the integration. Nothing secret goes on the clipboard — your keys aren't included.
The white-labeled report, rendered at the moment you request it. Nothing is stored and nothing is cached, so changing your branding re-skins every report you've already ordered on its next download. No API key required — see Sharing a report.
| Query | Effect | Max |
|---|---|---|
?download=1 | Forces a save dialog. Omit it and the PDF is served inline, so you can iframe it | — |
?brand= | A brand profile id. The report renders in that customer's brand, logo included | — |
?companyName= | Name on the header band, footer and cover attribution | 80 |
?address= | First line of the contact block, under the name | 160 |
?publicPhone= | Contact block. A 10-digit number is formatted (502) 555-0100; anything else prints as sent | 32 |
?publicEmail= | Contact block | 160 |
?brandColor= | Hex — URL-encode the # as %23 | — |
?brandTextColor= | Text on the header band | — |
Three layers, most specific wins. Your account defaults are set in the
portal under Branding. A
?brand= profile replaces them wholesale for that download. The text and
colour params below override either, field by field, for that one file. Anything you
don't pass falls through to the next layer down.
Override the contact block as a unit. The header renders the company
name with the address, phone and email stacked underneath it, so passing
companyName alone puts a different company's name above your
phone number — a report that tells the reader to call someone other than who it claims
to be from. If you're rebranding a download, send all four.
A colour that isn't a hex string returns 400 validation rather than
rendering something strange — #RGB through #RRGGBBAA are all
accepted. Text over the length in the table is refused the same way rather than
silently cut, because these render in a fixed-height header. There is no logo
param: a logo is bytes, not something that fits in a URL. To put a customer's
logo on a download, upload it once to a
brand profile and name the
profile with ?brand=.
curl "https://api.roofquery.com/api/v1/reports/orders/rq_ord_8f3a21c9/pdf?download=1" \
-o report.pdf
Returns the PDF bytes:
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="RoofQuery_6515_Turnbridge_Pl_Prospect_KY_40059_USA_rq_ord_8f3a21c9.pdf"
Content-Length: 1370151
Cache-Control: no-store
Before the report is delivered:
HTTP/1.1 409 Conflict
{
"error": "not_ready",
"error_description": "Report has not completed yet — no PDF available.",
"status": "in-progress"
}
A profile is the durable way to brand a customer's reports; the query params are for a one-off. Both exist so you never touch your account settings to brand someone else's download. See White labeling.