Skip to main content
EMBED & OPEN DATA

Put the cure on your site.

Everything on Negative Resistance is open. Drop a self-updating widget into any page, pull the raw data from a free public API, or follow the Wire in your feed reader. No keys. No signup. No maintenance — the data keeps itself current.

DROP-IN WIDGETS

Three widgets. Zero maintenance.

Every widget is a single line of HTML. They update themselves from the live Cure Protocol — you paste once and never touch them again. Copy a snippet, drop it into any page, CMS, or newsletter.

INTERACTIVE

The Cure Search

LIVE PREVIEW

A search box that turns any disease name into a real-time status report on AI, CRISPR, and gene-therapy research — with 20-language translation, timeline estimates, and the organizations leading each fight.

  • AI-generated status report for any condition
  • Live research pulled from the Cure Protocol
  • Auto-translates into 20 languages
  • Links back to the full protocol
PASTE THIS ANYWHERE
HTML
<iframe
  src="https://negativeresistance.com/embed/search"
  width="100%"
  height="600"
  style="border:none;border-radius:12px;"
  title="Cure Protocol Search"
></iframe>
SELF-UPDATING

Signal of the Week

LIVE PREVIEW

A single card featuring the most important signal of the week — its lifecycle status, which form of capital it moves, and why it matters. It refreshes itself. You paste it once.

  • Always shows the current top signal
  • Updates automatically — zero maintenance
  • Compact card, fits any sidebar
  • Deep-links to the full story
PASTE THIS ANYWHERE
HTML
<iframe
  src="https://negativeresistance.com/embed/signal"
  width="100%"
  height="340"
  style="border:1px solid #1a2233;border-radius:12px;max-width:520px;"
  title="Signal of the Week"
></iframe>
DASHBOARD

The Cure Tracker

LIVE PREVIEW

A compact, auto-updating dashboard showing progress toward cures across disease frontiers — stage badges, progress bars, and the latest milestone, all in one widget.

  • Progress across every disease frontier
  • Stage badges + live progress bars
  • Latest milestone, refreshed every 3h
  • One number for humanity’s progress
PASTE THIS ANYWHERE
HTML
<iframe
  src="https://negativeresistance.com/embed/tracker"
  width="100%"
  height="700"
  style="border:1px solid #1a2233;border-radius:12px;max-width:520px;"
  title="Cure Tracker"
></iframe>
OPEN DATA API

A production-grade public API.

Two data domains behind one contract: trailing-window signals on the AI economy and the race to cure disease, and a deduplicated world index of human clinical trials. Versioned, CORS-enabled, unauthenticated by default. Every successful response shares one predictable envelope, so you write one parser and reuse it everywhere. Start at /api/v1 — it is the machine-readable inventory of everything below.

Versioned
Stable /api/v1 path
Unified envelope
Every 200 is { data, _meta }
Structured errors
Typed { error } with codes
CORS enabled
Call from any origin
Rate-limit headers
RateLimit-* on every response
Optional keys
Anonymous works; keys raise quota
BASE URL
https://negativeresistance.com/api/v1

All endpoints live under the versioned /api/v1 prefix. The major version only changes on a breaking change, so anything you build today keeps working.

RESPONSE ENVELOPE
{ "data": { … }, "_meta": { … } }

Every 200 returns the same shape. Your payload is always under data; _meta carries the api name, version, schemaVersion, a correlationId for support, generatedAt, docs URL and license.

ENDPOINTS — 20 PUBLIC
SIGNALS

Trailing-window reads on the AI economy, the race to cure disease, and where attention concentrates.

GEThttps://negativeresistance.com/api/v1/mind
MIND — the AI-economy signal

A single trailing-window read on where capital, compute, and conscience are flowing: the four capitals (M·I·N·D), a sparkline, the conscience index, and the cure pulse.

WHEN TO USEThe question is about money, compute, networks or data flowing through the AI economy — funding momentum, infrastructure build-out, concentration of attention.

get_mind_signal sdk.getMind()
/api/v1/mind?days=30/api/v1/mind?days=90&disease=diabetes
PARAMVALUESDEFAULTDESCRIPTION
daysinteger 1–120Length of the trailing analysis window (default 30).
diseasestringOptional keyword — narrows the capital breakdown to signals matching this topic.
GEThttps://negativeresistance.com/api/v1/hope
Hope — the cure signal

Global active-trial counts, a per-disease breakdown, the latest curated cure research (paginated), and platform stats. Also carries a `world` block summarising the multi-registry trial index.

WHEN TO USEYou want the headline state of cure progress — how much active trial activity exists, per disease, plus the latest curated research reading.

get_hope_signal sdk.getHope()
/api/v1/hope/api/v1/hope?include=research&disease=diabetes&limit=10
PARAMVALUESDEFAULTDESCRIPTION
includecsv of sectionstrials, research, stats (default all).
diseasestringFilter research articles by disease name.
limitinteger 1–50Max research articles (default 5).
cursoropaque tokenForward pagination cursor from _meta.
offsetintegerZero-based offset. Ignored when `cursor` is supplied.
GEThttps://negativeresistance.com/api/v1/trends
Trends — the feed + capital lens

