---
title: "Upsert App Definition Version"
method: POST
path: "/api/v3/app-definition/{app_definition_id}:upsert-version"
tags: ["App Definition"]
---

# Upsert App Definition Version

`POST /api/v3/app-definition/{app_definition_id}:upsert-version`

## Request

- Base URL: `https://{tenant_name}.benchling.com`
- URL: `https://{tenant_name}.benchling.com/api/v3/app-definition/{app_definition_id}:upsert-version`
- Auth: HTTP bearer

Create or update a version of this App Definition, identified by its version number. Send name, description, features, message subscriptions, and configuration. Omitting an optional field clears it.

## Path parameters

- `app_definition_id` string, required

## Headers

- `EARLY-ACCESS` string

## Request body

- AppDefinitionUpsertVersionInput
  - `configuration` AppConfigOptionInput[]
    - `configSpec` AppConfigSpecInput, required
      - `elementDefinition` ArrayAppConfigOptionInput[]
        - `configSpec` ArrayElementAppConfigSpecInput, required
          - `enum` AnyType[]
            - unknown
          - `fieldDefinitions` AppConfigFieldDefinitionInput[]
            - `description` string
            - `isMulti` boolean
            - `isRequired` boolean
            - `name` string, required
            - `requiredConfig` boolean
            - `type` 'DNA_SEQUENCE_LINK' | 'AA_SEQUENCE_LINK' | 'CUSTOM_ENTITY_LINK' | 'ENTITY_LINK' | 'MIXTURE_LINK' | 'MOLECULE_LINK' | 'DROPDOWN' | 'PART_LINK' | 'AA_PART_LINK' | 'TRANSLATION_LINK' | 'BLOB_LINK' | 'TEXT' | 'LONG_TEXT' | 'BATCH_LINK' | 'STORAGE_LINK' | 'ENTRY_LINK' | 'ASSAY_REQUEST_LINK' | 'ASSAY_RESULT_LINK' | 'ASSAY_RUN_LINK' | 'BOOLEAN' | 'FLOAT' | 'INTEGER' | 'DATETIME' | 'DATE' | 'JSON'
          - `options` AppConfigDropdownOptionInput[]
            - `description` string
            - `name` string, required
            - `requiredConfig` boolean
          - `output` AppConfigWorkflowTaskSchemaOutputInput
            - `fieldDefinitions` AppConfigFieldDefinitionInput[]
              - …
          - `requiredConfig` boolean
          - `subtype` 'AA_SEQUENCE' | 'CUSTOM_ENTITY' | 'DNA_OLIGO' | 'DNA_SEQUENCE' | 'MIXTURE' | 'MOLECULE' | 'RNA_OLIGO' | 'RNA_SEQUENCE'
          - `type` 'aa_sequence' | 'array' | 'array_element' | 'array_value' | 'assay_result' | 'assay_run' | 'automation_input_generator' | 'automation_output_processor' | 'blob' | 'boolean' | 'box' | 'box_schema' | 'container' | 'container_schema' | 'custom_entity' | 'date' | 'datetime' | 'dna_alignment' | 'dna_oligo' | 'dna_sequence' | 'dropdown' | 'dropdown_option' | 'entity_schema' | 'entry' | 'entry_schema' | 'field' | 'float' | 'folder' | 'integer' | 'instance' | 'json' | 'legacy_request' | 'legacy_request_schema' | 'location' | 'location_schema' | 'mixture' | 'molecule' | 'plate' | 'plate_schema' | 'project' | 'registry' | 'result_schema' | 'rna_oligo' | 'rna_sequence' | 'run_schema' | 'secure_text' | 'text' | 'wf_output_schema_field' | 'workflow_task_schema' | 'workflow_task_status' | 'worklist', required
        - `description` string
        - `name` string, required
      - `enum` AnyType[]
        - unknown
      - `fieldDefinitions` AppConfigFieldDefinitionInput[]
        - `description` string
        - `isMulti` boolean
        - `isRequired` boolean
        - `name` string, required
        - `requiredConfig` boolean
        - `type` 'DNA_SEQUENCE_LINK' | 'AA_SEQUENCE_LINK' | 'CUSTOM_ENTITY_LINK' | 'ENTITY_LINK' | 'MIXTURE_LINK' | 'MOLECULE_LINK' | 'DROPDOWN' | 'PART_LINK' | 'AA_PART_LINK' | 'TRANSLATION_LINK' | 'BLOB_LINK' | 'TEXT' | 'LONG_TEXT' | 'BATCH_LINK' | 'STORAGE_LINK' | 'ENTRY_LINK' | 'ASSAY_REQUEST_LINK' | 'ASSAY_RESULT_LINK' | 'ASSAY_RUN_LINK' | 'BOOLEAN' | 'FLOAT' | 'INTEGER' | 'DATETIME' | 'DATE' | 'JSON'
      - `maxElements` integer
      - `minElements` integer
      - `options` AppConfigDropdownOptionInput[]
        - `description` string
        - `name` string, required
        - `requiredConfig` boolean
      - `output` AppConfigWorkflowTaskSchemaOutputInput
        - `fieldDefinitions` AppConfigFieldDefinitionInput[]
          - `description` string
          - `isMulti` boolean
          - `isRequired` boolean
          - `name` string, required
          - `requiredConfig` boolean
          - `type` 'DNA_SEQUENCE_LINK' | 'AA_SEQUENCE_LINK' | 'CUSTOM_ENTITY_LINK' | 'ENTITY_LINK' | 'MIXTURE_LINK' | 'MOLECULE_LINK' | 'DROPDOWN' | 'PART_LINK' | 'AA_PART_LINK' | 'TRANSLATION_LINK' | 'BLOB_LINK' | 'TEXT' | 'LONG_TEXT' | 'BATCH_LINK' | 'STORAGE_LINK' | 'ENTRY_LINK' | 'ASSAY_REQUEST_LINK' | 'ASSAY_RESULT_LINK' | 'ASSAY_RUN_LINK' | 'BOOLEAN' | 'FLOAT' | 'INTEGER' | 'DATETIME' | 'DATE' | 'JSON'
      - `requiredConfig` boolean
      - `subtype` 'AA_SEQUENCE' | 'CUSTOM_ENTITY' | 'DNA_OLIGO' | 'DNA_SEQUENCE' | 'MIXTURE' | 'MOLECULE' | 'RNA_OLIGO' | 'RNA_SEQUENCE'
      - `type` 'aa_sequence' | 'array' | 'array_element' | 'array_value' | 'assay_result' | 'assay_run' | 'automation_input_generator' | 'automation_output_processor' | 'blob' | 'boolean' | 'box' | 'box_schema' | 'container' | 'container_schema' | 'custom_entity' | 'date' | 'datetime' | 'dna_alignment' | 'dna_oligo' | 'dna_sequence' | 'dropdown' | 'dropdown_option' | 'entity_schema' | 'entry' | 'entry_schema' | 'field' | 'float' | 'folder' | 'integer' | 'instance' | 'json' | 'legacy_request' | 'legacy_request_schema' | 'location' | 'location_schema' | 'mixture' | 'molecule' | 'plate' | 'plate_schema' | 'project' | 'registry' | 'result_schema' | 'rna_oligo' | 'rna_sequence' | 'run_schema' | 'secure_text' | 'text' | 'wf_output_schema_field' | 'workflow_task_schema' | 'workflow_task_status' | 'worklist', required
    - `description` string
    - `name` string, required
  - `description` string
  - `features` AppFeatureSpecInput[]
    - union
      - object: APP_HOMEPAGE variant
        - `type` 'APP_HOMEPAGE', required
        - `featureId` string, required
        - `name` string, required
      - object: ASSAY_RUN variant
        - `type` 'ASSAY_RUN', required
        - `featureId` string, required
        - `name` string, required
      - object: CANVAS variant
        - `type` 'CANVAS', required
        - `featureId` string, required
        - `locations` CanvasFeatureSpecInputLocationsItems[]
        - `name` string, required
  - `messageSubscriptions` AppMessageSubscriptionInput[]
    - `deliveryMethod` 'WEBHOOK' | 'WEBHOOK_INTERNAL', required
    - `type` 'V2_BETA_CANVAS_CREATED' | 'V2_CANVAS_CREATED' | 'V2_CANVAS_USER_INTERACTED' | 'V2_CANVAS_INITIALIZED' | 'V2_APP_ACTIVATE_REQUESTED' | 'V2_APP_DEACTIVATED' | 'V2_APP_INSTALLED' | 'V2_BETA_APP_CONFIGURATION_UPDATED' | 'V2_ASSAY_RUN_CREATED' | 'V2_ASSAY_RUN_UPDATED_FIELDS' | 'V2_ENTITY_REGISTERED' | 'V2_ENTRY_CREATED' | 'V2_ENTRY_UPDATED_FIELDS' | 'V2_ENTRY_UPDATED_REVIEW_RECORD' | 'V2_REQUEST_CREATED' | 'V2_REQUEST_UPDATED_FIELDS' | 'V2_REQUEST_UPDATED_STATUS' | 'V2_WORKFLOW_TASK_GROUP_CREATED' | 'V2_WORKFLOW_TASK_GROUP_MAPPING_COMPLETED' | 'V2_WORKFLOW_TASK_GROUP_UPDATED_WATCHERS' | 'V2_WORKFLOW_TASK_CREATED' | 'V2_WORKFLOW_TASK_UPDATED_ASSIGNEE' | 'V2_WORKFLOW_TASK_UPDATED_SCHEDULED_ON' | 'V2_WORKFLOW_TASK_UPDATED_STATUS' | 'V2_WORKFLOW_TASK_UPDATED_FIELDS' | 'V2_WORKFLOW_OUTPUT_CREATED' | 'V2_WORKFLOW_OUTPUT_UPDATED_FIELDS' | 'V2_AUTOMATION_FILE_TRANSFORM_UPDATED_STATUS_RUNNING' | 'V2_AUTOMATION_FILE_TRANSFORM_UPDATED_STATUS_PENDING' | 'V2_AUTOMATION_FILE_TRANSFORM_UPDATED_STATUS_SUCCEEDED' | 'V2_AUTOMATION_FILE_TRANSFORM_UPDATED_STATUS_FAILED' | 'V3_CUSTOM_ENTITY_CREATED' | 'V3_CUSTOM_ENTITY_UPDATED' | 'V3_DNA_OLIGO_CREATED' | 'V3_DNA_OLIGO_UPDATED' | 'V3_DNA_SEQUENCE_CREATED' | 'V3_DNA_SEQUENCE_UPDATED' | 'V3_ENTRY_CREATED' | 'V3_PROJECT_CREATED' | 'V3_PROJECT_UPDATED' | 'V3_RNA_OLIGO_CREATED' | 'V3_RNA_OLIGO_UPDATED' | 'V3_RNA_SEQUENCE_CREATED' | 'V3_RNA_SEQUENCE_UPDATED', required
  - `name` string, required
  - `versionNumber` string, required

