openapi: 3.0.1
info:
title: Labguru API
description: "Labguru API is a JSON / REST based API, get started by reviewing the\
\ documentation below or code samples.
\n Join our dedicated [Slack\
\ channel](https://join.slack.com/t/labgurus/shared_invite/zt-199glfagl-QZQ_bKl7vLAi8CQSuNrRug)\n\
\ to be in direct contact with our API team and be informed about the latest\
\ updates.
\n ***[API introduction and overview](https://help.labguru.com/en/articles/6149483-api-introduction-and-overview)***"
version: v2
components:
schemas:
Unauthorized:
type: object
properties:
message:
type: string
example: You are not authorized to perform this action
NotFound:
type: object
properties:
error:
type: string
example: Resource not found
createExperimentBaseRequest:
type: object
required:
- token
properties:
token:
type: string
example: YOUR TOKEN IS HERE
item:
type: object
required:
- title
- project_id
- sections
properties:
title:
type: string
description: The title of the experiment.
project_id:
type: integer
description: The ID of the project that will contain the experiment
sections:
type: array
description: A list of sections to be added, each with its own set of
elements
items:
type: object
properties:
title:
type: string
description: The title of the section.
example: My Custom Section
elements:
type: array
description: An array of elements within the section, each containing
type-specific data.
items:
type: object
properties:
element_type:
type: string
description: 'The type of element. Valid element types include:
- samples
- equipment
- code
- compound
- reaction
- text
- steps
- excel
- plate
'
example: text
data:
type: string
description: The content or data of the element.
example: This is a sample text data
required:
- title
CreateExperimentExistingFolder:
allOf:
- $ref: '#/components/schemas/createExperimentBaseRequest'
- type: object
properties:
item:
type: object
properties:
milestone_id:
type: integer
description: "The ID of the existing milestone (folder) that will\
\ contain the experiment.\n Required\
\ if milestone name is not provided."
required:
- milestone_id
CreateExperimentNewFolder:
allOf:
- $ref: '#/components/schemas/createExperimentBaseRequest'
- type: object
properties:
item:
type: object
properties:
milestone_name:
type: string
description: "The name of a new milestone (folder) to be created for\
\ the experiment.\n Required if milestone_id\
\ is not provided."
required:
- milestone_name
paths:
/api/v2/instruments:
get:
summary: List all equipment in your account
tags:
- Equipment
description: 'List all equipment.
'
parameters:
- name: token
in: query
required: true
schema:
type: string
- name: page
in: query
description: "Specifies the page number to retrieve.\n Defaults to 1\
\ if not provided."
schema:
type: integer
- name: page_size
in: query
description: "Defines the number of items to be returned per page.\n \
\ If not specified, a default value defined by the system will be used."
schema:
type: integer
responses:
'200':
description: OK
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: You are not authorized to perform this action.
/api/v2/experiments/copy_section:
post:
summary: Copy section to an experiment
tags:
- Experiments
description: 'This endpoint copies a section to an experiment.
Sections can be copied only from experiments or protocols.
'
parameters: []
responses:
'200':
description: Created
content:
application/json:
schema:
type: object
description: Successfully copied the sections.
properties:
ids:
type: array
items:
type: integer
description: A list of IDs representing the section IDs of the
newly copied sections within the target experiment
example:
- 1683
- 1684
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Sections can be copied only from experiments or protocols
requestBody:
content:
application/json:
schema:
type: object
required:
- token
properties:
token:
type: string
example: YOUR TOKEN IS HERE
item:
type: object
required:
- item_id
- section_id
properties:
item_id:
type: integer
description: The ID of the experiment where the section will
be copied to
section_id:
type: array
items:
type: integer
description: A list of section IDs from the source entity that
are to be copied
example:
- 1671
- 1676
required: true
/api/v2/experiments:
post:
summary: Create a new custom experiment
tags:
- Experiments
description: 'This endpoint creates a new experiment within a specified project,
including dynamically adding sections and elements to the experiment.
You can specify an existing folder by its ID or create a new one by providing
a folder name.
**Note:**
- Use `milestone_id` to place the experiment in an existing folder.
- Provide `milestone_name` to create a new folder for this experiment.
Ensure only one of these options is used per request.
'
parameters: []
responses:
'201':
description: OK
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: 'Validation failed: Title cannot be blank'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
requestBody:
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CreateExperimentExistingFolder'
- $ref: '#/components/schemas/CreateExperimentNewFolder'
required: true
get:
summary: List all experiments in your account
tags:
- Experiments
description: 'List all experiments.
'
parameters:
- name: token
in: query
required: true
schema:
type: string
- name: page
in: query
description: "Specifies the page number to retrieve.\n Defaults to\
\ 1 if not provided."
schema:
type: integer
- name: page_size
in: query
description: "Defines the number of items to be returned per page.\n \
\ If not specified, a default value defined by the system will\
\ be used."
schema:
type: integer
- name: to_sign
in: query
description: "Retrieve experiments that require the user's signature.\n \
\ Filters items to only those where the user is expected to\
\ sign and that are currently pending a signature."
schema:
type: boolean
- name: to_witness
in: query
description: "Retrieve experiments that are waiting to be witnessed.\n \
\ Filters items to only those with a pending witness signature\
\ for the current user."
schema:
type: boolean
responses:
'200':
description: OK
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: You are not authorized to perform this action.
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
/api/v2/reports/copy_section:
post:
summary: Copy section to report
tags:
- Reports
description: 'This endpoint copies a section to a report.
Sections can be copied only from experiments or protocols.
'
parameters: []
responses:
'200':
description: Created
content:
application/json:
schema:
type: object
description: Successfully copied the sections.
properties:
ids:
type: array
items:
type: integer
description: A list of IDs representing the section IDs of the
newly copied sections within the target Report
example:
- 1683
- 1684
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Sections can be copied only from experiments or protocols
requestBody:
content:
application/json:
schema:
type: object
required:
- token
properties:
token:
type: string
example: YOUR TOKEN IS HERE
item:
type: object
required:
- item_id
- section_id
properties:
item_id:
type: integer
description: The ID of the report where the section will be
copied to
section_id:
type: array
items:
type: integer
description: A list of section IDs from the source entity that
are to be copied
example:
- 1671
- 1676
required: true
/api/v2/rodent_cages:
get:
summary: List all rodent cages in your account
tags:
- Rodent cages
description: 'List all rodent cages.
'
parameters:
- name: token
in: query
required: true
schema:
type: string
- name: page
in: query
description: "Specifies the page number to retrieve.\n Defaults to 1\
\ if not provided."
schema:
type: integer
- name: page_size
in: query
description: "Defines the number of items to be returned per page.\n \
\ If not specified, a default value defined by the system will\
\ be used."
schema:
type: integer
responses:
'200':
description: OK
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
/api/v2/compound_parent_structures:
get:
summary: List all compound parent structures
tags:
- Compound Parent Structures
description: Returns a list of all compound parent structures.
parameters:
- name: token
in: query
required: true
schema:
type: string
responses:
'200':
description: success
'401':
description: unauthorized
'403':
description: forbidden
'404':
description: not found
/api/v2/compound_parent_structures/{id}:
get:
summary: Get a compound parent structure by ID
tags:
- Compound Parent Structures
description: Returns a single compound parent structure by its ID.
parameters:
- name: token
in: query
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: success
'401':
description: unauthorized
'403':
description: forbidden
'404':
description: not found
/api/v2/compound_parent_structures/{id}: null
put:
summary: Update a compound parent structure by ID
tags:
- Compound Parent Structures
description: Updates a compound parent structure with the specified ID.
parameters:
- name: token
in: query
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
properties:
token:
type: string
example: YOUR TOKEN IS HERE
parent_structure:
type: object
properties:
owner_id:
type: string
description: The ID of the owner
example: '2'
name:
type: string
description: The name of the parent structure
example: Updated Parent Structure Name
responses:
'200':
description: success
content:
application/json:
schema:
type: object
properties:
uuid:
type: string
example: fa0708b0-4dad-4b44-97bc-9284492614d6
id:
type: integer
example: 1
cd_id:
type: integer
example: 1
member_id:
type: integer
example: 7
owner_id:
type: integer
example: 7
updated_at:
type: string
format: date-time
example: '2025-03-16T16:25:17.000+02:00'
created_at:
type: string
format: date-time
example: '2024-11-13T11:13:35.000+02:00'
member:
type: string
nullable: true
description:
type: string
nullable: true
auto_name:
type: string
example: CP-24.0001
cas:
type: string
nullable: true
formula:
type: string
nullable: true
molar_mass:
type: number
nullable: true
density:
type: number
nullable: true
boiling_point:
type: number
nullable: true
melting_point:
type: number
nullable: true
hazards:
type: string
nullable: true
purchasable:
type: boolean
nullable: true
composition:
type: string
example: C (77.21%), Cl (22.79%)
smiles:
type: string
example: C1CCCC2(C1)[ClH]CCCC2
canonical_smiles:
type: string
example: C1CCC2(CC1)CCCC[ClH]2
inchi:
type: string
example: InChI=1S/C10H19Cl/c1-2-6-10(7-3-1)8-4-5-9-11-10/h11H,1-9H2
hba:
type: integer
example: 19
hbd:
type: integer
example: 1
num_hvy_atoms:
type: integer
nullable: true
num_rotors:
type: integer
example: 0
polar_surface_area:
type: string
example: '0.0'
logp:
type: string
example: '3.0'
num_aromatic:
type: integer
example: 0
num_aliphatic:
type: integer
example: 2
chemical_formula:
type: string
example: C10H19Cl
molecular_weight:
type: string
example: '174.0'
sp3:
type: string
example: '1.0'
l5:
type: boolean
example: false
manufacturer:
type: string
nullable: true
web_page:
type: string
nullable: true
image:
type: string
example: /user_assets/61/depictions/1/original/depiction.png
name:
type: string
example: Compound Nov 13 2024, 11:13:35
url:
type: string
example: /biocollections/compounds/1
owner:
type: object
properties:
id:
type: integer
example: 7
name:
type: string
example: Roee Biran
url:
type: string
example: /admin/members/7
location:
type: string
nullable: true
parents:
type: string
nullable: true
catalog_number:
type: string
nullable: true
produce_by:
type: string
nullable: true
price_with_currency:
type: string
nullable: true
units:
type: string
nullable: true
company_id:
type: integer
nullable: true
unit_size_to_display:
type: string
nullable: true
'401':
description: unauthorized
'403':
description: forbidden
'404':
description: not found
'422':
description: unprocessable entity
/api/v2/compound_parent_structures/{id}/compounds:
get:
summary: List compounds for a compound parent structure
tags:
- Compound Parent Structures
description: Returns a list of compounds associated with the specified compound
parent structure.
parameters:
- name: token
in: query
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: success
'401':
description: unauthorized
'403':
description: forbidden
'404':
description: not found