The RoofAngle Roof Measurement API

Order roof reports and pull import-ready ESX, XML, and PDF files straight from your website, CRM, or platform. Authenticate with a client id and secret, place an order, and download the files when they are ready.

Build roof measurements into your product

Authenticate

Exchange your client id and secret for a 1-hour bearer token.

Price & order

Quote a price, then create an order for any address programmatically.

Get webhooks

Receive signed events the moment an order is created, paid, or delivered.

Pull the files

Download the finished ESX, XML, or PDF, one file or a ZIP of all.

Two versions: hosted checkout or platform billing

v1 — Stripe Checkout

Best when you want RoofAngle to collect payment. POST /v1/orders returns a checkoutUrl; redirect the customer, and the order is created once payment clears. Includes order lookup by Stripe session id and bulk checkout for up to 50 orders.

v4 — platform integrations

Best for platforms like Guidewire or Zapier that handle their own billing. POST /v4/orders creates the order directly, with no Stripe Checkout step. Services, files, statuses, and webhooks are identical to v1.

From token to files in three calls

Authenticate, create an order, then download the delivered files. Your $BASE_URL and credentials are provided when your integration is approved.

order-a-roof-report.sh
# 1. Exchange client credentials for an access token (expires in 1 hour)
curl -X POST $BASE_URL/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{ "clientId": "ra_client_XXXX", "clientSecret": "YOUR_SECRET" }'
# -> { "accessToken": "eyJ..." }

# 2. Create an order. v1 returns a Stripe Checkout URL to redirect the customer.
curl -X POST $BASE_URL/v1/orders \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "customerEmail": "john@example.com", "address": "123 Main St, Austin, TX", "serviceId": "REPLACE_WITH_SERVICE_ID", "propertyType": "Residential", "successUrl": "https://yourapp.com/success", "cancelUrl": "https://yourapp.com/cancel" }'
# -> { "checkoutUrl": "https://checkout.stripe.com/..." }

# 3. When the order.delivered webhook fires, pull the files (ESX / XML / PDF)
curl $BASE_URL/v1/orders/ORDER_ID/files/download-all \
  -H "Authorization: Bearer $ACCESS_TOKEN" -o reports.zip

Your serviceId comes from GET /v1/services, which also returns your per-tenant pricing and delivery SLA.

The endpoints you'll use

Every request is auto-scoped to your integration client, so you only ever see your own data.

Auth

POST /auth/token

Services

GET /services
POST /services/calculate-price

Orders

POST /orders · /orders/bulk
GET /orders · /orders/{id}

Files

GET /orders/{id}/files
/files/download-all (ZIP)

Signed webhooks

Configure a webhook URL and RoofAngle posts order.created, order.payment_completed (v1), order.delivered (with a 24-hour download link), and order.cancelled. Each request is signed with an HMAC-SHA256 signature over the timestamp and body so you can verify it, and failed deliveries retry with backoff.

Getting access

Email support@roofangle.com to request access. Once your integration is approved we provide your base URL, an integration client id and secret, and the full Postman collection. You and your team can also view and track API orders at app.roofangle.com. Prefer no code? Use the Zapier integration.

Roof Measurement API FAQs

Yes. RoofAngle offers a REST Integration API so you can order roof measurement reports and retrieve ESX, XML, and PDF files directly from your own website, CRM, or platform, without anyone logging into RoofAngle. You authenticate with a client id and secret to get a bearer token, then call the orders and files endpoints.
v1 runs order creation through Stripe Checkout: POST /v1/orders returns a checkout URL you redirect the customer to, and the order is created after payment. v4 is for platform integrations (such as Guidewire or Zapier) where your platform handles payment, so POST /v4/orders does not use Stripe Checkout. The services, files, status strings, and webhooks are otherwise identical.
POST your clientId and clientSecret to /v1/auth/token (or /v4/auth/token) to receive a JWT access token that lasts one hour. Send it as a Bearer token on every other request. All requests are automatically scoped to your integration client, so you never see another tenant's data.
Yes. RoofAngle posts order.created, order.payment_completed (v1), order.delivered, and order.cancelled events to your configured webhook URL. The order.delivered event includes a 24-hour download link. Each request is signed with an HMAC-SHA256 signature you can verify, and failed deliveries retry with backoff.
Contact support@roofangle.com to request access. Once your integration is approved we provide your base URL, an integration client id and secret, and the full Postman collection. Prefer no code? Our Zapier integration covers create-order and status flows with no development.

Integrate RoofAngle into your platform

Order roof reports and pull ESX and XML files through the API. From $17 per report.

Request API access