API docs
API reference

API overview

Base URL, versioning, and the conventions every endpoint follows.

Base URL

All endpoints are served from:

https://api.setback.io

Versioning

The version is in the URL path. The current version is v1:

https://api.setback.io/v1/documents

Requests

  • Send query parameters for filters and pagination.
  • Send JSON bodies with Content-Type: application/json.
  • Name counties without the word "County", for example county=Franklin. The state defaults to WA.

Responses

Every response is JSON. Each endpoint returns its own named fields, not a shared envelope. For example, a list of documents looks like this:

{
  "documents": [],
  "total": 0,
  "limit": 100,
  "offset": 0
}

Errors always have the same shape. See errors.

{
  "error": "Not Found",
  "message": "no restrictions found for parcel"
}

Access

A few endpoints are public. Anyone can call them with no account:

  • GET /health
  • GET /v1/coverage/check, GET /v1/coverage/summary, POST /v1/coverage/notify
  • GET /v1/search/parcels, GET /v1/search/parcels/facets — open with no plan, for a visitor or an account, for the covered counties on coverage
  • GET /v1/tiles/parcels/{z}/{x}/{y} — every covered parcel, with no plan or county gate
  • GET /v1/properties/{apn}/report — open with no plan, for a visitor or an account, for the covered counties on coverage; it returns a preview: three rules in full and the rest locked, plus the risk flags and document list
  • GET /v1/reports/{token}, POST /v1/auth/register, POST /v1/auth/login

The parcel report, past its preview, needs Base or Pro. Every other endpoint — the data endpoints (documents, parcels/{apn}/restrictions, hoas, search/restrictions, search/properties), batch screening, and share links — needs Pro (ADR-0019). Send your session token as a bearer token:

Authorization: Bearer <token>

API keys are coming soon and are not available yet; use a session token for now.

A request without the plan it needs gets one of these:

StatusMeaning
401No valid session token. Sign in and try again.
403A valid session, but the account's plan does not cover this endpoint. The body carries {"error":"plan_required","plan":"<base|pro>"}.
429Too many requests from this address. Wait for the Retry-After header, in seconds, then try again.

Pagination

List and search endpoints take these query parameters:

ParameterDefaultDescription
limit100Items per page, at most 100
offset0Items to skip

Health check

GET /health

Returns 200 OK when the API is up.

The machine-readable description of every endpoint is at openapi.json.

On this page