Overview
Sites represent physical locations where aerial data is collected. Each site belongs to your account and includes address information, geographic coordinates, and boundary geometry. Campaigns are associated with sites — a site must have a valid boundary geometry before it can be used in a campaign.
Site geometry is sent and returned as GeoJSON. Boundaries are validated to ensure they are between 500 sq ft and 100 sq km.
GET
/api/v1/sites
Requires Auth
List all sites for your account.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
page |
query | integer | No | Page number (default: 1) |
per_page |
query | integer | No | Items per page (default: 25, max: 100) |
Responses
{
"data": [
{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"type": "site",
"attributes": {
"name": "Solar Farm Alpha",
"description": "200-acre solar installation",
"address1": "1234 Solar Drive",
"address2": null,
"city": "Austin",
"state": "TX",
"zipCode": "78701",
"country": "US",
"siteType": "Commercial - Solar",
"latitude": 30.2672,
"longitude": -97.7431,
"fullAddress": "1234 Solar Drive, Austin, TX 78701",
"area": 0.81,
"geometry": {
"type": "Polygon",
"coordinates": [[
[-97.744, 30.268], [-97.742, 30.268],
[-97.742, 30.266], [-97.744, 30.266],
[-97.744, 30.268]
]]
},
"status": "active",
"faaRestrictionsSummary": "No restrictions",
"createdAt": "2024-01-05T09:00:00.000Z",
"updatedAt": "2024-02-20T16:45:00.000Z"
}
}
]
}
POST
/api/v1/sites
Requires Auth
Create a new site with an optional GeoJSON boundary. Geometry is validated to be between 500 sq ft and 100 sq km.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Site name |
description |
string | No | Site description |
address_1 |
string | Conditional | Street address (required if no geometry) |
city |
string | Conditional | City (required if no geometry) |
state |
string | Conditional | State / province |
zip_code |
string | No | Postal code |
country |
string | No | Country code |
site_type |
string | No | Site type classification |
geometry |
GeoJSON | No | Boundary polygon as GeoJSON |
POST /api/v1/sites
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN
{
"name": "Solar Farm Alpha",
"description": "200-acre solar installation",
"address_1": "1234 Solar Drive",
"city": "Austin",
"state": "TX",
"zip_code": "78701",
"site_type": "Commercial - Solar",
"geometry": {
"type": "Polygon",
"coordinates": [[
[-97.744, 30.268], [-97.742, 30.268],
[-97.742, 30.266], [-97.744, 30.266],
[-97.744, 30.268]
]]
}
}
Responses
{
"error": "Validation failed",
"messages": ["Boundary is too small (minimum 500 sq ft / ~46 sq m)"]
}
GET
/api/v1/sites/{id}
Requires Auth
Retrieve a single site with relationships.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | uuid | Yes | Site UUID |
Responses
{
"data": {
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"type": "site",
"attributes": { ... },
"relationships": {
"account": { "data": { "id": "...", "type": "account" } },
"campaigns": { "data": [{ "id": "...", "type": "campaign" }] }
}
}
}
Geometry Validation
Site boundaries must be valid GeoJSON Polygon geometries. The API enforces the following size constraints:
- Minimum area: 500 sq ft (~46 sq m)
- Maximum area: 100 sq km (100,000,000 sq m)
If a boundary falls outside these limits, the API returns a 422 with a descriptive
error message. Coordinates must be in WGS 84 (EPSG:4326) — standard
longitude/latitude pairs.
Site Object
The Site object contains the following attributes:
| Attribute | Type | Description |
|---|---|---|
id |
uuid | Unique identifier |
name |
string | Site name |
description |
string | Site description |
address1 |
string | Street address line 1 |
address2 |
string | Street address line 2 |
city |
string | City |
state |
string | State or province |
zipCode |
string | Postal code |
country |
string | Country code |
siteType |
string | Site type classification |
latitude |
decimal | Site center latitude |
longitude |
decimal | Site center longitude |
fullAddress |
string | Formatted full address |
area |
decimal | Boundary area in km² |
geometry |
GeoJSON | Boundary polygon as GeoJSON (null if not set) |
status |
string | Current site status |
faaRestrictionsSummary |
string | FAA airspace restriction summary |
createdAt |
datetime | ISO 8601 creation timestamp |
updatedAt |
datetime | ISO 8601 last updated timestamp |