Appearance
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
| Argument | Notes |
|---|---|
project_id | UUID |
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.
| Argument | Notes |
|---|---|
project_id | UUID |
type | Optional type filter |
limit | Optional. Default 20, maximum 100. |
analysis_mode | Optional. most_promising, novel_signal_scout, or validated_opportunity. |
unanalysed_only | When 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.
| Argument | Notes |
|---|---|
project_id | UUID |
limit | Optional. 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.
| Argument | Notes |
|---|---|
project_id | UUID |
signal_keyword_id | Partner id |
include_evidence | Optional. 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.
| Argument | Notes |
|---|---|
project_id | UUID |
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_analysed | Optional. Default skips partners that are already scored. |
confirmed | Optional. 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.