Programmatic access to ORION's company analysis, watchlist state, and detected-event alerts — the same real, sourced data the dashboard shows, callable from your own systems. Available on Fund and Enterprise plans.
Sign in on a Fund or Enterprise account, open API in the top navigation, and click Generate new key. The raw key is shown exactly once at creation — copy it immediately. ORION only ever stores a one-way hash of your key, so if you lose it, revoke it and generate a new one.
Every request must include your API key in the x-api-key header. There is no separate OAuth flow for the REST API today — session-based sign-in (used by the web app) and API-key auth (used here) are independent, so an API key works even if you're not otherwise signed in from that client.
curl https://orion-backend-xzsm.onrender.com/api/v1/analysis?company=Moderna&ticker=MRNA \ -H "x-api-key: orion_live_your_key_here"
A missing, unknown, or revoked key always returns 401 — never a downgraded or partial response.
| Endpoint | Limit |
|---|---|
GET /api/v1/analysis | 60 requests / hour / account |
GET /api/v1/watchlist | 60 requests / hour / account (shared with the general API rate limit) |
GET /api/v1/alerts | 30 requests / hour / account |
Limits are per account, independent of how many keys you've issued. A 429 response means you're over the limit for that window.
Runs ORION's full company analysis pipeline — live ClinicalTrials.gov pipeline data, market data, SEC EDGAR cash-runway/dilution checks, and an AI-generated, cited research report — and returns the same JSON shape the web app's report view uses.
| Param | Required | Description |
|---|---|---|
company | Yes | Company name, e.g. Moderna |
ticker | No | Stock ticker, e.g. MRNA — enables market-data and score fields |
condition | No | Indication/condition filter for the clinical trial search |
{
"company": "Moderna", "ticker": "MRNA", "trials_count": 42,
"trials": [...], "stock_info": {...}, "analysis": "...",
"score": {...}, "recommendation": {...},
"confidence": "HIGH", "generated_at": "2026-...",
"sources": { "clinical": "ClinicalTrials.gov v2 API", "market": "...", "analysis": "..." }
}
Returns the API-key owner's authenticated, server-saved Watchlist. The caller does not supply an arbitrary ticker list: ownership is resolved from the verified API key and only active saved items for that account are returned. This endpoint is distinct from Watchtower event detection, which computes monitor state and source changes for that saved Watchlist.
Query parameters: none. Scope comes exclusively from the API-key owner's active server watchlist.
{
"holdings": [
{ "ticker": "MRNA", "company": "Moderna",
"last_checked_at": "2026-07-10T08:12:00Z",
"last_success_at": "2026-07-10T08:12:00Z", "last_error": null }
]
}
Fields reflect stored watchlist rows. Missing monitor timestamps remain null; the API does not infer a successful check.
Returns real, stored Watchtower changes for the API-key owner's server-saved Watchlist — such as a trial status or enrollment differing from the prior immutable observation. A saved ticker with no detected change returns no event, never a fabricated one.
Query parameters: none. The response also includes watchlist, monitor_health, generated_at, and mode: "server_watchlist".
{
"events": [
{ "event_id": "snap-...", "company": "Moderna", "ticker": "MRNA",
"event_type": "trial_status_change", "alert_level": "high",
"previous_state": "overall status: RECRUITING",
"new_state": "overall status: COMPLETED",
"source_urls": ["https://clinicaltrials.gov/study/NCT..."],
"verification_status": "confirmed", "detected_at": "2026-07-10T08:12:00Z" }
]
}
From the API panel in the dashboard, click Revoke next to any key. Revocation is immediate — any request using that key returns 401 from that point on. There's no way to view a key's raw value again after creation; generate a new one if needed.