The Market Intelligence API
Everything last30days learns about your topics — the findings ledger with citations and cross-cycle status, entities with verified relationships, and a per-cycle change stream — readable over REST and pushed via signed webhooks. Machine-readable spec at /openapi.json.
API access is part of Intelligence Ops — keys are minted per workspace from the dashboard.
Authentication
Send your workspace key as a bearer token. Keys are shown once at creation and stored only as a hash; revoke and re-mint anytime from the dashboard.
curl https://www.last30days.xyz/api/v1/topics \ -H "Authorization: Bearer l30d_..."
Fair-use limit: 1,000 requests per hour per key (429 with Retry-After beyond it).
Endpoints
GET/api/v1/topics
Every topic in the workspace, newest first.
{
"data": [
{
"id": "9c2e…",
"query": "Quantum AI",
"heartbeat": "weekly",
"status": "active",
"createdAt": "2026-06-01T09:00:00Z"
}
]
}GET/api/v1/topics/{id}/findings
A topic's findings with their cross-cycle lifecycle status (New / Holding up / Disputed / Quiet), evidence grade, sightings lineage, and per-finding source citations.
id(path) — Topic id
{
"data": {
"topic": {
"id": "9c2e…",
"query": "Quantum AI",
"heartbeat": "weekly"
},
"findings": [
{
"key": "federal-pqc-migration-mandate",
"text": "Federal agencies received a dated post-quantum migration mandate.",
"status": "repeated",
"statusLabel": "Holding up",
"tag": "fact",
"confidence": "high",
"impact": "high",
"sightings": 3,
"firstSeen": "2026-05-14T08:00:00Z",
"lastSeen": "2026-07-01T08:00:00Z",
"citations": [
{
"source": "Reuters",
"url": "https://…"
}
]
}
],
"truncated": false
}
}GET/api/v1/topics/{id}/entities
A topic's claim-linked entities plus typed relationships. Only judge-verified, non-retracted edges are served — held or retracted edges never appear.
id(path) — Topic id
{
"data": {
"topic": {
"id": "9c2e…",
"query": "Quantum AI"
},
"entities": [
{
"id": "e1…",
"name": "GlobalFoundries",
"type": "company",
"mentions": 6,
"firstSeen": "2026-06-02T…",
"lastSeen": "2026-07-01T…"
}
],
"edges": [
{
"src": {
"id": "e1…",
"name": "GlobalFoundries",
"type": "company"
},
"kind": "partners_with",
"dst": {
"id": "e2…",
"name": "US CHIPS Program",
"type": "regulator"
},
"confidence": "reported",
"evidenceFindingKey": "gf-chips-quantum-award"
}
]
}
}GET/api/v1/events
Everything that changed, cycle by cycle: brief.published, finding.new, finding.status_changed, finding.merged, edge.verified. Newest first. The same stream webhooks deliver — poll this if you don't run a receiver.
topic_id(query) — Filter to one topicsince(query) — ISO timestamp lower boundlimit(query) — Max rows (default 100, cap 200)
{
"data": [
{
"id": "ev1…",
"topicId": "9c2e…",
"briefId": "b7…",
"type": "finding.status_changed",
"payload": {
"key": "federal-pqc-migration-mandate",
"from": "emerging",
"to": "repeated",
"text": "…"
},
"createdAt": "2026-07-01T08:04:00Z"
}
]
}Webhooks
Register one endpoint per workspace and receive each cycle's events as a single JSON batch, signed with HMAC-SHA256 over the exact body. Missed a delivery? The events endpoint above is the durable log — poll with ?since=.
import { createHmac, timingSafeEqual } from "crypto";
function verify(signatureHeader: string, rawBody: string, secret: string): boolean {
const expected = "sha256=" + createHmac("sha256", secret).update(rawBody).digest("hex");
return timingSafeEqual(Buffer.from(signatureHeader), Buffer.from(expected));
}
// Header: X-L30D-Signature — computed over the exact request body.What teams build with it
Client portals
Serve each client their topics' findings and verified relationships inside your own product — white-label all the way down.
Slack / internal alerts
Subscribe to the event stream and post when a finding flips to Disputed or a new relationship is verified.
Your data stack
Sync the ledger into a warehouse; join market intelligence against your own pipeline or portfolio data.
AI agents
The API is agent-ready: point an agent at the OpenAPI spec and let it query the intelligence directly.
Ready to build on your intelligence? API access ships with Intelligence Ops.
Talk to us