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
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.
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_scoreisnulluntil the report completes;failed_reasonisnullunlessstatusisfailed.sourceis the channel the report was created through (e.g.api,dashboard).next_cursoris thecreated_atof the oldest row returned whenhas_moreistrue;nullotherwise. To walk further back, passcursor=<next_cursor>on the next call.- To poll for new reports, store the
created_atof the latest item you’ve processed and pass it assince.
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
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
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
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)
200 OK
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
Cache-Control: public, max-age=3600.
Errors
GET /v1/health
Liveness probe. Unauthenticated and not rate-limited.
Response — 200 OK
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.