| title | API Introduction |
|---|---|
| description | REST API for querying signals, creating alerts, exporting audiences, and triggering analyses |
The Evoteli exposes a RESTful JSON API for querying time-series signals, creating alerts, exporting audiences, and triggering Earth Engine tasks.
https://api.evoteli.com/v1
All API requests require an OAuth 2.0 Bearer Token obtained via your client credentials.
curl -X POST https://auth.evoteli.com/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=$CLIENT_ID" \
-d "client_secret=$CLIENT_SECRET"Response:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}Include the token in the Authorization header:
curl -X POST https://api.evoteli.com/v1/signals:query \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ ... }'| Tier | Requests per Minute | Burst |
|---|---|---|
| Starter | 60 | 100 |
| Growth | 300 | 500 |
| Enterprise | 1000 | 2000 |
Rate Limit Headers:
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 287
X-RateLimit-Reset: 1699296000
All errors return standard HTTP status codes with JSON bodies:
Example Error Response:
{
"error": {
"code": "INVALID_REQUEST",
"message": "Missing required parameter: site_id or polygon_id",
"details": {
"param": "site_id",
"suggestion": "Provide at least one of: site_id, polygon_id"
}
}
}| Code | HTTP Status | Description |
|---|---|---|
INVALID_REQUEST |
400 | Malformed request or missing parameters |
UNAUTHORIZED |
401 | Invalid or expired token |
FORBIDDEN |
403 | Insufficient permissions |
NOT_FOUND |
404 | Resource not found |
RATE_LIMIT_EXCEEDED |
429 | Too many requests |
INTERNAL_ERROR |
500 | Server error |
List endpoints support cursor-based pagination:
Request:
GET /sites?limit=100&cursor=eyJpZCI6MTIzNH0Response:
{
"data": [ ... ],
"next_cursor": "eyJpZCI6MTMzNH0",
"has_more": true
}All timestamps use ISO 8601 format in UTC:
2025-11-06T14:30:00Z
Polygons and points use GeoJSON format (SRID 4326):
{
"type": "Polygon",
"coordinates": [[
[-84.3880, 33.7490],
[-84.3870, 33.7490],
[-84.3870, 33.7480],
[-84.3880, 33.7480],
[-84.3880, 33.7490]
]]
}The API uses URL-based versioning (/v1, /v2). Breaking changes will increment the major version. Deprecated endpoints will be supported for at least 12 months.
Python:
from geointel import Client
client = Client(
client_id="your_client_id",
client_secret="your_client_secret"
)
# Query occupancy for last 24 hours
response = client.signals.query(
site_id="ATL-CTF-001",
metrics=["occupancy", "queue_len"],
time_from="2025-11-05T00:00:00Z",
time_to="2025-11-06T00:00:00Z",
rollup="15m"
)
for row in response.rows:
print(f"{row.ts}: {row.metric}={row.value} ({row.unit})")- Documentation: https://docs.evoteli.com
- API Status: https://status.evoteli.com
- Support Email: support@evoteli.com
- GitHub Issues: https://github.com/geointel/sdk-python/issues