Skip to content

Analyses ​

Score existing Discover signals into opportunities. This does not discover signals and does not write a report. See Concepts.

Run Analyses ​

POST /api/v1/projects/{projectId}/analyses

Scope: analyses:run. You must be an editor or owner. Status 202, including when the server asks you to confirm before it starts.

The body is a JSON object. Unknown fields return 400 and Unknown fields. A body that is not an object returns 400 and Invalid body.

Send one of these:

Selections. Specific partners the user named.

json
{
  "selections": [
    {
      "keyword_id": "8f3c1c2e-4b5a-4d6e-9f70-1a2b3c4d5e6f",
      "signal_keyword_id": "91aa0b11-2c3d-4e5f-a6b7-c8d9e0f1a2b3"
    }
  ]
}

keyword_id is the scope keyword. signal_keyword_id is the partner from List Signals.

Top. The first N of one type, using the saved ranking mode and signal filter.

json
{
  "top": { "type": "target", "limit": 10 }
}

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

include_analysed and confirmed may also sit on the selections body. Already-scored ids are skipped unless include_analysed is true. The result lists them in skipped with reason already scored.

At most 100 signals of one type can be scored at once.

If scoring setup has not been saved, the call returns 409 and Open setup_url to finish scoring setup before running analyses. Open the setup_url from Create a Project, or run setup_project over MCP.

A partner that is not on a finished scan returns 409. A partner that is not in the project, or that cannot be scored, returns 400.

Confirmation ​

A request that leaves the saved default comes back without starting a run. For selections, assumption is one of these sentences: This list has 21 signals., This list mixes target and disease., or This list includes signals that are already scored.

json
{
  "needs_confirmation": true,
  "assumption": "This list has 21 signals.",
  "signals": [
    {
      "keyword_id": "8f3c1c2e-4b5a-4d6e-9f70-1a2b3c4d5e6f",
      "signal_keyword_id": "91aa0b11-2c3d-4e5f-a6b7-c8d9e0f1a2b3",
      "type": "target"
    }
  ],
  "skipped": []
}

For top, the confirmation body uses assumption, available, limit, and signals from the list. assumption is the mode label, the saved filter, the type, whether already-scored rows are included, and the count, joined with commas. Send the same request again with confirmed: true to start it.

These leave the default: limit above 20, a different analysis_mode, include_analysed, readiness, therapeutic_area, mixed types in selections, or more than 20 selections.

Started ​

json
{
  "runs": [
    {
      "id": "c1d2e3f4-a5b6-4789-8abc-def012345678",
      "keyword_id": "8f3c1c2e-4b5a-4d6e-9f70-1a2b3c4d5e6f",
      "kind": "target_assessment"
    }
  ],
  "skipped": []
}

kind is the scoring stage, such as target_assessment. A top call also includes assumption, the sentence that states which mode, filter, and type were used.

If the scoring service does not respond, nothing is recorded. The status is 504 and the error is The scoring service did not respond, and no run was recorded. Do not retry a smaller list, and do not treat the timeout as a run that is still going.

Poll Project Status for scoring. When it is done, read Opportunities.

Actionable insights for better R&D and strategy decisions.