---
title: "Start a report's roof analysis"
method: POST
path: "/public/building-reports/{token}/engine/{path}"
tags: ["Building reports"]
---

# Start a report's roof analysis

`POST /public/building-reports/{token}/engine/{path}`

## Request

- Base URL: `https://api.baseray.ai/v1`
- URL: `https://api.baseray.ai/v1/public/building-reports/{token}/engine/{path}`
- Auth: none required

Starts the roof analysis of the report's building (`buildings/{id}/solar/analysis`), as a workspace that opened it starts it, without a credit; follow it with `GET …/engine/buildings/{id}/solar/analysis/stream`. A report includes one run a workspace would be charged a credit for: a second start answers `409 report_analysis_used` without reaching the provider. A start that joins a run already in flight, a run no billable provider answers, or an engine that fails does not use it. Limited per report: 240 requests a minute with one token.

## Path parameters

- `token` string, required
- `path` string, required

## Response `200`

The engine's answer as a workspace reads it: `{building_id, running, started, provider, stream_url, …}`.

## Other responses

- `403`: Not about the report's building (`route_forbidden`).
- `404`: No report has this token (`not_found`).
- `409`: The report is not paid (`report_not_paid`), or it already ran its roof analysis (`report_analysis_used`).
- `410`: The report's access has ended (`report_access_expired`).
- `429`: Too many reads with this report's token in a minute (`rate_limited`); retry after `Retry-After` seconds.

---

[API](https://skmtc.dev/baseray/apis/baseray-api.md) · [All operations](https://skmtc.dev/baseray/apis/baseray-api/llms.txt) · [OpenAPI document](https://skmtc.dev/baseray/apis/baseray-api/revisions/2dc2808717f7?raw)
