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.
Order a storm report. Returns 201 with the whole report in the body, about two
seconds after you send it. Retrying with the same Idempotency-Key returns the same
report with 200 and never charges twice.
curl -X POST "https://api.roofquery.com/api/v1/storm/orders" \
-H "Authorization: Bearer rq_live_sk_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c2e0a-storm-001" \
-d '{
"street": "3208 Riviera Dr", "city": "Norman", "state": "OK",
"postalCode": "73072", "country": "US",
"latitude": 35.182884, "longitude": -97.458908,
"dateOfLoss": "2025-05-25",
"claim": "CLM-20419",
"insuredName": "Jordan Smith",
"notes": "Inspection booked for Monday."
}'
| Field | Type | Notes |
|---|---|---|
street, city, state, postalCode, country | string | Required. The same address rules as roof orders; country is US or CA. |
latitude, longitude | number | Required. Decimal degrees. |
dateOfLoss | YYYY-MM-DD | Optional. Highlights that date and enables the Date of Loss PDF. Can't be in the future. |
claim | string ≤ 64 | Optional. Printed on the report. |
insuredName | string ≤ 120 | Optional. Printed on the report. |
notes | string ≤ 450 | Optional. Printed on the five writing lines of the Notes box on every PDF; line breaks are kept. The lines left over stay blank to write on. |
reportName | string ≤ 300 | Optional. Your own label. |
There is no scope or reportType: a storm report covers the property.
Ordering needs $3 available even when the result turns out free; otherwise the answer is
402 INSUFFICIENT_CREDITS and nothing is looked up. If weather data doesn't answer in
time the answer is 503 service_unavailable, with no order and no charge.
The report as stored. Pass any of dateOfLoss, claimNumber,
insuredName and notes to read it with different details; an empty value
clears one. The weather data is the same on every read.
curl -H "Authorization: Bearer rq_live_sk_..." \
"https://api.roofquery.com/api/v1/storm/orders/rq_ord_7f3c2a91d04be615?dateOfLoss=2024-11-02"
GET /api/v1/reports/orders/:orderId answers with the same JSON for a storm report id,
so one lookup works for every order. Storm reports have no revisions: change the details on read,
or order again for fresh data.