Specimen procedure API endpoint

Something done to a specimen set, such as sectioning, staining or clearing.

Table of contents

  1. Endpoints
  2. Fields
  3. List
  4. Add
  5. Detail
  6. Change
  7. Delete
  8. Custom actions
  9. Data model

Endpoints

  • Private portal: https://www.brainstem.org/api/private/modules/specimenprocedure/ (needs a token; one record: append <id>/)
  • Public portal: https://www.brainstem.org/api/public/modules/specimenprocedure/ (read-only, public projects, no token)
  • Response keys: specimenprocedure (detail, create, update), specimenprocedures (list)
  • Permissions: inherited through specimen_set → projects (from project)
  • Schema payload: type selects a SpecimenProcedure type; send its fields in details. type_schema_version is set by the server; do not send it.
  • Deleting: also deletes the linked materialusage records

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.

FieldDescription
idUUID string [read-only]
typeone of the SpecimenProcedure types [required]
statusone of planned, performed, cancelled [required]. Planned: prepared but nothing has happened yet. Performed: this record describes what was done. Cancelled: planned and then dropped; kept for the record.
target_scopeone of whole_set, specific [required]. Whether this procedure applies to the whole specimen set or specific specimens only.
specimen_setspecimenset id [required]; nestable
target_specimenslist of specimen ids; nestable. Individual specimens targeted by this procedure. Leave empty when the procedure applies to the whole specimen set.
notesstring; max 500 characters; nullable
date_timedatetime; nullable
target_regionslist of anatomicalregion ids
equipmentlist of equipment ids
protocolprotocol id; nullable
licenseslist of license ids
detailsJSON object
type_schema_versionstring [set by the server]. Schema version for type_json field
updated_atdatetime [read-only]
created_atdatetime [read-only]; nullable
materialscomputed [read-only]
stagescomputed [read-only]

List

  • Allowed portals: private, public
  • Request method: GET
  • URL: https://www.brainstem.org/api/private/modules/specimenprocedure/
  • Responses: 200 OK; 401 Not authenticated; 403 Not allowed

Use example (Python API tool)

resp = client.load('specimenprocedure', load_all=True)
records = resp['specimenprocedures']

Use example (MATLAB API tool)

resp = client.load('specimenprocedure', 'load_all', true);
records = resp.specimenprocedures;

Response example

{
    "specimenprocedures": [
        {
            "id": "<id>",
            "type": "Dissection",
            "status": "performed",
            "target_scope": "whole_set",
            "specimen_set": "<specimenset-id>",
            "target_specimens": [
                "<specimen-id>"
            ],
            "notes": "",
            "date_time": "2024-03-22T10:30:00Z",
            "target_regions": [
                "<anatomicalregion-id>"
            ],
            "equipment": [
                "<equipment-id>"
            ],
            "protocol": "<protocol-id>",
            "licenses": [
                "<license-id>"
            ],
            "details": {
                "...": "see the schema of the selected type"
            },
            "type_schema_version": "set by the server",
            "updated_at": "2024-03-22T10:30:00Z",
            "created_at": "2024-03-22T10:30:00Z",
            "materials": null,
            "stages": null
        }
    ],
    "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/modules/specimenprocedure/
  • Data: JSON object with at least the required fields
  • Responses: 201 Created; 400 Bad request (validation errors per field); 403 Not allowed

Use example (Python API tool)

resp = client.save('specimenprocedure', data={"type": "AntigenRetrieval", "status": "performed", "target_scope": "whole_set", "specimen_set": "<specimenset-id>", "details": {"...": "see the schema of the selected type"}})
record = resp.json()['specimenprocedure']

Use example (MATLAB API tool)

created = client.save(struct('type', 'AntigenRetrieval', 'status', 'performed', 'target_scope', 'whole_set', 'specimen_set', '<specimenset-id>', 'details', struct()), 'specimenprocedure');  % struct() stands for the fields of the selected type
record = created.specimenprocedure;

Detail

  • Allowed portals: private, public
  • Request method: GET
  • URL: https://www.brainstem.org/api/private/modules/specimenprocedure/<id>/
  • Responses: 200 OK; 403 Not allowed; 404 Not found

Use example (Python API tool)

resp = client.load('specimenprocedure', id='<id>')
record = resp.json()['specimenprocedure']

Use example (MATLAB API tool)

out = client.load('specimenprocedure', 'id', '<id>');
record = out.specimenprocedure;

Response example

{
    "specimenprocedure": {
        "id": "<id>",
        "type": "Dissection",
        "status": "performed",
        "target_scope": "whole_set",
        "specimen_set": "<specimenset-id>",
        "target_specimens": [
            "<specimen-id>"
        ],
        "notes": "",
        "date_time": "2024-03-22T10:30:00Z",
        "target_regions": [
            "<anatomicalregion-id>"
        ],
        "equipment": [
            "<equipment-id>"
        ],
        "protocol": "<protocol-id>",
        "licenses": [
            "<license-id>"
        ],
        "details": {
            "...": "see the schema of the selected type"
        },
        "type_schema_version": "set by the server",
        "updated_at": "2024-03-22T10:30:00Z",
        "created_at": "2024-03-22T10:30:00Z",
        "materials": null,
        "stages": null
    }
}

Change

  • Allowed portals: private
  • Request method: PATCH
  • URL: https://www.brainstem.org/api/private/modules/specimenprocedure/<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: 200 OK; 400 Bad request; 403 Not allowed; 404 Not found

Use example (Python API tool)

resp = client.save('specimenprocedure', id='<id>', data={"notes": "new value"})

Use example (MATLAB API tool)

client.save(struct('id', '<id>', 'notes', 'new value'), 'specimenprocedure', 'method', 'patch');

Delete

  • Allowed portals: private
  • Request method: DELETE
  • URL: https://www.brainstem.org/api/private/modules/specimenprocedure/<id>/
  • Responses: 204 Deleted; 400 Still referenced by other records; 403 Not allowed; 404 Not found

Use example (Python API tool)

resp = client.delete('specimenprocedure', id='<id>')

Use example (MATLAB API tool)

client.delete('<id>', 'specimenprocedure');

Custom actions

ActionRequest
apply_material_templatePOST /api/private/modules/specimenprocedure/<id>/apply-material-template/
material_optionsGET /api/private/modules/specimenprocedure/material-options/
materialsGET, PUT /api/private/modules/specimenprocedure/<id>/materials/

materials returns the ordered material usage rows of the specimen procedure; PUT replaces them as a whole. apply-material-template copies the rows of a material usage template. material-options lists the material roles and allowed sources of a type (?type=<Type>).

Data model

The fields are described for the web forms on the Specimen procedure data model page.