# CDD Vault API Collaborative 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](cdd_openapi.yaml) · [OpenAPI JSON](cdd_openapi.json). Import it into Postman, an SDK/client generator, or your IDE. **For LLMs / AI tools:** [llms.txt](llms.txt) (concise index) · [llms-full.txt](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. ## Public API ### CDD API Path: `/public.html` Version: 1.0.0 Collaborative 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](cdd_openapi.yaml) · [OpenAPI JSON](cdd_openapi.json). Import it into Postman, an SDK/client generator, or your IDE. **For LLMs / AI tools:** [llms.txt](llms.txt) (concise index) · [llms-full.txt](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. #### Operations ##### GET /vaults Summary: List of vaults Return a list of accessible vaults Responses: - 200: List of vaults - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/fields Summary: Retrieve all fields Get all the fields both internal and user defined Parameters: - `vault_id` (path, integer, required) Responses: - 200: List of all fields - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/fields/{field_id}/pick_list_values Summary: Get pick list values List the pick list values for a vault field definition. Parameters: - `vault_id` (path, integer, required) - `field_id` (path, integer, required) — Numeric identifier of the field definition - `page_size` (query, integer, optional) — Maximum number of records to return (default 50, maximum 1000). - `offset` (query, integer, optional) — Number of records to skip (for pagination). Responses: - 200: A page of pick list values - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/fields/{field_id}/pick_list_values Summary: Create a pick list value Create a pick list value on a field definition. Requires vault administrator access. Parameters: - `vault_id` (path, integer, required) - `field_id` (path, integer, required) — Numeric identifier of the field definition Request body: application/json Responses: - 201: The created pick list value - 401: Missing or invalid API key - 422: Validation error ##### GET /vaults/{vault_id}/fields/{field_id}/pick_list_values/{id} Summary: Get a pick list value Retrieve a single pick list value. Parameters: - `vault_id` (path, integer, required) - `field_id` (path, integer, required) — Numeric identifier of the field definition - `id` (path, integer, required) — Numeric identifier of the pick list value Responses: - 200: The pick list value - 401: Missing or invalid API key - 404: Pick list value not found, or vault is unauthorized ##### PUT /vaults/{vault_id}/fields/{field_id}/pick_list_values/{id} Summary: Update a pick list value Update a pick list value. Requires vault administrator access. Parameters: - `vault_id` (path, integer, required) - `field_id` (path, integer, required) — Numeric identifier of the field definition - `id` (path, integer, required) — Numeric identifier of the pick list value Request body: application/json Responses: - 200: The updated pick list value - 401: Missing or invalid API key - 404: Pick list value not found, or vault is unauthorized - 422: Validation error ##### DELETE /vaults/{vault_id}/fields/{field_id}/pick_list_values/{id} Summary: Delete a pick list value Delete a pick list value. Requires vault administrator access. Parameters: - `vault_id` (path, integer, required) - `field_id` (path, integer, required) — Numeric identifier of the field definition - `id` (path, integer, required) — Numeric identifier of the pick list value Responses: - 200: The pick list value was deleted - 401: Missing or invalid API key - 404: Pick list value not found, or vault is unauthorized ##### GET /vaults/{vault_id}/api_executions Summary: 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_id` (path, integer, required) - `after` (query, string, optional) — Start of the date range (YYYY-MM-DDThh:mm:ss±hh:mm). Defaults to 30 days before `before` when omitted. - `before` (query, string, optional) — End of the date range (YYYY-MM-DDThh:mm:ss±hh:mm). Defaults to the current date and time when omitted. Responses: - 200: API usage data - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/batch_move_jobs Summary: Get all batch move jobs Get all batch move jobs. Requires the user to be a vault administrator. Parameters: - `vault_id` (path, integer, required) Responses: - 200: List of all batch move jobs - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/batch_move_jobs Summary: 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. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: Batch move job created - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/batch_move_jobs/{job_id} Summary: Retrieve a single batch move job Retrieve a single batch move job. Requires the user to be a vault administrator. Parameters: - `vault_id` (path, integer, required) - `job_id` (path, integer, required) Responses: - 200: Batch move job details - 401: Missing or invalid API key ##### DELETE /vaults/{vault_id}/batch_move_jobs/{job_id} Summary: 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_id` (path, integer, required) - `job_id` (path, integer, required) Responses: - 200: Batch move job canceled - 401: Missing or invalid API key - 405: The job is no longer in a cancelable state (it has already started or finished). The current job is returned unchanged. ##### POST /vaults/{vault_id}/batches Summary: 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. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/batches/query Summary: 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. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/batches/{batch_id} Summary: Get a single batch Get the information about a single batch Parameters: - `vault_id` (path, integer, required) - `batch_id` (path, integer, required) Responses: - 200: Success - 401: Missing or invalid API key ##### PUT /vaults/{vault_id}/batches/{batch_id} Summary: 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). Parameters: - `vault_id` (path, integer, required) - `batch_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/collections Summary: Create a collection Create a collection, the name should be unique unless you want to overwrite an existing collection. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/collections/query Summary: 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. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/collections/{collection_id} Summary: Get a single collection Get the information about a single collection Parameters: - `vault_id` (path, integer, required) - `collection_id` (path, integer, required) Responses: - 200: Success - 401: Missing or invalid API key ##### PUT /vaults/{vault_id}/collections/{collection_id} Summary: Update a collection Parameters: - `vault_id` (path, integer, required) - `collection_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key ##### DELETE /vaults/{vault_id}/collections/{collection_id} Summary: Delete a collection Delete a collection. The molecules in the collection are not affected. Parameters: - `vault_id` (path, integer, required) - `collection_id` (path, integer, required) — Numeric identifier of the collection Responses: - 200: The collection was deleted - 401: Missing or invalid API key - 404: Collection not found, or vault is unauthorized ##### GET /vaults/{vault_id}/control_layouts Summary: 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_id` (path, integer, required) - `page_size` (query, integer, optional) — Maximum number of records to return (default 50, maximum 1000). - `offset` (query, integer, optional) — Number of records to skip (for pagination). - `async` (query, boolean, optional) — If true, run the listing as an asynchronous export. - `only_ids` (query, boolean, optional) — If true, return only the ids of the matching control layouts. - `projects` (query, string, optional) — Comma-separated project ids to filter by. - `created_after` (query, string, optional) — Only include layouts created on or after this time. - `created_before` (query, string, optional) — Only include layouts created on or before this time. - `modified_after` (query, string, optional) — Only include layouts modified on or after this time. - `modified_before` (query, string, optional) — Only include layouts modified on or before this time. Responses: - 200: A page of control layouts - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/control_layouts Summary: 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`. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: The created control layout - 401: Missing or invalid API key - 422: Validation error ##### GET /vaults/{vault_id}/control_layouts/{id} Summary: Get a control layout Retrieve a single control layout. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the control layout Responses: - 200: The control layout - 401: Missing or invalid API key - 404: Control layout not found, or vault is unauthorized ##### DELETE /vaults/{vault_id}/control_layouts/{id} Summary: Delete a control layout Delete a control layout. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the control layout Responses: - 200: The control layout was deleted - 401: Missing or invalid API key - 404: Control layout not found, or vault is unauthorized ##### GET /vaults/{vault_id}/data_sets Summary: Get dataset List datasets Parameters: - `vault_id` (path, integer, required) Responses: - 200: Success - 404: Unauthorized or not found ##### POST /vaults/{vault_id}/eln/entries Summary: 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. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/eln/entries/query Summary: 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. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key ##### PUT /vaults/{vault_id}/eln/entries/{id} Summary: 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. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the ELN entry Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key - 404: ELN entry not found, or vault is unauthorized ##### POST /vaults/{vault_id}/eln/entries/{id}/status Summary: 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. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the ELN entry Request body: application/json Responses: - 200: The updated ELN entry - 400: Invalid or missing status_action - 401: Missing or invalid API key - 404: ELN entry (or witness) not found, or vault is unauthorized - 409: The entry cannot transition from its current status ##### GET /vaults/{vault_id}/export_progress/{export_id} Summary: 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_id` (path, integer, required) - `export_id` (path, integer, required) Responses: - 200: Successful operation - 401: Missing or invalid API key - 404: Couldn't find this export ##### GET /vaults/{vault_id}/exports Summary: 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_id` (path, integer, required) Responses: - 200: List of all active exports - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/exports/{export_id} Summary: 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_id` (path, integer, required) - `export_id` (path, integer, required) Responses: - 200: 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.). - 302: Redirect to a temporary download URL for the file (used when files are served directly from S3). Follow the `Location` header (curl: `-L`). - 401: Missing or invalid API key - 403: The export is not ready yet - 404: Couldn't find this export ##### DELETE /vaults/{vault_id}/exports/{export_id} Summary: Cancel Export Cancels an export if possible Parameters: - `vault_id` (path, integer, required) - `export_id` (path, integer, required) Responses: - 200: The export was canceled (its `status` becomes `canceled`). - 401: Missing or invalid API key - 405: 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. ##### POST /vaults/{vault_id}/files Summary: 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`. Parameters: - `vault_id` (path, integer, required) Request body: multipart/form-data Responses: - 200: File successfully attached - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/files/{file_id} Summary: Retrieve a file Return a single file with the content base64 encoded. Parameters: - `vault_id` (path, integer, required) - `file_id` (path, integer, required) Responses: - 200: Successful operation, output will depend on format selected when doing the query - 401: Missing or invalid API key - 404: Couldn't find this file ##### DELETE /vaults/{vault_id}/files/{file_id} Summary: Delete file Delete a file Parameters: - `vault_id` (path, integer, required) - `file_id` (path, integer, required) Responses: - 200: The file - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/import_parsers Summary: 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_id` (path, integer, required) Responses: - 200: List of import parsers - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/import_parsers/{id} Summary: Get an import parser Retrieve a single import parser, including its full `template_json` configuration. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the import parser Responses: - 200: The import parser - 401: Missing or invalid API key - 404: Import parser not found, or vault is unauthorized ##### GET /vaults/{vault_id}/inventory_locations Summary: Retrieve a list of Sample Inventory Locations for a given Vault Returns a list of inventory locations within the specified vault. Parameters: - `vault_id` (path, integer, required) - `X-CDD-Token` (header, string, required) — Authentication token Responses: - 200: A list of inventory locations - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/inventory_samples Summary: 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_id` (path, integer, required) - `page_size` (query, integer, optional) — Maximum number of records to return (default 50, maximum 1000). - `offset` (query, integer, optional) — Number of records to skip (for pagination). - `async` (query, boolean, optional) — If true, run the listing as an asynchronous export. - `batch_ids` (query, string, optional) — Comma-separated batch ids to filter by. - `inventory_sample_ids` (query, string, optional) — Comma-separated inventory sample ids to filter by. - `projects` (query, string, optional) — Comma-separated project ids to filter by. - `created_after` (query, string, optional) — Only include samples created on or after this time. - `created_before` (query, string, optional) — Only include samples created on or before this time. - `modified_after` (query, string, optional) — Only include samples modified on or after this time. - `modified_before` (query, string, optional) — Only include samples modified on or before this time. Responses: - 200: A page of inventory samples - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/inventory_samples Summary: Create an inventory sample Create an inventory sample for a batch. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: The created inventory sample - 401: Missing or invalid API key - 422: Validation error ##### GET /vaults/{vault_id}/inventory_samples/{id} Summary: Get an inventory sample Retrieve a single inventory sample. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the inventory sample Responses: - 200: The inventory sample - 401: Missing or invalid API key - 404: Inventory sample not found, or vault is unauthorized ##### PUT /vaults/{vault_id}/inventory_samples/{id} Summary: 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. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the inventory sample Request body: application/json Responses: - 200: The updated inventory sample - 401: Missing or invalid API key - 422: Validation error ##### DELETE /vaults/{vault_id}/inventory_samples/{id} Summary: 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_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the inventory sample Responses: - 200: The inventory sample was deleted - 401: Missing or invalid API key - 422: The sample cannot be deleted (associated with a protocol or plate well) ##### GET /vaults/{vault_id}/mapping_templates Summary: 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_id` (path, integer, required) Responses: - 200: List of all fields - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/mapping_templates/{mapping_template_id} Summary: Retrieve a single mapping template This will give you the details about this mapping template Parameters: - `vault_id` (path, integer, required) - `mapping_template_id` (path, integer, required) Responses: - 200: List of all fields - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/molecules Summary: 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`. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: The created molecule - 401: Missing or invalid API key - 422: Validation error, or molecule creation is not allowed in this vault ##### POST /vaults/{vault_id}/molecules/query Summary: 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. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/molecules/{id} Summary: Get a molecule Retrieve a single molecule by id. For querying multiple molecules or searching by structure, use `POST /molecules/query`. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the molecule - `no_structures` (query, boolean, optional) — Exclude structure representations (smiles, inchi, molfile, etc.). - `only_batch_ids` (query, boolean, optional) — Return only the molecule's batch ids instead of full batch objects. Responses: - 200: The molecule - 401: Missing or invalid API key - 404: Molecule not found, or vault is unauthorized ##### PUT /vaults/{vault_id}/molecules/{id} Summary: Update a molecule Update a molecule. Only the supplied fields are changed; array fields (synonyms, projects, collections) replace the existing values. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the molecule Request body: application/json Responses: - 200: The updated molecule - 401: Missing or invalid API key - 404: Molecule not found, or vault is unauthorized - 422: Validation error ##### GET /vaults/{vault_id}/molecules/{id}/image Summary: 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_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the molecule - `width` (query, integer, optional) — Image width in pixels. - `height` (query, integer, optional) — Image height in pixels. - `format` (query, string, optional) — Image format. Responses: - 200: The export to poll for the generated image - 401: Missing or invalid API key - 404: Molecule not found, or vault is unauthorized ##### GET /vaults/{vault_id}/plates Summary: 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_id` (path, integer, required) - `page_size` (query, integer, optional) — Maximum number of records to return (default 50, maximum 1000). - `offset` (query, integer, optional) — Number of records to skip (for pagination). - `async` (query, boolean, optional) — If true, run the listing as an asynchronous export. - `only_ids` (query, boolean, optional) — If true, return only the ids of matching plates. - `plates` (query, string, optional) — Comma-separated plate ids to filter by. - `names` (query, string, optional) — Comma-separated plate names to filter by. - `projects` (query, string, optional) — Comma-separated project ids to filter by. Responses: - 200: List of plates - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/plates Summary: Create a plate Create a plate. Requires write permission in the vault. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: The created plate - 401: Missing or invalid API key - 422: Validation error ##### GET /vaults/{vault_id}/plates/{id} Summary: Get a plate Retrieve a single plate. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the plate Responses: - 200: The plate - 401: Missing or invalid API key - 404: Plate not found, or vault is unauthorized ##### PUT /vaults/{vault_id}/plates/{id} Summary: Update a plate Update a plate. Requires write permission. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the plate Request body: application/json Responses: - 200: The updated plate - 401: Missing or invalid API key - 404: Plate not found, or vault is unauthorized - 422: Validation error ##### DELETE /vaults/{vault_id}/plates/{id} Summary: Delete a plate Delete a plate. Requires write permission. A plate that has associated run data cannot be deleted. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the plate Responses: - 200: The plate was deleted - 401: Missing or invalid API key - 404: Plate not found, or vault is unauthorized - 422: The plate cannot be deleted (it has associated run data) ##### GET /vaults/{vault_id}/projects Summary: Get projects List the projects accessible to the API key in the vault. Each entry contains the project `id` and `name`. Parameters: - `vault_id` (path, integer, required) Responses: - 200: List of projects - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/projects Summary: Create a project Create a project. Requires permission to manage projects in the vault. The response contains the new project's `id` and `name`. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: The created project - 401: Missing or invalid API key - 422: Validation error ##### GET /vaults/{vault_id}/projects/{id} Summary: Get a project Retrieve a single project, including its `description` and `members`. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the project Responses: - 200: The project - 401: Missing or invalid API key - 404: Project not found, or vault is unauthorized ##### PUT /vaults/{vault_id}/projects/{id} Summary: Update a project Update a project. Requires permission to manage projects. Supplying `members` replaces the existing membership list. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the project Request body: application/json Responses: - 200: The updated project - 401: Missing or invalid API key - 404: Project not found, or vault is unauthorized - 422: Validation error ##### DELETE /vaults/{vault_id}/projects/{id} Summary: 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_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the project Responses: - 200: The project was deleted - 401: Missing or invalid API key - 404: Project not found, or vault is unauthorized - 422: The project cannot be deleted (it still has associated data) ##### GET /vaults/{vault_id}/protocols Summary: 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_id` (path, integer, required) - `page_size` (query, integer, optional) — Maximum number of records to return (default 50, maximum 1000). - `offset` (query, integer, optional) — Number of records to skip (for pagination). - `async` (query, boolean, optional) — If true, run the listing as an asynchronous export. - `only_ids` (query, boolean, optional) — If true, return only the ids of matching protocols. - `no_runs` (query, boolean, optional) — If true, omit run data from each protocol. - `names` (query, string, optional) — Comma-separated protocol names to filter by. - `protocols` (query, string, optional) — Comma-separated protocol ids to filter by. - `projects` (query, string, optional) — Comma-separated project ids to filter by. Responses: - 200: A page of protocols - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/protocols/{id} Summary: Get a protocol Retrieve a single protocol. Pass `no_runs=true` to omit run data. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the protocol - `no_runs` (query, boolean, optional) — If true, omit run data from the response. Responses: - 200: The protocol - 401: Missing or invalid API key - 404: Protocol not found, or vault is unauthorized ##### PUT /vaults/{vault_id}/protocols/{id} Summary: Update a protocol Update a protocol's definition (name, projects, and protocol field values). This does not modify readout definitions. Requires write permission. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the protocol Request body: application/json Responses: - 200: The updated protocol - 401: Missing or invalid API key - 404: Protocol not found, or vault is unauthorized - 422: Validation error ##### GET /vaults/{vault_id}/protocols/{protocol_id}/data Summary: 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_id` (path, integer, required) - `protocol_id` (path, integer, required) — Numeric identifier of the protocol - `page_size` (query, integer, optional) — Maximum number of records to return (default 50, maximum 1000). - `offset` (query, integer, optional) — Number of records to skip (for pagination). - `async` (query, boolean, optional) — If true, run the query as an asynchronous export. - `format` (query, string, optional) — If "csv", produce a CSV export instead of a JSON page. - `molecules` (query, string, optional) — Comma-separated molecule ids to filter by. - `runs` (query, string, optional) — Comma-separated run ids to filter by. - `plates` (query, string, optional) — Comma-separated plate ids to filter by. - `projects` (query, string, optional) — Comma-separated project ids to filter by. Responses: - 200: A page of protocol readout data - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/batches/{batch_id}/protocols/{id}/plot Summary: 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_id` (path, integer, required) - `batch_id` (path, integer, required) — Numeric identifier of the batch - `id` (path, integer, required) — Numeric identifier of the protocol - `dose_response_calculation_id` (query, integer, optional) — Restrict the plot to a single dose-response calculation. When provided, a single PNG is returned; when omitted, a ZIP of PNGs is returned. - `size` (query, string, optional) — Image size multiplier. - `runs` (query, string, optional) — Comma-separated run ids to restrict the plotted data to. Responses: - 200: A single PNG (when `dose_response_calculation_id` is given) or a ZIP archive of PNGs (otherwise). - 401: Missing or invalid API key - 404: No data found for this batch/protocol, or vault is unauthorized ##### POST /vaults/{vault_id}/readout_rows/query Summary: 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. Parameters: - `vault_id` (path, integer, required) Request body: application/json Responses: - 200: The matching readout rows, or the export to poll when async is true - 401: Missing or invalid API key - 422: Invalid query parameters, such as an illegal type ##### PUT /vaults/{vault_id}/readout_rows/{readout_row_id} Summary: 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. Parameters: - `vault_id` (path, integer, required) - `readout_row_id` (path, integer, required) Request body: application/json Responses: - 200: The updated readout row - 400: Invalid readout keys (only "value" and "outlier" are allowed), invalid outlier flag value, or the readout cannot be flagged as an outlier - 401: Missing or invalid API key - 403: Aggregate rows can't be updated via the API. Only detail rows can be updated - 404: Couldn't find this readout row or one of its readouts ##### DELETE /vaults/{vault_id}/readout_rows/{readout_row_id} Summary: 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_id` (path, integer, required) - `readout_row_id` (path, integer, required) Responses: - 200: The readout row was deleted - 401: Missing or invalid API key - 403: Aggregate rows can't be destroyed via the API. Only detail rows can be destroyed - 404: Couldn't find this readout row ##### GET /vaults/{vault_id}/registration_forms Summary: Get registration forms List the registration forms configured in the vault. Parameters: - `vault_id` (path, integer, required) Responses: - 200: List of registration forms - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/registration_forms/{id} Summary: Get a registration form Retrieve a single registration form. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the registration form Responses: - 200: The registration form - 401: Missing or invalid API key - 404: Registration form not found, or vault is unauthorized ##### GET /vaults/{vault_id}/registration_systems Summary: Get registration systems List the registration systems defined in the vault. Parameters: - `vault_id` (path, integer, required) Responses: - 200: List of registration systems - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/registration_systems/{id} Summary: Get a registration system Retrieve a single registration system. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the registration system Responses: - 200: The registration system - 401: Missing or invalid API key - 404: Registration system not found, or vault is unauthorized ##### GET /vaults/{vault_id}/runs Summary: 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_id` (path, integer, required) - `page_size` (query, integer, optional) — Maximum number of records to return (default 50, maximum 1000). - `offset` (query, integer, optional) — Number of records to skip (for pagination). - `async` (query, boolean, optional) — If true, run the listing as an asynchronous export. - `only_ids` (query, boolean, optional) — If true, return only the ids of matching runs. - `protocols` (query, string, optional) — Comma-separated protocol ids to filter by. - `projects` (query, string, optional) — Comma-separated project ids to filter by. - `slurp` (query, integer, optional) — Only include runs imported by this slurp id. - `run_date_after` (query, string, optional) — Include runs with a run date on/after this date. - `run_date_before` (query, string, optional) — Include runs with a run date on/before this date. Responses: - 200: List of runs - 401: Missing or invalid API key ##### DELETE /vaults/{vault_id}/runs Summary: 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_id` (path, integer, required) - `slurp` (query, integer, required) — Id of the slurp whose runs should be deleted. Responses: - 200: The slurp's runs were deleted - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/runs/{id} Summary: Get a run Retrieve a single run, including its plate statistics. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the run Responses: - 200: The run - 401: Missing or invalid API key - 404: Run not found, or vault is unauthorized ##### PUT /vaults/{vault_id}/runs/{id} Summary: 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. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the run Request body: application/json Responses: - 200: The updated run - 401: Missing or invalid API key - 404: Run not found, or vault is unauthorized - 422: Validation error ##### DELETE /vaults/{vault_id}/runs/{id} Summary: Delete a run Delete a single run. Requires write permission. Parameters: - `vault_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the run Responses: - 200: The run was deleted - 401: Missing or invalid API key - 404: Run not found, or vault is unauthorized ##### GET /vaults/{vault_id}/searches Summary: List of all saved searches Return a list of accessible saved searches for the given vault. Parameters: - `vault_id` (path, integer, required) Responses: - 200: List of saved searches, each including its full `search_criteria` (structure, keyword, and molecule/collection/protocol criteria) and `display_criteria`. - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/searches/{search_id} Summary: 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_id` (path, integer, required) - `search_id` (path, integer, required) - `projects` (query, array, optional) — Comma separated list of the ids of the projects to search - `data_sets` (query, array, optional) — Comma separated list of the ids of the data sets to search - `zip` (query, boolean, optional) — Should it be zipped - `format` (query, string, optional) — Format of the exported file Responses: - 200: Export information - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/slurps Summary: 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_id` (path, integer, required) - `show_events` (query, boolean, optional) — Include event and error details for each slurp. Responses: - 200: List of active slurps - 401: Missing or invalid API key ##### POST /vaults/{vault_id}/slurps Summary: 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. Parameters: - `vault_id` (path, integer, required) Request body: multipart/form-data Responses: - 200: The created slurp - 401: Missing or invalid API key - 429: Too many concurrent slurps for this user ##### GET /vaults/{vault_id}/slurps/{id} Summary: 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_id` (path, integer, required) - `id` (path, integer, required) — Numeric identifier of the slurp - `show_events` (query, boolean, optional) — Include event and error details. Responses: - 200: The slurp - 401: Missing or invalid API key - 404: Slurp not found, or vault is unauthorized ##### GET /vaults/{vault_id}/status Summary: 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_id` (path, integer, required) Responses: - 200: The current vault status - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/users Summary: 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_id` (path, integer, required) - `include_projects` (query, boolean, optional) — If true, each user’s Vault role and an array of project memberships are returned Responses: - 200: Users of the vault - 401: Missing or invalid API key ##### GET /vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations Summary: List dose response calculations for a protocol Get all dose response calculations for a protocol. Parameters: - `vault_id` (path, integer, required) - `protocol_id` (path, integer, required) Responses: - 200: Success - 401: Missing or invalid API key - 404: Protocol not found ##### GET /vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id} Summary: Get a single dose response calculation Get the details of a single dose response calculation Parameters: - `vault_id` (path, integer, required) - `protocol_id` (path, integer, required) - `dose_response_calculation_id` (path, integer, required) Responses: - 200: Success - 401: Missing or invalid API key - 404: Protocol or dose response calculation not found ##### PUT /vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id} Summary: 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. Parameters: - `vault_id` (path, integer, required) - `protocol_id` (path, integer, required) - `dose_response_calculation_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key or insufficient permissions - 404: Protocol or dose response calculation not found - 422: Validation error. Possible causes include: unknown fit parameter, invalid modifier, range where lower > upper, non-numeric value, or unrecognized parameters. ##### GET /vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series Summary: 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_id` (path, integer, required) - `protocol_id` (path, integer, required) - `dose_response_calculation_id` (path, integer, required) Responses: - 200: Success - 401: Missing or invalid API key - 404: Protocol or dose response calculation not found ##### GET /vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series/{dose_response_data_series_id} Summary: Get a single dose response data series Get the details of a single dose response data series Parameters: - `vault_id` (path, integer, required) - `protocol_id` (path, integer, required) - `dose_response_calculation_id` (path, integer, required) - `dose_response_data_series_id` (path, integer, required) Responses: - 200: Success - 401: Missing or invalid API key - 404: Protocol, dose response calculation, or dose response data series not found ##### PUT /vaults/{vault_id}/protocols/{protocol_id}/dose_response_calculations/{dose_response_calculation_id}/dose_response_data_series/{dose_response_data_series_id} Summary: 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). Parameters: - `vault_id` (path, integer, required) - `protocol_id` (path, integer, required) - `dose_response_calculation_id` (path, integer, required) - `dose_response_data_series_id` (path, integer, required) Request body: application/json Responses: - 200: Success - 401: Missing or invalid API key or insufficient permissions - 404: Protocol, dose response calculation, or dose response data series not found - 422: Validation error. Possible causes include: unknown fit parameter, invalid modifier, range where lower > upper, or non-numeric value. ##### POST /vaults/{vault_id}/ai/bioisosteres Summary: Find bioisosteric replacements (hierarchical) Submit a chemical structure and receive bioisosteric replacement suggestions grouped by fragment. Requires the vault to have Deep Learning enabled. Parameters: - `vault_id` (path, integer, required) — ID of the current vault. - `X-CDD-Token` (header, string, required) — API key token for authentication. Request body: application/json Responses: - 200: Success — returns bioisosteric suggestions grouped by fragment. - 400: Bad request — missing or invalid parameters. - 401: Unauthorized — Deep Learning not enabled for this vault or user lacks access. ##### POST /vaults/{vault_id}/ai/bioisosteres/flat Summary: 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. Parameters: - `vault_id` (path, integer, required) — ID of the current vault. - `X-CDD-Token` (header, string, required) — API key token for authentication. Request body: application/json Responses: - 200: Success — returns bioisosteric suggestions as a flat list. - 400: Bad request — missing or invalid parameters. - 401: Unauthorized — Deep Learning not enabled for this vault or user lacks access. ##### POST /vaults/{vault_id}/ai/bioisosteres/get_fragmentation Summary: Fragment a chemical structure Submit a chemical structure and receive its fragmentation without bioisosteric suggestions. Requires the vault to have Deep Learning enabled. Parameters: - `vault_id` (path, integer, required) — ID of the current vault. - `X-CDD-Token` (header, string, required) — API key token for authentication. Request body: application/json Responses: - 200: Success — returns the fragmentation of the structure. - 400: Bad request — missing or invalid parameters. - 401: Unauthorized — Deep Learning not enabled for this vault or user lacks access. ##### POST /vaults/{vault_id}/ai/similarity Summary: 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. Parameters: - `vault_id` (path, integer, required) — ID of the current vault. - `X-CDD-Token` (header, string, required) — API key token for authentication. Request body: application/json Responses: - 200: Success — returns similar structures ranked by Tanimoto similarity. - 400: Bad request — missing or invalid parameters. - 401: Unauthorized — Deep Learning not enabled for this vault or user lacks access. #### Models - error_apikey: Whenever the given API key doesn't allow access to the given vault or the vault doesn't exist - vault_id: Numeric identifier of the vault - field - fields - pick_list_value_object: A pick list value belonging to a vault field definition. - pick_list_value_write: Attributes for creating or updating a pick list value. - error: A general error response containing an error message and HTTP status code - batch_move_job - batch_move_job_create: Parameters for creating a batch move job, which moves a batch to a different molecule in the same vault. - batch_create - project_id_name - batch - 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. - protocol_criterion: A 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. - structure_criterion: A 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 `_minimum` / `_maximum` convention. - batch_query - batch_query_only_id - collection_create - collection - collections_query_common - collections_query - collection_update - control_layout: A control layout describes which wells of a protocol or run are controls (positive, negative, or a reference molecule). - control_layout_create: 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`. - data_set - eln_create: 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. - eln_entry_status - eln_entries_query - eln_status_action: 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` (requires `witness`), `approve`, `reject` (requires `reason`), `cancel`, `reopen` (requires `reason`), `discard`. - Witnessing disabled: `finalize`, `reopen` (requires `reason`), `discard`. - export - exports - file - import_parser: An import parser (plate block template) describing how a structured data file should be parsed during import. - inventory_location - inventory_sample_object: An inventory sample: a tracked physical amount of a batch, with its current amount, location, custom fields, and event history. - inventory_sample_create: Attributes for creating an inventory sample. - inventory_sample_update: Attributes for updating an inventory sample. Only supplied fields are changed. - mapping_template_simple - mapping_template_details - molecule_create: 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. - molecule - molecule_query - molecule_query_only_id - molecule_update: Attributes for updating a molecule. Only the supplied fields are changed. Array fields (`synonyms`, `projects`, `collections`) replace the existing values. - plate_object: A plate of wells, optionally associated with batches/samples and run statistics. - plate_create_update: Attributes for creating or updating a plate. On create, `name` and `projects` are required. Supplying `wells` replaces the plate's wells. - project_object: A 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`. - project_create_update_public: Attributes for creating or updating a project. - protocol_object: A protocol (assay definition) and its readout definitions, calculations, and runs. - protocol_update: Attributes for updating a protocol's definition (not its readout definitions). Only the supplied fields are changed. - readout_row_query - readout_row - registration_form: A registration form configured in the vault. - public_registration_system: A registration system defined in the vault. - run_object: A run of a protocol (a set of readout data collected on a date). - run_update: Attributes for updating a run. Only the supplied fields are changed. - saved_search_session: A saved search, including its full search criteria and display settings. Fields whose value is empty are omitted from the response. - slurp: A 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. - vault_status: Operational status of the vault: running imports (slurps), recalculating protocols, and overall application availability. Requires vault administrator access. - protocol_id: Numeric identifier of the protocol - fit_parameter_constraint: A constraint for a fit parameter - fit_parameters: Fit 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 - minimum_activity: Minimum activity (inactivity) bounds for dose response calculations - calculation: A protocol calculation - calculations_list: A list of calculations for a protocol - dose_response_calculation_id: Numeric identifier of the dose response calculation - calculation_update: Request body for updating a dose response calculation - dose_response_data_series: A dose response data series representing curve data for a specific batch/run - dose_response_data_series_list: A list of data series for a calculation - dose_response_data_series_id: Numeric identifier of the dose response data series - dose_response_data_series_update: Request body for updating a data series - errors