Skip to main content
Base URL: https://api.acrelens.com/v1 All endpoints except GET /v1/health require an Authorization: Bearer al_(live|test)_... header. See authentication.

Reports

POST /v1/analyze

Analyze a single property. Returns 202 Accepted immediately and runs the analysis asynchronously. Request body Headers Response — 202 Accepted
Response — 202 Accepted (cache hit) If this customer analyzed the same (address, state, mode) within the last 30 days and that report completed successfully, the existing report is returned instead of running a new analysis — no charge, no quota burn. Pass force_refresh: true to bypass.
Errors

GET /v1/reports

List reports scoped to the calling customer, newest first. Free — no charge, no quota burn. Designed for polling integrations (Zapier “New Report Completed” trigger, batch syncs, dashboards). Query params Response — 200 OK
  • overall_score is null until the report completes; failed_reason is null unless status is failed.
  • source is the channel the report was created through (e.g. api, dashboard).
  • next_cursor is the created_at of the oldest row returned when has_more is true; null otherwise. To walk further back, pass cursor=<next_cursor> on the next call.
  • To poll for new reports, store the created_at of the latest item you’ve processed and pass it as since.
Errors

GET /v1/reports/{id}

Fetch a report. Returns the basic envelope while processing, the full body once completed. Response while processing — 200 OK
status will be one of authorized, processing, or failed while not yet complete. Response when completed — 200 OK
The details object carries a per-topic breakdown — score, summary, detail bullets, and (for buildability) regulatory extras like RV living status, composting toilet status, and permit difficulty. The considerations array surfaces actionable verification items the buyer should follow up on before closing. The estimated_costs object provides per-category cost ranges in USD, plus total_low and total_high aggregates. Response when failed — 200 OK
Sub-score keys vary by mode — see analysis modes. Errors

POST /v1/batch

Submit 2–50 properties as a single request. See the batch guide. Request body Response — 202 Accepted

Account

GET /v1/balance

Current balance, free reports remaining, and the last 10 transactions. Response — 200 OK
Transaction types: TOPUP, DEDUCTION, REFUND, CREDIT, ADJUSTMENT.

GET /v1/usage

Period-bounded usage stats, quota, and rate. Response — 200 OK

POST /v1/billing/portal

Returns a Stripe Customer Portal URL where your end users (or you) can manage cards, view receipts, and update billing details. Request body (optional)
Response — 200 OK
Errors

Reference data

GET /v1/states/{code}

State-level land intelligence — the same regulatory, climate, and land-use data the reports use to ground their analysis. Path params Query params Response — 200 OK
Cached at the edge: Cache-Control: public, max-age=3600. Errors

GET /v1/health

Liveness probe. Unauthenticated and not rate-limited. Response — 200 OK
Returns 503 with internal_error if the database or Redis is down.

Common headers

Every response includes: POST /v1/analyze additionally sets: On 429 rate_limit_exceeded, also: If the rate-limiter’s backing store (Redis) is unavailable, the request still succeeds (fail-open) but the x-ratelimit-* headers are omitted and replaced with: See rate limits for retry behavior.

Admin endpoints

The /v1/prompt-versions endpoints (CRUD on AI prompt versions) exist but are intended for administrators only. Reach out at support@acrelens.com if you need access.