Skip to content

Discovery and Scoring ​

Discovery finds signals. Scoring turns signals into opportunities. signals_ready means discovery finished, not that every candidate is scored. Follow next on get_project_status.

Project Status ​

get_project_status · intangia:read

ArgumentNotes
project_idUUID

The body matches Project Status: signals_ready, scoring (not_started, running, done), summary, next (wait, run_analyses, list_signals), and analyses.

When the user asked to analyse and scoring is not_started, call run_analyses with top. When scoring is done, unscored signals may remain.

List Signals ​

list_signals · intangia:read

Discover candidates, not opportunities. Uses the saved ranking mode and signal filter.

ArgumentNotes
project_idUUID
typeOptional type filter
limitOptional. Default 20, maximum 100.
analysis_modeOptional. most_promising, novel_signal_scout, or validated_opportunity.
unanalysed_onlyWhen true, only signals that are not scored yet

total is the filtered count. unanalysed_total is how many of those are not scored yet. Do not raise limit past 20 unless the user asked. For a top-N score, call run_analyses with top. Do not copy ids into selections for that.

The row shape matches List Signals. The REST route cannot set unanalysed_only, and its default limit is 100.

List Opportunities ​

list_opportunities · intangia:read

The ranked scoreboard. Not the Discover list, and not the raw payload from List Opportunities on the API.

ArgumentNotes
project_idUUID
limitOptional. Default 20, maximum 100.
json
{
  "total": 1,
  "assessments": [
    {
      "keyword_id": "8f3c1c2e-4b5a-4d6e-9f70-1a2b3c4d5e6f",
      "signal_keyword_id": "91aa0b11-2c3d-4e5f-a6b7-c8d9e0f1a2b3",
      "name": "Example target",
      "type": "target",
      "verdict": "Pursue",
      "composite_score": 72,
      "rationale": "Short rationale, clipped at 240 characters."
    }
  ]
}

type is target, disease, or modality. Pillar text and evidence are not here. For one opportunity, call get_assessment.

You must be a member of the project.

Get an Assessment ​

get_assessment · intangia:read

One opportunity: verdict, composite score, confidence, rationale, and pillar scores. Look up by signal_keyword_id (the partner id). Use list_opportunities first.

ArgumentNotes
project_idUUID
signal_keyword_idPartner id
include_evidenceOptional. Papers and risks for this opportunity.
json
{
  "keyword_id": "8f3c1c2e-4b5a-4d6e-9f70-1a2b3c4d5e6f",
  "signal_keyword_id": "91aa0b11-2c3d-4e5f-a6b7-c8d9e0f1a2b3",
  "name": "Example target",
  "type": "target",
  "verdict": "Pursue",
  "composite_score": 72,
  "composite_grade": "A",
  "confidence": 0.8,
  "verdict_rationale": "Why this verdict was reached.",
  "pillars": { "pillar_biology": 70 }
}

Pillar keys are the pillar_* fields on the assessment, each set to that pillar's score. With include_evidence: true, the result also has recent_evidence (id, year, title, key_finding) and risk_factors (risk, severity, mitigation).

No matching assessment returns { "error": "No assessment for this signal", "status": 404 }.

Run Analyses ​

run_analyses · analyses:run

You must be an editor or owner. This scores existing signals. It does not discover them, and it does not create a report.

ArgumentNotes
project_idUUID
top{ "type", "limit" } for the first N of one type. Do not also paste ids.
selections{ "keyword_id", "signal_keyword_id" } only when the user named specific signals
include_analysedOptional. Default skips partners that are already scored.
confirmedOptional. Required when the request leaves the saved default.

top.type is target, disease, modality, or mechanism. Optional fields on top: analysis_mode, confirmed, include_analysed, readiness, therapeutic_area.

The call states its assumption: saved ranking mode, saved signal filter, type, and that it skips signals already scored. Already-scored ids are listed in skipped unless include_analysed is true.

Ask before calling again with confirmed: true when the request leaves that default: a different analysis_mode, readiness or therapeutic_area, include_analysed, mixed types, or more than 20. Do not invent filter JSON. At most 100 signals of one type.

A successful start matches Run Analyses: runs with id, keyword_id, and kind, plus skipped. A confirmation comes back as needs_confirmation: true and does not record a run.

If this fails, repeat the error text. A timeout means no run was recorded: do not retry a smaller list, and do not say scoring is still running. The error is The scoring service did not respond, and no run was recorded. with status 504.

Actionable insights for better R&D and strategy decisions.