REST reference
Use the Session REST reference for portable collaboration and the Execution REST reference for managed runs. The index below covers every endpoint.
The Developer API is the same service as the Biosimulant MCP server: each route runs the operation of the MCP tool it names, for the API key owner only, and returns the same envelope. For the guided path, start with the Developer API quickstart.
Base URL and authentication
https://api.biosimulant.com/v1Send a scoped API key on every request:
Authorization: Bearer bsk_live_...Every response includes a request ID. Run-creation requests also require Idempotency-Key. See Errors, limits and compute before implementing production retries.
Endpoint index
| Method | Path | Purpose |
|---|---|---|
GET | /capabilities | List Capabilities |
GET | /capabilities/{namespace}/{name} | Get Capability |
POST | /runs | Start an approved simulation |
GET | /runs | List my simulations |
POST | /runs/{run_id}/cancel | Cancel a simulation |
GET | /runs/{run_id}/results | Get Public Results |
GET | /runs/{run_id}/artifacts/{artifact_id} | Download Public Artifact |
GET | /hub/search | Find published models and labs |
GET | /hub/releases/{reference} | Inspect a published model or lab |
POST | /biology/search | Find biological evidence |
POST | /biology/fetch | Retrieve biological evidence |
GET | /labs | List my labs |
PATCH | /labs/{lab_id} | Rename or describe a lab |
PUT | /labs/{lab_id}/visibility | Change who can see a lab |
GET | /workspaces | List my private labs in progress |
POST | /workspaces | Create a private lab |
GET | /workspaces/{workspace_id} | Check a private lab |
POST | /workspaces/{workspace_id}/change-plans | Preview lab changes |
POST | /workspace-revisions | Apply approved lab changes |
POST | /run-plans | Check a simulation before running |
GET | /runs/{run_id} | Check simulation progress and results |
GET | /runs/{run_id}/events | Read a simulation’s log |
GET | /runs/{run_id}/artifacts/{artifact_id}/metadata | Read simulation results |
GET | /compute-profiles | List compute options |
GET | /experiments | List my experiments |
POST | /experiments | Start an approved experiment |
POST | /experiment-plans | Preview an experiment |
GET | /experiments/{experiment_id} | Check an experiment |
PATCH | /experiments/{experiment_id} | Update an experiment |
GET | /passports | Read the evidence review |
POST | /publication-plans | Preview publication |
POST | /publications | Publish an approved release |
GET | /labs/{lab_id}/hosting | Inspect Lab hosting |
PATCH | /labs/{lab_id}/hosting | Change Lab hosting state |
POST | /labs/{lab_id}/hosting-plans | Prepare Lab hosting |
POST | /hosting-requests | Request approved Lab hosting |
POST | /files/from-run | Reuse a Run output as an input |
GET | /files | List my uploaded files |
POST | /files | File Upload Route |
GET | /files/{file_id} | Read an uploaded file |
GET | /account | Check my account |
GET | /skills | List Biosimulant skills |
GET | /skills/{name} | Read a Biosimulant skill |
GET | /files/{file_id}/content | File Download Route |
GET | /datasets | List dataset versions |
POST | /datasets | Register a dataset version |
GET | /datasets/{dataset_id} | Read a dataset version |
GET | /hosted-releases/{reference} | Inspect an exact hosted release |
POST | /hosted-invocation-plans | Prepare a hosted invocation |
POST | /hosted-invocations | Execute an approved hosted invocation |
GET | /hosted-invocations/{invocation_id} | Read a hosted invocation |
POST | /hosted-invocations/{invocation_id}/cancel | Cancel my hosted invocation |
GET | /hosted-invocations/{invocation_id}/artifacts/{port}/metadata | Read a hosted output artifact |
POST | /sessions | Create a durable chat session |
GET | /sessions | List collaboration sessions |
GET | /sessions/{session_id} | Resume an external collaboration |
POST | /sessions/{session_id}/external-sessions | Attach an external conversation |
POST | /sessions/{session_id}/contract-plans | Propose session requirements |
POST | /sessions/{session_id}/execution-plans | Propose an external execution plan |
POST | /session-changes | Apply approved session state |
POST | /sessions/{session_id}/progress | Record external plan progress |
POST | /sessions/{session_id}/validation | Evaluate session evidence |
POST | /sessions/{session_id}/completion | Check session completion |
POST | /sessions/{session_id}/workspace | Create the session Lab workspace |
GET /capabilities
Lists runnable lab versions visible to the API-key owner, including their declared input and output schemas.
Required scope: capabilities:read
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
limit | query | no | integer | Maximum number of items to return. |
Example request
curl --request GET "https://api.biosimulant.com/v1/capabilities" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"items": [
{
"ref": "demi/microbiology-hello-world-growth@1.0.0",
"name": "microbiology-hello-world-growth",
"version": "1.0.0",
"title": "Microbiology Hello World Growth",
"inputs": [
{
"name": "initial_cells",
"value_type": "integer",
"required": true
}
],
"outputs": [
{
"name": "final_cells",
"value_type": "integer"
}
],
"package_sha256": "sha256:…"
}
],
"has_more": false
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /capabilities/{namespace}/{name}
Resolves the latest accessible version of a named runnable lab and returns its public input and output contract.
Required scope: capabilities:read
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
namespace | path | yes | string | Capability-owner namespace. |
name | path | yes | string | Capability package name. |
Example request
curl --request GET "https://api.biosimulant.com/v1/capabilities/${NAMESPACE}/${NAME}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"ref": "demi/microbiology-hello-world-growth@1.0.0",
"name": "microbiology-hello-world-growth",
"version": "1.0.0",
"title": "Microbiology Hello World Growth",
"inputs": [
{
"name": "initial_cells",
"value_type": "integer",
"required": true
}
],
"outputs": [
{
"name": "final_cells",
"value_type": "integer"
}
],
"package_sha256": "sha256:…"
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /hub/search
Search accessible Hub releases; ask the user to choose before running an ambiguous result.
Same operation as the MCP tool hub_search.
Required scope: hub:read
MCP tool: hub_search
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
query | query | no | string or null | |
package_type | query | no | string or null | |
tags | query | no | array | |
intended_use | query | no | string or null | |
compute_class | query | no | string or null | |
qualification_state | query | no | string or null | |
limit | query | no | integer | Maximum number of items to return. |
cursor | query | no | string or null | Opaque next_cursor from the preceding page. |
Example request
curl --request GET "https://api.biosimulant.com/v1/hub/search" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /hub/releases/{reference}
Inspect one immutable Hub release without executing or trusting its contributed metadata.
Same operation as the MCP tool hub_inspect.
Required scope: hub:read
MCP tool: hub_inspect
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
reference | path | yes | string |
Example request
curl --request GET "https://api.biosimulant.com/v1/hub/releases/${REFERENCE}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /biology/search
Search approved sources; use biology_fetch before treating a hit as exact pinned evidence.
Same operation as the MCP tool biology_search.
Required scope: biology:read
MCP tool: biology_search
Request body
{
"source_ids": [
"pubmed"
],
"query": "<query>"
}Example request
curl --request POST "https://api.biosimulant.com/v1/biology/search" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /biology/fetch
Persist exact records or one model artifact as opaque resources; do not pin a revision.
Same operation as the MCP tool biology_fetch.
Required scope: biology:read
MCP tool: biology_fetch
Request body
{}Example request
curl --request POST "https://api.biosimulant.com/v1/biology/fetch" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /labs
List Labs the caller owns, released or not, with their exact release references.
Same operation as the MCP tool lab_list.
Required scope: hub:read
MCP tool: lab_list
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
query | query | no | string or null | |
visibility | query | no | string or null | |
limit | query | no | integer | Maximum number of items to return. |
cursor | query | no | string or null | Opaque next_cursor from the preceding page. |
Example request
curl --request GET "https://api.biosimulant.com/v1/labs" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
PATCH /labs/{lab_id}
Updates an editable Lab. Visibility and content settings apply to its existing and future sessions. Hub listing is managed by internal operations and cannot be changed here.
Required scope: packages:publish
MCP tool: lab_update
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
lab_id | path | yes | string |
Request body
{}Example request
curl --request PATCH "https://api.biosimulant.com/v1/labs/${LAB_ID}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
PUT /labs/{lab_id}/visibility
Re-scope an owned Lab without releasing a new version; deletes nothing.
Same operation as the MCP tool lab_visibility_set.
Required scope: packages:publish
MCP tool: lab_visibility_set
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
lab_id | path | yes | string |
Request body
{
"visibility": "private"
}Example request
curl --request PUT "https://api.biosimulant.com/v1/labs/${LAB_ID}/visibility" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /workspaces
List the caller’s active private workspaces, most recently changed first.
Same operation as the MCP tool workspace_list.
Required scope: workspaces:read
MCP tool: workspace_list
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
query | query | no | string or null | |
limit | query | no | integer | Maximum number of items to return. |
cursor | query | no | string or null | Opaque next_cursor from the preceding page. |
Example request
curl --request GET "https://api.biosimulant.com/v1/workspaces" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /workspaces
Create a private immutable workspace or fork an exact Hub release; no compute is started.
Follow the biosimulant skill’s references/naming.md for scientific titles, stable package identities, and model/child-Lab role aliases. Preserve source names.
Same operation as the MCP tool workspace_create.
Required scope: workspaces:write
MCP tool: workspace_create
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
Idempotency-Key | header | no | string or null | Unique key for this logical run-creation request. Reuse only when retrying the same payload. |
Request body
{
"title": "<title>"
}Example request
curl --request POST "https://api.biosimulant.com/v1/workspaces" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /workspaces/{workspace_id}
Read one owned workspace revision, including bounded untrusted files and pinned evidence.
Same operation as the MCP tool workspace_get.
Required scope: workspaces:read
MCP tool: workspace_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
workspace_id | path | yes | string | |
revision_id | query | no | string or null |
Example request
curl --request GET "https://api.biosimulant.com/v1/workspaces/${WORKSPACE_ID}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /workspaces/{workspace_id}/change-plans
Validate and digest a workspace proposal; it never changes the active revision.
Review naming findings for Labs, embedded models and child Labs. Duplicate or invalid explicit sibling aliases block. Titles and identity changes are advisory; an intentional alias rename must update wiring and public IO mappings together.
Same operation as the MCP tool workspace_change_prepare.
Required scope: workspaces:write
MCP tool: workspace_change_prepare
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
workspace_id | path | yes | string | |
Idempotency-Key | header | no | string or null | Unique key for this logical run-creation request. Reuse only when retrying the same payload. |
Request body
{
"base_revision_id": "00000000-0000-0000-0000-000000000123",
"operations": [
{
"kind": "file_put",
"path": "<path>"
}
]
}Example request
curl --request POST "https://api.biosimulant.com/v1/workspaces/${WORKSPACE_ID}/change-plans" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /workspace-revisions
After explicit user confirmation, apply one exact plan as a new immutable revision.
Same operation as the MCP tool workspace_change_apply.
Required scope: workspaces:write
MCP tool: workspace_change_apply
Request body
{
"plan_id": "00000000-0000-0000-0000-000000000123",
"plan_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}Example request
curl --request POST "https://api.biosimulant.com/v1/workspace-revisions" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /compute-profiles
Discover live CPU/GPU profiles before creating/updating a Lab or preparing compute.
Pass an item id as compute_profile_id to run_prepare or an experiment arm. Configured availability does not guarantee capacity; provider selection is platform-controlled.
Same operation as the MCP tool compute_profile_list.
Required scope: runs:read
MCP tool: compute_profile_list
Example request
curl --request GET "https://api.biosimulant.com/v1/compute-profiles" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /experiments
List the caller’s studies with run totals, most recently changed first.
Same operation as the MCP tool experiment_list.
Required scope: runs:read
MCP tool: experiment_list
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
status | query | no | string or null | |
workspace_id | query | no | string or null | |
limit | query | no | integer | Maximum number of items to return. |
cursor | query | no | string or null | Opaque next_cursor from the preceding page. |
Example request
curl --request GET "https://api.biosimulant.com/v1/experiments" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /experiments
Open the approved study and queue exactly its arms under that one approval.
Same operation as the MCP tool experiment_create.
Required scope: runs:write
MCP tool: experiment_create
Request body
{
"plan_id": "00000000-0000-0000-0000-000000000123",
"plan_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}Example request
curl --request POST "https://api.biosimulant.com/v1/experiments" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /experiment-plans
Preflight every arm of a study and digest the whole proposal; no compute is queued.
Each arm is preflighted exactly as a lone run would be, and findings are reported per arm. One approval of the returned digest authorizes precisely these arms.
Same operation as the MCP tool experiment_prepare.
Required scope: runs:write
MCP tool: experiment_prepare
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
Idempotency-Key | header | no | string or null | Unique key for this logical run-creation request. Reuse only when retrying the same payload. |
Request body
{
"name": "<name>",
"arms": [
{
"label": "<label>",
"workspace_id": "00000000-0000-0000-0000-000000000123",
"revision_id": "00000000-0000-0000-0000-000000000123"
}
]
}Example request
curl --request POST "https://api.biosimulant.com/v1/experiment-plans" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /experiments/{experiment_id}
Read a study’s arms, their runs and the comparison across them.
Comparable values come only from runs that actually completed; an arm with no completed run reports no metrics rather than a guess.
Same operation as the MCP tool experiment_get.
Required scope: runs:read
MCP tool: experiment_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
experiment_id | path | yes | string |
Example request
curl --request GET "https://api.biosimulant.com/v1/experiments/${EXPERIMENT_ID}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
PATCH /experiments/{experiment_id}
Rename, re-goal or close a study, or detach runs; deletes nothing.
Same operation as the MCP tool experiment_update.
Required scope: runs:write
MCP tool: experiment_update
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
experiment_id | path | yes | string |
Request body
{}Example request
curl --request PATCH "https://api.biosimulant.com/v1/experiments/${EXPERIMENT_ID}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /passports
Return a signed per-check Passport for exactly one owned subject, not a validity score.
Same operation as the MCP tool passport_get.
Required scope: passports:read
MCP tool: passport_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
passport_id | query | no | string or null | |
run_id | query | no | string or null | Owned run UUID. |
workspace_id | query | no | string or null | |
revision_id | query | no | string or null |
Example request
curl --request GET "https://api.biosimulant.com/v1/passports" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /publication-plans
Validate and digest a release candidate; this tool never publishes it.
Same operation as the MCP tool publish_prepare.
Required scope: packages:publish
MCP tool: publish_prepare
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
Idempotency-Key | header | no | string or null | Unique key for this logical run-creation request. Reuse only when retrying the same payload. |
Request body
{
"workspace_id": "00000000-0000-0000-0000-000000000123",
"revision_id": "00000000-0000-0000-0000-000000000123",
"version": "1.0.0",
"release_notes": "<release_notes>"
}Example request
curl --request POST "https://api.biosimulant.com/v1/publication-plans" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /publications
Publish an approved plan directly or through a matching successful workflow grant.
Same operation as the MCP tool publish_execute.
Required scope: packages:publish
MCP tool: publish_execute
Request body
{
"plan_id": "00000000-0000-0000-0000-000000000123",
"plan_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}Example request
curl --request POST "https://api.biosimulant.com/v1/publications" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /labs/{lab_id}/hosting
Read an owned Lab’s hosting approval, exact release, deployment checks and status.
A recorded hosting request is not a ready deployment. Inspect completed checks and the ready status before claiming the hosted Lab can be invoked.
Same operation as the MCP tool hosting_get.
Required scope: runs:read
MCP tool: hosting_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
lab_id | path | yes | string |
Example request
curl --request GET "https://api.biosimulant.com/v1/labs/${LAB_ID}/hosting" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
PATCH /labs/{lab_id}/hosting
Record an authorized hosting lifecycle change with the existing owner controls.
Deployment workers apply resource changes asynchronously; read hosting_get and deployment checks before reporting resource cleanup or readiness.
Same operation as the MCP tool hosting_update.
Required scope: runs:write
MCP tool: hosting_update
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
lab_id | path | yes | string |
Request body
{
"revision": 0,
"action": "pause"
}Example request
curl --request PATCH "https://api.biosimulant.com/v1/labs/${LAB_ID}/hosting" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /labs/{lab_id}/hosting-plans
Validate and digest an exact hosting request; no hosting compute starts here.
Return release identity, private smoke inputs, compute bounds, ongoing-cost caveat, approval requirements and expiry. Execute only after approval of the exact digest; hosting never bypasses the existing administrator review.
Same operation as the MCP tool hosting_prepare.
Required scope: runs:write
MCP tool: hosting_prepare
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
lab_id | path | yes | string | |
Idempotency-Key | header | yes | string | Unique key for this logical run-creation request. Reuse only when retrying the same payload. |
Request body
{}Example request
curl --request POST "https://api.biosimulant.com/v1/labs/${LAB_ID}/hosting-plans" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json201 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
201 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /hosting-requests
Execute an approved hosting plan through the existing hosted Lab lifecycle.
Recheck permissions, release bytes, settings, environment and smoke-file identities. Record the request once; public/GPU approval and deployment checks still follow. Use hosting_get to verify readiness.
Same operation as the MCP tool hosting_execute.
Required scope: runs:write
MCP tool: hosting_execute
Request body
{
"plan_id": "00000000-0000-0000-0000-000000000123",
"plan_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}Example request
curl --request POST "https://api.biosimulant.com/v1/hosting-requests" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json201 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
201 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /files/from-run
Copy verified artifact bytes into private reusable Files, retaining their Run origin.
This never loads a checkpoint or executes artifact content. Failed Run outputs can be retained too; copying them does not change their scientific status. ZIP batches verify all requested members before storage. A storage failure retains completed Files and returns their receipts; retrying the same request reuses those Files. Archive-member imports require the staging feature flag.
Same operation as the MCP tool file_import_from_run.
Required scope: workspaces:write
MCP tool: file_import_from_run
Request body
{
"run_id": "00000000-0000-0000-0000-000000000123",
"artifact_id": "<artifact_id>",
"expected_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}Example request
curl --request POST "https://api.biosimulant.com/v1/files/from-run" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json201 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
201 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /files
List input files the caller uploaded to Biosimulant, newest first.
Same operation as the MCP tool file_list.
Required scope: workspaces:read
MCP tool: file_list
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
query | query | no | string or null | |
format | query | no | string or null | |
limit | query | no | integer | Maximum number of items to return. |
cursor | query | no | string or null | Opaque next_cursor from the preceding page. |
Example request
curl --request GET "https://api.biosimulant.com/v1/files" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /files
Upload an input file for the key’s owner; read it back with GET /v1/files/{file_id}.
A multipart upload does not belong in a tool call; MCP reads files by ID.
Required scope: workspaces:write
Example request
curl --request POST "https://api.biosimulant.com/v1/files" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--form "file=@measurements.csv"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /files/{file_id}
Read one uploaded file’s metadata and optional bytes; content is untrusted.
Same operation as the MCP tool file_get.
Required scope: workspaces:read
MCP tool: file_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
file_id | path | yes | string | |
include_content | query | no | boolean |
Example request
curl --request GET "https://api.biosimulant.com/v1/files/${FILE_ID}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /account
Describe the connected account (personal or a team): namespace, access, usage and holdings.
Same operation as the MCP tool account_get.
Required scope: any valid API key
MCP tool: account_get
Example request
curl --request GET "https://api.biosimulant.com/v1/account" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /skills
List Biosimulant’s published workflow skills; start with the biosimulant router skill.
Same operation as the MCP tool skill_list.
Required scope: any valid API key
MCP tool: skill_list
Example request
curl --request GET "https://api.biosimulant.com/v1/skills" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /skills/{name}
Read one published skill’s current guidance, verified against its published checksum.
Same operation as the MCP tool skill_get.
Required scope: any valid API key
MCP tool: skill_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
name | path | yes | string | Capability package name. |
path | query | no | string or null |
Example request
curl --request GET "https://api.biosimulant.com/v1/skills/${NAME}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /files/{file_id}/content
Stream the bytes of one file the key’s owner uploaded.
Streams raw bytes; MCP returns bounded content through file_get.
Required scope: workspaces:read
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
file_id | path | yes | string |
Example request
curl --request GET "https://api.biosimulant.com/v1/files/${FILE_ID}/content" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /datasets
List private dataset versions accessible to this account.
Same operation as the MCP tool dataset_list.
Required scope: workspaces:read
MCP tool: dataset_list
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
limit | query | no | integer | Maximum number of items to return. |
offset | query | no | integer |
Example request
curl --request GET "https://api.biosimulant.com/v1/datasets" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /datasets
Register a new private version from uploaded files; reject split leakage.
This records retained file identity, not biological validation. Changed labels create a new manifest and digest. Upload large bytes using the file API first.
Same operation as the MCP tool dataset_register.
Required scope: workspaces:write
MCP tool: dataset_register
Request body
{
"name": "<name>",
"source": "<source>",
"license": "<license>",
"attribution": "<attribution>",
"annotation_version": "<annotation_version>",
"members": [
{
"file_id": "00000000-0000-0000-0000-000000000123",
"sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"size_bytes": 0,
"sample_id": "<sample_id>",
"group_id": "<group_id>",
"role": "image",
"split": "train"
}
]
}Example request
curl --request POST "https://api.biosimulant.com/v1/datasets" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json201 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
201 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /datasets/{dataset_id}
Read an immutable manifest with retained file identities and split membership.
Same operation as the MCP tool dataset_get.
Required scope: workspaces:read
MCP tool: dataset_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
dataset_id | path | yes | string |
Example request
curl --request GET "https://api.biosimulant.com/v1/datasets/${DATASET_ID}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /hosted-releases/{reference}
Read accessible hosting inputs and bounds without exposing private smoke fixtures.
Same operation as the MCP tool hosted_release_get.
Required scope: runs:read
MCP tool: hosted_release_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
reference | path | yes | string | |
sha256 | query | yes | string |
Example request
curl --request GET "https://api.biosimulant.com/v1/hosted-releases/${REFERENCE}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /hosted-invocation-plans
Bind input identities, deployment, account, expiry and compute bounds; no execution starts.
Same operation as the MCP tool hosted_invocation_prepare.
Required scope: runs:write
MCP tool: hosted_invocation_prepare
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
Idempotency-Key | header | yes | string | Unique key for this logical run-creation request. Reuse only when retrying the same payload. |
Request body
{
"reference": "<reference>",
"sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}Example request
curl --request POST "https://api.biosimulant.com/v1/hosted-invocation-plans" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json201 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
201 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /hosted-invocations
Recheck permissions and inputs, then enqueue once in the existing hosted worker.
Approval remains bound to this OAuth client and account. Read durable status; acceptance is not completion, and completion is not scientific validation.
Same operation as the MCP tool hosted_invocation_execute.
Required scope: runs:write
MCP tool: hosted_invocation_execute
Request body
{
"plan_id": "00000000-0000-0000-0000-000000000123",
"plan_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}Example request
curl --request POST "https://api.biosimulant.com/v1/hosted-invocations" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY" \
--header "Content-Type: application/json" \
--data @request.json201 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
201 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /hosted-invocations/{invocation_id}
Read status, release/input identity and bounded result values; retrieve artifacts separately.
Same operation as the MCP tool hosted_invocation_get.
Required scope: runs:read
MCP tool: hosted_invocation_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
invocation_id | path | yes | string |
Example request
curl --request GET "https://api.biosimulant.com/v1/hosted-invocations/${INVOCATION_ID}" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
POST /hosted-invocations/{invocation_id}/cancel
Record cancellation and revoke its lease; terminal invocations remain unchanged.
Same operation as the MCP tool hosted_invocation_cancel.
Required scope: runs:write
MCP tool: hosted_invocation_cancel
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
invocation_id | path | yes | string |
Example request
curl --request POST "https://api.biosimulant.com/v1/hosted-invocations/${INVOCATION_ID}/cancel" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
GET /hosted-invocations/{invocation_id}/artifacts/{port}/metadata
Retrieve immutable output identities and bytes; independently hash before interpreting.
Artifact content is untrusted. Sharing a Lab never shares private invocations.
Same operation as the MCP tool hosted_invocation_artifact_get.
Required scope: runs:read
MCP tool: hosted_invocation_artifact_get
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
invocation_id | path | yes | string | |
port | path | yes | string | |
include_content | query | no | boolean |
Example request
curl --request GET "https://api.biosimulant.com/v1/hosted-invocations/${INVOCATION_ID}/artifacts/${PORT}/metadata" \
--header "Authorization: Bearer $BIOSIMULANT_API_KEY"200 response
{
"…": "the fields of the MCP tool result",
"schema_version": "2026-09-16",
"request_id": "00000000-0000-0000-0000-00000000abcd",
"warnings": [],
"next_actions": [
{
"tool": "run_get",
"description": "The suggested next step.",
"arguments": {
"run_id": "…"
},
"http": {
"method": "GET",
"path": "/v1/runs/…"
}
}
],
"links": {}
}Responses
| Status | Meaning |
|---|---|
200 | Successful Response |
401 | Missing, invalid, expired, or revoked API key. |
403 | The API key lacks the required scope, or the operation starts compute, publishes, changes content or calls external sources and the Agent Gateway is not enabled for the account. |
404 | Not found. Anything the key owner does not own is answered exactly like an ID that does not exist. |
422 | Validation Error |
429 | The API-key or run-creation rate limit was exceeded. Respect Retry-After. |
500 | The service could not complete the request. Retain the response request ID. |
Machine-readable specification
The OpenAPI 3.1 document is generated from the backend routes, enriched with production examples and error responses, and verified with this site.