Skip to content

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.

QueryNotes
typeOptional. Compared to the signal type, case-insensitive.
analysis_modemost_promising, novel_signal_scout, or validated_opportunity. Anything else returns 400 and analysis_mode is not valid.
limitDefault 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.

Actionable insights for better R&D and strategy decisions.