Test preview
Company API guide
Company profiles with source-linked catalysts, explicit snapshot dates, and predictable company credits.
Test preview. This implementation is not a live paid service. Key creation, snapshot distribution and checkout require operator activation. Stripe billing accepts test mode only.
Company API plans
Free launch: public v1 access is available. V2 API access, key creation and Developer purchases are disabled. The plans below describe the test implementation; they are not available for signup.
Both tiers return the same stored company profiles and catalyst summaries through GET /api/v2/companies. One delivered company costs one credit per export, across all its pages.
Free
$0 USD / month
250 company credits
Per UTC calendar month
- 10 requests per minute
- Burst of 2 requests
- 1 concurrent request
Developer
$19 USD / month
10,000 company credits
Per paid billing period
- 60 requests per minute
- Burst of 5 requests
- 2 concurrent requests
All keys on an account share its allowance and request limits. There are no automatic overages. Errors, estimates, page retries and unchanged conditional requests use no company credits, but count toward request limits.
The billing adapter accepts Stripe test mode only. Live purchases are unavailable.
Company API access, credits and response guide · Public v1 preview reference
Get access when enabled
- Create an account and sign in.
- Open your account and create an API key when issuance is enabled. Copy it once and keep it on your server.
- Send the key in an Authorization Bearer header to
GET /api/v2/companies.
curl 'https://app.biotechtracker.dev/api/v2/companies?companies=VRTX,REGN&maxCredits=2' \
-H "Authorization: Bearer $BIOTECH_API_KEY" \
-H 'Idempotency-Key: my-export-2026-10-03'This request returns the two matching stored company profiles and costs two credits. Unknown or repeated company names do not add credits. Reuse the same Idempotency-Key and query on retries. A deliberately new export costs credits again.
Catalyst summaries
Both v1 and v2 return these fields on each item in companies[].catalysts[]. The keys are always present; their values can be null. A summary describes one catalyst, such as an FDA decision. There is no separate company-level AI overview in either response.
summary- A stored plain-English admin or research note takes priority when it passes the public output rules: at most 400 characters and no URL. Otherwise the API builds a deterministic explanation from the published catalyst fields. If those fields cannot support an explanation, the value is null.
summaryByadminmeans an editor-written stored note.researchmeans a stored research-pipeline note, including AI-generated explanations written earlier.templatemeans a deterministic explanation from catalog fields, not an AI response. Null means no summary was published.summaryAt- The stored note’s write time, when available. It is null for templates and seed sentences without a reliable authorship timestamp. It is not the FDA decision date, source verification time or API response time.
API reads never call a model or trigger research. An AI summary is available only if it was already written and stored; it is not guaranteed for every catalyst. A template fallback may be assembled during serialization without an AI call. V2 uses its immutable snapshot’s publication time when wording that fallback.
Use source, sourceUrl, sourceClass, verified, verifiedAt and confidence for the separate source and verification context. Summary attribution does not prove the underlying event was independently checked. Provider names and model IDs are not exposed per summary. V2’s optional profileFacts contains selected stored facts, not a company AI overview.
Fictional FDA decision example
This is a serializer-produced example for fictional ticker EXMP and fictional treatment Examplemab. The text, dates and example.test link illustrate a stored research summary; they are not real FDA data, a model run or a prediction. It shows one catalyst object, not a complete response.
{
"id": "exmp000000000001",
"type": "pdufa",
"title": "Fictional catalog label",
"drug": "Examplemab",
"indication": "Example condition",
"phase": "Phase 3",
"date": "2026-11-14",
"datePrecision": "day",
"dateStart": "2026-11-14",
"dateEnd": "2026-11-14",
"nctId": null,
"outcome": null,
"confidence": null,
"summary": "In this fictional example, the FDA decision for Examplemab is scheduled for November 14, 2026. This stored explanation does not predict the outcome.",
"summaryBy": "research",
"summaryAt": "2026-09-28T12:00:00.000Z",
"source": "curated",
"sourceUrl": "https://example.test/fda/decision",
"sourceClass": "company_or_other",
"verified": false,
"verifiedAt": null
}If no eligible stored note exists, the same catalyst can instead have summaryBy: "template" and summaryAt: null. If neither a note nor a valid fallback is available, all three summary fields are null.
Estimate and download
First request ?companies=all&estimate=true. Estimates use no credits. Then send companies=all, the returned snapshot.version as snapshot, and your maximum credit budget as maxCredits, with a new Idempotency-Key. The API reserves the whole selection before sending a page.
Follow export.next_cursor with ?cursor=… until it is null. Each page contains at most 50 profile chunks, each with at most 100 catalysts. A company costs one credit across all of its pages in the same export. Undelivered reservations expire after 24 hours, at the billing-period boundary, or at your freshness deadline, whichever comes first. Delivered company credits are not refunded.
Freshness and retries
Responses identify the immutable snapshot version, publication time, nullable source-data time and freshness for retrieved profile facts. Catalyst verification is reported separately. Reads never trigger research or model calls. Unknown data age or age of 18 hours or more returns an error without credits by default. Set allowStale=true only if older or unknown-age data is acceptable; maxAgeSeconds can tighten your requirement.
Errors, estimates, repeated pages and an unchanged conditional request cost no company credits, but count toward request limits. A 429 response includes Retry-After. A 409 asks you to correct a conflict or obtain a new estimate. An expired replay returns 410; starting again requires a deliberate new request key.
Responses exclude prices, article bodies, raw trial records, private account data and producer evidence. Source links identify evidence; they do not grant redistribution rights. This information is for research and is not an investment recommendation.