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.
Errors
Every error is JSON with an error code and an
error_description. Branch on the code — the description is written for a
person and may change.
{
"error": "validation",
"error_description": "scope is required and must be one of: primary_only, primary_and_garage, all_structures"
}
Match codes case-sensitively, and expect both casings. Lower-case codes
come from the request layer; upper-case ones are raised deeper, in ordering and
revisions. validation and VALIDATION are two distinct codes
that both mean "a field is missing or malformed" — a check for one will not catch the
other.
Any endpoint
Code
HTTP
Meaning
unauthorized
401
Missing, invalid, or revoked key
validation
400
A field is missing or malformed
not_found
404
No such order on this account. Also returned for an order belonging to someone else, and for a beta endpoint that is not enabled on this account
server_error
500
Something went wrong on our end. Retry
Placing an order
Code
HTTP
Meaning
VALIDATION
400
Address or coordinates missing once the request layer has handed off
INSUFFICIENT_CREDITS
402
Available balance won't cover the report (and its ESX, if the order includes one)
BRAND_NOT_FOUND
400
brand isn't one of this account's brand profiles (a typo, or another account's id). Nothing was placed
ESX_NOT_SUPPORTED
400
"esx": true on a report type that has no ESX (Rapid Squares). Nothing was placed; leave esx out or send false
BILLING_SETUP_REQUIRED
402
No card or balance on the account yet
BRAND_NOT_FOUND
400
brand isn't one of this account's brand profiles (a typo, or another account's id). Nothing was placed or charged
PRODUCT_NOT_ENABLED
403
A product that isn't turned on for this account. Nothing was charged
ORDER_IN_PROGRESS
409
An order with this Idempotency-Key is still being placed. Retry in a few seconds
ENV_MISMATCH
400
The key's environment and the order's don't agree. Should be unreachable
BILLING_NOT_CONFIGURED
503
Billing isn't available on our side. Not your account — retry or contact support
ORDER_FAILED
502
The order was refused at placement. Not about the address — a property that can't be measured is only ever discovered on review and arrives later as a cancelled webhook. This is something our end; nothing was charged, and it's worth reporting. Also returned when retrying an Idempotency-Key whose first attempt failed: use a new key
Storm reports
Code
HTTP
Meaning
validation
400
A field is missing or malformed (a date of loss in the future, an unknown template)
needs_date_of_loss
400
The Date of Loss PDF was asked for without a date. Pass dateOfLoss
INSUFFICIENT_CREDITS
402
Less than $5 available. Nothing was looked up or charged
BILLING_SETUP_REQUIRED
402
Add a card and top up first
NOT_REVISABLE
400
Storm reports aren't revised: read them with new details, or order again
service_unavailable
503
Weather data didn't answer in time. No order was created and nothing was charged; retry
Adding ESX to an order
Code
HTTP
Meaning
INSUFFICIENT_CREDITS
402
Available balance won't cover the ESX. Nothing was charged
BILLING_SETUP_REQUIRED
402
No card or balance on the account yet
not_found
404
No such order on this account
NOT_UPGRADABLE
409
The order was cancelled, so there's no report to add ESX to