Testing a roof report integration in sandbox before you spend

Sandbox keys run scripted order timelines against fixed addresses, with real webhooks, real XML and real PDFs. What each scenario exercises and how to test revisions and failures.

Getting startedMeasured reports Last updated Markdown

The sandbox is not a mock. Every test address delivers a real roof, recorded from a real property and run through the same parser and PDF renderer a live order uses. What is scripted is the timing, so you can watch a complete order lifecycle in seconds instead of hours. The reference is the sandbox scenarios endpoint.

How is a scenario chosen?

By the address you order. With a sandbox key, matching a published test address exactly, or by coordinates within about 110 metres, runs that scenario's timeline. Any address not on the list runs the cancelled timeline. There is no address that turns a sandbox order into a real one, and no header or body field that forces a scenario. A sandbox request and a live request are the same request; only the key differs.

The list is published in-band, so your code can discover it without leaving the API:

curl -H "Authorization: Bearer rq_test_sk_..." \
  "https://api.roofquery.com/api/v1/reports/sandbox/scenarios"

What do the scenarios cover?

ScenarioWhat happensWhat it tests
Happy pathprocessing, in-progress, completed over about 20 seconds. A residential roof with files.The normal flow, file downloads, parsing
Happy path, commercialSame timeline on a recorded flat roof.Parapet walls, a commercial PDF and XML
Payment failedThe order call itself fails. No order row, no webhook.Your handling of a rejected order call
CancelledAny unlisted address. Accepted, then ended without delivery, with a reason and a credit refund.The unmeasurable-property path

When do webhooks arrive?

About five seconds after each transition, held back on purpose so the HTTP response to the call that caused a change always arrives before the webhook announcing it. Code that stores the order id from the response and then looks it up when the webhook lands will never see the webhook first. Live orders follow the same rule.

Can I test revisions?

Yes, on any sandbox order that reaches completed. Open a revision and you get revisions_requested immediately and revision_completed about fifteen seconds later, the same two webhooks a live revision sends. The previously delivered files stay downloadable throughout. See the revisions reference for the rules.

Can I see the files without ordering?

Yes. The Sandbox page in the dashboard lists every scenario with its PDF, XML and ESX. If you are writing a parser, pull the XML from there first; it is the same document a live order delivers.

Keep the sandbox key in your staging environment after launch. Sandbox orders never draw balance, so every deploy can be smoke-tested end to end without spending anything.

Next: order your first report, then read the order lifecycle.

Frequently asked questions

Is the RoofQuery sandbox free?

Yes. Sandbox orders never draw balance, and there is no limit on how many you place while building.

Are sandbox reports real roofs?

Yes. Each test address delivers a roof recorded from a real property, through the same parser and PDF renderer a live order uses. Only the timing is scripted.

Can a sandbox key place a live order by mistake?

No. Sandbox and live keys are strictly separated. No address and no field turns a sandbox order into a real one.

Try it on a real roof

Create an account, generate a sandbox key, and order against the test addresses. Real webhooks, real XML, real PDFs, nothing charged.