The live shape of the Wire (volume, 7-day momentum, where attention concentrates) plus the 2026 crypto TGE list read through the Cure Protocol distribution lens.

WHEN TO USEYou need attention dynamics — what is accelerating or decelerating in coverage — or the crypto capital-distribution reading.

get_trends_signal sdk.getTrends()
/api/v1/trends/api/v1/trends?include=crypto/api/v1/trends?series=false
PARAMVALUESDEFAULTDESCRIPTION
includecsv of sectionssignal, crypto (default all).
seriesbooleanSet false to drop the daily time series.
diseasestringOptional keyword — narrows the signal section to matching stories.
WORLD TRIALS

A deduplicated multi-registry index of human clinical trials — searchable, aggregatable, and fully traceable back to each registry record.

GEThttps://negativeresistance.com/api/v1/trials/search
World trials — search

Search the deduplicated multi-registry trial store. Sources are primary registries only — ClinicalTrials.gov (US NIH) and ISRCTN (UK) — never secondary aggregators. A trial registered twice is returned once. Every result carries normalized fields, its source registries, source URLs and a quotable citation block.

WHEN TO USEYou need actual trial RECORDS — a list of studies matching a clinical question, with provenance you can cite.

search_world_trials sdk.searchTrials()
/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
PARAMVALUESDEFAULTDESCRIPTION
qstringFree-text query matched (AND across tokens) over title, conditions, interventions and sponsor. British/American spellings and simple plurals are treated as the same token.
conditionstringEXACT 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.
topicstringCure Protocol topic id — one of the 15 curated disease domains. List them via /api/v1/trials/stats.
registryclinicaltrials_gov, isrctnRestrict to trials carrying a record from one primary registry. Omit for full-index (all-registry) scope.
statusactive, recruiting, not_yet_recruiting, completed, terminated, withdrawn, halted, unknownNormalized recruitment status, or the shorthand `active` for the recruiting + active + not_yet_recruiting group.
phasecsvOne 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.
studyTypeinterventional, observational, expanded_access, otherNormalized study type.
interventionstringFree-text match against intervention names and descriptions — the practical way to isolate a MODALITY (e.g. "stem cell", "encapsulation", "gene edit", "xenotransplant").
sponsorstringFree-text match against the sponsor name.
countrystringMatch a recruiting country or site country (case-insensitive). Derived from registry location records; not every record declares a location.
minEnrollmentintegerMinimum normalized enrollment (actual where reported, otherwise target).
maxEnrollmentintegerMaximum normalized enrollment.
resultsAvailablebooleanRestrict to trials with (true) or without (false) results posted. See /api/v1/trials/landscape for how each registry's results flag is derived.
crossRegistrybooleantrue = only trials registered in more than one registry; false = only single-registry trials.
updatedSinceISO dateOnly trials whose registry record was last updated on or after this date.
startedAfterISO dateOnly trials with a study start date on or after this date.
startedBeforeISO dateOnly trials with a study start date on or before this date.
completionAfterISO dateOnly trials with a completion date on or after this date.
completionBeforeISO dateOnly trials with a completion date on or before this date.
sortlastUpdated, startDate, enrollment, canonicalIdResult ordering (descending, except canonicalId). Default lastUpdated — newest registry activity first.
includeeligibilityTextExtra evidence blocks: `eligibilityText` (full inclusion/exclusion prose, large), `raw` is NOT available here — use the detail endpoint for raw payloads.
pageintegerPage number, 1-based. Default 1. _meta.pagination.hasMore and _meta.pagination.nextUrl tell you whether and how to continue.
pageSizeinteger 1–100Results per page (default 50). `limit` is accepted as an alias.
GEThttps://negativeresistance.com/api/v1/trials/{canonicalId}
World trials — canonical record

One canonical trial plus every source record behind it: registry, source id, source URL, retrieval timestamp, payload checksum and the raw registry payload.

WHEN TO USEYou have a canonicalId and need the complete record, or you need to inspect the untouched registry payload to verify a claim.

get_world_trial sdk.getTrial()
/api/v1/trials/NCT07093359/api/v1/trials/NCT07093359?includeRaw=true
PARAMVALUESDEFAULTDESCRIPTION
{canonicalId}stringrequiredCanonical trial id as returned by search — e.g. NCT07093359, ISRCTN13533177 or 2023-505575-69-01.
includeRawbooleanInclude the full raw registry payloads (alias: raw). Default false.
GEThttps://negativeresistance.com/api/v1/trials/{canonicalId}/related
World trials — related research (literature sidecar)

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.

WHEN TO USEYou 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.

