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.
Ask for a correction to a delivered report. Free — a revision corrects work you already paid for and draws no further balance. The rules are under Revisions.
| Field | Required | Rules |
|---|---|---|
topic | Yes | One of the values from /reports/revision-options |
notes | Yes | Trimmed and truncated at 2000 characters — anything longer is silently cut, not rejected. Read by the person making the correction, so name the structure and the facet |
curl -X POST "https://api.roofquery.com/api/v1/reports/orders/rq_ord_8f3a21c9/revisions" \
-H "Authorization: Bearer rq_live_sk_..." \
-H "Content-Type: application/json" \
-d '{"topic":"Roof Has Wrong Pitch","notes":"Front elevation reads 12/12, closer to 6/12."}'
201 Created. The updated order comes back alongside, so you don't need a second call:
{
"revision": {
"revisionId": "rq_rq_rev_2b91f4c07e13c07e13",
"topic": "Roof Has Wrong Pitch",
"notes": "Front elevation reads 12/12, closer to 6/12.",
"status": "open",
"requestedAt": "2026-08-12T17:20:03.000Z",
"completedAt": null
},
"order": {
"orderId": "rq_ord_8f3a21c9",
"status": "revisions_requested",
"files": [ "...still the previously delivered report" ],
"revisions": [ { "revisionId": "rq_rq_rev_2b91f4c07e13c07e13", "status": "open", "...": "" } ]
}
}
Every revision ever raised on one order, open and historical. The same array appears on
the order payload as revisions[] — this endpoint is for when that's all
you want.
curl -H "Authorization: Bearer rq_live_sk_..." \
"https://api.roofquery.com/api/v1/reports/orders/rq_ord_8f3a21c9/revisions"
{
"revisions": [
{
"revisionId": "rq_rq_rev_2b91f4c07e13c07e13",
"topic": "Roof Has Wrong Pitch",
"notes": "Front elevation reads 12/12, closer to 6/12.",
"status": "completed",
"requestedAt": "2026-08-12T17:20:03.000Z",
"completedAt": "2026-08-12T18:44:51.000Z"
}
]
}
The topics currently accepted. Fetch it rather than hardcoding the list — it's the same in sandbox and live, but it's ours to change.
curl -H "Authorization: Bearer rq_live_sk_..." \
"https://api.roofquery.com/api/v1/reports/revision-options"
{
"source": "upstream",
"topics": [
{ "value": "Roof Has Wrong Pitch", "label": "Roof Has Wrong Pitch" },
{ "value": "Missing Structures", "label": "Missing Structures" },
{ "value": "Wrong Structure", "label": "Wrong Structure" },
{ "value": "Measurements Are Off", "label": "Measurements Are Off" },
{ "value": "Other", "label": "Other" }
],
"rules": {
"orderStatusRequired": "completed",
"revisableStatuses": ["completed", "updated"],
"oneOpenRevisionPerOrder": true,
"cost": 0
}
}
Pass topics[].value as topic; label is for your
own picker. source is upstream, sandbox, or
fallback if the provider was briefly unreachable — the topic list is the
same either way, so it's diagnostic rather than something to branch on.
| Topic | Use it when |
|---|---|
Roof Has Wrong Pitch | One or more pitches are wrong. |
Missing Structures | A building on the property isn't in the report. |
Wrong Structure | The report includes something it shouldn't. |
Measurements Are Off | Areas or lengths don't match the property. |
Other | Anything else — explain it in notes. |