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

Raw ↑
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