get_trial_related_research sdk.getTrialRelatedResearch()
/api/v1/trials/NCT04333823/related/api/v1/trials/ISRCTN50189673/related?include=crossref&limit=100
PARAMVALUESDEFAULTDESCRIPTION
{canonicalId}stringrequiredCanonical trial id, or any identifier the trial is known by — e.g. NCT04333823 or ISRCTN50189673.
includestringComma-separated sections: declared, literature, crossref. Default all three. crossref is derived from literature.
limitinteger (1-100)Maximum literature hits per registration identifier searched. Default 25.
GEThttps://negativeresistance.com/api/v1/trials/coverage
World trials — cross-registry coverage and duplicate detection

How many DISTINCT trials exist for a condition across every registry in the index, how many are the same trial registered more than once, which trials are exclusive to each registry, and the count inflation you would suffer by querying each registry separately and adding the results.

WHEN TO USEBefore you state a worldwide count. This is the endpoint that tells you whether a number is a true distinct count or an inflated sum.

get_trial_coverage sdk.getTrialCoverage()
/api/v1/trials/coverage?q=type+1+diabetes/api/v1/trials/coverage?topic=oncology&status=active
PARAMVALUESDEFAULTDESCRIPTION
qstringFree-text query matched (AND across tokens) over title, conditions, interventions and sponsor. British/American spellings and simple plurals are treated as the same token.
conditionstringEXACT 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.
topicstringCure Protocol topic id — one of the 15 curated disease domains. List them via /api/v1/trials/stats.
registryclinicaltrials_gov, isrctnRestrict to trials carrying a record from one primary registry. Omit for full-index (all-registry) scope.
statusactive, recruiting, not_yet_recruiting, completed, terminated, withdrawn, halted, unknownNormalized recruitment status, or the shorthand `active` for the recruiting + active + not_yet_recruiting group.
phasecsvOne 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.
studyTypeinterventional, observational, expanded_access, otherNormalized study type.
interventionstringFree-text match against intervention names and descriptions — the practical way to isolate a MODALITY (e.g. "stem cell", "encapsulation", "gene edit", "xenotransplant").
sponsorstringFree-text match against the sponsor name.
countrystringMatch a recruiting country or site country (case-insensitive). Derived from registry location records; not every record declares a location.
minEnrollmentintegerMinimum normalized enrollment (actual where reported, otherwise target).
maxEnrollmentintegerMaximum normalized enrollment.
resultsAvailablebooleanRestrict to trials with (true) or without (false) results posted. See /api/v1/trials/landscape for how each registry's results flag is derived.
crossRegistrybooleantrue = only trials registered in more than one registry; false = only single-registry trials.
updatedSinceISO dateOnly trials whose registry record was last updated on or after this date.
startedAfterISO dateOnly trials with a study start date on or after this date.
startedBeforeISO dateOnly trials with a study start date on or before this date.
completionAfterISO dateOnly trials with a completion date on or after this date.
completionBeforeISO dateOnly trials with a completion date on or before this date.
GEThttps://negativeresistance.com/api/v1/trials/landscape
World trials — landscape structure and change over time

The derived shape of research on a condition: phase, status and study-type mix, sponsor concentration, enrollment scale, the completed-but-unreported results gap, momentum over 30/90/365 days, and a real diff against a stored earlier snapshot. Reports per-registry field completeness so a distribution built from one registry is never mistaken for a world-scale fact.

WHEN TO USEYou 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.

get_trial_landscape sdk.getTrialLandscape()
/api/v1/trials/landscape?q=type+1+diabetes/api/v1/trials/landscape?topic=neurology&status=active
PARAMVALUESDEFAULTDESCRIPTION
qstringFree-text query matched (AND across tokens) over title, conditions, interventions and sponsor. British/American spellings and simple plurals are treated as the same token.
conditionstringEXACT 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.
topicstringCure Protocol topic id — one of the 15 curated disease domains. List them via /api/v1/trials/stats.
registryclinicaltrials_gov, isrctnRestrict to trials carrying a record from one primary registry. Omit for full-index (all-registry) scope.
statusactive, recruiting, not_yet_recruiting, completed, terminated, withdrawn, halted, unknownNormalized recruitment status, or the shorthand `active` for the recruiting + active + not_yet_recruiting group.
phasecsvOne 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.
studyTypeinterventional, observational, expanded_access, otherNormalized study type.
interventionstringFree-text match against intervention names and descriptions — the practical way to isolate a MODALITY (e.g. "stem cell", "encapsulation", "gene edit", "xenotransplant").
sponsorstringFree-text match against the sponsor name.
countrystringMatch a recruiting country or site country (case-insensitive). Derived from registry location records; not every record declares a location.
minEnrollmentintegerMinimum normalized enrollment (actual where reported, otherwise target).
maxEnrollmentintegerMaximum normalized enrollment.
resultsAvailablebooleanRestrict to trials with (true) or without (false) results posted. See /api/v1/trials/landscape for how each registry's results flag is derived.
crossRegistrybooleantrue = only trials registered in more than one registry; false = only single-registry trials.
updatedSinceISO dateOnly trials whose registry record was last updated on or after this date.
startedAfterISO dateOnly trials with a study start date on or after this date.
startedBeforeISO dateOnly trials with a study start date on or before this date.
completionAfterISO dateOnly trials with a completion date on or after this date.
completionBeforeISO dateOnly trials with a completion date on or before this date.
GEThttps://negativeresistance.com/api/v1/trials/registrations
World trials — where else is this trial registered

