Skip to main content
GET
/
decisions
/
search
Search Decisions
curl --request GET \
  --url https://api.shovels.ai/v2/decisions/search \
  --header 'X-API-Key: <api-key>'
{
  "items": [
    {
      "id": "<string>",
      "address_id": "<string>",
      "city_id": "<string>",
      "county_id": "<string>",
      "jurisdiction_id": "<string>",
      "street": "<string>",
      "city": "<string>",
      "state": "<string>",
      "latitude": 123,
      "longitude": 123,
      "title": "<string>",
      "decision_date": "2023-12-25",
      "description": "<string>",
      "source_url": "<string>",
      "asset_class": "<string>",
      "category": "<string>",
      "subcategory": "<string>",
      "property_type": "<string>",
      "why_it_matters": "<string>",
      "applicant_name": "<string>",
      "owner_name": "<string>",
      "representative_name": "<string>",
      "developer_name": "<string>",
      "zoning_previous": "<string>",
      "zoning_new": "<string>",
      "allowed_uses": "<string>",
      "project_value": 123,
      "lot_size": 123
    }
  ],
  "size": 123,
  "next_cursor": "<string>",
  "total_count": {
    "value": 1
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.shovels.ai/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

X-API-Key
string
header
required

Query Parameters

cursor
string | null

Cursor for pagination

size
integer
default:50
Required range: 1 <= x <= 100
include_count
boolean
default:false

When true and on the first page (no cursor), include total_count in the response. The count is exact up to 10,000; above that, relation is 'gte'.

decision_from
string<date>
required

Return decisions with decision_date on or after this date. Date format: YYYY-MM-DD.

decision_to
string<date>
required

Return decisions with decision_date on or before this date. Date format: YYYY-MM-DD.

geo_id
string
required

Filter decisions by geographic area. Accepts:

  • US state code (e.g. CA)
  • Shovels geolocation ID for an address, city, county, or jurisdiction (e.g. a4xysKbZwqg)

ZIP and ZIP+4 inputs are not supported — the upstream rezone source emits no ZIP information, so decisions cannot be filtered by ZIP.

Resolve addresses and places to geolocation IDs via:

Free-form text such as "123 Main St" is not accepted.

asset_class
string[] | null

Filter by one or more asset classes (e.g. Residential, Commercial, Mixed-Use).

category
string[] | null

Filter by one or more decision categories (e.g. Rezoning, Variance).

subcategory
string[] | null

Filter by one or more decision subcategories.

property_type
string[] | null

Filter by one or more property types.

min_project_value
integer | null

Minimum project value in cents (inclusive).

Required range: x >= 0
max_project_value
integer | null

Maximum project value in cents (inclusive).

Required range: x >= 0
decision_q
string | null

Full-text query against decision title and description, tokenized with PostgreSQL plainto_tsquery('english', ...).

Maximum string length: 100

Response

A list of decisions.

Schema for paginated decisions details response.

items
DecisionsRead · object[]
required

The list of items returned in the response following given criteria.

size
integer
required

The number of items returned in the response.

next_cursor
string | null
required

The cursor for retrieving the next page of results.

total_count
TotalCount · object

Total result count (capped at 10,000). Present on first-page responses when include_count=true. null if the count query timed out.