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.
From no key to a delivered sandbox report in about a minute, without spending anything. The same calls then work live: only the key changes.
Keys are made in the dashboard under API keys. There are two kinds, and the prefix is the whole difference between them. The base URL, the endpoints and the request bodies are identical, and nothing in a request can switch a key to the other environment.
| Key | What an order does |
|---|---|
rq_test_sk_… | Runs a sandbox timeline: free, nothing is measured, a recorded real report is delivered, and your webhooks fire as they would live. |
rq_live_sk_… | A real order, measured by a technician and paid from your balance. |
One key covers every product. Send it as Authorization: Bearer <key> on every
call except the file routes, which take none.
Add the URL that should hear about orders in the dashboard under
Webhooks. One endpoint receives every status
change of every order, sandbox orders included, so you can build your handler against sandbox.
Each delivery is the same body as GET
/reports/orders/:id.
1. Check the key. env is test for a sandbox key.
curl -H "Authorization: Bearer rq_test_sk_..." \
"https://api.roofquery.com/api/v1/identity"
2. Order a report for the sandbox's happy_path address. The response is
201 with the order in processing.
curl -X POST "https://api.roofquery.com/api/v1/reports/orders" \
-H "Authorization: Bearer rq_test_sk_..." \
-H "Content-Type: application/json" \
-d '{
"country": "US",
"street": "6515 Turnbridge Pl",
"city": "Prospect",
"state": "KY",
"postalCode": "40059",
"latitude": 38.3526391,
"longitude": -85.6208045,
"scope": "primary_and_garage",
"esx": true
}'
3. Get the report. About 20 seconds later your endpoint receives a webhook with
"status": "completed", carrying the measurements and the file links. Or read the order:
curl -H "Authorization: Bearer rq_test_sk_..." \
"https://api.roofquery.com/api/v1/reports/orders/<orderId from step 2>"
totals and structures[] hold the measurements, and files[]
links the PDF, XML
and, because step 2 sent "esx": true, the ESX.
Leave esx out and your account's default decides. To go live, swap in an
rq_live_sk_ key and a real address. Nothing else changes.
- Sandbox: the other seven test addresses, including holds, cancellations and failed orders.
- Place an order: every field, and retrying safely with
Idempotency-Key. - Order lifecycle: every status your webhook handler will see.
- White labeling: your brand, or a contractor's, on the PDF.
- Errors: every code, and what to do about it.