Strain approval API endpoint
A request to add or change a shared strain, reviewed before it takes effect.
Table of contents
Endpoints
- Private portal:
https://www.brainstem.org/api/private/taxonomies/strainapproval/(needs a token; one record: append<id>/) - Public portal: not available
- Response keys:
strain_approval(detail, create, update),strain_approvals(list) - Permissions: see the permissions page
Form-only inputs (sent on create or update, not returned in responses):
merge_to_id[required].breeding[required]. Choices:I,O,W,U.
Fields
[required] fields must be sent on create; [read-only] fields are returned but cannot be set. A nestable relation can be traversed in filters (filter{field.other}) and sideloaded with include[]=field.*; other relations can only be compared with ids (filter{field}=<id>). See the query syntax.
| Field | Description |
|---|---|
id | UUID string [read-only] |
name | string [required]; max 100 characters |
popular_name | string; max 100 characters |
description | string; max 2000 characters |
species | species id [required] |
rrid | string; max 100 characters; nullable. Research Resource Identifier (RRID) for tracking standardized research resources |
external_identifiers | JSON object; nullable. External identifiers and their source URLs from various databases (NCBI, JAX, DOI, etc.) |
comments | string; nullable |
instance_id | UUID string [required]; nullable |
action | one of Add, Change [required] |
reviewer | user id [required]; nullable |
status | one of Pending, Accepted, Rejected, Cancelled, HoldForRejection, HoldForMerge, Merged, ChangesRequired [required] |
List
- Allowed portals: private
- Request method: GET
- URL:
https://www.brainstem.org/api/private/taxonomies/strainapproval/ - Responses:
200OK;401Not authenticated;403Not allowed
Use example (Python API tool)
resp = client.load('strainapproval', load_all=True)
records = resp['strain_approvals']
Use example (MATLAB API tool)
resp = client.load('strainapproval', 'load_all', true);
records = resp.strain_approvals;
Response example
{
"strain_approvals": [
{
"id": "<id>",
"name": "Strain approval 1",
"popular_name": "",
"description": "",
"species": "<species-id>",
"rrid": "",
"external_identifiers": {},
"comments": "",
"instance_id": "<id>",
"action": "Add",
"reviewer": "<user-id>",
"status": "Pending"
}
],
"meta": {
"page": 1,
"per_page": 100,
"total_results": 1,
"total_pages": 1
}
}
Add
- Allowed portals: private
- Request method: POST
- URL:
https://www.brainstem.org/api/private/taxonomies/strainapproval/ - Data: JSON object with at least the required fields
- Responses:
201Created;400Bad request (validation errors per field);403Not allowed
Use example (Python API tool)
resp = client.save('strainapproval', data={"name": "Strain approval 1", "species": "<species-id>", "instance_id": "<id>", "action": "Add", "reviewer": "<user-id>", "status": "Pending", "merge_to_id": "<merge_to_id>", "breeding": "I"})
record = resp.json()['strain_approval']
Use example (MATLAB API tool)
created = client.save(struct('name', 'Strain approval 1', 'species', '<species-id>', 'instance_id', '<id>', 'action', 'Add', 'reviewer', '<user-id>', 'status', 'Pending', 'merge_to_id', '<merge_to_id>', 'breeding', 'I'), 'strainapproval');
record = created.strain_approval;
Detail
- Allowed portals: private
- Request method: GET
- URL:
https://www.brainstem.org/api/private/taxonomies/strainapproval/<id>/ - Responses:
200OK;403Not allowed;404Not found
Use example (Python API tool)
resp = client.load('strainapproval', id='<id>')
record = resp.json()['strain_approval']
Use example (MATLAB API tool)
out = client.load('strainapproval', 'id', '<id>');
record = out.strain_approval;
Response example
{
"strain_approval": {
"id": "<id>",
"name": "Strain approval 1",
"popular_name": "",
"description": "",
"species": "<species-id>",
"rrid": "",
"external_identifiers": {},
"comments": "",
"instance_id": "<id>",
"action": "Add",
"reviewer": "<user-id>",
"status": "Pending"
}
}
Change
- Allowed portals: private
- Request method: PATCH
- URL:
https://www.brainstem.org/api/private/taxonomies/strainapproval/<id>/ - Data: JSON object with the fields to change. Lists (
projects,tags, …) and JSON payloads (details, coordinates) are replaced as a whole: read the record first and send the full list or object. - Responses:
200OK;400Bad request;403Not allowed;404Not found
Use example (Python API tool)
resp = client.save('strainapproval', id='<id>', data={"name": "Strain approval 1 (renamed)"})
Use example (MATLAB API tool)
client.save(struct('id', '<id>', 'name', 'Strain approval 1 (renamed)'), 'strainapproval', 'method', 'patch');
Delete
- Allowed portals: private
- Request method: DELETE
- URL:
https://www.brainstem.org/api/private/taxonomies/strainapproval/<id>/ - Responses:
204Deleted;400Still referenced by other records;403Not allowed;404Not found
Use example (Python API tool)
resp = client.delete('strainapproval', id='<id>')
Use example (MATLAB API tool)
client.delete('<id>', 'strainapproval');
Custom actions
| Action | Request |
|---|---|
accept_approval | PATCH, POST /api/private/taxonomies/strainapproval/<id>/accept/ |
cancel_approval | PATCH, POST /api/private/taxonomies/strainapproval/<id>/cancel/ |
hold_for_merge_approval | PATCH, POST /api/private/taxonomies/strainapproval/<id>/hold_for_merge/ |
hold_for_rejection_approval | PATCH, POST /api/private/taxonomies/strainapproval/<id>/hold_for_rejection/ |
merge_approval | PATCH, POST /api/private/taxonomies/strainapproval/<id>/merge/ |
reject_approval | PATCH, POST /api/private/taxonomies/strainapproval/<id>/reject/ |
changes_required_approval | PATCH, POST /api/private/taxonomies/strainapproval/<id>/require_changes/ |
Approval requests are reviewed by the admin team of the taxonomy or resource. The actions move a request through its lifecycle: accept, reject, require_changes, hold_for_merge, merge (merge into an existing record given by merge_to_id) and cancel (by the submitter).