Given any registry identifier, every registry in which that same real-world trial is registered, the exact identifier evidence linking them, and which registries it is absent from.

WHEN TO USEYou have one identifier from an outside source and need to know whether it is the same study as another identifier you are holding.

find_trial_registrations sdk.getTrialRegistrations()
/api/v1/trials/registrations?id=NCT07093359/api/v1/trials/registrations?id=ISRCTN13533177
PARAMVALUESDEFAULTDESCRIPTION
idstringrequiredAny known identifier, e.g. NCT07093359 or ISRCTN13533177.
GEThttps://negativeresistance.com/api/v1/trials/stats
World trials — counts with attribution

Source-record count, deduplicated canonical trial count, active count, the curated topic list, and per-registry attribution. Counts are never summed across registries.

WHEN TO USEFirst call when orienting on the trial corpus: how big it is, which registries contribute, and what topic ids exist for filtering.

get_trial_stats sdk.getTrialStats()
/api/v1/trials/stats
DISCOVERY & HEALTH

Machine-readable capability inventory, provenance manifest, service health, contract integrity, and a generated client.

GEThttps://negativeresistance.com/api/v1/sources
Registry sources — provenance, freshness and contract status

Every upstream registry: base URL, API type, licence, last successful sync, record count, whether the source is currently degraded, and the live contract-test verdict.

WHEN TO USEBefore presenting trial evidence as current or worldwide. This endpoint tells you which registries are healthy, when each last synchronised, and which are degraded.

get_registry_sources sdk.getSources()
/api/v1/sources
GEThttps://negativeresistance.com/api/v1/status
Status — service health

Operational status, dependency health, the live endpoint catalog, and rolling SLO compliance per route.

WHEN TO USEA call failed and you need to know whether the platform is degraded before retrying or reporting an error.

sdk.getStatus()
/api/v1/status
GEThttps://negativeresistance.com/api/v1/contract
Contract integrity report

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.

WHEN TO USEYou want to trust the documentation before building against it, or you are diagnosing a mismatch between the spec and real behaviour.

/api/v1/contract
GEThttps://negativeresistance.com/api/v1/openapi.json
OpenAPI 3.1 spec

Full machine-readable schema for every endpoint. Import into Postman, generate SDKs, or feed to a codegen tool.

WHEN TO USEYou want typed access or want to generate your own client.

/api/v1/openapi.json
GEThttps://negativeresistance.com/api/v1/sdk
TypeScript SDK

Download a ready-to-use TypeScript client generated from this capability catalog. Zero dependencies, works in Node and the browser.

WHEN TO USEYou are writing TypeScript and want method-per-capability access without hand-rolling fetch calls.

/api/v1/sdk
ACCESS & SUBSCRIPTIONS

Optional API keys to raise your quota, and webhooks to be told when a signal changes.

POSThttps://negativeresistance.com/api/v1/mcp
MCP — Model Context Protocol server

Streamable-HTTP MCP endpoint. Exposes every signal and the complete world-trials workflow as callable tools, plus a self-describing capability tool.

WHEN TO USEYou are an LLM client that speaks MCP. This is the lowest-friction way in — no key, read-only.

POSThttps://negativeresistance.com/api/v1/keys
API keys — self-serve

Mint a personal API key to raise your rate-limit quota. The raw key is returned exactly once.

WHEN TO USEYou are being rate-limited as an anonymous caller and want a higher quota.

POST / GET / DELETEhttps://negativeresistance.com/api/v1/webhooks
Webhooks — subscribe to changes

Register a URL to receive an HMAC-signed POST when a signal changes. Delivery is retried up to three times with exponential backoff.

WHEN TO USEYou want to be told when a signal changes instead of polling.

PARAMVALUESDEFAULTDESCRIPTION
eventscsvmind, hope, trends (default all) — on POST body.
idstringSubscription id — on GET (status) and DELETE.
GET / PATCHhttps://negativeresistance.com/api/v1/keys/usage
Key usage & settings

GET returns per-key call volume, error rates, and latency over 7- and 30-day windows plus your current rate-limit state. PATCH lets you tune your key's rate limit (120–10 000) or rename it.

WHEN TO USEYou need to know your own consumption or want to raise your own rate limit.

sdk.getUsage()
PARAMVALUESDEFAULTDESCRIPTION
window7d, 30dReporting window for the usage breakdown (GET).
COMPOSE
GEThttps://negativeresistance.com/api/v1/batch
Batch — every signal in one round-trip

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.

WHEN TO USEYou 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.

