← back to portfolio

ASTRA API

a security threat reporting & analysis dashboard

threat intelligence dashboard and API. all API endpoints require an API key. sign in with Google to get one.

base URL:
auth: pass X-API-Key: your_key header for authenticated requests.
download postman collection sign in to auto-inject your API key

endpoints

GET /api/indicators

list indicators, newest/highest-priority first.

paramtypedescription
typestringfilter: ip, domain, url, hash, email
sourcestringfilter by source: otx, urlhaus, threatfox
priority_minfloatminimum priority score (0-100)
tagstringfilter by tag
searchstringsubstring search on indicator value
limitintresults per page (1-500, default 50)
offsetintpagination offset
curl "https://aadi.zip/~astra/api/indicators?type=ip&priority_min=50&limit=10"

GET /api/indicators/{id}

get a single indicator by ID.

GET /api/stats

dashboard statistics: counts by type, source, priority distribution.

curl "https://aadi.zip/~astra/api/stats"

GET /api/export

bulk export indicators as JSON or CSV.

paramtypedescription
formatstringjson or csv (default: json)
typestringfilter by indicator type
priority_minfloatminimum priority score
limitintmax results (1-10000, default 1000)
curl "https://aadi.zip/~astra/api/export?format=csv&priority_min=25" -o threats.csv

GET /api/feeds

feed source status: last poll time, total indicators per source.

POST /api/poll

manually trigger a poll cycle (fetches all feeds, deduplicates, rescores). requires API key.

authentication

sign in with Google (button above) to get a personal API key. the dashboard itself uses a built-in frontend key for public viewing. API keys are generated server-side via OAuth only.

rate limits

tierlimit
API key20 req/min (per key)

rate limit headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

sources

response format

{
  "data": [
    {
      "id": 42,
      "type": "ip",
      "value": "185.220.101.42",
      "source": "otx,threatfox",
      "tags": ["c2", "cobalt_strike"],
      "priority": 67.5,
      "priority_label": "high",
      "first_seen": 1722345600.0,
      "last_seen": 1722432000.0,
      "source_count": 2,
      "raw": {"pulse_id": "...", "threat_type": "..."}
    }
  ],
  "total": 1247,
  "limit": 50,
  "offset": 0
}