Collaborative Drug Discovery Protocols API
Protocols and their readout data
Protocols and their readout data
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/collaborative-drug-discovery:collaborative-drug-discovery-protocols-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
contact:
url: https://support.collaborativedrug.com/hc/en-us/requests/new
description: 'Collaborative Drug Discovery provides an API (Application Programming
Interface) that can be used for secure programmatic access to your vault
data.'
license:
name: Proprietary
url: https://support.collaborativedrug.com/hc/en-us/requests/new
title: CDD Protocols API
version: 1.0.0
servers:
- url: https://app.collaborativedrug.com/api/v1
security:
- ApiKeyAuth: []
tags:
- description: Protocols and their readout data
name: Protocols
paths:
/vaults/{vault_id}/protocols:
get:
description: List protocols in the vault. Supports pagination (`page_size`, `offset`), asynchronous retrieval (`async=true`), `only_ids`, `no_runs` (omit run data), and filtering by name, project, molecule, plate, and dates.
operationId: getProtocols
parameters:
- in: path
name: vault_id
required: true
schema:
$ref: '#/components/schemas/vault_id'
- description: Maximum number of records to return (default 50, maximum 1000).
in: query
name: page_size
schema:
type: integer
- description: Number of records to skip (for pagination).
in: query
name: offset
schema:
type: integer
- description: If true, run the listing as an asynchronous export.
in: query
name: async
schema:
type: boolean
- description: If true, return only the ids of matching protocols.
in: query
name: only_ids
schema:
type: boolean
- description: If true, omit run data from each protocol.
in: query
name: no_runs
schema:
type: boolean
- description: Comma-separated protocol names to filter by.
in: query
name: names
schema:
type: string
- description: Comma-separated protocol ids to filter by.
in: query
name: protocols
schema:
type: string
- description: Comma-separated project ids to filter by.
in: query
name: projects
schema:
type: string
responses:
'200':
content:
application/json:
schema:
properties:
count:
type: integer
objects:
items:
$ref: '#/components/schemas/protocol_object'
type: array
offset:
type: integer
page_size:
type: integer
required:
- count
- objects
type: object
description: A page of protocols
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/error_apikey'
description: Missing or invalid API key
summary: Get protocols
tags:
- Protocols
/vaults/{vault_id}/protocols/{id}:
get:
description: Retrieve a single protocol. Pass `no_runs=true` to omit run data.
operationId: getProtocol
parameters:
- in: path
name: vault_id
required: true
schema:
$ref: '#/components/schemas/vault_id'
- description: Numeric identifier of the protocol
in: path
name: id
required: true
schema:
type: integer
- description: If true, omit run data from the response.
in: query
name: no_runs
schema:
type: boolean
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/protocol_object'
description: The protocol
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/error_apikey'
description: Missing or invalid API key
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: Protocol not found, or vault is unauthorized
summary: Get a protocol
tags:
- Protocols
put:
description: Update a protocol's definition (name, projects, and protocol field values). This does not modify readout definitions. Requires write permission.
operationId: updateProtocol
parameters:
- in: path
name: vault_id
required: true
schema:
$ref: '#/components/schemas/vault_id'
- description: Numeric identifier of the protocol
in: path
name: id
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/protocol_update'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/protocol_object'
description: The updated protocol
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/error_apikey'
description: Missing or invalid API key
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: Protocol not found, or vault is unauthorized
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: Validation error
summary: Update a protocol
tags:
- Protocols
/vaults/{vault_id}/protocols/{protocol_id}/data:
get:
description: Retrieve the readout data (detail rows, with any matching aggregate-row readouts merged in) for a protocol. Supports pagination and filtering by molecule, plate, run, and project. Pass `format=csv` to produce a CSV export instead of JSON.
operationId: getProtocolData
parameters:
- in: path
name: vault_id
required: true
schema:
$ref: '#/components/schemas/vault_id'
- description: Numeric identifier of the protocol
in: path
name: protocol_id
required: true
schema:
type: integer
- description: Maximum number of records to return (default 50, maximum 1000).
in: query
name: page_size
schema:
type: integer
- description: Number of records to skip (for pagination).
in: query
name: offset
schema:
type: integer
- description: If true, run the query as an asynchronous export.
in: query
name: async
schema:
type: boolean
- description: If "csv", produce a CSV export instead of a JSON page.
in: query
name: format
schema:
type: string
- description: Comma-separated molecule ids to filter by.
in: query
name: molecules
schema:
type: string
- description: Comma-separated run ids to filter by.
in: query
name: runs
schema:
type: string
- description: Comma-separated plate ids to filter by.
in: query
name: plates
schema:
type: string
- description: Comma-separated project ids to filter by.
in: query
name: projects
schema:
type: string
responses:
'200':
content:
application/json:
schema:
properties:
count:
type: integer
objects:
items:
properties:
batch:
type: integer
id:
type: integer
molecule:
type: integer
readouts:
additionalProperties: true
description: Readout values keyed by readout definition id.
type: object
run:
type: integer
well:
additionalProperties: true
type: object
type: object
type: array
offset:
type: integer
page_size:
type: integer
required:
- count
- objects
type: object
description: A page of protocol readout data
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/error_apikey'
description: Missing or invalid API key
summary: Get protocol data
tags:
- Protocols
/vaults/{vault_id}/batches/{batch_id}/protocols/{id}/plot:
get:
description: Generate dose-response plot image(s) for a batch within a protocol. Returns a ZIP archive containing one PNG per dose-response calculation when the protocol has more than one, or a single PNG when there is only one.
operationId: getDoseResponsePlot
parameters:
- in: path
name: vault_id
required: true
schema:
$ref: '#/components/schemas/vault_id'
- description: Numeric identifier of the batch
in: path
name: batch_id
required: true
schema:
type: integer
- description: Numeric identifier of the protocol
in: path
name: id
required: true
schema:
type: integer
- description: Image size multiplier.
in: query
name: size
schema:
enum:
- small
- medium
- large
type: string
- description: Comma-separated run ids to restrict the plotted data to.
in: query
name: runs
schema:
type: string
responses:
'200':
content:
application/octet-stream:
schema:
format: binary
type: string
application/zip:
schema:
format: binary
type: string
description: A ZIP archive of PNGs (when the protocol has several dose-response calculations) or a single PNG served as `application/octet-stream` (when it has only one).
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/error_apikey'
description: Missing or invalid API key
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: No data found for this batch/protocol, or vault is unauthorized
summary: Get dose-response plot
tags:
- Protocols
components:
schemas:
error:
description: A general error response containing an error message and HTTP status code
properties:
code:
description: HTTP status code
type: integer
example: 404
error:
description: Human-readable error message
type: string
example: Resource not found
type: object
protocol_update:
description: Attributes for updating a protocol's definition (not its readout definitions). Only the supplied fields are changed.
example:
name: My Inhibition Screen
projects:
- 12
protocol_fields:
Category: Biochemical
properties:
name:
type: string
projects:
description: Project ids the protocol belongs to (replaces the existing set).
items:
type: integer
type: array
protocol_fields:
additionalProperties: true
description: Custom protocol field values, keyed by field name.
type: object
type: object
error_apikey:
description: Whenever the given API key doesn't allow access to the given vault or the vault doesn't exist
properties:
code:
default: 401
type: integer
error:
default: key not authorized for access to this vault
type: string
type: object
protocol_object:
description: A protocol (assay definition) and its readout definitions, calculations, and runs.
properties:
calculations:
description: Calculation definitions on the protocol.
items:
additionalProperties: true
type: object
type: array
category:
description: Value of the Category protocol field, echoed at top level when present.
type: string
class:
example: protocol
type: string
created_at:
format: date-time
type: string
data_set:
description: Id of the data set the protocol belongs to.
type: integer
description:
description: Value of the Description protocol field, echoed at top level when present.
type: string
hit_definitions:
items:
additionalProperties: true
type: object
type: array
id:
type: integer
modified_at:
format: date-time
type: string
name:
type: string
ontology_annotations:
items:
additionalProperties: true
type: object
type: array
owner:
description: Full name of the protocol owner.
type: string
projects:
description: Project ids the protocol belongs to.
items:
type: integer
type: array
protocol_fields:
additionalProperties: true
description: Custom protocol field values, keyed by field name.
type: object
protocol_statistics:
items:
additionalProperties: true
type: object
type: array
readout_definitions:
description: The readout definitions of the protocol.
items:
additionalProperties: true
type: object
type: array
runs:
description: Runs of the protocol. Omitted when the request passes `no_runs=true`.
items:
additionalProperties: true
type: object
type: array
required:
- id
- class
- name
type: object
vault_id:
description: Numeric identifier of the vault
type: integer
securitySchemes:
ApiKeyAuth:
in: header
name: X-CDD-Token
type: apiKey