get_batch_signals sdk.getBatch()
/api/v1/batch/api/v1/batch?include=mind,trends&days=90
PARAMVALUESDEFAULTDESCRIPTION
includecsv of signalsmind, hope, trends (default all).
daysinteger 1–120Forwarded to the mind signal.
seriesbooleanForwarded to the trends signal.
diseasestringForwarded to every composed signal to narrow results.
EXAMPLE REQUESTS
MIND — 30-day economy signal
GET https://negativeresistance.com/api/v1/mind
MIND — custom window
GET https://negativeresistance.com/api/v1/mind?days=7
Hope — full response
GET https://negativeresistance.com/api/v1/hope
Hope — research by disease
GET https://negativeresistance.com/api/v1/hope?include=research&disease=sickle+cell&limit=10
Hope — platform stats only
GET https://negativeresistance.com/api/v1/hope?include=stats
Trends — full signal
GET https://negativeresistance.com/api/v1/trends
Trends — crypto TGE lens only
GET https://negativeresistance.com/api/v1/trends?include=crypto
Trends — feed shape, no series
GET https://negativeresistance.com/api/v1/trends?include=signal&series=false
Service status / health
GET https://negativeresistance.com/api/v1/status
Batch — all signals at once
GET https://negativeresistance.com/api/v1/batch
Batch — mind + trends only
GET https://negativeresistance.com/api/v1/batch?include=mind,trends
MIND — filter by disease
GET https://negativeresistance.com/api/v1/mind?disease=cancer
Trends — filter by disease
GET https://negativeresistance.com/api/v1/trends?disease=cancer
Mint an API key
POST https://negativeresistance.com/api/v1/keys { "label": "My app" }
Register a webhook
POST https://negativeresistance.com/api/v1/webhooks { "url": "https://..." }
API discovery
GET https://negativeresistance.com/api/v1/
EXAMPLE RESPONSE · GET /api/v1/mind
JSON
{
  "data": {
    "windowDays": 30,
    "total": 1414,
    "signalsPerDay": 47.1,
    "sparkline": [38, 41, 52, 44, 61, 49, 57],
    "capitals": [
      { "key": "M", "count": 402, "share": 0.28, "net": 44,
        "directions": { "distributing": 121, "concentrating": 96, "rising": 61 } }
    ],
    "conscience": { "index": 0.61, "label": "rising" },
    "curePulse": { "trend": "up", "newResearch": 12 },
    "schemaVersion": 2
  },
  "_meta": {
    "api": "The Last Economy Wire - Mind Signal API",
    "version": "1.0",
    "schemaVersion": "2",
    "correlationId": "req_UsJgxaCfJH2o",
    "generatedAt": "2026-07-29T23:37:10.616Z",
    "documentation": "https://negativeresistance.com/embed",
    "license": "Free for any use. Attribution appreciated."
  }
}
EXAMPLE RESPONSE · GET /api/v1/hope
JSON
{
  "data": {
    "trials": {
      "globalActiveTrials": 41762,
      "byDisease": [
        { "id": "oncology", "label": "Cancer", "activeTrials": 8134 },
        { "id": "neurology", "label": "Neurodegenerative Disease", "activeTrials": 1290 },
        { "id": "endocrinology", "label": "Type 1 Diabetes", "activeTrials": 412 }
      ],
      "source": "ClinicalTrials.gov"
    },
    "research": {
      "count": 1,
      "source": "Curated cure research",
      "pagination": { "limit": 5, "offset": 0, "total": 618, "returned": 1, "hasMore": true, "nextOffset": 5, "nextCursor": "eyJvIjo1fQ" },
      "articles": [
        {
          "title": "Base editing corrects sickle-cell mutation in patient stem cells",
          "url": "https://www.nature.com/...",
          "source": "Nature Medicine",
          "domain": "nature.com",
          "publishedAt": "2026-07-21T00:00:00.000Z",
          "significance": "high"
        }
      ]
    },
    "stats": {
      "totalWireSignals": 3328,
      "totalCureResearch": 1636,
      "diseaseFrontiers": 15,
      "languages": 20
    }
  },
  "_meta": {
    "api": "The Last Economy Wire - Hope Signal API",
    "version": "1.0",
    "schemaVersion": "2",
    "correlationId": "req_c24-9lOsbhQv",
    "generatedAt": "2026-07-29T23:37:10.616Z",
    "documentation": "https://negativeresistance.com/embed",
    "license": "Free for any use. Attribution appreciated."
  }
}
RATE LIMITS
  • · Anonymous: 120 requests / minute, per IP.
  • · With an API key: 1,000 requests / minute by default.
  • · Every response includes RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset (seconds).
  • · A 429 returns Retry-After and retryable: true — back off and retry.
API KEYS (OPTIONAL)

Keys are not required — everything works anonymously. A key simply raises your quota and identifies your traffic. Send it any of three ways:

Authorization: Bearer lew_live_…X-Api-Key: lew_live_…?api_key=lew_live_…
ERROR FORMAT

