Appearance
Signals
Discover candidates for a project. A signal is not an opportunity. See Concepts.
List Signals
GET /api/v1/projects/{projectId}/signals
Scope: intangia:read. You must be a member of the project.
| Query | Notes |
|---|---|
type | Optional. Compared to the signal type, case-insensitive. |
analysis_mode | most_promising, novel_signal_scout, or validated_opportunity. Anything else returns 400 and analysis_mode is not valid. |
limit | Default 100, maximum 500. Must be a positive number. 0 returns 400. |
These query names are rejected with 400 and Unknown fields: s3_path, path, bucket, location.
The list uses the project's saved signal filter. The response describes that filter in filter. It does not accept a filter document.
bash
curl "https://app.intangia.co/api/v1/projects/$PROJECT_ID/signals?type=target&limit=20" \
-H "Authorization: Bearer $TOKEN"json
{
"analysis_mode": "most_promising",
"analysis_mode_label": "Most promising",
"filter": "",
"total": 1,
"unanalysed_total": 1,
"signals": [
{
"keyword_id": "8f3c1c2e-4b5a-4d6e-9f70-1a2b3c4d5e6f",
"signal_keyword_id": "91aa0b11-2c3d-4e5f-a6b7-c8d9e0f1a2b3",
"name": "kinase",
"type": "target",
"position": 1,
"rank": 1,
"analysed": false
}
]
}keyword_id is the scope keyword. signal_keyword_id is the partner. analysed is true when that partner is already scored for the current setup. total counts the filtered set. unanalysed_total counts how many of those are not scored yet.
This route always applies the saved filter and cannot ask for unscored rows only. The MCP tool list_signals can, with unanalysed_only. Its default limit is 20, not 100.
Project Status
GET /api/v1/projects/{projectId}/status
Scope: intangia:read. You must be a member.
json
{
"signals_ready": true,
"scoring": "not_started",
"summary": "Signal discovery is finished. Signals are ready to score. Scoring has not started.",
"next": "run_analyses",
"analyses": [
{
"keyword_id": "8f3c1c2e-4b5a-4d6e-9f70-1a2b3c4d5e6f",
"keyword_name": "kinase",
"task_id": "...",
"status": "done",
"updated_at": "2026-10-01T09:00:00.000Z",
"runs": []
}
]
}signals_ready means every discovery scan is done. scoring is not_started, running, or done. next is wait, run_analyses, or list_signals. Follow next. When scoring is done, unscored signals may remain.
Each analysis status is pending, running, done, or failed. runs lists scoring tasks with id, type, and status.