API Reference
Introduction
The SupplyScout API provides programmatic access to real-time supply availability data, store information, and disaster alerts. The API is RESTful, returns JSON responses, and requires HTTPS for all requests.
Use the API to integrate supply data into your own applications, build dashboards for emergency management, or create tools that help communities prepare for and respond to disasters.
Authentication
All API requests require a valid API key passed in the Authorization header:
Authorization: Bearer sk_live_your_api_key_here
API keys follow the format sk_live_... for production and sk_test_... for sandbox environments. Keys are tied to a developer account and can be revoked at any time.
Key Types
| Key Prefix | Environment | Description |
|---|---|---|
sk_live_ | Production | Live data, rate-limited per your plan |
sk_test_ | Sandbox | Test data, lower rate limits, no real notifications |
When available, you'll be able to generate and manage keys from your developer dashboard.
Base URL
All API endpoints are relative to the following base URL:
https://api.supplyscout.org/v1
All requests must use HTTPS. HTTP requests will be rejected with a 301 redirect.
Rate Limiting
API requests are rate-limited based on your plan tier. Rate limit information is included in every response via headers.
Plan Limits
| Plan | Requests / Minute | Requests / Day |
|---|---|---|
| Free | 30 | 1,000 |
| Standard | 120 | 10,000 |
| Premium | 600 | 100,000 |
Rate Limit Headers
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per minute for your plan |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
When the rate limit is exceeded, the API returns 429 Too Many Requests.
Versioning
The API uses URL-based versioning. The current version is v1, included in all endpoint paths (e.g., /v1/stores).
When new versions are released, previous versions will be supported for at least 12 months with deprecation notices. Breaking changes are never introduced within a version.
Errors
The API returns standard HTTP status codes and a consistent JSON error body.
Status Codes
| Code | Meaning |
|---|---|
200 | Success |
201 | Created (resource successfully created) |
400 | Bad Request (invalid parameters) |
401 | Unauthorized (missing or invalid API key) |
403 | Forbidden (insufficient permissions) |
404 | Not Found |
422 | Unprocessable Entity (validation error) |
429 | Too Many Requests (rate limit exceeded) |
500 | Internal Server Error |
Error Response Format
{
"error": "unauthorized",
"message": "Valid API key required.",
"code": 401
}
Endpoints
List stores near a geographic location. Returns store details with the most recent supply reports.
Parameters
| Name | Type | Description | |
|---|---|---|---|
lat | number | required | Latitude of search center |
lng | number | required | Longitude of search center |
radius | number | optional | Search radius in miles (default: 10, max: 50) |
type | string | optional | Filter by store type (e.g., grocery, hardware, gas_station) |
limit | integer | optional | Max results (default: 25, max: 100) |
Example Request
curl -H "Authorization: Bearer sk_live_..." \ "https://api.supplyscout.org/v1/stores?lat=29.7604&lng=-95.3698&radius=5&limit=10"
Example Response
{
"data": [
{
"id": "store_8f3a2b",
"name": "H-E-B Montrose",
"type": "grocery",
"lat": 29.7504,
"lng": -95.3905,
"address": "1701 W Alabama St, Houston, TX 77098",
"distance_miles": 1.3,
"latest_reports": [
{
"supply_type": "ice",
"status": "in_stock",
"reported_at": "2026-02-16T14:32:00Z"
}
]
}
],
"meta": {
"total": 47,
"limit": 10,
"offset": 0
}
}
Retrieve detailed information about a specific store, including all recent supply reports and operating status.
Example Request
curl -H "Authorization: Bearer sk_live_..." \ "https://api.supplyscout.org/v1/stores/store_8f3a2b"
Example Response
{
"data": {
"id": "store_8f3a2b",
"name": "H-E-B Montrose",
"type": "grocery",
"lat": 29.7504,
"lng": -95.3905,
"address": "1701 W Alabama St, Houston, TX 77098",
"status": "open",
"status_updated_at": "2026-02-16T10:15:00Z",
"reports": [
{
"id": "rpt_a1b2c3",
"supply_type": "ice",
"status": "in_stock",
"reported_at": "2026-02-16T14:32:00Z"
},
{
"id": "rpt_d4e5f6",
"supply_type": "propane",
"status": "low",
"reported_at": "2026-02-16T13:10:00Z"
}
]
}
}
List supply reports, optionally filtered by store, supply type, or geographic area.
Parameters
| Name | Type | Description | |
|---|---|---|---|
store_id | string | optional | Filter reports to a specific store |
supply_type | string | optional | Filter by supply type (e.g., ice, gasoline) |
lat | number | optional | Center latitude for area filter |
lng | number | optional | Center longitude for area filter |
radius | number | optional | Area radius in miles (requires lat/lng) |
limit | integer | optional | Max results (default: 50, max: 200) |
Example Request
curl -H "Authorization: Bearer sk_live_..." \ "https://api.supplyscout.org/v1/supply-reports?supply_type=ice&lat=29.76&lng=-95.37&radius=10"
Example Response
{
"data": [
{
"id": "rpt_a1b2c3",
"store_id": "store_8f3a2b",
"store_name": "H-E-B Montrose",
"supply_type": "ice",
"status": "in_stock",
"reported_at": "2026-02-16T14:32:00Z"
}
],
"meta": {
"total": 128,
"limit": 50,
"offset": 0
}
}
Submit a new supply report. Requires write permission on your API key.
Request Body (JSON)
| Field | Type | Description | |
|---|---|---|---|
store_id | string | required | ID of the store |
supply_type | string | required | Supply category (e.g., ice, propane) |
status | string | required | One of: in_stock, low, out_of_stock |
Example Request
curl -X POST \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"store_id":"store_8f3a2b","supply_type":"ice","status":"in_stock"}' \
"https://api.supplyscout.org/v1/supply-reports"
Example Response
{
"data": {
"id": "rpt_x7y8z9",
"store_id": "store_8f3a2b",
"supply_type": "ice",
"status": "in_stock",
"reported_at": "2026-02-16T15:45:00Z"
}
}
List all available supply categories and their display metadata.
Example Request
curl -H "Authorization: Bearer sk_live_..." \ "https://api.supplyscout.org/v1/supply-types"
Example Response
{
"data": [
{ "id": "ice", "label": "Ice", "emoji": "🧊" },
{ "id": "propane", "label": "Propane", "emoji": "🔥" },
{ "id": "gasoline", "label": "Gasoline", "emoji": "⛽" },
{ "id": "water", "label": "Water", "emoji": "💧" },
{ "id": "batteries", "label": "Batteries", "emoji": "🔋" },
{ "id": "generators", "label": "Generators", "emoji": "⚡" },
{ "id": "groceries", "label": "Groceries", "emoji": "🛒" },
{ "id": "first_aid", "label": "First Aid", "emoji": "🩹" },
{ "id": "tarps", "label": "Tarps", "emoji": "🧱" },
{ "id": "plywood", "label": "Plywood", "emoji": "🪵" }
]
}
Retrieve active disaster alerts for a geographic region.
Parameters
| Name | Type | Description | |
|---|---|---|---|
lat | number | required | Latitude |
lng | number | required | Longitude |
radius | number | optional | Radius in miles (default: 50) |
Example Request
curl -H "Authorization: Bearer sk_live_..." \ "https://api.supplyscout.org/v1/alerts?lat=29.76&lng=-95.37"
Example Response
{
"data": [
{
"id": "alert_h1k2m3",
"type": "hurricane",
"title": "Hurricane Warning — Greater Houston Area",
"severity": "extreme",
"description": "Category 3 hurricane expected to make landfall within 24 hours.",
"affected_area": {
"center": { "lat": 29.76, "lng": -95.37 },
"radius_miles": 80
},
"issued_at": "2026-02-15T08:00:00Z",
"expires_at": "2026-02-18T08:00:00Z"
}
]
}
Get the current operating status of a store.
Example Request
curl -H "Authorization: Bearer sk_live_..." \ "https://api.supplyscout.org/v1/stores/store_8f3a2b/status"
Example Response
{
"data": {
"store_id": "store_8f3a2b",
"status": "open",
"updated_at": "2026-02-16T10:15:00Z",
"reported_by_count": 3
}
}
Report a store's operating status. Requires write permission.
Request Body (JSON)
| Field | Type | Description | |
|---|---|---|---|
status | string | required | One of: open, closed, limited_hours, power_out |
Example Request
curl -X POST \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"status":"open"}' \
"https://api.supplyscout.org/v1/stores/store_8f3a2b/status"
Example Response
{
"data": {
"store_id": "store_8f3a2b",
"status": "open",
"updated_at": "2026-02-16T15:50:00Z"
}
}
Webhooks Coming Soon
Webhooks will allow your application to receive real-time notifications when supply reports are submitted, disaster alerts are issued, or store statuses change. Configure webhook endpoints from your developer dashboard.
SDKs & Libraries Coming Soon
Official client libraries are planned for the following languages:
| Language | Package | Status |
|---|---|---|
| JavaScript / Node.js | @supplyscout/sdk | Coming Soon |
| Python | supplyscout | Coming Soon |
| Go | go-supplyscout | Coming Soon |
curl examples in this documentation can be adapted to any language.
Need Help?
For API questions, integration support, or to request early access:
- Email: contact@supplyscout.org
- Support docs: SupplyScout Help Center
- FAQ: Frequently Asked Questions