Errors never break the shape. Any non-2xx returns a typed error object with a stable code, a human-readable message, whether it is retryable, and the same correlationId you can quote in a support request.

JSON
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit exceeded. Retry after 42s.",
    "retryable": true,
    "retryAfterSeconds": 42,
    "correlationId": "req_c24-9lOsbhQv",
    "timestamp": "2026-07-29T23:37:10.616Z",
    "schemaVersion": "1"
  }
}

Attribution appreciated but not required. License: free for any use.

FOR AI AGENTS

Built to be discovered by machines.

This API is self-describing. Agents, LLMs, and tooling can find it, read its schema, and call it without a human in the loop — through a standard OpenAPI spec, an AI-plugin manifest, an A2A agent card, and a live Model Context Protocol (MCP) server. Every one of those surfaces is generated from a single capability catalog, and a contract suite fails the build if any of them disagree.

DISCOVERY DOCUMENTS
API discovery/api/v1/

Human-readable + machine-readable entry point listing every public endpoint, its methods, params, and purpose.

OpenAPI 3.1 spec/api/v1/openapi.json

Full machine-readable schema for every endpoint. Import into Postman, generate SDKs, or feed to a codegen tool.

ChatGPT / plugin-style manifest describing the API, its MCP endpoint, and A2A card in one place.

Agent-to-agent discovery card. Its skills are generated from the same catalog as the API itself, so every capability — signals and world trials alike — is advertised (discovery-only).

TypeScript SDK/api/v1/sdk

Download a ready-to-use TypeScript client generated from the live API catalog. Zero dependencies, works in Node and the browser.

Contract integrity report/api/v1/contract

Runs the full cross-surface consistency suite live: catalog, OpenAPI, MCP, A2A, SDK and these docs must all describe the same API. Returns 200 when consistent, 500 on drift — and the same suite fails the build, so a drifting release cannot ship.

Talk to this from ChatGPT, Claude & Gemini

A live Model Context Protocol (MCP) server lets any AI assistant read this data with one URL — no key, no signup. We’ll walk you through the exact steps for each platform.

CONNECT YOUR ASSISTANT
MCP TOOLS — 13 EXPOSED
get_mind_signal/api/v1/mind

USE WHEN the question is about the AI economy: where money, infrastructure, networks and data are moving, and how concentrated that movement is. Returns counts, directional pulse, a sparkline, a diversity/conscience index and top signals for each of the four capitals (M=Money, I=Infrastructure, N=Networks, D=Data) over a trailing window. NEXT: call get_trends_signal for feed shape and the crypto-distribution lens, or get_batch_signals to pull all three signals in one round-trip. This measures published attention and announced capital — not settled transactions.

days?disease?
get_hope_signal/api/v1/hope

USE WHEN you want the headline picture of cure progress: how much active clinical-trial activity exists overall and per disease, plus the latest curated cure-research index. This is a SUMMARY signal. NEXT: for actual trial records, worldwide and deduplicated, call search_world_trials; for the structure of a field call get_trial_landscape. IMPORTANT: the trial counts here come from a US ClinicalTrials.gov census that is deliberately kept separate from the multi-registry world index — never add the two together.

include?disease?limit?cursor?offset?
get_trends_signal/api/v1/trends

USE WHEN you need attention dynamics rather than levels: what is accelerating or decelerating in coverage, and where attention concentrates across categories and research domains (7-day momentum, 30-day daily series). Also returns the curated 2026 crypto token-generation-event list scored by how much capital widens access versus concentrates in insiders, contrasted with live cure-research capital. NEXT: get_mind_signal for the capital levels behind the momentum. Set series=false to slim the payload.

include?series?disease?
get_batch_signals/api/v1/batch

USE WHEN you want to orient on the whole platform in one call, or you are rate-limit sensitive: returns the MIND, Hope and Trends signals together and costs ONE rate-limit slot instead of three. Each signal arrives as its own sub-envelope, so a single upstream failure degrades that one section instead of failing the call — check each sub-envelope before relying on it. NEXT: drill into whichever signal mattered, or into search_world_trials for trial-level evidence.

include?days?series?disease?
search_world_trials/api/v1/trials/search

PRIMARY TRIAL TOOL. USE WHEN you need actual clinical-trial RECORDS for a disease, intervention, sponsor, country or date window. Searches DISTINCT real-world trials across the admitted PRIMARY registries — ClinicalTrials.gov (US NIH) and ISRCTN (UK) — deduplicated by exact cross-registry identifier match, so a trial registered twice is returned ONCE, not twice. Secondary aggregators are deliberately excluded, so the index is registry-authoritative but NOT a census of every country. Every result is evidence-ready: canonical id, normalized status/phase/study type/enrollment/countries/primary endpoints, the registries that hold it, source URLs, retrieval timestamps, payload checksums and a quotable `citation` block. HOW TO NARROW: use q for the disease, then intervention to separate MODALITIES within that disease (e.g. "stem cell", "encapsulation", "gene edit", "xenotransplant") — running several intervention-scoped searches is how you build a comparative landscape. Use status="active" for currently-running human studies. SCOPE WARNING: omit `registry` to keep the answer worldwide; supplying it makes the result single-registry evidence and you must label it as such. PAGINATION: page/pageSize (max 100); the response _meta.pagination tells you totalItems, hasMore and the exact next URL — keep going until hasMore is false. NEXT: get_world_trial for one trial's full per-registry provenance and raw payload; get_trial_coverage to learn how much of your result set is duplicate registrations; get_trial_landscape for the derived shape (phase mix, sponsors, reporting gap, momentum); find_trial_registrations to see every registry one trial appears in.

