Benchling · AsyncAPI Specification
Benchling Webhooks
Version
View Spec
View on GitHub
Life SciencesBiotechR&DMolecular BiologyLaboratory Information ManagementElectronic Lab NotebookAssay ManagementInventory ManagementSequence ManagementExperiment WorkflowsRESTWebhookAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-15'
method: searched
source: https://benchling.com/api/v3/openapi.yaml (webhooks block, captured verbatim to openapi/benchling-v3-openapi.yaml),
https://docs.benchling.com/docs/events-reference, https://docs.benchling.com/docs/getting-started-with-webhooks
and https://docs.benchling.com/docs/webhook-verification
description: 'Benchling''s event surface, in two parts. (1) App WEBHOOKS: the v3 OpenAPI carries a top-level
`webhooks:` object declaring 14 v3.* events delivered as HTTP POSTs to a Benchling App''s webhook URL,
each with a typed envelope schema. (2) EVENTS: a separate v2.* event stream delivered through Amazon
EventBridge, which customers subscribe to in their own AWS account. Benchling publishes NO AsyncAPI
document for either surface, so this catalog is the machine-readable record; the webhook half is faithful
to the provider''s own OpenAPI `webhooks` block.'
asyncapi:
published: false
note: No AsyncAPI document found on docs.benchling.com, benchling.com, or the github.com/benchling organisation.
The v3 OpenAPI `webhooks` block is the closest machine-readable event contract Benchling ships.
webhooks:
style: HTTP POST to an app-registered URL
declared_in: openapi/benchling-v3-openapi.yaml (top-level `webhooks:` object)
docs: https://docs.benchling.com/docs/getting-started-with-webhooks
subscription: Declared in the Benchling App manifest and scoped to what the app can access; see https://docs.benchling.com/docs/app-manifest-reference
expected_response: Return HTTP 200 to acknowledge receipt.
delivery_note: Webhook Stable Routing (changelog, 2026) keeps a webhook routed to the same app installation
across retries.
security:
signing: ECDSA (elliptic curve) signature over id.timestamp.body
key_distribution: JWKS published per app at https://apps.benchling.com/api/v1/apps/{app_definition_id}/jwks
legacy_key_distribution: https://benchling.com/apps/jwks/{app_installation_id} (Legacy Apps)
key_rotation: Benchling rotates keypairs frequently; re-fetch the JWKS at intervals of no more than
6 hours and never hardcode the values.
headers:
- name: Webhook-Id
description: Unique message identifier; stable across resends of the same message.
- name: Webhook-Timestamp
description: Seconds since epoch when Benchling attempted delivery.
- name: Webhook-Signature
description: Base64-encoded, space-delimited list of signatures.
timestamp_tolerance: 5 minutes (Benchling recommendation)
ip_allowlisting: Benchling sends from a static IP range per tenant; the range is provided by the Benchling
account team rather than published.
docs: https://docs.benchling.com/docs/webhook-verification
count: 14
events:
- event: v3.customEntity.created
summary: CustomEntity created
description: Sent to Benchling Apps subscribed to `v3.customEntity.created` when a CustomEntity they
can access is created.
operationId: CustomEntity.Created
resource: CustomEntity
payload_schema: CustomEntityCreatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.customEntity.updated
summary: CustomEntity updated
description: Sent to Benchling Apps subscribed to `v3.customEntity.updated` when a CustomEntity they
can access is updated. `message.properties` lists the properties that changed.
operationId: CustomEntity.Updated
resource: CustomEntity
payload_schema: CustomEntityUpdatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.dnaOligo.created
summary: DnaOligo created
description: Sent to Benchling Apps subscribed to `v3.dnaOligo.created` when a DnaOligo they can access
is created.
operationId: DnaOligo.Created
resource: DnaOligo
payload_schema: DnaOligoCreatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.dnaOligo.updated
summary: DnaOligo updated
description: Sent to Benchling Apps subscribed to `v3.dnaOligo.updated` when a DnaOligo they can access
is updated. `message.properties` lists the properties that changed.
operationId: DnaOligo.Updated
resource: DnaOligo
payload_schema: DnaOligoUpdatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.dnaSequence.created
summary: DnaSequence created
description: Sent to Benchling Apps subscribed to `v3.dnaSequence.created` when a DnaSequence they
can access is created.
operationId: DnaSequence.Created
resource: DnaSequence
payload_schema: DnaSequenceCreatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.dnaSequence.updated
summary: DnaSequence updated
description: Sent to Benchling Apps subscribed to `v3.dnaSequence.updated` when a DnaSequence they
can access is updated. `message.properties` lists the properties that changed.
operationId: DnaSequence.Updated
resource: DnaSequence
payload_schema: DnaSequenceUpdatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.entry.created
summary: Entry created
description: Sent to Benchling Apps subscribed to `v3.entry.created` when a Entry they can access
is created.
operationId: Entry.Created
resource: Entry
payload_schema: EntryCreatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.project.created
summary: Project created
description: Sent to Benchling Apps subscribed to `v3.project.created` when a Project they can access
is created.
operationId: Project.Created
resource: Project
payload_schema: ProjectCreatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.project.updated
summary: Project updated
description: Sent to Benchling Apps subscribed to `v3.project.updated` when a Project they can access
is updated. `message.properties` lists the properties that changed.
operationId: Project.Updated
resource: Project
payload_schema: ProjectUpdatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.rnaOligo.created
summary: RnaOligo created
description: Sent to Benchling Apps subscribed to `v3.rnaOligo.created` when a RnaOligo they can access
is created.
operationId: RnaOligo.Created
resource: RnaOligo
payload_schema: RnaOligoCreatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.rnaOligo.updated
summary: RnaOligo updated
description: Sent to Benchling Apps subscribed to `v3.rnaOligo.updated` when a RnaOligo they can access
is updated. `message.properties` lists the properties that changed.
operationId: RnaOligo.Updated
resource: RnaOligo
payload_schema: RnaOligoUpdatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.rnaSequence.created
summary: RnaSequence created
description: Sent to Benchling Apps subscribed to `v3.rnaSequence.created` when a RnaSequence they
can access is created.
operationId: RnaSequence.Created
resource: RnaSequence
payload_schema: RnaSequenceCreatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.rnaSequence.updated
summary: RnaSequence updated
description: Sent to Benchling Apps subscribed to `v3.rnaSequence.updated` when a RnaSequence they
can access is updated. `message.properties` lists the properties that changed.
operationId: RnaSequence.Updated
resource: RnaSequence
payload_schema: RnaSequenceUpdatedWebhookEnvelopeV3
expected_response: '200'
- event: v3.run.created
summary: Run created
description: Sent to Benchling Apps subscribed to `v3.run.created` when a Run they can access is created.
operationId: Run.Created
resource: Run
payload_schema: RunCreatedWebhookEnvelopeV3
expected_response: '200'
events:
style: Amazon EventBridge event bus
docs: https://docs.benchling.com/docs/events-getting-started
reference: https://docs.benchling.com/docs/events-reference
transport: Benchling publishes to an EventBridge event bus in the customer AWS account; consumers attach
EventBridge rules and targets (Lambda, SQS, Step Functions).
stability_note: Events follow the same stability guidance as the API — `alpha` and `beta` events can
change; see https://docs.benchling.com/docs/stability
count: 23
events:
- event: v2.assayRun.created
description: Fired when a run is created
resource: assayRun
- event: v2.assayRun.updated.fields
description: Fired when a run's fields are updated
resource: assayRun
- event: v2.automationFileTransform.updated.status.running
description: Fired when an automation file transform changes to `running` status
resource: automationFileTransform
- event: v2.automationFileTransform.updated.status.pending
description: Fired when an automation file transform changes to `pending` status
resource: automationFileTransform
- event: v2.automationFileTransform.updated.status.succeeded
description: Fired when an automation file transform changes to `succeeded` status
resource: automationFileTransform
- event: v2.automationFileTransform.updated.status.failed
description: Fired when an automation file transform changes to `failed` status
resource: automationFileTransform
- event: v2.entity.registered
description: Fired when an entity is registered
resource: entity
- event: v2.entry.created
description: Fired when a notebook entry is created. Only applicable for entries that are not a part
of a Legacy Workflow.
resource: entry
- event: v2.entry.updated.fields
description: Fired when a notebook entry's schema or fields are updated. Only applicable for entries
that are not a part of a Legacy Workflow.
resource: entry
- event: v2.entry.updated.reviewRecord
description: Fired when a notebook entry's reviewRecord is updated. Only applicable for entries that
are not a part of a Legacy Workflow. Not applicable as of yet for the new review process.
resource: entry
- event: v2.request.created
description: Fired when a request is created
resource: request
- event: v2.request.updated.fields
description: Fired when a request's fields are updated
resource: request
- event: v2.request.updated.status
description: Fired when a request's status is updated
resource: request
- event: v2.workflowTaskGroup.created
description: Fired when a workflow task group is created
resource: workflowTaskGroup
- event: v2.workflowTaskGroup.mappingCompleted
description: Fired when a workflow task group completes a batch of mappings. Can fire more than once
per task group
resource: workflowTaskGroup
- event: v2.workflowTaskGroup.updated.watchers
description: Fired when a workflow task group's watchers are updated
resource: workflowTaskGroup
- event: v2.workflowTask.created
description: Fired when a workflow task is created
resource: workflowTask
- event: v2.workflowTask.updated.assignee
description: Fired when a workflow task's assignee is updated
resource: workflowTask
- event: v2.workflowTask.updated.scheduledOn
description: Fired when a workflow task's scheduledOn is updated
resource: workflowTask
- event: v2.workflowTask.updated.status
description: Fired when a workflow task's status is updated
resource: workflowTask
- event: v2.workflowTask.updated.fields
description: Fired when a workflow task's fields are updated
resource: workflowTask
- event: v2.workflowOutput.created
description: Fired when a workflow output is created
resource: workflowOutput
- event: v2.workflowOutput.updated.fields
description: Fired when a workflow output's fields are updated
resource: workflowOutput
summary:
webhook_events: 14
eventbridge_events: 23
asyncapi_documents: 0
signed: true