> This page is for Developer Documentation.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.benchling.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.benchling.com/_mcp/server.

# Overview

The platform is most commonly used for:

* Keeping Benchling in sync with other systems
* Bulk loading and exporting data
* Creating dashboards and charts of Benchling data
* Integrating with instruments in the lab

These activities are accomplished through several different developer tools and
interfaces, as pictured in the high-level architecture diagram below:

![Architecture diagram of the Benchling Developer Platform, showing the REST API, events, warehouse, and Benchling Apps around a central Benchling tenant](/_fern-img/372b1d480156002fc0ae7472bb613d4ae899f0d2cd5211b787cfe4ce8bcc62df.webp)

Each of the top use cases can be accomplished through a variety of these tools, and
our recommended methods are broken out in the use cases below, along with links to
dive deeper into each system. You can also jump to [Key Links](#key-links) to see
everything the developer platform has to offer. If you're building a workflow that
reacts to Benchling changes, start with the
[REST API Reference](/docs/rest-api-reference).

## Accessing the Developer Platform

Each user who needs the Developer Platform must have its access set to "Full" in the
Capability Management tool. To do this, you must be a Tenant Admin: open the Tenant
Admin Console and go to the "Users" tab.

![Tenant Admin Console showing the Users tab](/_fern-img/072b56cc9df82c753df211d375525db6d54442ce2747e5a1f0454342bc23a896.webp)![Capability Management panel with Developer Platform access set to Full](/_fern-img/3664e88c315ea7f8555221b0e7b11a943846aae63e14d9aeaa7f90419913124c.webp)

After getting access, generate your personal user API key on your user settings page. It
also gives you access to the interactive API reference documentation. The
["Setup" section of Getting Started with the API](/docs/getting-started-1#setup)
shows where to find it.

For more on setting up the Developer Platform capability, see the
[help article on accessing the Benchling Developer Platform](https://help.benchling.com/hc/en-us/articles/9714802977805-Access-the-Benchling-Developer-Platform).

## Keeping Benchling in sync with other systems

When integrating Benchling with another system, you typically want a Benchling App
and the REST API:

![Architecture diagram showing a Benchling App mediating between Benchling and an external system over the REST API](/_fern-img/2ccd5130510665b95c66ac78dc78ed3c3864fc31cea98d39fbac383abd700402.webp)

This is primarily because:

* You likely need to both read and write data.
* You likely need the data guaranteed latest, and cannot wait for changes to sync to
  the warehouse.
* You likely need to limit how much data the integration can access.

[Getting Started with Benchling Apps](/docs/getting-started-benchling-apps) covers how
to build this type of app. We highly recommend the
[Python SDK](/docs/getting-started-with-the-sdk) if you're comfortable in Python.

### Advanced: evented apps

To reduce how much polling your app needs to do, or to build a feature that triggers
off actions in Benchling, use Benchling's event delivery system alongside the REST
API. Most integrations should start with the
[REST API Reference](/docs/rest-api-reference) and
[Getting Started with Webhooks](/docs/getting-started-with-webhooks), while
[Getting Started with EventBridge](/docs/events-getting-started) covers the EventBridge
path for architectures that depend on AWS-native routing. The
[Request and Slack integration walkthrough](/docs/example-push-benchling-request-notification-to-slack)
is a worked example of an evented app.

### Advanced: authenticating as any user

If Benchling users interact directly with another system, you might want the changes
they make there reflected in Benchling's audit and activity systems, or want to
leverage Benchling's permissioning system. Making calls as *any* user in Benchling,
not just one as through their API key, requires setting up OIDC authentication
between Benchling and your IDP, described in the
[OIDC section of the Authentication guide](/docs/authentication#openid-connect-oidc).
Note that the [Python SDK](/docs/getting-started-with-the-sdk) does not currently
support OIDC authentication.

## Bulk loading and exporting data

Bulk loading and exporting through developer interfaces comes down to needing the
control that code provides. Benchling's developer interfaces offer several methods for
data ingest and egress; this section gives high-level guidelines rather than an
exhaustive list.

### Data ingest

The REST API is the only developer interface that supports writing data into
Benchling. Even so, your solution could take several forms.

For a script intended to run *once*, or to be run directly by a user, a user API key
is the simplest way to make the calls, and their actions will be accurately
represented in Benchling's audit and activity logs.
[Getting Started with the API](/docs/getting-started-1) covers the setup, and the
[REST API Reference](/docs/rest-api-reference) shows what kinds of data you can write.

For a persistent or long-running application that regularly uploads data, create a
Benchling App so the integration isn't tied to a single user. See
[Getting Started with Benchling Apps](/docs/getting-started-benchling-apps).

Either way, we highly recommend the
[Python SDK](/docs/getting-started-with-the-sdk) if you're comfortable in Python, as
it supports both methods.

Once you've completed the getting started guides, the
[results upload guide](/docs/example-creating-results) walks through a richer example
of writing data through the API.

### Data export

Exporting data is also generally best accomplished through the REST API, again using
a [user API key](/docs/getting-started-1) for one-off scripts and
[Benchling Apps](/docs/getting-started-benchling-apps) for more persistent use cases,
with the [Python SDK](/docs/getting-started-with-the-sdk) if you're comfortable in
Python.

If you're more comfortable in SQL or need very large amounts of data, and the data
doesn't need to be live up to the minute, you can also use the Benchling Data
Warehouse. [Getting Started with the Warehouse](/docs/getting-started) covers how to
get access.

## Creating dashboards and charts of Benchling data

Benchling can visualize data natively in
[Insights](https://help.benchling.com/hc/en-us/articles/9684135542541-Insights-basics),
and also supports other analytics tools through the warehouse connection. The
Benchling Data Warehouse provides a SQL database connection that can be queried in a
variety of ways. Common third-party visualization tools can
[connect directly](/docs/getting-started#connect-using-a-third-party-tool-or-saas) and
query your data out of the box, or you can connect from
[a Jupyter notebook](https://help.benchling.com/hc/en-us/articles/9714803086733-How-to-connect-Jupyter-Python-to-the-warehouse)
and tools like it. [Getting Started with the Warehouse](/docs/getting-started) has
more on getting set up.

Without access to the Benchling Data Warehouse, you can still query your data through
the REST API using your **user API key**. The API is equally accessible from
environments like Jupyter, and especially easy with the
[Python SDK](/docs/getting-started-with-the-sdk). If you're not using Python, you can
make calls directly in your language of choice.
[Getting Started with the API](/docs/getting-started-1) covers the basics.

### Writing back analysis results

Whichever method you use to query the data, writing it back to Benchling is only
possible through the [REST API](/docs/getting-started-1). The
[results upload guide](/docs/example-creating-results) is a worked example.

## Integrating with instruments in the lab

Instruments are a key part of any lab ecosystem. To automate workflows or data
collection, you can use the developer platform to connect Benchling to your
instruments. We generally recommend a Benchling App to represent the instrument
within Benchling:

![Architecture diagram showing a lab instrument writing data into Benchling through a Benchling App](/_fern-img/5c2494e0a07a26bf4f07fb8c0b591eb0c8e2e6589f4ea09456bc5204f30ab302.webp)

You can then permission the app to write data to the appropriate places and track its
activity independently.
[Getting Started with Benchling Apps](/docs/getting-started-benchling-apps) covers how
to set the app up, and the [results upload guide](/docs/example-creating-results)
covers uploading the results to Benchling.

To integrate the instrument with the Notebook, capturing input from a user or
surfacing results in the Notebook UI, you'll need Benchling Connect. The
[lab automation guide](/docs/use-apis-to-process-outputfile-with-lab-automation)
walks through getting instrument files uploaded and processed in the Notebook.

## Key Links

| API                                                                       | Events                                                                                              | Warehouse                                                                                                                                                | Python SDK                                                                         | Benchling Apps                                                                   |
| ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| [Getting Started with the API](/docs/getting-started-1)                   | [REST API Reference](/docs/rest-api-reference)                                                      | [Getting Started with the Warehouse](/docs/getting-started)                                                                                              | [Getting Started with the SDK](/docs/getting-started-with-the-sdk)                 | [Getting Started with Benchling Apps](/docs/getting-started-benchling-apps)      |
| [Example: uploading results to Benchling](/docs/example-creating-results) | [Example: Benchling Requests and Slack](/docs/example-push-benchling-request-notification-to-slack) | [Example: Jupyter Notebook and the warehouse](https://help.benchling.com/hc/en-us/articles/9714803086733-How-to-connect-Jupyter-Python-to-the-warehouse) | [Common SDK interactions and examples](/docs/common-sdk-interactions-and-examples) | [Example app walkthrough](/docs/building-your-first-benchling-app)               |
| [REST API Reference](/docs/rest-api-reference)                            | [Getting Started with Webhooks](/docs/getting-started-with-webhooks)                                | [Warehouse Tables](/docs/warehouse-tables)                                                                                                               | [Browsing the SDK Reference](/docs/browsing-the-sdk-reference)                     | [Managing and Sharing Benchling Apps](/docs/managing-and-sharing-benchling-apps) |