Collaborative Drug Discovery Readout Rows API
Rows of protocol readout data
Rows of protocol 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-readout-rows-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 Readout Rows API
version: 1.0.0
servers:
- url: https://app.collaborativedrug.com/api/v1
security:
- ApiKeyAuth: []
tags:
- description: Rows of protocol readout data
name: Readout Rows
paths:
/vaults/{vault_id}/readout_rows/query:
post:
description: 'Get multiple readout rows (rows of protocol data). We still support the now deprecated GET queries on the endpoint without ''query'' in it and passing query parameters in the URL. It is highly recommended that you switch your applications to the POST queries described here.
When async is true the request returns an export to poll instead of the readout rows; check it with the GET export progress call and retrieve the result with the GET export call.'
operationId: getReadoutRows
parameters:
- in: path
name: vault_id
required: true
schema:
$ref: '#/components/schemas/vault_id'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/readout_row_query'
responses:
'200':
content:
application/json:
schema:
oneOf:
- description: Synchronous response
properties:
count:
description: Total number of readout rows matching the query
type: integer
objects:
items:
$ref: '#/components/schemas/readout_row'
type: array
offset:
type: integer
page_size:
type: integer
type: object
- $ref: '#/components/schemas/export'
description: The matching readout rows, or the export to poll when async is true
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/error_apikey'
description: Missing or invalid API key
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: Invalid query parameters, such as an illegal type
summary: Get multiple readout rows
tags:
- Readout Rows
/vaults/{vault_id}/readout_rows/{readout_row_id}:
get:
description: Get a single readout row (row of protocol data) by its id.
operationId: getReadoutRow
parameters:
- in: path
name: vault_id
required: true
schema:
$ref: '#/components/schemas/vault_id'
- in: path
name: readout_row_id
required: true
schema:
description: Numeric identifier of the readout row
type: integer
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/readout_row'
description: The readout row
'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: Couldn't find this readout row
summary: Get a readout row
tags:
- Readout Rows
delete:
description: Delete a single readout row (row of protocol data). Only detail rows can be deleted; aggregate rows cannot be deleted via the API.
operationId: deleteReadoutRow
parameters:
- in: path
name: vault_id
required: true
schema:
$ref: '#/components/schemas/vault_id'
- in: path
name: readout_row_id
required: true
schema:
description: Numeric identifier of the readout row
type: integer
responses:
'200':
content:
application/json:
schema:
properties:
message:
example: Readout row with ID 1 has been destroyed
type: string
type: object
description: The readout row was deleted
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/error_apikey'
description: Missing or invalid API key
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: Aggregate rows can't be destroyed via the API. Only detail rows can be destroyed
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: Couldn't find this readout row
summary: Delete a readout row
tags:
- Readout Rows
put:
description: 'Updates an existing readout row (including the ability to flag an existing readout row as an outlier).
This PUT Readout_Rows API call allows users to update a specified row of Protocol data or flag a specified row of Protocol data as an outlier. Only detail rows can be updated; aggregate rows cannot be updated via the API.
Noteworthy tips:
- The GET Protocol Data API call will be useful to ascertain the id of the readout row for the Protocol data you wish to edit. - The GET Protocols API call also provides the readout definition IDs.'
operationId: updateReadoutRow
parameters:
- in: path
name: vault_id
required: true
schema:
$ref: '#/components/schemas/vault_id'
- in: path
name: readout_row_id
required: true
schema:
description: Numeric identifier of the readout row
type: integer
requestBody:
content:
application/json:
schema:
properties:
readouts:
additionalProperties:
properties:
outlier:
description: Flag (or unflag) this readout as an outlier
type: boolean
value:
description: New value for this readout
type: object
description: New readout values and/or outlier flags, keyed by readout definition ID
example:
'283130':
value: 99
'283131':
outlier: true
type: object
type: object
responses:
'200':
content:
application/json:
schema:
properties:
id:
example: 1
type: integer
readouts:
additionalProperties: true
description: Readout values keyed by readout definition ID
type: object
type: object
description: The updated readout row
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: Invalid readout keys (only "value" and "outlier" are allowed), invalid outlier flag value, or the readout cannot be flagged as an outlier
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/error_apikey'
description: Missing or invalid API key
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: Aggregate rows can't be updated via the API. Only detail rows can be updated
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/error'
description: Couldn't find this readout row or one of its readouts
summary: Update existing row
tags:
- Readout Rows
components:
schemas:
date:
description: 'An ISO 8601 date, or date and time — see [Date and time formats](#date-and-time-formats). Timestamps on this field have one-second precision.
'
format: date
type: string
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
export:
properties:
created_at:
description: Timestamp in ISO-8601 UTC
example: '2024-01-02T03:04:05Z'
type: string
id:
example: 1
type: integer
modified_at:
description: Timestamp in ISO-8601 UTC
example: '2024-01-02T03:04:05Z'
type: string
queued_job_position:
description: Position of the export's job in the processing queue. Only present while the export is in the `new` state.
type: integer
status:
description: The export's state. While polling progress it moves `new` -> `started` -> `finished`; any value other than these three during polling means something went wrong. `canceled` is returned after a successful cancel.
enum:
- new
- started
- finished
- downloaded
- failed
- canceled
type: string
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
readout_row_query:
properties:
async:
description: If true, do an asynchronous export. Use for large data sets.
type: boolean
batches:
description: Array of batch ids. Defaults to all batches.
items:
type: integer
type: array
created_after:
$ref: '#/components/schemas/date'
created_before:
$ref: '#/components/schemas/date'
data_sets:
description: Array of public dataset ids. Defaults to all data sets.
items:
type: integer
type: array
include_control_state:
default: false
description: If true, include the control state of each readout.
type: boolean
modified_after:
$ref: '#/components/schemas/date'
modified_before:
$ref: '#/components/schemas/date'
molecules:
description: Array of molecule ids. Defaults to all molecules.
items:
type: integer
type: array
offset:
type: integer
only_ids:
default: false
description: If true, only return the ids of the readout rows.
type: boolean
page_size:
default: 50
description: Requested page size (maximum value 1000).
type: integer
plates:
description: Array of plate ids. Defaults to all plates.
items:
type: integer
type: array
projects:
description: Array of project ids. Defaults to all available projects.
items:
type: integer
type: array
protocols:
description: Array of protocol ids. Defaults to all protocols.
items:
type: integer
type: array
readout_rows:
description: Array of readout row ids. Defaults to all readout rows.
items:
type: integer
type: array
runs:
description: Array of run ids. Defaults to all runs.
items:
type: integer
type: array
runs_after:
$ref: '#/components/schemas/date'
runs_before:
$ref: '#/components/schemas/date'
type:
description: Filter to specific readout row types. Defaults to all types.
items:
enum:
- detail_row
- batch_run_aggregate_row
- batch_protocol_aggregate_row
- molecule_protocol_aggregate_row
type: string
type: array
type: object
vault_id:
description: Numeric identifier of the vault
type: integer
readout_row:
properties:
batch:
description: ID of the batch this readout row belongs to
example: 1
type: integer
class:
example: readout row
type: string
created_at:
description: Timestamp in ISO-8601 UTC
example: '2024-01-02T03:04:05Z'
type: string
id:
example: 1
type: integer
modified_at:
description: Timestamp in ISO-8601 UTC
example: '2024-01-02T03:04:05Z'
type: string
molecule:
description: ID of the molecule this readout row belongs to
example: 1
type: integer
protocol:
description: ID of the protocol this readout row belongs to
example: 1
type: integer
readouts:
additionalProperties: true
description: Readout values keyed by readout definition ID
type: object
run:
description: ID of the run this readout row belongs to
example: 1
type: integer
type:
enum:
- detail_row
- batch_run_aggregate_row
- batch_protocol_aggregate_row
- molecule_protocol_aggregate_row
type: string
well:
description: Well position for plate-based data
type: string
type: object
securitySchemes:
ApiKeyAuth:
in: header
name: X-CDD-Token
type: apiKey