q?condition?topic?registry?status?phase?studyType?intervention?sponsor?country?minEnrollment?maxEnrollment?resultsAvailable?crossRegistry?updatedSince?startedAfter?startedBefore?completionAfter?completionBefore?sort?include?page?pageSize?
get_world_trial/api/v1/trials/{canonicalId}

USE WHEN you already have a canonicalId (from search_world_trials or find_trial_registrations) and need the COMPLETE record: all normalized fields plus every source record behind it — registry, source id, source URL, retrieval timestamp and payload checksum. Set includeRaw=true to get the untouched registry payload we stored (after contact-field redaction) so you can verify a specific claim field-by-field; that is the strongest evidence available here. NEXT: find_trial_registrations to see whether the same real-world trial is registered elsewhere; get_registry_sources for the licence and sync state of the registry it came from.

canonicalIdincludeRaw?
get_trial_related_research/api/v1/trials/{canonicalId}/related

USE WHEN you have a trial (canonicalId from search_world_trials) and need the PUBLISHED RESEARCH around it, or when you want to find related registrations in registries this index does not ingest. Returns three separately-labelled layers: (1) registryDeclared — publications the registry record itself declares, with kind=results/background/derived/protocol, the strongest available evidence that a trial reported; (2) literature — Europe PMC records whose indexed text or accession list mentions one of the trial’s registration identifiers, with journal, year, DOI/PMID, open-access flag and citation count; (3) crossRegistryMentions — OTHER registry identifiers (ANZCTR, ChiCTR, JPRN, DRKS, CTRI, CTIS and more) found in the title/abstract of that literature, each flagged inIndex true/false. THIS IS A SIDECAR: nothing it returns is in the trial index or in any count, and an identifier with inIndex=false is a literature mention only — never report it as a trial this index holds. NEXT: get_world_trial for the canonical record, find_trial_registrations to check for double-counting.

canonicalIdinclude?limit?
get_trial_coverage/api/v1/trials/coverage

USE BEFORE STATING ANY WORLDWIDE COUNT. Answers: how many DISTINCT trials exist for this query across every registry in the index, how many are the same trial registered more than once, which trials are exclusive to each registry, and exactly how much you would have overcounted by querying each registry separately and adding the results (`inflation`). This is the tool that stops you turning separate registry totals into one wrong number. Accepts the same filter vocabulary as search_world_trials so a coverage figure always describes the population you actually searched. NEXT: search_world_trials for the records themselves, get_trial_landscape for their structure.

q?condition?topic?registry?status?phase?studyType?intervention?sponsor?country?minEnrollment?maxEnrollment?resultsAvailable?crossRegistry?updatedSince?startedAfter?startedBefore?completionAfter?completionBefore?
get_trial_landscape/api/v1/trials/landscape

USE WHEN you need the SHAPE of a research field rather than a list of its members: phase / status / study-type mix, sponsor concentration, enrollment scale, the completed-but-unreported results gap, momentum over 30/90/365 days, and a real diff against a stored earlier snapshot. READ `fieldCompleteness` BEFORE QUOTING ANY DISTRIBUTION — if phase is recorded for a quarter of a registry's records, the phase mix describes that quarter, not the field. `evidenceGap` reports the reporting failure per registry and deliberately refuses to publish a combined figure when the registries' results flags are not comparable. NEXT: search_world_trials to inspect the trials behind a bucket, get_trial_coverage to check how much of the population is duplicate registrations.

q?condition?topic?registry?status?phase?studyType?intervention?sponsor?country?minEnrollment?maxEnrollment?resultsAvailable?crossRegistry?updatedSince?startedAfter?startedBefore?completionAfter?completionBefore?
find_trial_registrations/api/v1/trials/registrations

USE WHEN you hold ONE registry identifier (from a paper, a news story, another database) and need to know whether it is the same real-world study as another identifier, or where else it is registered. Give any known id — NCT, ISRCTN, EUCT or EudraCT — and get back the canonical trial, every registry that holds it, the exact identifier evidence linking those registrations, and which registries it is absent from. Absence means absent from OUR index of that registry, not proof it was never registered there. NEXT: get_world_trial with the returned canonicalId for the full record.

id
get_trial_stats/api/v1/trials/stats

