Benchling · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Benchling v3 API

10 actions 10 updates documentation extends ../openapi/benchling-v3-openapi.yaml
Generated by API Evangelist Written by API Evangelist tooling for Benchling's API. It is a proposal applied on top of the contract, not a document Benchling publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

descriptionexternalDocscontacttermsOfServicetitle

Targets 10

$.info
$.servers
$
$.components.schemas.GeneralError
$.components.schemas.InternalServerError
$.components.securitySchemes.oAuth
$.components.securitySchemes.basicApiKeyAuth
$.components.parameters.pageSize
$.components.responses.TooManyRequests
$.paths.*.*.parameters

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Benchling v3 API
  version: 1.0.0
extends: ../openapi/benchling-v3-openapi.yaml
x-provenance:
  generated: '2026-08-15'
  method: generated
  source: >-
    Generated by the API Evangelist enrichment pipeline. Captures the facts this
    repo established about the Benchling v3 API that the published spec leaves
    implicit — the real tenant-templated server, the external documentation, the
    contact and licence, the error format, the rate-limit signalling, and the
    absence of an idempotency key. The original spec at
    openapi/benchling-v3-openapi.yaml is never mutated.
actions:
  - target: $.info
    description: >-
      The published spec carries only a title, version and licence. Add the
      description, contact and terms Benchling publishes elsewhere.
    update:
      description: >-
        Benchling's unified v3 REST API — 805 paths and 874 operations spanning
        the electronic lab notebook, registry, inventory, assay results and
        workflow execution. Errors are RFC 9457 problem details
        (application/problem+json). Every operation is tagged with a rate-limit
        tier (x-bnch-rate-limit-tier 1-5). Beta operations on this same base
        path are gated behind the EARLY-ACCESS request header.
      contact:
        name: Benchling Support
        email: support@benchling.com
        url: https://docs.benchling.com/docs/developer-platform-overview
      termsOfService: https://www.benchling.com/agreements-and-terms
  - target: $.servers
    description: >-
      The published spec declares only the relative path "/api/v3", which is not
      resolvable on its own. Benchling is tenant-scoped: every customer has its
      own subdomain, documented at
      https://docs.benchling.com/docs/authentication.
    update:
      - url: https://{tenant}.benchling.com/api/v3
        description: Benchling tenant API host
        variables:
          tenant:
            default: benchling
            description: >-
              Your Benchling tenant subdomain — e.g. yourcompany for
              yourcompany.benchling.com. Enterprise customers must use their own
              company URL.
  - target: $
    description: Add external documentation, absent from the published spec.
    update:
      externalDocs:
        description: Benchling Developer Platform documentation
        url: https://docs.benchling.com/docs/developer-platform-overview
  - target: $.components.schemas.GeneralError
    description: >-
      Name the standard this schema implements so tooling can recognise it as
      RFC 9457 problem details rather than a bespoke envelope.
    update:
      title: Problem Details (RFC 9457)
      description: >-
        RFC 9457 problem detail object, returned as application/problem+json.
        Members type, title, detail, status and instance are all required. See
        errors/benchling-problem-types.yml.
      externalDocs:
        description: RFC 9457 — Problem Details for HTTP APIs
        url: https://www.rfc-editor.org/rfc/rfc9457
  - target: $.components.schemas.InternalServerError
    description: Document the errorId member, which is the value to quote to Benchling support.
    update:
      description: >-
        RFC 9457 problem detail for a 500, extended with an `errorId` member
        that correlates the failure with Benchling's internal logs. Quote it
        when contacting support@benchling.com.
  - target: $.components.securitySchemes.oAuth
    description: >-
      Record that the empty scopes object is deliberate — Benchling has no API
      scopes and authorizes by organization/team/project membership.
    update:
      description: >-
        OAuth 2.0 client credentials flow for Benchling Apps (service
        principals). NOTE: Benchling defines NO OAuth scopes. An app's
        authority is whatever an administrator has granted it by adding it to
        organizations, teams and projects — the same model applied to users. See
        scopes/benchling-scopes.yml.
  - target: $.components.securitySchemes.basicApiKeyAuth
    description: Spell out the empty-password convention that trips up first-time callers.
    update:
      description: >-
        HTTP Basic with the user API key as the USERNAME and an EMPTY password
        (note the trailing colon in `curl -u KEY:`). Requests that fail
        authentication return 401. Keys are rotated from Profile settings.
  - target: $.components.parameters.pageSize
    description: Cross-reference the documented pagination contract.
    update:
      description: >-
        Number of results to return. Defaults to 50, maximum 100. Every list
        endpoint is paginated; continue with the opaque nextToken cursor. See
        conventions/benchling-conventions.yml.
  - target: $.components.responses.TooManyRequests
    description: >-
      Attach the runtime rate-limit signalling an agent needs, which the spec
      does not express.
    update:
      description: >-
        Too Many Requests. Returned when a request-rate limit (60/30s per tenant
        across user keys, 300/30s per app key, 1000/30s per tenant across apps)
        or the dynamic hourly throughput limit is exceeded. Responses carry
        x-rate-limit-limit, x-rate-limit-remaining and x-rate-limit-reset; there
        is NO Retry-After header. Requests refused with 429 are not queued for
        resubmission — retry with exponential backoff plus jitter, capped around
        15 seconds. See rate-limits/benchling-rate-limits.yml.
  - target: $.paths.*.*.parameters
    description: >-
      No idempotency key exists anywhere in this API. Recorded once, as an
      overlay-level fact, rather than injected into 874 operations — a retried
      POST can create a duplicate object.
    update: []
x-notes:
  idempotency: >-
    NOT SUPPORTED. Benchling publishes no Idempotency-Key header and none
    appears in the spec. The documented mitigations are the Batch/Bulk write
    families and 429 backoff.
  webhooks: >-
    The spec's top-level `webhooks` object declares 14 v3.* events. A second,
    separate v2.* event stream is delivered through Amazon EventBridge and is
    not in the OpenAPI at all — see asyncapi/benchling-webhooks.yml.
  rate_limit_tiers: >-
    x-bnch-rate-limit-tier assigns every operation a cost class 1-5 (observed
    distribution: tier 2 = 130, tier 3 = 132, tier 4 = 427, tier 5 = 184). The
    per-tier numbers are not published.