Register Site
curl --request POST \
--url https://api.example.com/v1/sites \
--header 'Content-Type: application/json' \
--data '{
"site": {}
}'import requests
url = "https://api.example.com/v1/sites"
payload = { "site": {} }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({site: {}})
};
fetch('https://api.example.com/v1/sites', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/sites",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'site' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/sites"
payload := strings.NewReader("{\n \"site\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/sites")
.header("Content-Type", "application/json")
.body("{\n \"site\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/sites")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"site\": {}\n}"
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Sites
Prepare a site
Prepare an area for cited questions, using an account-owned site handle.
POST
/
v1
/
sites
Register Site
curl --request POST \
--url https://api.example.com/v1/sites \
--header 'Content-Type: application/json' \
--data '{
"site": {}
}'import requests
url = "https://api.example.com/v1/sites"
payload = { "site": {} }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({site: {}})
};
fetch('https://api.example.com/v1/sites', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/sites",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'site' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/sites"
payload := strings.NewReader("{\n \"site\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/sites")
.header("Content-Type", "application/json")
.body("{\n \"site\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/sites")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"site\": {}\n}"
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Submit a WGS84 GeoJSON Polygon or MultiPolygon in the
Current geometry safeguards are 200,000 acres and 20,000 vertices. These are
validation bounds, not a completion-time or throughput guarantee.
The handle belongs to the authenticated account. The same account and immutable
geometry reuse a handle; another account receives a different handle. Geometry
hashes from older integrations are not public access credentials.
It does not expose the underlying parcel dossier or premium fields. Another
account’s handle returns
site property. Mireye
prepares the evidence in a bounded worker and returns an opaque site_id with
status: "building", or reuses a ready snapshot. Preparation currently has no
usage charge. Existing geometry, worker and request limits still apply; this is
not an unlimited bulk export service. Oversized or malformed geometry is rejected
before work starts, and a full preparation queue returns retryable 429.
{"site":{"type":"Polygon","coordinates":[[[-96.802,32.774],[-96.792,32.774],[-96.792,32.780],[-96.802,32.780],[-96.802,32.774]]]}}
Poll preparation
GET /v1/sites/{site_id} returns only status and geometry metadata:
{"site_id":"site_example","status":"ready","site_acres":61.4,"site_extent":[-96.802,32.774,-96.792,32.780],"built_at":"2026-10-19T12:00:00Z"}
404 site_not_found. Current source permissions are
checked for preparation and reads. Polling remains subject to request limits.
Use Ask-site for a cited answer from the prepared data.
Dossiers are snapshots with a 30-day retention period. They do not refresh
continuously. Re-register an expired or failed site to request a new preparation.Body
application/json
Response
Successful Response