Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/benchling:benchling-unit-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Benchling Unit API
version: 2.0.0
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
description: 'Operations tagged Unit across 2 of this provider''s published API definitions: benchling-openapi.yml, benchling-v3-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: /api/v3
security:
- oAuth: []
- basicApiKeyAuth: []
tags:
- description: 'A Unit is a specific measure of a physical quantity within Benchling''s tenant-specific
unit dictionary, used to capture and convert scientific measurements across the platform.
Each Unit belongs to a `UnitType` (e.g., "Volume" or "Mass") and defines its relationship
to the UnitType''s base unit through a `conversionFactor`. For example, a milliliter unit
would have a conversionFactor of 0.001 relative to a liter base unit. Units are
identified by a human-readable `name` (e.g., "milliliter"), a shorthand `symbol`
(e.g., "mL"), and may have `aliases` for alternate input symbols. Units within the same
UnitType are inter-convertible; cross-dimensional conversions are not supported. Units
appear throughout Benchling wherever measurements are recorded, including inventory
container quantities (see `Measurement`), result fields, and sample properties.'
name: Unit
x-bnch-organization: Benchling
x-displayName: Unit
paths:
/unit:
post:
description: Create Unit.
operationId: Unit.Create
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUnitInput'
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
description: Created
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Create Unit
tags:
- Unit
servers:
- url: /api/v3
/unit/items:
get:
description: List Unit items.
operationId: Unit.List
parameters:
- $ref: '#/components/parameters/archiveReason.anyOf'
- $ref: '#/components/parameters/archived.anyOf'
- $ref: '#/components/parameters/createdAt.gt'
- $ref: '#/components/parameters/createdAt.gte'
- $ref: '#/components/parameters/createdAt.lt'
- $ref: '#/components/parameters/createdAt.lte'
- $ref: '#/components/parameters/id.anyOf'
- $ref: '#/components/parameters/modifiedAt.gt'
- $ref: '#/components/parameters/modifiedAt.gte'
- $ref: '#/components/parameters/modifiedAt.lt'
- $ref: '#/components/parameters/modifiedAt.lte'
- $ref: '#/components/parameters/name.anyOf'
- $ref: '#/components/parameters/name.anyOf.caseSensitive'
- $ref: '#/components/parameters/nextToken'
- $ref: '#/components/parameters/omit'
- $ref: '#/components/parameters/pageSize'
- $ref: '#/components/parameters/returning'
- description: 'Method by which to order results. Valid sorts are: createdAt (created time, oldest first) and modifiedAt (modified time, oldest first). Use :asc or :desc to specify ascending or descending order. Default is modifiedAt:desc.'
in: query
name: sort
schema:
default: modifiedAt:desc
enum:
- createdAt:asc
- createdAt:desc
- modifiedAt:asc
- modifiedAt:desc
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UnitPaginatedList'
description: OK
headers: {}
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
summary: List Unit items
tags:
- Unit
servers:
- url: /api/v3
/unit/{unit_id}:
get:
description: Get a single Unit by ID.
operationId: Unit.Get
parameters:
- description: ID of the Unit.
in: path
name: unit_id
required: true
schema:
type: string
- $ref: '#/components/parameters/returning'
- $ref: '#/components/parameters/omit'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
description: OK
headers: {}
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Get Unit by ID
tags:
- Unit
patch:
description: Update Unit.
operationId: Unit.Update
parameters:
- description: ID of the Unit.
in: path
name: unit_id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateUnitInput'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
description: OK
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Update Unit
tags:
- Unit
servers:
- url: /api/v3
/unit:batch-create:
post:
description: Batch create Unit synchronously in one transaction. Maximum 25 items per request.
operationId: Unit.BatchCreate
requestBody:
content:
application/json:
schema:
additionalProperties: false
properties:
items:
items:
$ref: '#/components/schemas/CreateUnitInput'
maxItems: 25
minItems: 1
type: array
required:
- items
type: object
responses:
'201':
content:
application/json:
schema:
additionalProperties: false
properties:
items:
items:
$ref: '#/components/schemas/Unit'
type: array
required:
- items
type: object
description: Created
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Batch create Unit
tags:
- Unit
servers:
- url: /api/v3
/unit:batch-update:
patch:
description: Batch update Unit synchronously in one transaction. Maximum 25 items per request.
operationId: Unit.BatchUpdate
requestBody:
content:
application/json:
schema:
additionalProperties: false
properties:
items:
items:
$ref: '#/components/schemas/UpdateUnitInputWithPathParams'
maxItems: 25
minItems: 1
type: array
required:
- items
type: object
responses:
'200':
content:
application/json:
schema:
additionalProperties: false
properties:
items:
items:
$ref: '#/components/schemas/Unit'
type: array
required:
- items
type: object
description: OK
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Batch update Unit
tags:
- Unit
servers:
- url: /api/v3
/unit:bulk-create:
post:
description: Bulk create Unit.
operationId: Unit.BulkCreate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BulkImport'
responses:
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/AsyncTaskLink'
description: Task started
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Bulk create Unit
tags:
- Unit
servers:
- url: /api/v3
/unit:bulk-update:
patch:
description: Bulk update Unit.
operationId: Unit.BulkUpdate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BulkImport'
responses:
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/AsyncTaskLink'
description: Task started
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Bulk update Unit
tags:
- Unit
servers:
- url: /api/v3
components:
schemas:
UpdateUnitInputWithPathParams:
additionalProperties: false
properties:
aliases:
description: Alternative abbreviations for this unit, e.g. alternate symbols.
items:
type: string
type: array
archiveReason:
type: string
archived:
type: boolean
id:
type: string
name:
description: The long-form name, e.g. "milliliter".
type: string
symbol:
description: The short-form label, e.g. "mL".
type: string
required:
- id
type: object
Unit:
description: 'A Unit is a specific measure of a physical quantity within Benchling''s tenant-specific
unit dictionary, used to capture and convert scientific measurements across the platform.
Each Unit belongs to a `UnitType` (e.g., "Volume" or "Mass") and defines its relationship
to the UnitType''s base unit through a `conversionFactor`. For example, a milliliter unit
would have a conversionFactor of 0.001 relative to a liter base unit. Units are
identified by a human-readable `name` (e.g., "milliliter"), a shorthand `symbol`
(e.g., "mL"), and may have `aliases` for alternate input symbols. Units within the same
UnitType are inter-convertible; cross-dimensional conversions are not supported. Units
appear throughout Benchling wherever measurements are recorded, including inventory
container quantities (see `Measurement`), result fields, and sample properties.'
properties:
__typename:
type: string
aliases:
description: Any additional short-form labels that should be recognized in input
items:
type: string
type: array
archiveReason:
type:
- 'null'
- string
archived:
type: boolean
conversionFactor:
description: 'Conversion factor relative to the UnitType''s baseUnit. E.g. for a kilometer, the baseUnit is meter
and the conversionFactor is 1000.'
format: decimal
type: string
createdAt:
format: datetime
type:
- 'null'
- string
id:
type: string
modifiedAt:
format: datetime
type:
- 'null'
- string
name:
description: Default long-form identifier, e.g. "meter".
type: string
symbol:
description: Default short-form label, e.g. "m" for meter.
type: string
unitType:
$ref: '#/components/schemas/UnitTypeRef'
description: The unit type this unit belongs to. Units within the same UnitType are inter-convertible.
type: object
GeneralError:
properties:
detail:
type:
- 'null'
- string
- object
instance:
type: string
invalidId:
type: string
status:
type: integer
title:
type:
- 'null'
- string
type:
type: string
required:
- type
- title
- detail
- status
- instance
type: object
UnitTypeRef:
properties:
__typename:
type: string
id:
format: api_id
type: string
type: object
TooManyRequestsError:
properties:
detail:
type:
- 'null'
- string
- object
instance:
type: string
invalidId:
type: string
status:
type: integer
title:
type:
- 'null'
- string
type:
type: string
required:
- type
- title
- detail
- status
- instance
type: object
UpdateUnitInput:
additionalProperties: false
properties:
aliases:
description: Alternative abbreviations for this unit, e.g. alternate symbols.
items:
type: string
type: array
archiveReason:
type: string
archived:
type: boolean
name:
description: The long-form name, e.g. "milliliter".
type: string
symbol:
description: The short-form label, e.g. "mL".
type: string
type: object
UnitPaginatedList:
additionalProperties: false
properties:
items:
items:
$ref: '#/components/schemas/Unit'
type: array
nextToken:
type:
- string
- 'null'
type: object
CreateUnitInput:
additionalProperties: false
properties:
aliases:
description: Alternative abbreviations for this unit, e.g. alternate symbols.
items:
type: string
type: array
conversionFactor:
description: Conversion factor relative to the UnitType's base unit.
format: decimal
type: string
name:
description: The long-form name, e.g. "milliliter".
type: string
symbol:
description: The short-form label, e.g. "mL".
type: string
unitTypeId:
description: The API ID of the UnitType this unit belongs to.
type: string
required:
- name
- symbol
- aliases
- conversionFactor
- unitTypeId
type: object
AsyncTaskLink:
properties:
pollingUri:
format: uri
type: string
taskId:
type: string
type: object
BulkImport:
example:
fileId: scrfile_jdf8BV24kLmN
properties:
fileId:
description: The API ID of the scratch file (`scrfile_XXXXXXXX`) containing the items to import. The referenced file must be a scratch file whose upload has completed successfully.
type: string
required:
- fileId
type: object
InternalServerError:
properties:
detail:
type:
- 'null'
- string
- object
errorId:
type: string
instance:
type: string
status:
type: integer
title:
type:
- 'null'
- string
type:
type: string
required:
- type
- title
- detail
- status
- instance
type: object
UpdateUnitInputWithPathParams_2:
additionalProperties: false
properties:
aliases:
description: Any additional short-form labels that should be recognized in input
items:
type: string
type: array
archiveReason:
type: string
archived:
type: boolean
id:
type: string
name:
type: string
symbol:
type: string
required:
- id
type: object
PrincipalRef:
properties:
__typename:
type: string
id:
format: api_id
type: string
type: object
Unit_2:
description: 'A Unit is a specific measure of a physical quantity within Benchling''s tenant-specific
unit dictionary, used to capture and convert scientific measurements across the platform.
Each Unit belongs to a `UnitType` (e.g., "Volume" or "Mass") and defines its relationship
to the UnitType''s base unit through a `conversionFactor`. For example, a milliliter unit
would have a conversionFactor of 0.001 relative to a liter base unit. Units are
identified by a human-readable `name` (e.g., "milliliter"), a shorthand `symbol`
(e.g., "mL"), and may have `aliases` for alternate input symbols. Units within the same
UnitType are inter-convertible; cross-dimensional conversions are not supported. Units
appear throughout Benchling wherever measurements are recorded, including inventory
container quantities (see `Measurement`), result fields, and sample properties.'
properties:
__typename:
type: string
aliases:
description: Any additional short-form labels that should be recognized in input
items:
type: string
type: array
archiveDatetime:
format: datetime
type:
- 'null'
- string
archiveReason:
type:
- 'null'
- string
archiveUser:
oneOf:
- $ref: '#/components/schemas/PrincipalRef'
- type: 'null'
archived:
type: boolean
conversionFactor:
format: decimal
type: string
createdAt:
format: datetime
type:
- 'null'
- string
id:
type: string
modifiedAt:
format: datetime
type:
- 'null'
- string
name:
type: string
symbol:
type: string
unitType:
$ref: '#/components/schemas/UnitTypeRef'
type: object
GeneralError_2:
properties:
detail:
type:
- 'null'
- string
- object
instance:
type: string
status:
type: integer
title:
type:
- 'null'
- string
type:
type: string
required:
- type
- title
- detail
- status
- instance
type: object
UpdateUnitInput_2:
additionalProperties: false
properties:
aliases:
description: Any additional short-form labels that should be recognized in input
items:
type: string
type: array
archiveReason:
type: string
archived:
type: boolean
name:
type: string
symbol:
type: string
type: object
UnitPaginatedList_2:
additionalProperties: false
properties:
items:
items:
$ref: '#/components/schemas/Unit_2'
type: array
nextToken:
type: string
type: object
CreateUnitInput_2:
additionalProperties: false
properties:
aliases:
description: Any additional short-form labels that should be recognized in input
items:
type: string
type: array
conversionFactor:
format: decimal
type: string
name:
type: string
symbol:
type: string
unitTypeId:
type: string
required:
- name
- symbol
- aliases
- conversionFactor
- unitTypeId
type: object
responses:
InternalServerError:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/InternalServerError'
description: Internal Server Error
BadRequest:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/GeneralError'
description: Bad Request
NotFound:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/GeneralError'
description: Not Found
Forbidden:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/GeneralError'
description: Forbidden
Conflict:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/GeneralError'
description: Conflict
TooManyRequests:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/TooManyRequestsError'
description: Too Many Requests
headers:
Retry-After:
description: Minimum number of seconds to wait before retrying. Only included when the request exceeded a rate limit specific to the caller. Limits shared with other callers, such as tenant-wide limits, omit this header because the wait depends on their traffic.
required: false
schema:
minimum: 1
type: integer
TooManyRequests_2:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/GeneralError_2'
description: Too Many Requests
parameters:
modifiedAt.gte:
description: Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those modified at or after the specified time. e.g. >= 2017-04-30.
in: query
name: modifiedAt.gte
schema:
format: datetime
type: string
createdAt.lte:
description: Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those created at or before the specified time. e.g. <= 2017-04-30.
in: query
name: createdAt.lte
schema:
format: datetime
type: string
omit:
description: Comma-separated list of top-level fields to omit from each returned item. Cannot overlap with returning.
explode: false
in: query
name: omit
schema:
items:
type: string
type: array
modifiedAt.lte:
description: Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those modified at or before the specified time. e.g. <= 2017-04-30.
in: query
name: modifiedAt.lte
schema:
format: datetime
type: string
name.anyOf:
description: Restricts results to those that match any of the specified names. Case insensitive. Warning - this filter can be non-performant due to case insensitivity. Ensure only one name filter is used at a time. Comma-separated list.
explode: false
in: query
name: name.anyOf
schema:
items:
type: string
maxItems: 100
type: array
createdAt.gt:
description: Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those created after the specified time. e.g. > 2017-04-30.
in: query
name: createdAt.gt
schema:
format: datetime
type: string
nextToken:
description: Token for pagination
in: query
name: nextToken
schema:
type: string
name.anyOf.caseSensitive:
description: Restricts results to those that match any of the specified names. Case sensitive. Ensure only one name filter is used at a time. Comma-separated list.
explode: false
in: query
name: name.anyOf.caseSensitive
schema:
items:
type: string
maxItems: 100
type: array
archived.anyOf:
description: If true, returns archived items. If false, returns unarchived items. If both true and false, returns archived and unarchived items. Comma-separated list.
explode: false
in: query
name: archived.anyOf
schema:
items:
type: boolean
maxItems: 2
type: array
modifiedAt.gt:
description: Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those modified after the specified time. e.g. > 2017-04-30.
in: query
name: modifiedAt.gt
schema:
format: datetime
type: string
pageSize:
description: Number of results to return. Defaults to 50, maximum of 100.
in: query
name: pageSize
schema:
type: integer
modifiedAt.lt:
description: Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those modified before the specified time. e.g. < 2017-04-30.
in: query
name: modifiedAt.lt
schema:
format: datetime
type: string
returning:
description: Comma-separated list of top-level fields to include in each returned item. Cannot overlap with omit.
explode: false
in: query
name: returning
schema:
items:
type: string
type: array
createdAt.gte:
description: Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those created at or after the specified time. e.g. >= 2017-04-30.
in: query
name: createdAt.gte
schema:
format: datetime
type: string
archiveReason.anyOf:
description: Restricts items to those with any of the specified archive reasons. Use "NOT_ARCHIVED" to filter for unarchived items. Use "ANY_ARCHIVED" to filter for archived items regardless of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. Comma-separated list.
explode: false
in: query
name: archiveReason.anyOf
schema:
items:
type: string
maxItems: 10
type: array
createdAt.lt:
description: Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those created before the specified time. e.g. < 2017-04-30.
in: query
name: createdAt.lt
schema:
format: datetime
type: string
id.anyOf:
description: Restricts results to those matching any of the specified IDs. Comma-separated list.
explode: false
in: query
name: id.anyOf
schema:
items:
type: string
maxItems: 100
type: array
securitySchemes:
BearerAuth:
description: Use a short-lived V3 API Explorer token.
scheme: bearer
type: http
x-fern-playground-description: Copy a short-lived V3 API Explorer token from the user's settings page
basicApiKeyAuth:
description: Use issued API key for standard access to the API
scheme: basic
type: http
basicClientIdSecretAuth:
description: Auth used as part of client credentials OAuth flow prior to receiving a bearer token.
scheme: basic
type: http
oAuth:
description: OAuth2 Client Credentials flow intended for service access
flows:
clientCredentials:
scopes: {}
tokenUrl: /oauth/token
type: oauth2
x-refined-from:
- benchling-openapi.yml
- benchling-v3-openapi.yaml