API reference

JSON API — every feed, every classification, every match.

Server-rendered HTML is the default surface, but everything is also JSON. Use the API to pipe matches into your own dashboard, Slack bot, or compliance workflow.

Base URL: https://regflow.us · Auth: none on Free tier, API key in Authorization: Bearer on Pro and Team (coming Q3).

GET /api/stats

Live counts of documents, classifications, matches in last 24h, and active watchlists.

REQUEST
curl https://regflow.us/api/stats
RESPONSE
{
  "totalDocs": 197,
  "totalClassified": 164,
  "docsLast24h": 197,
  "matchesLast24h": 14,
  "watchlists": 7
}
GET /api/docs?limit=50&offset=0&minMateriality=3

Paginated classified documents ordered by publication date (newest first). Use minMateriality to filter out noise.

REQUEST
curl "https://regflow.us/api/docs?limit=10&minMateriality=4"
RESPONSE
{
  "count": 10,
  "items": [
    {
      "id": "uuid",
      "source": "federal-register",
      "sourceId": "2026-11001",
      "url": "https://www.federalregister.gov/documents/...",
      "title": "...",
      "publishedAt": "2026-06-02T00:00:00.000Z",
      "materiality": 4,
      "summary": "...",
      "topics": ["countervailing-duty-investigation", "china-imports"],
      "entities": [{"kind":"agency","name":"International Trade Administration"}],
      "rationale": "Why this matters: ..."
    }
  ]
}
GET /api/docs/:id

Single document with full body and full classification.

REQUEST
curl https://regflow.us/api/docs/2c8de0c4-...
RESPONSE
(full document object including raw body)
GET /api/watchlists

List active watchlists.

REQUEST
curl https://regflow.us/api/watchlists
RESPONSE
{
  "count": 7,
  "items": [
    { "slug": "trade-remedies", "name": "...", "rssUrl": ".../rss/trade-remedies", ... }
  ]
}
GET /api/watchlists/:slug

Watchlist details + most recent 50 matches with full document + classification context.

REQUEST
curl https://regflow.us/api/watchlists/trade-remedies
RESPONSE
(watchlist meta + 50 matches with embedded doc + classification)
POST /api/watchlists

Create a watchlist. Requires at least one keyword OR topic. Free tier limited to 1; Pro to 5; Team unlimited.

REQUEST
curl -X POST https://regflow.us/api/watchlists \
  -H "Content-Type: application/json" \
  -d '{
    "name":"My HTS 4011 watch",
    "topics":["antidumping-duty-sunset-reviews"],
    "keywords":["4011","tire"],
    "minMateriality":3,
    "threshold":0.3
  }'
RESPONSE
{ "id":"...", "slug":"my-hts-4011-watch-abc123", "name":"...", "rssUrl":"..." }
POST /api/waitlist

Add an email to the founding-customer waitlist. Optionally captures company + what they want to watch. Fires a Discord/Slack/generic webhook if WAITLIST_WEBHOOK_URL is configured.

REQUEST
curl -X POST https://regflow.us/api/waitlist \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","company":"Acme","watching":"4011.10 tires"}'
RESPONSE
{ "ok": true }
GET /rss/:slug

RSS 2.0 feed for a watchlist. Plain XML, cache-control max-age=300. Works in any RSS reader.

REQUEST
curl https://regflow.us/rss/trade-remedies
RESPONSE
(application/rss+xml — RSS 2.0 with up to 50 latest matches)
GET /api/health

Health check. Returns ok:true with a server timestamp. Used by Fly.io and Kubernetes liveness probes.

REQUEST
curl https://regflow.us/api/health
RESPONSE
{ "ok": true, "ts": "2026-06-02T08:35:24.000Z" }

Need a feature that's not here?

Per-match webhook delivery, embedding search, and full-text doc fetch are on the Q3 roadmap. Email the spec.

Contact