Collaborative Drug Discovery Protocols API

Protocols and their readout data

Operations 5

GET /vaults/{vault_id}/protocols Get protocols #
GET /vaults/{vault_id}/protocols/{id} Get a protocol #
PUT /vaults/{vault_id}/protocols/{id} Update a protocol #
GET /vaults/{vault_id}/protocols/{protocol_id}/data Get protocol data #
GET /vaults/{vault_id}/batches/{batch_id}/protocols/{id}/plot Get dose-response plot #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/collaborative-drug-discovery:collaborative-drug-discovery-protocols-api"
All apis
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.

Get an API 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 Specification

collaborative-drug-discovery-protocols-api-openapi.yml Raw ↑
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