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.
# 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.zipYour 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
Integrate RoofAngle into your platform
Order roof reports and pull ESX and XML files through the API. From $17 per report.
Request API access