API Overview#
The HASTE API provides 41 HTTP endpoints and 6 queue-triggered workers (plus a poison-queue handler) for managing disaster assessment projects, processing satellite imagery, and running AI models for damage assessment. A separate TiTiler-based tile server handles geospatial imagery visualization.
Architecture#
The API layer consists of three Azure Functions apps:
hastefuncapi— 41 HTTP-triggered endpoints (projects, image layers, models, labels and validation, building features, users and admin, model catalog, plus dashboard/stats, visualizer, chunked upload, and Azure Maps token)hastefuncqueues— 6 queue-triggered workers plus a poison-queue handler for async processing (imagery, training, embedding, inference, stats, and artifact zipping)titilerfuncapi— a TiTiler0.21.1tile server for Cloud Optimized GeoTIFF serving
All apps share the hastegeo core library for models, processors, and storage backends.
Authentication#
Authentication is environment-dependent:
Local / development (
DEVELOPMENT_MODE=true) — endpoints are anonymous (func.AuthLevel.ANONYMOUS) for convenient local testing.Production (
DEVELOPMENT_MODE=false, the default) — endpoints require a Function key (func.AuthLevel.FUNCTION). Azure API Management fronts the app and injects the Function host key into its backends; the React UI authenticates users via Entra ID (MSAL) at the Static Web App.
Admin endpoints additionally enforce an administrators role decoded from the SWA-provided
x-ms-client-principal header, and the Model Catalog endpoints are always FUNCTION.
Base URLs#
Local — the UI is served by the SWA CLI at
http://localhost:4280; API calls go through the nginxapi-proxyathttp://localhost:7071/api/.Production — the API is fronted by Azure API Management, and the Static Web App proxies
/api/*to it.
Response Formats#
Responses are shaped per endpoint — there is no global response envelope. Successful reads return the resource directly, sometimes under a named key:
{ "projects": [], "project_count": 0, "layer_count": 0, "model_count": 0 }
Errors return an appropriate HTTP status code with either a plain-text message or a JSON body such as:
{ "error": "Project not found." }
Some write endpoints (e.g. the Model Catalog) return a small status wrapper:
{ "success": true, "message": "…", "catalogModel": {} }
Rate Limits#
API throughput is bounded by the underlying platform:
Azure Functions plan limits (Flex Consumption)
Cosmos DB request-unit (RU) quotas, when the Cosmos metadata backend is used
API Management policies in front of the API
Blob storage bandwidth
HTTP Status Codes#
200 OK — request successful
201 Created — resource created successfully
400 Bad Request — invalid request data
401 Unauthorized — authentication required
403 Forbidden — authenticated but missing the required role
404 Not Found — resource not found
500 Internal Server Error — server error