START HERE when orienting on the trial corpus. Returns the total source-record count, the deduplicated canonical trial count, how many are currently active, the per-registry attribution, and the curated topic ids you can pass as `topic` to the other trial tools. Counts are never summed across registries — each registry's contribution is reported separately alongside the distinct total. NEXT: search_world_trials to query it, get_registry_sources for licence and sync freshness per registry.

get_registry_sources/api/v1/sources

USE BEFORE PRESENTING TRIAL EVIDENCE AS CURRENT OR WORLDWIDE. Returns every upstream registry with its base URL, API type, licence, record count, last successful synchronisation time, degraded flag and live schema-contract verdict. This is how you answer "is this really worldwide, and how old is it?" honestly: a registry that is degraded or has not synchronised recently makes your result partial, and you should label it partial. NEXT: get_trial_stats for the resulting counts, or search_world_trials with an explicit `registry` when you deliberately want single-registry evidence.

list_capabilities/api/v1

START HERE if you do not yet know what this server can do. Returns every endpoint with its purpose and when to use it, every MCP tool name, the recommended multi-step workflows, and the URLs of the machine-readable contracts. Takes no arguments.

AGENT WORKFLOWS

Real questions usually need several calls. These recipes are published machine-readably at /api/v1 and in the OpenAPI spec under x-workflows, so an agent can follow them without a human writing the plan.

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.
  1. 1
    GET /api/v1/sources

    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.

  2. 2
    GET /api/v1/trials/coverage?q=type+1+diabetes&status=active

    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.

  3. 3
    GET /api/v1/trials/landscape?q=type+1+diabetes&status=active

    Get the shape — phase mass, sponsor concentration, momentum, reporting gap — and read fieldCompleteness so you know which distributions are safe to quote.

  4. 4
    GET /api/v1/trials/search?q=type+1+diabetes&status=active&intervention=islet&pageSize=100

    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.

  5. 5
    GET /api/v1/trials/search?...&include=eligibilityText

    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.

  6. 6
    GET /api/v1/trials/{canonicalId}?includeRaw=true

    For each shortlisted trial, verify the fields you are about to assert against the untouched registry payload and its checksum.

  7. 7
    GET /api/v1/trials/registrations?id=NCT07093359

    Confirm you are not double-counting a study that appears under two identifiers.

HOW TO REPORT ITReport 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.

How many trials exist worldwide for a condition?
  1. 1
    GET /api/v1/trials/coverage?q=<condition>

    Returns the distinct count, the cross-registry overlap and the inflation you would have introduced by adding registries together.

  2. 2
    GET /api/v1/sources

    Qualify the number with each registry's last successful sync and degraded state.

HOW TO REPORT ITQuote the distinct count with its registry attribution. Never sum per-registry totals.

What can this platform tell me?
  1. 1
    GET /api/v1/batch

    All three signals in one rate-limit slot.

  2. 2
    GET /api/v1/trials/stats

    Corpus size, registry attribution and the curated topic ids for filtering.

HOW TO REPORT ITThe signals describe published attention and announced capital; the trial endpoints describe registry records. They are different kinds of evidence.

Someone cited a trial at me — is the claim true?
  1. 1
    GET /api/v1/trials/registrations?id=<their identifier>

    Resolve their identifier to a canonical trial and see every registration of it.

  2. 2
    GET /api/v1/trials/{canonicalId}?includeRaw=true

    Read the untouched registry payload and its checksum, then compare field by field.

HOW TO REPORT ITQuote citation.text and the verifyAt URL so the reader can check it themselves.

What has actually been published about this trial, and is there related work elsewhere?
  1. 1
    GET /api/v1/trials/search?q=<condition>&resultsAvailable=true

    Start from trials that declare results, so you are reading about studies that reported rather than studies that merely registered.

  2. 2
    GET /api/v1/trials/{canonicalId}/related

    Registry-declared publications first (kind=results is the strongest evidence a trial reported), then the Europe PMC records mentioning its registration identifiers.

  3. 3
    GET /api/v1/trials/{canonicalId}/related?include=crossref

    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.

  4. 4
    GET /api/v1/trials/{canonicalId}?includeRaw=true

    Verify any registry field you are about to assert against the untouched payload.

HOW TO REPORT ITSeparate 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.

Discovery endpoints are read-only and safe to crawl. The A2A card is advertised as discovery-only.

SYNDICATION

Follow the Wire in any reader.

Every reframed signal and cure-research update, delivered to the reader of your choice. Auto-discovery is enabled — most readers find the feed from any page on the site.

RSS / Atom feed
Works with Feedly, Inoreader, NetNewsWire, Thunderbird & more
https://negativeresistance.com/feed.xml
ECOSYSTEM USAGE
1,002
API REQUESTS SERVED
3,328
WIRE SIGNALS INDEXED
1,636
CURE RESEARCH PAPERS

Every request served is a question asked about curing human disease.

The window is still open.

Explore the full protocol, or start reading the Wire.