## Response `200`

OK

- AppDefinitionVersion: A specific version of an `AppDefinition`, containing the app's name, description, features, message subscriptions, and configuration schema. Versions allow apps to evolve while maintaining compatibility with existing installations. The publicationState controls visibility to other tenants.
  - `__typename` string
  - `allowList` TenantInfo[]
    - `__typename` string
    - `id` string
    - `name` string, nullable
  - `appDefinition` AppDefinitionRef
    - `__typename` string
    - `id` string, api_id
  - `configuration` AppConfigOption[]
    - `__typename` string
    - `configSpec` union: A union of all configuration specification types that define what kind of values an app configuration field can accept.
      - object: Specifies that an app configuration field should accept an array of values.
        - `__typename` string, required
        - `elementDefinition` ArrayAppConfigOption[]: Defines the named config options allowed within this array and their type constraints.
          - `__typename` string
          - `configSpec` union: A union of configuration specification types valid as elements within an array-type configuration field. Same as AppConfigSpec but excludes ArrayAppConfigSpec to prevent nested arrays.
            - object: Specifies that an app configuration field should accept a boolean value.
              - …
            - object: Specifies that an app configuration field should accept a date value.
              - …
            - object: Specifies that an app configuration field should accept a datetime value.
              - …
            - object: Specifies that an app configuration field should be a dropdown with predefined options.
              - …
            - object: Specifies that an app configuration field should reference an entity schema. Kept separate from SchemaAppConfigSpec because it carries a subtype constraint.
              - …
            - object: Specifies that an app configuration field should accept a floating-point number.
              - …
            - object: Specifies that an app configuration field should accept an integer value.
              - …
            - object: Specifies that an app configuration field should accept a JSON value.
              - …
            - object: Specifies that an app configuration field should reference a Benchling object instance. The type field identifies the kind of object required, matching the BenchlingAppType values used in app manifests (e.g. dna_sequence, folder, registry). Covers all instance reference types with no additional spec constraints beyond requiredConfig. For schema references use SchemaAppConfigSpec or EntitySchemaAppConfigSpec.
              - …
            - object: Specifies that an app configuration field should reference one of the schema types that share a common structure: container_schema, plate_schema, location_schema, box_schema, run_schema, result_schema, legacy_request_schema, or entry_schema. The type field identifies which schema kind is required. For entity_schema use EntitySchemaAppConfigSpec; for workflow_task_schema use WorkflowTaskSchemaAppConfigSpec.
              - …
            - object: Specifies that an app configuration field should accept secure (encrypted) text. Used for sensitive data like API keys or credentials.
              - …
            - object: Specifies that an app configuration field should accept a text string.
              - …
            - object: Specifies that an app configuration field should reference a workflow task schema. Kept separate from SchemaAppConfigSpec because it supports output field definitions.
              - …
          - `description` string, nullable
          - `name` string
        - `maxElements` integer, nullable: Maximum number of elements allowed in the array (1-500); null means no maximum.
        - `minElements` integer, nullable: Minimum number of elements allowed in the array (0-500); null means no minimum.
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should accept a boolean value.
        - `__typename` string, required
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should accept a date value.
        - `__typename` string, required
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should accept a datetime value.
        - `__typename` string, required
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should be a dropdown with predefined options.
        - `__typename` string, required
        - `options` AppConfigDropdownOption[], nullable
          - `__typename` string
          - `description` string, nullable
          - `name` string
          - `requiredConfig` boolean, nullable
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should reference an entity schema. Kept separate from SchemaAppConfigSpec because it carries a subtype constraint.
        - `__typename` string, required
        - `fieldDefinitions` AppConfigFieldDefinition[], nullable
          - `__typename` string
          - `description` string, nullable
          - `isMulti` boolean, nullable: Whether the field must be multi-valued — null means either true or false is acceptable.
          - `isRequired` boolean, nullable: Whether the field must be required — null means either true or false is acceptable.
          - `name` string
          - `requiredConfig` boolean, nullable
          - `type` 'DNA_SEQUENCE_LINK' | 'AA_SEQUENCE_LINK' | 'CUSTOM_ENTITY_LINK' | 'ENTITY_LINK' | 'MIXTURE_LINK' | 'MOLECULE_LINK' | 'DROPDOWN' | 'PART_LINK' | 'AA_PART_LINK' | 'TRANSLATION_LINK' | 'BLOB_LINK' | 'TEXT' | 'LONG_TEXT' | 'BATCH_LINK' | 'STORAGE_LINK' | 'ENTRY_LINK' | 'ASSAY_REQUEST_LINK' | 'ASSAY_RESULT_LINK' | 'ASSAY_RUN_LINK' | 'BOOLEAN' | 'FLOAT' | 'INTEGER' | 'DATETIME' | 'DATE' | 'JSON': Type constraint for the field — null means any type is acceptable.
        - `requiredConfig` boolean, nullable
        - `subtype` 'AA_SEQUENCE' | 'CUSTOM_ENTITY' | 'DNA_OLIGO' | 'DNA_SEQUENCE' | 'MIXTURE' | 'MOLECULE' | 'RNA_OLIGO' | 'RNA_SEQUENCE': Optional subtype constraint — if present, the referenced schema must be of this entity type (e.g. DNA_SEQUENCE, AA_SEQUENCE).
      - object: Specifies that an app configuration field should accept a floating-point number.
        - `__typename` string, required
        - `enum` number[], nullable: Optional enum constraint — if present, the value must be one of these floats.
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should accept an integer value.
        - `__typename` string, required
        - `enum` integer[], nullable: Optional enum constraint — if present, the value must be one of these integers.
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should accept a JSON value.
        - `__typename` string, required
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should reference a Benchling object instance. The type field identifies the kind of object required, matching the BenchlingAppType values used in app manifests (e.g. dna_sequence, folder, registry). Covers all instance reference types with no additional spec constraints beyond requiredConfig. For schema references use SchemaAppConfigSpec or EntitySchemaAppConfigSpec.
        - `__typename` string, required
        - `requiredConfig` boolean, nullable
        - `type` 'BOX_SCHEMA' | 'CONTAINER_SCHEMA' | 'ENTRY_SCHEMA' | 'LEGACY_REQUEST_SCHEMA' | 'LOCATION_SCHEMA' | 'PLATE_SCHEMA' | 'RESULT_SCHEMA' | 'RUN_SCHEMA' | 'WORKFLOW_TASK_SCHEMA' | 'AA_SEQUENCE' | 'ASSAY_RESULT' | 'ASSAY_RUN' | 'AUTOMATION_INPUT_GENERATOR' | 'AUTOMATION_OUTPUT_PROCESSOR' | 'BLOB' | 'BOX' | 'CONTAINER' | 'CUSTOM_ENTITY' | 'DNA_ALIGNMENT' | 'DNA_OLIGO' | 'DNA_SEQUENCE' | 'DROPDOWN' | 'DROPDOWN_OPTION' | 'ENTRY' | 'FIELD' | 'FOLDER' | 'LEGACY_REQUEST' | 'LOCATION' | 'MIXTURE' | 'MOLECULE' | 'PLATE' | 'PROJECT' | 'REGISTRY' | 'RNA_OLIGO' | 'RNA_SEQUENCE' | 'WORKFLOW_TASK_STATUS' | 'WORKLIST'
      - object: Specifies that an app configuration field should reference one of the schema types that share a common structure: container_schema, plate_schema, location_schema, box_schema, run_schema, result_schema, legacy_request_schema, or entry_schema. The type field identifies which schema kind is required. For entity_schema use EntitySchemaAppConfigSpec; for workflow_task_schema use WorkflowTaskSchemaAppConfigSpec.
        - `__typename` string, required
        - `fieldDefinitions` AppConfigFieldDefinition[], nullable
          - `__typename` string
          - `description` string, nullable
          - `isMulti` boolean, nullable: Whether the field must be multi-valued — null means either true or false is acceptable.
          - `isRequired` boolean, nullable: Whether the field must be required — null means either true or false is acceptable.
          - `name` string
          - `requiredConfig` boolean, nullable
          - `type` 'DNA_SEQUENCE_LINK' | 'AA_SEQUENCE_LINK' | 'CUSTOM_ENTITY_LINK' | 'ENTITY_LINK' | 'MIXTURE_LINK' | 'MOLECULE_LINK' | 'DROPDOWN' | 'PART_LINK' | 'AA_PART_LINK' | 'TRANSLATION_LINK' | 'BLOB_LINK' | 'TEXT' | 'LONG_TEXT' | 'BATCH_LINK' | 'STORAGE_LINK' | 'ENTRY_LINK' | 'ASSAY_REQUEST_LINK' | 'ASSAY_RESULT_LINK' | 'ASSAY_RUN_LINK' | 'BOOLEAN' | 'FLOAT' | 'INTEGER' | 'DATETIME' | 'DATE' | 'JSON': Type constraint for the field — null means any type is acceptable.
        - `requiredConfig` boolean, nullable
        - `type` 'BOX_SCHEMA' | 'CONTAINER_SCHEMA' | 'ENTRY_SCHEMA' | 'LEGACY_REQUEST_SCHEMA' | 'LOCATION_SCHEMA' | 'PLATE_SCHEMA' | 'RESULT_SCHEMA' | 'RUN_SCHEMA' | 'WORKFLOW_TASK_SCHEMA' | 'AA_SEQUENCE' | 'ASSAY_RESULT' | 'ASSAY_RUN' | 'AUTOMATION_INPUT_GENERATOR' | 'AUTOMATION_OUTPUT_PROCESSOR' | 'BLOB' | 'BOX' | 'CONTAINER' | 'CUSTOM_ENTITY' | 'DNA_ALIGNMENT' | 'DNA_OLIGO' | 'DNA_SEQUENCE' | 'DROPDOWN' | 'DROPDOWN_OPTION' | 'ENTRY' | 'FIELD' | 'FOLDER' | 'LEGACY_REQUEST' | 'LOCATION' | 'MIXTURE' | 'MOLECULE' | 'PLATE' | 'PROJECT' | 'REGISTRY' | 'RNA_OLIGO' | 'RNA_SEQUENCE' | 'WORKFLOW_TASK_STATUS' | 'WORKLIST'
      - object: Specifies that an app configuration field should accept secure (encrypted) text. Used for sensitive data like API keys or credentials.
        - `__typename` string, required
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should accept a text string.
        - `__typename` string, required
        - `enum` string[], nullable: Optional enum constraint — if present, the value must be one of these strings.
        - `requiredConfig` boolean, nullable
      - object: Specifies that an app configuration field should reference a workflow task schema. Kept separate from SchemaAppConfigSpec because it supports output field definitions.
        - `__typename` string, required
        - `fieldDefinitions` AppConfigFieldDefinition[], nullable
          - `__typename` string
          - `description` string, nullable
          - `isMulti` boolean, nullable: Whether the field must be multi-valued — null means either true or false is acceptable.
          - `isRequired` boolean, nullable: Whether the field must be required — null means either true or false is acceptable.
          - `name` string
          - `requiredConfig` boolean, nullable
          - `type` 'DNA_SEQUENCE_LINK' | 'AA_SEQUENCE_LINK' | 'CUSTOM_ENTITY_LINK' | 'ENTITY_LINK' | 'MIXTURE_LINK' | 'MOLECULE_LINK' | 'DROPDOWN' | 'PART_LINK' | 'AA_PART_LINK' | 'TRANSLATION_LINK' | 'BLOB_LINK' | 'TEXT' | 'LONG_TEXT' | 'BATCH_LINK' | 'STORAGE_LINK' | 'ENTRY_LINK' | 'ASSAY_REQUEST_LINK' | 'ASSAY_RESULT_LINK' | 'ASSAY_RUN_LINK' | 'BOOLEAN' | 'FLOAT' | 'INTEGER' | 'DATETIME' | 'DATE' | 'JSON': Type constraint for the field — null means any type is acceptable.
        - `output` AppConfigWorkflowTaskSchemaOutput: Defines the output field structure for a workflow task schema configuration.
          - `__typename` string
          - `fieldDefinitions` AppConfigFieldDefinition[], nullable
            - `__typename` string
            - `description` string, nullable
            - `isMulti` boolean, nullable: Whether the field must be multi-valued — null means either true or false is acceptable.
            - `isRequired` boolean, nullable: Whether the field must be required — null means either true or false is acceptable.
            - `name` string
            - `requiredConfig` boolean, nullable
            - `type` 'DNA_SEQUENCE_LINK' | 'AA_SEQUENCE_LINK' | 'CUSTOM_ENTITY_LINK' | 'ENTITY_LINK' | 'MIXTURE_LINK' | 'MOLECULE_LINK' | 'DROPDOWN' | 'PART_LINK' | 'AA_PART_LINK' | 'TRANSLATION_LINK' | 'BLOB_LINK' | 'TEXT' | 'LONG_TEXT' | 'BATCH_LINK' | 'STORAGE_LINK' | 'ENTRY_LINK' | 'ASSAY_REQUEST_LINK' | 'ASSAY_RESULT_LINK' | 'ASSAY_RUN_LINK' | 'BOOLEAN' | 'FLOAT' | 'INTEGER' | 'DATETIME' | 'DATE' | 'JSON': Type constraint for the field — null means any type is acceptable.
        - `requiredConfig` boolean, nullable
    - `description` string, nullable
    - `name` string
  - `createdAt` string, datetime
  - `description` string, nullable
  - `features` AppFeatureSpec[]
    - union: A union of all feature types that can be defined for a Benchling App, including canvas embeds, assay run integrations, and homepage features.
      - object: Defines a homepage feature for a Benchling App, providing a dedicated landing page within the Benchling application for the app's functionality.
        - `__typename` string, required
        - `featureId` string
        - `name` string
      - object: Defines an assay run feature for a Benchling App, allowing the app to process or generate lab automation run data.
        - `__typename` string, required
        - `featureId` string
        - `name` string
      - object: Defines a canvas feature for a Benchling App, which provides an embedded UI surface within entries or templates. Canvases allow apps to render custom interactive content.
        - `__typename` string, required
        - `featureId` string
        - `locations` CanvasFeatureSpecLocationsItems[], nullable
        - `name` string
  - `id` string
  - `messageSubscriptions` AppMessageSubscription[]
    - `__typename` string
    - `deliveryMethod` 'WEBHOOK' | 'WEBHOOK_INTERNAL'
    - `type` 'V2_BETA_CANVAS_CREATED' | 'V2_CANVAS_CREATED' | 'V2_CANVAS_USER_INTERACTED' | 'V2_CANVAS_INITIALIZED' | 'V2_APP_ACTIVATE_REQUESTED' | 'V2_APP_DEACTIVATED' | 'V2_APP_INSTALLED' | 'V2_BETA_APP_CONFIGURATION_UPDATED' | 'V2_ASSAY_RUN_CREATED' | 'V2_ASSAY_RUN_UPDATED_FIELDS' | 'V2_ENTITY_REGISTERED' | 'V2_ENTRY_CREATED' | 'V2_ENTRY_UPDATED_FIELDS' | 'V2_ENTRY_UPDATED_REVIEW_RECORD' | 'V2_REQUEST_CREATED' | 'V2_REQUEST_UPDATED_FIELDS' | 'V2_REQUEST_UPDATED_STATUS' | 'V2_WORKFLOW_TASK_GROUP_CREATED' | 'V2_WORKFLOW_TASK_GROUP_MAPPING_COMPLETED' | 'V2_WORKFLOW_TASK_GROUP_UPDATED_WATCHERS' | 'V2_WORKFLOW_TASK_CREATED' | 'V2_WORKFLOW_TASK_UPDATED_ASSIGNEE' | 'V2_WORKFLOW_TASK_UPDATED_SCHEDULED_ON' | 'V2_WORKFLOW_TASK_UPDATED_STATUS' | 'V2_WORKFLOW_TASK_UPDATED_FIELDS' | 'V2_WORKFLOW_OUTPUT_CREATED' | 'V2_WORKFLOW_OUTPUT_UPDATED_FIELDS' | 'V2_AUTOMATION_FILE_TRANSFORM_UPDATED_STATUS_RUNNING' | 'V2_AUTOMATION_FILE_TRANSFORM_UPDATED_STATUS_PENDING' | 'V2_AUTOMATION_FILE_TRANSFORM_UPDATED_STATUS_SUCCEEDED' | 'V2_AUTOMATION_FILE_TRANSFORM_UPDATED_STATUS_FAILED' | 'V3_CUSTOM_ENTITY_CREATED' | 'V3_CUSTOM_ENTITY_UPDATED' | 'V3_DNA_OLIGO_CREATED' | 'V3_DNA_OLIGO_UPDATED' | 'V3_DNA_SEQUENCE_CREATED' | 'V3_DNA_SEQUENCE_UPDATED' | 'V3_ENTRY_CREATED' | 'V3_PROJECT_CREATED' | 'V3_PROJECT_UPDATED' | 'V3_RNA_OLIGO_CREATED' | 'V3_RNA_OLIGO_UPDATED' | 'V3_RNA_SEQUENCE_CREATED' | 'V3_RNA_SEQUENCE_UPDATED'
  - `modifiedAt` string, datetime
  - `name` string
  - `publicationState` 'LIMITED_AVAILABILITY' | 'PRIVATE' | 'PUBLIC'
  - `versionNumber` string

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `429`: Too Many Requests
- `500`: Internal Server Error

## Changes

- **2026-11-05** `3873a10bf7b8`: 1 breaking, 1 info
  - removed the enum value `V3_RUN_CREATED` of the request property `messageSubscriptions/items/type`
  - removed the `V3_RUN_CREATED` enum value from the `messageSubscriptions/items/type` response property for the response status `200`

[Operation history](https://skmtc.dev/benchling/apis/benchling-api/changes/api/v3/app-definition/:app_definition_id:upsert-version/post.md)

---

[API](https://skmtc.dev/benchling/apis/benchling-api.md) - [All operations](https://skmtc.dev/benchling/apis/benchling-api/llms.txt) - [OpenAPI document](https://skmtc.dev/benchling/apis/benchling-api/revisions/3873a10bf7b8?raw)
