Build on Erudio reports.
Discovery is free and needs no key: the catalog, every report's preview, any page as Markdown and the free MCP server. A licence key comes with a purchase and reads what was bought. There is no separate sandbox; everything below works against production, and nothing is charged until a person pays.
Four steps
- 01
Find and preview a report
catalog.json lists every report; each preview is Markdown or JSON.
- 02
Connect the free MCP
Search, preview and order from any MCP client.
- 03
Order
A quote and a payment link for your user.
- 04
Read what you bought
The licence key reads the report over MCP.
# 1. Find a report
curl https://www.erudio.com/catalog.json
# Read its preview
curl https://www.erudio.com/reports/quintessential-2-nct06615479.md
curl -H "Accept: text/markdown" https://www.erudio.com/reports/quintessential-2-nct06615479{
"mcpServers": {
"erudio": { "url": "https://mcp.erudio.com/free" }
}
}# 3. Order: returns checkout_url for your user and status_url
curl -X POST https://www.erudio.com/api/orders \
-H "Content-Type: application/json" \
-d '{"report": "NCT06615479", "product": "edition",
"buyer_email": "name@company.com",
"idempotency_key": "<a random UUID per purchase>"}'{
"mcpServers": {
"erudio": {
"url": "https://mcp.erudio.com/mcp",
"headers": { "Authorization": "Bearer erudio_..." }
}
}
}APIs and machine-readable files
| Where | Type | What |
|---|---|---|
| /llms.txt | text/plain | The site index for agents |
| /catalog.json | application/json | Every report: trial, NCT ID, drugs, counts, size, price and links |
| /trials/{nct_id}.json | application/json | Any trial by NCT ID, with whether a report exists or can be ordered |
| /reports/{slug}.md, .json | text/markdown, application/json | One report's full public preview |
| Any page | text/markdown | Send Accept: text/markdown, or add .md to the URL (/index.md for the home page) |
| /openapi.json | application/json | The order API: create_order, get_order, pay_order |
| /.well-known/api-catalog | application/linkset+json | Every Erudio API with its description and docs (RFC 9727) |
| https://mcp.erudio.com/free | MCP | search_reports, get_report_card, create_order, get_order, recover_key; no sign-in |
| https://mcp.erudio.com/mcp | MCP | Adds read_report, list_reports, get_report_changes and get_my_access; licence key or OAuth |
Field-by-field formats are on For agents; every MCP tool is on Erudio MCP.
Keys and scopes
Discovery needs no credentials. A licence key starts erudio_ and comes only with a purchase: once an order is paid, its status_url returns the key, and the buyer gets their account key by email. An agent key reads the reports bought with it; the account key reads every report bought with the buyer's email address.
Send the key as Authorization: Bearer erudio_... to the MCP server, and as licence_key (or the same header) with every later create_order, so new reports join it. Store it as a secret. Lost keys are emailed again from /keys or POST /api/keys/recover; the email links a replacement if a key leaked.
The MCP server also signs in with OAuth 2.1 and PKCE. Its protected-resource metadata (RFC 9728) is at https://mcp.erudio.com/.well-known/oauth-protected-resource/mcp. Request the least scope you need:
| Scope | Grants |
|---|---|
| read | Read every published report and search the HCP commentary corpus. Granted to Enterprise MCP organizations. |
| report:licensed | Read only the reports bought with the caller's licence key or email address. Granted to report buyers. |
Try it without buying
There is no sandbox, because nothing here needs one. Previews, search and quotes are free and real; the only step that costs money is a person paying the checkout link.
- Read any report's preview: findings, counts, sources, trial aspects and limits, as Markdown or JSON.
- Add
https://mcp.erudio.com/freeto your MCP client and call search_reports and get_report_card. - Call create_order to see the exact price, discounts and credit for a buyer. It returns a payment link and charges nothing until a person pays it.
- Look up any trial at
/trials/{nct_id}.jsonto see whether a report exists or can be ordered, and its price.
Error format and codes
Every API error is an RFC 9457 problem details object, sent as application/problem+json. code is stable; hint says what to do next. error repeats detail for older clients. A Markdown request for a page that does not exist gets a 404 in Markdown.
{
"type": "https://www.erudio.com/developers#errors-report-not-found",
"title": "Not Found",
"status": 404,
"detail": "No purchasable report matches that slug, report id or NCT id.",
"code": "report_not_found",
"hint": "Pick a report from catalog, or check whether a trial can be ordered at /trials/{nct_id}.json.",
"error": "No purchasable report matches that slug, report id or NCT id.",
"catalog": "https://www.erudio.com/catalog.json"
}| Code | Meaning |
|---|---|
| agent_payments_closed | Agent payments are not open. Pay with the order's checkout_url by card. |
| card_checkout_open | The order's card checkout could not be closed; it may have just been paid. Check status_url before paying. |
| checkout_closed | Online checkout is not open. Ask for an invoice or purchase order at /contact. |
| confirmation_throttled | Confirmation links already went to this address today. Check the inbox. |
| credit_claimed | The purchase credit this order relied on went to another order. Create a new order. |
| email_failed | The message could not be sent. Try again. |
| endpoint_not_found | No API endpoint at this path. See /openapi.json for the order API. |
| identities_unavailable | Identity linkages come only with updates-12. Order updates-12-identities or drop them. |
| idempotency_conflict | This idempotency_key already belongs to a different order. Use a new key for a new purchase. |
| internal_error | Something failed on our side. Retry, and check status_url first for anything involving payment. |
| invalid_email | Send the buyer's email as JSON: {"email": "..."}. |
| invalid_fields | Some form fields are missing or invalid; fieldErrors names them. |
| invalid_json | The body is not valid JSON. |
| invalid_order | The order body is missing report, product or buyer_email. The response carries an example. |
| invalid_page_path | The page path for Markdown is not a site page. |
| invalid_product_or_email | product must be edition, updates-3, updates-6, updates-12 or updates-12-identities, and buyer_email a valid address. |
| invalid_request | A field is invalid; detail names it. |
| invalid_signature | The webhook signature did not verify. |
| invalid_trial_id | Give a trial slug or NCT ID, e.g. /trials/NCT01234567.json. |
| licence_key_inactive | The licence key sent is not active. Order without it, or recover the account key. |
| method_not_allowed | The endpoint does not accept this method; Allow lists those it does. |
| not_configured | This endpoint is not configured in this environment. |
| order_not_found | No order matches this token. Use the status_url or pay_url create_order returned. |
| payment_in_progress | Another payment for this order is in progress. Check status_url before paying again. |
| rate_limited | Too many requests. Wait a minute and retry. |
| report_not_found | No published report matches. Pick one from /catalog.json. |
| requests_unavailable | Report requests are not available right now. |
| test_edition_only | Test reports sell only as a single edition. |
| trial_not_available | This trial cannot be requested; detail says why. |
| trial_not_registered | The NCT ID is not in ClinicalTrials.gov. |
| unauthorized | Missing or wrong credentials. |
Over a rate limit, wait and retry; the MCP server answers 429 with rate_limit_exceeded. Anything involving payment: check status_url before paying again.
Talk to us
Questions, an invoice or an Enterprise MCP pilot: contact us or write to hello@erudio.com.