{"openapi":"3.1.0","info":{"title":"The Last Economy Wire — Intelligence API","version":"1.0.0","description":"Free, public, machine-friendly API in two domains.\n\n**Signals** — **MIND** (capital-flow signal across Money, Infrastructure, Networks, Data), **Hope** (global clinical-trial pulse and cure-research index), **Trends** (feed shape, attention concentrations, and crypto TGE lens), and a **batch** endpoint that returns several signals in one call.\n\n**World clinical trials** — a deduplicated index of distinct real-world trials drawn from the primary registries ClinicalTrials.gov and ISRCTN, with full-text and structured search, canonical records including raw registry payloads, duplicate-registration analysis, derived landscape analytics, cross-registry coverage and per-registry sync provenance. Registry metadata only: no participant data, no clinical advice.\n\nStart at `GET /api/v1` — the canonical capability inventory. The same inventory is available over MCP as the `list_capabilities` tool.\n\nNo API key is required for anonymous access (120 req/min per IP). Authenticated callers receive higher quotas (default 1 000 req/min per key). All responses follow a uniform `{ data, _meta }` envelope with correlation IDs, schema versioning, ETag support, and structured error bodies.","contact":{"name":"Negative Resistance","url":"https://negativeresistance.com","email":"scarecrow@regan.studio"},"license":{"name":"Free for any use — attribution appreciated","url":"https://negativeresistance.com/about"}},"servers":[{"url":"https://negativeresistance.com","description":"Production"},{"url":"https://last-economy-wire-3dmp15.abacusai.app","description":"Mirror"}],"security":[{"apiKeyHeader":[]},{"apiKeyAuth":[]},{}],"paths":{"/api/v1/mind":{"get":{"operationId":"getMindSignal","summary":"MIND capital-flow signal","description":"Returns the real-time MIND aggregate: signal counts per capital (M/I/N/D), directional pulse, diversity conscience reading, sparkline, and top signals per capital. Supports conditional requests via `If-None-Match` (returns 304 when data has not changed).","tags":["mind"],"parameters":[{"name":"days","in":"query","required":false,"description":"Length of the trailing analysis window (default 30).","schema":{"type":"integer"}},{"name":"disease","in":"query","required":false,"description":"Optional keyword — narrows the capital breakdown to signals matching this topic.","schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"$ref":"#/components/responses/MindSuccess"},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-agent-guidance":{"whenToUse":"The question is about money, compute, networks or data flowing through the AI economy — funding momentum, infrastructure build-out, concentration of attention.","nextEndpoints":["trends","batch"],"notes":["Derived from the platform's own curated signal feed, not a market data vendor. It measures published attention and announced capital, not settled transactions."]},"x-mcp-tool":"get_mind_signal","x-sdk-method":"getMind","x-a2a-skill":"mind_signal","x-catalog-id":"mind","x-examples":["/api/v1/mind?days=30","/api/v1/mind?days=90&disease=diabetes"]},"options":{"operationId":"mindPreflight","summary":"CORS preflight","tags":["mind"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/hope":{"get":{"operationId":"getHopeSignal","summary":"Hope clinical-trial & cure-research signal","description":"Returns the Hope Signal: live clinical trial counts (sourced from ClinicalTrials.gov), a paginated cure-research index from our database, and platform stats. Sections can be requested individually via the `include` parameter. Research results support cursor-based or offset pagination.","tags":["hope"],"parameters":[{"name":"include","in":"query","required":false,"description":"trials, research, stats (default all).","schema":{"type":"string"}},{"name":"disease","in":"query","required":false,"description":"Filter research articles by disease name.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max research articles (default 5).","schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"description":"Forward pagination cursor from _meta.","schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"Zero-based offset. Ignored when `cursor` is supplied.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"$ref":"#/components/responses/HopeSuccess"},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-agent-guidance":{"whenToUse":"You want the headline state of cure progress — how much active trial activity exists, per disease, plus the latest curated research reading.","nextEndpoints":["trials-search","trials-landscape"],"notes":["The `trials` block is a US ClinicalTrials.gov census kept separately from the multi-registry world index. Do NOT add the two together. For worldwide, deduplicated trial evidence use /api/v1/trials/*."]},"x-mcp-tool":"get_hope_signal","x-sdk-method":"getHope","x-a2a-skill":"hope_signal","x-catalog-id":"hope","x-examples":["/api/v1/hope","/api/v1/hope?include=research&disease=diabetes&limit=10"]},"options":{"operationId":"hopePreflight","summary":"CORS preflight","tags":["hope"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/trends":{"get":{"operationId":"getTrendsSignal","summary":"Trends signal — feed shape & crypto TGE lens","description":"Returns the Trends Signal: (1) Signal Intelligence — live feed volume, 7-day momentum, and where attention is concentrating across categories and research domains, derived from every story and study the Wire has ingested; and (2) the curated 2026 crypto token-generation-event (TGE) funding list read through the Cure Protocol lens, with a distribution score (how much capital widens access vs concentrates in insiders) and a live cure-capital contrast. Sections can be requested individually via `include`. Supports conditional requests via `If-None-Match` (returns 304 when data has not changed).","tags":["trends"],"parameters":[{"name":"include","in":"query","required":false,"description":"signal, crypto (default all).","schema":{"type":"string"}},{"name":"series","in":"query","required":false,"description":"Set false to drop the daily time series.","schema":{"type":"boolean"}},{"name":"disease","in":"query","required":false,"description":"Optional keyword — narrows the signal section to matching stories.","schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"$ref":"#/components/responses/TrendsSuccess"},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-agent-guidance":{"whenToUse":"You need attention dynamics — what is accelerating or decelerating in coverage — or the crypto capital-distribution reading.","nextEndpoints":["mind","batch"],"notes":[]},"x-mcp-tool":"get_trends_signal","x-sdk-method":"getTrends","x-a2a-skill":"trends_signal","x-catalog-id":"trends","x-examples":["/api/v1/trends","/api/v1/trends?include=crypto","/api/v1/trends?series=false"]},"options":{"operationId":"trendsPreflight","summary":"CORS preflight","tags":["trends"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/batch":{"get":{"operationId":"getBatch","summary":"Batch — every signal in one round-trip","description":"Fetch mind, hope, and trends together in a single request. Each signal is returned as its own sub-envelope so a partial upstream failure never fails the whole call.","tags":["batch"],"parameters":[{"name":"include","in":"query","required":false,"description":"mind, hope, trends (default all).","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"Forwarded to the mind signal.","schema":{"type":"integer"}},{"name":"series","in":"query","required":false,"description":"Forwarded to the trends signal.","schema":{"type":"boolean"}},{"name":"disease","in":"query","required":false,"description":"Forwarded to every composed signal to narrow results.","schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Batch response with per-signal sub-envelopes."},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"x-agent-guidance":{"whenToUse":"You want a broad orientation on the platform in one call, or you are rate-limit sensitive — batch costs ONE rate-limit slot instead of three.","nextEndpoints":["trials-search"],"notes":["A signal that fails returns a 503 sub-envelope in place of its data; the surrounding call still succeeds. Check each sub-envelope before using it."]},"x-mcp-tool":"get_batch_signals","x-sdk-method":"getBatch","x-catalog-id":"batch","x-examples":["/api/v1/batch","/api/v1/batch?include=mind,trends&days=90"]},"options":{"operationId":"batchPreflight","summary":"CORS preflight","tags":["batch"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/keys":{"post":{"operationId":"mintApiKey","summary":"Mint a self-serve API key","description":"Create a new API key. The raw key is returned exactly once — store it securely.","tags":["access"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["label"],"properties":{"label":{"type":"string","maxLength":100}}}}}},"responses":{"201":{"description":"Key created. The raw key is in the response body."},"400":{"$ref":"#/components/responses/BadRequest"}},"x-agent-guidance":{"whenToUse":"You are being rate-limited as an anonymous caller and want a higher quota.","nextEndpoints":[],"notes":[]},"x-catalog-id":"keys"},"options":{"operationId":"keysPreflight","summary":"CORS preflight","tags":["access"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/webhooks":{"post":{"operationId":"createWebhook","summary":"Register a webhook subscription","description":"Subscribe a URL to receive HMAC-signed POST when signal data changes.","tags":["access"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"events":{"type":"string","description":"Comma-separated: mind,hope,trends (default all)."},"label":{"type":"string","maxLength":100}}}}}},"responses":{"201":{"description":"Subscription created. The signing secret is in the response body (shown once)."},"400":{"$ref":"#/components/responses/BadRequest"}},"x-agent-guidance":{"whenToUse":"You want to be told when a signal changes instead of polling.","nextEndpoints":[],"notes":[]},"x-catalog-id":"webhooks"},"get":{"operationId":"getWebhook","summary":"Get webhook subscription status","tags":["access"],"parameters":[{"name":"events","in":"query","required":false,"description":"mind, hope, trends (default all) — on POST body.","schema":{"type":"string"}},{"name":"id","in":"query","required":false,"description":"Subscription id — on GET (status) and DELETE.","schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription status."},"404":{"description":"Not found."}},"description":"Register a URL to receive an HMAC-signed POST when a signal changes. Delivery is retried up to three times with exponential backoff.","x-agent-guidance":{"whenToUse":"You want to be told when a signal changes instead of polling.","nextEndpoints":[],"notes":[]},"x-catalog-id":"webhooks"},"delete":{"operationId":"deleteWebhook","summary":"Revoke a webhook subscription","tags":["access"],"parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription revoked."},"404":{"description":"Not found."}},"description":"Register a URL to receive an HMAC-signed POST when a signal changes. Delivery is retried up to three times with exponential backoff.","x-agent-guidance":{"whenToUse":"You want to be told when a signal changes instead of polling.","nextEndpoints":[],"notes":[]},"x-catalog-id":"webhooks"},"options":{"operationId":"webhooksPreflight","summary":"CORS preflight","tags":["access"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1":{"get":{"operationId":"getDiscovery","summary":"API discovery — list all public endpoints","description":"Human-readable + machine-readable entry point listing every public endpoint, its methods, params, and purpose.","tags":["meta"],"responses":{"200":{"description":"Endpoint catalog."}}},"options":{"operationId":"discoveryPreflight","summary":"CORS preflight","tags":["meta"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/trials/search":{"get":{"operationId":"searchWorldTrials","summary":"Search the world clinical-trial registry store","description":"Search trials collected from ClinicalTrials.gov and ISRCTN and deduplicated by exact cross-registry identifier match. Each result names its source registries and links to every source record. Registry metadata only — no participant-level data.","tags":["signal"],"parameters":[{"name":"q","in":"query","required":false,"description":"Free-text query matched (AND across tokens) over title, conditions, interventions and sponsor. British/American spellings and simple plurals are treated as the same token.","schema":{"type":"string"},"example":"type 1 diabetes islet"},{"name":"condition","in":"query","required":false,"description":"EXACT condition term as recorded by a registry. Use `q` unless you already know the registry's exact string — an exact match on a guessed term returns zero rows.","schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"description":"Cure Protocol topic id — one of the 15 curated disease domains. List them via /api/v1/trials/stats.","schema":{"type":"string"},"example":"endocrinology"},{"name":"registry","in":"query","required":false,"description":"Restrict to trials carrying a record from one primary registry. Omit for full-index (all-registry) scope.","schema":{"type":"string","enum":["clinicaltrials_gov","isrctn"]}},{"name":"status","in":"query","required":false,"description":"Normalized recruitment status, or the shorthand `active` for the recruiting + active + not_yet_recruiting group.","schema":{"type":"string","enum":["active","recruiting","not_yet_recruiting","completed","terminated","withdrawn","halted","unknown"]},"example":"active"},{"name":"phase","in":"query","required":false,"description":"One or more trial phases, comma-separated. Matches if the trial carries ANY listed phase. Phase is recorded for only part of the corpus — see fieldCompleteness before treating a phase filter as exhaustive.","schema":{"type":"string"},"example":"1,2"},{"name":"studyType","in":"query","required":false,"description":"Normalized study type.","schema":{"type":"string","enum":["interventional","observational","expanded_access","other"]}},{"name":"intervention","in":"query","required":false,"description":"Free-text match against intervention names and descriptions — the practical way to isolate a MODALITY (e.g. \"stem cell\", \"encapsulation\", \"gene edit\", \"xenotransplant\").","schema":{"type":"string"},"example":"islet transplantation"},{"name":"sponsor","in":"query","required":false,"description":"Free-text match against the sponsor name.","schema":{"type":"string"},"example":"Vertex"},{"name":"country","in":"query","required":false,"description":"Match a recruiting country or site country (case-insensitive). Derived from registry location records; not every record declares a location.","schema":{"type":"string"},"example":"United States"},{"name":"minEnrollment","in":"query","required":false,"description":"Minimum normalized enrollment (actual where reported, otherwise target).","schema":{"type":"integer"}},{"name":"maxEnrollment","in":"query","required":false,"description":"Maximum normalized enrollment.","schema":{"type":"integer"}},{"name":"resultsAvailable","in":"query","required":false,"description":"Restrict to trials with (true) or without (false) results posted. See /api/v1/trials/landscape for how each registry's results flag is derived.","schema":{"type":"boolean"}},{"name":"crossRegistry","in":"query","required":false,"description":"true = only trials registered in more than one registry; false = only single-registry trials.","schema":{"type":"boolean"}},{"name":"updatedSince","in":"query","required":false,"description":"Only trials whose registry record was last updated on or after this date.","schema":{"type":"string"},"example":"2026-01-01"},{"name":"startedAfter","in":"query","required":false,"description":"Only trials with a study start date on or after this date.","schema":{"type":"string"}},{"name":"startedBefore","in":"query","required":false,"description":"Only trials with a study start date on or before this date.","schema":{"type":"string"}},{"name":"completionAfter","in":"query","required":false,"description":"Only trials with a completion date on or after this date.","schema":{"type":"string"}},{"name":"completionBefore","in":"query","required":false,"description":"Only trials with a completion date on or before this date.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Result ordering (descending, except canonicalId). Default lastUpdated — newest registry activity first.","schema":{"type":"string","enum":["lastUpdated","startDate","enrollment","canonicalId"]}},{"name":"include","in":"query","required":false,"description":"Extra evidence blocks: `eligibilityText` (full inclusion/exclusion prose, large), `raw` is NOT available here — use the detail endpoint for raw payloads.","schema":{"type":"string","enum":["eligibilityText"]}},{"name":"page","in":"query","required":false,"description":"Page number, 1-based. Default 1. _meta.pagination.hasMore and _meta.pagination.nextUrl tell you whether and how to continue.","schema":{"type":"integer"}},{"name":"pageSize","in":"query","required":false,"description":"Results per page (default 50). `limit` is accepted as an alias.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Paginated canonical trial summaries with per-registry attribution."},"400":{"$ref":"#/components/responses/BadRequest"}},"x-agent-guidance":{"whenToUse":"You need actual trial RECORDS — a list of studies matching a clinical question, with provenance you can cite.","nextEndpoints":["trials-detail","trials-coverage","trials-landscape","trials-registrations"],"notes":["Scope is worldwide by default. Passing `registry` narrows the answer to SINGLE-REGISTRY evidence — say so if you report it.","Isolate a treatment MODALITY with `intervention`, not with `q` alone: q also matches title and sponsor text.","Filters compose with AND. Every filter you add can silently exclude records where that field was never reported by the registry — check data.fieldCompleteness before calling a filtered count exhaustive.","Paginate with page/pageSize and follow _meta.pagination.nextUrl until hasMore is false."]},"x-mcp-tool":"search_world_trials","x-sdk-method":"searchTrials","x-a2a-skill":"world_trial_search","x-catalog-id":"trials-search","x-examples":["/api/v1/trials/search?q=type+1+diabetes&status=active&pageSize=25","/api/v1/trials/search?q=type+1+diabetes&intervention=islet&status=active","/api/v1/trials/search?topic=oncology&phase=3&country=United+States&resultsAvailable=false"]},"options":{"operationId":"trialsSearchPreflight","summary":"CORS preflight","tags":["signal"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/trials/coverage":{"get":{"operationId":"getTrialCoverage","summary":"Cross-registry coverage and duplicate-registration analysis","description":"For a condition or topic, how many DISTINCT real-world trials exist across ClinicalTrials.gov and ISRCTN, and how many of them are the same trial registered in more than one registry. Returns the distinct count, per-registry contribution, per-registry exclusive counts, the pairwise overlap, and the count inflation that would result from querying each registry separately and adding the results. Only exact shared identifiers are merged, so the duplicate figure is a floor, not a ceiling.","tags":["signal"],"parameters":[{"name":"q","in":"query","required":false,"description":"Free-text query matched (AND across tokens) over title, conditions, interventions and sponsor. British/American spellings and simple plurals are treated as the same token.","schema":{"type":"string"},"example":"type 1 diabetes islet"},{"name":"condition","in":"query","required":false,"description":"EXACT condition term as recorded by a registry. Use `q` unless you already know the registry's exact string — an exact match on a guessed term returns zero rows.","schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"description":"Cure Protocol topic id — one of the 15 curated disease domains. List them via /api/v1/trials/stats.","schema":{"type":"string"},"example":"endocrinology"},{"name":"registry","in":"query","required":false,"description":"Restrict to trials carrying a record from one primary registry. Omit for full-index (all-registry) scope.","schema":{"type":"string","enum":["clinicaltrials_gov","isrctn"]}},{"name":"status","in":"query","required":false,"description":"Normalized recruitment status, or the shorthand `active` for the recruiting + active + not_yet_recruiting group.","schema":{"type":"string","enum":["active","recruiting","not_yet_recruiting","completed","terminated","withdrawn","halted","unknown"]},"example":"active"},{"name":"phase","in":"query","required":false,"description":"One or more trial phases, comma-separated. Matches if the trial carries ANY listed phase. Phase is recorded for only part of the corpus — see fieldCompleteness before treating a phase filter as exhaustive.","schema":{"type":"string"},"example":"1,2"},{"name":"studyType","in":"query","required":false,"description":"Normalized study type.","schema":{"type":"string","enum":["interventional","observational","expanded_access","other"]}},{"name":"intervention","in":"query","required":false,"description":"Free-text match against intervention names and descriptions — the practical way to isolate a MODALITY (e.g. \"stem cell\", \"encapsulation\", \"gene edit\", \"xenotransplant\").","schema":{"type":"string"},"example":"islet transplantation"},{"name":"sponsor","in":"query","required":false,"description":"Free-text match against the sponsor name.","schema":{"type":"string"},"example":"Vertex"},{"name":"country","in":"query","required":false,"description":"Match a recruiting country or site country (case-insensitive). Derived from registry location records; not every record declares a location.","schema":{"type":"string"},"example":"United States"},{"name":"minEnrollment","in":"query","required":false,"description":"Minimum normalized enrollment (actual where reported, otherwise target).","schema":{"type":"integer"}},{"name":"maxEnrollment","in":"query","required":false,"description":"Maximum normalized enrollment.","schema":{"type":"integer"}},{"name":"resultsAvailable","in":"query","required":false,"description":"Restrict to trials with (true) or without (false) results posted. See /api/v1/trials/landscape for how each registry's results flag is derived.","schema":{"type":"boolean"}},{"name":"crossRegistry","in":"query","required":false,"description":"true = only trials registered in more than one registry; false = only single-registry trials.","schema":{"type":"boolean"}},{"name":"updatedSince","in":"query","required":false,"description":"Only trials whose registry record was last updated on or after this date.","schema":{"type":"string"},"example":"2026-01-01"},{"name":"startedAfter","in":"query","required":false,"description":"Only trials with a study start date on or after this date.","schema":{"type":"string"}},{"name":"startedBefore","in":"query","required":false,"description":"Only trials with a study start date on or before this date.","schema":{"type":"string"}},{"name":"completionAfter","in":"query","required":false,"description":"Only trials with a completion date on or after this date.","schema":{"type":"string"}},{"name":"completionBefore","in":"query","required":false,"description":"Only trials with a completion date on or before this date.","schema":{"type":"string"}}],"responses":{"200":{"description":"Distinct trial count, per-registry breakdown, overlap matrix and duplicate-registration analysis."}},"x-agent-guidance":{"whenToUse":"Before you state a worldwide count. This is the endpoint that tells you whether a number is a true distinct count or an inflated sum.","nextEndpoints":["trials-search","trials-landscape"],"notes":["`inflation` is the error you would have made by querying each registry separately and adding. Quote the distinct count, not the sum."]},"x-mcp-tool":"get_trial_coverage","x-sdk-method":"getTrialCoverage","x-a2a-skill":"world_trial_coverage","x-catalog-id":"trials-coverage","x-examples":["/api/v1/trials/coverage?q=type+1+diabetes","/api/v1/trials/coverage?topic=oncology&status=active"]},"options":{"operationId":"trialsCoveragePreflight","summary":"CORS preflight","tags":["signal"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/trials/landscape":{"get":{"operationId":"getTrialLandscape","summary":"Derived landscape structure and change over time","description":"The shape of research on a condition rather than a list of trials: phase, status and study-type mix, sponsor concentration and top sponsors, enrollment scale, the completed-but-results-never-reported gap, momentum over the last 30/90/365 days, and a real diff against a stored earlier snapshot of the same query. Every distribution carries the denominator that declared the field, and fieldCompleteness reports which registries declare it at all — so a distribution built from a single registry is never presented as a world-scale fact. Descriptive only: not a systematic review and not clinical advice.","tags":["signal"],"parameters":[{"name":"q","in":"query","required":false,"description":"Free-text query matched (AND across tokens) over title, conditions, interventions and sponsor. British/American spellings and simple plurals are treated as the same token.","schema":{"type":"string"},"example":"type 1 diabetes islet"},{"name":"condition","in":"query","required":false,"description":"EXACT condition term as recorded by a registry. Use `q` unless you already know the registry's exact string — an exact match on a guessed term returns zero rows.","schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"description":"Cure Protocol topic id — one of the 15 curated disease domains. List them via /api/v1/trials/stats.","schema":{"type":"string"},"example":"endocrinology"},{"name":"registry","in":"query","required":false,"description":"Restrict to trials carrying a record from one primary registry. Omit for full-index (all-registry) scope.","schema":{"type":"string","enum":["clinicaltrials_gov","isrctn"]}},{"name":"status","in":"query","required":false,"description":"Normalized recruitment status, or the shorthand `active` for the recruiting + active + not_yet_recruiting group.","schema":{"type":"string","enum":["active","recruiting","not_yet_recruiting","completed","terminated","withdrawn","halted","unknown"]},"example":"active"},{"name":"phase","in":"query","required":false,"description":"One or more trial phases, comma-separated. Matches if the trial carries ANY listed phase. Phase is recorded for only part of the corpus — see fieldCompleteness before treating a phase filter as exhaustive.","schema":{"type":"string"},"example":"1,2"},{"name":"studyType","in":"query","required":false,"description":"Normalized study type.","schema":{"type":"string","enum":["interventional","observational","expanded_access","other"]}},{"name":"intervention","in":"query","required":false,"description":"Free-text match against intervention names and descriptions — the practical way to isolate a MODALITY (e.g. \"stem cell\", \"encapsulation\", \"gene edit\", \"xenotransplant\").","schema":{"type":"string"},"example":"islet transplantation"},{"name":"sponsor","in":"query","required":false,"description":"Free-text match against the sponsor name.","schema":{"type":"string"},"example":"Vertex"},{"name":"country","in":"query","required":false,"description":"Match a recruiting country or site country (case-insensitive). Derived from registry location records; not every record declares a location.","schema":{"type":"string"},"example":"United States"},{"name":"minEnrollment","in":"query","required":false,"description":"Minimum normalized enrollment (actual where reported, otherwise target).","schema":{"type":"integer"}},{"name":"maxEnrollment","in":"query","required":false,"description":"Maximum normalized enrollment.","schema":{"type":"integer"}},{"name":"resultsAvailable","in":"query","required":false,"description":"Restrict to trials with (true) or without (false) results posted. See /api/v1/trials/landscape for how each registry's results flag is derived.","schema":{"type":"boolean"}},{"name":"crossRegistry","in":"query","required":false,"description":"true = only trials registered in more than one registry; false = only single-registry trials.","schema":{"type":"boolean"}},{"name":"updatedSince","in":"query","required":false,"description":"Only trials whose registry record was last updated on or after this date.","schema":{"type":"string"},"example":"2026-01-01"},{"name":"startedAfter","in":"query","required":false,"description":"Only trials with a study start date on or after this date.","schema":{"type":"string"}},{"name":"startedBefore","in":"query","required":false,"description":"Only trials with a study start date on or before this date.","schema":{"type":"string"}},{"name":"completionAfter","in":"query","required":false,"description":"Only trials with a completion date on or after this date.","schema":{"type":"string"}},{"name":"completionBefore","in":"query","required":false,"description":"Only trials with a completion date on or before this date.","schema":{"type":"string"}}],"responses":{"200":{"description":"Structure, per-registry field completeness, evidence gap, momentum and change-since-baseline."}},"x-agent-guidance":{"whenToUse":"You need the SHAPE of a field rather than its members — where the phase mass sits, who sponsors it, whether it is accelerating, how much of it went unreported.","nextEndpoints":["trials-search","trials-coverage"],"notes":["`fieldCompleteness` is not decoration. If phase is recorded for 25% of a registry's records, a phase distribution describes that 25% — say so.","`evidenceGap` reports completed-but-unreported trials per registry and refuses to publish a combined figure when the registries' results flags are not comparable.","`changeSince` is a real diff against a stored earlier snapshot, not a recomputation."]},"x-mcp-tool":"get_trial_landscape","x-sdk-method":"getTrialLandscape","x-a2a-skill":"world_trial_landscape","x-catalog-id":"trials-landscape","x-examples":["/api/v1/trials/landscape?q=type+1+diabetes","/api/v1/trials/landscape?topic=neurology&status=active"]},"options":{"operationId":"trialsLandscapePreflight","summary":"CORS preflight","tags":["signal"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/trials/registrations":{"get":{"operationId":"findTrialRegistrations","summary":"Every registry a given trial is registered in","description":"Given any known identifier — an NCT number, an ISRCTN number, an EU CT number, or a secondary id declared by one registry for another — returns every registration of that same real-world trial, the exact identifier evidence linking them, and which registries it is absent from. Nothing is inferred from title or sponsor similarity.","tags":["signal"],"parameters":[{"name":"id","in":"query","required":true,"description":"Any known identifier, e.g. NCT07093359 or ISRCTN13533177.","schema":{"type":"string"}}],"responses":{"200":{"description":"All registrations of the trial, with link evidence and citation."},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"description":"No trial in the index declares this identifier."}},"x-agent-guidance":{"whenToUse":"You have one identifier from an outside source and need to know whether it is the same study as another identifier you are holding.","nextEndpoints":["trials-detail"],"notes":["Absence from a registry is reported as absence from OUR index of that registry, which is not proof the trial was never registered there."]},"x-mcp-tool":"find_trial_registrations","x-sdk-method":"getTrialRegistrations","x-a2a-skill":"world_trial_registrations","x-catalog-id":"trials-registrations","x-examples":["/api/v1/trials/registrations?id=NCT07093359","/api/v1/trials/registrations?id=ISRCTN13533177"]},"options":{"operationId":"trialsRegistrationsPreflight","summary":"CORS preflight","tags":["signal"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/trials/stats":{"get":{"operationId":"getTrialRegistryStats","summary":"World trial counts with per-registry attribution","description":"Source-record count, deduplicated canonical trial count, active count and the per-registry breakdown, plus the dedup method and each registry licence, last sync time and contract-test verdict. Source records and canonical trials are reported separately and never summed.","tags":["signal"],"responses":{"200":{"description":"Counts and source attribution."}},"x-agent-guidance":{"whenToUse":"First call when orienting on the trial corpus: how big it is, which registries contribute, and what topic ids exist for filtering.","nextEndpoints":["trials-search","sources"],"notes":[]},"x-mcp-tool":"get_trial_stats","x-sdk-method":"getTrialStats","x-a2a-skill":"world_trial_stats","x-catalog-id":"trials-stats","x-examples":["/api/v1/trials/stats"]},"options":{"operationId":"trialsStatsPreflight","summary":"CORS preflight","tags":["signal"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/trials/{canonicalId}":{"get":{"operationId":"getWorldTrial","summary":"One canonical trial with full provenance","description":"Returns the canonical trial plus every source record behind it: registry, source id, source URL, retrieval timestamp, payload checksum and the raw registry payload.","tags":["signal"],"parameters":[{"name":"canonicalId","in":"path","required":true,"description":"Canonical trial id as returned by search — e.g. NCT07093359, ISRCTN13533177 or 2023-505575-69-01.","schema":{"type":"string"}},{"name":"includeRaw","in":"query","required":false,"description":"Include the full raw registry payloads (alias: raw). Default false.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Canonical trial and its source records."},"404":{"description":"No trial with that canonical id."}},"x-agent-guidance":{"whenToUse":"You have a canonicalId and need the complete record, or you need to inspect the untouched registry payload to verify a claim.","nextEndpoints":["trials-registrations","sources"],"notes":["`includeRaw=true` returns the exact registry payload we stored, after contact-field redaction, with its SHA-256. That is the strongest evidence this platform can offer."]},"x-mcp-tool":"get_world_trial","x-sdk-method":"getTrial","x-a2a-skill":"world_trial_record","x-catalog-id":"trials-detail","x-examples":["/api/v1/trials/NCT07093359","/api/v1/trials/NCT07093359?includeRaw=true"]},"options":{"operationId":"trialDetailPreflight","summary":"CORS preflight","tags":["signal"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/sources":{"get":{"operationId":"listRegistrySources","summary":"Upstream registry sources and contract status","description":"Every upstream registry: name, base URL, API type, licence, last successful sync, record count, whether it is in production sync, and its current contract-test verdict.","tags":["meta"],"responses":{"200":{"description":"Source list with provenance and contract status."}},"x-agent-guidance":{"whenToUse":"Before presenting trial evidence as current or worldwide. This endpoint tells you which registries are healthy, when each last synchronised, and which are degraded.","nextEndpoints":["trials-stats","status"],"notes":["A registry with `degraded: true` or a stale `lastSuccessAt` means results are partial. Say so rather than implying full worldwide coverage."]},"x-mcp-tool":"get_registry_sources","x-sdk-method":"getSources","x-a2a-skill":"registry_provenance","x-catalog-id":"sources","x-examples":["/api/v1/sources"]},"options":{"operationId":"sourcesPreflight","summary":"CORS preflight","tags":["meta"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/status":{"get":{"operationId":"getStatus","summary":"Service status & SLO health","description":"Public, coarse operational health for the API. Returns an overall status word (operational | degraded | down), primary-dependency reachability, and per-route SLO compliance booleans over a recent window. Exposes no raw latencies or internal topology. Safe for agents and uptime monitors to poll. No authentication required.","tags":["status"],"responses":{"200":{"description":"Service is operational or degraded (see the `status` field)."},"503":{"description":"A required dependency is down."}},"x-agent-guidance":{"whenToUse":"A call failed and you need to know whether the platform is degraded before retrying or reporting an error.","nextEndpoints":["sources"],"notes":[]},"x-sdk-method":"getStatus","x-catalog-id":"status","x-examples":["/api/v1/status"]},"options":{"operationId":"statusPreflight","summary":"CORS preflight","tags":["status"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/keys/usage":{"get":{"operationId":"getKeyUsage","summary":"API key usage analytics","description":"Returns per-key call volume, error rates, and latency over 7-day and 30-day windows, plus the current rate-limit window state. Requires authentication with the key being queried.","tags":["access"],"security":[{"apiKeyHeader":[]},{"apiKeyAuth":[]}],"responses":{"200":{"description":"Usage statistics returned."},"401":{"description":"API key required or invalid."}},"parameters":[{"name":"window","in":"query","required":false,"description":"Reporting window for the usage breakdown (GET).","schema":{"type":"string","enum":["7d","30d"]}}],"x-agent-guidance":{"whenToUse":"You need to know your own consumption or want to raise your own rate limit.","nextEndpoints":[],"notes":[]},"x-sdk-method":"getUsage","x-catalog-id":"usage"},"patch":{"operationId":"updateKeySettings","summary":"Tune rate limit or rename key","description":"Self-serve rate-limit tuning. Update the key's rate limit (120–10,000 req/window) or rename it. Takes effect immediately.","tags":["access"],"security":[{"apiKeyHeader":[]},{"apiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rateLimit":{"type":"integer","minimum":120,"maximum":10000,"description":"New requests-per-window limit."},"label":{"type":"string","maxLength":100,"description":"Rename the key."}}}}}},"responses":{"200":{"description":"Key settings updated."},"400":{"description":"Invalid input."},"401":{"description":"API key required or invalid."}},"x-agent-guidance":{"whenToUse":"You need to know your own consumption or want to raise your own rate limit.","nextEndpoints":[],"notes":[]},"x-sdk-method":"getUsage","x-catalog-id":"usage"},"options":{"operationId":"keyUsagePreflight","summary":"CORS preflight","tags":["access"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/sdk":{"get":{"operationId":"downloadSdk","summary":"Download TypeScript SDK","description":"Returns a ready-to-use TypeScript client (lew-sdk.ts) generated from the live API catalog. Zero dependencies, works in Node and the browser.","tags":["meta"],"responses":{"200":{"description":"TypeScript SDK file.","content":{"text/plain":{"schema":{"type":"string"}}}}},"x-agent-guidance":{"whenToUse":"You are writing TypeScript and want method-per-capability access without hand-rolling fetch calls.","nextEndpoints":[],"notes":[]},"x-catalog-id":"sdk","x-examples":["/api/v1/sdk"]},"options":{"operationId":"sdkPreflight","summary":"CORS preflight","tags":["meta"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/trials/{canonicalId}/related":{"get":{"operationId":"getTrialsRelated","summary":"World trials — related research (literature sidecar)","description":"The published research attached to one trial: the publications the registry itself declares, the Europe PMC records whose indexed text mentions the trial’s registration identifiers, and the OTHER registry identifiers those publications mention — each flagged with whether we hold it. A read-only sidecar: nothing it returns enters the index, any count, or deduplication.","tags":["signal"],"responses":{"200":{"description":"The published research attached to one trial: the publications the registry itself declares, the Europe PMC records whose indexed text mentions the trial’s registration identifiers, and the OTHER registry identifiers those publications mention — each flagged with whether we hold it. A read-only sidecar: nothing it returns enters the index, any count, or deduplication."}},"parameters":[{"name":"canonicalId","in":"path","required":true,"description":"Canonical trial id, or any identifier the trial is known by — e.g. NCT04333823 or ISRCTN50189673.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Comma-separated sections: declared, literature, crossref. Default all three. crossref is derived from literature.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum literature hits per registration identifier searched. Default 25.","schema":{"type":"integer"}}],"x-agent-guidance":{"whenToUse":"You have a trial in the index and need the evidence published around it — results papers, secondary analyses, protocol papers — or you want to discover sibling and follow-on registrations recorded in other registries through the literature.","nextEndpoints":["trials-detail","trials-registrations","sources"],"notes":["This is a SIDECAR. Nothing here is part of the trial index or of any count. An identifier surfaced under crossRegistryMentions with inIndex=false is a literature mention only — we hold no record for it, so do not describe it as a trial in this index.","Literature linkage is an identifier MENTION in Europe PMC indexed text or accession lists. It can be a citation, a secondary analysis or a passing reference — it is not by itself proof that the publication reports this trial’s results. Use registryDeclared items with kind=results for that.","registryDeclared needs no network and is always present. If Europe PMC is unreachable the response stays 200 with _meta.degraded=true and an empty literature section — never silently zero."]},"x-mcp-tool":"get_trial_related_research","x-sdk-method":"getTrialRelatedResearch","x-a2a-skill":"trial_related_research","x-catalog-id":"trials-related","x-examples":["/api/v1/trials/NCT04333823/related","/api/v1/trials/ISRCTN50189673/related?include=crossref&limit=100"]},"options":{"operationId":"trials-relatedPreflight","summary":"CORS preflight","tags":["signal"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/contract":{"get":{"operationId":"getContract","summary":"Contract integrity report","description":"Machine-readable proof that the discovery inventory, OpenAPI spec, MCP tool catalog, A2A skills, generated SDK and on-site documentation all describe the same capabilities. Returns 200 when they agree, 500 with the exact disagreements when they do not.","tags":["meta"],"responses":{"200":{"description":"Machine-readable proof that the discovery inventory, OpenAPI spec, MCP tool catalog, A2A skills, generated SDK and on-site documentation all describe the same capabilities. Returns 200 when they agree, 500 with the exact disagreements when they do not."}},"x-agent-guidance":{"whenToUse":"You want to trust the documentation before building against it, or you are diagnosing a mismatch between the spec and real behaviour.","nextEndpoints":[],"notes":["The same checks run at build time, so a drifting capability fails deployment rather than shipping."]},"x-catalog-id":"contract","x-examples":["/api/v1/contract"]},"options":{"operationId":"contractPreflight","summary":"CORS preflight","tags":["meta"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/openapi.json":{"get":{"operationId":"getOpenapi","summary":"OpenAPI 3.1 spec","description":"Full machine-readable schema for every endpoint. Import into Postman, generate SDKs, or feed to a codegen tool.","tags":["meta"],"responses":{"200":{"description":"Full machine-readable schema for every endpoint. Import into Postman, generate SDKs, or feed to a codegen tool."}},"x-agent-guidance":{"whenToUse":"You want typed access or want to generate your own client.","nextEndpoints":[],"notes":[]},"x-catalog-id":"openapi","x-examples":["/api/v1/openapi.json"]},"options":{"operationId":"openapiPreflight","summary":"CORS preflight","tags":["meta"],"responses":{"204":{"description":"Preflight accepted."}}}},"/api/v1/mcp":{"post":{"operationId":"postMcp","summary":"MCP — Model Context Protocol server","description":"Streamable-HTTP MCP endpoint. Exposes every signal and the complete world-trials workflow as callable tools, plus a self-describing capability tool.","tags":["signal"],"responses":{"200":{"description":"Streamable-HTTP MCP endpoint. Exposes every signal and the complete world-trials workflow as callable tools, plus a self-describing capability tool."}},"x-agent-guidance":{"whenToUse":"You are an LLM client that speaks MCP. This is the lowest-friction way in — no key, read-only.","nextEndpoints":[],"notes":["Call list_capabilities first to get the whole inventory, the workflows and the discovery links in one response."]},"x-catalog-id":"mcp"},"options":{"operationId":"mcpPreflight","summary":"CORS preflight","tags":["signal"],"responses":{"204":{"description":"Preflight accepted."}}}}},"components":{"securitySchemes":{"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"API key via `X-Api-Key` header. Optional — omit for anonymous access (120 req/min per IP)."},"apiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"API key via `Authorization: Bearer <key>` header. Optional — omit for anonymous access."}},"parameters":{"IfNoneMatch":{"name":"If-None-Match","in":"header","required":false,"description":"ETag value from a previous response. If the data has not changed, the server returns 304 with no body.","schema":{"type":"string"}}},"schemas":{"EnvelopeMeta":{"type":"object","required":["api","version","schemaVersion","correlationId","generatedAt"],"properties":{"api":{"type":"string","description":"Human-readable API name."},"version":{"type":"string","description":"API version (semver-like)."},"schemaVersion":{"type":"string","description":"Response-body schema version; changes when the data shape changes."},"correlationId":{"type":"string","format":"uuid","description":"Unique request correlation ID."},"generatedAt":{"type":"string","format":"date-time"},"documentation":{"type":"string","format":"uri"},"license":{"type":"string"},"degraded":{"type":"boolean","description":"True if an upstream dependency was unavailable and fallback data was used."},"stale":{"type":"boolean","description":"True if the data is a cached snapshot rather than live."}}},"MindCapitalCard":{"type":"object","required":["key","count","share","good","bad","strained","net","directions","top"],"properties":{"key":{"type":"string","enum":["M","I","N","D"],"description":"Capital letter."},"count":{"type":"integer","description":"Number of signals in this capital."},"share":{"type":"integer","description":"Percentage of total signals (independently rounded)."},"good":{"type":"integer"},"bad":{"type":"integer"},"strained":{"type":"integer"},"net":{"type":"integer","description":"good − bad."},"directions":{"type":"object","additionalProperties":{"type":"integer"},"description":"Counts keyed by direction label."},"top":{"type":"array","items":{"type":"object"},"description":"Top signals for this capital."}}},"Conscience":{"type":"object","required":["score","verdict","diversityShare","widening","concentrating"],"properties":{"score":{"type":"number"},"verdict":{"type":"string"},"diversityShare":{"type":"number"},"widening":{"type":"integer"},"concentrating":{"type":"integer"}}},"MindData":{"type":"object","required":["windowDays","total","signalsPerDay","sparkline","computedAt","capitals","conscience"],"properties":{"windowDays":{"type":"integer"},"total":{"type":"integer","description":"Total signals in the lookback window."},"signalsPerDay":{"type":"number"},"sparkline":{"type":"array","items":{"type":"integer"},"description":"Daily signal counts (most recent last)."},"computedAt":{"type":"string","format":"date-time"},"capitals":{"type":"array","items":{"$ref":"#/components/schemas/MindCapitalCard"},"minItems":4,"maxItems":4},"conscience":{"$ref":"#/components/schemas/Conscience"},"curePulse":{"description":"Optional cure-pulse overlay."},"schemaVersion":{"type":"string"}}},"TrialFreshness":{"type":"object","properties":{"stale":{"type":"boolean"},"available":{"type":"boolean"},"partial":{"type":"boolean"},"computedAt":{"type":"string","format":"date-time"},"ageSeconds":{"type":"number"},"note":{"type":"string"}}},"DiseaseTrialCount":{"type":"object","required":["id","label"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"activeTrials":{"type":["integer","null"]}}},"TrialsBlock":{"type":"object","properties":{"globalActiveTrials":{"type":["integer","null"]},"byDisease":{"type":"array","items":{"$ref":"#/components/schemas/DiseaseTrialCount"}},"source":{"type":"string"},"message":{"type":"string"},"_freshness":{"$ref":"#/components/schemas/TrialFreshness"}}},"PaginationMeta":{"type":"object","required":["limit","offset","total","returned","hasMore"],"properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"},"returned":{"type":"integer"},"hasMore":{"type":"boolean"},"nextCursor":{"type":["string","null"]},"nextOffset":{"type":["integer","null"]}}},"ResearchArticle":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string","format":"uri"},"source":{"type":"string"},"publishedAt":{"type":["string","null"],"format":"date-time"},"domain":{"type":["string","null"]},"significance":{"type":["string","null"]}}},"ResearchBlock":{"type":"object","properties":{"count":{"type":"integer"},"source":{"type":"string"},"newestPublishedAt":{"type":["string","null"],"format":"date-time"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"},"articles":{"type":"array","items":{"$ref":"#/components/schemas/ResearchArticle"}}}},"StatsBlock":{"type":"object","properties":{"totalWireSignals":{"type":"integer"},"totalCureResearch":{"type":"integer"},"diseaseFrontiers":{"type":"integer"},"languages":{"type":"integer"}}},"HopeData":{"type":"object","properties":{"trials":{"$ref":"#/components/schemas/TrialsBlock"},"research":{"$ref":"#/components/schemas/ResearchBlock"},"stats":{"$ref":"#/components/schemas/StatsBlock"}},"description":"Sections present depend on the `include` query parameter."},"TrendsData":{"type":"object","properties":{"signalIntelligence":{"type":"object","nullable":true,"description":"Live shape of the feed. Null when not requested via `include`.","properties":{"totals":{"type":"object","properties":{"signals":{"type":"integer"},"wire":{"type":"integer"},"cure":{"type":"integer"},"trending":{"type":"integer"},"last7":{"type":"integer"},"prev7":{"type":"integer"},"momentum":{"type":"integer","description":"Percent change, trailing 7 days vs the prior 7."}}},"timeSeries":{"type":"array","description":"30-day daily counts. Empty when `series=false`.","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"wire":{"type":"integer"},"cure":{"type":"integer"}}}},"categories":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"integer"}}}},"domains":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"integer"}}}}}},"cryptoTge":{"type":"object","nullable":true,"description":"2026 crypto TGE funding read through the Cure Protocol lens. Null when not requested.","properties":{"totalCapitalM":{"type":"number"},"count":{"type":"integer"},"distributing":{"type":"integer"},"concentrating":{"type":"integer"},"mixed":{"type":"integer"},"distributionScore":{"type":"integer","description":"0..100 — community-first vs insider-first weighting."},"verdict":{"type":"string"},"projects":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"ticker":{"type":"string"},"category":{"type":"string"},"capitalM":{"type":"number"},"capitalKind":{"type":"string"},"window":{"type":"string"},"lens":{"type":"string","enum":["distributing","concentrating","mixed"]},"note":{"type":"string"}}}},"cureContrast":{"type":"object","nullable":true,"properties":{"diseasesTracked":{"type":"integer"},"researchSignals":{"type":"integer"}}}}},"window":{"type":"object","properties":{"days":{"type":"integer"}}},"computedAt":{"type":"string","format":"date-time"},"schemaVersion":{"type":"string"}},"description":"Sections present depend on the `include` query parameter."},"ApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","correlationId","timestamp","retryable","schemaVersion"],"properties":{"code":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"correlationId":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"retryable":{"type":"boolean"},"retryAfterSeconds":{"type":"integer"},"schemaVersion":{"type":"string"}}}}}},"responses":{"MindSuccess":{"description":"MIND signal computed successfully.","headers":{"ETag":{"schema":{"type":"string"},"description":"Weak ETag for conditional requests."},"X-Correlation-Id":{"schema":{"type":"string"}},"X-Schema-Version":{"schema":{"type":"string"}},"X-Data-Freshness":{"schema":{"type":"string","enum":["fresh","stale","degraded"]}},"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current rate-limit window resets."},"X-Consumer-Tier":{"schema":{"type":"string","enum":["anonymous","public","partner","internal"]}}},"content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"$ref":"#/components/schemas/MindData"},"_meta":{"$ref":"#/components/schemas/EnvelopeMeta"}}}}}},"HopeSuccess":{"description":"Hope signal computed successfully.","headers":{"ETag":{"schema":{"type":"string"}},"X-Correlation-Id":{"schema":{"type":"string"}},"X-Schema-Version":{"schema":{"type":"string"}},"X-Data-Freshness":{"schema":{"type":"string","enum":["fresh","stale","degraded"]}},"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"X-Consumer-Tier":{"schema":{"type":"string","enum":["anonymous","public","partner","internal"]}}},"content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"$ref":"#/components/schemas/HopeData"},"_meta":{"$ref":"#/components/schemas/EnvelopeMeta"}}}}}},"TrendsSuccess":{"description":"Trends signal computed successfully.","headers":{"ETag":{"schema":{"type":"string"}},"X-Correlation-Id":{"schema":{"type":"string"}},"X-Schema-Version":{"schema":{"type":"string"}},"X-Data-Freshness":{"schema":{"type":"string","enum":["fresh","stale","degraded"]}},"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"X-Consumer-Tier":{"schema":{"type":"string","enum":["anonymous","public","partner","internal"]}}},"content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"$ref":"#/components/schemas/TrendsData"},"_meta":{"$ref":"#/components/schemas/EnvelopeMeta"}}}}}},"NotModified":{"description":"Data has not changed since the ETag provided in `If-None-Match`. No body returned.","headers":{"ETag":{"schema":{"type":"string"}},"X-Correlation-Id":{"schema":{"type":"string"}},"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}}},"BadRequest":{"description":"Invalid query parameter. The `error.code` is `INVALID_PARAM`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"code":"INVALID_PARAM","message":"\"days\" must be an integer between 1 and 120.","correlationId":"550e8400-e29b-41d4-a716-446655440000","timestamp":"2026-07-29T00:00:00.000Z","retryable":false,"schemaVersion":"1"}}}}},"Unauthorized":{"description":"API key is present but invalid or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"code":"INVALID_API_KEY","message":"The API key provided is invalid or has been revoked. Omit the key to use the API anonymously.","correlationId":"550e8400-e29b-41d4-a716-446655440000","timestamp":"2026-07-29T00:00:00.000Z","retryable":false,"schemaVersion":"1"}}}}},"RateLimited":{"description":"Rate limit exceeded. Retry after the number of seconds indicated by the `Retry-After` header.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."},"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded (120 requests/min). Retry after 42s, or use an API key for a higher quota.","correlationId":"550e8400-e29b-41d4-a716-446655440000","timestamp":"2026-07-29T00:00:00.000Z","retryable":true,"retryAfterSeconds":42,"schemaVersion":"1"}}}}},"ServiceUnavailable":{"description":"An upstream dependency is unavailable and no fallback snapshot was available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"x-api-version":"1","x-discovery":{"discovery":"https://negativeresistance.com/api/v1","openapi":"https://negativeresistance.com/api/v1/openapi.json","mcp":"https://negativeresistance.com/api/v1/mcp","agentCard":"https://negativeresistance.com/.well-known/agent.json","aiPlugin":"https://negativeresistance.com/.well-known/ai-plugin.json","sdk":"https://negativeresistance.com/api/v1/sdk","status":"https://negativeresistance.com/api/v1/status","provenance":"https://negativeresistance.com/api/v1/sources","contract":"https://negativeresistance.com/api/v1/contract","documentation":"https://negativeresistance.com/embed","connect":"https://negativeresistance.com/connect"},"x-mcp":{"transport":"streamable-http","url":"https://negativeresistance.com/api/v1/mcp","startHere":"list_capabilities","tools":["get_mind_signal","get_hope_signal","get_trends_signal","get_batch_signals","search_world_trials","get_world_trial","get_trial_related_research","get_trial_coverage","get_trial_landscape","find_trial_registrations","get_trial_stats","get_registry_sources","list_capabilities"],"toolMap":[{"tool":"get_mind_signal","endpoint":"/api/v1/mind"},{"tool":"get_hope_signal","endpoint":"/api/v1/hope"},{"tool":"get_trends_signal","endpoint":"/api/v1/trends"},{"tool":"get_batch_signals","endpoint":"/api/v1/batch"},{"tool":"search_world_trials","endpoint":"/api/v1/trials/search"},{"tool":"get_world_trial","endpoint":"/api/v1/trials/{canonicalId}"},{"tool":"get_trial_related_research","endpoint":"/api/v1/trials/{canonicalId}/related"},{"tool":"get_trial_coverage","endpoint":"/api/v1/trials/coverage"},{"tool":"get_trial_landscape","endpoint":"/api/v1/trials/landscape"},{"tool":"find_trial_registrations","endpoint":"/api/v1/trials/registrations"},{"tool":"get_trial_stats","endpoint":"/api/v1/trials/stats"},{"tool":"get_registry_sources","endpoint":"/api/v1/sources"}]},"x-a2a":{"card":"https://negativeresistance.com/.well-known/agent.json","skills":[{"id":"mind_signal","name":"MIND capital-flow signal","description":"Returns AI-economy capital-flow intelligence across Money, Infrastructure, Networks and Data: signal counts, directional pulse, diversity conscience and top signals per capital for a configurable 1–120 day window.","tags":["economy","ai","capital","signals","finance"],"examples":["What is the MIND signal for the last 30 days?","Show me the directional pulse of Infrastructure capital this week."]},{"id":"hope_signal","name":"Hope clinical-trial signal","description":"Returns live clinical-trial counts, a paginated cure-research index and platform statistics. Supports disease-keyword filtering and cursor/offset pagination.","tags":["health","clinical-trials","cures","research","medicine"],"examples":["How many active clinical trials are there for ALS?","List the latest cure-research entries."]},{"id":"trends_signal","name":"Trends and attention-momentum signal","description":"Returns the live shape of the intelligence feed — volume, 7-day momentum and attention concentration across categories and research domains — plus the 2026 crypto token-generation-event list scored on capital distribution.","tags":["trends","momentum","attention","crypto","capital"],"examples":["What is gaining attention fastest in the AI economy this week?","Which 2026 token launches distribute capital most widely?"]},{"id":"world_trial_search","name":"Worldwide deduplicated clinical-trial search","description":"Searches distinct real-world clinical trials across the admitted primary registries — ClinicalTrials.gov and ISRCTN — deduplicated by exact cross-registry identifier match. Filters on condition, intervention/modality, recruitment status, phase, study type, sponsor, country, enrollment, results availability and date windows. Every result carries provenance and a quotable citation.","tags":["clinical-trials","registry","evidence","search","medicine","provenance"],"examples":["Find every active human trial worldwide testing islet cell replacement for type 1 diabetes.","Which phase 3 oncology trials in the United States have completed without posting results?"]},{"id":"world_trial_record","name":"Canonical trial record with full provenance","description":"Returns one canonical trial and every registry source record behind it, including source URLs, retrieval timestamps, payload checksums and optionally the raw registry payload.","tags":["clinical-trials","provenance","citation","evidence"],"examples":["Show me the full record and provenance for NCT07093359."]},{"id":"trial_related_research","name":"Related research and cross-registry mentions for a trial","description":"Returns the publications a registry declares for a trial, the Europe PMC literature mentioning its registration identifiers, and the other registry identifiers that literature mentions — labelled as discovery, never as index records.","tags":["clinical-trials","literature","europe-pmc","cross-reference","evidence"],"examples":["What has been published about NCT04333823?","Are there follow-on registrations elsewhere for ISRCTN50189673?"]},{"id":"world_trial_coverage","name":"Cross-registry coverage and duplicate-registration analysis","description":"Reports the distinct worldwide trial count for a query, cross-registry overlap, registry-exclusive trials, and the count inflation caused by summing registries instead of deduplicating them.","tags":["clinical-trials","deduplication","coverage","counting"],"examples":["How many distinct type 1 diabetes trials exist worldwide, and how many are double-registered?"]},{"id":"world_trial_landscape","name":"Research-field landscape and longitudinal change","description":"Returns the derived structure of a research field: phase/status/study-type mix, sponsor concentration, enrollment scale, the completed-but-unreported evidence gap, 30/90/365-day momentum, per-registry field completeness and a diff against a stored earlier snapshot.","tags":["clinical-trials","analysis","landscape","momentum","evidence-gap"],"examples":["What does the type 1 diabetes trial landscape look like, and is it accelerating?","How many completed oncology trials never reported results?"]},{"id":"world_trial_registrations","name":"Duplicate-registration resolver","description":"Resolves any registry identifier to its canonical trial, lists every registry the same real-world trial is registered in, shows the identifier evidence linking them, and names the registries it is absent from.","tags":["clinical-trials","identifiers","deduplication","resolution"],"examples":["Is NCT07093359 the same trial as ISRCTN13533177?","Which registries hold this trial, and which is it absent from?"]},{"id":"world_trial_stats","name":"Trial corpus statistics with per-registry attribution","description":"Returns corpus size, deduplicated canonical trial count, active-trial count, curated topic ids and per-registry attribution, never summing counts across registries.","tags":["clinical-trials","statistics","attribution"],"examples":["How many trials are in the index and which registries do they come from?"]},{"id":"registry_provenance","name":"Registry provenance, freshness and contract status","description":"Lists every upstream trial registry with licence, API type, record count, last successful sync, degraded state and the current schema-contract verdict, so coverage claims can be qualified honestly.","tags":["provenance","freshness","coverage","registries","data-quality"],"examples":["Which trial registries are covered and when did each last sync?","Is any data source currently degraded?"]}]},"x-sdk":{"language":"typescript","url":"https://negativeresistance.com/api/v1/sdk","methods":[{"method":"getMind","endpoint":"/api/v1/mind"},{"method":"getHope","endpoint":"/api/v1/hope"},{"method":"getTrends","endpoint":"/api/v1/trends"},{"method":"getBatch","endpoint":"/api/v1/batch"},{"method":"searchTrials","endpoint":"/api/v1/trials/search"},{"method":"getTrial","endpoint":"/api/v1/trials/{canonicalId}"},{"method":"getTrialRelatedResearch","endpoint":"/api/v1/trials/{canonicalId}/related"},{"method":"getTrialCoverage","endpoint":"/api/v1/trials/coverage"},{"method":"getTrialLandscape","endpoint":"/api/v1/trials/landscape"},{"method":"getTrialRegistrations","endpoint":"/api/v1/trials/registrations"},{"method":"getTrialStats","endpoint":"/api/v1/trials/stats"},{"method":"getSources","endpoint":"/api/v1/sources"},{"method":"getStatus","endpoint":"/api/v1/status"},{"method":"getUsage","endpoint":"/api/v1/keys/usage"}]},"x-workflows":[{"id":"disease-cure-landscape","question":"Find every currently active human trial worldwide plausibly attempting a functional cure for a disease, separate the therapeutic modalities, and rank what looks most promising.","steps":[{"endpoint":"sources","call":"GET /api/v1/sources","why":"Establish scope honesty first: which registries are covered, when each last synchronised, and whether any is degraded. This decides whether your answer may be called worldwide or must be called partial."},{"endpoint":"trials-coverage","call":"GET /api/v1/trials/coverage?q=type+1+diabetes&status=active","why":"Get the DISTINCT worldwide count before quoting any number, plus how many records are the same trial registered twice and how badly summing the registries would have inflated the total."},{"endpoint":"trials-landscape","call":"GET /api/v1/trials/landscape?q=type+1+diabetes&status=active","why":"Get the shape — phase mass, sponsor concentration, momentum, reporting gap — and read fieldCompleteness so you know which distributions are safe to quote."},{"endpoint":"trials-search","call":"GET /api/v1/trials/search?q=type+1+diabetes&status=active&intervention=islet&pageSize=100","why":"Pull the records for ONE modality. Repeat with intervention=stem+cell, gene+edit, encapsulation, xenotransplant, immune+reset — one search per modality is how you build a comparison instead of one undifferentiated list."},{"endpoint":"trials-search","call":"GET /api/v1/trials/search?...&include=eligibilityText","why":"Add the eligibility prose only for the shortlist, when you must reason about a requirement that lives in free text — for example whether chronic immunosuppression is required."},{"endpoint":"trials-detail","call":"GET /api/v1/trials/{canonicalId}?includeRaw=true","why":"For each shortlisted trial, verify the fields you are about to assert against the untouched registry payload and its checksum."},{"endpoint":"trials-registrations","call":"GET /api/v1/trials/registrations?id=NCT07093359","why":"Confirm you are not double-counting a study that appears under two identifiers."}],"reporting":"Report registry FACTS (phase, status, sponsor, enrollment, countries, endpoints, dates, identifiers, URLs) separately from your own INFERENCE (which approach looks most promising, and why). Quote each trial's citation.text. Name the denominator and the registries behind every count, and label the answer partial if any registry was degraded or absent."},{"id":"count-honestly","question":"How many trials exist worldwide for a condition?","steps":[{"endpoint":"trials-coverage","call":"GET /api/v1/trials/coverage?q=<condition>","why":"Returns the distinct count, the cross-registry overlap and the inflation you would have introduced by adding registries together."},{"endpoint":"sources","call":"GET /api/v1/sources","why":"Qualify the number with each registry's last successful sync and degraded state."}],"reporting":"Quote the distinct count with its registry attribution. Never sum per-registry totals."},{"id":"orient-on-platform","question":"What can this platform tell me?","steps":[{"endpoint":"batch","call":"GET /api/v1/batch","why":"All three signals in one rate-limit slot."},{"endpoint":"trials-stats","call":"GET /api/v1/trials/stats","why":"Corpus size, registry attribution and the curated topic ids for filtering."}],"reporting":"The signals describe published attention and announced capital; the trial endpoints describe registry records. They are different kinds of evidence."},{"id":"verify-a-claim","question":"Someone cited a trial at me — is the claim true?","steps":[{"endpoint":"trials-registrations","call":"GET /api/v1/trials/registrations?id=<their identifier>","why":"Resolve their identifier to a canonical trial and see every registration of it."},{"endpoint":"trials-detail","call":"GET /api/v1/trials/{canonicalId}?includeRaw=true","why":"Read the untouched registry payload and its checksum, then compare field by field."}],"reporting":"Quote citation.text and the verifyAt URL so the reader can check it themselves."},{"id":"follow-the-evidence","question":"What has actually been published about this trial, and is there related work elsewhere?","steps":[{"endpoint":"trials-search","call":"GET /api/v1/trials/search?q=<condition>&resultsAvailable=true","why":"Start from trials that declare results, so you are reading about studies that reported rather than studies that merely registered."},{"endpoint":"trials-related","call":"GET /api/v1/trials/{canonicalId}/related","why":"Registry-declared publications first (kind=results is the strongest evidence a trial reported), then the Europe PMC records mentioning its registration identifiers."},{"endpoint":"trials-related","call":"GET /api/v1/trials/{canonicalId}/related?include=crossref","why":"Surface OTHER registry identifiers co-cited with this trial in the literature — sibling and follow-on registrations in registries this index does not ingest. Check inIndex before you say anything about them."},{"endpoint":"trials-detail","call":"GET /api/v1/trials/{canonicalId}?includeRaw=true","why":"Verify any registry field you are about to assert against the untouched payload."}],"reporting":"Separate the three layers explicitly. Registry-declared publications are the registry’s own statement. Europe PMC hits are identifier MENTIONS, which may be citations or secondary analyses rather than results reports. Cross-registry mentions with inIndex=false are literature discoveries only — this index holds no record for them, so never present them as trials it contains or fold them into any count."}],"x-honesty-rules":["A count is never worldwide when _meta.provenance.worldwide is false or _meta.degraded is true. State which registries produced it.","Only PRIMARY registries are ingested — the body that is the authoritative system of record for the trials it publishes. Secondary aggregators that re-publish other registries' records (WHO ICTRP and similar meta-indexes) are excluded from the index, from every count and from deduplication, because they arrive with lag and normalisation loss. They may only ever be used as a separate cross-reference lookup.","Registry facts and analytical inference are reported separately. Rankings and plausibility judgements are the caller's inference.","Aggregates always carry per-registry attribution and the deduplication method used.","Registry metadata only. No patient data, no clinical advice, no commercial enrichment.","Auxiliary sources (literature indexes such as Europe PMC) are consulted by sidecar endpoints only. They never contribute a trial, a count or a deduplication decision. A registry identifier discovered in the literature with inIndex=false is a mention, not a record this API holds."],"x-contract-integrity":"https://negativeresistance.com/api/v1/contract"}