Developer Documentation

SupplyScout REST 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.

Developer accounts are coming soon. Self-service API key registration is not yet available. To request early access, contact contact@supplyscout.org.

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 PrefixEnvironmentDescription
sk_live_ProductionLive data, rate-limited per your plan
sk_test_SandboxTest data, lower rate limits, no real notifications
Self-service developer accounts Coming Soon
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

PlanRequests / MinuteRequests / Day
Free301,000
Standard12010,000
Premium600100,000

Rate Limit Headers

HeaderDescription
X-RateLimit-LimitMaximum requests per minute for your plan
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix 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

CodeMeaning
200Success
201Created (resource successfully created)
400Bad Request (invalid parameters)
401Unauthorized (missing or invalid API key)
403Forbidden (insufficient permissions)
404Not Found
422Unprocessable Entity (validation error)
429Too Many Requests (rate limit exceeded)
500Internal Server Error

Error Response Format

{
  "error": "unauthorized",
  "message": "Valid API key required.",
  "code": 401
}

Endpoints

GET /v1/stores

List stores near a geographic location. Returns store details with the most recent supply reports.

Parameters

NameTypeDescription
latnumberrequiredLatitude of search center
lngnumberrequiredLongitude of search center
radiusnumberoptionalSearch radius in miles (default: 10, max: 50)
typestringoptionalFilter by store type (e.g., grocery, hardware, gas_station)
limitintegeroptionalMax 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
  }
}
GET /v1/stores/{id}

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"
      }
    ]
  }
}
GET /v1/supply-reports

List supply reports, optionally filtered by store, supply type, or geographic area.

Parameters

NameTypeDescription
store_idstringoptionalFilter reports to a specific store
supply_typestringoptionalFilter by supply type (e.g., ice, gasoline)
latnumberoptionalCenter latitude for area filter
lngnumberoptionalCenter longitude for area filter
radiusnumberoptionalArea radius in miles (requires lat/lng)
limitintegeroptionalMax 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
  }
}
POST /v1/supply-reports

Submit a new supply report. Requires write permission on your API key.

Request Body (JSON)

FieldTypeDescription
store_idstringrequiredID of the store
supply_typestringrequiredSupply category (e.g., ice, propane)
statusstringrequiredOne 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"
  }
}
GET /v1/supply-types

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": "🪵" }
  ]
}
GET /v1/alerts

Retrieve active disaster alerts for a geographic region.

Parameters

NameTypeDescription
latnumberrequiredLatitude
lngnumberrequiredLongitude
radiusnumberoptionalRadius 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 /v1/stores/{id}/status

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
  }
}
POST /v1/stores/{id}/status

Report a store's operating status. Requires write permission.

Request Body (JSON)

FieldTypeDescription
statusstringrequiredOne 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.

Webhook support is under active development. Contact us if you'd like to be notified when it launches.

SDKs & Libraries Coming Soon

Official client libraries are planned for the following languages:

LanguagePackageStatus
JavaScript / Node.js@supplyscout/sdkComing Soon
PythonsupplyscoutComing Soon
Gogo-supplyscoutComing Soon
In the meantime, the API works with any HTTP client. The curl examples in this documentation can be adapted to any language.

Need Help?

For API questions, integration support, or to request early access: