Documentation

PDF

GET /api/v1/reports/orders/:id/pdf: the white-labeled report in the brand it was ordered with, rendered on each request. No API key required.

API reference

Base URL: https://api.roofquery.com. Authenticate with Authorization: Bearer <your key> — except the file routes (report and storm report files), 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.

GET /api/v1/reports/orders/:id/pdf

The white-labeled report, rendered at the moment you request it, in the brand the order was placed with: the contractor named as brand when ordering, or your account's own branding. Nothing is cached, so editing that brand updates the report on its next download. No API key required — see Sharing a report. A storm report id takes its own parameters: see Storm report PDFs.

Parameters

All optional, all query parameters. Only download applies to every order: the branding parameters apply only to orders placed before 22 October 2026, which have no brand of their own. On later orders they're ignored.

FieldRequiredDescription
downloadNo1 forces a save dialog. Without it the PDF is served inline, so you can iframe it
brandNoOrders placed before 22 October 2026: a brand profile id. The report renders in that customer's brand, logo included
companyNameNoName on the header band, footer and cover attribution. Up to 80 characters
addressNoFirst line of the contact block, under the name. Up to 160 characters
publicPhoneNoContact block. A 10-digit number is formatted (502) 555-0100; anything else prints as sent. Up to 32 characters
publicEmailNoContact block. Up to 160 characters
brandColorNoHex, #RGB through #RRGGBBAA. URL-encode the # as %23
brandTextColorNoHex. Text on the header band

Which brand wins, on an order from before 22 October 2026. Most specific first: these params, then a brand profile, then your account defaults. Later orders always print the brand they were ordered with. See White labeling.

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.

There is no logo param: a logo is bytes, not something that fits in a URL. To put a contractor's logo on their reports, upload it once to a brand profile and name the profile as brand when you order.

Request
curl "https://api.roofquery.com/api/v1/reports/orders/rq_ord_8f3a21c9d4e07b16/pdf?download=1" \
  -o report.pdf
Response

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_8f3a21c9d4e07b16.pdf"
Content-Length: 1370151
Cache-Control: no-store
Errors

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 colour that isn't a hex string returns 400 validation rather than rendering something strange, and text over its length is refused the same way rather than silently cut, because these render in a fixed-height header (checked on every order, even where the params are then ignored). An unknown order, or an unknown brand on an older order, returns 404 not_found. Every code is under Errors.