Open Responses APIs for Research Agents
This document summarizes the API endpoints exposed by the 20minds research-agent runtimes using the Open Responses-compatible interface.
It focuses on the runtime URLs used by clients such as the OpenAI SDK, CLI tools, and web apps.
Runtime Base URLs
Each runtime exposes the same core Open Responses endpoint shape under a different base URL:
| Runtime | Base URL | Reference |
|---|---|---|
| 20minds (Border Collie) | https://api.20minds.ai/v1/border-collie | 20minds.ai |
| AgentMD | https://api.20minds.ai/v1/agentmd | Nature Communications |
| Biomni | https://api.20minds.ai/v1/biomni | bioRxiv |
| DeepEvidence | https://api.20minds.ai/v1/deepevidence | arXiv |
| DS-Star | https://api.20minds.ai/v1/ds-star | arXiv |
| DSWizard | https://api.20minds.ai/v1/dswizard | Nature Biomedical Engineering |
| GeneAgent | https://api.20minds.ai/v1/geneagent | Nature Methods |
| InformGen | https://api.20minds.ai/v1/informgen | JAMIA |
| TrialGPT | https://api.20minds.ai/v1/trialgpt | Nature Communications |
| TrialMind SLR | https://api.20minds.ai/v1/trialmind-slr | npj digital medicine |
| VirtualLab | https://api.20minds.ai/v1/virtuallab | Nature |
Use your 20minds API key as an
api_key in the OpenAI SDK (or a Bearer token in requests).These runtimes use the same core endpoint shape described below (
/responses, /files, /health, /reset), with runtime-specific behavior in models, tools, and response metadata.Core Endpoints
These are the main endpoints clients should use.
Health
GET /health
Purpose:
- Basic service health check for the selected runtime.
Example:
curl -sS https://api.20minds.ai/v1/biomni/health
Responses API (Open Responses-compatible)
Create a response
POST /responses
Purpose:
- Create a new response/task.
- Supports polling (
stream: false) or SSE streaming (stream: true).
Notes:
- This is the primary endpoint used by
client.responses.create(...). previous_response_idcontinues a conversation/session when supported by the runtime.extra_body.task_modeis primarily relevant to Border Collie (agentvscoding).
Retrieve a response
GET /responses/{response_id}
Purpose:
- Fetch the current response snapshot (status, usage, output, metadata).
Typical statuses:
runningcompletedfaileddeleted
Delete a response
DELETE /responses/{response_id}
Purpose:
- Cancel/delete a response task.
Notes:
- For container-backed runtimes (for example Biomni and DS-Star), this also tears down the corresponding underlying session state for that response.
File Upload Endpoints
These endpoints support the upload flow used by the OpenAI SDK-compatible file interface.
Create file slot
POST /files
Purpose:
- Create a file record and receive an upload URL.
Typical response fields:
idresponse_idfilenamestatusupload_urlupload_expires_at
Upload file bytes
PUT /files/{file_id}
Purpose:
- Upload raw bytes to the file record created by
POST /files.
Notes:
- This is usually called via the returned
upload_url. - The upload URL is time-limited.
List files
GET /files
Purpose:
- List uploaded/available files for the runtime/session context.
Download file
GET /files/{file_id}
Purpose:
- Retrieve file contents (or file metadata proxy behavior, depending on runtime/file type).
Delete file
DELETE /files/{file_id}
Purpose:
- Remove an uploaded file.
Runtime Utility Endpoints
Reset workspace/runtime state
POST /reset
Purpose:
- Reset runtime workspace/session state for the authenticated user.
Notes:
- Available on the routed runtime API surface used by the 20minds application.
- Useful when you want a clean runtime without deleting individual responses/files.
Endpoint Matrix by Runtime
All three runtimes expose the same core shape:
GET /healthPOST /responsesGET /responses/{response_id}DELETE /responses/{response_id}POST /filesPUT /files/{file_id}GET /filesGET /files/{file_id}DELETE /files/{file_id}POST /reset
Runtime-specific behavior differs mainly in:
- Streaming event richness (
response.code_interpreter.*, file-search events, etc.) - Supported model lists and defaults
Recommended Client Usage (OpenAI SDK)
Use the OpenAI SDK and point
base_url to the runtime prefix:from openai import OpenAI
client = OpenAI(
base_url="https://api.20minds.ai/v1/border-collie",
api_key="<TWENTYMINDS_API_KEY>",
)
resp = client.responses.create(
model="gpt-5.2",
input="Summarize the key pathways involved in apoptosis.",
)
print(resp.id, resp.status)