CDD API
v1.0.0https://app.collaborativedrug.com/api/v1Collaborative Drug Discovery provides an API (Application Programming Interface) that can be used for secure programmatic access to your vault data. Using the API, client applications such as Microsoft Office, Pipeline Pilot, Knime and others can be configured to directly access and process chemical and biological data from CDD Vault.
Download the full specification: OpenAPI YAML · OpenAPI JSON. Import it into Postman, an SDK/client generator, or your IDE.
For LLMs / AI tools: llms.txt (concise index) · llms-full.txt (full documentation text).
Using the API
The API is designed using RESTful principles: objects (resources) are identified by URLs, and actions are specified by HTTP verbs. (If that doesn't mean anything to you, don't worry — it isn't necessary for using the API.) API URLs closely mirror the URLs of the web application.
As in the web application, access to data is scoped by vault, so most API URLs contain a vault identifier. The majority of API calls return a JSON structure as the response body.
Object IDs
Vaults, saved searches, and other objects are identified by an integer ID. When you retrieve a list of objects (vaults, saved searches, projects, etc.) each object has both a name and an ID, and you typically supply the numeric ID in subsequent calls. Some parameters take lists of objects, expressed as a comma-separated list of IDs.
The same IDs appear in the web interface URLs, so you can often copy a number from the browser into an API call:
- Browser:
https://app.collaborativedrug.com/vaults/4657/searches - API:
https://app.collaborativedrug.com/api/v1/vaults/4657/searches
Authentication & security
Every request must include your API key in the X-CDD-Token header, and all
requests must be made over HTTPS so the token and data are encrypted in
transit.
Access is controlled at several levels:
- Token — tokens are issued per user/account and carry a role (set of capabilities); the effective capabilities depend on the token owner's role in the vault(s) being accessed. See the support site for how to obtain a token.
- Vault — even with a valid token, data is only available from vaults that have API access enabled. A vault administrator can request this by emailing CDD Support.
- Project — a user can only access data in projects they have permission for. The projects a user can access in a vault can be listed via the API.
POST /query endpoints
Most list and read endpoints accept their parameters either as URL query
parameters on the GET request, or as a JSON body on a companion POST
request at the same path with /query appended (for example
POST /molecules/query instead of GET /molecules). The /query form
exists because many HTTP client libraries cannot send a body with a GET
request, and because long or complex filters are easier to express as JSON.
The two forms accept the same parameters and return the same responses; the
POST /query form is recommended for anything beyond a trivial request.
Pagination
List endpoints are paginated. Use page_size to set the number of records
per page (default 50, maximum 1000 for synchronous requests) and offset to
skip records. Paginated responses include the total count alongside the
returned objects. To page through a large result set, increase offset by
page_size until you have retrieved count records.
Asynchronous requests (async=true)
For large result sets, pass async=true to a query endpoint. Instead of
returning the data inline, the request creates an export and returns its
details (including an export id). Asynchronous exports allow a larger
page_size (up to 10000). Poll GET /export_progress/{export_id} until the
export reports that it is finished, then download the result from
GET /exports/{export_id}. GET /exports lists all of your in-progress
exports (including those started from the web application).
Rate limits and throttling
CDD Vault does not limit the total number of API requests you can make, but it does throttle usage in two ways. Please optimize your integrations to use the API efficiently, and contact CDD Support if any limit poses a problem.
- 3 concurrent requests. Each user may have up to 3 requests in flight at once, so an integration can use up to 3 threads/processes that each issue a new request as soon as the previous one completes. This limit is per user, not per API key — important if you run multiple integrations.
- 30 queued exports. Every request that uses
async=true(and every saved-search download) launches a background export. Up to 3 run at a time and the rest queue, up to a maximum of 30 queued exports.
Use of the API is monitored; abuse may result in suspension of access and further investigation.
Authentication
ApiKeyAuthapiKeyAPI Key: X-CDD-Token in header
API Executions
Track asynchronous API request executions
API usage in seconds
Return the API usage (both async and sync) in seconds between a particular timeframe. Use after and before parameters to specify a date range. By default and if before is used with no after, the previous 30 days are returned. The time returned is for the current API key only.
Parameters
vault_idintegerrequiredpathafterstring<date-time>queryStart of the date range (YYYY-MM-DDThh:mm:ss±hh:mm). Defaults to 30 days before before when omitted.
beforestring<date-time>queryEnd of the date range (YYYY-MM-DDThh:mm:ss±hh:mm). Defaults to the current date and time when omitted.
Response
API usage data
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/api_executions' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/api_executions',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/api_executions', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"My API key": {
"after": "2023-01-01T07:00:00.000Z",
"before": "2023-01-22T08:12:34.000Z",
"seconds": 20.3
}
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Batch Move Jobs
Asynchronous batch move jobs
Get all batch move jobs
Get all batch move jobs. Requires the user to be a vault administrator.
Parameters
vault_idintegerrequiredpathResponse
List of all batch move jobs
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"batch": 0,
"class": "batch move job",
"created_at": "2024-01-15T09:30:00Z",
"fail_on_molecule_deletion": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"molecule": 0,
"name": "string",
"queued_job_position": 0,
"requested_by": 0,
"status": "requested",
"status_message": "string"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Create a new batch move job
Create a batch move job to move a batch to a different molecule in the same vault. Requires the user to be a vault administrator.
Body
Parameters for creating a batch move job, which moves a batch to a different molecule in the same vault.
batchintegerrequiredThe ID of the batch to move.
fail_on_molecule_deletionbooleantrueFail the job if moving the batch would trigger removal of the originating molecule. Defaults to true.
moleculeintegerrequiredThe ID of the molecule to move the batch to.
namestringA new name for the batch. Optional, and only allowed for vaults without a registration system.
Parameters
vault_idintegerrequiredpathResponse
Batch move job created
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"batch": 618771089,
"molecule": 1,
"fail_on_molecule_deletion": true
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"batch": 618771089,
"molecule": 1,
"fail_on_molecule_deletion": true
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"batch": 618771089,
"molecule": 1,
"fail_on_molecule_deletion": true
}),
});
const data = await response.json();{
"batch": 618771089,
"molecule": 1,
"fail_on_molecule_deletion": true
}{
"batch": 0,
"class": "batch move job",
"created_at": "2024-01-15T09:30:00Z",
"fail_on_molecule_deletion": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"molecule": 0,
"name": "string",
"queued_job_position": 0,
"requested_by": 0,
"status": "requested",
"status_message": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Retrieve a single batch move job
Retrieve a single batch move job. Requires the user to be a vault administrator.
Parameters
vault_idintegerrequiredpathjob_idintegerrequiredpathResponse
Batch move job details
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs/{job_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs/{job_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs/{job_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"batch": 0,
"class": "batch move job",
"created_at": "2024-01-15T09:30:00Z",
"fail_on_molecule_deletion": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"molecule": 0,
"name": "string",
"queued_job_position": 0,
"requested_by": 0,
"status": "requested",
"status_message": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Cancel a single batch move job
Cancel a single batch move job. Once a job has started it can no longer be canceled. Requires the user to be a vault administrator.
Parameters
vault_idintegerrequiredpathjob_idintegerrequiredpathResponse
Batch move job canceled
Missing or invalid API key
The job is no longer in a cancelable state (it has already started or finished). The current job is returned unchanged.
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs/{job_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs/{job_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batch_move_jobs/{job_id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"batch": 0,
"class": "batch move job",
"created_at": "2024-01-15T09:30:00Z",
"fail_on_molecule_deletion": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"molecule": 0,
"name": "string",
"queued_job_position": 0,
"requested_by": 0,
"status": "requested",
"status_message": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"batch": 0,
"class": "batch move job",
"created_at": "2024-01-15T09:30:00Z",
"fail_on_molecule_deletion": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"molecule": 0,
"name": "string",
"queued_job_position": 0,
"requested_by": 0,
"status": "requested",
"status_message": "string"
}Batches
Batches handling
Create a batch
The body of the POST must contain a JSON structure specifying the molecule attributes. The structure is roughly the same format as what is returned by a GET call but with some restrictions and additions. Note that in a registration vault, POST batch is the only way to create a new molecule, since the registration of a new molecule must be accompanied by a first batch. In this case, the JSON describing the batch will include a "molecule" field with detailed information on the new molecule.
Body
batch_fieldsobjectOnly in registration vaults
Each vault has its own settings on the minimum information required to create a new Batch (for a Vault Administrator, see Settings > Vault > Batch Fields, to change which Batch fields are required).
{
moleculeobject | object | objectnamestringprojectsArray<integer | string>An array of project ids or names
salt_namestringA two-letter code or Salt vendor string as listed in the All Available Salts table (https://app.collaborativedrug.com/support/salts). The salt is determined automatically when the salt is included in the molecular structure.
solvent_of_crystallization_namestringName of the solvent of crystallization. List available at https://support.collaborativedrug.com/hc/en-us/articles/214359563-Salts-and-solvent-of-crystallization#solvents_of_crystallization
stoichiometryobjectOnly in registration vaults
Parameters
vault_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"batch_fields": {},
"molecule": {
"cxsmiles": "string",
"duplicate_resolution": "first",
"id": 0,
"name": "string",
"registration_type": "CHEMICAL_STRUCTURE",
"smiles": "string",
"structure": "string"
},
"name": "Batch 1",
"projects": [
0
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"batch_fields": {},
"molecule": {
"cxsmiles": "string",
"duplicate_resolution": "first",
"id": 0,
"name": "string",
"registration_type": "CHEMICAL_STRUCTURE",
"smiles": "string",
"structure": "string"
},
"name": "Batch 1",
"projects": [
0
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"batch_fields": {},
"molecule": {
"cxsmiles": "string",
"duplicate_resolution": "first",
"id": 0,
"name": "string",
"registration_type": "CHEMICAL_STRUCTURE",
"smiles": "string",
"structure": "string"
},
"name": "Batch 1",
"projects": [
0
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}),
});
const data = await response.json();{
"batch_fields": {},
"molecule": {
"cxsmiles": "string",
"duplicate_resolution": "first",
"id": 0,
"name": "string",
"registration_type": "CHEMICAL_STRUCTURE",
"smiles": "string",
"structure": "string"
},
"name": "Batch 1",
"projects": [
0
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15",
"molecule": {
"class": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "string",
"synonyms": [
"string"
]
},
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Get multiple batches
Get the information from multiple batches. We still support the now deprecated GET queries on the enpoint 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.
Body
asyncbooleanIf true, do an asynchronous export. Use for large data sets.
batch_fieldsArray<string>Array of Batch field names to include in the resulting JSON. Defaults to all available fields.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
collection_criteriaArray<object>Array of collection criteria objects. Filters results to only include batches whose molecules match the collection criteria, with support for AND/OR/XOR junctions and exclusion (NOT IN) logic.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
data_setsArray<integer>Array of public dataset ids. Defaults to all data sets.
fields_searchArray<object | object | object>Array of Batch field names & values. Used to filter Batches returned based on query values
include_original_structuresbooleanfalseIf true, include the original structure in the response. This is independent of no_structures.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
molecule_batch_identifierstringA Molecule-Batch ID used to query the Vault. Use this parameter to limit the number of Molecule UDF Fields to return
molecule_created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
molecule_created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
molecule_fieldsArray<string>Array of Molecule field names to include in the resulting JSON. Defaults to all available fields.
no_structuresbooleanfalseIf true, omit structure representations for a smaller and faster response.
offsetintegeronly_idsbooleanfalseIf true, only return the ids of the molecules in the batch.
only_molecule_idsbooleanfalseIf true, the full Batch details are still returned but the Molecule-level information is left out of the JSON results. (Only the IDs of the Molecules are still included.)
page_sizeinteger50Requested page size (maximum value 1000).
projectsArray<integer>Array of project ids. Defaults to all available projects.
protocol_criteriaArray<object>Array of protocol-based filters restricting results to batches with (or without) matching protocol readout data. Criteria are combined using each entry's junction.
structure_criterionobjectA structure-property filter object. Each property is filtered by an optional _minimum and/or _maximum bound. Properties from different registration types (chemical, nucleotide, amino acid) cannot be mixed in one request. Only a representative subset of the available properties is listed below; all follow the same <property>_minimum / <property>_maximum convention.
batchesArray<integer>Comma separated list of batch ids. Cannot be used with other parameters
Parameters
vault_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/query' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"async": true,
"batch_fields": [
"string"
],
"created_after": "string",
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_before": "string",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"modified_after": "string",
"modified_before": "string",
"molecule_batch_identifier": "string",
"molecule_created_after": "string",
"molecule_created_before": "string",
"molecule_fields": [
"string"
],
"no_structures": false,
"offset": 0,
"only_ids": false,
"only_molecule_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "string",
"run_before": "string",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
}
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/query',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"async": true,
"batch_fields": [
"string"
],
"created_after": "string",
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_before": "string",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"modified_after": "string",
"modified_before": "string",
"molecule_batch_identifier": "string",
"molecule_created_after": "string",
"molecule_created_before": "string",
"molecule_fields": [
"string"
],
"no_structures": false,
"offset": 0,
"only_ids": false,
"only_molecule_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "string",
"run_before": "string",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/query', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"async": true,
"batch_fields": [
"string"
],
"created_after": "string",
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_before": "string",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"modified_after": "string",
"modified_before": "string",
"molecule_batch_identifier": "string",
"molecule_created_after": "string",
"molecule_created_before": "string",
"molecule_fields": [
"string"
],
"no_structures": false,
"offset": 0,
"only_ids": false,
"only_molecule_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "string",
"run_before": "string",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
}
}),
});
const data = await response.json();{
"async": true,
"batch_fields": [
"string"
],
"created_after": "2024-01-15",
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_before": "2024-01-15",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"modified_after": "2024-01-15",
"modified_before": "2024-01-15",
"molecule_batch_identifier": "string",
"molecule_created_after": "2024-01-15",
"molecule_created_before": "2024-01-15",
"molecule_fields": [
"string"
],
"no_structures": false,
"offset": 0,
"only_ids": false,
"only_molecule_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "2024-01-15",
"run_before": "2024-01-15",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
}
}[
{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15",
"molecule": {
"class": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "string",
"synonyms": [
"string"
]
},
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Get a single batch
Get the information about a single batch
Parameters
vault_idintegerrequiredpathbatch_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/{batch_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/{batch_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/{batch_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15",
"molecule": {
"class": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "string",
"synonyms": [
"string"
]
},
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Update a batch
See Create for valid fields. (An exception to this is the Molecule field - this PUT Batches call should not be used to update the chemical structure of the parent Molecule - use the PUT Molecules API call to achieve this.) Fields not specified in the JSON are not changed.
To delete a Batch, simply submit with an empty projects array. (For safety/security purposes, Batches which have data associated with them cannot be deleted via this PUT Batches API call. Data (such as rows of readout data in a Protocol Run) must be removed prior to using the PUT Batches API call to delete a Batch.)
Note that the ID for the batch is specified as part of the URL, not in the JSON (the JSON can contain an ID field as long as its value matches the URL).
Body
batch_fieldsobjectOnly in registration vaults
Each vault has its own settings on the minimum information required to create a new Batch (for a Vault Administrator, see Settings > Vault > Batch Fields, to change which Batch fields are required).
{
moleculeobject | object | objectnamestringprojectsArray<integer | string>An array of project ids or names
salt_namestringA two-letter code or Salt vendor string as listed in the All Available Salts table (https://app.collaborativedrug.com/support/salts). The salt is determined automatically when the salt is included in the molecular structure.
solvent_of_crystallization_namestringName of the solvent of crystallization. List available at https://support.collaborativedrug.com/hc/en-us/articles/214359563-Salts-and-solvent-of-crystallization#solvents_of_crystallization
stoichiometryobjectOnly in registration vaults
Parameters
vault_idintegerrequiredpathbatch_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/{batch_id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"batch_fields": {},
"molecule": {
"cxsmiles": "string",
"duplicate_resolution": "first",
"id": 0,
"name": "string",
"registration_type": "CHEMICAL_STRUCTURE",
"smiles": "string",
"structure": "string"
},
"name": "Batch 1",
"projects": [
0
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/{batch_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"batch_fields": {},
"molecule": {
"cxsmiles": "string",
"duplicate_resolution": "first",
"id": 0,
"name": "string",
"registration_type": "CHEMICAL_STRUCTURE",
"smiles": "string",
"structure": "string"
},
"name": "Batch 1",
"projects": [
0
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/{batch_id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"batch_fields": {},
"molecule": {
"cxsmiles": "string",
"duplicate_resolution": "first",
"id": 0,
"name": "string",
"registration_type": "CHEMICAL_STRUCTURE",
"smiles": "string",
"structure": "string"
},
"name": "Batch 1",
"projects": [
0
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}),
});
const data = await response.json();{
"batch_fields": {},
"molecule": {
"cxsmiles": "string",
"duplicate_resolution": "first",
"id": 0,
"name": "string",
"registration_type": "CHEMICAL_STRUCTURE",
"smiles": "string",
"structure": "string"
},
"name": "Batch 1",
"projects": [
0
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15",
"molecule": {
"class": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "string",
"synonyms": [
"string"
]
},
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Collections
Collections of molecules
Create a collection
Create a collection, the name should be unique unless you want to overwrite an existing collection.
Body
classstringuser collectioncreated_atstring<date>modified_atstring<date>moleculesArray<integer>The list of molecules in the collection.
namestringownerstringParameters
vault_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"class": "user collection",
"created_at": "string",
"modified_at": "string",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"class": "user collection",
"created_at": "string",
"modified_at": "string",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"class": "user collection",
"created_at": "string",
"modified_at": "string",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
}),
});
const data = await response.json();{
"class": "user collection",
"created_at": "2024-01-15",
"modified_at": "2024-01-15",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
}{
"id": 42,
"class": "user collection",
"created_at": "2024-01-15",
"modified_at": "2024-01-15",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Get multiple collections
Get the information from multiple collections. We still support the now deprecated GET queries on the enpoint 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.
Body
collectionsArray<integer>The list of collections id to return
asyncbooleanIf true, do an asynchronous export. Use for large data sets. You will get an export id that you can use with the async export function.
include_molecule_idsbooleanIf true, include the ids of the molecules in the collection.
offsetintegerThe offset of the first collection in the result set. The offset is 0-based. That is, the first collection in the result set has offset 0.
only_idsbooleanIf true, only return the ids of the matching collections.
page_sizeinteger50The maximum number of objects to return in this call. Default is 50, maximum is 1000. If the response exceeds the page_size, we strongly recommend using the async option instead of downloading multiple chunks. Note: any page_size parameter used in an API call that also uses the async=true parameter will be ignored. The async call will return all valid data once executed.
projectsArray<integer>Array of project ids. Defaults to all available projects.
asyncbooleanIf true, do an asynchronous export. Use for large data sets. You will get an export id that you can use with the async export function.
include_molecule_idsbooleanIf true, include the ids of the molecules in the collection.
offsetintegerThe offset of the first collection in the result set. The offset is 0-based. That is, the first collection in the result set has offset 0.
only_idsbooleanIf true, only return the ids of the matching collections.
page_sizeinteger50The maximum number of objects to return in this call. Default is 50, maximum is 1000. If the response exceeds the page_size, we strongly recommend using the async option instead of downloading multiple chunks. Note: any page_size parameter used in an API call that also uses the async=true parameter will be ignored. The async call will return all valid data once executed.
projectsArray<integer>Array of project ids. Defaults to all available projects.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
typestringuser_collectionvault_collectionThe type of collection user collections are private, vault collections are shared with project members.
Parameters
vault_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/query' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"collections": [
0
],
"async": true,
"include_molecule_ids": true,
"offset": 0,
"only_ids": true,
"page_size": 50,
"projects": [
0
]
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/query',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"collections": [
0
],
"async": true,
"include_molecule_ids": true,
"offset": 0,
"only_ids": true,
"page_size": 50,
"projects": [
0
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/query', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"collections": [
0
],
"async": true,
"include_molecule_ids": true,
"offset": 0,
"only_ids": true,
"page_size": 50,
"projects": [
0
]
}),
});
const data = await response.json();{
"collections": [
0
],
"async": true,
"include_molecule_ids": true,
"offset": 0,
"only_ids": true,
"page_size": 50,
"projects": [
0
]
}[
{
"id": 42,
"class": "user collection",
"created_at": "2024-01-15",
"modified_at": "2024-01-15",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Get a single collection
Get the information about a single collection
Parameters
vault_idintegerrequiredpathcollection_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/{collection_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/{collection_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/{collection_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"id": 42,
"class": "user collection",
"created_at": "2024-01-15",
"modified_at": "2024-01-15",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Update a collection
Body
moleculesArray<integer>The list of molecules to add to the collection. Note that you cannot remove molecules from a collection. You have to recreate the collection without the molecule.
Parameters
vault_idintegerrequiredpathcollection_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/{collection_id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"molecules": [
0
]
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/{collection_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"molecules": [
0
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/{collection_id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"molecules": [
0
]
}),
});
const data = await response.json();{
"molecules": [
0
]
}{
"id": 42,
"class": "user collection",
"created_at": "2024-01-15",
"modified_at": "2024-01-15",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Delete a collection
Delete a collection. The molecules in the collection are not affected.
Parameters
vault_idintegerrequiredpathcollection_idintegerrequiredpathNumeric identifier of the collection
Response
The collection was deleted
Missing or invalid API key
Collection not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/{collection_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/{collection_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/collections/{collection_id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"message": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Control Layouts
Control well layouts for protocols and runs
Get control layouts
List the control layouts in the vault. Supports pagination via page_size and offset, and the usual created_after/modified_after filters.
Parameters
vault_idintegerrequiredpathpage_sizeintegerqueryMaximum number of records to return (default 50, maximum 1000).
offsetintegerqueryNumber of records to skip (for pagination).
asyncbooleanqueryIf true, run the listing as an asynchronous export.
only_idsbooleanqueryIf true, return only the ids of the matching control layouts.
projectsstringqueryComma-separated project ids to filter by.
created_afterstring<date-time>queryOnly include layouts created on or after this time.
created_beforestring<date-time>queryOnly include layouts created on or before this time.
modified_afterstring<date-time>queryOnly include layouts modified on or after this time.
modified_beforestring<date-time>queryOnly include layouts modified on or before this time.
Response
A page of control layouts
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"count": 0,
"objects": [
{
"class": "control layout",
"control_wells": [
{
"col": 0,
"control_state": "+",
"row": 0
}
],
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"plate_id": 0,
"protocol": 0,
"run": 0,
"size": 0
}
],
"offset": 0,
"page_size": 0
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Create a control layout
Create a control layout for a protocol or run. The layout dimensions are set with either size or plate, and the target with either protocol or run.
Body
Attributes for creating a control layout. Specify the target with exactly one of protocol or run, and the layout dimensions with exactly one of size or plate.
Parameters
vault_idintegerrequiredpathResponse
The created control layout
Missing or invalid API key
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"protocol": 321,
"size": 96,
"control_wells": [
{
"row": 0,
"col": 0,
"control_state": "+"
},
{
"pos": "H12",
"control_state": "-"
}
]
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"protocol": 321,
"size": 96,
"control_wells": [
{
"row": 0,
"col": 0,
"control_state": "+"
},
{
"pos": "H12",
"control_state": "-"
}
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"protocol": 321,
"size": 96,
"control_wells": [
{
"row": 0,
"col": 0,
"control_state": "+"
},
{
"pos": "H12",
"control_state": "-"
}
]
}),
});
const data = await response.json();{
"protocol": 321,
"size": 96,
"control_wells": [
{
"row": 0,
"col": 0,
"control_state": "+"
},
{
"pos": "H12",
"control_state": "-"
}
]
}{
"class": "control layout",
"control_wells": [
{
"col": 0,
"control_state": "+",
"row": 0
}
],
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"plate_id": 0,
"protocol": 0,
"run": 0,
"size": 0
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Get a control layout
Retrieve a single control layout.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the control layout
Response
The control layout
Missing or invalid API key
Control layout not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"class": "control layout",
"control_wells": [
{
"col": 0,
"control_state": "+",
"row": 0
}
],
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"plate_id": 0,
"protocol": 0,
"run": 0,
"size": 0
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Delete a control layout
Delete a control layout.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the control layout
Response
The control layout was deleted
Missing or invalid API key
Control layout not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/control_layouts/{id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Datasets
Public and vault datasets
Get dataset
List datasets
Parameters
vault_idintegerrequiredpathResponse
Success
Unauthorized or not found
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/data_sets' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/data_sets',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/data_sets', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"id": 0,
"name": "string"
}
]Deep Learning Bioisosteres
Deep learning bioisostere suggestions
Find bioisosteric replacements (hierarchical)
Submit a chemical structure and receive bioisosteric replacement suggestions grouped by fragment. Requires the vault to have Deep Learning enabled.
Body
structurestringrequiredSMILES or MOL representation of structure to find bioisosteric replacements for.
number_suggestionsintegerNumber of bioisosteric suggestions per fragment. Defaults to 5, max 200.
return_known_identifiersbooleanInclude known identifiers (InChIKey, etc.) in response. Defaults to false.
lookup_internal_identifiersbooleanOpt in to server-side enrichment with internal vault identifiers. When true, each bioisostere's InChIKey is used to find molecules in the Vault. The 14-character prefix of the InChIKey is used to catch stereochemical variants. The internal identifiers are appended to the identifiers array as an Internal collection. Defaults to false.
filter_structure_alertsbooleanFilter out suggestions with additional structural alerts. Defaults to true.
filter_by_atom_indicesArray<integer>List of atom indices identifying which fragments to include in fragmentation. Each suggestion fragment whose atom_indices overlaps this list is kept. If omitted, all fragments are used.
Parameters
vault_idintegerrequiredpathID of the current vault.
X-CDD-TokenstringrequiredheaderAPI key token for authentication.
Response
Success — returns bioisosteric suggestions grouped by fragment.
Bad request — missing or invalid parameters.
Unauthorized — Deep Learning not enabled for this vault or user lacks access.
curl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/bioisosteres' \
-H 'Content-Type: application/json' \
-d '{
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"number_suggestions": 5,
"return_known_identifiers": false,
"lookup_internal_identifiers": false,
"filter_structure_alerts": true,
"filter_by_atom_indices": [
0,
1
]
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/bioisosteres',
json={
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"number_suggestions": 5,
"return_known_identifiers": false,
"lookup_internal_identifiers": false,
"filter_structure_alerts": true,
"filter_by_atom_indices": [
0,
1
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/bioisosteres', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"number_suggestions": 5,
"return_known_identifiers": false,
"lookup_internal_identifiers": false,
"filter_structure_alerts": true,
"filter_by_atom_indices": [
0,
1
]
}),
});
const data = await response.json();{
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"number_suggestions": 5,
"return_known_identifiers": false,
"lookup_internal_identifiers": false,
"filter_structure_alerts": true,
"filter_by_atom_indices": [
0,
1
]
}{
"status": "OK",
"mocked_service": true,
"result": {
"query": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"suggestions": [
{
"fragment": "[16*]c1ccc(Cl)cc1Cl",
"size": 8,
"atom_indices": [
0,
1
],
"bioisosteres": [
{
"fragment": "[16*]c1ccc(F)cc1Cl",
"inchikey": "QCNPSEBNVBYHLY-UHFFFAOYSA-N",
"structure": "c1ccncc1",
"tanimoto": 0.875,
"atom_indices": [
0,
1
],
"synthetic_feasibility": {
"synthetic_feasibility_score": 0.9,
"profile_overlap": 0.8,
"bits_missing": 0.1,
"fraction_missing": 0.2
},
"alerts": [
{
"filter_set": "Brenk",
"description": "aniline"
}
],
"identifiers": [
{
"name": "SCHEMBL11832241",
"collection": "SureChEMBL",
"patent": {
"count": 1,
"first_date": "1976-01-20T00:00:00.000Z",
"first_patent": "US-3933824-A"
},
"cdd_public": {
"molecule_id": 123456
},
"cdd_private": {
"id": 123456,
"standard_inchi_key": "QCNPSEBNVBYHLY-UHFFFAOYSA-N",
"exact": true
}
}
]
}
]
}
]
}
}{
"error": "structure parameter is required",
"code": 400
}{
"error": "Dl bioisosteres endpoint only accessible in vaults with Deep Learning enabled",
"code": 401
}Find bioisosteric replacements (flat list)
Submit a chemical structure and receive bioisosteric replacement suggestions as a flat list. Requires the vault to have Deep Learning enabled.
Body
structurestringrequiredSMILES or MOL representation of structure to find bioisosteric replacements for.
number_suggestionsintegerNumber of bioisosteric suggestions per fragment. Defaults to 5, max 200.
return_known_identifiersbooleanInclude known identifiers (InChIKey, etc.) in response. Defaults to false.
lookup_internal_identifiersbooleanOpt in to server-side enrichment with internal vault identifiers. When true, each bioisostere's InChIKey is used to find molecules in the Vault. The 14-character prefix of the InChIKey is used to catch stereochemical variants. The internal identifiers are appended to the identifiers array as an Internal collection. Defaults to false.
filter_structure_alertsbooleanFilter out suggestions with additional structural alerts. Defaults to true.
filter_by_atom_indicesArray<integer>List of atom indices identifying which fragments to include in fragmentation. Each suggestion fragment whose atom_indices overlaps this list is kept. If omitted, all fragments are used.
Parameters
vault_idintegerrequiredpathID of the current vault.
X-CDD-TokenstringrequiredheaderAPI key token for authentication.
Response
Success — returns bioisosteric suggestions as a flat list.
Bad request — missing or invalid parameters.
Unauthorized — Deep Learning not enabled for this vault or user lacks access.
curl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/bioisosteres/flat' \
-H 'Content-Type: application/json' \
-d '{
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"number_suggestions": 5,
"return_known_identifiers": false,
"lookup_internal_identifiers": false,
"filter_structure_alerts": true,
"filter_by_atom_indices": [
0,
1
]
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/bioisosteres/flat',
json={
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"number_suggestions": 5,
"return_known_identifiers": false,
"lookup_internal_identifiers": false,
"filter_structure_alerts": true,
"filter_by_atom_indices": [
0,
1
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/bioisosteres/flat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"number_suggestions": 5,
"return_known_identifiers": false,
"lookup_internal_identifiers": false,
"filter_structure_alerts": true,
"filter_by_atom_indices": [
0,
1
]
}),
});
const data = await response.json();{
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"number_suggestions": 5,
"return_known_identifiers": false,
"lookup_internal_identifiers": false,
"filter_structure_alerts": true,
"filter_by_atom_indices": [
0,
1
]
}{
"query": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"suggestions": [
{
"structure": "Fc1ccc(-c2n[nH]c3c2CCNCC3)cc1F",
"fragment": "[16*]c1ccc(Cl)cc1Cl",
"replacement_fragment": "[16*]c1ccc(F)cc1F",
"tanimoto": 0.875,
"synthetic_feasibility_score": 0.9,
"identifiers": "SCHEMBL11832241, CHEMBL12345678",
"alerts": "acid_halide,carbonyl_halide"
}
]
}{
"error": "structure parameter is required",
"code": 400
}{
"error": "Dl bioisosteres endpoint only accessible in vaults with Deep Learning enabled",
"code": 401
}Fragment a chemical structure
Submit a chemical structure and receive its fragmentation without bioisosteric suggestions. Requires the vault to have Deep Learning enabled.
Body
structurestringrequiredSMILES or MOL representation of structure to fragment.
Parameters
vault_idintegerrequiredpathID of the current vault.
X-CDD-TokenstringrequiredheaderAPI key token for authentication.
Response
Success — returns the fragmentation of the structure.
Bad request — missing or invalid parameters.
Unauthorized — Deep Learning not enabled for this vault or user lacks access.
curl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/bioisosteres/get_fragmentation' \
-H 'Content-Type: application/json' \
-d '{
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1"
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/bioisosteres/get_fragmentation',
json={
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1"
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/bioisosteres/get_fragmentation', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1"
}),
});
const data = await response.json();{
"structure": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1"
}{
"status": "OK",
"mocked_service": true,
"result": {
"query": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1",
"suggestions": [
{
"fragment": "[16*]c1ccc(Cl)cc1Cl",
"size": 8,
"atom_indices": [
0,
1
]
}
]
}
}{
"error": "structure parameter is required",
"code": 400
}{
"error": "Dl bioisosteres endpoint only accessible in vaults with Deep Learning enabled",
"code": 401
}Deep Learning Similarity
Deep learning molecular similarity
Find similar structures using Deep Learning
Submit a chemical structure and receive a ranked list of similar structures using the Deep Learning similarity model. Requires the vault to have Deep Learning enabled.
Body
structurestringrequiredSMILES or MOL representation to find similar structures for.
countintegerNumber of similar structures to return. Defaults to 10, max 300.
collectionsArray<string>List of collection identifiers to filter results by. If omitted, all collections are included.
return_patentsbooleanWhether to include patent information for compounds in results. Defaults to true.
lookup_internal_identifiersbooleanOpt in to server-side enrichment with internal vault identifiers. When true, each hit's InChIKey is used to find molecules in the Vault. The 14-character prefix of the InChIKey is used to catch stereochemical variants. The internal identifiers are appended to the identifiers array as an Internal collection. Defaults to false.
Parameters
vault_idintegerrequiredpathID of the current vault.
X-CDD-TokenstringrequiredheaderAPI key token for authentication.
Response
Success — returns similar structures ranked by Tanimoto similarity.
Bad request — missing or invalid parameters.
Unauthorized — Deep Learning not enabled for this vault or user lacks access.
curl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/similarity' \
-H 'Content-Type: application/json' \
-d '{
"structure": "c1ccccc1",
"count": 10,
"collections": [
"SureChEMBL",
"ChEMBL"
],
"return_patents": true,
"lookup_internal_identifiers": false
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/similarity',
json={
"structure": "c1ccccc1",
"count": 10,
"collections": [
"SureChEMBL",
"ChEMBL"
],
"return_patents": true,
"lookup_internal_identifiers": false
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/ai/similarity', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"structure": "c1ccccc1",
"count": 10,
"collections": [
"SureChEMBL",
"ChEMBL"
],
"return_patents": true,
"lookup_internal_identifiers": false
}),
});
const data = await response.json();{
"structure": "c1ccccc1",
"count": 10,
"collections": [
"SureChEMBL",
"ChEMBL"
],
"return_patents": true,
"lookup_internal_identifiers": false
}{
"status": "OK",
"mocked_service": true,
"result": {
"query": "Nc1ccccc1CCCC",
"query_scaffold": "c1ccccc1",
"hits": [
{
"structure": "Cc1ccncc1",
"inchikey": "BSYNRYMUTXBXSQ-UHFFFAOYSA-N",
"identifiers": [
{
"name": "SCHEMBL11832241",
"collection": "SureChEMBL",
"patent": {
"count": 1,
"first_date": "1976-01-20T00:00:00.000Z",
"first_patent": "US-3933824-A"
},
"cdd_public": {
"molecule_id": 123456
},
"cdd_private": {
"id": 123456,
"standard_inchi_key": "QCNPSEBNVBYHLY-UHFFFAOYSA-N",
"exact": true
}
}
],
"names": [
"Compound A",
"CDD-123456"
],
"scaffold": "c1ccncc1",
"similarity": 0.851,
"tanimoto": 0.123,
"distance": 10.15
}
],
"metadata": [
{
"collection": "CDD Public",
"search_engine": "faiss",
"metric": "Metric.L2",
"count": 123456,
"release": "2024-06"
}
]
}
}{
"error": "structure parameter is required",
"code": 400
}{
"error": "Dl similarity endpoint only accessible in vaults with Deep Learning enabled",
"code": 401
}Dose Response Calculations
Protocol dose response calculations management
List dose response calculations for a protocol
Get all dose response calculations for a protocol.
Parameters
vault_idintegerrequiredpathprotocol_idintegerrequiredpathResponse
Success
Missing or invalid API key
Protocol not found
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"objects": [
{
"id": 12345,
"class": "dose response calculation",
"inputs": {},
"outputs": {},
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"minimum_activity": {
"lower": 10,
"upper": 90
}
}
],
"count": 5
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Get a single dose response calculation
Get the details of a single dose response calculation
Parameters
vault_idintegerrequiredpathprotocol_idintegerrequiredpathdose_response_calculation_idintegerrequiredpathResponse
Success
Missing or invalid API key
Protocol or dose response calculation not found
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"id": 12345,
"class": "dose response calculation",
"inputs": {},
"outputs": {},
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"minimum_activity": {
"lower": 10,
"upper": 90
}
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update a dose response calculation
Update a dose response calculation's fit parameters and/or minimum activity bounds.
To set a fixed constraint, use modifier "=" with a value. To set a range constraint, use modifier "from" with a range object containing min and max. To set a comparison constraint, use modifier ">", ">=", "<", or "<=" with a value. To clear all fit parameter constraints, pass an empty fit_parameters object.
Body
Request body for updating a dose response calculation
fit_parametersobjectFit parameter constraints for the calculation. Setting this to an empty object clears all constraints. The available parameters depend on the calculation's equation_type:
- Hill: min, max, slope
- Biphasic: center1, center2, frac, plateau1, plateau2, slope1, slope2
- Bell Curve: plateau1, center1, slope1, peak, center2, slope2, plateau2
- Linear: slope, y_intercept
- Exponential Decay: c_0, c_min, k
- Michaelis-Menten: b_max, k_d
minimum_activityobjectMinimum activity (inactivity) bounds
Parameters
vault_idintegerrequiredpathprotocol_idintegerrequiredpathdose_response_calculation_idintegerrequiredpathResponse
Success
Missing or invalid API key or insufficient permissions
Protocol or dose response calculation not found
Validation error. Possible causes include: unknown fit parameter, invalid modifier, range where lower > upper, non-numeric value, or unrecognized parameters.
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"fit_parameters": {},
"minimum_activity": {
"lower": 10,
"upper": 90,
"modifier": "from"
}
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"fit_parameters": {},
"minimum_activity": {
"lower": 10,
"upper": 90,
"modifier": "from"
}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"fit_parameters": {},
"minimum_activity": {
"lower": 10,
"upper": 90,
"modifier": "from"
}
}),
});
const data = await response.json();{
"fit_parameters": {},
"minimum_activity": {
"lower": 10,
"upper": 90,
"modifier": "from"
}
}{
"id": 12345,
"class": "dose response calculation",
"inputs": {},
"outputs": {},
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"minimum_activity": {
"lower": 10,
"upper": 90
}
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Dose Response Data Series
Dose response data series management
List dose response data series for a dose response calculation
Get all dose response data series for a dose response calculation. Each data series represents the curve data for a specific batch/run combination.
Parameters
vault_idintegerrequiredpathprotocol_idintegerrequiredpathdose_response_calculation_idintegerrequiredpathResponse
Success
Missing or invalid API key
Protocol or dose response calculation not found
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"objects": [
{
"id": 67890,
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"updated_at": "2026-01-30T14:42:24.000Z"
}
],
"count": 10
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Get a single dose response data series
Get the details of a single dose response data series
Parameters
vault_idintegerrequiredpathprotocol_idintegerrequiredpathdose_response_calculation_idintegerrequiredpathdose_response_data_series_idintegerrequiredpathResponse
Success
Missing or invalid API key
Protocol, dose response calculation, or dose response data series not found
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series/{dose_response_data_series_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series/{dose_response_data_series_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series/{dose_response_data_series_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"id": 67890,
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"updated_at": "2026-01-30T14:42:24.000Z"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update a dose response data series
Update a dose response data series's fit parameters. These constraints override the calculation-level constraints for this specific curve.
To set a fixed constraint, use modifier "=" with a value. To set a range constraint, use modifier "from" with a range object containing min and max. To set a comparison constraint, use modifier ">", ">=", "<", or "<=" with a value. To set unconstrained (best fit), use modifier "best fit" (data series only).
Body
Request body for updating a data series
fit_parametersobjectFit parameter constraints for this data series. These override the calculation-level constraints for this specific curve. The available parameters depend on the calculation's equation_type:
- Hill: min, max, slope
- Biphasic: center1, center2, frac, plateau1, plateau2, slope1, slope2
- Bell Curve: plateau1, center1, slope1, peak, center2, slope2, plateau2
- Linear: slope, y_intercept
- Exponential Decay: c_0, c_min, k
- Michaelis-Menten: b_max, k_d Data series support "best fit" modifier for unconstrained fitting.
Parameters
vault_idintegerrequiredpathprotocol_idintegerrequiredpathdose_response_calculation_idintegerrequiredpathdose_response_data_series_idintegerrequiredpathResponse
Success
Missing or invalid API key or insufficient permissions
Protocol, dose response calculation, or dose response data series not found
Validation error. Possible causes include: unknown fit parameter, invalid modifier, range where lower > upper, or non-numeric value.
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series/{dose_response_data_series_id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"fit_parameters": {}
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series/{dose_response_data_series_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"fit_parameters": {}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series/{dose_response_data_series_id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"fit_parameters": {}
}),
});
const data = await response.json();{
"fit_parameters": {}
}{
"id": 67890,
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"updated_at": "2026-01-30T14:42:24.000Z"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}ELN Entries
Electronic lab notebook entries
Create an ELN entry
The body of the POST must contain a JSON structure specifying the desired ELN entry attributes.
Note: Files may be inserted into existing ELN entries using the POST Files API call.
Body
append_to_bodyArray<object | object | object>Ordered list of content nodes appended to the body of the entry. Each node has a type; the supported types are:
text— a paragraph of text. Providetext(defaults to an empty string).link— a hyperlink. Provideurl(required; must be a valid http/https/ftp/mailto URL) and an optionallabelfor the display text. Use this to link to a batch, molecule, protocol, or any external resource.file— an attachment that was already uploaded. Providefile, the id of an accessible uploaded file. (Files can also be attached to an existing entry with thePOST /filesAPI.)
eln_fieldsobjectThe ELN fields of the entry
projectinteger | stringtitlestringThe title of the entry
Parameters
vault_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"title": "Synthesis of compound 42",
"project": 7,
"eln_fields": {
"Reaction type": "Suzuki coupling"
},
"append_to_body": [
{
"type": "text",
"text": "Procedure followed the standard protocol."
},
{
"type": "link",
"url": "https://app.collaborativedrug.com/vaults/1/molecules/12345",
"label": "Starting material CDD-12345"
},
{
"type": "file",
"file": 98765
}
]
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"title": "Synthesis of compound 42",
"project": 7,
"eln_fields": {
"Reaction type": "Suzuki coupling"
},
"append_to_body": [
{
"type": "text",
"text": "Procedure followed the standard protocol."
},
{
"type": "link",
"url": "https://app.collaborativedrug.com/vaults/1/molecules/12345",
"label": "Starting material CDD-12345"
},
{
"type": "file",
"file": 98765
}
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"title": "Synthesis of compound 42",
"project": 7,
"eln_fields": {
"Reaction type": "Suzuki coupling"
},
"append_to_body": [
{
"type": "text",
"text": "Procedure followed the standard protocol."
},
{
"type": "link",
"url": "https://app.collaborativedrug.com/vaults/1/molecules/12345",
"label": "Starting material CDD-12345"
},
{
"type": "file",
"file": 98765
}
]
}),
});
const data = await response.json();{
"title": "Synthesis of compound 42",
"project": 7,
"eln_fields": {
"Reaction type": "Suzuki coupling"
},
"append_to_body": [
{
"type": "text",
"text": "Procedure followed the standard protocol."
},
{
"type": "link",
"url": "https://app.collaborativedrug.com/vaults/1/molecules/12345",
"label": "Starting material CDD-12345"
},
{
"type": "file",
"file": 98765
}
]
}{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 42,
"status": "new",
"updated_at": "2024-01-02T03:04:05.000Z"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Get all or some ELN entries
Returns a summary of all available ELN entries for the Vault specified if async=false (default). If async=true, returns a zip file containing the export of all available ELN entries.
For security purposes, the GET and POST ELN Entries CDD Vault API commands documented here are only available for Vault Administrators.
Body
asyncbooleanfalsePerform an asynchronous export If true, do an asynchronous export (see Async Export) Use if you wish to retrieve a zip file containing exports of the actual ELN entries along with any files attached within the ELN entries. Note: any page_size parameter used in the call call that also uses the async=true parameter will be ignored. The call will return all matching entries as a zip file with their content.
authorArray<string>List of ELN author IDs. We do not match by names, you need to use the users call.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
eln_entriesArray<string>List of ELN entry IDs
finalized_date_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
finalized_date_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
offsetinteger0Index of the first object actually returned
only_idsbooleanfalseReturn only ELN Entry IDs
only_summarybooleanfalseReturn only a csv summary file, async is still recommended
page_sizeinteger50Maximum number of objects to return in this call This parameter is ignored is async is true.
projectsArray<string>List of project IDs
statusstringopensubmittedfinalizedStatus of ELN entries (open, submitted, finalized)
submitted_date_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
submitted_date_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
Parameters
vault_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries/query' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"async": false,
"author": [
"string"
],
"created_after": "string",
"created_before": "string",
"eln_entries": [
"string"
],
"finalized_date_after": "string",
"finalized_date_before": "string",
"modified_after": "string",
"modified_before": "string",
"offset": 0,
"only_ids": false,
"only_summary": false,
"page_size": 50,
"projects": [
"string"
],
"status": "open",
"submitted_date_after": "string",
"submitted_date_before": "string"
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries/query',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"async": false,
"author": [
"string"
],
"created_after": "string",
"created_before": "string",
"eln_entries": [
"string"
],
"finalized_date_after": "string",
"finalized_date_before": "string",
"modified_after": "string",
"modified_before": "string",
"offset": 0,
"only_ids": false,
"only_summary": false,
"page_size": 50,
"projects": [
"string"
],
"status": "open",
"submitted_date_after": "string",
"submitted_date_before": "string"
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries/query', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"async": false,
"author": [
"string"
],
"created_after": "string",
"created_before": "string",
"eln_entries": [
"string"
],
"finalized_date_after": "string",
"finalized_date_before": "string",
"modified_after": "string",
"modified_before": "string",
"offset": 0,
"only_ids": false,
"only_summary": false,
"page_size": 50,
"projects": [
"string"
],
"status": "open",
"submitted_date_after": "string",
"submitted_date_before": "string"
}),
});
const data = await response.json();{
"async": false,
"author": [
"string"
],
"created_after": "2024-01-15",
"created_before": "2024-01-15",
"eln_entries": [
"string"
],
"finalized_date_after": "2024-01-15",
"finalized_date_before": "2024-01-15",
"modified_after": "2024-01-15",
"modified_before": "2024-01-15",
"offset": 0,
"only_ids": false,
"only_summary": false,
"page_size": 50,
"projects": [
"string"
],
"status": "open",
"submitted_date_after": "2024-01-15",
"submitted_date_before": "2024-01-15"
}[
{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 42,
"status": "new",
"updated_at": "2024-01-02T03:04:05.000Z"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Update an ELN entry
Update an existing ELN entry. Only the attributes supplied in the body are changed. Content supplied in append_to_body (text, links, files) is appended to the existing entry body.
Body
Attributes used to create or update an ELN entry. The same body is accepted by POST /eln/entries (create) and PUT /eln/entries/{id} (update); on update, only the supplied fields are changed.
append_to_bodyArray<object | object | object>Ordered list of content nodes appended to the body of the entry. Each node has a type; the supported types are:
text— a paragraph of text. Providetext(defaults to an empty string).link— a hyperlink. Provideurl(required; must be a valid http/https/ftp/mailto URL) and an optionallabelfor the display text. Use this to link to a batch, molecule, protocol, or any external resource.file— an attachment that was already uploaded. Providefile, the id of an accessible uploaded file. (Files can also be attached to an existing entry with thePOST /filesAPI.)
eln_fieldsobjectThe ELN fields of the entry
projectinteger | stringtitlestringThe title of the entry
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the ELN entry
Response
Success
Missing or invalid API key
ELN entry not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"title": "Synthesis of compound 42",
"project": 7,
"eln_fields": {
"Reaction type": "Suzuki coupling"
},
"append_to_body": [
{
"type": "text",
"text": "Procedure followed the standard protocol."
},
{
"type": "link",
"url": "https://app.collaborativedrug.com/vaults/1/molecules/12345",
"label": "Starting material CDD-12345"
},
{
"type": "file",
"file": 98765
}
]
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"title": "Synthesis of compound 42",
"project": 7,
"eln_fields": {
"Reaction type": "Suzuki coupling"
},
"append_to_body": [
{
"type": "text",
"text": "Procedure followed the standard protocol."
},
{
"type": "link",
"url": "https://app.collaborativedrug.com/vaults/1/molecules/12345",
"label": "Starting material CDD-12345"
},
{
"type": "file",
"file": 98765
}
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries/{id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"title": "Synthesis of compound 42",
"project": 7,
"eln_fields": {
"Reaction type": "Suzuki coupling"
},
"append_to_body": [
{
"type": "text",
"text": "Procedure followed the standard protocol."
},
{
"type": "link",
"url": "https://app.collaborativedrug.com/vaults/1/molecules/12345",
"label": "Starting material CDD-12345"
},
{
"type": "file",
"file": 98765
}
]
}),
});
const data = await response.json();{
"title": "Synthesis of compound 42",
"project": 7,
"eln_fields": {
"Reaction type": "Suzuki coupling"
},
"append_to_body": [
{
"type": "text",
"text": "Procedure followed the standard protocol."
},
{
"type": "link",
"url": "https://app.collaborativedrug.com/vaults/1/molecules/12345",
"label": "Starting material CDD-12345"
},
{
"type": "file",
"file": 98765
}
]
}{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 42,
"status": "new",
"updated_at": "2024-01-02T03:04:05.000Z"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Perform an ELN entry status action
Perform a witnessing/status action on an ELN entry (submit, approve, reject, cancel, reopen, finalize, or discard). Requires vault administrator access and write permission. The valid actions depend on whether ELN witnessing is enabled for the vault.
Body
A witnessing/status action to perform on an ELN entry. The set of valid status_action values depends on whether ELN witnessing is enabled for the vault:
- Witnessing enabled:
submit(requireswitness),approve,reject(requiresreason),cancel,reopen(requiresreason),discard. - Witnessing disabled:
finalize,reopen(requiresreason),discard.
reasonstringReason for the action (required for reject and reopen).
status_actionstringsubmitapproverejectcancelreopenfinalizediscardrequiredThe action to perform.
witnessintegerId of the witnessing user (required for submit).
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the ELN entry
Response
The updated ELN entry
Invalid or missing status_action
Missing or invalid API key
ELN entry (or witness) not found, or vault is unauthorized
The entry cannot transition from its current status
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries/{id}/status' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"status_action": "submit",
"witness": 6021
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries/{id}/status',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"status_action": "submit",
"witness": 6021
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/eln/entries/{id}/status', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"status_action": "submit",
"witness": 6021
}),
});
const data = await response.json();{
"status_action": "submit",
"witness": 6021
}{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 42,
"status": "new",
"updated_at": "2024-01-02T03:04:05.000Z"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Exports
Asynchronous data exports
Get progress of an export
Check on the status of your export task. Repeat this call every 5-10 seconds (suggested interval) until the status is “finished”
Parameters
vault_idintegerrequiredpathexport_idintegerrequiredpathResponse
Successful operation
Missing or invalid API key
Couldn't find this export
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/export_progress/{export_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/export_progress/{export_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/export_progress/{export_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"queued_job_position": 0,
"status": "new"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"error": "Couldn't find export with 'id'={export_id}"
}Check All Current Exports
Check how many async API export tasks are currently running and see the current status of the user's queue. The endpoint does not accept any normal API parameters and lists all of a user's exports, including any exports initiated via the GUI/front-end. Note: This GET Exports API call will return ALL exports across all Vaults applicable to the API Token specified, regardless of the Vault ID used in the API url.
Parameters
vault_idintegerrequiredpathResponse
List of all active exports
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/exports' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/exports',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/exports', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"queued_job_position": 0,
"status": "new"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Get the output of an export
Retrieve the output of an export once it is ready. An export is created whenever a query endpoint is called with async=true (for example POST /molecules/query, POST /batches/query, or an ELN entries query), as well as when running a saved search. This single endpoint returns the finished output for any of them. If the export is not finished it returns 403 together with the export's async progress details; poll GET /export_progress/{export_id} until it is ready. The output format (JSON, CSV, SDF, etc.) depends on the format requested when the export was created.
Depending on server configuration the file may be served directly (200) or via a 302 redirect to a temporary download URL (e.g. S3). Configure your client to follow redirects — with curl, pass -L.
Parameters
vault_idintegerrequiredpathexport_idintegerrequiredpathResponse
Successful operation; the response body is the export file. The format depends on what was requested when the export was created (JSON, CSV, SDF, etc.).
Redirect to a temporary download URL for the file (used when files are served directly from S3). Follow the Location header (curl: -L).
Missing or invalid API key
The export is not ready yet
Couldn't find this export
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/exports/{export_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/exports/{export_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/exports/{export_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"queued_job_position": 0,
"status": "new"
}{
"error": "Couldn't find export with 'id'={export_id}"
}Cancel Export
Cancels an export if possible
Parameters
vault_idintegerrequiredpathexport_idintegerrequiredpathResponse
The export was canceled (its status becomes canceled).
Missing or invalid API key
The export was not in a cancelable state (for example it has already finished or was already canceled). The export's current state is returned unchanged.
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/exports/{export_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/exports/{export_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/exports/{export_id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"queued_job_position": 0,
"status": "new"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"queued_job_position": 0,
"status": "new"
}Fields
Vault field definitions
Retrieve all fields
Get all the fields both internal and user defined
Parameters
vault_idintegerrequiredpathResponse
List of all fields
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"batch": [
{
"data_type_name": "string",
"id": 0,
"name": "string",
"overwritable": true,
"required_group_number": 0,
"type": "string",
"unique_value": true
}
],
"internal": [
{
"data_type_name": "string",
"id": 0,
"name": "string",
"overwritable": true,
"required_group_number": 0,
"type": "string",
"unique_value": true
}
],
"molecule": [
{
"data_type_name": "string",
"id": 0,
"name": "string",
"overwritable": true,
"required_group_number": 0,
"type": "string",
"unique_value": true
}
],
"protocol": [
{
"data_type_name": "string",
"id": 0,
"name": "string",
"overwritable": true,
"required_group_number": 0,
"type": "string",
"unique_value": true
}
]
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Get pick list values
List the pick list values for a vault field definition.
Parameters
vault_idintegerrequiredpathfield_idintegerrequiredpathNumeric identifier of the field definition
page_sizeintegerqueryMaximum number of records to return (default 50, maximum 1000).
offsetintegerqueryNumber of records to skip (for pagination).
Response
A page of pick list values
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"count": 0,
"objects": [
{
"created_at": "2024-01-15T09:30:00Z",
"hidden": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"value": "string"
}
],
"offset": 0,
"page_size": 0
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Create a pick list value
Create a pick list value on a field definition. Requires vault administrator access.
Body
Attributes for creating or updating a pick list value.
hiddenbooleanfalseWhether the value is hidden from users.
valuestringrequiredParameters
vault_idintegerrequiredpathfield_idintegerrequiredpathNumeric identifier of the field definition
Response
The created pick list value
Missing or invalid API key
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"value": "blue",
"hidden": false
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"value": "blue",
"hidden": false
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"value": "blue",
"hidden": false
}),
});
const data = await response.json();{
"value": "blue",
"hidden": false
}{
"created_at": "2024-01-15T09:30:00Z",
"hidden": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"value": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Get a pick list value
Retrieve a single pick list value.
Parameters
vault_idintegerrequiredpathfield_idintegerrequiredpathNumeric identifier of the field definition
idintegerrequiredpathNumeric identifier of the pick list value
Response
The pick list value
Missing or invalid API key
Pick list value not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"created_at": "2024-01-15T09:30:00Z",
"hidden": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"value": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update a pick list value
Update a pick list value. Requires vault administrator access.
Body
Attributes for creating or updating a pick list value.
hiddenbooleanfalseWhether the value is hidden from users.
valuestringrequiredParameters
vault_idintegerrequiredpathfield_idintegerrequiredpathNumeric identifier of the field definition
idintegerrequiredpathNumeric identifier of the pick list value
Response
The updated pick list value
Missing or invalid API key
Pick list value not found, or vault is unauthorized
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"value": "blue",
"hidden": false
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"value": "blue",
"hidden": false
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values/{id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"value": "blue",
"hidden": false
}),
});
const data = await response.json();{
"value": "blue",
"hidden": false
}{
"created_at": "2024-01-15T09:30:00Z",
"hidden": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"value": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Delete a pick list value
Delete a pick list value. Requires vault administrator access.
Parameters
vault_idintegerrequiredpathfield_idintegerrequiredpathNumeric identifier of the field definition
idintegerrequiredpathNumeric identifier of the pick list value
Response
The pick list value was deleted
Missing or invalid API key
Pick list value not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/fields/{field_id}/pick_list_values/{id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"message": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Files
File attachments
Attach a file to an object
Attach a file to a record in the vault. The request must be sent as multipart/form-data (the file itself is the file part; the resource_class and resource_id fields identify the record to attach it to).
Files can only be attached to the four resource classes listed under resource_class: run, molecule, protocol, and eln_entry. Readout rows are not directly attachable — there is no readout_row resource class. To associate a file with protocol readout data, attach it to the parent run (resource_class: run, resource_id: the run's id) or to the protocol.
Body
filestring<binary>Path to the file to be uploaded
resource_classstringrunmoleculeprotocoleln_entryClass of the resource to which the file is attached
resource_idstringUnique identifier of the resource to which the file is attached
Parameters
vault_idintegerrequiredpathResponse
File successfully attached
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/files' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-F 'file=@/path/to/file' \
-F 'resource_class=run' \
-F 'resource_id=string'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/files',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
files={'file': open('/path/to/file', 'rb')},
data={'resource_class': 'run', 'resource_id': 'string'},
)
data = response.json()// `fileInput` is a file <input> element, e.g. document.querySelector('input[type=file]')
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('resource_class', 'run');
formData.append('resource_id', 'string');
const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/files', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
body: formData,
});
const data = await response.json();{
"file": "<binary>",
"resource_class": "run",
"resource_id": "string"
}{
"id": "string",
"name": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Retrieve a file
Return a single file with the content base64 encoded.
Parameters
vault_idintegerrequiredpathfile_idintegerrequiredpathResponse
Successful operation, output will depend on format selected when doing the query
Missing or invalid API key
Couldn't find this file
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/files/{file_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/files/{file_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/files/{file_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"error": "Couldn't find file with 'id'={file_id}"
}Delete file
Delete a file
Parameters
vault_idintegerrequiredpathfile_idintegerrequiredpathResponse
The file
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/files/{file_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/files/{file_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/files/{file_id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"character_set": "US-ASCII",
"class": "uploaded file",
"contents": "VGhpcyBpcyBhIGZpbGUK",
"id": 1069448031,
"mime_type": {
"hash": -1147906696977776400,
"string": "text/plain",
"symbol": "text",
"synonyms": [
"string"
]
},
"name": "tmp.txt"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Import Parsers
Import parsers for structured data files
Get import parsers
List the import parsers (structured-file parsing templates) defined in the vault. The listing returns summary fields only; use the show endpoint to retrieve a parser's full template_json configuration.
Parameters
vault_idintegerrequiredpathResponse
List of import parsers
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/import_parsers' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/import_parsers',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/import_parsers', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"count": 0,
"objects": [
{
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"template_json": {}
}
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Get an import parser
Retrieve a single import parser, including its full template_json configuration.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the import parser
Response
The import parser
Missing or invalid API key
Import parser not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/import_parsers/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/import_parsers/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/import_parsers/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"template_json": {}
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Inventory
Sample inventory locations
Retrieve a list of Sample Inventory Locations for a given Vault
Returns a list of inventory locations within the specified vault.
Parameters
vault_idintegerrequiredpathX-CDD-TokenstringrequiredheaderAuthentication token
Response
A list of inventory locations
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_locations' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_locations',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_locations', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"class": "inventory location",
"created_at": "2023-10-30T18:25:41.771Z",
"filled_position_count": 0,
"id": 42,
"modified_at": "2023-10-30T18:25:41.771Z",
"num_columns": 0,
"num_rows": 0,
"parent_id": 130,
"position_limit": 0,
"value": "Gotham"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Inventory Samples
Inventory samples and their events
Get inventory samples
List inventory samples in the vault. Supports pagination (page_size, offset), asynchronous retrieval (async=true), and filtering by batch, project, and creation/modification dates. Requires inventory fields to be enabled for the vault.
Parameters
vault_idintegerrequiredpathpage_sizeintegerqueryMaximum number of records to return (default 50, maximum 1000).
offsetintegerqueryNumber of records to skip (for pagination).
asyncbooleanqueryIf true, run the listing as an asynchronous export.
batch_idsstringqueryComma-separated batch ids to filter by.
inventory_sample_idsstringqueryComma-separated inventory sample ids to filter by.
projectsstringqueryComma-separated project ids to filter by.
created_afterstring<date-time>queryOnly include samples created on or after this time.
created_beforestring<date-time>queryOnly include samples created on or before this time.
modified_afterstring<date-time>queryOnly include samples modified on or after this time.
modified_beforestring<date-time>queryOnly include samples modified on or before this time.
Response
A page of inventory samples
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"count": 0,
"objects": [
{
"batch": 0,
"batch_name": "string",
"class": "inventory sample",
"created_at": "2024-01-15T09:30:00Z",
"created_by_user_full_name": "string",
"current_amount": 0,
"depleted": true,
"fields": {},
"id": 0,
"inventory_events": [
{
"class": "inventory event",
"created_at": "2024-01-15T09:30:00Z",
"fields": {},
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"updated_by_user_full_name": "string"
}
],
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"units": "string",
"updated_by_user_full_name": "string"
}
],
"offset": 0,
"page_size": 0
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Create an inventory sample
Create an inventory sample for a batch.
Body
Attributes for creating an inventory sample.
batch_idintegerrequiredId of the batch this sample is an inventory of.
fieldsobjectCustom inventory sample field values, keyed by field name.
inventory_eventsArray<object>Initial inventory event(s) for the sample. At most one event may be supplied per request.
unitsstringgkgmgµgngmLLµLMmMµMnMmolmmolµmolnmolpmolcountrequiredUnits the sample amount is expressed in. One of: g, kg, mg, µg, ng, mL, L, µL, M, mM, µM, nM, mol, mmol, µmol, nmol, pmol, count.
Parameters
vault_idintegerrequiredpathResponse
The created inventory sample
Missing or invalid API key
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"batch_id": 456,
"units": "mg",
"fields": {
"Supplier": "Acme Chemicals"
},
"inventory_events": [
{
"fields": {
"Credit": 100
}
}
]
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"batch_id": 456,
"units": "mg",
"fields": {
"Supplier": "Acme Chemicals"
},
"inventory_events": [
{
"fields": {
"Credit": 100
}
}
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"batch_id": 456,
"units": "mg",
"fields": {
"Supplier": "Acme Chemicals"
},
"inventory_events": [
{
"fields": {
"Credit": 100
}
}
]
}),
});
const data = await response.json();{
"batch_id": 456,
"units": "mg",
"fields": {
"Supplier": "Acme Chemicals"
},
"inventory_events": [
{
"fields": {
"Credit": 100
}
}
]
}{
"batch": 0,
"batch_name": "string",
"class": "inventory sample",
"created_at": "2024-01-15T09:30:00Z",
"created_by_user_full_name": "string",
"current_amount": 0,
"depleted": true,
"fields": {},
"id": 0,
"inventory_events": [
{
"class": "inventory event",
"created_at": "2024-01-15T09:30:00Z",
"fields": {},
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"updated_by_user_full_name": "string"
}
],
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"units": "string",
"updated_by_user_full_name": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Get an inventory sample
Retrieve a single inventory sample.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the inventory sample
Response
The inventory sample
Missing or invalid API key
Inventory sample not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"batch": 0,
"batch_name": "string",
"class": "inventory sample",
"created_at": "2024-01-15T09:30:00Z",
"created_by_user_full_name": "string",
"current_amount": 0,
"depleted": true,
"fields": {},
"id": 0,
"inventory_events": [
{
"class": "inventory event",
"created_at": "2024-01-15T09:30:00Z",
"fields": {},
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"updated_by_user_full_name": "string"
}
],
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"units": "string",
"updated_by_user_full_name": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update an inventory sample
Update an inventory sample. Only the supplied fields are changed. At most one inventory event may be added or updated per request.
Body
Attributes for updating an inventory sample. Only supplied fields are changed.
depletedbooleanMark the sample as depleted (true) or clear the depleted flag (false).
fieldsobjectCustom inventory sample field values, keyed by field name.
inventory_eventsArray<object>An inventory event to add or update. At most one event may be supplied per request. Include the event id to update an existing event; omit it to create a new one.
unitsstringgkgmgµgngmLLµLMmMµMnMmolmmolµmolnmolpmolcountUnits the sample amount is expressed in.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the inventory sample
Response
The updated inventory sample
Missing or invalid API key
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"depleted": false,
"fields": {
"Supplier": "New Supplier Inc"
},
"inventory_events": [
{
"id": 54321,
"fields": {
"Debit": 10
}
}
]
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"depleted": false,
"fields": {
"Supplier": "New Supplier Inc"
},
"inventory_events": [
{
"id": 54321,
"fields": {
"Debit": 10
}
}
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples/{id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"depleted": false,
"fields": {
"Supplier": "New Supplier Inc"
},
"inventory_events": [
{
"id": 54321,
"fields": {
"Debit": 10
}
}
]
}),
});
const data = await response.json();{
"depleted": false,
"fields": {
"Supplier": "New Supplier Inc"
},
"inventory_events": [
{
"id": 54321,
"fields": {
"Debit": 10
}
}
]
}{
"batch": 0,
"batch_name": "string",
"class": "inventory sample",
"created_at": "2024-01-15T09:30:00Z",
"created_by_user_full_name": "string",
"current_amount": 0,
"depleted": true,
"fields": {},
"id": 0,
"inventory_events": [
{
"class": "inventory event",
"created_at": "2024-01-15T09:30:00Z",
"fields": {},
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"updated_by_user_full_name": "string"
}
],
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"units": "string",
"updated_by_user_full_name": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Delete an inventory sample
Delete an inventory sample. Samples that are associated with a protocol (readout rows) or a plate well cannot be deleted.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the inventory sample
Response
The inventory sample was deleted
Missing or invalid API key
The sample cannot be deleted (associated with a protocol or plate well)
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/inventory_samples/{id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"message": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Mapping Templates
Import mapping templates
Retrieve all the mapping templates
This will give you a summary of all the mapping templates.
If you need details, you need to use the GET /vaults/{vault_id}/mapping_templates/{mapping_template_id} endpoint.
Parameters
vault_idintegerrequiredpathResponse
List of all fields
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/mapping_templates' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/mapping_templates',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/mapping_templates', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"created_at": "2021-12-23T23:59:22.000Z",
"id": 22704,
"modified_at": "2021-12-23T23:59:22.000Z",
"name": "Protac Registration",
"owner": "Charlie Weatherall"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Retrieve a single mapping template
This will give you the details about this mapping template
Parameters
vault_idintegerrequiredpathmapping_template_idintegerrequiredpathResponse
List of all fields
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/mapping_templates/{mapping_template_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/mapping_templates/{mapping_template_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/mapping_templates/{mapping_template_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"created_at": "2021-12-23T23:59:22.000Z",
"file": {
"file_name": "string",
"value": 0
},
"header_mappings": [
{
"definition": {
"data_type_name": "string",
"id": 0,
"name": "string",
"pick_list_values": [
"string"
],
"protocol_name": "string",
"type": "string"
},
"header": {
"id": 0,
"name": "string"
},
"run_grouping": 0
}
],
"id": 22704,
"modified_at": "2021-12-23T23:59:22.000Z",
"name": "Protac Registration",
"owner": "Charlie Weatherall"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Molecules
Molecules handling
Create a molecule
Create a molecule. This is only permitted in vaults that are NOT using a registration system; in registration vaults, register molecules by creating batches instead. To read or search molecules, use POST /molecules/query.
Body
Attributes for creating a molecule. Creating molecules directly is only allowed in vaults that are NOT using a registration system; in registration vaults, register molecules by creating batches instead.
collectionsArray<integer | string>Collections to add the molecule to (ids or names).
duplicate_resolutionstringnewpromptHow to handle a structure that duplicates an existing molecule. new registers a new molecule; prompt fails with the duplicate details so the caller can decide. Must match tautomer_resolution if both are given.
molecule_fieldsobjectCustom molecule field values, keyed by field name. The legacy alias udfs is also accepted.
namestringrequiredName of the molecule.
projectsArray<integer | string>Projects the molecule belongs to (ids or names).
registration_forminteger | stringThe registration form to use (id or name). Defaults to the vault default.
registration_typestringThe kind of entity being registered (e.g. CHEMICAL_STRUCTURE).
structurestringThe chemical structure, as SMILES or a molfile. For amino-acid, nucleotide, or mixture molecules use the corresponding structure representation accepted for that registration type.
synonymsArray<string>Alternative names for the molecule.
tautomer_resolutionstringnewpromptHow to handle a structure that is a tautomer of an existing molecule.
Parameters
vault_idintegerrequiredpathResponse
The created molecule
Missing or invalid API key
Validation error, or molecule creation is not allowed in this vault
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "My compound",
"structure": "CC(=O)Oc1ccccc1C(=O)O",
"synonyms": [
"Aspirin"
],
"projects": [
12
],
"molecule_fields": {
"Solubility": "High"
}
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"name": "My compound",
"structure": "CC(=O)Oc1ccccc1C(=O)O",
"synonyms": [
"Aspirin"
],
"projects": [
12
],
"molecule_fields": {
"Solubility": "High"
}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "My compound",
"structure": "CC(=O)Oc1ccccc1C(=O)O",
"synonyms": [
"Aspirin"
],
"projects": [
12
],
"molecule_fields": {
"Solubility": "High"
}
}),
});
const data = await response.json();{
"name": "My compound",
"structure": "CC(=O)Oc1ccccc1C(=O)O",
"synonyms": [
"Aspirin"
],
"projects": [
12
],
"molecule_fields": {
"Solubility": "High"
}
}{
"batches": [
{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15T09:30:00Z",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}
],
"class": "molecule",
"created_at": "2024-01-15T09:30:00Z",
"id": 1000211,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_fields": {},
"name": "Aspirin",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "chemical_structure",
"smiles": "CC(=O)OC1=CC=CC=C1C(=O)O",
"synonyms": [
"string"
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Get multiple molecules
Get the information from multiple molecules. 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.
Body
asyncbooleanIf true, do an asynchronous export. Use for large data sets.
batch_created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
batch_created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
batch_field_after_datestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
batch_field_after_namestringName of the batch date field to filter on (used with batch_field_after_date).
batch_field_before_datestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
batch_field_before_namestringName of the batch date field to filter on (used with batch_field_before_date).
batch_fieldsArray<string>Array of Batch field names to include in the resulting JSON. Defaults to all available fields.
collection_criteriaArray<object>Array of collection criteria objects. Filters results based on collection membership with support for AND/OR/XOR junctions and exclusion (NOT IN) logic.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
data_setsArray<integer>Array of public dataset ids. Defaults to all data sets.
fields_searchArray<object | object | object>Array of Molecule field names & values. Used to filter Molecules returned based on query values
include_original_structuresbooleanfalseIf true, include the original structure in the response. This is independent of no_structures.
inchikeystringFilter molecules by InChIKey.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
molecule_fieldsArray<string>Array of Molecule field names to include in the resulting JSON. Defaults to all available fields.
namesArray<string>Array of molecule names or synonyms to search for.
no_structuresbooleanfalseIf true, omit structure representations for a smaller and faster response.
offsetintegeronly_batch_idsbooleanfalseIf true, the full Molecule details are still returned but the Batch-level information is left out of the JSON results. (Only the IDs of the Batches are still included.)
only_idsbooleanfalseIf true, only return the ids of the molecules.
page_sizeinteger50Requested page size (maximum value 1000).
projectsArray<integer>Array of project ids. Defaults to all available projects.
protocol_criteriaArray<object>Array of protocol-based filters restricting results to molecules with (or without) matching protocol readout data. Criteria are combined using each entry's junction.
structurestringA SMILES or MOL string to search for.
structure_criterionobjectA structure-property filter object. Each property is filtered by an optional _minimum and/or _maximum bound. Properties from different registration types (chemical, nucleotide, amino acid) cannot be mixed in one request. Only a representative subset of the available properties is listed below; all follow the same <property>_minimum / <property>_maximum convention.
structure_search_typestringexactsubstructuresimilarityexact_with_stereoThe type of structure search to perform. Options are 'exact', 'substructure', 'similarity', or 'exact_with_stereo'.
structure_similarity_thresholdnumber[0, 1]Similarity threshold for similarity searches (0 to 1). Only used when structure_search_type is 'similarity'.
moleculesArray<integer>Comma separated list of molecule ids. Cannot be used with other parameters
Parameters
vault_idintegerrequiredpathResponse
Success
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/query' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"async": true,
"batch_created_after": "string",
"batch_created_before": "string",
"batch_field_after_date": "string",
"batch_field_after_name": "string",
"batch_field_before_date": "string",
"batch_field_before_name": "string",
"batch_fields": [
"string"
],
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_after": "string",
"created_before": "string",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"inchikey": "string",
"modified_after": "string",
"modified_before": "string",
"molecule_fields": [
"string"
],
"names": [
"string"
],
"no_structures": false,
"offset": 0,
"only_batch_ids": false,
"only_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "string",
"run_before": "string",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure": "string",
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
},
"structure_search_type": "exact",
"structure_similarity_threshold": 0
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/query',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"async": true,
"batch_created_after": "string",
"batch_created_before": "string",
"batch_field_after_date": "string",
"batch_field_after_name": "string",
"batch_field_before_date": "string",
"batch_field_before_name": "string",
"batch_fields": [
"string"
],
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_after": "string",
"created_before": "string",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"inchikey": "string",
"modified_after": "string",
"modified_before": "string",
"molecule_fields": [
"string"
],
"names": [
"string"
],
"no_structures": false,
"offset": 0,
"only_batch_ids": false,
"only_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "string",
"run_before": "string",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure": "string",
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
},
"structure_search_type": "exact",
"structure_similarity_threshold": 0
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/query', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"async": true,
"batch_created_after": "string",
"batch_created_before": "string",
"batch_field_after_date": "string",
"batch_field_after_name": "string",
"batch_field_before_date": "string",
"batch_field_before_name": "string",
"batch_fields": [
"string"
],
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_after": "string",
"created_before": "string",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"inchikey": "string",
"modified_after": "string",
"modified_before": "string",
"molecule_fields": [
"string"
],
"names": [
"string"
],
"no_structures": false,
"offset": 0,
"only_batch_ids": false,
"only_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "string",
"run_before": "string",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure": "string",
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
},
"structure_search_type": "exact",
"structure_similarity_threshold": 0
}),
});
const data = await response.json();{
"async": true,
"batch_created_after": "2024-01-15",
"batch_created_before": "2024-01-15",
"batch_field_after_date": "2024-01-15",
"batch_field_after_name": "string",
"batch_field_before_date": "2024-01-15",
"batch_field_before_name": "string",
"batch_fields": [
"string"
],
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_after": "2024-01-15",
"created_before": "2024-01-15",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"inchikey": "string",
"modified_after": "2024-01-15",
"modified_before": "2024-01-15",
"molecule_fields": [
"string"
],
"names": [
"string"
],
"no_structures": false,
"offset": 0,
"only_batch_ids": false,
"only_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "2024-01-15",
"run_before": "2024-01-15",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure": "string",
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
},
"structure_search_type": "exact",
"structure_similarity_threshold": 0
}[
{
"batches": [
{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15T09:30:00Z",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}
],
"class": "molecule",
"created_at": "2024-01-15T09:30:00Z",
"id": 1000211,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_fields": {},
"name": "Aspirin",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "chemical_structure",
"smiles": "CC(=O)OC1=CC=CC=C1C(=O)O",
"synonyms": [
"string"
]
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Get a molecule
Retrieve a single molecule by id. For querying multiple molecules or searching by structure, use POST /molecules/query.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the molecule
no_structuresbooleanqueryExclude structure representations (smiles, inchi, molfile, etc.).
only_batch_idsbooleanqueryReturn only the molecule's batch ids instead of full batch objects.
Response
The molecule
Missing or invalid API key
Molecule not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"batches": [
{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15T09:30:00Z",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}
],
"class": "molecule",
"created_at": "2024-01-15T09:30:00Z",
"id": 1000211,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_fields": {},
"name": "Aspirin",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "chemical_structure",
"smiles": "CC(=O)OC1=CC=CC=C1C(=O)O",
"synonyms": [
"string"
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update a molecule
Update a molecule. Only the supplied fields are changed; array fields (synonyms, projects, collections) replace the existing values.
Body
Attributes for updating a molecule. Only the supplied fields are changed. Array fields (synonyms, projects, collections) replace the existing values.
collectionsArray<integer | string>Collections the molecule belongs to (ids or names). Replaces existing.
molecule_fieldsobjectCustom molecule field values, keyed by field name. The legacy alias udfs is also accepted.
namestringName of the molecule.
projectsArray<integer | string>Projects the molecule belongs to (ids or names). Replaces existing.
structurestringUpdated chemical structure, as SMILES or a molfile.
synonymsArray<string>Alternative names for the molecule. Replaces existing.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the molecule
Response
The updated molecule
Missing or invalid API key
Molecule not found, or vault is unauthorized
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "Renamed compound",
"synonyms": [
"Aspirin",
"2-Acetoxybenzoic acid"
],
"molecule_fields": {
"Solubility": "Medium"
}
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"name": "Renamed compound",
"synonyms": [
"Aspirin",
"2-Acetoxybenzoic acid"
],
"molecule_fields": {
"Solubility": "Medium"
}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/{id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Renamed compound",
"synonyms": [
"Aspirin",
"2-Acetoxybenzoic acid"
],
"molecule_fields": {
"Solubility": "Medium"
}
}),
});
const data = await response.json();{
"name": "Renamed compound",
"synonyms": [
"Aspirin",
"2-Acetoxybenzoic acid"
],
"molecule_fields": {
"Solubility": "Medium"
}
}{
"batches": [
{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15T09:30:00Z",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}
],
"class": "molecule",
"created_at": "2024-01-15T09:30:00Z",
"id": 1000211,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_fields": {},
"name": "Aspirin",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "chemical_structure",
"smiles": "CC(=O)OC1=CC=CC=C1C(=O)O",
"synonyms": [
"string"
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Get a molecule image
Request a rendered image of a molecule's structure. Image generation is asynchronous: this returns an export object whose progress you poll with GET /export_progress/{export_id}, then download the image with GET /exports/{export_id} once it is finished.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the molecule
widthintegerqueryImage width in pixels.
heightintegerqueryImage height in pixels.
formatstringsvgpngsvgqueryImage format.
Response
The export to poll for the generated image
Missing or invalid API key
Molecule not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/{id}/image' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/{id}/image',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/molecules/{id}/image', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"queued_job_position": 0,
"status": "new"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Plates
Plates of wells
Get plates
List plates in the vault. Supports pagination (page_size, offset), asynchronous retrieval (async=true), only_ids, and filtering by name, location, project, and creation/modification dates.
Parameters
vault_idintegerrequiredpathpage_sizeintegerqueryMaximum number of records to return (default 50, maximum 1000).
offsetintegerqueryNumber of records to skip (for pagination).
asyncbooleanqueryIf true, run the listing as an asynchronous export.
only_idsbooleanqueryIf true, return only the ids of matching plates.
platesstringqueryComma-separated plate ids to filter by.
namesstringqueryComma-separated plate names to filter by.
projectsstringqueryComma-separated project ids to filter by.
Response
List of plates
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"class": "plate",
"concentration": 0,
"concentration_unit_label": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"inventory_location_id": 0,
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"projects": [
{
"id": 0,
"name": "string"
}
],
"statistics": [
{}
],
"volume": 0,
"volume_unit_label": "string",
"wells": [
{
"batch": 0,
"col": 0,
"row": 0,
"sample": 0
}
]
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Create a plate
Create a plate. Requires write permission in the vault.
Body
Attributes for creating or updating a plate. On create, name and projects are required. Supplying wells replaces the plate's wells.
concentrationnumberconcentration_unit_labelstringinventory_locationintegerId of the inventory location for the plate.
locationstringnamestringprojectsArray<integer>Project ids the plate belongs to.
volumenumbervolume_unit_labelstringwellsArray<object>Wells to populate. Each well identifies its position by row+col or pos.
Parameters
vault_idintegerrequiredpathResponse
The created plate
Missing or invalid API key
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "Plate 001",
"projects": [
12
],
"location": "Freezer A",
"wells": [
{
"row": 0,
"col": 0,
"batch": 456
}
]
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"name": "Plate 001",
"projects": [
12
],
"location": "Freezer A",
"wells": [
{
"row": 0,
"col": 0,
"batch": 456
}
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Plate 001",
"projects": [
12
],
"location": "Freezer A",
"wells": [
{
"row": 0,
"col": 0,
"batch": 456
}
]
}),
});
const data = await response.json();{
"name": "Plate 001",
"projects": [
12
],
"location": "Freezer A",
"wells": [
{
"row": 0,
"col": 0,
"batch": 456
}
]
}{
"class": "plate",
"concentration": 0,
"concentration_unit_label": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"inventory_location_id": 0,
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"projects": [
{
"id": 0,
"name": "string"
}
],
"statistics": [
{}
],
"volume": 0,
"volume_unit_label": "string",
"wells": [
{
"batch": 0,
"col": 0,
"row": 0,
"sample": 0
}
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Get a plate
Retrieve a single plate.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the plate
Response
The plate
Missing or invalid API key
Plate not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"class": "plate",
"concentration": 0,
"concentration_unit_label": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"inventory_location_id": 0,
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"projects": [
{
"id": 0,
"name": "string"
}
],
"statistics": [
{}
],
"volume": 0,
"volume_unit_label": "string",
"wells": [
{
"batch": 0,
"col": 0,
"row": 0,
"sample": 0
}
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update a plate
Update a plate. Requires write permission.
Body
Attributes for creating or updating a plate. On create, name and projects are required. Supplying wells replaces the plate's wells.
concentrationnumberconcentration_unit_labelstringinventory_locationintegerId of the inventory location for the plate.
locationstringnamestringprojectsArray<integer>Project ids the plate belongs to.
volumenumbervolume_unit_labelstringwellsArray<object>Wells to populate. Each well identifies its position by row+col or pos.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the plate
Response
The updated plate
Missing or invalid API key
Plate not found, or vault is unauthorized
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "Plate 001",
"projects": [
12
],
"location": "Freezer A",
"wells": [
{
"row": 0,
"col": 0,
"batch": 456
}
]
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"name": "Plate 001",
"projects": [
12
],
"location": "Freezer A",
"wells": [
{
"row": 0,
"col": 0,
"batch": 456
}
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates/{id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Plate 001",
"projects": [
12
],
"location": "Freezer A",
"wells": [
{
"row": 0,
"col": 0,
"batch": 456
}
]
}),
});
const data = await response.json();{
"name": "Plate 001",
"projects": [
12
],
"location": "Freezer A",
"wells": [
{
"row": 0,
"col": 0,
"batch": 456
}
]
}{
"class": "plate",
"concentration": 0,
"concentration_unit_label": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"inventory_location_id": 0,
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"projects": [
{
"id": 0,
"name": "string"
}
],
"statistics": [
{}
],
"volume": 0,
"volume_unit_label": "string",
"wells": [
{
"batch": 0,
"col": 0,
"row": 0,
"sample": 0
}
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Delete a plate
Delete a plate. Requires write permission. A plate that has associated run data cannot be deleted.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the plate
Response
The plate was deleted
Missing or invalid API key
Plate not found, or vault is unauthorized
The plate cannot be deleted (it has associated run data)
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/plates/{id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Projects
Projects within a vault
Get projects
List the projects accessible to the API key in the vault. Each entry contains the project id and name.
Parameters
vault_idintegerrequiredpathResponse
List of projects
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"description": "string",
"id": 0,
"members": [
{
"can_edit_data": true,
"can_manage_project": true,
"id": 0
}
],
"name": "string"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Create a project
Create a project. Requires permission to manage projects in the vault. The response contains the new project's id and name.
Body
Attributes for creating or updating a project.
descriptionstringProject description.
membersArray<object>Project members. On update this replaces the existing membership list. If omitted on create, the current user is added as a member.
namestringrequiredProject name (must be unique within the vault).
Parameters
vault_idintegerrequiredpathResponse
The created project
Missing or invalid API key
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "My project",
"description": "Compounds from the 2026 screening campaign",
"members": [
{
"user_id": 6021,
"can_manage_project": true,
"can_edit_data": true
}
]
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"name": "My project",
"description": "Compounds from the 2026 screening campaign",
"members": [
{
"user_id": 6021,
"can_manage_project": true,
"can_edit_data": true
}
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "My project",
"description": "Compounds from the 2026 screening campaign",
"members": [
{
"user_id": 6021,
"can_manage_project": true,
"can_edit_data": true
}
]
}),
});
const data = await response.json();{
"name": "My project",
"description": "Compounds from the 2026 screening campaign",
"members": [
{
"user_id": 6021,
"can_manage_project": true,
"can_edit_data": true
}
]
}{
"description": "string",
"id": 0,
"members": [
{
"can_edit_data": true,
"can_manage_project": true,
"id": 0
}
],
"name": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Get a project
Retrieve a single project, including its description and members.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the project
Response
The project
Missing or invalid API key
Project not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"description": "string",
"id": 0,
"members": [
{
"can_edit_data": true,
"can_manage_project": true,
"id": 0
}
],
"name": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update a project
Update a project. Requires permission to manage projects. Supplying members replaces the existing membership list.
Body
Attributes for creating or updating a project.
descriptionstringProject description.
membersArray<object>Project members. On update this replaces the existing membership list. If omitted on create, the current user is added as a member.
namestringrequiredProject name (must be unique within the vault).
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the project
Response
The updated project
Missing or invalid API key
Project not found, or vault is unauthorized
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "My project",
"description": "Compounds from the 2026 screening campaign",
"members": [
{
"user_id": 6021,
"can_manage_project": true,
"can_edit_data": true
}
]
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"name": "My project",
"description": "Compounds from the 2026 screening campaign",
"members": [
{
"user_id": 6021,
"can_manage_project": true,
"can_edit_data": true
}
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects/{id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "My project",
"description": "Compounds from the 2026 screening campaign",
"members": [
{
"user_id": 6021,
"can_manage_project": true,
"can_edit_data": true
}
]
}),
});
const data = await response.json();{
"name": "My project",
"description": "Compounds from the 2026 screening campaign",
"members": [
{
"user_id": 6021,
"can_manage_project": true,
"can_edit_data": true
}
]
}{
"description": "string",
"id": 0,
"members": [
{
"can_edit_data": true,
"can_manage_project": true,
"id": 0
}
],
"name": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Delete a project
Delete a project. Requires permission to manage projects. A project that still has associated data (runs, models, etc.) may not be deletable.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the project
Response
The project was deleted
Missing or invalid API key
Project not found, or vault is unauthorized
The project cannot be deleted (it still has associated data)
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/projects/{id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Protocols
Protocols and their readout data
Get protocols
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.
Parameters
vault_idintegerrequiredpathpage_sizeintegerqueryMaximum number of records to return (default 50, maximum 1000).
offsetintegerqueryNumber of records to skip (for pagination).
asyncbooleanqueryIf true, run the listing as an asynchronous export.
only_idsbooleanqueryIf true, return only the ids of matching protocols.
no_runsbooleanqueryIf true, omit run data from each protocol.
namesstringqueryComma-separated protocol names to filter by.
protocolsstringqueryComma-separated protocol ids to filter by.
projectsstringqueryComma-separated project ids to filter by.
Response
A page of protocols
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"count": 0,
"objects": [
{
"calculations": [
{}
],
"category": "string",
"class": "protocol",
"created_at": "2024-01-15T09:30:00Z",
"data_set": 0,
"description": "string",
"hit_definitions": [
{}
],
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"ontology_annotations": [
{}
],
"owner": "string",
"projects": [
0
],
"protocol_fields": {},
"protocol_statistics": [
{}
],
"readout_definitions": [
{}
],
"runs": [
{}
]
}
],
"offset": 0,
"page_size": 0
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Get a protocol
Retrieve a single protocol. Pass no_runs=true to omit run data.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the protocol
no_runsbooleanqueryIf true, omit run data from the response.
Response
The protocol
Missing or invalid API key
Protocol not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"calculations": [
{}
],
"category": "string",
"class": "protocol",
"created_at": "2024-01-15T09:30:00Z",
"data_set": 0,
"description": "string",
"hit_definitions": [
{}
],
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"ontology_annotations": [
{}
],
"owner": "string",
"projects": [
0
],
"protocol_fields": {},
"protocol_statistics": [
{}
],
"readout_definitions": [
{}
],
"runs": [
{}
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update a protocol
Update a protocol's definition (name, projects, and protocol field values). This does not modify readout definitions. Requires write permission.
Body
Attributes for updating a protocol's definition (not its readout definitions). Only the supplied fields are changed.
namestringprojectsArray<integer>Project ids the protocol belongs to (replaces the existing set).
protocol_fieldsobjectCustom protocol field values, keyed by field name.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the protocol
Response
The updated protocol
Missing or invalid API key
Protocol not found, or vault is unauthorized
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "My Inhibition Screen",
"projects": [
12
],
"protocol_fields": {
"Category": "Biochemical"
}
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"name": "My Inhibition Screen",
"projects": [
12
],
"protocol_fields": {
"Category": "Biochemical"
}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "My Inhibition Screen",
"projects": [
12
],
"protocol_fields": {
"Category": "Biochemical"
}
}),
});
const data = await response.json();{
"name": "My Inhibition Screen",
"projects": [
12
],
"protocol_fields": {
"Category": "Biochemical"
}
}{
"calculations": [
{}
],
"category": "string",
"class": "protocol",
"created_at": "2024-01-15T09:30:00Z",
"data_set": 0,
"description": "string",
"hit_definitions": [
{}
],
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"ontology_annotations": [
{}
],
"owner": "string",
"projects": [
0
],
"protocol_fields": {},
"protocol_statistics": [
{}
],
"readout_definitions": [
{}
],
"runs": [
{}
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Get protocol data
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.
Parameters
vault_idintegerrequiredpathprotocol_idintegerrequiredpathNumeric identifier of the protocol
page_sizeintegerqueryMaximum number of records to return (default 50, maximum 1000).
offsetintegerqueryNumber of records to skip (for pagination).
asyncbooleanqueryIf true, run the query as an asynchronous export.
formatstringqueryIf "csv", produce a CSV export instead of a JSON page.
moleculesstringqueryComma-separated molecule ids to filter by.
runsstringqueryComma-separated run ids to filter by.
platesstringqueryComma-separated plate ids to filter by.
projectsstringqueryComma-separated project ids to filter by.
Response
A page of protocol readout data
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/data' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/data',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/protocols/{protocol_id}/data', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"count": 0,
"objects": [
{
"batch": 0,
"id": 0,
"molecule": 0,
"readouts": {},
"run": 0,
"well": {}
}
],
"offset": 0,
"page_size": 0
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Get dose-response plot
Generate dose-response plot image(s) for a batch within a protocol. By default, returns a ZIP archive containing one PNG per dose-response calculation on the protocol. Pass dose_response_calculation_id to get a single PNG for one calculation instead.
Parameters
vault_idintegerrequiredpathbatch_idintegerrequiredpathNumeric identifier of the batch
idintegerrequiredpathNumeric identifier of the protocol
dose_response_calculation_idintegerqueryRestrict the plot to a single dose-response calculation. When provided, a single PNG is returned; when omitted, a ZIP of PNGs is returned.
sizestringsmallmediumlargequeryImage size multiplier.
runsstringqueryComma-separated run ids to restrict the plotted data to.
Response
A single PNG (when dose_response_calculation_id is given) or a ZIP archive of PNGs (otherwise).
Missing or invalid API key
No data found for this batch/protocol, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/{batch_id}/protocols/{id}/plot' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/{batch_id}/protocols/{id}/plot',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.contentconst response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/batches/{batch_id}/protocols/{id}/plot', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.blob();"<binary>"{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Readout Rows
Rows of protocol readout data
Get multiple readout rows
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.
Body
asyncbooleanIf true, do an asynchronous export. Use for large data sets.
batchesArray<integer>Array of batch ids. Defaults to all batches.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
data_setsArray<integer>Array of public dataset ids. Defaults to all data sets.
include_control_statebooleanfalseIf true, include the control state of each readout.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
moleculesArray<integer>Array of molecule ids. Defaults to all molecules.
offsetintegeronly_idsbooleanfalseIf true, only return the ids of the readout rows.
page_sizeinteger50Requested page size (maximum value 1000).
platesArray<integer>Array of plate ids. Defaults to all plates.
projectsArray<integer>Array of project ids. Defaults to all available projects.
protocolsArray<integer>Array of protocol ids. Defaults to all protocols.
runsArray<integer>Array of run ids. Defaults to all runs.
runs_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
runs_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
typeArray<string>detail_rowbatch_run_aggregate_rowbatch_protocol_aggregate_rowmolecule_protocol_aggregate_rowFilter to specific readout row types. Defaults to all types.
Parameters
vault_idintegerrequiredpathResponse
The matching readout rows, or the export to poll when async is true
Missing or invalid API key
Invalid query parameters, such as an illegal type
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/readout_rows/query' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"async": true,
"batches": [
0
],
"created_after": "string",
"created_before": "string",
"data_sets": [
0
],
"include_control_state": false,
"modified_after": "string",
"modified_before": "string",
"molecules": [
0
],
"offset": 0,
"only_ids": false,
"page_size": 50,
"plates": [
0
],
"projects": [
0
],
"protocols": [
0
],
"runs": [
0
],
"runs_after": "string",
"runs_before": "string",
"type": [
"detail_row"
]
}'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/readout_rows/query',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"async": true,
"batches": [
0
],
"created_after": "string",
"created_before": "string",
"data_sets": [
0
],
"include_control_state": false,
"modified_after": "string",
"modified_before": "string",
"molecules": [
0
],
"offset": 0,
"only_ids": false,
"page_size": 50,
"plates": [
0
],
"projects": [
0
],
"protocols": [
0
],
"runs": [
0
],
"runs_after": "string",
"runs_before": "string",
"type": [
"detail_row"
]
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/readout_rows/query', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"async": true,
"batches": [
0
],
"created_after": "string",
"created_before": "string",
"data_sets": [
0
],
"include_control_state": false,
"modified_after": "string",
"modified_before": "string",
"molecules": [
0
],
"offset": 0,
"only_ids": false,
"page_size": 50,
"plates": [
0
],
"projects": [
0
],
"protocols": [
0
],
"runs": [
0
],
"runs_after": "string",
"runs_before": "string",
"type": [
"detail_row"
]
}),
});
const data = await response.json();{
"async": true,
"batches": [
0
],
"created_after": "2024-01-15",
"created_before": "2024-01-15",
"data_sets": [
0
],
"include_control_state": false,
"modified_after": "2024-01-15",
"modified_before": "2024-01-15",
"molecules": [
0
],
"offset": 0,
"only_ids": false,
"page_size": 50,
"plates": [
0
],
"projects": [
0
],
"protocols": [
0
],
"runs": [
0
],
"runs_after": "2024-01-15",
"runs_before": "2024-01-15",
"type": [
"detail_row"
]
}{
"count": 0,
"objects": [
{
"batch": 1,
"class": "readout row",
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"molecule": 1,
"protocol": 1,
"readouts": {},
"run": 1,
"type": "detail_row",
"well": "string"
}
],
"offset": 0,
"page_size": 0
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update existing row
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.
Body
readoutsobjectNew readout values and/or outlier flags, keyed by readout definition ID
Parameters
vault_idintegerrequiredpathreadout_row_idintegerrequiredpathResponse
The updated readout row
Invalid readout keys (only "value" and "outlier" are allowed), invalid outlier flag value, or the readout cannot be flagged as an outlier
Missing or invalid API key
Aggregate rows can't be updated via the API. Only detail rows can be updated
Couldn't find this readout row or one of its readouts
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/readout_rows/{readout_row_id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"readouts": {
"283130": {
"value": 99
},
"283131": {
"outlier": true
}
}
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/readout_rows/{readout_row_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"readouts": {
"283130": {
"value": 99
},
"283131": {
"outlier": true
}
}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/readout_rows/{readout_row_id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"readouts": {
"283130": {
"value": 99
},
"283131": {
"outlier": true
}
}
}),
});
const data = await response.json();{
"readouts": {
"283130": {
"value": 99
},
"283131": {
"outlier": true
}
}
}{
"id": 1,
"readouts": {}
}{
"code": 404,
"error": "Resource not found"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Delete a readout row
Delete a single readout row (row of protocol data). Only detail rows can be deleted; aggregate rows cannot be deleted via the API.
Parameters
vault_idintegerrequiredpathreadout_row_idintegerrequiredpathResponse
The readout row was deleted
Missing or invalid API key
Aggregate rows can't be destroyed via the API. Only detail rows can be destroyed
Couldn't find this readout row
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/readout_rows/{readout_row_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/readout_rows/{readout_row_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/readout_rows/{readout_row_id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"message": "Readout row with ID 1 has been destroyed"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Registration Forms
Registration forms
Get registration forms
List the registration forms configured in the vault.
Parameters
vault_idintegerrequiredpathResponse
List of registration forms
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_forms' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_forms',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_forms', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"allow_new_molecules": true,
"class": "registration form",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"registration_system": {
"class": "registration system",
"id": 0
},
"registration_type": "string"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Get a registration form
Retrieve a single registration form.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the registration form
Response
The registration form
Missing or invalid API key
Registration form not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_forms/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_forms/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_forms/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"allow_new_molecules": true,
"class": "registration form",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"registration_system": {
"class": "registration system",
"id": 0
},
"registration_type": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Registration Systems
Registration systems
Get registration systems
List the registration systems defined in the vault.
Parameters
vault_idintegerrequiredpathResponse
List of registration systems
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_systems' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_systems',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_systems', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"id": 0,
"prefix": "CDD"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Get a registration system
Retrieve a single registration system.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the registration system
Response
The registration system
Missing or invalid API key
Registration system not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_systems/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_systems/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/registration_systems/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"id": 0,
"prefix": "CDD"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Runs
Runs of protocol data
Get runs
List runs in the vault. Supports pagination (page_size, offset), asynchronous retrieval (async=true), only_ids, and filtering by protocol, project, slurp, run date, and creation/modification dates.
Parameters
vault_idintegerrequiredpathpage_sizeintegerqueryMaximum number of records to return (default 50, maximum 1000).
offsetintegerqueryNumber of records to skip (for pagination).
asyncbooleanqueryIf true, run the listing as an asynchronous export.
only_idsbooleanqueryIf true, return only the ids of matching runs.
protocolsstringqueryComma-separated protocol ids to filter by.
projectsstringqueryComma-separated project ids to filter by.
slurpintegerqueryOnly include runs imported by this slurp id.
run_date_afterstring<date>queryInclude runs with a run date on/after this date.
run_date_beforestring<date>queryInclude runs with a run date on/before this date.
Response
List of runs
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"attached_files": [
{}
],
"class": "run",
"conditions": "string",
"created_at": "2024-01-15T09:30:00Z",
"eln_entries": [
{}
],
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"ontology_annotations": [
{}
],
"person": "string",
"place": "string",
"plate_statistics": [
{}
],
"project": {
"id": 0,
"name": "string"
},
"protocol": 0,
"run_date": "2024-01-15",
"run_fields": {},
"source_files": [
{}
]
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Delete runs by slurp
Delete all runs that were imported by a given slurp. Pass the slurp id as the slurp query parameter. Requires write permission for all affected runs. (To delete a single run, use DELETE /runs/{id}.)
Parameters
vault_idintegerrequiredpathslurpintegerrequiredqueryId of the slurp whose runs should be deleted.
Response
The slurp's runs were deleted
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"message": "string",
"status": 0
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Get a run
Retrieve a single run, including its plate statistics.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the run
Response
The run
Missing or invalid API key
Run not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"attached_files": [
{}
],
"class": "run",
"conditions": "string",
"created_at": "2024-01-15T09:30:00Z",
"eln_entries": [
{}
],
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"ontology_annotations": [
{}
],
"person": "string",
"place": "string",
"plate_statistics": [
{}
],
"project": {
"id": 0,
"name": "string"
},
"protocol": 0,
"run_date": "2024-01-15",
"run_fields": {},
"source_files": [
{}
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Update a run
Update a run. Only the supplied fields are changed. Use project_id to move the run to a different project. Requires write permission.
Body
Attributes for updating a run. Only the supplied fields are changed.
conditionsstringValue for the Conditions run field (alternative to run_fields).
personstringValue for the Person run field (alternative to run_fields).
placestringValue for the Lab run field (alternative to run_fields).
project_idintegerMove the run to this project (requires write access to the target project).
run_datestring<date>run_fieldsobjectCustom run field values, keyed by field name.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the run
Response
The updated run
Missing or invalid API key
Run not found, or vault is unauthorized
Validation error
Authorization
ApiKeyAuthapiKey in headercurl -X PUT 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"run_date": "2026-01-15",
"run_fields": {
"Person": "Jane Smith"
}
}'import requests
response = requests.put(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
json={
"run_date": "2026-01-15",
"run_fields": {
"Person": "Jane Smith"
}
},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs/{id}', {
method: 'PUT',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"run_date": "2026-01-15",
"run_fields": {
"Person": "Jane Smith"
}
}),
});
const data = await response.json();{
"run_date": "2026-01-15T00:00:00.000Z",
"run_fields": {
"Person": "Jane Smith"
}
}{
"attached_files": [
{}
],
"class": "run",
"conditions": "string",
"created_at": "2024-01-15T09:30:00Z",
"eln_entries": [
{}
],
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"ontology_annotations": [
{}
],
"person": "string",
"place": "string",
"plate_statistics": [
{}
],
"project": {
"id": 0,
"name": "string"
},
"protocol": 0,
"run_date": "2024-01-15",
"run_fields": {},
"source_files": [
{}
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}{
"code": 404,
"error": "Resource not found"
}Delete a run
Delete a single run. Requires write permission.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the run
Response
The run was deleted
Missing or invalid API key
Run not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X DELETE 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.delete(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/runs/{id}', {
method: 'DELETE',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Searches
Saved searches
List of all saved searches
Return a list of accessible saved searches for the given vault.
Parameters
vault_idintegerrequiredpathResponse
List of saved searches, each including its full search_criteria (structure, keyword, and molecule/collection/protocol criteria) and display_criteria.
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/searches' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/searches',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/searches', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"display_criteria": {
"custom_displayed_header_ids": [],
"displayed_header_ids": [],
"header_group_order": [],
"image_size": "string",
"max_column_width": 0,
"plot_scale_type": "string",
"row_detail_level": "string",
"show_all_protocol_data": true,
"show_dose_response_legend": true,
"show_non_matching_readouts": true
},
"executed_by": [
"string"
],
"id": 0,
"last_api_run_at": "2024-01-15T09:30:00Z",
"last_ui_run_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"projects": [
{}
],
"saved_search_session_id": 0,
"search_criteria": {
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": true
}
],
"keyword_field": "string",
"keywords": "string",
"molecule_criteria": [
{}
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "2024-01-15",
"run_before": "2024-01-15",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"sort_direction": "ASC",
"structure": "string",
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
},
"structure_registration_type": "structure",
"structure_search_type": "string",
"structure_similarity_threshold": 0
},
"visualization_session_id": 0
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Execute a given search
Unlike other calls, saved searches can only be performed asynchronously.
Returns an export id and status.
See Async Exports for how to check on the status of your call and retrieving the data once it has finished.
Parameters
vault_idintegerrequiredpathsearch_idintegerrequiredpathprojectsArray<integer>queryComma separated list of the ids of the projects to search
data_setsArray<integer>queryComma separated list of the ids of the data sets to search
zipbooleanfalsequeryShould it be zipped
formatstringcsvsdfxlsxlsxcsvqueryFormat of the exported file
Response
Export information
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/searches/{search_id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/searches/{search_id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/searches/{search_id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"queued_job_position": 0,
"status": "new"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Slurps
Data import jobs (slurps)
Get slurps
List the active slurps (data import jobs) in the vault. Pass show_events=true to include the ambiguous/suspicious events and import errors raised during import.
Parameters
vault_idintegerrequiredpathshow_eventsbooleanqueryInclude event and error details for each slurp.
Response
List of active slurps
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/slurps' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/slurps',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/slurps', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"ambiguous_events": [
{}
],
"ambiguous_events_count": 0,
"api_url": "string",
"class": "slurp",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"import_errors": 0,
"import_errors_count": 0,
"import_warnings": 0,
"message": "string",
"modified_at": "2024-01-15T09:30:00Z",
"queued_job_position": 0,
"queued_slurp_position": 0,
"records_committed": 0,
"records_processed": 0,
"state": "mapping",
"suspicious_events": [
{}
],
"suspicious_events_count": 0,
"total_records": 0,
"web_url": "string"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Create a slurp
Start a new slurp (data import) by uploading a file. The request must be sent as multipart/form-data: the data file is the file part, and any import metadata is supplied as a JSON string in the json part. The new slurp is created in the mapping state; poll the slurp to follow its progress.
Body
filestring<binary>requiredThe data file to import (CSV, XLSX, SDF, etc.).
jsonstringImport metadata (such as mapping options) encoded as a JSON string.
Parameters
vault_idintegerrequiredpathResponse
The created slurp
Missing or invalid API key
Too many concurrent slurps for this user
Authorization
ApiKeyAuthapiKey in headercurl -X POST 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/slurps' \
-H 'X-CDD-Token: YOUR_API_KEY' \
-F 'file=@/path/to/file' \
-F 'json=string'import requests
response = requests.post(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/slurps',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
files={'file': open('/path/to/file', 'rb')},
data={'json': 'string'},
)
data = response.json()// `fileInput` is a file <input> element, e.g. document.querySelector('input[type=file]')
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('json', 'string');
const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/slurps', {
method: 'POST',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
body: formData,
});
const data = await response.json();{
"file": "<binary>",
"json": "string"
}{
"ambiguous_events": [
{}
],
"ambiguous_events_count": 0,
"api_url": "string",
"class": "slurp",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"import_errors": 0,
"import_errors_count": 0,
"import_warnings": 0,
"message": "string",
"modified_at": "2024-01-15T09:30:00Z",
"queued_job_position": 0,
"queued_slurp_position": 0,
"records_committed": 0,
"records_processed": 0,
"state": "mapping",
"suspicious_events": [
{}
],
"suspicious_events_count": 0,
"total_records": 0,
"web_url": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Get a slurp
Retrieve a single slurp. Pass show_events=true to include the ambiguous/suspicious events and import errors raised during import.
Parameters
vault_idintegerrequiredpathidintegerrequiredpathNumeric identifier of the slurp
show_eventsbooleanqueryInclude event and error details.
Response
The slurp
Missing or invalid API key
Slurp not found, or vault is unauthorized
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/slurps/{id}' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/slurps/{id}',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/slurps/{id}', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"ambiguous_events": [
{}
],
"ambiguous_events_count": 0,
"api_url": "string",
"class": "slurp",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"import_errors": 0,
"import_errors_count": 0,
"import_warnings": 0,
"message": "string",
"modified_at": "2024-01-15T09:30:00Z",
"queued_job_position": 0,
"queued_slurp_position": 0,
"records_committed": 0,
"records_processed": 0,
"state": "mapping",
"suspicious_events": [
{}
],
"suspicious_events_count": 0,
"total_records": 0,
"web_url": "string"
}{
"code": 401,
"error": "key not authorized for access to this vault"
}{
"code": 404,
"error": "Resource not found"
}Status
Vault operational status
Get vault status
Retrieve the operational status of the vault: currently running imports (slurps), recalculating protocols, and overall availability of the background processing services. Requires vault administrator access.
Parameters
vault_idintegerrequiredpathResponse
The current vault status
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/status' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/status',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/status', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();{
"any_executing_batch_move_job": true,
"any_locking_chemistry_slurps": true,
"application_status": {
"calculators_available": true,
"downtime_expected": {
"end": "2024-01-15T09:30:00Z",
"reason": "string",
"start": "2024-01-15T09:30:00Z"
},
"processors_available": true
},
"max_executing_account_slurps": 0,
"num_executing_account_slurps": 0,
"recalculating_protocols": [
{
"id": 0,
"name": "string",
"projects": [
{
"id": 0,
"name": "string"
}
]
}
],
"slurps": [
{
"chemistry_locking": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"owner": {
"email": "string",
"first_name": "string",
"id": 0,
"last_name": "string"
},
"project": {
"id": 0,
"name": "string"
},
"state": "queued_for_processing"
}
]
}{
"code": 401,
"error": "key not authorized for access to this vault"
}Users
Users management
List of users of a vault
Returns a list of CDD Vault members.
Noteworthy Tips:
- Only Vault Administrators can use this GET Users API call.
- This API call is useful to identify the Members' IDs of users for use in the GET ELN Entries API call.
Parameters
vault_idintegerrequiredpathinclude_projectsbooleanqueryIf true, each user’s Vault role and an array of project memberships are returned
Response
Users of the vault
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/users' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/users',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults/{vault_id}/users', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"first_name": "string",
"id": 0,
"last_name": "string"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Vaults
Vaults management
List of vaults
Return a list of accessible vaults
Response
List of vaults
Missing or invalid API key
Authorization
ApiKeyAuthapiKey in headercurl -X GET 'https://app.collaborativedrug.com/api/v1/vaults' \
-H 'X-CDD-Token: YOUR_API_KEY'import requests
response = requests.get(
'https://app.collaborativedrug.com/api/v1/vaults',
headers={'X-CDD-Token': 'YOUR_API_KEY'},
)
data = response.json()const response = await fetch('https://app.collaborativedrug.com/api/v1/vaults', {
method: 'GET',
headers: {
'X-CDD-Token': 'YOUR_API_KEY',
},
});
const data = await response.json();[
{
"id": 489978881,
"name": "McKerrow Vault"
}
]{
"code": 401,
"error": "key not authorized for access to this vault"
}Models
error_apikey
objectWhenever the given API key doesn't allow access to the given vault or the vault doesn't exist
codeinteger401errorstringkey not authorized for access to this vault{
"code": 401,
"error": "key not authorized for access to this vault"
}field
objectdata_type_namestringidintegernamestringoverwritablebooleanrequired_group_numberintegertypestringunique_valueboolean{
"data_type_name": "string",
"id": 0,
"name": "string",
"overwritable": true,
"required_group_number": 0,
"type": "string",
"unique_value": true
}fields
objectbatchArray<object>internalArray<object>moleculeArray<object>protocolArray<object>{
"batch": [
{
"data_type_name": "string",
"id": 0,
"name": "string",
"overwritable": true,
"required_group_number": 0,
"type": "string",
"unique_value": true
}
],
"internal": [
{
"data_type_name": "string",
"id": 0,
"name": "string",
"overwritable": true,
"required_group_number": 0,
"type": "string",
"unique_value": true
}
],
"molecule": [
{
"data_type_name": "string",
"id": 0,
"name": "string",
"overwritable": true,
"required_group_number": 0,
"type": "string",
"unique_value": true
}
],
"protocol": [
{
"data_type_name": "string",
"id": 0,
"name": "string",
"overwritable": true,
"required_group_number": 0,
"type": "string",
"unique_value": true
}
]
}pick_list_value_object
objectA pick list value belonging to a vault field definition.
created_atstring<date-time>requiredhiddenbooleanrequiredWhether the value is hidden from users.
idintegerrequiredmodified_atstring<date-time>requiredvaluestringrequired{
"created_at": "2024-01-15T09:30:00Z",
"hidden": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"value": "string"
}pick_list_value_write
objectAttributes for creating or updating a pick list value.
hiddenbooleanfalseWhether the value is hidden from users.
valuestringrequired{
"value": "blue",
"hidden": false
}error
objectA general error response containing an error message and HTTP status code
codeintegerHTTP status code
errorstringHuman-readable error message
{
"code": 404,
"error": "Resource not found"
}batch_move_job
objectbatchintegerrequiredThe ID of the batch to move
classstringrequiredThe class of the job
created_atstring<date-time>requiredThe creation time of the batch move job
fail_on_molecule_deletionbooleanrequiredWhether to fail if moving the batch would trigger the removal of the originating molecule
idintegerrequiredThe ID of the batch move job
modified_atstring<date-time>requiredThe modification time of the batch move job
moleculeintegerrequiredThe ID of the molecule to move the batch to
namestringThe new name given to the batch. Only present when a name was supplied at creation (allowed only for vaults without a registration system).
queued_job_positionintegerPosition of the job in the processing queue. Only present while the job is queued.
requested_byintegerrequiredThe ID of the user who requested the batch move job
statusstringrequestedqueuedprocessingsuccessfailurecanceledrequiredThe status of the batch move job. A job starts as requested and transitions through the queue until it reaches a terminal state (success, failure, or canceled).
status_messagestringHuman-readable description of the job's current status.
{
"batch": 0,
"class": "batch move job",
"created_at": "2024-01-15T09:30:00Z",
"fail_on_molecule_deletion": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"molecule": 0,
"name": "string",
"queued_job_position": 0,
"requested_by": 0,
"status": "requested",
"status_message": "string"
}batch_move_job_create
objectParameters for creating a batch move job, which moves a batch to a different molecule in the same vault.
batchintegerrequiredThe ID of the batch to move.
fail_on_molecule_deletionbooleantrueFail the job if moving the batch would trigger removal of the originating molecule. Defaults to true.
moleculeintegerrequiredThe ID of the molecule to move the batch to.
namestringA new name for the batch. Optional, and only allowed for vaults without a registration system.
{
"batch": 618771089,
"molecule": 1,
"fail_on_molecule_deletion": true
}batch_create
objectbatch_fieldsobjectOnly in registration vaults
Each vault has its own settings on the minimum information required to create a new Batch (for a Vault Administrator, see Settings > Vault > Batch Fields, to change which Batch fields are required).
{
moleculeobject | object | objectnamestringprojectsArray<integer | string>An array of project ids or names
salt_namestringA two-letter code or Salt vendor string as listed in the All Available Salts table (https://app.collaborativedrug.com/support/salts). The salt is determined automatically when the salt is included in the molecular structure.
solvent_of_crystallization_namestringName of the solvent of crystallization. List available at https://support.collaborativedrug.com/hc/en-us/articles/214359563-Salts-and-solvent-of-crystallization#solvents_of_crystallization
stoichiometryobjectOnly in registration vaults
{
"batch_fields": {},
"molecule": {
"cxsmiles": "string",
"duplicate_resolution": "first",
"id": 0,
"name": "string",
"registration_type": "CHEMICAL_STRUCTURE",
"smiles": "string",
"structure": "string"
},
"name": "Batch 1",
"projects": [
0
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}batch
objectbatch_fieldsobjectclassstringcreated_atstring<date>formula_weightnumberidintegermodified_atstring<date>moleculeobjectmolecule_batch_identifierstringnamestringownerstringprojectsArray<object>salt_namestringsolvent_of_crystallization_namestringstoichiometryobject{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15",
"molecule": {
"class": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "string",
"synonyms": [
"string"
]
},
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}date
stringNotes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
"2024-01-15"protocol_criterion
objectA single protocol-based filter, used in the protocol_criteria array to restrict results to molecules/batches that have (or lack) particular protocol readout data. Combine multiple criteria with the junction field.
protocol_idintegerId of the protocol to filter on (provide this or data_set_id).
data_set_idintegerId of the data set to filter on (provide this or protocol_id).
run_criterionstringanyrecentrun_daterun_idWhich runs to consider.
run_idintegerRun id to match (when run_criterion is run_id).
run_afterstring<date>Include runs on/after this date (when run_criterion is run_date).
run_beforestring<date>Include runs on/before this date (when run_criterion is run_date).
since_days_agointegerNumber of days back to include (when run_criterion is recent).
readout_definition_idintegerId of the readout definition to filter on.
operatorstring=!=<>≤≥containsdoes not containfromComparison operator applied to readout_value.
readout_valuestringValue to compare the readout against.
readout_value_maximumstringUpper bound of a range (when operator is from).
calculation_error_typestringFilter by calculation error type.
criterion_typestringdata set or protocolrun dateprotocol fieldThe kind of protocol criterion.
fieldstringProtocol field name (when criterion_type is protocol field).
querystringProtocol field search value (when criterion_type is protocol field).
protocol_condition_idsArray<integer>Restrict to these protocol condition ids.
negatedbooleanfalseIf true, exclude rather than include matches.
junctionstringANDORANDHow to combine this criterion with the previous one (ignored for the first criterion).
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "2024-01-15",
"run_before": "2024-01-15",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}structure_criterion
objectA structure-property filter object. Each property is filtered by an optional _minimum and/or _maximum bound. Properties from different registration types (chemical, nucleotide, amino acid) cannot be mixed in one request. Only a representative subset of the available properties is listed below; all follow the same <property>_minimum / <property>_maximum convention.
heavy_atom_count_minimumintegerheavy_atom_count_maximumintegercd_molweight_minimumnumbercd_molweight_maximumnumberexact_mass_minimumnumberexact_mass_maximumnumberlog_p_minimumnumberlog_p_maximumnumberlog_d_minimumnumberlog_d_maximumnumberlog_s_minimumnumberlog_s_maximumnumbernum_aromatic_rings_minimumintegernum_aromatic_rings_maximumintegernum_h_bond_acceptors_minimumintegernum_h_bond_acceptors_maximumintegernum_h_bond_donors_minimumintegernum_h_bond_donors_maximumintegernum_rotatable_bonds_minimumintegernum_rotatable_bonds_maximumintegernum_rule_of_5_violations_minimumintegernum_rule_of_5_violations_maximumintegertopological_polar_surface_area_minimumnumbertopological_polar_surface_area_maximumnumber{
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
}batch_query
objectasyncbooleanIf true, do an asynchronous export. Use for large data sets.
batch_fieldsArray<string>Array of Batch field names to include in the resulting JSON. Defaults to all available fields.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
collection_criteriaArray<object>Array of collection criteria objects. Filters results to only include batches whose molecules match the collection criteria, with support for AND/OR/XOR junctions and exclusion (NOT IN) logic.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
data_setsArray<integer>Array of public dataset ids. Defaults to all data sets.
fields_searchArray<object | object | object>Array of Batch field names & values. Used to filter Batches returned based on query values
include_original_structuresbooleanfalseIf true, include the original structure in the response. This is independent of no_structures.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
molecule_batch_identifierstringA Molecule-Batch ID used to query the Vault. Use this parameter to limit the number of Molecule UDF Fields to return
molecule_created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
molecule_created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
molecule_fieldsArray<string>Array of Molecule field names to include in the resulting JSON. Defaults to all available fields.
no_structuresbooleanfalseIf true, omit structure representations for a smaller and faster response.
offsetintegeronly_idsbooleanfalseIf true, only return the ids of the molecules in the batch.
only_molecule_idsbooleanfalseIf true, the full Batch details are still returned but the Molecule-level information is left out of the JSON results. (Only the IDs of the Molecules are still included.)
page_sizeinteger50Requested page size (maximum value 1000).
projectsArray<integer>Array of project ids. Defaults to all available projects.
protocol_criteriaArray<object>Array of protocol-based filters restricting results to batches with (or without) matching protocol readout data. Criteria are combined using each entry's junction.
structure_criterionobjectA structure-property filter object. Each property is filtered by an optional _minimum and/or _maximum bound. Properties from different registration types (chemical, nucleotide, amino acid) cannot be mixed in one request. Only a representative subset of the available properties is listed below; all follow the same <property>_minimum / <property>_maximum convention.
{
"async": true,
"batch_fields": [
"string"
],
"created_after": "2024-01-15",
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_before": "2024-01-15",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"modified_after": "2024-01-15",
"modified_before": "2024-01-15",
"molecule_batch_identifier": "string",
"molecule_created_after": "2024-01-15",
"molecule_created_before": "2024-01-15",
"molecule_fields": [
"string"
],
"no_structures": false,
"offset": 0,
"only_ids": false,
"only_molecule_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "2024-01-15",
"run_before": "2024-01-15",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
}
}batch_query_only_id
objectbatchesArray<integer>Comma separated list of batch ids. Cannot be used with other parameters
{
"batches": [
0
]
}collection_create
objectclassstringuser collectioncreated_atstring<date>modified_atstring<date>moleculesArray<integer>The list of molecules in the collection.
namestringownerstring{
"class": "user collection",
"created_at": "2024-01-15",
"modified_at": "2024-01-15",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
}collection
objectidintegerId is also valid during creation/update but must match the id in the URL
classstringuser collectioncreated_atstring<date>modified_atstring<date>moleculesArray<integer>The list of molecules in the collection.
namestringownerstring{
"id": 42,
"class": "user collection",
"created_at": "2024-01-15",
"modified_at": "2024-01-15",
"molecules": [
0
],
"name": "Rare compounds",
"owner": "Jacob Bloom"
}collections_query_common
objectasyncbooleanIf true, do an asynchronous export. Use for large data sets. You will get an export id that you can use with the async export function.
include_molecule_idsbooleanIf true, include the ids of the molecules in the collection.
offsetintegerThe offset of the first collection in the result set. The offset is 0-based. That is, the first collection in the result set has offset 0.
only_idsbooleanIf true, only return the ids of the matching collections.
page_sizeinteger50The maximum number of objects to return in this call. Default is 50, maximum is 1000. If the response exceeds the page_size, we strongly recommend using the async option instead of downloading multiple chunks. Note: any page_size parameter used in an API call that also uses the async=true parameter will be ignored. The async call will return all valid data once executed.
projectsArray<integer>Array of project ids. Defaults to all available projects.
{
"async": true,
"include_molecule_ids": true,
"offset": 0,
"only_ids": true,
"page_size": 50,
"projects": [
0
]
}collections_query
objectcollectionsArray<integer>The list of collections id to return
asyncbooleanIf true, do an asynchronous export. Use for large data sets. You will get an export id that you can use with the async export function.
include_molecule_idsbooleanIf true, include the ids of the molecules in the collection.
offsetintegerThe offset of the first collection in the result set. The offset is 0-based. That is, the first collection in the result set has offset 0.
only_idsbooleanIf true, only return the ids of the matching collections.
page_sizeinteger50The maximum number of objects to return in this call. Default is 50, maximum is 1000. If the response exceeds the page_size, we strongly recommend using the async option instead of downloading multiple chunks. Note: any page_size parameter used in an API call that also uses the async=true parameter will be ignored. The async call will return all valid data once executed.
projectsArray<integer>Array of project ids. Defaults to all available projects.
asyncbooleanIf true, do an asynchronous export. Use for large data sets. You will get an export id that you can use with the async export function.
include_molecule_idsbooleanIf true, include the ids of the molecules in the collection.
offsetintegerThe offset of the first collection in the result set. The offset is 0-based. That is, the first collection in the result set has offset 0.
only_idsbooleanIf true, only return the ids of the matching collections.
page_sizeinteger50The maximum number of objects to return in this call. Default is 50, maximum is 1000. If the response exceeds the page_size, we strongly recommend using the async option instead of downloading multiple chunks. Note: any page_size parameter used in an API call that also uses the async=true parameter will be ignored. The async call will return all valid data once executed.
projectsArray<integer>Array of project ids. Defaults to all available projects.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
typestringuser_collectionvault_collectionThe type of collection user collections are private, vault collections are shared with project members.
{
"collections": [
0
],
"async": true,
"include_molecule_ids": true,
"offset": 0,
"only_ids": true,
"page_size": 50,
"projects": [
0
]
}collection_update
objectmoleculesArray<integer>The list of molecules to add to the collection. Note that you cannot remove molecules from a collection. You have to recreate the collection without the molecule.
{
"molecules": [
0
]
}control_layout
objectA control layout describes which wells of a protocol or run are controls (positive, negative, or a reference molecule).
classstringrequiredcontrol_wellsArray<object>requiredThe control wells defined by this layout.
created_atstring<date-time>idintegerrequiredmodified_atstring<date-time>plate_idintegerId of the plate this layout applies to, when plate-specific.
protocolintegerId of the protocol the layout belongs to (always present for run-scoped layouts as the run's protocol).
runintegerId of the run the layout belongs to, when run-scoped.
sizeintegerrequiredNumber of wells in the layout (plate size).
{
"class": "control layout",
"control_wells": [
{
"col": 0,
"control_state": "+",
"row": 0
}
],
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"plate_id": 0,
"protocol": 0,
"run": 0,
"size": 0
}control_layout_create
objectAttributes for creating a control layout. Specify the target with exactly one of protocol or run, and the layout dimensions with exactly one of size or plate.
{
"protocol": 321,
"size": 96,
"control_wells": [
{
"row": 0,
"col": 0,
"control_state": "+"
},
{
"pos": "H12",
"control_state": "-"
}
]
}data_set
objectidintegerThe id of the data_set
namestringThe name of the data_set
{
"id": 0,
"name": "string"
}eln_create
objectAttributes used to create or update an ELN entry. The same body is accepted by POST /eln/entries (create) and PUT /eln/entries/{id} (update); on update, only the supplied fields are changed.
append_to_bodyArray<object | object | object>Ordered list of content nodes appended to the body of the entry. Each node has a type; the supported types are:
text— a paragraph of text. Providetext(defaults to an empty string).link— a hyperlink. Provideurl(required; must be a valid http/https/ftp/mailto URL) and an optionallabelfor the display text. Use this to link to a batch, molecule, protocol, or any external resource.file— an attachment that was already uploaded. Providefile, the id of an accessible uploaded file. (Files can also be attached to an existing entry with thePOST /filesAPI.)
eln_fieldsobjectThe ELN fields of the entry
projectinteger | stringtitlestringThe title of the entry
{
"title": "Synthesis of compound 42",
"project": 7,
"eln_fields": {
"Reaction type": "Suzuki coupling"
},
"append_to_body": [
{
"type": "text",
"text": "Procedure followed the standard protocol."
},
{
"type": "link",
"url": "https://app.collaborativedrug.com/vaults/1/molecules/12345",
"label": "Starting material CDD-12345"
},
{
"type": "file",
"file": 98765
}
]
}eln_entry_status
objectcreated_atstringTimestamp in ISO-8601 UTC
idintegerThe id of the entry
statusstringnewopensubmittedfinalizedupdated_atstringTimestamp in ISO-8601 UTC
{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 42,
"status": "new",
"updated_at": "2024-01-02T03:04:05.000Z"
}eln_entries_query
objectasyncbooleanfalsePerform an asynchronous export If true, do an asynchronous export (see Async Export) Use if you wish to retrieve a zip file containing exports of the actual ELN entries along with any files attached within the ELN entries. Note: any page_size parameter used in the call call that also uses the async=true parameter will be ignored. The call will return all matching entries as a zip file with their content.
authorArray<string>List of ELN author IDs. We do not match by names, you need to use the users call.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
eln_entriesArray<string>List of ELN entry IDs
finalized_date_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
finalized_date_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
offsetinteger0Index of the first object actually returned
only_idsbooleanfalseReturn only ELN Entry IDs
only_summarybooleanfalseReturn only a csv summary file, async is still recommended
page_sizeinteger50Maximum number of objects to return in this call This parameter is ignored is async is true.
projectsArray<string>List of project IDs
statusstringopensubmittedfinalizedStatus of ELN entries (open, submitted, finalized)
submitted_date_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
submitted_date_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
{
"async": false,
"author": [
"string"
],
"created_after": "2024-01-15",
"created_before": "2024-01-15",
"eln_entries": [
"string"
],
"finalized_date_after": "2024-01-15",
"finalized_date_before": "2024-01-15",
"modified_after": "2024-01-15",
"modified_before": "2024-01-15",
"offset": 0,
"only_ids": false,
"only_summary": false,
"page_size": 50,
"projects": [
"string"
],
"status": "open",
"submitted_date_after": "2024-01-15",
"submitted_date_before": "2024-01-15"
}eln_status_action
objectA witnessing/status action to perform on an ELN entry. The set of valid status_action values depends on whether ELN witnessing is enabled for the vault:
- Witnessing enabled:
submit(requireswitness),approve,reject(requiresreason),cancel,reopen(requiresreason),discard. - Witnessing disabled:
finalize,reopen(requiresreason),discard.
reasonstringReason for the action (required for reject and reopen).
status_actionstringsubmitapproverejectcancelreopenfinalizediscardrequiredThe action to perform.
witnessintegerId of the witnessing user (required for submit).
{
"status_action": "submit",
"witness": 6021
}export
objectcreated_atstringTimestamp in ISO-8601 UTC
idintegermodified_atstringTimestamp in ISO-8601 UTC
queued_job_positionintegerPosition of the export's job in the processing queue. Only present while the export is in the new state.
statusstringnewstartedfinisheddownloadedfailedcanceledThe 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.
{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"queued_job_position": 0,
"status": "new"
}exports
array[
{
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"queued_job_position": 0,
"status": "new"
}
]file
objectcharacter_setstringclassstringcontentsstringBase64 encoded contents of the file
idintegermime_typeobjectnamestring{
"character_set": "US-ASCII",
"class": "uploaded file",
"contents": "VGhpcyBpcyBhIGZpbGUK",
"id": 1069448031,
"mime_type": {
"hash": -1147906696977776400,
"string": "text/plain",
"symbol": "text",
"synonyms": [
"string"
]
},
"name": "tmp.txt"
}import_parser
objectAn import parser (plate block template) describing how a structured data file should be parsed during import.
created_atstring<date-time>requiredidintegerrequiredmodified_atstring<date-time>requirednamestringrequiredName of the import parser.
ownerstringrequiredFull name of the user who owns the import parser.
template_jsonobjectThe parser configuration (arbitrary JSON object). Only returned by the show endpoint, not in the index listing.
{
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"template_json": {}
}inventory_location
objectclassstringinventory locationcreated_atstring<date-time>filled_position_countintegeridintegermodified_atstring<date-time>num_columnsintegernum_rowsintegerparent_idinteger | nullposition_limitintegervaluestring{
"class": "inventory location",
"created_at": "2023-10-30T18:25:41.771Z",
"filled_position_count": 0,
"id": 42,
"modified_at": "2023-10-30T18:25:41.771Z",
"num_columns": 0,
"num_rows": 0,
"parent_id": 130,
"position_limit": 0,
"value": "Gotham"
}inventory_sample_object
objectAn inventory sample: a tracked physical amount of a batch, with its current amount, location, custom fields, and event history.
batchintegerrequiredId of the batch this sample is an inventory of.
batch_namestringrequiredName of the associated batch.
classstringrequiredcreated_atstring<date-time>requiredcreated_by_user_full_namestringFull name of the user who created the sample.
current_amountnumberrequiredCurrent amount remaining for the sample.
depletedbooleanrequiredWhether the sample has been depleted.
fieldsobjectCustom inventory sample field values, keyed by field name.
idintegerrequiredinventory_eventsArray<object>The event history (additions, withdrawals, etc.) for the sample.
locationstringHuman-readable display path of the sample's location.
modified_atstring<date-time>requirednamestringName (identifier) of the sample.
unitsstringrequiredUnits the sample amount is expressed in.
updated_by_user_full_namestringFull name of the user who last modified the sample.
{
"batch": 0,
"batch_name": "string",
"class": "inventory sample",
"created_at": "2024-01-15T09:30:00Z",
"created_by_user_full_name": "string",
"current_amount": 0,
"depleted": true,
"fields": {},
"id": 0,
"inventory_events": [
{
"class": "inventory event",
"created_at": "2024-01-15T09:30:00Z",
"fields": {},
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"updated_by_user_full_name": "string"
}
],
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"units": "string",
"updated_by_user_full_name": "string"
}inventory_sample_create
objectAttributes for creating an inventory sample.
batch_idintegerrequiredId of the batch this sample is an inventory of.
fieldsobjectCustom inventory sample field values, keyed by field name.
inventory_eventsArray<object>Initial inventory event(s) for the sample. At most one event may be supplied per request.
unitsstringgkgmgµgngmLLµLMmMµMnMmolmmolµmolnmolpmolcountrequiredUnits the sample amount is expressed in. One of: g, kg, mg, µg, ng, mL, L, µL, M, mM, µM, nM, mol, mmol, µmol, nmol, pmol, count.
{
"batch_id": 456,
"units": "mg",
"fields": {
"Supplier": "Acme Chemicals"
},
"inventory_events": [
{
"fields": {
"Credit": 100
}
}
]
}inventory_sample_update
objectAttributes for updating an inventory sample. Only supplied fields are changed.
depletedbooleanMark the sample as depleted (true) or clear the depleted flag (false).
fieldsobjectCustom inventory sample field values, keyed by field name.
inventory_eventsArray<object>An inventory event to add or update. At most one event may be supplied per request. Include the event id to update an existing event; omit it to create a new one.
unitsstringgkgmgµgngmLLµLMmMµMnMmolmmolµmolnmolpmolcountUnits the sample amount is expressed in.
{
"depleted": false,
"fields": {
"Supplier": "New Supplier Inc"
},
"inventory_events": [
{
"id": 54321,
"fields": {
"Debit": 10
}
}
]
}mapping_template_simple
objectcreated_atstring<date-time>idintegermodified_atstring<date-time>namestringownerstring{
"created_at": "2021-12-23T23:59:22.000Z",
"id": 22704,
"modified_at": "2021-12-23T23:59:22.000Z",
"name": "Protac Registration",
"owner": "Charlie Weatherall"
}mapping_template_details
objectcreated_atstring<date-time>fileobjectheader_mappingsArray<object>idintegermodified_atstring<date-time>namestringownerstring{
"created_at": "2021-12-23T23:59:22.000Z",
"file": {
"file_name": "string",
"value": 0
},
"header_mappings": [
{
"definition": {
"data_type_name": "string",
"id": 0,
"name": "string",
"pick_list_values": [
"string"
],
"protocol_name": "string",
"type": "string"
},
"header": {
"id": 0,
"name": "string"
},
"run_grouping": 0
}
],
"id": 22704,
"modified_at": "2021-12-23T23:59:22.000Z",
"name": "Protac Registration",
"owner": "Charlie Weatherall"
}molecule_create
objectAttributes for creating a molecule. Creating molecules directly is only allowed in vaults that are NOT using a registration system; in registration vaults, register molecules by creating batches instead.
collectionsArray<integer | string>Collections to add the molecule to (ids or names).
duplicate_resolutionstringnewpromptHow to handle a structure that duplicates an existing molecule. new registers a new molecule; prompt fails with the duplicate details so the caller can decide. Must match tautomer_resolution if both are given.
molecule_fieldsobjectCustom molecule field values, keyed by field name. The legacy alias udfs is also accepted.
namestringrequiredName of the molecule.
projectsArray<integer | string>Projects the molecule belongs to (ids or names).
registration_forminteger | stringThe registration form to use (id or name). Defaults to the vault default.
registration_typestringThe kind of entity being registered (e.g. CHEMICAL_STRUCTURE).
structurestringThe chemical structure, as SMILES or a molfile. For amino-acid, nucleotide, or mixture molecules use the corresponding structure representation accepted for that registration type.
synonymsArray<string>Alternative names for the molecule.
tautomer_resolutionstringnewpromptHow to handle a structure that is a tautomer of an existing molecule.
{
"name": "My compound",
"structure": "CC(=O)Oc1ccccc1C(=O)O",
"synonyms": [
"Aspirin"
],
"projects": [
12
],
"molecule_fields": {
"Solubility": "High"
}
}molecule
objectbatchesArray<object>Array of batches belonging to this molecule
classstringcreated_atstring<date-time>idintegermodified_atstring<date-time>molecule_fieldsobjectnamestringownerstringprojectsArray<object>registration_typestringchemical_structureamino_acidnucleotidemixtureotherThe registration type of the molecule
smilesstringSMILES representation of the molecule structure
synonymsArray<string>{
"batches": [
{
"batch_fields": {},
"class": "batch",
"created_at": "2024-01-15T09:30:00Z",
"formula_weight": 0,
"id": 42,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_batch_identifier": "DEMO-1000211-001",
"name": "Batch 1",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"salt_name": "string",
"solvent_of_crystallization_name": "string",
"stoichiometry": {
"core_count": 0,
"salt_count": 0,
"solvent_of_crystallization_count": 0
}
}
],
"class": "molecule",
"created_at": "2024-01-15T09:30:00Z",
"id": 1000211,
"modified_at": "2024-01-15T09:30:00Z",
"molecule_fields": {},
"name": "Aspirin",
"owner": "Charlie Weatherall",
"projects": [
{
"id": 1,
"name": "Project 1"
}
],
"registration_type": "chemical_structure",
"smiles": "CC(=O)OC1=CC=CC=C1C(=O)O",
"synonyms": [
"string"
]
}molecule_query
objectasyncbooleanIf true, do an asynchronous export. Use for large data sets.
batch_created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
batch_created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
batch_field_after_datestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
batch_field_after_namestringName of the batch date field to filter on (used with batch_field_after_date).
batch_field_before_datestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
batch_field_before_namestringName of the batch date field to filter on (used with batch_field_before_date).
batch_fieldsArray<string>Array of Batch field names to include in the resulting JSON. Defaults to all available fields.
collection_criteriaArray<object>Array of collection criteria objects. Filters results based on collection membership with support for AND/OR/XOR junctions and exclusion (NOT IN) logic.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
data_setsArray<integer>Array of public dataset ids. Defaults to all data sets.
fields_searchArray<object | object | object>Array of Molecule field names & values. Used to filter Molecules returned based on query values
include_original_structuresbooleanfalseIf true, include the original structure in the response. This is independent of no_structures.
inchikeystringFilter molecules by InChIKey.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
molecule_fieldsArray<string>Array of Molecule field names to include in the resulting JSON. Defaults to all available fields.
namesArray<string>Array of molecule names or synonyms to search for.
no_structuresbooleanfalseIf true, omit structure representations for a smaller and faster response.
offsetintegeronly_batch_idsbooleanfalseIf true, the full Molecule details are still returned but the Batch-level information is left out of the JSON results. (Only the IDs of the Batches are still included.)
only_idsbooleanfalseIf true, only return the ids of the molecules.
page_sizeinteger50Requested page size (maximum value 1000).
projectsArray<integer>Array of project ids. Defaults to all available projects.
protocol_criteriaArray<object>Array of protocol-based filters restricting results to molecules with (or without) matching protocol readout data. Criteria are combined using each entry's junction.
structurestringA SMILES or MOL string to search for.
structure_criterionobjectA structure-property filter object. Each property is filtered by an optional _minimum and/or _maximum bound. Properties from different registration types (chemical, nucleotide, amino acid) cannot be mixed in one request. Only a representative subset of the available properties is listed below; all follow the same <property>_minimum / <property>_maximum convention.
structure_search_typestringexactsubstructuresimilarityexact_with_stereoThe type of structure search to perform. Options are 'exact', 'substructure', 'similarity', or 'exact_with_stereo'.
structure_similarity_thresholdnumber[0, 1]Similarity threshold for similarity searches (0 to 1). Only used when structure_search_type is 'similarity'.
{
"async": true,
"batch_created_after": "2024-01-15",
"batch_created_before": "2024-01-15",
"batch_field_after_date": "2024-01-15",
"batch_field_after_name": "string",
"batch_field_before_date": "2024-01-15",
"batch_field_before_name": "string",
"batch_fields": [
"string"
],
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": false
}
],
"created_after": "2024-01-15",
"created_before": "2024-01-15",
"data_sets": [
0
],
"fields_search": [
{
"name": "string",
"text_value": "string"
}
],
"include_original_structures": false,
"inchikey": "string",
"modified_after": "2024-01-15",
"modified_before": "2024-01-15",
"molecule_fields": [
"string"
],
"names": [
"string"
],
"no_structures": false,
"offset": 0,
"only_batch_ids": false,
"only_ids": false,
"page_size": 50,
"projects": [
0
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "2024-01-15",
"run_before": "2024-01-15",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"structure": "string",
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
},
"structure_search_type": "exact",
"structure_similarity_threshold": 0
}molecule_query_only_id
objectmoleculesArray<integer>Comma separated list of molecule ids. Cannot be used with other parameters
{
"molecules": [
0
]
}molecule_update
objectAttributes for updating a molecule. Only the supplied fields are changed. Array fields (synonyms, projects, collections) replace the existing values.
collectionsArray<integer | string>Collections the molecule belongs to (ids or names). Replaces existing.
molecule_fieldsobjectCustom molecule field values, keyed by field name. The legacy alias udfs is also accepted.
namestringName of the molecule.
projectsArray<integer | string>Projects the molecule belongs to (ids or names). Replaces existing.
structurestringUpdated chemical structure, as SMILES or a molfile.
synonymsArray<string>Alternative names for the molecule. Replaces existing.
{
"name": "Renamed compound",
"synonyms": [
"Aspirin",
"2-Acetoxybenzoic acid"
],
"molecule_fields": {
"Solubility": "Medium"
}
}plate_object
objectA plate of wells, optionally associated with batches/samples and run statistics.
classstringrequiredconcentrationnumberconcentration_unit_labelstringUnits for concentration (e.g. "M").
created_atstring<date-time>idintegerrequiredinventory_location_idintegerlocationstringFree-text location of the plate.
modified_atstring<date-time>namestringrequiredprojectsArray<object>Projects the plate belongs to.
statisticsArray<object>Per-run plate statistics (Z'-factor, control means, etc.).
volumenumbervolume_unit_labelstringUnits for volume (e.g. "µL").
wellsArray<object>The wells of the plate and their batch/sample assignments.
{
"class": "plate",
"concentration": 0,
"concentration_unit_label": "string",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"inventory_location_id": 0,
"location": "string",
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"projects": [
{
"id": 0,
"name": "string"
}
],
"statistics": [
{}
],
"volume": 0,
"volume_unit_label": "string",
"wells": [
{
"batch": 0,
"col": 0,
"row": 0,
"sample": 0
}
]
}plate_create_update
objectAttributes for creating or updating a plate. On create, name and projects are required. Supplying wells replaces the plate's wells.
concentrationnumberconcentration_unit_labelstringinventory_locationintegerId of the inventory location for the plate.
locationstringnamestringprojectsArray<integer>Project ids the plate belongs to.
volumenumbervolume_unit_labelstringwellsArray<object>Wells to populate. Each well identifies its position by row+col or pos.
{
"name": "Plate 001",
"projects": [
12
],
"location": "Freezer A",
"wells": [
{
"row": 0,
"col": 0,
"batch": 456
}
]
}project_object
objectA project in the vault. The list (index) and create responses contain only id and name; the show and update responses additionally include description and members.
descriptionstringProject description (present in show/update responses).
idintegerrequiredmembersArray<object>Project members and their permissions (present in show/update responses).
namestringrequired{
"description": "string",
"id": 0,
"members": [
{
"can_edit_data": true,
"can_manage_project": true,
"id": 0
}
],
"name": "string"
}project_create_update_public
objectAttributes for creating or updating a project.
descriptionstringProject description.
membersArray<object>Project members. On update this replaces the existing membership list. If omitted on create, the current user is added as a member.
namestringrequiredProject name (must be unique within the vault).
{
"name": "My project",
"description": "Compounds from the 2026 screening campaign",
"members": [
{
"user_id": 6021,
"can_manage_project": true,
"can_edit_data": true
}
]
}protocol_object
objectA protocol (assay definition) and its readout definitions, calculations, and runs.
calculationsArray<object>Calculation definitions on the protocol.
categorystringValue of the Category protocol field, echoed at top level when present.
classstringrequiredcreated_atstring<date-time>data_setintegerId of the data set the protocol belongs to.
descriptionstringValue of the Description protocol field, echoed at top level when present.
hit_definitionsArray<object>idintegerrequiredmodified_atstring<date-time>namestringrequiredontology_annotationsArray<object>ownerstringFull name of the protocol owner.
projectsArray<integer>Project ids the protocol belongs to.
protocol_fieldsobjectCustom protocol field values, keyed by field name.
protocol_statisticsArray<object>readout_definitionsArray<object>The readout definitions of the protocol.
runsArray<object>Runs of the protocol. Omitted when the request passes no_runs=true.
{
"calculations": [
{}
],
"category": "string",
"class": "protocol",
"created_at": "2024-01-15T09:30:00Z",
"data_set": 0,
"description": "string",
"hit_definitions": [
{}
],
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"ontology_annotations": [
{}
],
"owner": "string",
"projects": [
0
],
"protocol_fields": {},
"protocol_statistics": [
{}
],
"readout_definitions": [
{}
],
"runs": [
{}
]
}protocol_update
objectAttributes for updating a protocol's definition (not its readout definitions). Only the supplied fields are changed.
namestringprojectsArray<integer>Project ids the protocol belongs to (replaces the existing set).
protocol_fieldsobjectCustom protocol field values, keyed by field name.
{
"name": "My Inhibition Screen",
"projects": [
12
],
"protocol_fields": {
"Category": "Biochemical"
}
}readout_row_query
objectasyncbooleanIf true, do an asynchronous export. Use for large data sets.
batchesArray<integer>Array of batch ids. Defaults to all batches.
created_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
created_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
data_setsArray<integer>Array of public dataset ids. Defaults to all data sets.
include_control_statebooleanfalseIf true, include the control state of each readout.
modified_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
modified_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
moleculesArray<integer>Array of molecule ids. Defaults to all molecules.
offsetintegeronly_idsbooleanfalseIf true, only return the ids of the readout rows.
page_sizeinteger50Requested page size (maximum value 1000).
platesArray<integer>Array of plate ids. Defaults to all plates.
projectsArray<integer>Array of project ids. Defaults to all available projects.
protocolsArray<integer>Array of protocol ids. Defaults to all protocols.
runsArray<integer>Array of run ids. Defaults to all runs.
runs_afterstring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
runs_beforestring<date>Notes on Date/Time Formats The CDD Vault API accepts ISO 8601 date/time formats in any API call that allows a date-type parameter. For example, the full date and timestamp may be used in GET calls that support a date parameter. You may still simply provide a date-only parameter like "created_after=2020-05-20". You may also specify a date + timestamp, like "created_after= 2020-05-20 14:53:12", to indicate "20 May 2020 14:53:12 PDT" (PDT is based on the user's time zone setting). The timestamp portion can also include a UTC (Coordinated Universal Time) offset, like "created_after= 2020-05-27T14:48:40-07:00" which indicates that the time specified is -7 hours from the UTC time.
typeArray<string>detail_rowbatch_run_aggregate_rowbatch_protocol_aggregate_rowmolecule_protocol_aggregate_rowFilter to specific readout row types. Defaults to all types.
{
"async": true,
"batches": [
0
],
"created_after": "2024-01-15",
"created_before": "2024-01-15",
"data_sets": [
0
],
"include_control_state": false,
"modified_after": "2024-01-15",
"modified_before": "2024-01-15",
"molecules": [
0
],
"offset": 0,
"only_ids": false,
"page_size": 50,
"plates": [
0
],
"projects": [
0
],
"protocols": [
0
],
"runs": [
0
],
"runs_after": "2024-01-15",
"runs_before": "2024-01-15",
"type": [
"detail_row"
]
}readout_row
objectbatchintegerID of the batch this readout row belongs to
classstringcreated_atstringTimestamp in ISO-8601 UTC
idintegermodified_atstringTimestamp in ISO-8601 UTC
moleculeintegerID of the molecule this readout row belongs to
protocolintegerID of the protocol this readout row belongs to
readoutsobjectReadout values keyed by readout definition ID
runintegerID of the run this readout row belongs to
typestringdetail_rowbatch_run_aggregate_rowbatch_protocol_aggregate_rowmolecule_protocol_aggregate_rowwellstringWell position for plate-based data
{
"batch": 1,
"class": "readout row",
"created_at": "2024-01-02T03:04:05.000Z",
"id": 1,
"modified_at": "2024-01-02T03:04:05.000Z",
"molecule": 1,
"protocol": 1,
"readouts": {},
"run": 1,
"type": "detail_row",
"well": "string"
}registration_form
objectA registration form configured in the vault.
allow_new_moleculesbooleanrequiredWhether the form permits registering new molecules.
classstringrequiredcreated_atstring<date-time>requiredidintegerrequiredmodified_atstring<date-time>requirednamestringrequiredregistration_systemobjectThe registration system the form belongs to. Present only when the form is associated with a registration system.
registration_typestringrequiredThe kind of entity this form registers.
{
"allow_new_molecules": true,
"class": "registration form",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"name": "string",
"registration_system": {
"class": "registration system",
"id": 0
},
"registration_type": "string"
}public_registration_system
objectA registration system defined in the vault.
idintegerrequiredprefixstringrequiredThe registration id prefix used by this system.
{
"id": 0,
"prefix": "CDD"
}run_object
objectA run of a protocol (a set of readout data collected on a date).
attached_filesArray<object>Files attached to the run.
classstringrequiredconditionsstringValue of the Conditions run field, echoed at top level for convenience.
created_atstring<date-time>eln_entriesArray<object>ELN entries associated with the run.
idintegerrequiredmodified_atstring<date-time>ontology_annotationsArray<object>personstringValue of the Person run field, echoed at top level for convenience.
placestringValue of the Lab run field, echoed at top level for convenience.
plate_statisticsArray<object>Per-plate statistics for the run. Only included in the show response.
projectobjectrequiredprotocolintegerrequiredId of the protocol the run belongs to.
run_datestring<date>requiredrun_fieldsobjectCustom run field values, keyed by field name.
source_filesArray<object>Source files the run was imported from.
{
"attached_files": [
{}
],
"class": "run",
"conditions": "string",
"created_at": "2024-01-15T09:30:00Z",
"eln_entries": [
{}
],
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"ontology_annotations": [
{}
],
"person": "string",
"place": "string",
"plate_statistics": [
{}
],
"project": {
"id": 0,
"name": "string"
},
"protocol": 0,
"run_date": "2024-01-15",
"run_fields": {},
"source_files": [
{}
]
}run_update
objectAttributes for updating a run. Only the supplied fields are changed.
conditionsstringValue for the Conditions run field (alternative to run_fields).
personstringValue for the Person run field (alternative to run_fields).
placestringValue for the Lab run field (alternative to run_fields).
project_idintegerMove the run to this project (requires write access to the target project).
run_datestring<date>run_fieldsobjectCustom run field values, keyed by field name.
{
"run_date": "2026-01-15T00:00:00.000Z",
"run_fields": {
"Person": "Jane Smith"
}
}saved_search_session
objectA saved search, including its full search criteria and display settings. Fields whose value is empty are omitted from the response.
display_criteriaobjectDisplay/column settings saved with the search.
executed_byArray<string>Names of users who have run the search.
idintegerrequiredThe saved search id.
last_api_run_atstring<date-time>last_ui_run_atstring<date-time>namestringrequiredownerstringThe search owner's name.
projectsArray<object>Projects the search is scoped to.
saved_search_session_idintegersearch_criteriaobjectrequiredThe full criteria that define the search.
visualization_session_idinteger{
"display_criteria": {
"custom_displayed_header_ids": [],
"displayed_header_ids": [],
"header_group_order": [],
"image_size": "string",
"max_column_width": 0,
"plot_scale_type": "string",
"row_detail_level": "string",
"show_all_protocol_data": true,
"show_dose_response_legend": true,
"show_non_matching_readouts": true
},
"executed_by": [
"string"
],
"id": 0,
"last_api_run_at": "2024-01-15T09:30:00Z",
"last_ui_run_at": "2024-01-15T09:30:00Z",
"name": "string",
"owner": "string",
"projects": [
{}
],
"saved_search_session_id": 0,
"search_criteria": {
"collection_criteria": [
{
"collection_id": 0,
"junction": "AND",
"not_in": true
}
],
"keyword_field": "string",
"keywords": "string",
"molecule_criteria": [
{}
],
"protocol_criteria": [
{
"protocol_id": 0,
"data_set_id": 0,
"run_criterion": "any",
"run_id": 0,
"run_after": "2024-01-15",
"run_before": "2024-01-15",
"since_days_ago": 0,
"readout_definition_id": 0,
"operator": "=",
"readout_value": "string",
"readout_value_maximum": "string",
"calculation_error_type": "string",
"criterion_type": "data set or protocol",
"field": "string",
"query": "string",
"protocol_condition_ids": [
0
],
"negated": false,
"junction": "AND"
}
],
"sort_direction": "ASC",
"structure": "string",
"structure_criterion": {
"heavy_atom_count_minimum": 0,
"heavy_atom_count_maximum": 0,
"cd_molweight_minimum": 0,
"cd_molweight_maximum": 0,
"exact_mass_minimum": 0,
"exact_mass_maximum": 0,
"log_p_minimum": 0,
"log_p_maximum": 0,
"log_d_minimum": 0,
"log_d_maximum": 0,
"log_s_minimum": 0,
"log_s_maximum": 0,
"num_aromatic_rings_minimum": 0,
"num_aromatic_rings_maximum": 0,
"num_h_bond_acceptors_minimum": 0,
"num_h_bond_acceptors_maximum": 0,
"num_h_bond_donors_minimum": 0,
"num_h_bond_donors_maximum": 0,
"num_rotatable_bonds_minimum": 0,
"num_rotatable_bonds_maximum": 0,
"num_rule_of_5_violations_minimum": 0,
"num_rule_of_5_violations_maximum": 0,
"topological_polar_surface_area_minimum": 0,
"topological_polar_surface_area_maximum": 0
},
"structure_registration_type": "structure",
"structure_search_type": "string",
"structure_similarity_threshold": 0
},
"visualization_session_id": 0
}slurp
objectA slurp is an asynchronous data import/processing job. After creation a slurp moves through processing and committing states until its data is committed to the vault.
ambiguous_eventsArray<object>Ambiguous events raised during import. Only present when show_events=true.
ambiguous_events_countintegerNumber of ambiguous events. Only present when show_events=true.
api_urlstringrequiredCanonical API URL of this slurp.
classstringrequiredcreated_atstring<date-time>requiredidintegerrequiredimport_errorsinteger | Array<object>When show_events=true, the array of import error events; otherwise the count of import errors.
import_errors_countintegerNumber of import errors. Only present when show_events=true.
import_warningsintegerCount of import warnings. Present when show_events is not requested.
messagestringPresent when the slurp has unresolved import errors or warnings that must be resolved in the web application.
modified_atstring<date-time>requiredqueued_job_positionintegerPosition of the slurp's job in the queue. Present only while queued.
queued_slurp_positionintegerPosition of the slurp among queued slurps. Present only while queued.
records_committednumberNumber of records committed so far.
records_processednumberNumber of records processed so far.
statestringmappingqueued_for_processingprocessingprocessedqueued_for_committingcommittingcommittedcanceledrejectedinvalidrequiredCurrent state of the slurp.
suspicious_eventsArray<object>Suspicious events raised during import. Only present when show_events=true.
suspicious_events_countintegerNumber of suspicious events. Only present when show_events=true.
total_recordsnumberTotal number of records in the imported file.
web_urlstringWeb application URL for resolving import errors/warnings. Accompanies message when present.
{
"ambiguous_events": [
{}
],
"ambiguous_events_count": 0,
"api_url": "string",
"class": "slurp",
"created_at": "2024-01-15T09:30:00Z",
"id": 0,
"import_errors": 0,
"import_errors_count": 0,
"import_warnings": 0,
"message": "string",
"modified_at": "2024-01-15T09:30:00Z",
"queued_job_position": 0,
"queued_slurp_position": 0,
"records_committed": 0,
"records_processed": 0,
"state": "mapping",
"suspicious_events": [
{}
],
"suspicious_events_count": 0,
"total_records": 0,
"web_url": "string"
}vault_status
objectOperational status of the vault: running imports (slurps), recalculating protocols, and overall application availability. Requires vault administrator access.
any_executing_batch_move_jobbooleanrequiredWhether any batch move job is currently executing.
any_locking_chemistry_slurpsbooleanrequiredWhether any running slurp is currently holding the chemistry lock (which blocks chemistry recalculation).
application_statusobjectrequiredOverall availability of the background processing services.
max_executing_account_slurpsintegerrequiredMaximum number of slurps the account may run concurrently.
num_executing_account_slurpsintegerrequiredNumber of slurps currently executing across the account.
recalculating_protocolsArray<object>requiredProtocols whose data is currently being recalculated.
slurpsArray<object>requiredSlurps (imports) that are currently active in the vault.
{
"any_executing_batch_move_job": true,
"any_locking_chemistry_slurps": true,
"application_status": {
"calculators_available": true,
"downtime_expected": {
"end": "2024-01-15T09:30:00Z",
"reason": "string",
"start": "2024-01-15T09:30:00Z"
},
"processors_available": true
},
"max_executing_account_slurps": 0,
"num_executing_account_slurps": 0,
"recalculating_protocols": [
{
"id": 0,
"name": "string",
"projects": [
{
"id": 0,
"name": "string"
}
]
}
],
"slurps": [
{
"chemistry_locking": true,
"id": 0,
"modified_at": "2024-01-15T09:30:00Z",
"owner": {
"email": "string",
"first_name": "string",
"id": 0,
"last_name": "string"
},
"project": {
"id": 0,
"name": "string"
},
"state": "queued_for_processing"
}
]
}fit_parameter_constraint
objectA constraint for a fit parameter
modifierstring | nullThe type of constraint. Valid values are: "=" (fixed), ">", ">=", "<", "<=", "from" (range), "best fit" (unconstrained, data series only).
valuenumber | nullThe constraint value. Required when modifier is "=", ">", ">=", "<", or "<=".
rangeobjectRange constraint with min and max values. Used when modifier is "from".
{
"modifier": "=",
"value": 0.5,
"range": {
"min": 0,
"max": 100
}
}fit_parameters
objectFit parameter constraints for curve fitting calculations. The available parameters depend on the calculation's equation_type:
- Hill: min, max, slope
- Biphasic: center1, center2, frac, plateau1, plateau2, slope1, slope2
- Bell Curve: plateau1, center1, slope1, peak, center2, slope2, plateau2
- Linear: slope, y_intercept
- Exponential Decay: c_0, c_min, k
- Michaelis-Menten: b_max, k_d
{
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
}minimum_activity
objectMinimum activity (inactivity) bounds for dose response calculations
lowernumber | nullThe lower bound for the inactive range
uppernumber | nullThe upper bound for the inactive range
{
"lower": 10,
"upper": 90
}calculation
objectA protocol calculation
idintegerThe unique identifier of the calculation
classstringThe type of calculation. Values include "dose response calculation", "custom calculation", "normalized calculation", etc.
inputsobjectThe input readout definitions used by this calculation
outputsobjectThe output readout definitions produced by this calculation
fit_parametersobjectFit parameter constraints (only for dose response calculations)
minimum_activityobjectMinimum activity bounds (only for dose response calculations)
{
"id": 12345,
"class": "dose response calculation",
"inputs": {},
"outputs": {},
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"minimum_activity": {
"lower": 10,
"upper": 90
}
}calculations_list
objectA list of calculations for a protocol
objectsArray<object>The list of calculations
countintegerThe total number of calculations
{
"objects": [
{
"id": 12345,
"class": "dose response calculation",
"inputs": {},
"outputs": {},
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"minimum_activity": {
"lower": 10,
"upper": 90
}
}
],
"count": 5
}dose_response_calculation_id
integerNumeric identifier of the dose response calculation
0calculation_update
objectRequest body for updating a dose response calculation
fit_parametersobjectFit parameter constraints for the calculation. Setting this to an empty object clears all constraints. The available parameters depend on the calculation's equation_type:
- Hill: min, max, slope
- Biphasic: center1, center2, frac, plateau1, plateau2, slope1, slope2
- Bell Curve: plateau1, center1, slope1, peak, center2, slope2, plateau2
- Linear: slope, y_intercept
- Exponential Decay: c_0, c_min, k
- Michaelis-Menten: b_max, k_d
minimum_activityobjectMinimum activity (inactivity) bounds
{
"fit_parameters": {},
"minimum_activity": {
"lower": 10,
"upper": 90,
"modifier": "from"
}
}dose_response_data_series
objectA dose response data series representing curve data for a specific batch/run
idintegerThe unique identifier of the data series
fit_parametersobjectFit parameter constraints specific to this data series
updated_atstringTimestamp of last update in ISO-8601 UTC format
{
"id": 67890,
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"updated_at": "2026-01-30T14:42:24.000Z"
}dose_response_data_series_list
objectA list of data series for a calculation
objectsArray<object>The list of data series
countintegerThe total number of data series
{
"objects": [
{
"id": 67890,
"fit_parameters": {
"min": {
"modifier": "=",
"value": 0
},
"max": {
"modifier": ">=",
"value": 100
}
},
"updated_at": "2026-01-30T14:42:24.000Z"
}
],
"count": 10
}dose_response_data_series_id
integerNumeric identifier of the dose response data series
0dose_response_data_series_update
objectRequest body for updating a data series
fit_parametersobjectFit parameter constraints for this data series. These override the calculation-level constraints for this specific curve. The available parameters depend on the calculation's equation_type:
- Hill: min, max, slope
- Biphasic: center1, center2, frac, plateau1, plateau2, slope1, slope2
- Bell Curve: plateau1, center1, slope1, peak, center2, slope2, plateau2
- Linear: slope, y_intercept
- Exponential Decay: c_0, c_min, k
- Michaelis-Menten: b_max, k_d Data series support "best fit" modifier for unconstrained fitting.
{
"fit_parameters": {}
}