curl --request GET \
--url https://api.shovels.ai/v2/properties \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.shovels.ai/v2/properties"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)HttpResponse<String> response = Unirest.get("https://api.shovels.ai/v2/properties")
.header("X-API-Key", "<api-key>")
.asString();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shovels.ai/v2/properties"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}require 'uri'
require 'net/http'
url = URI("https://api.shovels.ai/v2/properties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.shovels.ai/v2/properties",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"items": [
{
"id": "<string>",
"street_no": "<string>",
"street": "<string>",
"city": "<string>",
"city_id": "<string>",
"zip_code": "<string>",
"zip_code_ext": "<string>",
"county": "<string>",
"county_id": "<string>",
"state": "<string>",
"lat": 123,
"long": 123,
"permit_count": 0,
"untagged_permit_count": 0,
"total_job_value": 0,
"contractor_count": 0,
"tags": [],
"tag_status_pairs": [],
"statuses": [],
"tag_tally": {},
"last_date_by_tag": {},
"last_unfinaled_date_by_tag": {},
"last_date_by_pair": {},
"last_date_by_status": {},
"last_permit_date": "2023-12-25",
"apn": "<string>",
"property_type": "<string>",
"property_type_detail": "<string>",
"year_built": 123,
"lot_size": 123,
"story_count": 123,
"unit_count": 123,
"building_area": 123,
"assess_market_value": 123,
"owner_type": "<string>",
"legal_owner": "<string>",
"trust": {
"unresolved_rate": 0.5,
"coverage_tier": "high",
"data_horizon": "2023-12-25",
"horizon_basis": "measured",
"trust_jurisdiction_basis": "own",
"footprint_basis": "matched",
"trust_jurisdiction_error_bar": 0,
"flags": []
}
}
],
"size": 123,
"next_cursor": "<string>",
"total_count": {
"value": 1,
"relation": "eq"
},
"trust_summary": {
"rows_flagged": 1,
"row_weighted_unresolved_rate": 0.5,
"expected_miss_rate": 0.5,
"suppressed_scopes": 1
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Get Properties By Id
Beta. Query parameters, response fields, and the absence-trust surface may still change in response to how the endpoint is used in practice. Treat the shape as unstable while it is in beta. Returns properties by their address id. Provide up to 50 id query parameters in one call; rows come back in request order and unknown ids are omitted (no per-id 404). A non-address geolocation id (city, county, or jurisdiction) is rejected.
curl --request GET \
--url https://api.shovels.ai/v2/properties \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.shovels.ai/v2/properties"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)HttpResponse<String> response = Unirest.get("https://api.shovels.ai/v2/properties")
.header("X-API-Key", "<api-key>")
.asString();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shovels.ai/v2/properties"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}require 'uri'
require 'net/http'
url = URI("https://api.shovels.ai/v2/properties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.shovels.ai/v2/properties",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"items": [
{
"id": "<string>",
"street_no": "<string>",
"street": "<string>",
"city": "<string>",
"city_id": "<string>",
"zip_code": "<string>",
"zip_code_ext": "<string>",
"county": "<string>",
"county_id": "<string>",
"state": "<string>",
"lat": 123,
"long": 123,
"permit_count": 0,
"untagged_permit_count": 0,
"total_job_value": 0,
"contractor_count": 0,
"tags": [],
"tag_status_pairs": [],
"statuses": [],
"tag_tally": {},
"last_date_by_tag": {},
"last_unfinaled_date_by_tag": {},
"last_date_by_pair": {},
"last_date_by_status": {},
"last_permit_date": "2023-12-25",
"apn": "<string>",
"property_type": "<string>",
"property_type_detail": "<string>",
"year_built": 123,
"lot_size": 123,
"story_count": 123,
"unit_count": 123,
"building_area": 123,
"assess_market_value": 123,
"owner_type": "<string>",
"legal_owner": "<string>",
"trust": {
"unresolved_rate": 0.5,
"coverage_tier": "high",
"data_horizon": "2023-12-25",
"horizon_basis": "measured",
"trust_jurisdiction_basis": "own",
"footprint_basis": "matched",
"trust_jurisdiction_error_bar": 0,
"flags": []
}
}
],
"size": 123,
"next_cursor": "<string>",
"total_count": {
"value": 1,
"relation": "eq"
},
"trust_summary": {
"rows_flagged": 1,
"row_weighted_unresolved_rate": 0.5,
"expected_miss_rate": 0.5,
"suppressed_scopes": 1
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Query Parameters
Address geolocation id. Up to 50 id params per request.
1 - 50 elementsResponse
The requested properties, in request order.
Paginated /properties response; carries the honesty summary on absence pages.
The list of items returned in the response following given criteria.
Show child attributes
Show child attributes
The number of items returned in the response.
The cursor for retrieving the next page of results.
Total result count (capped at 10,000). Present on first-page responses when include_count=true. null if the count query timed out.
Show child attributes
Show child attributes
Row-weighted trust summary; present only on absence-class responses.
Show child attributes
Show child attributes
Was this page helpful?

