Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/alphanume-com:alphanume-com-biotech-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
contact:
url: https://alphanume.com
description: 'Point-in-time, survivorship-aware datasets for US equities and options research. Every response is JSON: {"count": N, "data": [...]} (paginated endpoints add has_more and next_cursor). Dates are always YYYY-MM-DD. Access: every dataset requires an Alphanume Pro API key (the Free plan is retired as of September 6, 2026). A 403 error with code PRO_SUBSCRIPTION_REQUIRED or DATE_RANGE_RESTRICTED means the key''s plan does not cover the request -- it does not mean the data is missing. Authentication: send your API key in the X-API-Key header (or Authorization: Bearer). Rate limit: 600 requests/minute. Keys come with a Pro subscription at https://alphanume.com/pricing. The same datasets are available as MCP tools at https://mcp.alphanume.com/mcp.'
title: Alphanume Biotech API
version: 1.1.0
servers:
- url: https://api.alphanume.com
security:
- ApiKeyHeader: []
- BearerKey: []
tags:
- name: Biotech
paths:
/v1/biotech/advisory-committees:
get:
description: 'FDA advisory-committee (AdCom) votes: every drug/biologic advisory committee
meeting from 2024 forward, with the committee''s exact vote tallies extracted from
the official minutes PDFs (verified against the PDFs) -- one row per (meeting, vote
question). The tally (vote_yes/vote_no/vote_abstain), the verbatim question, which
answer was the product-favorable one, and whether the favorable side won; plus
sponsor, drug, indication, committee, center, meeting status, and links to the
minutes/transcript/briefing materials so any number can be checked at the source.
A meeting with no tally is still a row -- vote_evidence says why (minutes not
posted yet vs discussion-only vs not held), which is the difference between ''no
data'' and ''no vote''. Minutes land MONTHS after meetings, so recent meetings sit at
minutes_not_posted until FDA publishes; rows re-label automatically when materials
change. The forward calendar (scheduled meetings) is included. AdCom votes precede
FDA decisions by weeks-to-months and FDA usually -- not always -- follows them.
Requires an Alphanume Pro API key. A 403 PRO_SUBSCRIPTION_REQUIRED or
DATE_RANGE_RESTRICTED error means the key''s plan does not cover the request --
it does not mean the data is missing. Note: meetings are sparse (a few per
month), so short date windows are often legitimately empty.'
operationId: get_advisory_committee_votes
parameters:
- description: Committee abbreviation (e.g. ODAC, VRBPAC, PDAC) or name substring. Matches joint meetings via the full committee list, so PDAC finds meetings where it co-sat.
in: query
name: committee
required: false
schema:
type: string
- description: 'Owning FDA center: CDER, CBER, or OC (Office of the Commissioner).'
in: query
name: center
required: false
schema:
type: string
- description: held, scheduled, postponed, or cancelled. 'scheduled' rows are the forward calendar.
in: query
name: meeting_status
required: false
schema:
type: string
- description: product_specific, compounding_nominations, strain_selection, safety_review, or policy_or_class_review.
in: query
name: meeting_topic_type
required: false
schema:
type: string
- description: 'Why a row does/doesn''t carry numbers: minutes_tally (real tally), minutes_no_tally, no_vote_held (discussion-only), minutes_not_posted (FDA hasn''t published minutes yet), meeting_not_held.'
in: query
name: vote_evidence
required: false
schema:
type: string
- description: true = only rows with a numeric vote tally; false = only placeholder/no-tally rows.
in: query
name: has_tally
required: false
schema:
type: string
- description: true = the product-favorable side won; false = it lost. Ties and strain-selection votes are NULL and excluded by either value.
in: query
name: vote_outcome_favorable
required: false
schema:
type: string
- description: Case-insensitive substring on the drug/asset name (2-100 chars).
in: query
name: drug
required: false
schema:
type: string
- description: Case-insensitive substring on the sponsor company (2-100 chars).
in: query
name: sponsor
required: false
schema:
type: string
- description: Exact normalized asset key -- the group-by for 'every AdCom appearance of this asset' and the linkage audit key.
in: query
name: asset_key
required: false
schema:
type: string
- description: Substring on the application identifiers (NDA/BLA/sNDA numbers as stated in the materials).
in: query
name: application
required: false
schema:
type: string
- description: Exact meeting page slug -- all vote rows of one meeting.
in: query
name: meeting_key
required: false
schema:
type: string
- description: Exact date, YYYY-MM-DD. Cannot be combined with the date range parameters.
in: query
name: date
required: false
schema:
type: string
- description: Start of date range, inclusive (YYYY-MM-DD).
in: query
name: date_gte
required: false
schema:
type: string
- description: End of date range, inclusive (YYYY-MM-DD).
in: query
name: date_lte
required: false
schema:
type: string
- description: Start of date range, exclusive (YYYY-MM-DD).
in: query
name: date_gt
required: false
schema:
type: string
- description: End of date range, exclusive (YYYY-MM-DD).
in: query
name: date_lt
required: false
schema:
type: string
- description: YYYY-MM-DD, on last_updated -- rows re-projected after FDA posted new materials (minutes land months late).
in: query
name: updated_since
required: false
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
description: Matching rows.
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/RateLimited'
summary: 'FDA advisory-committee (AdCom) votes: every drug/biologic advisory committee'
tags:
- Biotech
/v1/biotech/fda-response-events:
get:
description: 'Adverse FDA regulatory actions disclosed in 8-Ks: Complete Response Letters,
full and partial clinical holds, and refuse-to-file letters, 2024+, each graded by
an explicit severity precedence rule with the evidence flags the grade depends on
served alongside it (new-trial-required, manufacturing-related, resubmission-path,
hold-lifted). Follow-ups and resolutions are linked per (issuer, drug program), so
an original hold row answers ''was it ever lifted, and how long did it take''.
By default only classified FDA events are returned (~196 rows); the ~1,520 audited
not-an-event rows the full-text sweep also retrieved are available with
include_rejects=true. The date window filters disclosed_date (the EDGAR filing
date); event_letter_date is extracted with its own precision enum and
days_letter_to_disclosure is the selective-disclosure measure -- on
initial_disclosure rows only (on follow-ups it measures distance to the original
letter). Selective disclosure is the headline caveat: a CRL disclosed only in a
10-Q, or never, is not here.
Requires an Alphanume Pro API key. A 403 PRO_SUBSCRIPTION_REQUIRED or
DATE_RANGE_RESTRICTED error means the key''s plan does not cover the request --
it does not mean the data is missing.'
operationId: get_fda_response_events
parameters:
- description: Ticker symbol filter, e.g. 'AAPL'. Case-insensitive.
in: query
name: ticker
required: false
schema:
type: string
- description: SEC CIK number (digits only).
in: query
name: cik
required: false
schema:
type: string
- description: 'Comma-separated: crl, clinical_hold_full, clinical_hold_partial, refuse_to_file, other_fda_action. (not_a_setback_event requires include_rejects=true.)'
in: query
name: event_type
required: false
schema:
type: string
- description: 'What the document does about the event: initial_disclosure, follow_up_update, or resolution. Counting rows without this filter overstates events ~2.4x -- one program''s hold can be 3+ filings.'
in: query
name: filing_role
required: false
schema:
type: string
- description: 'Comma-separated severity grades: program_terminated, major_delay_new_trial_required, manufacturing_only, addressable_deficiencies, safety_signal_no_path_stated, unstated, not_restated. Rank encodes grading precedence, NOT market impact.'
in: query
name: severity
required: false
schema:
type: string
- description: true = events with a linked later resolution (hold lifted, approval, resubmission accepted); false = still open. NULL rows are themselves resolutions.
in: query
name: resolved
required: false
schema:
type: string
- description: true = include the ~1,520 audited 'not_a_setback_event' rows (boilerplate the recall-first sweep retrieved and the labeler rejected, each with its reason). Default = real FDA events only.
in: query
name: include_rejects
required: false
schema:
type: string
- description: Case-insensitive substring on the drug/asset name (3+ chars).
in: query
name: drug_search
required: false
schema:
type: string
- description: Exact normalized program key -- groups all filings about one program and audits the served linkage columns.
in: query
name: asset_key
required: false
schema:
type: string
- description: Exact date, YYYY-MM-DD. Cannot be combined with the date range parameters.
in: query
name: date
required: false
schema:
type: string
- description: Start of date range, inclusive (YYYY-MM-DD).
in: query
name: date_gte
required: false
schema:
type: string
- description: End of date range, inclusive (YYYY-MM-DD).
in: query
name: date_lte
required: false
schema:
type: string
- description: Start of date range, exclusive (YYYY-MM-DD).
in: query
name: date_gt
required: false
schema:
type: string
- description: End of date range, exclusive (YYYY-MM-DD).
in: query
name: date_lt
required: false
schema:
type: string
- description: YYYY-MM-DD, on last_updated -- rows touched by the linkage sweep since this date.
in: query
name: updated_since
required: false
schema:
type: string
- description: 'Pagination: ''date'' from next_cursor (send with cursor_accession).'
in: query
name: cursor_date
required: false
schema:
type: string
- description: 'Pagination: ''accession_number'' from next_cursor (send with cursor_date).'
in: query
name: cursor_accession
required: false
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedEnvelope'
description: Matching rows.
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/RateLimited'
summary: 'Adverse FDA regulatory actions disclosed in 8-Ks: Complete Response Letters,'
tags:
- Biotech
components:
schemas:
PaginatedEnvelope:
properties:
count:
type: integer
data:
items:
type: object
type: array
has_more:
type: boolean
next_cursor:
description: 'Keyset cursor: pass its fields back as the cursor_* query parameters to fetch the next page.'
type:
- object
- 'null'
required:
- count
- data
- has_more
- next_cursor
type: object
Envelope:
properties:
count:
type: integer
data:
items:
type: object
type: array
required:
- count
- data
type: object
Error:
additionalProperties: true
properties:
error: {}
type: object
responses:
Unauthorized:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Missing or unrecognized API key.
Forbidden:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: 'PRO_SUBSCRIPTION_REQUIRED: the key''s plan does not include API access; every endpoint requires an active Pro subscription. DATE_RANGE_RESTRICTED: a legacy free-tier key asked for dates outside its window. In both cases the data is not missing.'
BadRequest:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Invalid or conflicting query parameters.
RateLimited:
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Rate limit exceeded (600/min); the body carries retry_after_seconds.
securitySchemes:
ApiKeyHeader:
in: header
name: X-API-Key
type: apiKey
BearerKey:
scheme: bearer
type: http
externalDocs:
description: MCP server exposing these datasets as tools (OAuth or X-API-Key).
url: https://mcp.alphanume.com/mcp