From 09280322c4f15d4c9a739464eaad261ffec89cdc Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Thu, 31 Oct 2024 15:09:39 -0700 Subject: [PATCH 01/15] add tests that verify actual behavior of generated code --- end_to_end_tests/end_to_end_test_helpers.py | 203 ++++++++++++++++++ .../test_docstrings.py | 163 ++++++++++++++ .../generated_code_live_tests/test_enums.py | 153 +++++++++++++ .../test_property_encoding.py | 154 +++++++++++++ .../generated_code_live_tests/test_unions.py | 62 ++++++ end_to_end_tests/test_end_to_end.py | 182 ++++++++-------- 6 files changed, 819 insertions(+), 98 deletions(-) create mode 100644 end_to_end_tests/end_to_end_test_helpers.py create mode 100644 end_to_end_tests/generated_code_live_tests/test_docstrings.py create mode 100644 end_to_end_tests/generated_code_live_tests/test_enums.py create mode 100644 end_to_end_tests/generated_code_live_tests/test_property_encoding.py create mode 100644 end_to_end_tests/generated_code_live_tests/test_unions.py diff --git a/end_to_end_tests/end_to_end_test_helpers.py b/end_to_end_tests/end_to_end_test_helpers.py new file mode 100644 index 000000000..8a9fe0da5 --- /dev/null +++ b/end_to_end_tests/end_to_end_test_helpers.py @@ -0,0 +1,203 @@ +import importlib +import os +import shutil +from filecmp import cmpfiles, dircmp +from pathlib import Path +import sys +import tempfile +from typing import Any, Callable, Dict, Generator, List, Optional, Set, Tuple + +from attrs import define +import pytest +from click.testing import Result +from typer.testing import CliRunner + +from openapi_python_client.cli import app +from openapi_python_client.utils import snake_case + + +@define +class GeneratedClientContext: + """A context manager with helpers for tests that run against generated client code. + + On entering this context, sys.path is changed to include the root directory of the + generated code, so its modules can be imported. On exit, the original sys.path is + restored, and any modules that were loaded within the context are removed. + """ + + output_path: Path + generator_result: Result + base_module: str + monkeypatch: pytest.MonkeyPatch + old_modules: Optional[Set[str]] = None + + def __enter__(self) -> "GeneratedClientContext": + self.monkeypatch.syspath_prepend(self.output_path) + self.old_modules = set(sys.modules.keys()) + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.monkeypatch.undo() + for module_name in set(sys.modules.keys()) - self.old_modules: + del sys.modules[module_name] + shutil.rmtree(self.output_path, ignore_errors=True) + + def import_module(self, module_path: str) -> Any: + """Attempt to import a module from the generated code.""" + return importlib.import_module(f"{self.base_module}{module_path}") + + +def _run_command( + command: str, + extra_args: Optional[List[str]] = None, + openapi_document: Optional[str] = None, + url: Optional[str] = None, + config_path: Optional[Path] = None, + raise_on_error: bool = True, +) -> Result: + """Generate a client from an OpenAPI document and return the result of the command.""" + runner = CliRunner() + if openapi_document is not None: + openapi_path = Path(__file__).parent / openapi_document + source_arg = f"--path={openapi_path}" + else: + source_arg = f"--url={url}" + config_path = config_path or (Path(__file__).parent / "config.yml") + args = [command, f"--config={config_path}", source_arg] + if extra_args: + args.extend(extra_args) + result = runner.invoke(app, args) + if result.exit_code != 0 and raise_on_error: + raise Exception(result.stdout) + return result + + +def generate_client( + openapi_document: str, + extra_args: List[str] = [], + output_path: str = "my-test-api-client", + base_module: str = "my_test_api_client", + overwrite: bool = True, + raise_on_error: bool = True, +) -> GeneratedClientContext: + """Run the generator and return a GeneratedClientContext for accessing the generated code.""" + full_output_path = Path.cwd() / output_path + if not overwrite: + shutil.rmtree(full_output_path, ignore_errors=True) + args = [ + *extra_args, + "--output-path", + str(full_output_path), + ] + if overwrite: + args = [*args, "--overwrite"] + generator_result = _run_command("generate", args, openapi_document, raise_on_error=raise_on_error) + print(generator_result.stdout) + return GeneratedClientContext( + full_output_path, + generator_result, + base_module, + pytest.MonkeyPatch(), + ) + + +def generate_client_from_inline_spec( + openapi_spec: str, + extra_args: List[str] = [], + filename_suffix: Optional[str] = None, + config: str = "", + base_module: str = "testapi_client", + add_openapi_info = True, + raise_on_error: bool = True, +) -> GeneratedClientContext: + """Run the generator on a temporary file created with the specified contents. + + You can also optionally tell it to create a temporary config file. + """ + if add_openapi_info and not openapi_spec.lstrip().startswith("openapi:"): + openapi_spec += """ +openapi: "3.1.0" +info: + title: "testapi" + description: "my test api" + version: "0.0.1" +""" + + output_path = tempfile.mkdtemp() + file = tempfile.NamedTemporaryFile(suffix=filename_suffix, delete=False) + file.write(openapi_spec.encode('utf-8')) + file.close() + + if config: + config_file = tempfile.NamedTemporaryFile(delete=False) + config_file.write(config.encode('utf-8')) + config_file.close() + extra_args = [*extra_args, "--config", config_file.name] + + generated_client = generate_client( + file.name, + extra_args, + output_path, + base_module, + raise_on_error=raise_on_error, + ) + os.unlink(file.name) + if config: + os.unlink(config_file.name) + + return generated_client + + +def with_generated_client_fixture( + openapi_spec: str, + name: str="generated_client", + config: str="", + extra_args: List[str] = [], +): + """Decorator to apply to a test class to create a fixture inside it called 'generated_client'. + + The fixture value will be a GeneratedClientContext created by calling + generate_client_from_inline_spec(). + """ + def _decorator(cls): + def generated_client(self): + with generate_client_from_inline_spec(openapi_spec, extra_args=extra_args, config=config) as g: + yield g + + setattr(cls, name, pytest.fixture(scope="class")(generated_client)) + return cls + + return _decorator + + +def with_generated_code_import(import_path: str, alias: Optional[str] = None): + """Decorator to apply to a test class to create a fixture from a generated code import. + + The 'generated_client' fixture must also be present. + + If import_path is "a.b.c", then the fixture's value is equal to "from a.b import c", and + its name is "c" unless you specify a different name with the alias parameter. + """ + parts = import_path.split(".") + module_name = ".".join(parts[0:-1]) + import_name = parts[-1] + + def _decorator(cls): + nonlocal alias + + def _func(self, generated_client): + module = generated_client.import_module(module_name) + return getattr(module, import_name) + + alias = alias or import_name + _func.__name__ = alias + setattr(cls, alias, pytest.fixture(scope="class")(_func)) + return cls + + return _decorator + + +def assert_model_decode_encode(model_class: Any, json_data: dict, expected_instance: Any): + instance = model_class.from_dict(json_data) + assert instance == expected_instance + assert instance.to_dict() == json_data diff --git a/end_to_end_tests/generated_code_live_tests/test_docstrings.py b/end_to_end_tests/generated_code_live_tests/test_docstrings.py new file mode 100644 index 000000000..479acb65c --- /dev/null +++ b/end_to_end_tests/generated_code_live_tests/test_docstrings.py @@ -0,0 +1,163 @@ +from typing import Any, List +from end_to_end_tests.end_to_end_test_helpers import ( + with_generated_code_import, + with_generated_client_fixture, +) + + +class DocstringParser: + lines: List[str] + + def __init__(self, item: Any): + self.lines = [line.lstrip() for line in item.__doc__.split("\n")] + + def get_section(self, header_line: str) -> List[str]: + lines = self.lines[self.lines.index(header_line)+1:] + return lines[0:lines.index("")] + + +@with_generated_client_fixture( +""" +paths: {} +components: + schemas: + MyModel: + description: I like this type. + type: object + properties: + reqStr: + type: string + description: This is necessary. + optStr: + type: string + description: This isn't necessary. + undescribedProp: + type: string + required: ["reqStr", "undescribedProp"] +""") +@with_generated_code_import(".models.MyModel") +class TestSchemaDocstrings: + def test_model_description(self, MyModel): + assert DocstringParser(MyModel).lines[0] == "I like this type." + + def test_model_properties(self, MyModel): + assert set(DocstringParser(MyModel).get_section("Attributes:")) == { + "req_str (str): This is necessary.", + "opt_str (Union[Unset, str]): This isn't necessary.", + "undescribed_prop (str):", + } + + +@with_generated_client_fixture( +""" +tags: + - name: service1 +paths: + "/simple": + get: + operationId: getSimpleThing + description: Get a simple thing. + responses: + "200": + description: Success! + content: + application/json: + schema: + $ref: "#/components/schemas/GoodResponse" + tags: + - service1 + post: + operationId: postSimpleThing + description: Post a simple thing. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/Thing" + responses: + "200": + description: Success! + content: + application/json: + schema: + $ref: "#/components/schemas/GoodResponse" + "400": + description: Failure!! + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - service1 + "/simple/{id}/{index}": + get: + operationId: getAttributeByIndex + description: Get a simple thing's attribute. + parameters: + - name: id + in: path + required: true + schema: + type: string + description: Which one. + - name: index + in: path + required: true + schema: + type: integer + - name: fries + in: query + required: false + schema: + type: boolean + description: Do you want fries with that? + responses: + "200": + description: Success! + content: + application/json: + schema: + $ref: "#/components/schemas/GoodResponse" + tags: + - service1 + +components: + schemas: + GoodResponse: + type: object + ErrorResponse: + type: object + Thing: + type: object + description: The thing. +""") +@with_generated_code_import(".api.service1.get_simple_thing.sync", alias="get_simple_thing_sync") +@with_generated_code_import(".api.service1.post_simple_thing.sync", alias="post_simple_thing_sync") +@with_generated_code_import(".api.service1.get_attribute_by_index.sync", alias="get_attribute_by_index_sync") +class TestEndpointDocstrings: + def test_description(self, get_simple_thing_sync): + assert DocstringParser(get_simple_thing_sync).lines[0] == "Get a simple thing." + + def test_response_single_type(self, get_simple_thing_sync): + assert DocstringParser(get_simple_thing_sync).get_section("Returns:") == [ + "GoodResponse", + ] + + def test_response_union_type(self, post_simple_thing_sync): + returns_line = DocstringParser(post_simple_thing_sync).get_section("Returns:")[0] + assert returns_line in ( + "Union[GoodResponse, ErrorResponse]", + "Union[ErrorResponse, GoodResponse]", + ) + + def test_request_body(self, post_simple_thing_sync): + assert DocstringParser(post_simple_thing_sync).get_section("Args:") == [ + "body (Thing): The thing." + ] + + def test_params(self, get_attribute_by_index_sync): + assert DocstringParser(get_attribute_by_index_sync).get_section("Args:") == [ + "id (str): Which one.", + "index (int):", + "fries (Union[Unset, bool]): Do you want fries with that?", + ] diff --git a/end_to_end_tests/generated_code_live_tests/test_enums.py b/end_to_end_tests/generated_code_live_tests/test_enums.py new file mode 100644 index 000000000..5437e1aee --- /dev/null +++ b/end_to_end_tests/generated_code_live_tests/test_enums.py @@ -0,0 +1,153 @@ + +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_model_decode_encode, + with_generated_code_import, + with_generated_client_fixture, +) + + +@with_generated_client_fixture( +""" +paths: {} +components: + schemas: + MyEnum: + type: string + enum: ["a", "B"] + MyIntEnum: + type: integer + enum: [2, 3] + MyModel: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + intEnumProp: {"$ref": "#/components/schemas/MyIntEnum"} + nullableEnumProp: + oneOf: + - {"$ref": "#/components/schemas/MyEnum"} + - type: "null" +""") +@with_generated_code_import(".models.MyEnum") +@with_generated_code_import(".models.MyIntEnum") +@with_generated_code_import(".models.MyModel") +class TestEnumClasses: + def test_enum_classes(self, MyEnum, MyIntEnum): + assert MyEnum.A == MyEnum("a") + assert MyEnum.B == MyEnum("B") + assert MyIntEnum.VALUE_2 == MyIntEnum(2) + assert MyIntEnum.VALUE_3 == MyIntEnum(3) + + def test_enum_prop(self, MyModel, MyEnum, MyIntEnum): + assert_model_decode_encode(MyModel, {"enumProp": "B"}, MyModel(enum_prop=MyEnum.B)) + assert_model_decode_encode(MyModel, {"intEnumProp": 2}, MyModel(int_enum_prop=MyIntEnum.VALUE_2)) + + def test_enum_prop_type(self, MyModel, MyEnum, MyIntEnum): + assert isinstance(MyModel.from_dict({"enumProp": "B"}).enum_prop, MyEnum) + assert isinstance(MyModel.from_dict({"intEnumProp": 2}).int_enum_prop, MyIntEnum) + + def test_nullable_enum_prop(self, MyModel, MyEnum): + assert_model_decode_encode( + MyModel, + {"nullableEnumProp": "B"}, + MyModel(nullable_enum_prop=MyEnum.B), + ) + assert_model_decode_encode( + MyModel, + {"nullableEnumProp": None}, + MyModel(nullable_enum_prop=None), + ) + + def test_invalid_values(self, MyModel): + with pytest.raises(ValueError): + MyModel.from_dict({"enumProp": "c"}) + with pytest.raises(ValueError): + MyModel.from_dict({"enumProp": "A"}) + with pytest.raises(ValueError): + MyModel.from_dict({"enumProp": 2}) + with pytest.raises(ValueError): + MyModel.from_dict({"intEnumProp": 0}) + with pytest.raises(ValueError): + MyModel.from_dict({"intEnumProp": "a"}) + + +@with_generated_client_fixture( +""" +paths: {} +components: + schemas: + MyEnum: + type: string + enum: ["a", "A"] + MyIntEnum: + type: integer + enum: [2, 3] + MyModel: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + intEnumProp: {"$ref": "#/components/schemas/MyIntEnum"} + nullableEnumProp: + oneOf: + - {"$ref": "#/components/schemas/MyEnum"} + - type: "null" +""", + config=""" +literal_enums: true +""", +) +@with_generated_code_import(".models.MyModel") +class TestLiteralEnums: + def test_enum_prop(self, MyModel): + assert_model_decode_encode(MyModel, {"enumProp": "a"}, MyModel(enum_prop="a")) + assert_model_decode_encode(MyModel, {"enumProp": "A"}, MyModel(enum_prop="A")) + assert_model_decode_encode(MyModel, {"intEnumProp": 2}, MyModel(int_enum_prop=2)) + + def test_enum_prop_type(self, MyModel): + assert MyModel.from_dict({"enumProp": "a"}).enum_prop.__class__ is str + assert MyModel.from_dict({"intEnumProp": 2}).int_enum_prop.__class__ is int + + def test_nullable_enum_prop(self, MyModel): + assert_model_decode_encode( + MyModel, + {"nullableEnumProp": "a"}, + MyModel(nullable_enum_prop="a"), + ) + assert_model_decode_encode( + MyModel, + {"nullableEnumProp": None}, + MyModel(nullable_enum_prop=None), + ) + + def test_invalid_values(self, MyModel): + with pytest.raises(TypeError): + MyModel.from_dict({"enumProp": "c"}) + with pytest.raises(TypeError): + MyModel.from_dict({"enumProp": 2}) + with pytest.raises(TypeError): + MyModel.from_dict({"intEnumProp": 0}) + with pytest.raises(TypeError): + MyModel.from_dict({"intEnumProp": "a"}) + + +@with_generated_client_fixture( +""" +paths: {} +components: + schemas: + MyModel: + properties: + mustBeErnest: + const: Ernest +""", +) +@with_generated_code_import(".models.MyModel") +class TestConst: + def test_valid_value(self, MyModel): + assert_model_decode_encode( + MyModel, + {"mustBeErnest": "Ernest"}, + MyModel(must_be_ernest="Ernest"), + ) + + def test_invalid_value(self, MyModel): + with pytest.raises(ValueError): + MyModel.from_dict({"mustBeErnest": "Jack"}) diff --git a/end_to_end_tests/generated_code_live_tests/test_property_encoding.py b/end_to_end_tests/generated_code_live_tests/test_property_encoding.py new file mode 100644 index 000000000..b3f27184e --- /dev/null +++ b/end_to_end_tests/generated_code_live_tests/test_property_encoding.py @@ -0,0 +1,154 @@ + +import datetime +import uuid +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_model_decode_encode, + with_generated_code_import, + with_generated_client_fixture, +) + + +@with_generated_client_fixture( +""" +paths: {} +components: + schemas: + MyModel: + type: object + properties: + req1: {"type": "string"} + req2: {"type": "string"} + opt: {"type": "string"} + required: ["req1", "req2"] + DerivedModel: + allOf: + - $ref: "#/components/schemas/MyModel" + - type: object + properties: + req3: {"type": "string"} + required: ["req3"] +""") +@with_generated_code_import(".models.MyModel") +@with_generated_code_import(".models.DerivedModel") +class TestRequiredAndOptionalProperties: + def test_required_ok(self, MyModel, DerivedModel): + assert_model_decode_encode( + MyModel, + {"req1": "a", "req2": "b"}, + MyModel(req1="a", req2="b"), + ) + assert_model_decode_encode( + DerivedModel, + {"req1": "a", "req2": "b", "req3": "c"}, + DerivedModel(req1="a", req2="b", req3="c"), + ) + + def test_required_and_optional(self, MyModel, DerivedModel): + assert_model_decode_encode( + MyModel, + {"req1": "a", "req2": "b", "opt": "c"}, + MyModel(req1="a", req2="b", opt="c"), + ) + assert_model_decode_encode( + DerivedModel, + {"req1": "a", "req2": "b", "req3": "c", "opt": "d"}, + DerivedModel(req1="a", req2="b", req3="c", opt="d"), + ) + + def test_required_missing(self, MyModel, DerivedModel): + with pytest.raises(KeyError): + MyModel.from_dict({"requiredA": "a"}) + with pytest.raises(KeyError): + MyModel.from_dict({"requiredB": "b"}) + with pytest.raises(KeyError): + DerivedModel.from_dict({"requiredA": "a", "requiredB": "b"}) + + +@with_generated_client_fixture( +""" +paths: {} +components: + schemas: + MyModel: + type: object + properties: + booleanProp: {"type": "boolean"} + stringProp: {"type": "string"} + numberProp: {"type": "number"} + intProp: {"type": "integer"} + arrayOfStringsProp: {"type": "array", "items": {"type": "string"}} + anyObjectProp: {"$ref": "#/components/schemas/AnyObject"} + nullProp: {"type": "null"} + AnyObject: + type: object +""") +@with_generated_code_import(".models.MyModel") +@with_generated_code_import(".models.AnyObject") +class TestBasicModelProperties: + def test_decode_encode(self, MyModel, AnyObject): + json_data = { + "booleanProp": True, + "stringProp": "a", + "numberProp": 1.5, + "intProp": 2, + "arrayOfStringsProp": ["b", "c"], + "anyObjectProp": {"d": 3}, + "nullProp": None, + } + expected_any_object = AnyObject() + expected_any_object.additional_properties = {"d": 3} + assert_model_decode_encode( + MyModel, + json_data, + MyModel( + boolean_prop=True, + string_prop="a", + number_prop=1.5, + int_prop=2, + array_of_strings_prop=["b", "c"], + any_object_prop = expected_any_object, + null_prop=None, + ) + ) + + @pytest.mark.parametrize( + "bad_data", + ["a", True, 2, None], + ) + def test_decode_error_not_object(self, bad_data, MyModel): + with pytest.raises(Exception): + # Exception is overly broad, but unfortunately in the current implementation, the error + # being raised is AttributeError (because it tries to call bad_data.copy()) which isn't + # very meaningful + MyModel.from_dict(bad_data) + + +@with_generated_client_fixture( +""" +paths: {} +components: + schemas: + MyModel: + type: object + properties: + dateProp: {"type": "string", "format": "date"} + dateTimeProp: {"type": "string", "format": "date-time"} + uuidProp: {"type": "string", "format": "uuid"} +""") +@with_generated_code_import(".models.MyModel") +class TestSpecialStringFormats: + def test_date(self, MyModel): + date_value = datetime.date.today() + json_data = {"dateProp": date_value.isoformat()} + assert_model_decode_encode(MyModel, json_data, MyModel(date_prop=date_value)) + + def test_date_time(self, MyModel): + date_time_value = datetime.datetime.now(datetime.timezone.utc) + json_data = {"dateTimeProp": date_time_value.isoformat()} + assert_model_decode_encode(MyModel, json_data, MyModel(date_time_prop=date_time_value)) + + def test_uuid(self, MyModel): + uuid_value = uuid.uuid1() + json_data = {"uuidProp": str(uuid_value)} + assert_model_decode_encode(MyModel, json_data, MyModel(uuid_prop=uuid_value)) diff --git a/end_to_end_tests/generated_code_live_tests/test_unions.py b/end_to_end_tests/generated_code_live_tests/test_unions.py new file mode 100644 index 000000000..a400c0f12 --- /dev/null +++ b/end_to_end_tests/generated_code_live_tests/test_unions.py @@ -0,0 +1,62 @@ + +from end_to_end_tests.end_to_end_test_helpers import ( + assert_model_decode_encode, + with_generated_code_import, + with_generated_client_fixture, +) + + +@with_generated_client_fixture( +""" +paths: {} +components: + schemas: + ThingA: + type: object + properties: + propA: { type: "string" } + required: ["propA"] + ThingB: + type: object + properties: + propB: { type: "string" } + required: ["propB"] + ModelWithUnion: + type: object + properties: + thing: + oneOf: + - $ref: "#/components/schemas/ThingA" + - $ref: "#/components/schemas/ThingB" + thingOrString: + oneOf: + - $ref: "#/components/schemas/ThingA" + - type: string +""") +@with_generated_code_import(".models.ThingA") +@with_generated_code_import(".models.ThingB") +@with_generated_code_import(".models.ModelWithUnion") +class TestOneOf: + def test_disambiguate_objects_via_required_properties(self, ThingA, ThingB, ModelWithUnion): + assert_model_decode_encode( + ModelWithUnion, + {"thing": {"propA": "x"}}, + ModelWithUnion(thing=ThingA(prop_a="x")), + ) + assert_model_decode_encode( + ModelWithUnion, + {"thing": {"propB": "x"}}, + ModelWithUnion(thing=ThingB(prop_b="x")), + ) + + def test_disambiguate_object_and_non_object(self, ThingA, ModelWithUnion): + assert_model_decode_encode( + ModelWithUnion, + {"thingOrString": {"propA": "x"}}, + ModelWithUnion(thing_or_string=ThingA(prop_a="x")), + ) + assert_model_decode_encode( + ModelWithUnion, + {"thingOrString": "x"}, + ModelWithUnion(thing_or_string="x"), + ) diff --git a/end_to_end_tests/test_end_to_end.py b/end_to_end_tests/test_end_to_end.py index a448a0698..5bc3e4700 100644 --- a/end_to_end_tests/test_end_to_end.py +++ b/end_to_end_tests/test_end_to_end.py @@ -7,6 +7,9 @@ from click.testing import Result from typer.testing import CliRunner +from end_to_end_tests.end_to_end_test_helpers import ( + _run_command, generate_client, generate_client_from_inline_spec, +) from openapi_python_client.cli import app @@ -84,50 +87,24 @@ def run_e2e_test( output_path: str = "my-test-api-client", expected_missing: Optional[Set[str]] = None, ) -> Result: - output_path = Path.cwd() / output_path - shutil.rmtree(output_path, ignore_errors=True) - result = generate(extra_args, openapi_document) - gr_path = Path(__file__).parent / golden_record_path - - expected_differences = expected_differences or {} - # Use absolute paths for expected differences for easier comparisons - expected_differences = { - output_path.joinpath(key): value for key, value in expected_differences.items() - } - _compare_directories( - gr_path, output_path, expected_differences=expected_differences, expected_missing=expected_missing - ) - - import mypy.api - - out, err, status = mypy.api.run([str(output_path), "--strict"]) - assert status == 0, f"Type checking client failed: {out}" - - shutil.rmtree(output_path) - return result - + with generate_client(openapi_document, extra_args, output_path) as g: + gr_path = Path(__file__).parent / golden_record_path + + expected_differences = expected_differences or {} + # Use absolute paths for expected differences for easier comparisons + expected_differences = { + g.output_path.joinpath(key): value for key, value in expected_differences.items() + } + _compare_directories( + gr_path, g.output_path, expected_differences=expected_differences, expected_missing=expected_missing + ) -def generate(extra_args: Optional[List[str]], openapi_document: str) -> Result: - """Generate a client from an OpenAPI document and return the path to the generated code""" - _run_command("generate", extra_args, openapi_document) + import mypy.api + out, err, status = mypy.api.run([str(g.output_path), "--strict"]) + assert status == 0, f"Type checking client failed: {out}" -def _run_command(command: str, extra_args: Optional[List[str]] = None, openapi_document: Optional[str] = None, url: Optional[str] = None, config_path: Optional[Path] = None) -> Result: - """Generate a client from an OpenAPI document and return the path to the generated code""" - runner = CliRunner() - if openapi_document is not None: - openapi_path = Path(__file__).parent / openapi_document - source_arg = f"--path={openapi_path}" - else: - source_arg = f"--url={url}" - config_path = config_path or (Path(__file__).parent / "config.yml") - args = [command, f"--config={config_path}", source_arg] - if extra_args: - args.extend(extra_args) - result = runner.invoke(app, args) - if result.exit_code != 0: - raise Exception(result.stdout) - return result + return g.generator_result def test_baseline_end_to_end_3_0(): @@ -168,18 +145,17 @@ def test_literal_enums_end_to_end(): ) ) def test_meta(meta: str, generated_file: Optional[str], expected_file: Optional[str]): - output_path = Path.cwd() / "test-3-1-features-client" - shutil.rmtree(output_path, ignore_errors=True) - generate([f"--meta={meta}"], "3.1_specific.openapi.yaml") - - if generated_file and expected_file: - assert (output_path / generated_file).exists() - assert ( - (output_path / generated_file).read_text() == - (Path(__file__).parent / "metadata_snapshots" / expected_file).read_text() - ) - - shutil.rmtree(output_path) + with generate_client( + "3.1_specific.openapi.yaml", + extra_args=[f"--meta={meta}"], + output_path="test-3-1-features-client", + ) as g: + if generated_file and expected_file: + assert (g.output_path / generated_file).exists() + assert ( + (g.output_path / generated_file).read_text() == + (Path(__file__).parent / "metadata_snapshots" / expected_file).read_text() + ) def test_none_meta(): @@ -238,55 +214,61 @@ def test_bad_url(): @pytest.mark.parametrize("document", ERROR_DOCUMENTS, ids=[path.stem for path in ERROR_DOCUMENTS]) def test_documents_with_errors(snapshot, document): - runner = CliRunner() - output_path = Path.cwd() / "test-documents-with-errors" - shutil.rmtree(output_path, ignore_errors=True) - result = runner.invoke(app, ["generate", f"--path={document}", "--fail-on-warning", f"--output-path={output_path}"]) - assert result.exit_code == 1 - assert result.stdout.replace(str(output_path), "/test-documents-with-errors") == snapshot - shutil.rmtree(output_path, ignore_errors=True) + with generate_client( + document, + extra_args=["--fail-on-warning"], + output_path="test-documents-with-errors", + raise_on_error=False, + ) as g: + result = g.generator_result + assert result.exit_code == 1 + output = result.stdout.replace(str(g.output_path), "/test-documents-with-errors") + assert output == snapshot def test_custom_post_hooks(): - shutil.rmtree(Path.cwd() / "my-test-api-client", ignore_errors=True) - runner = CliRunner() - openapi_document = Path(__file__).parent / "baseline_openapi_3.0.json" config_path = Path(__file__).parent / "custom_post_hooks.config.yml" - result = runner.invoke(app, ["generate", f"--path={openapi_document}", f"--config={config_path}"]) - assert result.exit_code == 1 - assert "this should fail" in result.stdout - shutil.rmtree(Path.cwd() / "my-test-api-client", ignore_errors=True) + with generate_client( + "baseline_openapi_3.0.json", + [f"--config={config_path}"], + raise_on_error=False, + ) as g: + assert g.generator_result.exit_code == 1 + assert "this should fail" in g.generator_result.stdout def test_generate_dir_already_exists(): project_dir = Path.cwd() / "my-test-api-client" if not project_dir.exists(): project_dir.mkdir() - runner = CliRunner() - openapi_document = Path(__file__).parent / "baseline_openapi_3.0.json" - result = runner.invoke(app, ["generate", f"--path={openapi_document}"]) - assert result.exit_code == 1 - assert "Directory already exists" in result.stdout - shutil.rmtree(Path.cwd() / "my-test-api-client", ignore_errors=True) + try: + runner = CliRunner() + openapi_document = Path(__file__).parent / "baseline_openapi_3.0.json" + result = runner.invoke(app, ["generate", f"--path={openapi_document}"]) + assert result.exit_code == 1 + assert "Directory already exists" in result.stdout + finally: + shutil.rmtree(Path.cwd() / "my-test-api-client", ignore_errors=True) @pytest.mark.parametrize( - ("file_name", "content", "expected_error"), + ("suffix", "content", "expected_error"), ( - ("invalid_openapi.yaml", "not a valid openapi document", "Failed to parse OpenAPI document"), - ("invalid_json.json", "Invalid JSON", "Invalid JSON"), - ("invalid_yaml.yaml", "{", "Invalid YAML"), + (".yaml", "not a valid openapi document", "Failed to parse OpenAPI document"), + (".json", "Invalid JSON", "Invalid JSON"), + (".yaml", "{", "Invalid YAML"), ), ids=("invalid_openapi", "invalid_json", "invalid_yaml") ) -def test_invalid_openapi_document(file_name, content, expected_error): - runner = CliRunner() - openapi_document = Path.cwd() / file_name - openapi_document.write_text(content) - result = runner.invoke(app, ["generate", f"--path={openapi_document}"]) - assert result.exit_code == 1 - assert expected_error in result.stdout - openapi_document.unlink() +def test_invalid_openapi_document(suffix, content, expected_error): + with generate_client_from_inline_spec( + content, + filename_suffix=suffix, + add_openapi_info=False, + raise_on_error=False, + ) as g: + assert g.generator_result.exit_code == 1 + assert expected_error in g.generator_result.stdout def test_update_integration_tests(): @@ -294,17 +276,21 @@ def test_update_integration_tests(): source_path = Path(__file__).parent.parent / "integration-tests" temp_dir = Path.cwd() / "test_update_integration_tests" shutil.rmtree(temp_dir, ignore_errors=True) - shutil.copytree(source_path, temp_dir) - config_path = source_path / "config.yaml" - _run_command( - "generate", - extra_args=["--meta=none", "--overwrite", f"--output-path={source_path / 'integration_tests'}"], - url=url, - config_path=config_path - ) - _compare_directories(temp_dir, source_path, expected_differences={}) - import mypy.api - out, err, status = mypy.api.run([str(temp_dir), "--strict"]) - assert status == 0, f"Type checking client failed: {out}" - shutil.rmtree(temp_dir) + try: + shutil.copytree(source_path, temp_dir) + config_path = source_path / "config.yaml" + _run_command( + "generate", + extra_args=["--meta=none", "--overwrite", f"--output-path={source_path / 'integration_tests'}"], + url=url, + config_path=config_path + ) + _compare_directories(temp_dir, source_path, expected_differences={}) + import mypy.api + + out, err, status = mypy.api.run([str(temp_dir), "--strict"]) + assert status == 0, f"Type checking client failed: {out}" + + finally: + shutil.rmtree(temp_dir) From f324f267c039f8f4e31829925279732c8fde29ef Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Tue, 5 Nov 2024 16:01:06 -0800 Subject: [PATCH 02/15] documentation --- .changeset/live_tests.md | 9 +++++ CONTRIBUTING.md | 18 +++++++-- .../generated_code_live_tests/README.md | 37 +++++++++++++++++++ 3 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 .changeset/live_tests.md create mode 100644 end_to_end_tests/generated_code_live_tests/README.md diff --git a/.changeset/live_tests.md b/.changeset/live_tests.md new file mode 100644 index 000000000..e0f419c65 --- /dev/null +++ b/.changeset/live_tests.md @@ -0,0 +1,9 @@ +--- +default: minor +--- + +# New category of end-to-end tests + +There is a new set of tests that generate client code from an API document and then actually import and execute that code. See [`end_to_end_tests/generated_code_live_tests`](./end_to_end_tests/generated_code_live_tests) for more details. + +This does not affect any runtime functionality of openapi-python-client. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 52b67100a..f5eb6095e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -54,17 +54,29 @@ If you think that some of the added code is not testable (or testing it would ad 2. If you're modifying the way an existing feature works, make sure an existing test generates the _old_ code in `end_to_end_tests/golden-record`. You'll use this to check for the new code once your changes are complete. 3. If you're improving an error or adding a new error, add a [unit test](#unit-tests) -#### End-to-end tests +#### End-to-end snapshot tests -This project aims to have all "happy paths" (types of code which _can_ be generated) covered by end to end tests (snapshot tests). In order to check code changes against the previous set of snapshots (called a "golden record" here), you can run `pdm e2e`. To regenerate the snapshots, run `pdm regen`. +This project aims to have all "happy paths" (types of code which _can_ be generated) covered by end-to-end tests. There are two types of these: snapshot tests, and unit tests of generated code. -There are 4 types of snapshots generated right now, you may have to update only some or all of these depending on the changes you're making. Within the `end_to_end_tets` directory: +Snapshot tests verify that the generated code is identical to a previously-committed set of snapshots (called a "golden record" here). They are basically regression tests to catch any unintended changes in the generator output. + +In order to check code changes against the previous set of snapshots (called a "golden record" here), you can run `pdm e2e`. To regenerate the snapshots, run `pdm regen`. + +There are 4 types of snapshots generated right now, you may have to update only some or all of these depending on the changes you're making. Within the `end_to_end_tests` directory: 1. `baseline_openapi_3.0.json` creates `golden-record` for testing OpenAPI 3.0 features 2. `baseline_openapi_3.1.yaml` is checked against `golden-record` for testing OpenAPI 3.1 features (and ensuring consistency with 3.0) 3. `test_custom_templates` are used with `baseline_openapi_3.0.json` to generate `custom-templates-golden-record` for testing custom templates 4. `3.1_specific.openapi.yaml` is used to generate `test-3-1-golden-record` and test 3.1-specific features (things which do not have a 3.0 equivalent) +#### Unit tests of generated code + +These verify the runtime behavior of the generated code, without making assertions about the exact implementation of the code. For instance, they can verify that JSON data is correctly decoded into model class attributes. + +The tests run the generator against a small API spec (defined inline for each test class), and then import and execute the generated code. This can sometimes identify issues with validation logic, module imports, etc., that might be harder to diagnose via the snapshot tests, especially during development of a new feature. + +See [`end_to_end_tests/generated_code_live_tests`](./end_to_end_tests/generated_code_live_tests). + #### Unit tests > **NOTE**: Several older-style unit tests using mocks exist in this project. These should be phased out rather than updated, as the tests are brittle and difficult to maintain. Only error cases should be tests with unit tests going forward. diff --git a/end_to_end_tests/generated_code_live_tests/README.md b/end_to_end_tests/generated_code_live_tests/README.md new file mode 100644 index 000000000..71580f273 --- /dev/null +++ b/end_to_end_tests/generated_code_live_tests/README.md @@ -0,0 +1,37 @@ +## The `generated_code_live_tests` module + +These are end-to-end tests which run the code generator command, but unlike the other tests in `end_to_end_tests`, they are also unit tests _of the behavior of the generated code_. + +Each test class follows this pattern: + +- Use the decorator `@with_generated_client_fixture`, providing an inline API spec (JSON or YAML) that contains whatever schemas/paths/etc. are relevant to this test class. + - The spec can omit the `openapi:` and `info:` blocks, unless those are relevant to the test. + - The decorator creates a temporary file for the inline spec and a temporary directory for the generated code, and runs the client generator. + - It creates a `GeneratedClientContext` object (defined in `end_to_end_test_helpers.py`) to keep track of things like the location of the generated code and the output of the generator command. + - This object is injected into the test class as a fixture called `generated_client`, although most tests will not need to reference the fixture directly. + - `sys.path` is temporarily changed, for the scope of this test class, to allow imports from the generated code. +- Use the decorator `@with_generated_code_import` to make classes or functions from the generated code available to the tests. + - `@with_generated_code_import(".models.MyModel")` would execute `from [client package name].models import MyModel` and inject the imported object into the test class as a fixture called `MyModel`. + - `@with_generated_code_import(".models.MyModel", alias="model1")` would do the same thing, but the fixture would be named `model1`. + - After the test class finishes, these imports are discarded. + +Example: + +```python + +@with_generated_client_fixture( +""" +paths: {} +components: + schemas: + MyModel: + type: object + properties: + stringProp: {"type": "string"} +""") +@with_generated_code_import(".models.MyModel") +class TestSimpleJsonObject: + def test_encoding(MyModel): + instance = MyModel(string_prop="abc") + assert instance.to_dict() == {"stringProp": "abc"} +``` From 6b15783e7a539b46160bea2608b6a8ac770b6def Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Fri, 8 Nov 2024 10:44:56 -0800 Subject: [PATCH 03/15] make assertion error messages work correctly --- end_to_end_tests/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/end_to_end_tests/__init__.py b/end_to_end_tests/__init__.py index 1bf33f63f..8c2224e4a 100644 --- a/end_to_end_tests/__init__.py +++ b/end_to_end_tests/__init__.py @@ -1 +1,4 @@ """ Generate a complete client and verify that it is correct """ +import pytest + +pytest.register_assert_rewrite("end_to_end_tests.end_to_end_test_helpers") From b7d34a779c9b05695c46ff2f7bddc36fcad63139 Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Fri, 8 Nov 2024 12:50:17 -0800 Subject: [PATCH 04/15] misc improvements, test error conditions, remove redundant unit tests --- end_to_end_tests/end_to_end_test_helpers.py | 82 +++++++++++++--- .../generated_code_live_tests/README.md | 9 +- .../test_defaults.py | 98 +++++++++++++++++++ .../test_docstrings.py | 1 - .../{test_enums.py => test_enum_and_const.py} | 67 +++++++++++-- .../test_property_encoding.py | 16 ++- .../generated_code_live_tests/test_unions.py | 65 ++++++++++-- end_to_end_tests/test_end_to_end.py | 2 +- tests/test_parser/test_properties/test_any.py | 13 --- .../test_properties/test_boolean.py | 55 ----------- .../test_parser/test_properties/test_const.py | 28 ------ .../test_properties/test_enum_property.py | 49 +--------- .../test_parser/test_properties/test_float.py | 38 ------- tests/test_parser/test_properties/test_int.py | 34 ------- .../test_parser/test_properties/test_union.py | 27 +---- 15 files changed, 301 insertions(+), 283 deletions(-) create mode 100644 end_to_end_tests/generated_code_live_tests/test_defaults.py rename end_to_end_tests/generated_code_live_tests/{test_enums.py => test_enum_and_const.py} (70%) delete mode 100644 tests/test_parser/test_properties/test_any.py delete mode 100644 tests/test_parser/test_properties/test_boolean.py delete mode 100644 tests/test_parser/test_properties/test_const.py delete mode 100644 tests/test_parser/test_properties/test_float.py delete mode 100644 tests/test_parser/test_properties/test_int.py diff --git a/end_to_end_tests/end_to_end_test_helpers.py b/end_to_end_tests/end_to_end_test_helpers.py index 8a9fe0da5..7dc40f16b 100644 --- a/end_to_end_tests/end_to_end_test_helpers.py +++ b/end_to_end_tests/end_to_end_test_helpers.py @@ -1,5 +1,6 @@ import importlib import os +import re import shutil from filecmp import cmpfiles, dircmp from pathlib import Path @@ -92,7 +93,6 @@ def generate_client( if overwrite: args = [*args, "--overwrite"] generator_result = _run_command("generate", args, openapi_document, raise_on_error=raise_on_error) - print(generator_result.stdout) return GeneratedClientContext( full_output_path, generator_result, @@ -107,21 +107,20 @@ def generate_client_from_inline_spec( filename_suffix: Optional[str] = None, config: str = "", base_module: str = "testapi_client", - add_openapi_info = True, + add_missing_sections = True, raise_on_error: bool = True, ) -> GeneratedClientContext: """Run the generator on a temporary file created with the specified contents. You can also optionally tell it to create a temporary config file. """ - if add_openapi_info and not openapi_spec.lstrip().startswith("openapi:"): - openapi_spec += """ -openapi: "3.1.0" -info: - title: "testapi" - description: "my test api" - version: "0.0.1" -""" + if add_missing_sections: + if not re.search("^openapi:", openapi_spec, re.MULTILINE): + openapi_spec += "\nopenapi: '3.1.0'\n" + if not re.search("^info:", openapi_spec, re.MULTILINE): + openapi_spec += "\ninfo: {'title': 'testapi', 'description': 'my test api', 'version': '0.0.1'}\n" + if not re.search("^paths:", openapi_spec, re.MULTILINE): + openapi_spec += "\npaths: {}\n" output_path = tempfile.mkdtemp() file = tempfile.NamedTemporaryFile(suffix=filename_suffix, delete=False) @@ -148,6 +147,43 @@ def generate_client_from_inline_spec( return generated_client +def inline_spec_should_fail( + openapi_spec: str, + extra_args: List[str] = [], + filename_suffix: Optional[str] = None, + config: str = "", + add_missing_sections = True, +) -> Result: + """Asserts that the generator could not process the spec. + + Returns the full output. + """ + with generate_client_from_inline_spec( + openapi_spec, extra_args, filename_suffix, config, add_missing_sections, raise_on_error=False + ) as generated_client: + assert generated_client.generator_result.exit_code != 0 + return generated_client.generator_result.stdout + + +def inline_spec_should_cause_warnings( + openapi_spec: str, + extra_args: List[str] = [], + filename_suffix: Optional[str] = None, + config: str = "", + add_openapi_info = True, +) -> str: + """Asserts that the generator is able to process the spec, but printed warnings. + + Returns the full output. + """ + with generate_client_from_inline_spec( + openapi_spec, extra_args, filename_suffix, config, add_openapi_info, raise_on_error=True + ) as generated_client: + assert generated_client.generator_result.exit_code == 0 + assert "Warning(s) encountered while generating" in generated_client.generator_result.stdout + return generated_client.generator_result.stdout + + def with_generated_client_fixture( openapi_spec: str, name: str="generated_client", @@ -197,7 +233,31 @@ def _func(self, generated_client): return _decorator -def assert_model_decode_encode(model_class: Any, json_data: dict, expected_instance: Any): +def with_generated_code_imports(*import_paths: str): + def _decorator(cls): + decorated = cls + for import_path in import_paths: + decorated = with_generated_code_import(import_path)(decorated) + return decorated + + return _decorator + + +def assert_model_decode_encode(model_class: Any, json_data: dict, expected_instance: Any) -> None: instance = model_class.from_dict(json_data) assert instance == expected_instance assert instance.to_dict() == json_data + + +def assert_bad_schema_warning(output: str, schema_name: str, expected_message_str) -> None: + bad_schema_regex = "Unable to (parse|process) schema" + expected_start_regex = f"{bad_schema_regex} /components/schemas/{re.escape(schema_name)}:?\n" + if not (match := re.search(expected_start_regex, output)): + # this assert is to get better failure output + assert False, f"Did not find '{expected_start_regex}' in output: {output}" + output = output[match.end():] + # The amount of other information in between that message and the warning detail can vary + # depending on the error, so just make sure we're not picking up output from a different schema + if (next_match := re.search(bad_schema_regex, output)): + output = output[0:next_match.start()] + assert expected_message_str in output diff --git a/end_to_end_tests/generated_code_live_tests/README.md b/end_to_end_tests/generated_code_live_tests/README.md index 71580f273..f1b1a0d1f 100644 --- a/end_to_end_tests/generated_code_live_tests/README.md +++ b/end_to_end_tests/generated_code_live_tests/README.md @@ -5,14 +5,14 @@ These are end-to-end tests which run the code generator command, but unlike the Each test class follows this pattern: - Use the decorator `@with_generated_client_fixture`, providing an inline API spec (JSON or YAML) that contains whatever schemas/paths/etc. are relevant to this test class. - - The spec can omit the `openapi:` and `info:` blocks, unless those are relevant to the test. + - The spec can omit the `openapi:`, `info:`, and `paths:`, blocks, unless those are relevant to the test. - The decorator creates a temporary file for the inline spec and a temporary directory for the generated code, and runs the client generator. - It creates a `GeneratedClientContext` object (defined in `end_to_end_test_helpers.py`) to keep track of things like the location of the generated code and the output of the generator command. - This object is injected into the test class as a fixture called `generated_client`, although most tests will not need to reference the fixture directly. - `sys.path` is temporarily changed, for the scope of this test class, to allow imports from the generated code. -- Use the decorator `@with_generated_code_import` to make classes or functions from the generated code available to the tests. - - `@with_generated_code_import(".models.MyModel")` would execute `from [client package name].models import MyModel` and inject the imported object into the test class as a fixture called `MyModel`. - - `@with_generated_code_import(".models.MyModel", alias="model1")` would do the same thing, but the fixture would be named `model1`. +- Use the decorator `@with_generated_code_imports` or `@with_generated_code_import` to make classes or functions from the generated code available to the tests. + - `@with_generated_code_imports(".models.MyModel1", ".models.MyModel2)` would execute `from [package name].models import MyModel1, MyModel2` and inject the imported classes into the test class as fixtures called `MyModel1` and `MyModel2`. + - `@with_generated_code_import(".api.my_operation.sync", alias="endpoint_method")` would execute `from [package name].api.my_operation import sync`, but the fixture would be named `endpoint_method`. - After the test class finishes, these imports are discarded. Example: @@ -21,7 +21,6 @@ Example: @with_generated_client_fixture( """ -paths: {} components: schemas: MyModel: diff --git a/end_to_end_tests/generated_code_live_tests/test_defaults.py b/end_to_end_tests/generated_code_live_tests/test_defaults.py new file mode 100644 index 000000000..6fc8f644d --- /dev/null +++ b/end_to_end_tests/generated_code_live_tests/test_defaults.py @@ -0,0 +1,98 @@ + +import datetime +import uuid +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_bad_schema_warning, + assert_model_decode_encode, + inline_spec_should_cause_warnings, + with_generated_client_fixture, + with_generated_code_imports, +) + + +@with_generated_client_fixture( +""" +components: + schemas: + MyModel: + type: object + properties: + booleanProp: {"type": "boolean", "default": true} + stringProp: {"type": "string", "default": "a"} + numberProp: {"type": "number", "default": 1.5} + intProp: {"type": "integer", "default": 2} + noneProp: {"type": "null", "default": null} + anyPropWithString: {"default": "b"} + anyPropWithInt: {"default": 3} + booleanWithStringTrue1: {"type": "boolean", "default": "True"} + booleanWithStringTrue2: {"type": "boolean", "default": "true"} + booleanWithStringFalse1: {"type": "boolean", "default": "False"} + booleanWithStringFalse2: {"type": "boolean", "default": "false"} + intWithStringValue: {"type": "integer", "default": "4"} + numberWithIntValue: {"type": "number", "default": 5} + numberWithStringValue: {"type": "number", "default": "5.5"} + noneWithStringValue: {"type": "null", "default": "None"} +""") +@with_generated_code_imports(".models.MyModel") +class TestDefaultValues: + def test_defaults_in_initializer(self, MyModel, generated_client): + instance = MyModel() + assert instance == MyModel( + boolean_prop=True, + string_prop="a", + number_prop=1.5, + int_prop=2, + any_prop_with_string="b", + any_prop_with_int=3, + boolean_with_string_true_1=True, + boolean_with_string_true_2=True, + boolean_with_string_false_1=False, + boolean_with_string_false_2=False, + int_with_string_value=4, + number_with_int_value=5, + number_with_string_value=5.5, + ) + # Note, currently the default for a None property does not work as expected-- + # the initializer will default it to UNSET rather than None. + + +class TestInvalidDefaultValues: + @pytest.fixture(scope="class") + def warnings(self): + return inline_spec_should_cause_warnings( +""" +components: + schemas: + WithBadBoolean: + properties: + badBoolean: {"type": "boolean", "default": "not a boolean"} + WithBadIntAsString: + properties: + badInt: {"type": "integer", "default": "not an int"} + WithBadIntAsOther: + properties: + badInt: {"type": "integer", "default": true} + WithBadFloatAsString: + properties: + badInt: {"type": "number", "default": "not a number"} + WithBadFloatAsOther: + properties: + badInt: {"type": "number", "default": true} +""" + ) + + def test_bad_boolean(self, warnings): + assert_bad_schema_warning(warnings, "WithBadBoolean", "Invalid boolean value") + + def test_bad_int_as_string(self, warnings): + assert_bad_schema_warning(warnings, "WithBadIntAsString", "Invalid int value") + + def test_bad_int_as_other(self, warnings): + assert_bad_schema_warning(warnings, "WithBadIntAsOther", "Invalid int value") + + def test_bad_float_as_string(self, warnings): + assert_bad_schema_warning(warnings, "WithBadFloatAsString", "Invalid float value") + + def test_bad_float_as_other(self, warnings): + assert_bad_schema_warning(warnings, "WithBadFloatAsOther", "Cannot convert True to a float") diff --git a/end_to_end_tests/generated_code_live_tests/test_docstrings.py b/end_to_end_tests/generated_code_live_tests/test_docstrings.py index 479acb65c..2752829e5 100644 --- a/end_to_end_tests/generated_code_live_tests/test_docstrings.py +++ b/end_to_end_tests/generated_code_live_tests/test_docstrings.py @@ -18,7 +18,6 @@ def get_section(self, header_line: str) -> List[str]: @with_generated_client_fixture( """ -paths: {} components: schemas: MyModel: diff --git a/end_to_end_tests/generated_code_live_tests/test_enums.py b/end_to_end_tests/generated_code_live_tests/test_enum_and_const.py similarity index 70% rename from end_to_end_tests/generated_code_live_tests/test_enums.py rename to end_to_end_tests/generated_code_live_tests/test_enum_and_const.py index 5437e1aee..613e79de0 100644 --- a/end_to_end_tests/generated_code_live_tests/test_enums.py +++ b/end_to_end_tests/generated_code_live_tests/test_enum_and_const.py @@ -1,15 +1,18 @@ +from typing import Any import pytest from end_to_end_tests.end_to_end_test_helpers import ( + assert_bad_schema_warning, assert_model_decode_encode, + inline_spec_should_cause_warnings, with_generated_code_import, with_generated_client_fixture, + with_generated_code_imports, ) @with_generated_client_fixture( """ -paths: {} components: schemas: MyEnum: @@ -27,9 +30,7 @@ - {"$ref": "#/components/schemas/MyEnum"} - type: "null" """) -@with_generated_code_import(".models.MyEnum") -@with_generated_code_import(".models.MyIntEnum") -@with_generated_code_import(".models.MyModel") +@with_generated_code_imports(".models.MyEnum", ".models.MyIntEnum", ".models.MyModel") class TestEnumClasses: def test_enum_classes(self, MyEnum, MyIntEnum): assert MyEnum.A == MyEnum("a") @@ -72,7 +73,6 @@ def test_invalid_values(self, MyModel): @with_generated_client_fixture( """ -paths: {} components: schemas: MyEnum: @@ -130,24 +130,75 @@ def test_invalid_values(self, MyModel): @with_generated_client_fixture( """ -paths: {} components: schemas: MyModel: properties: mustBeErnest: const: Ernest + mustBeThirty: + const: 30 """, ) @with_generated_code_import(".models.MyModel") class TestConst: - def test_valid_value(self, MyModel): + def test_valid_string(self, MyModel): assert_model_decode_encode( MyModel, {"mustBeErnest": "Ernest"}, MyModel(must_be_ernest="Ernest"), ) - def test_invalid_value(self, MyModel): + def test_valid_int(self, MyModel): + assert_model_decode_encode( + MyModel, + {"mustBeThirty": 30}, + MyModel(must_be_thirty=30), + ) + + def test_invalid_string(self, MyModel): with pytest.raises(ValueError): MyModel.from_dict({"mustBeErnest": "Jack"}) + + def test_invalid_int(self, MyModel): + with pytest.raises(ValueError): + MyModel.from_dict({"mustBeThirty": 29}) + + +class TestEnumAndConstInvalidSchemas: + @pytest.fixture(scope="class") + def warnings(self): + return inline_spec_should_cause_warnings( +""" +components: + schemas: + WithBadDefaultValue: + enum: ["A"] + default: "B" + WithBadDefaultType: + enum: ["A"] + default: 123 + WithMixedTypes: + enum: ["A", 1] + WithUnsupportedType: + enum: [1.4, 1.5] + DefaultNotMatchingConst: + const: "aaa" + default: "bbb" +""" + ) + + def test_enum_bad_default_value(self, warnings): + assert_bad_schema_warning(warnings, "WithBadDefaultValue", "Value B is not valid") + + def test_enum_bad_default_type(self, warnings): + assert_bad_schema_warning(warnings, "WithBadDefaultType", "Cannot convert 123 to enum") + + def test_enum_mixed_types(self, warnings): + assert_bad_schema_warning(warnings, "WithMixedTypes", "Enum values must all be the same type") + + def test_enum_unsupported_type(self, warnings): + assert_bad_schema_warning(warnings, "WithUnsupportedType", "Unsupported enum type") + + def test_const_default_not_matching(self, warnings): + assert_bad_schema_warning(warnings, "DefaultNotMatchingConst", "Invalid value for const") diff --git a/end_to_end_tests/generated_code_live_tests/test_property_encoding.py b/end_to_end_tests/generated_code_live_tests/test_property_encoding.py index b3f27184e..4540ec5c6 100644 --- a/end_to_end_tests/generated_code_live_tests/test_property_encoding.py +++ b/end_to_end_tests/generated_code_live_tests/test_property_encoding.py @@ -4,14 +4,13 @@ import pytest from end_to_end_tests.end_to_end_test_helpers import ( assert_model_decode_encode, - with_generated_code_import, with_generated_client_fixture, + with_generated_code_imports, ) @with_generated_client_fixture( """ -paths: {} components: schemas: MyModel: @@ -29,8 +28,7 @@ req3: {"type": "string"} required: ["req3"] """) -@with_generated_code_import(".models.MyModel") -@with_generated_code_import(".models.DerivedModel") +@with_generated_code_imports(".models.MyModel", ".models.DerivedModel") class TestRequiredAndOptionalProperties: def test_required_ok(self, MyModel, DerivedModel): assert_model_decode_encode( @@ -67,7 +65,6 @@ def test_required_missing(self, MyModel, DerivedModel): @with_generated_client_fixture( """ -paths: {} components: schemas: MyModel: @@ -80,11 +77,11 @@ def test_required_missing(self, MyModel, DerivedModel): arrayOfStringsProp: {"type": "array", "items": {"type": "string"}} anyObjectProp: {"$ref": "#/components/schemas/AnyObject"} nullProp: {"type": "null"} + anyProp: {} AnyObject: type: object """) -@with_generated_code_import(".models.MyModel") -@with_generated_code_import(".models.AnyObject") +@with_generated_code_imports(".models.MyModel", ".models.AnyObject") class TestBasicModelProperties: def test_decode_encode(self, MyModel, AnyObject): json_data = { @@ -95,6 +92,7 @@ def test_decode_encode(self, MyModel, AnyObject): "arrayOfStringsProp": ["b", "c"], "anyObjectProp": {"d": 3}, "nullProp": None, + "anyProp": "e" } expected_any_object = AnyObject() expected_any_object.additional_properties = {"d": 3} @@ -109,6 +107,7 @@ def test_decode_encode(self, MyModel, AnyObject): array_of_strings_prop=["b", "c"], any_object_prop = expected_any_object, null_prop=None, + any_prop="e", ) ) @@ -126,7 +125,6 @@ def test_decode_error_not_object(self, bad_data, MyModel): @with_generated_client_fixture( """ -paths: {} components: schemas: MyModel: @@ -136,7 +134,7 @@ def test_decode_error_not_object(self, bad_data, MyModel): dateTimeProp: {"type": "string", "format": "date-time"} uuidProp: {"type": "string", "format": "uuid"} """) -@with_generated_code_import(".models.MyModel") +@with_generated_code_imports(".models.MyModel") class TestSpecialStringFormats: def test_date(self, MyModel): date_value = datetime.date.today() diff --git a/end_to_end_tests/generated_code_live_tests/test_unions.py b/end_to_end_tests/generated_code_live_tests/test_unions.py index a400c0f12..10e29519f 100644 --- a/end_to_end_tests/generated_code_live_tests/test_unions.py +++ b/end_to_end_tests/generated_code_live_tests/test_unions.py @@ -1,14 +1,16 @@ +import pytest from end_to_end_tests.end_to_end_test_helpers import ( + assert_bad_schema_warning, assert_model_decode_encode, - with_generated_code_import, + inline_spec_should_cause_warnings, with_generated_client_fixture, + with_generated_code_imports, ) @with_generated_client_fixture( """ -paths: {} components: schemas: ThingA: @@ -25,17 +27,31 @@ type: object properties: thing: - oneOf: + oneOf: - $ref: "#/components/schemas/ThingA" - $ref: "#/components/schemas/ThingB" thingOrString: - oneOf: + oneOf: - $ref: "#/components/schemas/ThingA" - type: string + ModelWithNestedUnion: + type: object + properties: + thingOrValue: + oneOf: + - oneOf: + - $ref: "#/components/schemas/ThingA" + - $ref: "#/components/schemas/ThingB" + - oneOf: + - type: string + - type: number """) -@with_generated_code_import(".models.ThingA") -@with_generated_code_import(".models.ThingB") -@with_generated_code_import(".models.ModelWithUnion") +@with_generated_code_imports( + ".models.ThingA", + ".models.ThingB", + ".models.ModelWithUnion", + ".models.ModelWithNestedUnion", +) class TestOneOf: def test_disambiguate_objects_via_required_properties(self, ThingA, ThingB, ModelWithUnion): assert_model_decode_encode( @@ -60,3 +76,38 @@ def test_disambiguate_object_and_non_object(self, ThingA, ModelWithUnion): {"thingOrString": "x"}, ModelWithUnion(thing_or_string="x"), ) + + def test_disambiguate_nested_union(self, ThingA, ThingB, ModelWithNestedUnion): + assert_model_decode_encode( + ModelWithNestedUnion, + {"thingOrValue": {"propA": "x"}}, + ModelWithNestedUnion(thing_or_value=ThingA(prop_a="x")), + ) + assert_model_decode_encode( + ModelWithNestedUnion, + {"thingOrValue": 3}, + ModelWithNestedUnion(thing_or_value=3), + ) + + +class TestUnionInvalidSchemas: + @pytest.fixture(scope="class") + def warnings(self): + return inline_spec_should_cause_warnings( +""" +components: + schemas: + UnionWithInvalidReference: + anyOf: + - $ref: "#/components/schemas/DoesntExist" + UnionWithInvalidDefault: + type: ["number", "integer"] + default: aaa +""" + ) + + def test_invalid_reference(self, warnings): + assert_bad_schema_warning(warnings, "UnionWithInvalidReference", "Could not find reference") + + def test_invalid_default(self, warnings): + assert_bad_schema_warning(warnings, "UnionWithInvalidDefault", "Invalid int value: aaa") diff --git a/end_to_end_tests/test_end_to_end.py b/end_to_end_tests/test_end_to_end.py index 5bc3e4700..811789ed7 100644 --- a/end_to_end_tests/test_end_to_end.py +++ b/end_to_end_tests/test_end_to_end.py @@ -264,7 +264,7 @@ def test_invalid_openapi_document(suffix, content, expected_error): with generate_client_from_inline_spec( content, filename_suffix=suffix, - add_openapi_info=False, + add_missing_sections=False, raise_on_error=False, ) as g: assert g.generator_result.exit_code == 1 diff --git a/tests/test_parser/test_properties/test_any.py b/tests/test_parser/test_properties/test_any.py deleted file mode 100644 index d80e93e64..000000000 --- a/tests/test_parser/test_properties/test_any.py +++ /dev/null @@ -1,13 +0,0 @@ -from openapi_python_client.parser.properties import AnyProperty -from openapi_python_client.utils import PythonIdentifier - - -def test_default() -> None: - AnyProperty.build( - name="test", - required=True, - default=42, - python_name=PythonIdentifier("test", ""), - description="test", - example="test", - ) diff --git a/tests/test_parser/test_properties/test_boolean.py b/tests/test_parser/test_properties/test_boolean.py deleted file mode 100644 index 0862f1507..000000000 --- a/tests/test_parser/test_properties/test_boolean.py +++ /dev/null @@ -1,55 +0,0 @@ -import pytest - -from openapi_python_client.parser.errors import PropertyError -from openapi_python_client.parser.properties import BooleanProperty -from openapi_python_client.utils import PythonIdentifier - - -def test_invalid_default_value() -> None: - err = BooleanProperty.build( - default="not a boolean", - description=None, - example=None, - required=False, - python_name=PythonIdentifier("not_a_boolean", ""), - name="not_a_boolean", - ) - - assert isinstance(err, PropertyError) - - -@pytest.mark.parametrize( - ("value", "expected"), - ( - ("true", "True"), - ("True", "True"), - ("false", "False"), - ("False", "False"), - ), -) -def test_string_default(value, expected) -> None: - prop = BooleanProperty.build( - default=value, - description=None, - example=None, - required=False, - python_name="not_a_boolean", - name="not_a_boolean", - ) - - assert isinstance(prop, BooleanProperty) - assert prop.default.python_code == expected - - -def test_bool_default() -> None: - prop = BooleanProperty.build( - default=True, - description=None, - example=None, - required=False, - python_name="not_a_boolean", - name="not_a_boolean", - ) - - assert isinstance(prop, BooleanProperty) - assert prop.default.python_code == "True" diff --git a/tests/test_parser/test_properties/test_const.py b/tests/test_parser/test_properties/test_const.py deleted file mode 100644 index ab9e29332..000000000 --- a/tests/test_parser/test_properties/test_const.py +++ /dev/null @@ -1,28 +0,0 @@ -from openapi_python_client.parser.errors import PropertyError -from openapi_python_client.parser.properties import ConstProperty - - -def test_default_doesnt_match_const() -> None: - err = ConstProperty.build( - name="test", - required=True, - default="not the value", - python_name="test", - description=None, - const="the value", - ) - - assert isinstance(err, PropertyError) - - -def test_non_string_const() -> None: - prop = ConstProperty.build( - name="test", - required=True, - default=123, - python_name="test", - description=None, - const=123, - ) - - assert isinstance(prop, ConstProperty) diff --git a/tests/test_parser/test_properties/test_enum_property.py b/tests/test_parser/test_properties/test_enum_property.py index 21b183f8e..ab3c752c7 100644 --- a/tests/test_parser/test_properties/test_enum_property.py +++ b/tests/test_parser/test_properties/test_enum_property.py @@ -4,7 +4,6 @@ import openapi_python_client.schema as oai from openapi_python_client import Config -from openapi_python_client.parser.errors import PropertyError from openapi_python_client.parser.properties import LiteralEnumProperty, Schemas from openapi_python_client.parser.properties.enum_property import EnumProperty @@ -17,6 +16,8 @@ def property_class(request) -> PropertyClass: def test_conflict(config: Config, property_class: PropertyClass) -> None: + # It'd be nice to move this test into generated_code_live_tests, but it's unclear + # how to represent this error condition in an actual API spec. schemas = Schemas() _, schemas = property_class.build( @@ -33,49 +34,3 @@ def test_conflict(config: Config, property_class: PropertyClass) -> None: assert schemas == new_schemas assert err.detail == "Found conflicting enums named Existing with incompatible values." - - -def test_bad_default_value(config: Config, property_class: PropertyClass) -> None: - data = oai.Schema(default="B", enum=["A"]) - schemas = Schemas() - - err, new_schemas = property_class.build( - data=data, name="Existing", required=True, schemas=schemas, parent_name="parent", config=config - ) - - assert schemas == new_schemas - assert err == PropertyError(detail="Value B is not valid for enum Existing", data=data) - - -def test_bad_default_type(config: Config, property_class: PropertyClass) -> None: - data = oai.Schema(default=123, enum=["A"]) - schemas = Schemas() - - err, new_schemas = property_class.build( - data=data, name="Existing", required=True, schemas=schemas, parent_name="parent", config=config - ) - - assert schemas == new_schemas - assert isinstance(err, PropertyError) - - -def test_mixed_types(config: Config, property_class: PropertyClass) -> None: - data = oai.Schema(enum=["A", 1]) - schemas = Schemas() - - err, _ = property_class.build( - data=data, name="Enum", required=True, schemas=schemas, parent_name="parent", config=config - ) - - assert isinstance(err, PropertyError) - - -def test_unsupported_type(config: Config, property_class: PropertyClass) -> None: - data = oai.Schema(enum=[1.4, 1.5]) - schemas = Schemas() - - err, _ = property_class.build( - data=data, name="Enum", required=True, schemas=schemas, parent_name="parent", config=config - ) - - assert isinstance(err, PropertyError) diff --git a/tests/test_parser/test_properties/test_float.py b/tests/test_parser/test_properties/test_float.py deleted file mode 100644 index 356a61424..000000000 --- a/tests/test_parser/test_properties/test_float.py +++ /dev/null @@ -1,38 +0,0 @@ -from openapi_python_client.parser.errors import PropertyError -from openapi_python_client.parser.properties import FloatProperty -from openapi_python_client.parser.properties.protocol import Value - - -def test_invalid_default(): - err = FloatProperty.build( - default="not a float", - description=None, - example=None, - required=False, - python_name="not_a_float", - name="not_a_float", - ) - - assert isinstance(err, PropertyError) - - -def test_convert_from_string(): - assert FloatProperty.convert_value("1.0") == Value(python_code="1.0", raw_value="1.0") - assert FloatProperty.convert_value("1") == Value(python_code="1.0", raw_value="1") - - -def test_convert_from_float(): - assert FloatProperty.convert_value(1.0) == Value(python_code="1.0", raw_value=1.0) - - -def test_invalid_type_default(): - err = FloatProperty.build( - default=True, - description=None, - example=None, - required=False, - python_name="not_a_float", - name="not_a_float", - ) - - assert isinstance(err, PropertyError) diff --git a/tests/test_parser/test_properties/test_int.py b/tests/test_parser/test_properties/test_int.py deleted file mode 100644 index 7f9953761..000000000 --- a/tests/test_parser/test_properties/test_int.py +++ /dev/null @@ -1,34 +0,0 @@ -from openapi_python_client.parser.errors import PropertyError -from openapi_python_client.parser.properties import IntProperty -from openapi_python_client.parser.properties.protocol import Value -from openapi_python_client.utils import PythonIdentifier - - -def test_invalid_default(): - err = IntProperty.build( - default="not a float", - description=None, - example=None, - required=False, - python_name="not_a_float", - name="not_a_float", - ) - - assert isinstance(err, PropertyError) - - -def test_convert_from_string(): - assert IntProperty.convert_value("1") == Value(python_code="1", raw_value="1") - - -def test_invalid_type_default(): - err = IntProperty.build( - default=True, - description=None, - example=None, - required=False, - python_name=PythonIdentifier("not_a_float", ""), - name="not_a_float", - ) - - assert isinstance(err, PropertyError) diff --git a/tests/test_parser/test_properties/test_union.py b/tests/test_parser/test_properties/test_union.py index acbbd06d6..471574c9b 100644 --- a/tests/test_parser/test_properties/test_union.py +++ b/tests/test_parser/test_properties/test_union.py @@ -1,5 +1,5 @@ import openapi_python_client.schema as oai -from openapi_python_client.parser.errors import ParseError, PropertyError +from openapi_python_client.parser.errors import ParseError from openapi_python_client.parser.properties import Schemas, UnionProperty from openapi_python_client.parser.properties.protocol import Value from openapi_python_client.schema import DataType, ParameterLocation @@ -33,31 +33,6 @@ def test_property_from_data_union(union_property_factory, date_time_property_fac assert s == Schemas() -def test_build_union_property_invalid_property(config): - name = "bad_union" - required = True - reference = oai.Reference.model_construct(ref="#/components/schema/NotExist") - data = oai.Schema(anyOf=[reference]) - - p, s = UnionProperty.build( - name=name, required=required, data=data, schemas=Schemas(), parent_name="parent", config=config - ) - assert p == PropertyError(detail=f"Invalid property in union {name}", data=reference) - - -def test_invalid_default(config): - data = oai.Schema( - type=[DataType.NUMBER, DataType.INTEGER], - default="a", - ) - - err, _ = UnionProperty.build( - data=data, required=True, schemas=Schemas(), parent_name="parent", name="name", config=config - ) - - assert isinstance(err, PropertyError) - - def test_invalid_location(config): data = oai.Schema( type=[DataType.NUMBER, DataType.NULL], From 53fca35028195697b0a5f17a310a9be1752c2a71 Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Fri, 8 Nov 2024 14:41:22 -0800 Subject: [PATCH 05/15] misc improvements + remove redundant unit tests --- end_to_end_tests/end_to_end_test_helpers.py | 5 +- .../test_defaults.py | 99 +- .../test_enum_and_const.py | 122 +- .../test_literal_enums.py | 150 + .../test_property_encoding.py | 5 + localtest/v2api.yml | 33030 ++++++++++++++++ .../test_parser/test_properties/test_date.py | 28 - .../test_properties/test_datetime.py | 28 - .../test_parser/test_properties/test_file.py | 2 + .../test_parser/test_properties/test_init.py | 288 +- .../test_parser/test_properties/test_none.py | 2 + 11 files changed, 33323 insertions(+), 436 deletions(-) create mode 100644 end_to_end_tests/generated_code_live_tests/test_literal_enums.py create mode 100644 localtest/v2api.yml delete mode 100644 tests/test_parser/test_properties/test_date.py delete mode 100644 tests/test_parser/test_properties/test_datetime.py diff --git a/end_to_end_tests/end_to_end_test_helpers.py b/end_to_end_tests/end_to_end_test_helpers.py index 7dc40f16b..332c2856a 100644 --- a/end_to_end_tests/end_to_end_test_helpers.py +++ b/end_to_end_tests/end_to_end_test_helpers.py @@ -156,13 +156,13 @@ def inline_spec_should_fail( ) -> Result: """Asserts that the generator could not process the spec. - Returns the full output. + Returns the command result, which could include stdout data or an exception. """ with generate_client_from_inline_spec( openapi_spec, extra_args, filename_suffix, config, add_missing_sections, raise_on_error=False ) as generated_client: assert generated_client.generator_result.exit_code != 0 - return generated_client.generator_result.stdout + return generated_client.generator_result def inline_spec_should_cause_warnings( @@ -198,6 +198,7 @@ def with_generated_client_fixture( def _decorator(cls): def generated_client(self): with generate_client_from_inline_spec(openapi_spec, extra_args=extra_args, config=config) as g: + print(g.generator_result.stdout) # so we'll see the output if a test failed yield g setattr(cls, name, pytest.fixture(scope="class")(generated_client)) diff --git a/end_to_end_tests/generated_code_live_tests/test_defaults.py b/end_to_end_tests/generated_code_live_tests/test_defaults.py index 6fc8f644d..3c78f1e05 100644 --- a/end_to_end_tests/generated_code_live_tests/test_defaults.py +++ b/end_to_end_tests/generated_code_live_tests/test_defaults.py @@ -22,7 +22,9 @@ stringProp: {"type": "string", "default": "a"} numberProp: {"type": "number", "default": 1.5} intProp: {"type": "integer", "default": 2} - noneProp: {"type": "null", "default": null} + dateProp: {"type": "string", "format": "date", "default": "2024-01-02"} + dateTimeProp: {"type": "string", "format": "date-time", "default": "2024-01-02T03:04:05Z"} + uuidProp: {"type": "string", "format": "uuid", "default": "07EF8B4D-AA09-4FFA-898D-C710796AFF41"} anyPropWithString: {"default": "b"} anyPropWithInt: {"default": 3} booleanWithStringTrue1: {"type": "boolean", "default": "True"} @@ -32,17 +34,23 @@ intWithStringValue: {"type": "integer", "default": "4"} numberWithIntValue: {"type": "number", "default": 5} numberWithStringValue: {"type": "number", "default": "5.5"} - noneWithStringValue: {"type": "null", "default": "None"} + stringWithNumberValue: {"type": "string", "default": 6} + stringConst: {"type": "string", "const": "always", "default": "always"} """) @with_generated_code_imports(".models.MyModel") -class TestDefaultValues: - def test_defaults_in_initializer(self, MyModel, generated_client): +class TestSimpleDefaults: + # Note, the null/None type is not covered here due to a known bug: + # https://github.com/openapi-generators/openapi-python-client/issues/1162 + def test_defaults_in_initializer(self, MyModel): instance = MyModel() assert instance == MyModel( boolean_prop=True, string_prop="a", number_prop=1.5, int_prop=2, + date_prop=datetime.date(2024, 1, 2), + date_time_prop=datetime.datetime(2024, 1, 2, 3, 4, 5, tzinfo=datetime.timezone.utc), + uuid_prop=uuid.UUID("07EF8B4D-AA09-4FFA-898D-C710796AFF41"), any_prop_with_string="b", any_prop_with_int=3, boolean_with_string_true_1=True, @@ -52,9 +60,32 @@ def test_defaults_in_initializer(self, MyModel, generated_client): int_with_string_value=4, number_with_int_value=5, number_with_string_value=5.5, + string_with_number_value="6", + string_const="always", ) - # Note, currently the default for a None property does not work as expected-- - # the initializer will default it to UNSET rather than None. + + + +@with_generated_client_fixture( +""" +components: + schemas: + MyEnum: + type: string + enum: ["a", "b"] + MyModel: + type: object + properties: + enumProp: + allOf: + - $ref: "#/components/schemas/MyEnum" + default: "a" + +""") +@with_generated_code_imports(".models.MyEnum", ".models.MyModel") +class TestEnumDefaults: + def test_enum_default(self, MyEnum, MyModel): + assert MyModel().enum_prop == MyEnum.A class TestInvalidDefaultValues: @@ -79,20 +110,48 @@ def warnings(self): WithBadFloatAsOther: properties: badInt: {"type": "number", "default": true} + WithBadDateAsString: + properties: + badDate: {"type": "string", "format": "date", "default": "xxx"} + WithBadDateAsOther: + properties: + badDate: {"type": "string", "format": "date", "default": 3} + WithBadDateTimeAsString: + properties: + badDate: {"type": "string", "format": "date-time", "default": "xxx"} + WithBadDateTimeAsOther: + properties: + badDate: {"type": "string", "format": "date-time", "default": 3} + WithBadUuidAsString: + properties: + badUuid: {"type": "string", "format": "uuid", "default": "xxx"} + WithBadUuidAsOther: + properties: + badUuid: {"type": "string", "format": "uuid", "default": 3} + WithBadEnum: + properties: + badEnum: {"type": "string", "enum": ["a", "b"], "default": "x"} """ ) + # Note, the null/None type, and binary strings (files), are not covered here due to a known bug: + # https://github.com/openapi-generators/openapi-python-client/issues/1162 - def test_bad_boolean(self, warnings): - assert_bad_schema_warning(warnings, "WithBadBoolean", "Invalid boolean value") - - def test_bad_int_as_string(self, warnings): - assert_bad_schema_warning(warnings, "WithBadIntAsString", "Invalid int value") - - def test_bad_int_as_other(self, warnings): - assert_bad_schema_warning(warnings, "WithBadIntAsOther", "Invalid int value") - - def test_bad_float_as_string(self, warnings): - assert_bad_schema_warning(warnings, "WithBadFloatAsString", "Invalid float value") - - def test_bad_float_as_other(self, warnings): - assert_bad_schema_warning(warnings, "WithBadFloatAsOther", "Cannot convert True to a float") + @pytest.mark.parametrize( + ("model_name", "message"), + [ + ("WithBadBoolean", "Invalid boolean value"), + ("WithBadIntAsString", "Invalid int value"), + ("WithBadIntAsOther", "Invalid int value"), + ("WithBadFloatAsString", "Invalid float value"), + ("WithBadFloatAsOther", "Cannot convert True to a float"), + ("WithBadDateAsString", "Invalid date"), + ("WithBadDateAsOther", "Cannot convert 3 to a date"), + ("WithBadDateTimeAsString", "Invalid datetime"), + ("WithBadDateTimeAsOther", "Cannot convert 3 to a datetime"), + ("WithBadUuidAsString", "Invalid UUID value"), + ("WithBadUuidAsOther", "Invalid UUID value"), + ("WithBadEnum", "Value x is not valid for enum"), + ] + ) + def test_bad_default_warning(self, model_name, message, warnings): + assert_bad_schema_warning(warnings, model_name, message) diff --git a/end_to_end_tests/generated_code_live_tests/test_enum_and_const.py b/end_to_end_tests/generated_code_live_tests/test_enum_and_const.py index 613e79de0..add634344 100644 --- a/end_to_end_tests/generated_code_live_tests/test_enum_and_const.py +++ b/end_to_end_tests/generated_code_live_tests/test_enum_and_const.py @@ -5,6 +5,7 @@ assert_bad_schema_warning, assert_model_decode_encode, inline_spec_should_cause_warnings, + inline_spec_should_fail, with_generated_code_import, with_generated_client_fixture, with_generated_code_imports, @@ -17,10 +18,15 @@ schemas: MyEnum: type: string - enum: ["a", "B"] + enum: ["a", "B", "~weirdstring"] MyIntEnum: type: integer - enum: [2, 3] + enum: [2, 3, -4] + MyEnumIncludingNull: + type: ["string", "null"] + enum: ["a", "b", null] + MyNullOnlyEnum: + enum: [null] MyModel: properties: enumProp: {"$ref": "#/components/schemas/MyEnum"} @@ -29,34 +35,53 @@ oneOf: - {"$ref": "#/components/schemas/MyEnum"} - type: "null" + enumIncludingNullProp: {"$ref": "#/components/schemas/MyEnumIncludingNull"} + nullOnlyEnumProp: {"$ref": "#/components/schemas/MyNullOnlyEnum"} + inlineEnumProp: + type: string + enum: ["a", "b"] """) -@with_generated_code_imports(".models.MyEnum", ".models.MyIntEnum", ".models.MyModel") +@with_generated_code_imports( + ".models.MyEnum", + ".models.MyIntEnum", + ".models.MyEnumIncludingNullType1", # see comment in test_nullable_enum_prop + ".models.MyModel", + ".models.MyModelInlineEnumProp", +) class TestEnumClasses: def test_enum_classes(self, MyEnum, MyIntEnum): assert MyEnum.A == MyEnum("a") assert MyEnum.B == MyEnum("B") + assert MyEnum.VALUE_2 == MyEnum("~weirdstring") assert MyIntEnum.VALUE_2 == MyIntEnum(2) assert MyIntEnum.VALUE_3 == MyIntEnum(3) + assert MyIntEnum.VALUE_NEGATIVE_4 == MyIntEnum(-4) - def test_enum_prop(self, MyModel, MyEnum, MyIntEnum): + def test_enum_prop(self, MyModel, MyEnum, MyIntEnum, MyModelInlineEnumProp): assert_model_decode_encode(MyModel, {"enumProp": "B"}, MyModel(enum_prop=MyEnum.B)) assert_model_decode_encode(MyModel, {"intEnumProp": 2}, MyModel(int_enum_prop=MyIntEnum.VALUE_2)) - - def test_enum_prop_type(self, MyModel, MyEnum, MyIntEnum): - assert isinstance(MyModel.from_dict({"enumProp": "B"}).enum_prop, MyEnum) - assert isinstance(MyModel.from_dict({"intEnumProp": 2}).int_enum_prop, MyIntEnum) - - def test_nullable_enum_prop(self, MyModel, MyEnum): assert_model_decode_encode( MyModel, - {"nullableEnumProp": "B"}, - MyModel(nullable_enum_prop=MyEnum.B), + {"inlineEnumProp": "a"}, + MyModel(inline_enum_prop=MyModelInlineEnumProp.A), ) + + def test_enum_prop_type(self, MyModel, MyEnum): + # Just verifying that it's not using a literal vaue + assert isinstance(MyModel.from_dict({"enumProp": "B"}).enum_prop, MyEnum) + + def test_nullable_enum_prop(self, MyModel, MyEnum, MyEnumIncludingNullType1): + # Note, MyEnumIncludingNullType1 should be named just MyEnumIncludingNull - + # known bug: https://github.com/openapi-generators/openapi-python-client/issues/1120 + assert_model_decode_encode(MyModel, {"nullableEnumProp": "B"}, MyModel(nullable_enum_prop=MyEnum.B)) + assert_model_decode_encode(MyModel, {"nullableEnumProp": None}, MyModel(nullable_enum_prop=None)) assert_model_decode_encode( MyModel, - {"nullableEnumProp": None}, - MyModel(nullable_enum_prop=None), + {"enumIncludingNullProp": "a"}, + MyModel(enum_including_null_prop=MyEnumIncludingNullType1.A), ) + assert_model_decode_encode( MyModel, {"enumIncludingNullProp": None}, MyModel(enum_including_null_prop=None)) + assert_model_decode_encode(MyModel, {"nullOnlyEnumProp": None}, MyModel(null_only_enum_prop=None)) def test_invalid_values(self, MyModel): with pytest.raises(ValueError): @@ -71,63 +96,6 @@ def test_invalid_values(self, MyModel): MyModel.from_dict({"intEnumProp": "a"}) -@with_generated_client_fixture( -""" -components: - schemas: - MyEnum: - type: string - enum: ["a", "A"] - MyIntEnum: - type: integer - enum: [2, 3] - MyModel: - properties: - enumProp: {"$ref": "#/components/schemas/MyEnum"} - intEnumProp: {"$ref": "#/components/schemas/MyIntEnum"} - nullableEnumProp: - oneOf: - - {"$ref": "#/components/schemas/MyEnum"} - - type: "null" -""", - config=""" -literal_enums: true -""", -) -@with_generated_code_import(".models.MyModel") -class TestLiteralEnums: - def test_enum_prop(self, MyModel): - assert_model_decode_encode(MyModel, {"enumProp": "a"}, MyModel(enum_prop="a")) - assert_model_decode_encode(MyModel, {"enumProp": "A"}, MyModel(enum_prop="A")) - assert_model_decode_encode(MyModel, {"intEnumProp": 2}, MyModel(int_enum_prop=2)) - - def test_enum_prop_type(self, MyModel): - assert MyModel.from_dict({"enumProp": "a"}).enum_prop.__class__ is str - assert MyModel.from_dict({"intEnumProp": 2}).int_enum_prop.__class__ is int - - def test_nullable_enum_prop(self, MyModel): - assert_model_decode_encode( - MyModel, - {"nullableEnumProp": "a"}, - MyModel(nullable_enum_prop="a"), - ) - assert_model_decode_encode( - MyModel, - {"nullableEnumProp": None}, - MyModel(nullable_enum_prop=None), - ) - - def test_invalid_values(self, MyModel): - with pytest.raises(TypeError): - MyModel.from_dict({"enumProp": "c"}) - with pytest.raises(TypeError): - MyModel.from_dict({"enumProp": 2}) - with pytest.raises(TypeError): - MyModel.from_dict({"intEnumProp": 0}) - with pytest.raises(TypeError): - MyModel.from_dict({"intEnumProp": "a"}) - - @with_generated_client_fixture( """ components: @@ -202,3 +170,15 @@ def test_enum_unsupported_type(self, warnings): def test_const_default_not_matching(self, warnings): assert_bad_schema_warning(warnings, "DefaultNotMatchingConst", "Invalid value for const") + + def test_enum_duplicate_values(self): + # This one currently causes a full generator failure rather than a warning + result = inline_spec_should_fail( +""" +components: + schemas: + WithDuplicateValues: + enum: ["x", "x"] +""" + ) + assert "Duplicate key X in enum" in str(result.exception) diff --git a/end_to_end_tests/generated_code_live_tests/test_literal_enums.py b/end_to_end_tests/generated_code_live_tests/test_literal_enums.py new file mode 100644 index 000000000..5606abeb8 --- /dev/null +++ b/end_to_end_tests/generated_code_live_tests/test_literal_enums.py @@ -0,0 +1,150 @@ +from typing import Any +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_bad_schema_warning, + assert_model_decode_encode, + inline_spec_should_cause_warnings, + inline_spec_should_fail, + with_generated_code_import, + with_generated_client_fixture, +) + +# This is a separate file from test_enum_and_const.py because literal enums are not generated +# in the default configuration. + + +@with_generated_client_fixture( +""" +components: + schemas: + MyEnum: + type: string + enum: ["a", "A"] + MyIntEnum: + type: integer + enum: [2, 3] + MyEnumIncludingNull: + type: ["string", "null"] + enum: ["a", "b", null] + MyNullOnlyEnum: + enum: [null] + MyModel: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + intEnumProp: {"$ref": "#/components/schemas/MyIntEnum"} + nullableEnumProp: + oneOf: + - {"$ref": "#/components/schemas/MyEnum"} + - type: "null" + enumIncludingNullProp: {"$ref": "#/components/schemas/MyEnumIncludingNull"} + nullOnlyEnumProp: {"$ref": "#/components/schemas/MyNullOnlyEnum"} + inlineEnumProp: + type: string + enum: ["a", "b"] +""", + config=""" +literal_enums: true +""", +) +@with_generated_code_import(".models.MyModel") +class TestLiteralEnums: + def test_enum_prop(self, MyModel): + assert_model_decode_encode(MyModel, {"enumProp": "a"}, MyModel(enum_prop="a")) + assert_model_decode_encode(MyModel, {"enumProp": "A"}, MyModel(enum_prop="A")) + assert_model_decode_encode(MyModel, {"intEnumProp": 2}, MyModel(int_enum_prop=2)) + assert_model_decode_encode(MyModel, {"inlineEnumProp": "a"}, MyModel(inline_enum_prop="a")) + + def test_enum_prop_type(self, MyModel): + assert MyModel.from_dict({"enumProp": "a"}).enum_prop.__class__ is str + assert MyModel.from_dict({"intEnumProp": 2}).int_enum_prop.__class__ is int + + def test_nullable_enum_prop(self, MyModel): + assert_model_decode_encode(MyModel, {"nullableEnumProp": "B"}, MyModel(nullable_enum_prop="B")) + assert_model_decode_encode(MyModel, {"nullableEnumProp": None}, MyModel(nullable_enum_prop=None)) + assert_model_decode_encode(MyModel, {"enumIncludingNullProp": "a"}, MyModel(enum_including_null_prop="a")) + assert_model_decode_encode(MyModel, {"enumIncludingNullProp": None}, MyModel(enum_including_null_prop=None)) + assert_model_decode_encode(MyModel, {"nullOnlyEnumProp": None}, MyModel(null_only_enum_prop=None)) + + def test_invalid_values(self, MyModel): + with pytest.raises(TypeError): + MyModel.from_dict({"enumProp": "c"}) + with pytest.raises(TypeError): + MyModel.from_dict({"enumProp": 2}) + with pytest.raises(TypeError): + MyModel.from_dict({"intEnumProp": 0}) + with pytest.raises(TypeError): + MyModel.from_dict({"intEnumProp": "a"}) + + +@with_generated_client_fixture( +""" +components: + schemas: + MyEnum: + type: string + enum: ["a", "A"] + MyModel: + properties: + enumProp: + allOf: + - $ref: "#/components/schemas/MyEnum" + default: A +""", + config="literal_enums: true", +) +@with_generated_code_import(".models.MyModel") +class TestLiteralEnumDefaults: + def test_default_value(self, MyModel): + assert MyModel().enum_prop == "A" + + +class TestLiteralEnumInvalidSchemas: + @pytest.fixture(scope="class") + def warnings(self): + return inline_spec_should_cause_warnings( +""" +components: + schemas: + WithBadDefaultValue: + enum: ["A"] + default: "B" + WithBadDefaultType: + enum: ["A"] + default: 123 + WithMixedTypes: + enum: ["A", 1] + WithUnsupportedType: + enum: [1.4, 1.5] + DefaultNotMatchingConst: + const: "aaa" + default: "bbb" +""", + config="literal_enums: true", + ) + + def test_enum_bad_default_value(self, warnings): + assert_bad_schema_warning(warnings, "WithBadDefaultValue", "Value B is not valid") + + def test_enum_bad_default_type(self, warnings): + assert_bad_schema_warning(warnings, "WithBadDefaultType", "Cannot convert 123 to enum") + + def test_enum_mixed_types(self, warnings): + assert_bad_schema_warning(warnings, "WithMixedTypes", "Enum values must all be the same type") + + def test_enum_unsupported_type(self, warnings): + assert_bad_schema_warning(warnings, "WithUnsupportedType", "Unsupported enum type") + + def test_const_default_not_matching(self, warnings): + assert_bad_schema_warning(warnings, "DefaultNotMatchingConst", "Invalid value for const") + + def test_enum_duplicate_values(self): + # This one currently causes a full generator failure rather than a warning + result = inline_spec_should_fail( +""" +components: + schemas: + WithDuplicateValues: + enum: ["x", "x"] +""" + ) + assert "Duplicate key X in enum" in str(result.exception) diff --git a/end_to_end_tests/generated_code_live_tests/test_property_encoding.py b/end_to_end_tests/generated_code_live_tests/test_property_encoding.py index 4540ec5c6..94809545e 100644 --- a/end_to_end_tests/generated_code_live_tests/test_property_encoding.py +++ b/end_to_end_tests/generated_code_live_tests/test_property_encoding.py @@ -133,6 +133,7 @@ def test_decode_error_not_object(self, bad_data, MyModel): dateProp: {"type": "string", "format": "date"} dateTimeProp: {"type": "string", "format": "date-time"} uuidProp: {"type": "string", "format": "uuid"} + unknownFormatProp: {"type": "string", "format": "weird"} """) @with_generated_code_imports(".models.MyModel") class TestSpecialStringFormats: @@ -150,3 +151,7 @@ def test_uuid(self, MyModel): uuid_value = uuid.uuid1() json_data = {"uuidProp": str(uuid_value)} assert_model_decode_encode(MyModel, json_data, MyModel(uuid_prop=uuid_value)) + + def test_unknown_format(self, MyModel): + json_data = {"unknownFormatProp": "whatever"} + assert_model_decode_encode(MyModel, json_data, MyModel(unknown_format_prop="whatever")) diff --git a/localtest/v2api.yml b/localtest/v2api.yml new file mode 100644 index 000000000..c31d94274 --- /dev/null +++ b/localtest/v2api.yml @@ -0,0 +1,33030 @@ +paths: + /aa-sequences: + get: + description: List AA sequences + operationId: listAASequences + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of an AA Sequence. Restricts results to those with the specified + name, alias, or entity registry ID. + in: query + name: name + schema: + type: string + - description: Name substring of an AA sequence. Restricts results to those + with names, aliases, or entity registry IDs that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: String of amino acids. Restricts results to AA sequences exactly + matching these amino acids (case-insensitive). + in: query + name: aminoAcids + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. + in: query + name: folderId + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to AA sequences + mentioned in those entries. + + ' + in: query + name: mentionedIn + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'ID of a registry. Restricts results to those registered in this + registry. Specifying "null" returns unregistered items. + + ' + in: query + name: registryId + schema: + nullable: true + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived AA sequences. + Use "ANY_ARCHIVED" to filter for archived AA sequences regardless of reason. + Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and + unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of item IDs. Restricts results to those + that mention the given items in the description. + + ' + in: query + name: mentions + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: prtn_6gxJGfPh,prtn_u7fOvqWg + type: string + - description: 'Comma-separated list of entity registry IDs. Maximum of 100. + Restricts results to those that match any of the specified registry IDs. + + ' + in: query + name: entityRegistryIds.anyOf + schema: + example: TP001,TP002 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case insensitive. Warning - this filter can be non-performant due + to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma separated list of user or app IDs. Maximum of 100. + in: query + name: authorIds.anyOf + schema: + example: ent_a0SApq3z,ent_b4AApz9b + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note**: Fields annotations, translations, and primers cannot be introspected + with the returning parameter, and any sub fields will be ignored. E.g.: + "aaSequences.annotations.id" will return the same as "aaSequences.annotations". + + ' + in: query + name: returning + schema: + example: aaSequences.id,aaSequences.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List AA sequences + tags: + - AA Sequences + post: + description: Create an AA sequence + operationId: createAASequence + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequenceCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequence' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '503': + description: Deprecated, a 429 is returned for too many requests + summary: Create an AA sequence + tags: + - AA Sequences + /aa-sequences/{aa_sequence_id}: + get: + description: Get an AA sequence + operationId: getAASequence + parameters: + - in: path + name: aa_sequence_id + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note**: Fields annotations, translations, and primers cannot be introspected + with the returning parameter, and any sub fields will be ignored. E.g.: + "annotations.id" will return the same as "annotations". + + ' + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequence' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get an AA sequence + tags: + - AA Sequences + patch: + description: Update an AA sequence + operationId: updateAASequence + parameters: + - in: path + name: aa_sequence_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequenceUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequence' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update an AA sequence + tags: + - AA Sequences + /aa-sequences/{entity_registry_id}:upsert: + patch: + description: 'Create or update a registered AA sequence. + + + Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). + + ' + operationId: upsertAaSequence + parameters: + - in: path + name: entity_registry_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequenceUpsert' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequence' + description: OK + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequence' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create or update a registered AA sequence. + tags: + - AA Sequences + /aa-sequences:archive: + post: + description: Archive AA sequences + operationId: archiveAASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive AA sequences + tags: + - AA Sequences + /aa-sequences:auto-annotate: + post: + description: Auto-annotate AA sequences with matching features from specified + Feature Libraries + operationId: autoAnnotateAaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutoAnnotateAaSequences' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task has an empty response. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Auto-annotate AA sequences with matching features from specified Feature + Libraries + tags: + - AA Sequences + /aa-sequences:back-translate: + post: + description: Create back-translated DNA sequences from AA sequences. + operationId: backTranslate + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BackTranslate' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the resources of the DNA Sequence entities + that were back-translated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create back-translated DNA sequences from AA sequences. + tags: + - AA Sequences + /aa-sequences:bulk-create: + post: + description: Bulk Create AA sequences. Limit of 1000 AA Sequences per request. + operationId: bulkCreateAASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of AA Sequences that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create AA sequences + tags: + - AA Sequences + /aa-sequences:bulk-get: + get: + description: Bulk get AA sequences by ID + operationId: bulkGetAASequences + parameters: + - description: 'Comma-separated list of IDs of AA sequences to get. + + ' + in: query + name: aaSequenceIds + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note**: Fields annotations, translations, and primers cannot be introspected + with the returning parameter, and any sub fields will be ignored. E.g.: + "aaSequences.annotations.id" will return the same as "aaSequences.annotations". + + ' + in: query + name: returning + schema: + example: aaSequences.id, aaSequences.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk get AA sequences by ID + tags: + - AA Sequences + /aa-sequences:bulk-update: + post: + description: Bulk Update AA sequences + operationId: bulkUpdateAASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [AA Sequence](#/AA%20Sequences/bulkGetAASequences) + resources + + that were updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update AA sequences + tags: + - AA Sequences + /aa-sequences:bulk-upsert: + post: + description: 'All entities and their schemas must be within the same registry. + + + This operation performs the following actions: + + 1. Any existing objects are looked up in Benchling by the provided entity + registry ID. + + 2. Then, all objects are either created or updated accordingly, temporarily + skipping any schema field links between objects. + + 3. Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). You may link to objects + being created in the same operation. + + 4. Entities are registered, using the provided name and entity registry ID. + + + If any action fails, the whole operation is canceled and no objects are created + or updated. + + ' + operationId: bulkUpsertAASequences + parameters: + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: aaSequences.id,aaSequences.creator.handle + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesBulkUpsertRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the resources of the objects that were + upserted. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk upsert AA sequences + tags: + - AA Sequences + /aa-sequences:find-matching-regions: + post: + description: Find matching regions for AA sequences + operationId: findMatchingRegionsAaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesFindMatchingRegion' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + It is used to search for AA sequences that are either subsequences or + exact matches of the provided target sequences. + + Each returned item represents the group of sequences that partially or + fully match the target sequence." + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Find matching regions for AA sequences + tags: + - AA Sequences + /aa-sequences:match-amino-acids: + post: + description: 'Returns AA Sequences that exactly match the provided amino acids. + + ' + operationId: matchAminoAcidsAaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesMatchBases' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesPaginatedList' + description: A filtered list of AA Sequences + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List entities with matching amino acids + tags: + - AA Sequences + /aa-sequences:search-amino-acids: + post: + description: 'Returns AA Sequences that contain the provided amino acids. Search + indexing is asynchronous, so results my be not be available immediately after + creation. + + ' + operationId: searchAaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesSearchBases' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesPaginatedList' + description: A filtered list of AA Sequences + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Search AA Sequences + tags: + - AA Sequences + /aa-sequences:unarchive: + post: + description: Unarchive AA sequences + operationId: unarchiveAASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AaSequencesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive AA sequences + tags: + - AA Sequences + /app-canvases: + post: + description: 'Create an App Canvas that a Benchling App can write to and read + user interaction from. + + ' + operationId: createAppCanvas + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AppCanvasCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/AppCanvas' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + summary: Create an App Canvas + tags: + - Apps + /app-canvases/{canvas_id}: + get: + description: Get the current state of the App Canvas, including user input elements. + operationId: getAppCanvas + parameters: + - example: cnvs_Q4mPJ34a + in: path + name: canvas_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AppCanvas' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get App Canvas + tags: + - Apps + patch: + description: Update App Canvas + operationId: updateAppCanvas + parameters: + - example: cnvs_Q4mPJ34a + in: path + name: canvas_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AppCanvasUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AppCanvas' + description: OK + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update App Canvas + tags: + - Apps + /app-canvases:archive: + post: + description: Archive app canvases + operationId: archiveAppCanvases + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AppCanvasesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AppCanvasesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive app canvases + tags: + - Apps + /app-canvases:unarchive: + post: + description: Unarchive app canvases + operationId: unarchiveAppCanvases + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AppCanvasesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AppCanvasesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive app canvases + tags: + - Apps + /app-configuration-items: + get: + description: Get app configuration items + operationId: listAppConfigurationItems + parameters: + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: Number of results to return. Defaults to 50, maximum of 100. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: App id to which the configuration belongs. + example: app_e59sjL23Pqn30xHg + in: query + name: appId + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: aci_VfVOART1,aci_RFhDGaaC + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are modifiedAt + (modified time, most recent first) and createdAt (created time, most recent + first). Optionally add :asc or :desc to specify ascending or descending + order. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + nullable: false + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AppConfigurationPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get app configuration items + tags: + - Apps + post: + description: Create app configuration item + operationId: createAppConfigurationItem + requestBody: + content: + application/json: + example: "{\n \"appId\": \"app_J39na03L1nsLS34o\",\n \"path\": [\n \ + \ \"My Schema 1\",\n \"My Field 1\"\n ],\n \"type\": \"field\"\ + ,\n \"value\": \"tsf_HXUnClU9\"\n}\n" + schema: + $ref: '#/components/schemas/AppConfigItemCreate' + responses: + '201': + content: + application/json: + example: "{\n \"apiURL\": \"string\",\n \"app\": {\n \"id\": \"\ + string\"\n },\n \"createdAt\": \"2024-03-14T21:52:32.929Z\",\n \ + \ \"id\": \"string\",\n \"type\": \"field\",\n \"modifiedAt\": \"\ + 2024-03-14T21:52:32.929Z\",\n \"path\": [\n \"My Schema 1\",\n\ + \ \"My Field 1\"\n ],\n \"value\": \"tsf_HXUnClU9\"\n}\n" + schema: + $ref: '#/components/schemas/AppConfigItem' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create app configuration item + tags: + - Apps + /app-configuration-items/{item_id}: + get: + description: Get app configuration item + operationId: getAppConfigurationItemById + parameters: + - example: aci_e59sjL23Pqn30xHg + in: path + name: item_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + example: "{\n \"apiURL\": \"string\",\n \"app\": {\n \"id\": \"\ + string\"\n },\n \"createdAt\": \"2024-03-14T21:54:20.435Z\",\n \ + \ \"id\": \"string\",\n \"type\": \"field\",\n \"modifiedAt\": \"\ + 2024-03-14T21:54:20.435Z\",\n \"path\": [\n \"My Schema 1\",\n\ + \ \"My Field 1\"\n ]\n}\n" + schema: + $ref: '#/components/schemas/AppConfigItem' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get app configuration item + tags: + - Apps + patch: + description: Update app configuration item + operationId: updateAppConfigurationItem + parameters: + - example: aci_e59sjL23Pqn30xHg + in: path + name: item_id + required: true + schema: + type: string + requestBody: + content: + application/json: + example: "{\n \"apiURL\": \"string\",\n \"app\": {\n \"id\": \"string\"\ + \n },\n \"createdAt\": \"2024-03-14T21:59:01.233Z\",\n \"id\": \"\ + string\",\n \"type\": \"field\",\n \"modifiedAt\": \"2024-03-14T21:59:01.233Z\"\ + ,\n \"path\": [\n \"My Schema 1\",\n \"My Field 1\"\n ]\n}\n" + schema: + $ref: '#/components/schemas/AppConfigItemUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AppConfigItem' + description: OK + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update app configuration item + tags: + - Apps + /app-configuration-items:bulk-create: + post: + description: Bulk Create app configuration items + operationId: bulkCreateAppConfigurationItems + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AppConfigItemsBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: Accepted + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create app configuration items. Limit of 1000 App Config Items + per request. + tags: + - Apps + /app-configuration-items:bulk-update: + post: + description: Bulk Update app configuration items + operationId: bulkUpdateAppConfigurationItems + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AppConfigItemsBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: Accepted + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update app configuration items. Limit of 1000 App Config Items + per request. + tags: + - Apps + /app-sessions: + post: + description: 'Create a new app session. Sessions cannot be archived once created. + + ' + operationId: createAppSession + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AppSessionCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/AppSession' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + summary: Create a new app session + tags: + - Apps + /app-sessions/{id}: + get: + description: Get an app session + operationId: getAppSessionById + parameters: + - example: sesn_J2PGE0Z516Y + in: path + name: id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AppSession' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get an app session + tags: + - Apps + patch: + description: Update app session + operationId: updateAppSession + parameters: + - in: path + name: id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AppSessionUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AppSession' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update app session + tags: + - Apps + /apps: + get: + description: List apps + operationId: listBenchlingApps + parameters: + - description: Number of results to return. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + in: query + name: sort + schema: + default: modifiedAt + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - name + - modifiedAt:asc + - name:asc + - modifiedAt:desc + - name:desc + nullable: false + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: app_J39na03L1nsLS34o,app_ae92kBv9aNSl593z,app_e59sjL23Pqn30xHg + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of an app. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: Name substring of an app. Restricts results to those with names + that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Comma-separated list of app names. Maximum of 100. Restricts + results to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1, MyName2 + type: string + - description: 'Comma-separated list of app names. Maximum of 100. Restricts + results to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma-separated list of organization and/or team API IDs. Restricts + results to apps that are members of all given groups. + in: query + name: memberOf + schema: + type: string + - description: Comma-separated list of organization and/or team API IDs. Restricts + results to apps that are admins of all given groups. + in: query + name: adminOf + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingAppsPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + summary: List apps + tags: + - Apps + post: + deprecated: true + description: Create an app + operationId: createBenchlingApp + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingAppCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingApp' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '409': + content: + application/json: + schema: + $ref: '#/components/schemas/ConflictError' + description: Conflict + summary: Create an app + tags: + - Apps + /apps/{app_id}: + get: + description: Get an app by ID + operationId: getBenchlingAppByID + parameters: + - example: app_J39na03L1nsLS34o + in: path + name: app_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingApp' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get an app by ID + tags: + - Apps + patch: + deprecated: true + description: Update an app + operationId: patchBenchlingApp + parameters: + - example: app_e59sjL23Pqn30xHg + in: path + name: app_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingAppUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingApp' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update an app + tags: + - Apps + /apps:archive: + post: + deprecated: true + description: Archive apps + operationId: archiveBenchlingApps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingAppsArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingAppsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive apps + tags: + - Apps + /apps:unarchive: + post: + deprecated: true + description: Unarchive apps + operationId: unarchiveBenchlingApps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingAppsUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BenchlingAppsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive apps + tags: + - Apps + /assay-result-schemas: + get: + description: List assay result schemas + operationId: listAssayResultSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultSchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed assay results in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List assay result schemas + tags: + - Schemas + /assay-result-schemas/{schema_id}: + get: + description: Get a Result schema by ID + operationId: getResultSchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultSchema' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a Result schema by ID + tags: + - Schemas + /assay-results: + get: + description: List results + operationId: listAssayResults + parameters: + - description: ID of the assay result schema to filter by + in: query + name: schemaId + required: false + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts + results to those created before the specified time. e.g. < 2017-04-30. + + ' + in: query + name: createdAt.lt + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts + results to those created after the specified time. e.g. > 2017-04-30. + + ' + in: query + name: createdAt.gt + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts + results to those created on or before the specified time. e.g. <= 2017-04-30. + + ' + in: query + name: createdAt.lte + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts + results to those created on or after the specified time. e.g. >= 2017-04-30. + + ' + in: query + name: createdAt.gte + schema: + type: string + - deprecated: true + description: Filter by results created after this unix timestamp + in: query + name: minCreatedTime + schema: + type: integer + - deprecated: true + description: Filter by results created before this unix timestamp + in: query + name: maxCreatedTime + schema: + type: integer + - description: 'Method by which to order search results. Valid sorts are createdAt + (created time, oldest first). Use :asc or :desc to specify ascending or + descending order. Default is createdAt:asc. + + ' + in: query + name: sort + schema: + default: createdAt:asc + enum: + - createdAt:asc + - createdAt:desc + - modifiedAt:asc + - modifiedAt:desc + nullable: false + type: string + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: Number of results to return. Defaults to 50, maximum of 100. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Filter by comma-separated list of related Entity IDs, maximum + of 20. + in: query + name: entityIds + schema: + type: string + - description: 'Filter by comma-separated list of related inventory (container, + box, plate, or location) IDs, maximum of 20. + + ' + in: query + name: storageIds + schema: + type: string + - description: Filter by comma-separated list of associated AssayRun IDs. At + most one of {assayRunIds, automationOutputProcessorId} may be supplied. + in: query + name: assayRunIds + schema: + type: string + - description: Filter by Automation Output Processor ID. Either this or schemaId + is required; if both are given, the associated schemas must match. At most + one of {assayRunIds, automationOutputProcessorId} may be supplied. + in: query + name: automationOutputProcessorId + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + format: uuid + type: string + - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts + results to those modified before the specified time. e.g. < 2017-04-30. + + ' + in: query + name: modifiedAt.lt + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts + results to those modified after the specified time. e.g. > 2017-04-30. + + ' + in: query + name: modifiedAt.gt + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts + results to those modified on or before the specified time. e.g. <= 2017-04-30. + + ' + in: query + name: modifiedAt.lte + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts + results to those modified on or after the specified time. e.g. >= 2017-04-30. + + ' + in: query + name: modifiedAt.gte + schema: + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived Assay Results. + Use "ANY_ARCHIVED" to filter for archived Assay Results regardless of reason. + Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and + unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultsPaginatedList' + description: OK + summary: List results + tags: + - Assay Results + post: + description: 'Create 1 or more results. + + If you are looking to add results to a specific table in a notebook entry, + please use the [assay-results bulk-create](#/Assay%20Results/bulkCreateAssayResults) + endpoint instead. + + ' + operationId: createAssayResults + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultsBulkCreateRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultsCreateResponse' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create 1 or more results. + tags: + - Assay Results + /assay-results/{assay_result_id}: + get: + description: Get a result + operationId: getAssayResult + parameters: + - in: path + name: assay_result_id + required: true + schema: + format: uuid + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResult' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get a result + tags: + - Assay Results + /assay-results:archive: + post: + description: 'Results that have been added to a Legacy Result or Legacy Run + table in a Notebook Entry **cannot** be Archived. + + ' + operationId: archiveAssayResults + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultsArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultIdsResponse' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive 1 or more results. + tags: + - Assay Results + /assay-results:bulk-create: + post: + description: Bulk create results. Limit of 4000 results per request. + operationId: bulkCreateAssayResults + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultsBulkCreateInTableRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. The task response contains + the full list of results that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk create results + tags: + - Assay Results + /assay-results:bulk-get: + get: + description: Up to 200 IDs can be specified at once. + operationId: bulkGetAssayResults + parameters: + - description: Comma-separated list of assay result IDs. + in: query + name: assayResultIds + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultsBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Gets multiple results specified by a list of IDs. + tags: + - Assay Results + /assay-results:unarchive: + post: + description: Unarchive 1 or more results. + operationId: unarchiveAssayResults + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultIdsRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultIdsResponse' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive 1 or more results. + tags: + - Assay Results + /assay-run-schemas: + get: + description: List assay run schemas + operationId: listAssayRunSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunSchemasPaginatedList' + description: OK + headers: + Run-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed assay runs in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List assay run schemas + tags: + - Schemas + /assay-run-schemas/{schema_id}: + get: + description: Get a Run schema by ID + operationId: getRunSchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunSchema' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a Run schema by ID + tags: + - Schemas + /assay-runs: + get: + description: List runs + operationId: listAssayRuns + parameters: + - description: ID of the assay run schema to filter by + in: query + name: schemaId + required: true + schema: + type: string + - description: Filter by runs created after this unix timestamp + in: query + name: minCreatedTime + schema: + type: integer + - description: Filter by runs created before this unix timestamp + in: query + name: maxCreatedTime + schema: + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: Number of results to return. Defaults to 50, maximum of 100. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + format: uuid + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunsPaginatedList' + description: OK + summary: List runs + tags: + - Assay Runs + post: + description: Create 1 or more runs. + operationId: createAssayRuns + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunsBulkCreateRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunsBulkCreateResponse' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunsBulkCreateErrorResponse' + description: Bad Request + summary: Create 1 or more runs. + tags: + - Assay Runs + /assay-runs/{assay_run_id}: + get: + description: Get a run + operationId: getAssayRun + parameters: + - in: path + name: assay_run_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRun' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get a run + tags: + - Assay Runs + patch: + description: Update a run + operationId: updateAssayRun + parameters: + - description: ID of the Run to be updated + in: path + name: assay_run_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRun' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update a run + tags: + - Assay Runs + /assay-runs/{assay_run_id}/automation-input-generators: + get: + description: list AutomationInputGenerators by Run + operationId: listAutomationInputGenerators + parameters: + - in: path + name: assay_run_id + required: true + schema: + type: string + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationFileInputsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: list AutomationInputGenerators by Run + tags: + - Assay Runs + /assay-runs/{assay_run_id}/automation-output-processors: + get: + deprecated: true + description: Deprecated in favor of '/automation-output-processors'. For each + output config in the run config, will create an empty automationOutputProcessor + for the run if one doesn't exist. + operationId: listAutomationOutputProcessorsDeprecated + parameters: + - in: path + name: assay_run_id + required: true + schema: + type: string + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DeprecatedAutomationOutputProcessorsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: list AutomationOutputProcessors by Run + tags: + - Assay Runs + /assay-runs:archive: + post: + description: Archive assay runs that are not embedded in a notebook entry + operationId: archiveAssayRuns + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunsArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive Assay Runs + tags: + - Assay Runs + /assay-runs:bulk-get: + get: + description: Bulk get runs by ID + operationId: bulkGetAssayRuns + parameters: + - description: Comma-separated list of assay run IDs + in: query + name: assayRunIds + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunsBulkGet' + description: OK + summary: Bulk get runs by ID + tags: + - Assay Runs + /assay-runs:unarchive: + post: + description: Unarchive assay runs + operationId: unarchiveAssayRuns + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunsUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayRunsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive Assay Runs + tags: + - Assay Runs + /automation-file-transforms/{transform_id}: + get: + description: Get a Lab Automation Transform step + operationId: getLabAutomationTransform + parameters: + - in: path + name: transform_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LabAutomationTransform' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a Lab Automation Transform step + tags: + - Lab Automation + patch: + description: Update a Lab Automation Transform step + operationId: updateLabAutomationTransform + parameters: + - in: path + name: transform_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LabAutomationTransformUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LabAutomationTransform' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update a Lab Automation Transform step + tags: + - Lab Automation + /automation-input-generators/{input_generator_id}: + get: + description: Get an Automation Input Generator + operationId: getAutomationInputGenerator + parameters: + - in: path + name: input_generator_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationInputGenerator' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get an Automation Input Generator + tags: + - Lab Automation + patch: + description: Update an Automation Input Generator + operationId: updateAutomationInputGenerator + parameters: + - in: path + name: input_generator_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationInputGeneratorUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationInputGenerator' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update an Automation Input Generator + tags: + - Lab Automation + /automation-input-generators/{input_generator_id}:generate-input: + post: + description: Generate Input with an Automation Input Generator + operationId: generateInputWithAutomationInputGenerator + parameters: + - in: path + name: input_generator_id + required: true + schema: + type: string + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the Automation Input Generator with the generated + file. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Generate Input with an Automation Input Generator + tags: + - Lab Automation + /automation-output-processors: + get: + description: List Automation Output Processors which have an attached file + operationId: listAutomationOutputProcessors + parameters: + - description: Id of the Run + in: query + name: assayRunId + schema: + type: string + - description: Name of the Automation File Config + in: query + name: automationFileConfigName + schema: + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived processors. + Use "ANY_ARCHIVED" to filter for archived processors regardless of reason. + Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and + unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessorsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List non-empty Automation Output Processors + tags: + - Lab Automation + post: + description: Create Automation Output Processor + operationId: createAutomationOutputProcessor + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessorCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessor' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create Automation Output Processor + tags: + - Lab Automation + /automation-output-processors/{output_processor_id}: + get: + description: Get an Automation Output Processor + operationId: getAutomationOutputProcessor + parameters: + - in: path + name: output_processor_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessor' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get an Automation Output Processor + tags: + - Lab Automation + patch: + description: Update an Automation Output Processor + operationId: updateAutomationOutputProcessor + parameters: + - in: path + name: output_processor_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessorUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessor' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update an Automation Output Processor + tags: + - Lab Automation + /automation-output-processors/{output_processor_id}:process-output: + post: + description: Process Output with an Automation Output Processor + operationId: processOutputWithAutomationOutputProcessor + parameters: + - in: path + name: output_processor_id + required: true + schema: + type: string + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the Automation Output Processor that was processed. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Process Output with an Automation Output Processor + tags: + - Lab Automation + /automation-output-processors:archive: + post: + description: Archive Automation Output Processors and linked Results + operationId: archiveAutomationOutputProcessors + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessorsArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessorArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive Automation Output Processors and linked Results + tags: + - Lab Automation + /automation-output-processors:unarchive: + post: + description: Unarchive Automation Output Processors and linked Results + operationId: unarchiveAutomationOutputProcessors + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessorsUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationOutputProcessorArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive Automation Output Processors and linked Results + tags: + - Lab Automation + /batch-schemas: + get: + description: List batch schemas + operationId: listBatchSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BatchSchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List batch schemas + tags: + - Schemas + /batch-schemas/{schema_id}: + get: + description: Get a batch schema by ID + operationId: getBatchSchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BatchSchema' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a batch schema by ID + tags: + - Schemas + /blobs: + post: + description: ' + + This endpoint uploads a blob in a single API call. + + + Blobs larger than 10MB should be uploaded in [multiple parts](#/Blobs/createMultipartBlob). + The data64 parameter is the base64-encoded part contents, and the md5 parameter + is the hex-encoded MD5 hash of the part contents. For example, given the string + hello, data64 is aGVsbG8= and md5 is 5d41402abc4b2a76b9719d911017c592. + + ' + operationId: createBlob + requestBody: + content: + application/json: + examples: + raw_file: + summary: A file containing the string "hello" + value: + data64: aGVsbG8= + md5: 5d41402abc4b2a76b9719d911017c592 + mimeType: text/plain + name: hello.txt + type: RAW_FILE + visualization_file: + summary: A .png image + value: + data64: iVBORw0KGgoAAAANSUhEUgAAAB4AAAAUBAMAAABohZD3AAAAG1BMVEUAAAD////f39+/v78fHx9/f39fX1+fn58/Pz+3dh1rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAT0lEQVQYlWNgoDlQBhGF7AIwvjOIYGJQwMkPSigsAPLZhRrAfCe3sgAzID+dDaLEmcNUUBTIL2NQgfLNAkD6k1wg8oqFooUahepCMP00BQC95QvY1zDquQAAAABJRU5ErkJggg== + md5: 50170053b55179167f1c21350c869bb7 + mimeType: image/png + name: hello.png + type: VISUALIZATION + schema: + $ref: '#/components/schemas/BlobCreate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Blob' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Upload single-part blob + tags: + - Blobs + /blobs/{blob_id}: + get: + description: Get a Blob + operationId: getBlob + parameters: + - in: path + name: blob_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Blob' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a Blob + tags: + - Blobs + /blobs/{blob_id}/download: + get: + description: "Download a blob.\n\nThis endpoint issues a 302 redirect to a pre-signed\ + \ download link.\nIt does not consume from the standard rate-limit.\n\nExample\ + \ `wget` usage with a User API Key:\n```bash\nexport BLOB_ID=\"ffe43fd5-b928-4996-9b7f-40222cd33d8e\"\ + \nwget \"https://tenant.benchling.com/api/v2/blobs/$BLOB_ID/download\" \\\n\ + \ --user $API_TOKEN \\ # Your API Key\n --password '' \\ \ + \ # Leave password empty\n --content-disposition # Save file with\ + \ original filename\n```\n\n**Note: Calling this endpoint from a browser is\ + \ not supported.**\n" + operationId: getBlobFile + parameters: + - in: path + name: blob_id + required: true + schema: + type: string + responses: + '200': + description: OK + '302': + description: Redirect to Content Location + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Download a blob + tags: + - Blobs + /blobs/{blob_id}/download-url: + get: + description: Get a Blob's download url + operationId: getBlobUrl + parameters: + - in: path + name: blob_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BlobUrl' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a Blob's download url + tags: + - Blobs + /blobs/{blob_id}/parts: + post: + description: ' + + Upload a part of the blob. This part must be at least 5MB, unless it''s the + last or only part. It''s recommended to keep the part size around 10MB. + + + The data64 parameter is the base64-encoded part contents, and the md5 parameter + is the hex-encoded MD5 hash of the part contents. For example, given the string + hello, data64 is aGVsbG8= and md5 is 5d41402abc4b2a76b9719d911017c592. + + + ## Multipart Upload + + + If a blob is larger than 10MB, it should be uploaded in multiple parts using + the following endpoints: + + - [Start a multi-part blob upload](#/Blobs/createMultipartBlob) + + - [Upload a blob part](#/Blobs/createBlobPart) + + - [Complete a blob upload](#/Blobs/completeMultipartBlob) + + + Each part has a *partNumber* and an *eTag*. The part number can be any number + between 1 to 10,000, inclusive - this number should be unique and identifies + the order of the part in the final blob. The eTag of a part is returned in + the API response - this eTag must be specified when completing the upload + in order to ensure the server has received all the expected parts. + + ' + operationId: createBlobPart + parameters: + - in: path + name: blob_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BlobPartCreate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BlobPart' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Upload a part of a multi-part blob + tags: + - Blobs + /blobs/{blob_id}:abort-upload: + post: + description: Abort multi-part blob upload + operationId: abortMultipartBlob + parameters: + - in: path + name: blob_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmptyObject' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Abort multi-part blob upload + tags: + - Blobs + /blobs/{blob_id}:complete-upload: + post: + description: ' + + Combine blob parts into a single blob. + + + ## Multipart Upload + + + If a blob is larger than 10MB, it should be uploaded in multiple parts using + the following endpoints: + + - [Start a multi-part blob upload](#/Blobs/createMultipartBlob) + + - [Upload a blob part](#/Blobs/createBlobPart) + + - [Complete a blob upload](#/Blobs/completeMultipartBlob) + + + Each part must be at least 5MB in size, except for the last part. We recommend + keeping each part to under 10MB when uploading. + + + Each part has a *partNumber* and an *eTag*. The part number can be any number + between 1 to 10,000, inclusive - this number should be unique and identifies + the order of the part in the final blob. The eTag of a part is returned in + the API response - this eTag must be specified when completing the upload + in order to ensure the server has received all the expected parts. + + ' + operationId: completeMultipartBlob + parameters: + - in: path + name: blob_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BlobComplete' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Blob' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Complete multi-part blob upload + tags: + - Blobs + /blobs:bulk-get: + get: + description: Bulk get Blobs by UUID + operationId: bulkGetBlobs + parameters: + - description: Comma-separated list of blob IDs. + in: query + name: blobIds + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: blobs.id,blobs.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BlobsBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk get Blobs by UUID + tags: + - Blobs + /blobs:start-multipart-upload: + post: + description: ' + + Blobs may be uploaded using multi-part upload. This endpoint initiates the + upload process - blob parts can then be uploaded in multiple blob parts. + + + ## Multipart Upload + + + If a blob is larger than 10MB, it should be uploaded in multiple parts using + the following endpoints: + + - [Start a multi-part blob upload](#/Blobs/createMultipartBlob) + + - [Upload a blob part](#/Blobs/createBlobPart) + + - [Complete a blob upload](#/Blobs/completeMultipartBlob) + + + Each part must be at least 5MB in size, except for the last part. We recommend + keeping each part to under 10MB when uploading. + + + Each part has a *partNumber* and an *eTag*. The part number can be any number + between 1 to 10,000, inclusive - this number should be unique and identifies + the order of the part in the final blob. The eTag of a part is returned in + the API response - this eTag must be specified when completing the upload + in order to ensure the server has received all the expected parts. + + ' + operationId: createMultipartBlob + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BlobMultipartCreate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Blob' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Initiate multi-part blob upload + tags: + - Blobs + /box-schemas: + get: + description: List box schemas + operationId: listBoxSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoxSchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List box schemas + tags: + - Schemas + /box-schemas/{schema_id}: + get: + description: Get a box schema by ID + operationId: getBoxSchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoxSchema' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a box schema by ID + tags: + - Schemas + /boxes: + get: + description: List boxes + operationId: listBoxes + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are barcode, + name, modifiedAt, and createdAt. Optionally add :asc or :desc to specify + ascending or descending order. Default is modifiedAt. + + ' + enum: + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + - createdAt + - createdAt:asc + - createdAt:desc + - barcode + - barcode:asc + - barcode:desc + nullable: false + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a box. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: 'Name substring of a box. Restricts results to those with names + that include the provided substring. + + ' + in: query + name: nameIncludes + schema: + type: string + - description: 'Only return boxes that have the specified number of empty positions + + ' + in: query + name: emptyPositions + schema: + type: integer + - description: 'Only return boxes that have greater-than or equal-to the specified + number of empty positions. + + ' + in: query + name: emptyPositions.gte + schema: + type: integer + - description: 'Only return boxes that have greater-than the specified number + of empty positions. + + ' + in: query + name: emptyPositions.gt + schema: + type: integer + - description: 'Only return boxes that have less-than or equal-to the specified + number of empty positions. + + ' + in: query + name: emptyPositions.lte + schema: + type: integer + - description: 'Only return boxes that have less-than the specified number of + empty positions. + + ' + in: query + name: emptyPositions.lt + schema: + type: integer + - description: 'Only return boxes that have the specified number of empty containers + (containers without contents). + + ' + in: query + name: emptyContainers + schema: + type: integer + - description: 'Only return boxes that have greater-than or equal-to the specified + number of empty containers (containers without contents). + + ' + in: query + name: emptyContainers.gte + schema: + type: integer + - description: 'Only return boxes that have greater-than the specified number + of empty containers (containers without contents). + + ' + in: query + name: emptyContainers.gt + schema: + type: integer + - description: 'Only return boxes that have less-than or equal-to the specified + number of empty containers (containers without contents). + + ' + in: query + name: emptyContainers.lte + schema: + type: integer + - description: 'Only return boxes that have less-than the specified number of + empty containers (containers without contents). + + ' + in: query + name: emptyContainers.lt + schema: + type: integer + - description: 'ID of a location. Restricts results to those located in the + specified inventory. + + ' + in: query + name: ancestorStorageId + schema: + type: string + - description: 'ID of a entity, or entity schema. Restricts results to those + that hold containers with entities associated with the specified ID. + + ' + in: query + name: storageContentsId + schema: + type: string + - description: 'Comma-separated list of IDs of entities. Restricts results to + those that hold containers with at least one of the specified entities. + + ' + in: query + name: storageContentsIds + schema: + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived boxes. Use "ANY_ARCHIVED" + to filter for archived boxes regardless of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" + to return items for both archived and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: box_Jx8Zsphf,box_s9Zv7Jto,box_mFDuLwA6 + type: string + - description: 'Comma-separated list of barcodes. Matches all of the provided + barcodes, or returns a 400 error that includes a list of which barcodes + are invalid. + + ' + in: query + name: barcodes + schema: + example: 10x10-BOX105,10x10-BOX115 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoxesPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List boxes + tags: + - Boxes + post: + description: Create a box + operationId: createBox + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BoxCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Box' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a box + tags: + - Boxes + /boxes/{box_id}: + get: + description: Get a box + operationId: getBox + parameters: + - in: path + name: box_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Box' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get a box + tags: + - Boxes + patch: + description: Update a box + operationId: updateBox + parameters: + - in: path + name: box_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BoxUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Box' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update a box + tags: + - Boxes + /boxes/{box_id}/contents: + get: + description: List a box's contents + operationId: listBoxContents + parameters: + - in: path + name: box_id + required: true + schema: + type: string + - description: Number of results to return. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoxContentsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: List a box's contents + tags: + - Boxes + /boxes:archive: + post: + description: Archive boxes and any containers of the boxes + operationId: archiveBoxes + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BoxesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoxesArchivalChange' + description: OK + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + summary: Archive boxes + tags: + - Boxes + /boxes:bulk-get: + get: + description: BulkGet boxes + operationId: bulkGetBoxes + parameters: + - in: query + name: boxIds + schema: + type: string + - in: query + name: barcodes + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoxesBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: BulkGet boxes + tags: + - Boxes + /boxes:unarchive: + post: + description: Unarchive boxes and the containers that were archived along with + them + operationId: unarchiveBoxes + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BoxesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoxesArchivalChange' + description: OK + summary: Unarchive boxes + tags: + - Boxes + /codon-usage-tables: + get: + description: 'List tables with codon usage data for organisms that can be specified + for other Benchling operations. + + ' + operationId: listCodonUsageTables + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: name:asc + description: 'Method by which to order search results. Valid sort is name + (entity name, alphabetical). Optionally add :asc or :desc to specify ascending + or descending order. + + ' + enum: + - name + - name:asc + - name:desc + nullable: false + type: string + - description: Name of a codon usage table (tables are named for the organisms + that they represent). Restricts results to those with the specified name. + in: query + name: name + schema: + example: Arabidopsis thaliana + type: string + - description: Name substring of a codon usage table (tables are named for the + organisms that they represent). Restricts results to those with names that + include the provided substring. + in: query + name: nameIncludes + schema: + example: thaliana + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: codtab_VfVOART1,codtab_RFhDGaaC + type: string + - description: 'Comma-separated list of names. Restricts results to those that + match any of the specified names. + + ' + in: query + name: names.anyOf + schema: + example: Arabidopsis thaliana,Anopheles stephensi + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CodonUsageTablesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List codon usage tables for organisms + tags: + - Codon Usage Tables + /container-schemas: + get: + description: List container schemas + operationId: listContainerSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerSchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List container schemas + tags: + - Schemas + /container-schemas/{schema_id}: + get: + description: Get a container schema by ID + operationId: getContainerSchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerSchema' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a container schema by ID + tags: + - Schemas + /containers: + get: + description: List containers + operationId: listContainers + parameters: + - description: Number of results to return. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: 'Method by which to order search results. Valid sorts are barcode, + name, modifiedAt, and createdAt. Optionally add :asc or :desc to specify + ascending or descending order. Default is modifiedAt. + + ' + in: query + name: sort + schema: + default: modifiedAt + enum: + - createdAt + - barcode + - modifiedAt + - name + - barcode:asc + - modifiedAt:asc + - name:asc + - barcode:desc + - modifiedAt:desc + - name:desc + - createdAt:asc + - createdAt:desc + nullable: false + type: string + - description: ID of a schema. Restricts results to those of the specified schema. + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a container. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: 'Name substring of a container. Restricts results to those with + names that include the provided substring. + + ' + in: query + name: nameIncludes + schema: + type: string + - description: ID of a plate, box, or location. Restricts results to those located + in the specified inventory. + in: query + name: ancestorStorageId + schema: + type: string + - description: 'ID of an entity or entity schema. Restricts results to those + that contain the specified entities or entities of the specified schema. + + ' + in: query + name: storageContentsId + schema: + type: string + - description: 'Comma-separated list of IDs of entities. Restricts results to + those that hold containers with at least one of the specified entities. + + ' + in: query + name: storageContentsIds + schema: + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived containers. + Use "ANY_ARCHIVED" to filter for archived containers regardless of reason. + Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and + unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of check-out statuses. Restricts results + to those that match one of the specified statuses. Valid statuses are AVAILABLE, + RESERVED, and CHECKED_OUT. + + ' + in: query + name: checkoutStatus + schema: + enum: + - AVAILABLE + - RESERVED + - CHECKED_OUT + type: string + - description: 'Comma-separated list of user or team IDs. Maximum of 100. Restricts + results to those that are reserved or checked out for a user or team who + matches any of the specified IDs or returns a 400 error with a list of invalid + IDs. + + ' + in: query + name: checkoutAssigneeIds.anyOf + schema: + example: ent_a0SApq3z,team_Il92ydiY + type: string + - description: 'Comma-separated list of restriction statuses. Restricts results + to those that match one of the specified statuses. Valid statuses are RESTRICTED, + UNRESTRICTED, and NOT_APPLICABLE. + + ' + in: query + name: restrictionStatus + schema: + $ref: '#/components/schemas/SampleRestrictionStatus' + - description: 'Comma-separated list of user or team IDs. Restricts results + to those that match all of the specified IDs or returns a 400 error with + a list of invalid IDs. + + ' + in: query + name: sampleOwnerIds.allOf + schema: + example: ent_a0SApq3z,team_Il92ydiY + type: string + - description: 'Comma-separated list of user or team IDs. Maximum of 100. Restricts + results to those that match any of the specified IDs or returns a 400 error + with a list of invalid IDs. + + ' + in: query + name: sampleOwnerIds.anyOf + schema: + example: ent_a0SApq3z,team_Il92ydiY + type: string + - description: 'Comma-separated list of user or team IDs. Restricts results + to those that do not match any of the specified IDs or returns a 400 error + with a list of invalid IDs. + + ' + in: query + name: sampleOwnerIds.noneOf + schema: + example: ent_a0SApq3z,team_Il92ydiY + type: string + - description: 'Comma-separated list of user, team, or app IDs. Restricts results + to those that match all of the specified IDs or returns a 400 error with + a list of invalid IDs. + + ' + in: query + name: restrictedSamplePartyIds.allOf + schema: + example: ent_a0SApq3z,team_Il92ydiY + type: string + - description: 'Comma-separated list of user, team, or app IDs. Maximum of 100. + Restricts results to those that match any of the specified IDs or returns + a 400 error with a list of invalid IDs. + + ' + in: query + name: restrictedSamplePartyIds.anyOf + schema: + example: ent_a0SApq3z,team_Il92ydiY + type: string + - description: 'Comma-separated list of user, team, or app IDs. Restricts results + to those that do not match any of the specified IDs or returns a 400 error + with a list of invalid IDs. + + ' + in: query + name: restrictedSamplePartyIds.noneOf + schema: + example: ent_a0SApq3z,team_Il92ydiY + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: con_Q6uhNZvw,con_OwmERWGE,con_nzuDFhNvz + type: string + - description: 'Comma-separated list of barcodes. Matches all of the provided + barcodes, or returns a 400 error that includes a list of which barcodes + are invalid. + + ' + in: query + name: barcodes + schema: + example: W103371,W103343,W103366 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: containers.id,containers.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersPaginatedList' + description: OK + '400': + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/BadRequestError' + properties: + invalidIds: + items: + type: string + type: array + type: object + description: Bad Request + summary: List containers + tags: + - Containers + post: + description: Create a new container + operationId: createContainer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Container' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a new container + tags: + - Containers + /containers/{container_id}: + get: + description: get a container by id + operationId: getContainer + parameters: + - in: path + name: container_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Container' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: get a container by id + tags: + - Containers + patch: + description: update a container + operationId: updateContainer + parameters: + - in: path + name: container_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Container' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: update a container + tags: + - Containers + /containers/{container_id}/contents: + get: + description: List a container's contents + operationId: listContainerContents + parameters: + - in: path + name: container_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerContentsList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: List a container's contents + tags: + - Containers + /containers/{container_id}/contents/{containable_id}: + delete: + description: Delete a container content + operationId: deleteContainerContent + parameters: + - in: path + name: container_id + required: true + schema: + type: string + - in: path + name: containable_id + required: true + schema: + type: string + responses: + '204': + description: No Content + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Delete a container content + tags: + - Containers + get: + description: Get a container content + operationId: getContainerContent + parameters: + - in: path + name: container_id + required: true + schema: + type: string + - in: path + name: containable_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerContent' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a container content + tags: + - Containers + patch: + description: Update a container content + operationId: updateContainerContent + parameters: + - in: path + name: container_id + required: true + schema: + type: string + - in: path + name: containable_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerContentUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerContent' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update a container content + tags: + - Containers + /containers/{destination_container_id}:transfer: + post: + description: 'Transfers a volume of an entity or container into a destination + container. + + Transfering a volume is cumulative with the existing destination container''s + contents. To transfer an entire container''s contents, the sourceContainerId + should be specified. To otherwise transfer multiple entities within a container, + you can make multiple calls to this endpoint, specifying a single entity with + each call. + + ' + operationId: transferIntoContainer + parameters: + - in: path + name: destination_container_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerTransfer' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmptyObject' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + summary: Transfer into container + tags: + - Containers + /containers:archive: + post: + description: Archive containers + operationId: archiveContainers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + summary: Archive containers + tags: + - Containers + /containers:bulk-create: + post: + description: Bulk create containers + operationId: bulkCreateContainers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of Containers that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk create containers. Limit of 1000 containers per request. + tags: + - Containers + /containers:bulk-get: + get: + description: Bulk get a set of containers. Provide either containerIds or barcodes, + not both. + operationId: bulkGetContainers + parameters: + - description: 'Comma-separated list of container IDs. + + ' + in: query + name: containerIds + schema: + type: string + - description: 'Comma-separated list of barcodes. Matches all of the provided + barcodes, or returns a 400 error that includes a list of which barcodes + are invalid. + + ' + in: query + name: barcodes + schema: + example: W102477,W102478 + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: containers.id,containers.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk get a set of containers + tags: + - Containers + /containers:bulk-update: + post: + description: Bulk update containers + operationId: bulkUpdateContainers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of Containers that were updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk update containers + tags: + - Containers + /containers:check-in: + post: + description: Check in containers to signify that they are available for use. + operationId: checkinContainers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersCheckin' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmptyObject' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + summary: Check in containers + tags: + - Containers + /containers:check-out: + post: + description: Check out containers to signify that they are in use. + operationId: checkoutContainers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersCheckout' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmptyObject' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + summary: Check out containers + tags: + - Containers + /containers:print-labels: + post: + description: Print labels. Supported print methods are "REMOTE_PRINT_SERVER", + "LEGACY_HTTP", and "LEGACY_TCP". + operationId: printLabels + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PrintLabels' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmptyObject' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Print labels + tags: + - Containers + /containers:reserve: + post: + description: Reserve containers to signify that someone plans to use the containers. + operationId: reserveContainers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersCheckout' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmptyObject' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + summary: Reserve containers + tags: + - Containers + /containers:unarchive: + post: + description: Unarchive containers + operationId: unarchiveContainers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainersArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive containers + tags: + - Containers + /custom-entities: + get: + description: List custom entities + operationId: listCustomEntities + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a custom entity. Restricts results to those with the + specified name, alias, or entity registry ID. + in: query + name: name + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: customEntities.id,customEntities.modifiedAt + type: string + - description: 'Name substring of a custom entity. Restricts results to those + with names, aliases, or entity registry IDs that include the provided substring. + + ' + in: query + name: nameIncludes + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. + in: query + name: folderId + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to custom + entities mentioned in those entries. + + ' + in: query + name: mentionedIn + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'ID of a registry. Restricts results to those registered in this + registry. Specifying "null" returns unregistered items. + + ' + in: query + name: registryId + schema: + nullable: true + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived custom entities. + Use "ANY_ARCHIVED" to filter for archived custom entities regardless of + reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived + and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of resource IDs. Restricts results to those + that mention the given items in the description. + + ' + in: query + name: mentions + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: bfi_blhxTUl1,bfi_y5bkDmJp,bfi_xwfILBog + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case insensitive. Warning - this filter can be non-performant due + to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of entity registry IDs. Maximum of 100. + Restricts results to those that match any of the specified registry IDs + + ' + in: query + name: entityRegistryIds.anyOf + schema: + example: TP001,TP002 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma separated list of user or app IDs. Maximum of 100. + in: query + name: authorIds.anyOf + schema: + example: ent_a0SApq3z,ent_b4AApz9b + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntitiesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List custom entities + tags: + - Custom Entities + post: + description: Create a custom entity + operationId: createCustomEntity + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntityCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntity' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '503': + description: Deprecated, a 429 is returned for too many requests + summary: Create a custom entity + tags: + - Custom Entities + /custom-entities/{custom_entity_id}: + get: + description: Get a custom entity + operationId: getCustomEntity + parameters: + - in: path + name: custom_entity_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntity' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get a custom entity + tags: + - Custom Entities + patch: + description: Update a custom entity + operationId: updateCustomEntity + parameters: + - in: path + name: custom_entity_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntityUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntity' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update a custom entity + tags: + - Custom Entities + /custom-entities/{entity_registry_id}:upsert: + patch: + description: 'Create or update a registered custom entity. + + + Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). + + ' + operationId: upsertCustomEntity + parameters: + - example: entity_registry_id_001 + in: path + name: entity_registry_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntityUpsertRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntity' + description: Updated + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntity' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create or update a registered custom entity + tags: + - Custom Entities + /custom-entities:archive: + post: + description: Archive custom entities + operationId: archiveCustomEntities + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntitiesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntitiesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive custom entities + tags: + - Custom Entities + /custom-entities:bulk-create: + post: + description: Bulk Create custom entities. Limit of 2500 custom entities per + request. + operationId: bulkCreateCustomEntities + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntitiesBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of custom entities that were + created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create custom entities + tags: + - Custom Entities + /custom-entities:bulk-get: + get: + description: Bulk get custom entities by ID + operationId: bulkGetCustomEntities + parameters: + - description: 'Comma-separated list of IDs of custom entities to get. + + ' + in: query + name: customEntityIds + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: customEntities.id,customEntities.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntitiesList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk get custom entities by ID + tags: + - Custom Entities + /custom-entities:bulk-update: + post: + description: Bulk Update custom entities + operationId: bulkUpdateCustomEntities + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntitiesBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of custom entities that were + updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update custom entities + tags: + - Custom Entities + /custom-entities:bulk-upsert: + post: + description: 'All entities and their schemas must be within the same registry. + + + This operation performs the following actions: + + 1. Any existing objects are looked up in Benchling by the provided entity + registry ID. + + 2. Then, all objects are either created or updated accordingly, temporarily + skipping any schema field links between objects. + + 3. Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). You may link to objects + being created in the same operation. + + 4. Entities are registered, using the provided name and entity registry ID. + + + If any action fails, the whole operation is canceled and no objects are created + or updated. + + + Limit of 2500 custom entities per request. + + ' + operationId: bulkUpsertCustomEntities + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntitiesBulkUpsertRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the resources of the objects that were + upserted. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk upsert custom entities + tags: + - Custom Entities + /custom-entities:unarchive: + post: + description: Unarchive custom entities + operationId: unarchiveCustomEntities + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntitiesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomEntitiesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive custom entities + tags: + - Custom Entities + /custom-notations: + get: + description: List all available custom notations for specifying modified nucleotide + sequences + operationId: listCustomNotations + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomNotationsPaginatedList' + description: OK + summary: List custom notations + tags: + - Custom Notations + - DNA Oligos + - RNA Oligos + /dna-alignments: + get: + deprecated: true + description: List DNA Alignments + operationId: listDNAAlignments + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a DNA Alignment. Restricts results to those with the + specified name. + in: query + name: name + schema: + type: string + - description: Name substring of a DNA Alignment. Restricts results to those + with names that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: seqanl_VfVOART1,seqanl_RFhDGaaC + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of sequence ids that own one or more DNA + Alignments (i.e. ids of sequences used as the template in a Template Alignment + or created as the consensus sequence from a Consensus Alignment). Matches + all of the provided IDs, or returns a 400 error that includes a list of + which IDs are invalid. + + ' + in: query + name: sequenceIds + schema: + example: seq_VfVOART1,seq_RFhDGaaC + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaAlignmentsPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List DNA Alignments + tags: + - DNA Alignments + /dna-alignments/{dna_alignment_id}: + delete: + deprecated: true + description: Delete a DNA Alignment + operationId: deleteDNAAlignment + parameters: + - in: path + name: dna_alignment_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmptyObject' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Delete a DNA Alignment + tags: + - DNA Alignments + get: + deprecated: true + description: Get a DNA Alignment + operationId: getDNAAlignment + parameters: + - in: path + name: dna_alignment_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaAlignment' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get a DNA Alignment + tags: + - DNA Alignments + /dna-alignments:create-consensus-alignment: + post: + deprecated: true + description: Create a consensus DNA alignment + operationId: createDnaConsensusAlignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaConsensusAlignmentCreate' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the [DNA Alignment](#/DNA%20Alignments/getDNAAlignment) + resource that was created. + + ' + summary: Create a consensus DNA alignment + tags: + - DNA Alignments + /dna-alignments:create-template-alignment: + post: + deprecated: true + description: Create a template DNA alignment + operationId: createDnaTemplateAlignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaTemplateAlignmentCreate' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the [DNA Alignment](#/DNA%20Alignments/getDNAAlignment) + resource that was created. + + ' + summary: Create a template DNA alignment + tags: + - DNA Alignments + /dna-oligos: + get: + description: List DNA Oligos + operationId: listDNAOligos + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a DNA Oligo. Restricts results to those with the specified + name, alias, or entity registry ID. + in: query + name: name + schema: + type: string + - description: Name substring of a DNA Oligo. Restricts results to those with + names, aliases, or entity registry IDs that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Full bases of the DNA Oligo. Restricts results to those with + the specified bases, case-insensitive, allowing for circular or reverse + complement matches. Does not allow partial matching or loose matching via + degenerate bases. + + ' + in: query + name: bases + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. + in: query + name: folderId + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to DNA + Oligos mentioned in those entries. + + ' + in: query + name: mentionedIn + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'ID of a registry. Restricts results to those registered in this + registry. Specifying "null" returns unregistered items. + + ' + in: query + name: registryId + schema: + nullable: true + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived DNA Oligos. + Use "ANY_ARCHIVED" to filter for archived DNA Oligos regardless of reason. + Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and + unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of item IDs. Restricts results to those + that mention the given items in the description. + + ' + in: query + name: mentions + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: seq_yWs5X7lv,seq_RhYGVnHF + type: string + - description: 'Comma-separated list of entity registry IDs. Maximum of 100. + Restricts results to those that match any of the specified registry IDs. + + ' + in: query + name: entityRegistryIds.anyOf + schema: + example: TP001,TP002 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case insensitive. Warning - this filter can be non-performant due + to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma separated list of user or app IDs. Maximum of 100. + in: query + name: authorIds.anyOf + schema: + example: ent_a0SApq3z,ent_b4AApz9b + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: dnaOligos.id,dnaOligos.modifiedAt + type: string + - description: ID of the notation to use in populating the customNotation field. + in: query + name: customNotationId + schema: + example: sntx_lRe007yZ + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligosPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List DNA Oligos + tags: + - DNA Oligos + post: + description: Create a DNA Oligo + operationId: createDNAOligo + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligoCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligo' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '503': + description: Deprecated, a 429 is returned for too many requests + summary: Create a DNA Oligo + tags: + - DNA Oligos + /dna-oligos/{entity_registry_id}:upsert: + patch: + description: 'Create or update a registered DNA oligo. + + + Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). + + ' + operationId: upsertDnaOligo + parameters: + - example: entity_registry_id_001 + in: path + name: entity_registry_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OligoUpsertRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligo' + description: Updated + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligo' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create or update a registered DNA oligo + tags: + - DNA Oligos + /dna-oligos/{oligo_id}: + get: + description: Get a DNA Oligo + operationId: getDNAOligo + parameters: + - in: path + name: oligo_id + required: true + schema: + type: string + - description: ID of the notation to use in populating the customNotation field. + in: query + name: customNotationId + schema: + example: sntx_lRe007yZ + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligo' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get a DNA Oligo + tags: + - DNA Oligos + patch: + description: Update a DNA Oligo + operationId: updateDNAOligo + parameters: + - in: path + name: oligo_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligoUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligo' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update a DNA Oligo + tags: + - DNA Oligos + /dna-oligos:archive: + post: + description: Archive DNA Oligos + operationId: archiveDNAOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligosArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligosArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive DNA Oligos + tags: + - DNA Oligos + /dna-oligos:bulk-create: + post: + description: Bulk Create DNA Oligos. Limit of 1000 DNA Oligos per request. + operationId: bulkCreateDNAOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligosBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of DNA Oligos that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create DNA Oligos + tags: + - DNA Oligos + /dna-oligos:bulk-update: + post: + description: Bulk Update DNA Oligos + operationId: bulkUpdateDNAOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligosBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [DNA Oligo](#/DNA%20Oligos/getDNAOligo) + resources that were updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update DNA Oligos + tags: + - DNA Oligos + /dna-oligos:bulk-upsert: + post: + description: 'All entities and their schemas must be within the same registry. + + + This operation performs the following actions: + + 1. Any existing objects are looked up in Benchling by the provided entity + registry ID. + + 2. Then, all objects are either created or updated accordingly, temporarily + skipping any schema field links between objects. + + 3. Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). You may link to objects + being created in the same operation. + + 4. Entities are registered, using the provided name and entity registry ID. + + + If any action fails, the whole operation is canceled and no objects are created + or updated. + + + Limit of 1000 entities per request. + + ' + operationId: bulkUpsertDNAOligos + parameters: + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: dnaOligos.id,dnaOligos.creator.handle + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligosBulkUpsertRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the resources of the objects that were + upserted. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk upsert DNA oligos + tags: + - DNA Oligos + /dna-oligos:unarchive: + post: + description: Unarchive DNA Oligos + operationId: unarchiveDNAOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligosUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligosArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive DNA Oligos + tags: + - DNA Oligos + /dna-sequences: + get: + description: List DNA sequences + operationId: listDNASequences + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a DNA Sequence. Restricts results to those with the specified + name, alias, or entity registry ID. + in: query + name: name + schema: + type: string + - description: Name substring of a DNA Sequence. Restricts results to those + with names, aliases, or entity registry IDs that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: Full bases of the DNA sequence. Restricts results to those with + the specified bases, case-insensitive, allowing for circular or reverse + complement matches. Does not allow partial matching or loose matching via + degenerate bases. + in: query + name: bases + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. + in: query + name: folderId + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to DNA + sequences mentioned in those entries. + + ' + in: query + name: mentionedIn + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'ID of a registry. Restricts results to those registered in this + registry. Specifying "null" returns unregistered items. + + ' + in: query + name: registryId + schema: + nullable: true + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived DNA sequences. + Use "ANY_ARCHIVED" to filter for archived DNA sequences regardless of reason. + Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and + unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of item IDs. Restricts results to those + that mention the given items in the description. + + ' + in: query + name: mentions + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: seq_VfVOART1,seq_RFhDGaaC + type: string + - description: 'Comma-separated list of entity registry IDs. Maximum of 100. + Restricts results to those that match any of the specified registry IDs. + + ' + in: query + name: entityRegistryIds.anyOf + schema: + example: TP001,TP002 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case insensitive. Warning - this filter can be non-performant due + to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma separated list of user or app IDs. Maximum of 100. + in: query + name: authorIds.anyOf + schema: + example: ent_a0SApq3z,ent_b4AApz9b + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note**: Fields annotations, translations, and primers cannot be introspected + with the returning parameter, and any sub fields will be ignored. E.g.: + "dnaSequences.annotations.id" will return the same as "dnaSequences.annotations". + + ' + in: query + name: returning + schema: + example: dnaSequences.id, dnaSequences.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List DNA sequences + tags: + - DNA Sequences + post: + description: Create a DNA sequence + operationId: createDNASequence + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequenceCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequence' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '503': + description: Deprecated, a 429 is returned for too many requests + summary: Create a DNA sequence + tags: + - DNA Sequences + /dna-sequences/{dna_sequence_id}: + get: + description: Get a DNA sequence + operationId: getDNASequence + parameters: + - in: path + name: dna_sequence_id + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note**: Fields annotations, translations, and primers cannot be introspected + with the returning parameter, and any sub fields will be ignored. E.g.: + "annotations.id" will return the same as "annotations". + + ' + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequence' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get a DNA sequence + tags: + - DNA Sequences + patch: + description: Update a DNA sequence + operationId: updateDNASequence + parameters: + - in: path + name: dna_sequence_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequenceUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequence' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update a DNA sequence + tags: + - DNA Sequences + /dna-sequences/{entity_registry_id}:upsert: + patch: + description: 'Create or update a registered DNA sequence. + + + Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). + + ' + operationId: upsertDNASequence + parameters: + - in: path + name: entity_registry_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequenceUpsertRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequence' + description: OK + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequence' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create or update a registered DNA sequence + tags: + - DNA Sequences + /dna-sequences:archive: + post: + description: Archive DNA sequences + operationId: archiveDNASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive DNA sequences + tags: + - DNA Sequences + /dna-sequences:auto-annotate: + post: + description: Auto-annotate DNA sequences with matching features from specified + Feature Libraries. Limit of 2000 DNA Sequences per request. + operationId: autoAnnotateDnaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutoAnnotateDnaSequences' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task has an empty response. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Auto-annotate DNA sequences with matching features from specified Feature + Libraries + tags: + - DNA Sequences + /dna-sequences:autofill-parts: + post: + description: Autofill DNA sequence parts. Limit of 2000 DNA Sequences per request. + operationId: autofillDNASequenceParts + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutofillSequences' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task has an empty response. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Autofill DNA sequence parts + tags: + - DNA Sequences + /dna-sequences:autofill-transcriptions: + post: + description: Autofill DNA sequence transcriptions from RNA Sequences with matching + schemas and bases. Limit of 2000 DNA Sequences per request. + operationId: autofillDNASequenceTranscriptions + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutofillSequences' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task has an empty response. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Autofill DNA sequence transcriptions + tags: + - DNA Sequences + /dna-sequences:autofill-translations: + post: + description: Autofill DNA sequence translations. Limit of 2000 DNA Sequences + per request. + operationId: autofillDNASequenceTranslations + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutofillSequences' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task has an empty response. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Autofill DNA sequence translations + tags: + - DNA Sequences + /dna-sequences:bulk-create: + post: + description: Bulk Create DNA sequences. Limit of 1000 DNA Sequences per request. + operationId: bulkCreateDNASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [DNA Sequence](#/DNA%20Sequences/getDNASequence) + resources that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create DNA sequences + tags: + - DNA Sequences + /dna-sequences:bulk-get: + get: + description: Bulk get DNA sequences by ID + operationId: bulkGetDNASequences + parameters: + - description: 'Comma-separated list of IDs of DNA sequences to get. + + ' + in: query + name: dnaSequenceIds + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note**: Fields annotations, translations, and primers cannot be introspected + with the returning parameter, and any sub fields will be ignored. E.g.: + "dnaSequences.annotations.id" will return the same as "dnaSequences.annotations". + + ' + in: query + name: returning + schema: + example: dnaSequences.id,dnaSequences.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk get DNA sequences by ID + tags: + - DNA Sequences + /dna-sequences:bulk-update: + post: + description: Bulk Update DNA sequences. Limit of 1000 DNA Sequences per request. + operationId: bulkUpdateDNASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [DNA Sequence](#/DNA%20Sequences/getDNASequence) + resources that were updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update DNA sequences + tags: + - DNA Sequences + /dna-sequences:bulk-upsert: + post: + description: 'All entities and their schemas must be within the same registry. + + + This operation performs the following actions: + + 1. Any existing objects are looked up in Benchling by the provided entity + registry ID. + + 2. Then, all objects are either created or updated accordingly, temporarily + skipping any schema field links between objects. + + 3. Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). You may link to objects + being created in the same operation. + + 4. Entities are registered, using the provided name and entity registry ID. + + + If any action fails, the whole operation is canceled and no objects are created + or updated. + + + Limit of 1000 DNA Sequences per request. + + ' + operationId: bulkUpsertDnaSequences + parameters: + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: dnaSequences.id,dnaSequences.creator.handle + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesBulkUpsertRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the resources of the objects that were + upserted. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk upsert DNA sequences + tags: + - DNA Sequences + /dna-sequences:find-matching-regions: + post: + description: Find matching regions for DNA sequences. Limit of 1000 DNA Sequences + per request. + operationId: findMatchingRegionsDnaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesFindMatchingRegion' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + It is used to search for DNA sequences that are either subsequences or + exact matches of the provided target sequences. + + Each returned item represents the group of sequences that partially or + fully match the target sequence." + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Find matching regions for DNA sequences + tags: + - DNA Sequences + /dna-sequences:match-bases: + post: + description: 'Returns DNA Sequences that exactly match the provided bases. + + ' + operationId: matchBasesDnaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MatchBasesRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesPaginatedList' + description: A filtered list of DNA Sequences + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List entities with matching bases + tags: + - DNA Sequences + /dna-sequences:optimize-codons: + post: + description: Create codon-optimized DNA sequences. + operationId: optimizeCodons + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OptimizeCodons' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task has an empty response. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create codon-optimized DNA sequences. + tags: + - DNA Sequences + /dna-sequences:search-bases: + post: + description: 'Returns DNA Sequences that contain the provided bases. Search + indexing is asynchronous, so results my be not be available immediately after + creation. + + ' + operationId: searchDnaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SearchBasesRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesPaginatedList' + description: A filtered list of DNA Sequences + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Search DNA Sequences + tags: + - DNA Sequences + /dna-sequences:unarchive: + post: + description: Unarchive DNA sequences + operationId: unarchiveDNASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaSequencesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive DNA sequences + tags: + - DNA Sequences + /dropdowns: + get: + description: List dropdowns + operationId: listDropdowns + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DropdownSummariesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of dropdowns that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List dropdowns + tags: + - Dropdowns + post: + description: Create a dropdown + operationId: createDropdown + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DropdownCreate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Dropdown' + description: Created + headers: + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a dropdown + tags: + - Dropdowns + /dropdowns/{dropdown_id}: + get: + description: Get a dropdown + operationId: getDropdown + parameters: + - in: path + name: dropdown_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Dropdown' + description: OK + headers: + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a dropdown + tags: + - Dropdowns + patch: + description: Update a dropdown + operationId: updateDropdown + parameters: + - in: path + name: dropdown_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DropdownUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Dropdown' + description: OK + headers: + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update a dropdown + tags: + - Dropdowns + /dropdowns/{dropdown_id}/options:archive: + post: + description: Archive options belonging to a dropdown + operationId: archiveDropdownOptions + parameters: + - description: ID of the dropdown to archive options for. + in: path + name: dropdown_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DropdownOptionsArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DropdownOptionsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Archive dropdown options + tags: + - Dropdowns + /dropdowns/{dropdown_id}/options:unarchive: + post: + description: Unarchive options belonging to a dropdown + operationId: unarchiveDropdownOptions + parameters: + - description: ID of the dropdown to archive options for. + in: path + name: dropdown_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DropdownOptionsUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DropdownOptionsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Unarchive dropdown options + tags: + - Dropdowns + /entities:bulk-upsert: + post: + description: 'All entities and their schemas must be within the same registry. + + + This operation performs the following actions: + + 1. Any existing objects are looked up in Benchling by the provided entity + registry ID. + + 2. Then, all objects are either created or updated accordingly, temporarily + skipping any schema field links between objects. + + 3. Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). You may link to objects + being created in the same operation. + + 4. Entities are registered, using the provided name and entity registry ID. + + + If any action fails, the whole operation is canceled and no objects are created + or updated. + + ' + operationId: bulkUpsertEntities + parameters: + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: customEntities.id,customEntities.creator.handle + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EntitiesBulkUpsertRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the resources of the objects that were + upserted. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk upsert entities + tags: + - Entities + /entity-schemas: + get: + description: List entity schemas + operationId: listEntitySchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntitySchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List entity schemas + tags: + - Schemas + /entity-schemas/{schema_id}: + get: + description: Get an entity schema by ID + operationId: getEntitySchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntitySchema' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get an entity schema by ID + tags: + - Schemas + /entries: + get: + description: List notebook entries + operationId: listEntries + parameters: + - description: Number of results to return. Defaults to 50, maximum of 100. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: 'Method by which to order search results. Valid sorts are modifiedAt + (modified time, most recent first) and name (entity name, alphabetical). + Optionally add :asc or :desc to specify ascending or descending order. + + ' + in: query + name: sort + schema: + default: modifiedAt:desc + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of an Entry. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived entries. Use + "ANY_ARCHIVED" to filter for archived entries regardless of reason. Use + "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Restrict results to those with the given review status. Supported + statuses: IN_PROGRESS, ACCEPTED, REJECTED, NEEDS_REVIEW, RETRACTED + + ' + in: query + name: reviewStatus + schema: + enum: + - IN_PROGRESS + - ACCEPTED + - REJECTED + - NEEDS_REVIEW + - RETRACTED + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to those + mentioned within the entries in this list. + + ' + in: query + name: mentionedIn + schema: + type: string + - description: 'Comma-separated list of resource IDs. Restricts results to entries + that mention the given items. + + ' + in: query + name: mentions + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma-separated list of ids. Restricts results to entries that + have assignees of any of the specified ids. + in: query + name: assignedReviewerIds.anyOf + schema: + example: ent_a0SApq3z,ent_SdUvia1v + type: string + - description: Comma separated list of users IDs. + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma separated list of user or app IDs. Maximum of 100. + in: query + name: authorIds.anyOf + schema: + example: ent_a0SApq3z,ent_b4AApz9b + type: string + - description: Comma-separated list of Entry Display IDs. + in: query + name: displayIds + schema: + example: VPR001,VPR002 + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note:** "entries.days.notes" cannot be introspected with the returning + parameter, and any sub fields will be ignored. E.g., "entries.days.notes.text" + will return the same model as "entries.days.notes". + + ' + in: query + name: returning + schema: + example: entries.id, entries.name, entries.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntriesPaginatedList' + description: 'Returns a list of entries. Entries are notes that users can + take. They''re organized by "days" (which are user-configurable) and modeled + within each day as a list of "notes." Each note has a type - the simplest + is a "text" type, but lists, tables, and external files are also supported. + + + *Note:* the current Entry resource has a few limitations: + + - Formatting information is not yet supported. Header formatting, bolding, + and other stylistic information is not presented. + + - Data in tables is presented as text always - numeric values will need + to be parsed into floats or integers, as appropriate. + + + Note: Data in Results tables are not accessible through this API call. + Results table data can be called through the Results API calls. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List entries + tags: + - Entries + post: + description: Create a notebook entry + operationId: createEntry + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EntryCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Entry' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a notebook entry + tags: + - Entries + /entries/{entry_id}: + get: + description: Get a notebook entry by ID + operationId: getEntry + parameters: + - description: ID of the entry + in: path + name: entry_id + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note:** "days.notes" cannot be introspected with the returning parameter, + and any sub fields will be ignored. E.g., "days.notes.text" will return + the same model as "days.notes". + + ' + in: query + name: returning + schema: + example: id, name, modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntryById' + description: 'Returns a single entry. Entries are notes that users can take. + They''re organized by "days" (which are user-configurable) and modeled + within each day as a list of "notes." Each note has a type - the simplest + is a "text" type, but lists, tables, and external files are also supported. + + + *Note:* the current Entry resource has a few limitations: + + - Formatting information is not yet supported. Header formatting, bolding, + and other stylistic information is not presented. + + - Data in tables is presented as text always - numeric values will need + to be parsed into floats or integers, as appropriate. + + + Note: Data in Results tables are not accessible through this API call. + Results table data can be called through the Results API calls. + + ' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a notebook entry by ID + tags: + - Entries + patch: + description: Update a notebook entry's metadata + operationId: updateEntry + parameters: + - description: ID of the entry + in: path + name: entry_id + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note:** "days.notes" cannot be introspected with the returning parameter, + and any sub fields will be ignored. E.g., "days.notes.text" will return + the same model as "days.notes". + + ' + in: query + name: returning + schema: + example: id, name, modifiedAt + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EntryUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Entry' + description: OK + summary: Update a notebook entry's metadata + tags: + - Entries + /entries/{entry_id}/external-files/{external_file_id}: + get: + description: 'Retrieves the metadata for an external file. Use the ''downloadURL'' + to download the actual file. (Expand the schema view for details) + + ' + operationId: getExternalFileMetadata + parameters: + - description: ID of the entry the file was uploaded to + in: path + name: entry_id + required: true + schema: + type: string + - description: ID of the external file + in: path + name: external_file_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntryExternalFileById' + description: OK + summary: 'Retrieves the metadata for an external file. Use the ''downloadURL'' + to download the actual file. + + ' + tags: + - Entries + /entries:archive: + post: + description: Archive notebook entries + operationId: archiveEntries + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EntriesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntriesArchivalChange' + description: OK + summary: Archive notebook entries + tags: + - Entries + /entries:bulk-get: + get: + description: Get notebook entries using entry IDs or display IDs + operationId: bulkGetEntries + parameters: + - description: Comma-separated list of Entry IDs. + in: query + name: entryIds + schema: + type: string + - description: Comma-separated list of Entry Display IDs. + in: query + name: displayIds + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note:** "entries.days.notes" cannot be introspected with the returning + parameter, and any sub fields will be ignored. E.g., "entries.days.notes.text" + will return the same model as "entries.days.notes". + + ' + in: query + name: returning + schema: + example: entries.id, entries.name, entries.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Entries' + description: 'Returns a list of entries. Entries are notes that users can + take. They''re organized by "days" (which are user-configurable) and modeled + within each day as a list of "notes." Each note has a type - the simplest + is a "text" type, but lists, tables, and external files are also supported. + + + *Note:* the current Entry resource has a few limitations: + + - Formatting information is not yet supported. Header formatting, bolding, + and other stylistic information is not presented. + + - Data in tables is presented as text always - numeric values will need + to be parsed into floats or integers, as appropriate. + + + Note: Data in Results tables are not accessible through this API call. + Results table data can be called through the Results API calls. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get notebook entries using entry IDs or display IDs + tags: + - Entries + /entries:unarchive: + post: + description: Unarchive notebook entries + operationId: unarchiveEntries + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EntriesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntriesArchivalChange' + description: OK + summary: Unarchive notebook entries + tags: + - Entries + /entry-schemas: + get: + description: List entry schemas + operationId: listEntrySchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntrySchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed entrys in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List entry schemas + tags: + - Schemas + /entry-schemas/{schema_id}: + get: + description: Get an Entry schema by ID + operationId: getEntrySchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntrySchemaDetailed' + description: OK + '400': + description: Bad Entry + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get an Entry schema by ID + tags: + - Schemas + /entry-templates: + get: + description: List entry templates + operationId: listEntryTemplates + parameters: + - description: Number of results to return. Defaults to 50, maximum of 100. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of an Entry Template. Restricts results to those with the + specified name. + in: query + name: name + schema: + type: string + - description: 'ID of a template collection. Resticts results to those in the + template collection. + + ' + in: query + name: templateCollectionId + schema: + example: tmplcol_jC7rOniv + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note:** "entryTemplates.days.notes" cannot be introspected with the returning + parameter, and any sub fields will be ignored. E.g., "entryTemplates.days.notes.text" + will return the same model as "entryTemplates.days.notes". + + ' + in: query + name: returning + schema: + example: entryTemplates.id,entryTemplates.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntryTemplatesPaginatedList' + description: 'Returns a list of entry templates. Entry templates are templates + that users can base new notebook entries off of. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List entry templates + tags: + - Entries + /entry-templates/{entry_template_id}: + get: + description: Get a notebook template entry by ID + operationId: getEntryTemplate + parameters: + - description: ID of the entry template + in: path + name: entry_template_id + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note:** "days.notes" cannot be introspected with the returning parameter, + and any sub fields will be ignored. E.g., "days.notes.text" will return + the same model as "days.notes". + + ' + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntryTemplate' + description: 'Returns a single entry template. Entry templates are templates + that users can base new notebook entries off of. + + ' + summary: Get a notebook template entry by ID + tags: + - Entries + patch: + description: Update a notebook template entry's metadata + operationId: updateEntryTemplate + parameters: + - description: ID of the template entry + in: path + name: entry_template_id + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note:** "days.notes" cannot be introspected with the returning parameter, + and any sub fields will be ignored. E.g., "days.notes.text" will return + the same model as "days.notes". + + ' + in: query + name: returning + schema: + example: id, name, modifiedAt + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EntryTemplateUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EntryTemplate' + description: OK + summary: Update a notebook template entry's metadata + tags: + - Entries + /enzymes: + get: + description: 'List enzymes that can be specified for other Benchling operations. + + ' + operationId: listEnzymes + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: name:asc + description: 'Method by which to order search results. Valid sort is name + (entity name, alphabetical). Optionally add :asc or :desc to specify ascending + or descending order. + + ' + enum: + - name + - name:asc + - name:desc + nullable: false + type: string + - description: Name of an enzyme. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: Name substring of an enzyme. Restricts results to those with + names that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: enz_VfVOART1,enz_RFhDGaaC + type: string + - description: 'Comma-separated list of names. Restricts results to those that + match any of the specified names. + + ' + in: query + name: names.anyOf + schema: + example: AarI,BcnI + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EnzymesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List enzymes + tags: + - Enzymes + /events: + get: + description: 'List Events + + + ## Event Sort Order + + + Events in Benchling are assigned a stable sort order that reflects when the + event was processed (not created). The createdAt time is not the stable sorted + order of events. For this reason event createdAt time may appear out of order. + + ' + operationId: listEvents + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts + results to those modified in the specified range. e.g. "2020-05-23". + + ' + in: query + name: createdAt.gte + schema: + type: string + - description: Event ID after which events will be returned. + in: query + name: startingAfter + schema: + type: string + - description: Comma-separated list of event types to return. + in: query + name: eventTypes + schema: + type: string + - description: When True, the API will always return a nextToken to enable polling + events indefinitely. + in: query + name: poll + schema: + type: boolean + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EventsPaginatedList' + description: ' + + Returns a list of event resources. For additional JSON examples, [click + here](https://docs.benchling.com/docs/events-reference#json-examples). + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List Events + tags: + - Events + /exports: + post: + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains a link to download the exported item from Amazon + S3. The download is a ZIP file that contains the exported PDFs. + + ' + operationId: exportItem + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ExportItemRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains a link to download the exported item from Amazon + S3. + + The download is a ZIP file that contains the exported PDFs. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Export Item + tags: + - Exports + /feature-libraries: + get: + description: List Feature Libraries + operationId: listFeatureLibraries + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are modifiedAt + (modified time, most recent first) and name (entity name, alphabetical). + Optionally add :asc or :desc to specify ascending or descending order. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a Feature Library. Restricts results to those with the + specified name. + in: query + name: name + schema: + type: string + - description: Name substring of a Feature Library. Restricts results to those + with names that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: featlib_VfVOART1,featlib_RFhDGaaC + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: featureLibraries.id,featureLibraries.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureLibrariesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List Feature Libraries + tags: + - Feature Libraries + post: + description: Create a Feature Library + operationId: createFeatureLibrary + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureLibraryCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureLibrary' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a Feature Library + tags: + - Feature Libraries + /feature-libraries/{feature_library_id}: + get: + description: Get a feature library by ID + operationId: getFeatureLibrary + parameters: + - description: ID of feature library to get + in: path + name: feature_library_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureLibrary' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a feature library by ID + tags: + - Feature Libraries + patch: + description: 'Update a feature library. Note: Features cannot be updated from + this endpoint. + + Use the /features* endpoints to add or modify features. + + ' + operationId: updateFeatureLibrary + parameters: + - in: path + name: feature_library_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureLibraryUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureLibrary' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update a feature library + tags: + - Feature Libraries + /features: + get: + description: List Features + operationId: listFeatures + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: Name of a Feature. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: feat_VfVOART1,feat_RFhDGaaC + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Id of a Feature Library. Restricts results to those associated + with the provided feature library + in: query + name: featureLibraryId + schema: + example: featlib_D0v2x9Q7 + type: string + - description: 'The type of feature, like gene, promoter, etc. Note: This is + an arbitrary string, not an enum + + ' + in: query + name: featureType + schema: + example: terminator + type: string + - description: The match type of the feature used to determine how auto-annotate + matches are made. + in: query + name: matchType + schema: + enum: + - nucleotide + - protein + example: nucleotide + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: features.id,features.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FeaturesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List Features + tags: + - Feature Libraries + post: + description: Create a Feature + operationId: createFeature + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Feature' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a Feature + tags: + - Feature Libraries + /features/{feature_id}: + get: + description: Get a feature by ID + operationId: getFeature + parameters: + - description: ID of feature to get + in: path + name: feature_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Feature' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a feature by ID + tags: + - Feature Libraries + patch: + description: Update a feature + operationId: updateFeature + parameters: + - in: path + name: feature_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Feature' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update a feature + tags: + - Feature Libraries + /features:bulk-create: + post: + description: Bulk create Features + operationId: bulkCreateFeatures + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FeaturesBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of features that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk create Features + tags: + - Feature Libraries + /folders: + get: + description: List folders + operationId: listFolders + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Method by which to order search results. Valid sorts are modifiedAt + (modified time, most recent first) and name (folder name, alphabetical). + Optionally add :asc or :desc to specify ascending or descending order. + + ' + in: query + name: sort + schema: + default: name + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - name + - modifiedAt:asc + - name:asc + - modifiedAt:desc + - name:desc + nullable: false + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived folders. Use + "ANY_ARCHIVED" to filter for archived folders regardless of reason. Use + "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Name substring of a folder. Restricts results to those with + names that include the provided substring. + + ' + in: query + name: nameIncludes + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. Use + "NO_PARENT" to filter for root folders. + in: query + name: parentFolderId + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: lib_qQFY3WQH,lib_QvXryHdi,lib_3eF8mZjn + type: string + - description: Name of a folder. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - deprecated: true + description: 'Deprecated - Folder types have been merged, however this will + restrict to the pre-merge types. + + ' + in: query + name: section + schema: + enum: + - INVENTORY + - NOTEBOOK + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FoldersPaginatedList' + description: OK + summary: List folders + tags: + - Folders + post: + description: Create folder + operationId: createFolder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FolderCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Folder' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create folder + tags: + - Folders + /folders/{folder_id}: + get: + description: Get a folder by ID + operationId: getFolder + parameters: + - description: ID of folder to get + in: path + name: folder_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Folder' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a folder by ID + tags: + - Folders + /folders:archive: + post: + description: Archives folders and their contents + operationId: archiveFolders + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FoldersArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FoldersArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive folders + tags: + - Folders + /folders:unarchive: + post: + description: Unarchives folders and the contents that were archived along with + them + operationId: unarchiveFolders + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FoldersUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FoldersArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive folders + tags: + - Folders + /instruments/{instrument_query_id}/query: + get: + description: Get an instrument query + operationId: getInstrumentQuery + parameters: + - description: The instrument query ID + in: path + name: instrument_query_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/InstrumentQuery' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Get an instrument query + tags: + - Instrument Queries + /legacy-workflow-stage-runs/{stage_run_id}/input-samples: + get: + description: List legacy workflow stage run input samples + operationId: listLegacyWorkflowStageRunInputSamples + parameters: + - description: ID of the legacy workflow stage run to list input samples for + in: path + name: stage_run_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LegacyWorkflowSampleList' + description: OK + summary: List legacy workflow stage run input samples + tags: + - Legacy Workflows + /legacy-workflow-stage-runs/{stage_run_id}/output-samples: + get: + description: List legacy workflow stage run output samples + operationId: listLegacyWorkflowStageRunOutputSamples + parameters: + - description: ID of the legacy workflow stage run to list output samples for + in: path + name: stage_run_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LegacyWorkflowSampleList' + description: OK + summary: List legacy workflow stage run output samples + tags: + - Legacy Workflows + /legacy-workflow-stage-runs/{stage_run_id}/registered-samples: + get: + description: List legacy workflow stage run registered samples + operationId: listLegacyWorkflowStageRunRegisteredSamples + parameters: + - description: ID of the legacy workflow stage run to list registered samples + for + in: path + name: stage_run_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LegacyWorkflowSampleList' + description: OK + summary: List legacy workflow stage run registered samples + tags: + - Legacy Workflows + /legacy-workflow-stages/{stage_id}/workflow-stage-runs: + get: + description: List legacy workflow stage runs + operationId: listLegacyWorkflowStageRuns + parameters: + - description: ID of the legacy workflow stage to list runs for + in: path + name: stage_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LegacyWorkflowStageRunList' + description: OK + summary: List legacy workflow stage runs + tags: + - Legacy Workflows + /legacy-workflows: + get: + description: List legacy workflows + operationId: listLegacyWorkflows + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LegacyWorkflowList' + description: OK + summary: List legacy workflows + tags: + - Legacy Workflows + /legacy-workflows/{legacy_workflow_id}: + patch: + description: Update workflow metadata + operationId: UpdateLegacyWorkflowMetadata + parameters: + - description: ID of the legacy workflow to update + in: path + name: legacy_workflow_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LegacyWorkflowPatch' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LegacyWorkflow' + description: OK + summary: Update legacy workflow + tags: + - Legacy Workflows + /legacy-workflows/{legacy_workflow_id}/workflow-stages: + get: + description: List legacy workflow stages + operationId: listLegacyWorkflowStages + parameters: + - description: ID of the legacy workflow to list stages for + in: path + name: legacy_workflow_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LegacyWorkflowStageList' + description: OK + summary: List legacy workflow stages + tags: + - Legacy Workflows + /location-schemas: + get: + description: List location schemas + operationId: listLocationSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LocationSchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List location schemas + tags: + - Schemas + /location-schemas/{schema_id}: + get: + description: Get a location schema by ID + operationId: getLocationSchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LocationSchema' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a location schema by ID + tags: + - Schemas + /locations: + get: + description: List locations + operationId: listLocations + parameters: + - description: Number of results to return. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: 'Method by which to order search results. Valid sorts are barcode, + name, modifiedAt, and createdAt. Optionally add :asc or :desc to specify + ascending or descending order. Default is modifiedAt. + + ' + in: query + name: sort + schema: + default: modifiedAt + enum: + - barcode + - modifiedAt + - name + - barcode:asc + - modifiedAt:asc + - name:asc + - barcode:desc + - modifiedAt:desc + - name:desc + - createdAt + - createdAt:asc + - createdAt:desc + nullable: false + type: string + - description: ID of a schema. Restricts results to those of the specified schema. + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a location. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: 'Name substring of a location. Restricts results to those with + names that include the provided substring. + + ' + in: query + name: nameIncludes + schema: + type: string + - description: ID of a plate, box, or location. Restricts results to those located + in the specified inventory. + in: query + name: ancestorStorageId + schema: + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived locations. Use + "ANY_ARCHIVED" to filter for archived locations regardless of reason. Use + "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: loc_9fxPzGDy,loc_fALwBTI7,loc_GyxUeUIi + type: string + - description: 'Comma-separated list of barcodes. Matches all of the provided + barcodes, or returns a 400 error that includes a list of which barcodes + are invalid. + + ' + in: query + name: barcodes + schema: + example: b001, b002, f001 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LocationsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List locations + tags: + - Locations + post: + description: Create a location + operationId: createLocation + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LocationCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Location' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a location + tags: + - Locations + /locations/{location_id}: + get: + description: Get a location by ID + operationId: getLocation + parameters: + - description: ID of location to get + in: path + name: location_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Location' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a location by ID + tags: + - Locations + patch: + description: Update a location + operationId: updateLocation + parameters: + - description: ID of the location to update + in: path + name: location_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LocationUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Location' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update a location + tags: + - Locations + /locations:archive: + post: + description: Archive locations + operationId: archiveLocations + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LocationsArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LocationsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + summary: Archive locations + tags: + - Locations + /locations:bulk-get: + get: + description: BulkGet locations + operationId: bulkGetLocations + parameters: + - description: Comma-separated list of location IDs. + in: query + name: locationIds + schema: + type: string + - description: Comma-separated list of location barcodes. + explode: false + in: query + name: barcodes + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LocationsBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: BulkGet locations + tags: + - Locations + /locations:unarchive: + post: + description: Unarchive locations + operationId: unarchiveLocations + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LocationsUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LocationsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive locations + tags: + - Locations + /mixtures: + get: + description: List mixtures + operationId: listMixtures + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a mixture. Restricts results to those with the specified + name, alias, or entity registry ID. + in: query + name: name + schema: + type: string + - description: 'Name substring of a mixture. Restricts results to those with + names, aliases, or entity registry IDs that include the provided substring. + + ' + in: query + name: nameIncludes + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. + in: query + name: folderId + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to mixtures + mentioned in those entries. + + ' + in: query + name: mentionedIn + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'ID of a registry. Restricts results to those registered in this + registry. Specifying "null" returns unregistered items. + + ' + in: query + name: registryId + schema: + nullable: true + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived mixtures. Use + "ANY_ARCHIVED" to filter for archived mixtures regardless of reason. Use + "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of resource IDs. Restricts results to those + that mention the given items in the description. + + ' + in: query + name: mentions + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: bfi_blhxTUl1,bfi_y5bkDmJp,bfi_xwfILBog + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case insensitive. Warning - this filter can be non-performant due + to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of entity registry IDs. Maximum of 100. + Restricts results to those that match any of the specified registry IDs. + + ' + in: query + name: entityRegistryIds.anyOf + schema: + example: TP001,TP002 + type: string + - description: 'Comma-separated list of ingredient component entity ids. Matches + all mixtures that contain ingredients whose component entities match all + of the provided IDs, or returns a 400 error that includes a list of which + IDs are invalid. + + ' + in: query + name: ingredientComponentEntityIds + schema: + example: bfi_blhxTUl1,bfi_y5bkDmJp,bfi_xwfILBog + type: string + - description: 'Comma-separated list of ingredient component entity ids. Maximum + of 100. Matches all mixtures that contain ingredients whose component entities + match any of the provided IDs, or returns a 400 error that includes a list + of which IDs are invalid. + + ' + in: query + name: ingredientComponentEntityIds.anyOf + schema: + example: bfi_blhxTUl1,bfi_y5bkDmJp,bfi_xwfILBog + type: string + - description: Comma separated list of user or app IDs. Maximum of 100. + in: query + name: authorIds.anyOf + schema: + example: ent_a0SApq3z,ent_b4AApz9b + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MixturesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List mixtures + tags: + - Mixtures + post: + description: 'Create a mixture. + + To create a new child mixture (eg. a prep) from a parent mixture (eg. a recipe), + set the parent mixture field and specify the desired final state for your + ingredients. + + Benchling will recognize that any ingredients you specify that match ingredients + on the parent mixture (based on component entity) are inherited. This can + be seen on the returned `ingredients[i].hasParent` attribute. + + ' + operationId: createMixture + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MixtureCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Mixture' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '503': + description: Deprecated, a 429 is returned for too many requests + summary: Create a mixture + tags: + - Mixtures + /mixtures/{mixture_id}: + get: + description: Get a mixture + operationId: getMixture + parameters: + - in: path + name: mixture_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Mixture' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get a mixture + tags: + - Mixtures + patch: + description: 'Update a mixture. + + To change the parent mixture, set the parent mixture field and specify the + desired final state for your ingredients. + + Benchling will recognize that any ingredients you specify that match ingredients + on the parent mixture (based on component entity) are inherited. This can + be seen on the returned `ingredients[i].hasParent` attribute. + + ' + operationId: updateMixture + parameters: + - in: path + name: mixture_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MixtureUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Mixture' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update a mixture + tags: + - Mixtures + /mixtures:archive: + post: + description: Archive mixtures + operationId: archiveMixtures + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MixturesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MixturesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive mixtures + tags: + - Mixtures + /mixtures:bulk-create: + post: + description: 'Create multiple mixtures. Limit of 1000 mixtures per request. + + To create new child mixtures (eg. a prep) from parent mixtures (eg. a recipe), + set the parent mixture field and specify the desired final state for your + ingredients. + + Benchling will recognize that any ingredients you specify that match ingredients + on the parent mixtures (based on component entity) are inherited. This can + be seen on the returned `ingredients[i].hasParent` attribute. + + ' + operationId: bulkCreateMixtures + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MixturesBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of mixtures that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create mixtures + tags: + - Mixtures + /mixtures:bulk-update: + post: + description: 'Update multiple mixtures. + + To change the parent mixture on your specified mixtures, set the parent mixture + field and specify the desired final state for your ingredients. + + Benchling will recognize that any ingredients you specify that match ingredients + on the parent mixtures (based on component entity) are inherited. This can + be seen on the returned `ingredients[i].hasParent` attribute. + + ' + operationId: bulkUpdateMixtures + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MixturesBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of mixtures that were updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update mixtures + tags: + - Mixtures + /mixtures:unarchive: + post: + description: Unarchive mixtures + operationId: unarchiveMixtures + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MixturesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MixturesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive mixtures + tags: + - Mixtures + /molecules: + get: + description: List molecules + operationId: listMolecules + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a Molecule. Restricts results to those with the specified + name, alias, or entity registry ID. + in: query + name: name + schema: + type: string + - description: Name substring of a Molecule. Restricts results to those with + names, aliases, or entity registry IDs that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. + in: query + name: folderId + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to Molecules + mentioned in those entries. + + ' + explode: false + in: query + name: mentionedIn + schema: + items: + type: string + type: array + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'ID of a registry. Restricts results to those registered in this + registry. Specifying "null" returns unregistered items. + + ' + in: query + name: registryId + schema: + nullable: true + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: "Archive reason. Restricts results to those with the specified\ + \ archive reason. Use \u201CNOT_ARCHIVED\u201D to filter for unarchived\ + \ Molecules. Use \"ANY_ARCHIVED\" to filter for archived Molecules regardless\ + \ of reason. Use \"ANY_ARCHIVED_OR_NOT_ARCHIVED\" to return items for both\ + \ archived and unarchived.\n" + examples: + any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + arhived_reason: + summary: Includes items archived for a specific reason. + value: Retired + not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of item IDs. Restricts results to those + that mention the given items in the description. + + ' + explode: false + in: query + name: mentions + schema: + items: + type: string + type: array + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: mol_yWs5X7lv,mol_RhYGVnHF + type: string + - description: 'Comma-separated list of entity registry IDs. Maximum of 100. + Restricts results to those that match any of the specified registry IDs. + + ' + in: query + name: entityRegistryIds.anyOf + schema: + example: TP001,TP002 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of user or app IDs. Maximum of 100. + in: query + name: authorIds.anyOf + schema: + example: ent_a0SApq3z,ent_b4AApz9b + type: string + - description: mol-formatted string for a chemical substructure to search by + in: query + name: chemicalSubstructure.mol + schema: + example: "Format described at https://en.wikipedia.org/wiki/Chemical_table_file#Molfile\ + \ As an example, ethanol is represented as follows: ChEBI\n Marvin 10060515352D\n\ + \n 3 2 0 0 0 0 999 V2000\n 4.8667 -3.3230 0.0000\ + \ C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5812 -2.9105 0.0000\ + \ C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.2956 -3.3230 0.0000\ + \ O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 \ + \ 3 1 0 0 0 0\nM END\n" + type: string + - description: SMILES string for a chemical substructure to search by + in: query + name: chemicalSubstructure.smiles + schema: + example: CCO,C(C1C(C(C(C(O1)O)O)O)O)O + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculesPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: List Molecules + tags: + - Molecules + post: + description: Create a Molecule + operationId: createMolecule + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculeCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Molecule' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '503': + description: Deprecated, a 429 is returned for too many requests + summary: Create a Molecule + tags: + - Molecules + /molecules/{entity_registry_id}:upsert: + patch: + description: 'Create or update a registered Molecule. + + + Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). + + ' + operationId: upsertMolecule + parameters: + - in: path + name: entity_registry_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculeUpsertRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Molecule' + description: OK + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Molecule' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create or update a registered Molecule + tags: + - Molecules + /molecules/{molecule_id}: + get: + description: Get a Molecule + operationId: getMolecule + parameters: + - in: path + name: molecule_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Molecule' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get a Molecule + tags: + - Molecules + patch: + description: Update a Molecule + operationId: updateMolecule + parameters: + - in: path + name: molecule_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculeUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Molecule' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update a Molecule + tags: + - Molecules + /molecules:archive: + post: + description: Archive Molecules + operationId: archiveMolecules + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive Molecules + tags: + - Molecules + /molecules:bulk-create: + post: + description: Bulk Create Molecules + operationId: bulkCreateMolecules + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculesBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: Accepted + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create Molecules + tags: + - Molecules + /molecules:bulk-update: + post: + description: Bulk Update Molecules + operationId: bulkUpdateMolecules + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculesBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [Molecule](#/Molecules/getMolecule) + resources that were updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update Molecules + tags: + - Molecules + /molecules:bulk-upsert: + post: + description: 'All entities and their schemas must be within the same registry. + + + This operation performs the following actions: + + 1. Any existing objects are looked up in Benchling by the provided entity + registry ID. + + 2. Then, all objects are either created or updated accordingly, temporarily + skipping any schema field links between objects. + + 3. Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). You may link to objects + being created in the same operation. + + 4. Entities are registered, using the provided name and entity registry ID. + + + If any action fails, the whole operation is canceled and no objects are created + or updated. + + ' + operationId: bulkUpsertMolecules + parameters: + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: molecules.id,molecules.creator.handle + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculesBulkUpsertRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the resources of the objects that were + upserted. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk upsert Molecules + tags: + - Molecules + /molecules:unarchive: + post: + description: Unarchive Molecules + operationId: unarchiveMolecules + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoleculesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive Molecules + tags: + - Molecules + /monomers: + get: + description: List all available monomers + operationId: listMonomers + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: monomers.id,monomers.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MonomersPaginatedList' + description: OK + summary: List Monomers + tags: + - Monomers + post: + description: Create a monomer. + operationId: createMonomer + parameters: + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: monomers.id,monomers.symbol + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MonomerCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Monomer' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + summary: Create a monomer + tags: + - Monomers + /monomers/{monomer_id}: + patch: + description: Update a Monomer. + operationId: updateMonomer + parameters: + - in: path + name: monomer_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id, modifiedAt + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MonomerUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Monomer' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update a Monomer + tags: + - Monomers + /monomers:archive: + post: + description: Archive Monomers. + operationId: archiveMonomers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MonomersArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MonomersArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive Monomers + tags: + - Monomers + /monomers:unarchive: + post: + description: Unarchive Monomers. + operationId: unarchiveMonomers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MonomersUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MonomersArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive Monomers + tags: + - Monomers + /nucleotide-alignments: + get: + description: List Nucleotide Alignments + operationId: listNucleotideAlignments + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a Nucleotide Alignment. Restricts results to those with + the specified name. + in: query + name: name + schema: + type: string + - description: Name substring of a Nucleotide Alignment. Restricts results to + those with names that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: seqanl_VfVOART1,seqanl_RFhDGaaC + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of sequence ids that own one or more Nucleotide + Alignments (i.e. ids of sequences used as the template in a Template Alignment + or created as the consensus sequence from a Consensus Alignment). Matches + all of the provided IDs, or returns a 400 error that includes a list of + which IDs are invalid. + + ' + in: query + name: sequenceIds + schema: + example: seq_VfVOART1,seq_RFhDGaaC + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/NucleotideAlignmentsPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List Nucleotide Alignments + tags: + - Nucleotide Alignments + /nucleotide-alignments/{alignment_id}: + delete: + description: Delete a Nucleotide Alignment + operationId: deleteNucleotideAlignment + parameters: + - in: path + name: alignment_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmptyObject' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Delete a Nucleotide Alignment + tags: + - Nucleotide Alignments + get: + description: Get a Nucleotide Alignment + operationId: getNucleotideAlignment + parameters: + - in: path + name: alignment_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/NucleotideAlignment' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a Nucleotide Alignment + tags: + - Nucleotide Alignments + /nucleotide-alignments:create-consensus-alignment: + post: + description: Create a consensus Nucleotide Alignment + operationId: createConsensusNucleotideAlignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NucleotideConsensusAlignmentCreate' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the [Nucleotide Alignment](#/Nucleotide%20Alignments/getNucleotideAlignment) + resource that was created. + + ' + summary: Create a consensus Nucleotide Alignment + tags: + - Nucleotide Alignments + /nucleotide-alignments:create-template-alignment: + post: + description: Create a template Nucleotide Alignment + operationId: createTemplateNucleotideAlignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NucleotideTemplateAlignmentCreate' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the [Nucleotide Alignment](#/Nucleotide%20Alignments/getNucleotideAlignment) + resource that was created. + + ' + summary: Create a template Nucleotide Alignment + tags: + - Nucleotide Alignments + /oligos: + get: + deprecated: true + description: List Oligos + operationId: listOligos + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of an Oligo. Restricts results to those with the specified + name, alias, or entity registry ID. + in: query + name: name + schema: + type: string + - description: 'Full bases of the oligo. Restricts results to those with the + specified bases, case-insensitive, allowing for circular or reverse complement + matches. Does not allow partial matching or loose matching via degenerate + bases. + + ' + in: query + name: bases + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. + in: query + name: folderId + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to Oligos + mentioned in those entries. + + ' + in: query + name: mentionedIn + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'ID of a registry. Restricts results to those registered in this + registry. Specifying "null" returns unregistered items. + + ' + in: query + name: registryId + schema: + nullable: true + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived Oligos. Use + "ANY_ARCHIVED" to filter for archived Oligos regardless of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" + to return items for both archived and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of item IDs. Restricts results to those + that mention the given items in the description. + + ' + in: query + name: mentions + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: seq_yWs5X7lv,seq_RhYGVnHF + type: string + - description: 'Comma-separated list of entity registry IDs. Maximum of 100. + Restricts results to those that match any of the specified registry IDs. + + ' + in: query + name: entityRegistryIds.anyOf + schema: + example: TP001,TP002 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case insensitive. Warning - this filter can be non-performant due + to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: oligos.id,oligos.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/OligosPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List Oligos + tags: + - Oligos + post: + deprecated: true + description: Create an Oligo + operationId: createOligo + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OligoCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligo' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '503': + description: Deprecated, a 429 is returned for too many requests + summary: Create an Oligo + tags: + - Oligos + /oligos/{oligo_id}: + get: + deprecated: true + description: Get an Oligo + operationId: getOligo + parameters: + - in: path + name: oligo_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligo' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get an Oligo + tags: + - Oligos + patch: + deprecated: true + description: Update an Oligo + operationId: updateOligo + parameters: + - in: path + name: oligo_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OligoUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DnaOligo' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update an Oligo + tags: + - Oligos + /oligos:archive: + post: + deprecated: true + description: Archive Oligos + operationId: archiveOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OligosArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/OligosArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive Oligos + tags: + - Oligos + /oligos:bulk-create: + post: + deprecated: true + description: 'Bulk Create DNA Oligos + + Please migrate to [Bulk Create DNA Oligos](#/DNA%20Oligos/bulkCreateDNAOligos) + so that we can support RNA Oligos. + + ' + operationId: bulkCreateOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OligosBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of DNA Oligos that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create DNA Oligos + tags: + - Oligos + /oligos:bulk-get: + get: + description: Bulk get Oligos by ID + operationId: bulkGetOligos + parameters: + - description: 'Comma-separated list of IDs of Oligos to get. + + ' + in: query + name: oligoIds + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: oligos.id,oligos.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/OligosBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk get Oligos by ID + tags: + - Oligos + /oligos:unarchive: + post: + deprecated: true + description: Unarchive Oligos + operationId: unarchiveOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OligosUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/OligosArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive Oligos + tags: + - Oligos + /organizations: + get: + description: "Returns all organizations that the caller has permission to view.\ + \ The following roles have view permission:\n - tenant admins\n - members\ + \ of the organization\n" + operationId: listOrganizations + parameters: + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: ent_ZJy8RTbo,ent_8GVbVkPj,ent_qREJ33rn + type: string + - description: Name of an organization. Restricts results to those with the + specified name. + in: query + name: name + schema: + type: string + - description: Name substring of an organization. Restricts results to those + with names that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Comma-separated list of user or Benchling app IDs. Restricts + results to organizations that include all the given users/apps as members. + in: query + name: hasMembers + schema: + type: string + - description: Comma-separated list of user or Benchling app IDs. Restricts + results to organizations that include all the given users/apps as admins. + in: query + name: hasAdmins + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Sets the sort-order of the response. Valid sorts are modifiedAt + (modified time, most recent first) and name (organization name, alphabetical). + Optionally add :asc or :desc to specify ascending or descending order. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List organizations + tags: + - Organizations + /organizations/{organization_id}: + get: + description: "Returns an organization by ID if the caller has permission to\ + \ view. The following roles have view permission:\n - tenant admins\n -\ + \ members of the organization\n" + operationId: getOrganization + parameters: + - description: ID of organization to get + in: path + name: organization_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Organization' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get an organization by ID + tags: + - Organizations + /organizations/{organization_id}/memberships: + get: + description: 'Returns all organization memberships in the given organization + + ' + operationId: listOrganizationMemberships + parameters: + - description: Number of results to return. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: path + name: organization_id + required: true + schema: + type: string + - in: query + name: role + required: false + schema: + example: ADMIN + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipsPaginatedList' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'List organization memberships + + ' + tags: + - Organizations + post: + description: 'Create organization membership for the given user, role, and organization + + ' + operationId: createOrganizationMembership + parameters: + - in: path + name: organization_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Membership' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'Create organization membership + + ' + tags: + - Organizations + /organizations/{organization_id}/memberships/{user_id}: + delete: + description: 'Delete a single organization membership + + ' + operationId: deleteOrganizationMembership + parameters: + - in: path + name: organization_id + required: true + schema: + type: string + - in: path + name: user_id + required: true + schema: + type: string + responses: + '204': + description: No Content + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'Delete organization membership by user ID and organization ID + + ' + tags: + - Organizations + get: + description: 'Returns organization membership in the given organization for + the given user + + ' + operationId: getOrganizationMembership + parameters: + - in: path + name: organization_id + required: true + schema: + type: string + - in: path + name: user_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Membership' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'Get organization membership + + ' + tags: + - Organizations + patch: + description: 'Update a single organization membership + + ' + operationId: updateOrganizationMembership + parameters: + - in: path + name: organization_id + required: true + schema: + type: string + - in: path + name: user_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Membership' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'Update organization membership by user ID and organization ID + + ' + tags: + - Organizations + /plate-schemas: + get: + description: List plate schemas + operationId: listPlateSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PlateSchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List plate schemas + tags: + - Schemas + /plate-schemas/{schema_id}: + get: + description: Get a plate schema by ID + operationId: getPlateSchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PlateSchema' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a plate schema by ID + tags: + - Schemas + /plates: + get: + description: List plates + operationId: listPlates + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - description: 'Method by which to order search results. Valid sorts are barcode, + name, modifiedAt, and createdAt. Optionally add :asc or :desc to specify + ascending or descending order. Default is modifiedAt. + + ' + in: query + name: sort + schema: + default: modifiedAt:desc + enum: + - barcode + - barcode:asc + - barcode:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + - createdAt + - createdAt:asc + - createdAt:desc + nullable: false + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of a plate. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: 'Name substring of a plate. Restricts results to those with names + that include the provided substring. + + ' + in: query + name: nameIncludes + schema: + type: string + - description: 'Only return plates that have the specified number of empty positions + + ' + in: query + name: emptyPositions + schema: + type: integer + - description: 'Only return plates that have greater-than or equal-to the specified + number of empty positions. + + ' + in: query + name: emptyPositions.gte + schema: + type: integer + - description: 'Only return plates that have greater-than the specified number + of empty positions. + + ' + in: query + name: emptyPositions.gt + schema: + type: integer + - description: 'Only return plates that have less-than or equal-to the specified + number of empty positions. + + ' + in: query + name: emptyPositions.lte + schema: + type: integer + - description: 'Only return plates that have less-than the specified number + of empty positions. + + ' + in: query + name: emptyPositions.lt + schema: + type: integer + - description: 'Only return plates that have the specified number of empty containers + (containers without contents). + + ' + in: query + name: emptyContainers + schema: + type: integer + - description: 'Only return plates that have greater-than or equal-to the specified + number of empty containers (containers without contents). + + ' + in: query + name: emptyContainers.gte + schema: + type: integer + - description: 'Only return plates that have greater-than the specified number + of empty containers (containers without contents). + + ' + in: query + name: emptyContainers.gt + schema: + type: integer + - description: 'Only return plates that have less-than or equal-to the specified + number of empty containers (containers without contents). + + ' + in: query + name: emptyContainers.lte + schema: + type: integer + - description: 'Only return plates that have less-than the specified number + of empty containers (containers without contents). + + ' + in: query + name: emptyContainers.lt + schema: + type: integer + - description: 'ID of a location. Restricts results to those located in the + specified inventory. + + ' + in: query + name: ancestorStorageId + schema: + type: string + - description: 'ID of a entity, or entity schema. Restricts results to those + that hold containers with entities. + + ' + in: query + name: storageContentsId + schema: + type: string + - description: 'Comma-separated list of IDs of entities. Restricts results to + those that hold containers with at least one of the specified entities. + + ' + in: query + name: storageContentsIds + schema: + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived plates. Use + "ANY_ARCHIVED" to filter for archived plates regardless of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" + to return items for both archived and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: plt_xd4hj4eB,plt_xd4hj4C + type: string + - description: 'Comma-separated list of barcodes. Matches all of the provided + barcodes, or returns a 400 error that includes a list of which barcodes + are invalid. + + ' + in: query + name: barcodes + schema: + example: W102477,W102478 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: plates.id,plates.wells.*.webURL + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PlatesPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List plates + tags: + - Plates + post: + description: Create a plate + operationId: createPlate + parameters: + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: id,webURL + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PlateCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Plate' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a plate + tags: + - Plates + /plates/{plate_id}: + get: + description: Get a plate + operationId: getPlate + parameters: + - in: path + name: plate_id + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: id,webURL + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Plate' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a plate + tags: + - Plates + patch: + description: Update a plate + operationId: updatePlate + parameters: + - in: path + name: plate_id + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: id,webURL + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PlateUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Plate' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update a plate + tags: + - Plates + /plates:archive: + post: + description: Archive plates and any containers of the plates + operationId: archivePlates + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PlatesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PlatesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenRestrictedSampleError' + description: Forbidden + summary: Archive plates + tags: + - Plates + /plates:bulk-get: + get: + description: BulkGet plates + operationId: bulkGetPlates + parameters: + - description: Comma-separated list of plate IDs. + in: query + name: plateIds + schema: + type: string + - description: Comma-separated list of plate barcodes. + explode: false + in: query + name: barcodes + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: plates.id,plates.wells.*.webURL + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PlatesBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: BulkGet plates + tags: + - Plates + /plates:unarchive: + post: + description: Unarchive plates and the containers that were archived along with + them + operationId: unarchivePlates + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PlatesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PlatesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive plates + tags: + - Plates + /projects: + get: + description: List projects + operationId: listProjects + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + in: query + name: sort + schema: + default: modifiedAt + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - name + - modifiedAt:asc + - name:asc + - modifiedAt:desc + - name:desc + nullable: false + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived projects. Use + "ANY_ARCHIVED" to filter for archived projects regardless of reason. Use + "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: src_ZJy8RTbo,src_8GVbVkPj,src_qREJ33rn + type: string + - description: Name of a project. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectsPaginatedList' + description: OK + summary: List projects + tags: + - Projects + /projects/{project_id}: + get: + description: Get a project by ID + operationId: getProject + parameters: + - description: ID of project to get + in: path + name: project_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a project by ID + tags: + - Projects + /projects:archive: + post: + description: Archives projects and their contents + operationId: archiveProjects + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectsArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive projects + tags: + - Projects + /projects:unarchive: + post: + description: Unarchives projects and the contents that were archived along with + them + operationId: unarchiveProjects + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectsUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectsArchivalChange' + description: OK + summary: Unarchive projects + tags: + - Projects + /registries: + get: + description: List registries + operationId: listRegistries + parameters: + - description: Name of a registry. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RegistriesList' + description: OK + summary: List registries + tags: + - Registry + /registries/{registry_id}: + get: + description: Get registry + operationId: getRegistry + parameters: + - description: ID for the registry + in: path + name: registry_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Registry' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get registry + tags: + - Registry + /registries/{registry_id}/batch-schemas: + get: + deprecated: true + description: List batch schemas by registry. Deprecated - use Schemas endpoints + instead. + operationId: listBatchSchemasByRegistry + parameters: + - description: ID for the registry + in: path + name: registry_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BatchSchemasList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List batch schemas by registry + tags: + - Registry + /registries/{registry_id}/box-schemas: + get: + deprecated: true + description: List box schemas by registry. Deprecated - use Schemas endpoints + instead. + operationId: listBoxSchemasByRegistry + parameters: + - description: ID for the registry + in: path + name: registry_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoxSchemasList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List box schemas by registry + tags: + - Registry + /registries/{registry_id}/container-schemas: + get: + deprecated: true + description: List container schemas by registry. Deprecated - use Schemas endpoints + instead. + operationId: listContainerSchemasByRegistry + parameters: + - description: ID for the registry + in: path + name: registry_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerSchemasList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List container schemas by registry + tags: + - Registry + /registries/{registry_id}/dropdowns: + get: + deprecated: true + description: List dropdowns by registry + operationId: listDropdownsByRegistry + parameters: + - description: ID of the registry to list the dropdowns for. + in: path + name: registry_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DropdownsRegistryList' + description: OK + headers: + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List dropdowns for a given registry + tags: + - Registry + /registries/{registry_id}/entity-schemas: + get: + deprecated: true + description: List entity schemas by registry. Deprecated - use Schemas endpoints + instead. + operationId: listEntitySchemasByRegistry + parameters: + - description: ID for the registry + in: path + name: registry_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DeprecatedEntitySchemasList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List entity schemas by registry + tags: + - Registry + /registries/{registry_id}/label-printers: + get: + description: List printers + operationId: listPrinters + parameters: + - description: ID of the registry to list the printers for. + in: path + name: registry_id + required: true + schema: + type: string + - description: Name of a printer. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PrintersList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: List printers + tags: + - Printers + /registries/{registry_id}/label-templates: + get: + description: List label templates + operationId: listLabelTemplates + parameters: + - description: ID of the registry to list the label templates of. + in: path + name: registry_id + required: true + schema: + type: string + - description: Name of a label template. Restricts results to those with the + specified name. + in: query + name: name + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LabelTemplatesList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: List label templates + tags: + - Label Templates + /registries/{registry_id}/location-schemas: + get: + deprecated: true + description: List location schemas by registry. Deprecated - use Schemas endpoints + instead. + operationId: listLocationSchemasByRegistry + parameters: + - description: ID for the registry + in: path + name: registry_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LocationSchemasList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List location schemas by registry + tags: + - Registry + /registries/{registry_id}/plate-schemas: + get: + deprecated: true + description: List plate schemas by registry. Deprecated - use Schemas endpoints + instead. + operationId: listPlateSchemasByRegistry + parameters: + - description: ID for the registry + in: path + name: registry_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PlateSchemasList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List plate schemas by registry + tags: + - Registry + /registries/{registry_id}/registered-entities:bulk-get: + get: + description: Bulk get registered entities + operationId: bulkGetRegisteredEntities + parameters: + - description: ID for the registry + in: path + name: registry_id + required: true + schema: + type: string + - description: Comma separated list of entity Registry IDs + in: query + name: entityRegistryIds + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RegisteredEntitiesList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Bulk get registered entities + tags: + - Registry + /registries/{registry_id}:bulk-register-entities: + post: + description: 'Attempts to move entities into the registry. Limit of 2500 entities + per request. This endpoint will first check that the entities are all valid + to be moved into the registry, given the namingStrategy. If any entities fail + validation, no files will be moved and errors describing invalid entities + is returned. If all entities pass validation, the entities are moved into + the registry. + + ' + operationId: registerEntities + parameters: + - description: ID for the registry + in: path + name: registry_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RegisterEntities' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: "\nThis endpoint launches a [long-running task](#/Tasks/getTask)\ + \ and returns the Task ID of the launched task.\n\nWhen successful, the\ + \ task has an empty response. Benchling cannot always process two registration\ + \ attempts within the same registry at the same time,\nso it's possible\ + \ for the task to return an error response that indicates another attempt\ + \ is already in progress and currently blocking this one.\nBenchling will\ + \ automatically retry the task up to 3 times, and in the unlikely event\ + \ that it is still failing, the task status will be \u201CFAILED\u201D\ + \ and the error message will read:\n\n> Another registration attempt is\ + \ in progress. Please try again in a few moments. If this problem persists,\ + \ please wait 1-2 minutes before trying again.\n" + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Register entities + tags: + - Registry + /registries/{registry_id}:unregister-entities: + post: + description: Unregisters entities and moves them to a folder + operationId: unregisterEntities + parameters: + - description: ID of the registry + in: path + name: registry_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UnregisterEntities' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmptyObject' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unregister entities + tags: + - Registry + /registries/{registry_id}:validate-barcodes: + post: + description: Validate barcodes on inventory objects. + operationId: validateBarcodes + parameters: + - description: ID of the registry to validate barcodes in. + in: path + name: registry_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BarcodesList' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BarcodeValidationResults' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Validate barcodes + tags: + - Inventory + /request-fulfillments: + get: + description: List Request Fulfillments + operationId: listRequestFulfillments + parameters: + - example: etr_IKwdYx31 + in: query + name: entryId + required: true + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - example: Im5ldyB0ZXN0Ig== + in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestFulfillmentsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List Request Fulfillments + tags: + - Requests + /request-fulfillments/{request_fulfillment_id}: + get: + description: Get a request's fulfillment + operationId: getRequestFulfillment + parameters: + - example: reqffm_8Hm71Usw + in: path + name: request_fulfillment_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestFulfillment' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a request's fulfillment + tags: + - Requests + /request-schemas: + get: + description: List request schemas + operationId: listRequestSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestSchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List request schemas + tags: + - Schemas + /request-schemas/{schema_id}: + get: + description: Get a Request schema by ID + operationId: getRequestSchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestSchema' + description: OK + '400': + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a Request schema by ID + tags: + - Schemas + /request-task-schemas: + get: + description: List request task schemas + operationId: listRequestTaskSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestTaskSchemasPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of schemas that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of calls remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List request task schemas + tags: + - Schemas + /request-task-schemas/{schema_id}: + get: + description: Get a Request Task schema by ID + operationId: getRequestTaskSchema + parameters: + - description: ID of schema to get + in: path + name: schema_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestTaskSchema' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a Request Task schema by ID + tags: + - Schemas + /requests: + get: + description: List requests + operationId: listRequests + parameters: + - in: query + name: schemaId + required: true + schema: + type: string + - in: query + name: requestStatus + schema: + $ref: '#/components/schemas/RequestStatus' + - description: minimum create time (unix seconds) + in: query + name: minCreatedTime + schema: + type: integer + - description: maximum create time (unix seconds) + in: query + name: maxCreatedTime + schema: + type: integer + - example: Im5ldyB0ZXN0Ig== + in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: requests.id,requests.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestsPaginatedList' + description: OK + summary: List requests + tags: + - Requests + post: + description: Create a request + operationId: createRequest + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RequestCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Request' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a request + tags: + - Requests + /requests/{request_id}: + get: + description: Get a request by ID + operationId: getRequest + parameters: + - example: req_JekfeyVS + in: path + name: request_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Request' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a request by ID + tags: + - Requests + patch: + description: Update a request + operationId: patchRequest + parameters: + - in: path + name: request_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RequestUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Request' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update a request + tags: + - Requests + /requests/{request_id}/response: + get: + description: Get a request's response + operationId: getRequestResponse + parameters: + - example: req_JekfeyVS + in: path + name: request_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestResponse' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a request's response + tags: + - Requests + /requests/{request_id}/tasks:bulk-create: + post: + description: Create tasks for a request + operationId: bulkCreateRequestTasks + parameters: + - example: req_JekfeyVS + in: path + name: request_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RequestTasksBulkCreateRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestTasksBulkCreateResponse' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestErrorBulk' + description: Bad Request + summary: Create tasks for a request + tags: + - Requests + /requests/{request_id}/tasks:bulk-update: + post: + description: Bulk update tasks for a request + operationId: bulkUpdateRequestTasks + parameters: + - example: req_JekfeyVS + in: path + name: request_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RequestTasksBulkUpdateRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestTasksBulkUpdateResponse' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Bulk update tasks for a request + tags: + - Requests + /requests/{request_id}:execute-sample-groups: + post: + description: Update the status of sample groups in a request + operationId: executeRequestsSampleGroups + parameters: + - example: req_JekfeyVS + in: path + name: request_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SampleGroupsStatusUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ExecuteSampleGroups' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update the status of sample groups in a request + tags: + - Requests + /requests:bulk-get: + get: + description: Bulk get requests by API ID or display ID + operationId: bulkGetRequests + parameters: + - description: Comma-separated list of request IDs. Exactly one of requestIds + or displayIds must be specified. + example: req_xJk20sla,req_lQJ3nMs5 + in: query + name: requestIds + schema: + type: string + - description: Comma-separated list of display IDs. Exactly one of requestIds + or displayIds must be specified. + example: VPR001,VPR002 + in: query + name: displayIds + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: requests.id,requests.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RequestsBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk get requests + tags: + - Requests + /result-transactions: + post: + description: 'Transactions allow results to be upload in multiple requests. + This endpoint lets you create a transaction. You can then upload results to + the transaction, abort the transaction, or commit the transaction. + + ' + operationId: createAssayResultsTransaction + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultTransactionCreateResponse' + description: OK + summary: Create a transaction + tags: + - Assay Results + /result-transactions/{transaction_id}/results: + post: + description: Create results in a transaction + operationId: createAssayResultsInTransaction + parameters: + - in: path + name: transaction_id + required: true + schema: + format: uuid + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultsBulkCreateRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultsCreateResponse' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultsCreateErrorResponse' + description: Bad Request + summary: Create results in a transaction + tags: + - Assay Results + /result-transactions/{transaction_id}:abort: + post: + description: Aborting a transaction will discard all uploaded results. + operationId: abortAssayResultsTransaction + parameters: + - in: path + name: transaction_id + required: true + schema: + format: uuid + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultTransactionCreateResponse' + description: OK + summary: Abort a transaction + tags: + - Assay Results + /result-transactions/{transaction_id}:commit: + post: + description: Committing a transaction will cause all results that have been + uploaded to be saved and visible to others. + operationId: commitAssayResultsTransaction + parameters: + - in: path + name: transaction_id + required: true + schema: + format: uuid + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AssayResultTransactionCreateResponse' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Commit a transaction + tags: + - Assay Results + /rna-oligos: + get: + description: List RNA Oligos + operationId: listRNAOligos + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of an RNA Oligo. Restricts results to those with the specified + name, alias, or entity registry ID. + in: query + name: name + schema: + type: string + - description: Name substring of an RNA Oligo. Restricts results to those with + names, aliases, or entity registry IDs that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Full bases of the RNA Oligo. Restricts results to those with + the specified bases, case-insensitive, allowing for circular or reverse + complement matches. Does not allow partial matching or loose matching via + degenerate bases. + + ' + in: query + name: bases + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. + in: query + name: folderId + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to RNA + Oligos mentioned in those entries. + + ' + in: query + name: mentionedIn + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'ID of a registry. Restricts results to those registered in this + registry. Specifying "null" returns unregistered items. + + ' + in: query + name: registryId + schema: + nullable: true + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived RNA Oligos. + Use "ANY_ARCHIVED" to filter for archived RNA Oligos regardless of reason. + Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and + unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of item IDs. Restricts results to those + that mention the given items in the description. + + ' + in: query + name: mentions + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: seq_yWs5X7lv,seq_RhYGVnHF + type: string + - description: 'Comma-separated list of entity registry IDs. Maximum of 100. + Restricts results to those that match any of the specified registry IDs. + + ' + in: query + name: entityRegistryIds.anyOf + schema: + example: TP001,TP002 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case insensitive. Warning - this filter can be non-performant due + to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma separated list of user or app IDs. Maximum of 100. + in: query + name: authorIds.anyOf + schema: + example: ent_a0SApq3z,ent_b4AApz9b + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: rnaOligos.id,rnaOligos.modifiedAt + type: string + - description: ID of the notation to use in populating the customNotation field. + in: query + name: customNotationId + schema: + example: sntx_lRe007yZ + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligosPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List RNA Oligos + tags: + - RNA Oligos + post: + description: Create an RNA Oligo + operationId: createRNAOligo + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligoCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligo' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '503': + description: Deprecated, a 429 is returned for too many requests + summary: Create an RNA Oligo + tags: + - RNA Oligos + /rna-oligos/{entity_registry_id}:upsert: + patch: + description: 'Create or update a registered RNA oligo. + + + Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). + + ' + operationId: upsertRnaOligo + parameters: + - example: entity_registry_id_001 + in: path + name: entity_registry_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OligoUpsertRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligo' + description: Updated + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligo' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create or update a registered RNA oligo + tags: + - RNA Oligos + /rna-oligos/{oligo_id}: + get: + description: Get an RNA Oligo + operationId: getRNAOligo + parameters: + - in: path + name: oligo_id + required: true + schema: + type: string + - description: Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + in: query + name: returning + schema: + example: id,modifiedAt + type: string + - description: ID of the notation to use in populating the customNotation field. + in: query + name: customNotationId + schema: + example: sntx_lRe007yZ + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligo' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get an RNA Oligo + tags: + - RNA Oligos + patch: + description: Update an RNA Oligo + operationId: updateRNAOligo + parameters: + - in: path + name: oligo_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligoUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligo' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update an RNA Oligo + tags: + - RNA Oligos + /rna-oligos:archive: + post: + description: Archive RNA Oligos + operationId: archiveRNAOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligosArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligosArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive RNA Oligos + tags: + - RNA Oligos + /rna-oligos:bulk-create: + post: + description: Bulk Create RNA Oligos. Limit of 1000 RNA Oligos per request. + operationId: bulkCreateRNAOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligosBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of RNA Oligos that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create RNA Oligos + tags: + - RNA Oligos + /rna-oligos:bulk-update: + post: + description: Bulk Update RNA Oligos + operationId: bulkUpdateRNAOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligosBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [RNA Oligo](#/RNA%20Oligos/getRNAOligo) + resources that were updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update RNA Oligos + tags: + - RNA Oligos + /rna-oligos:bulk-upsert: + post: + description: 'All entities and their schemas must be within the same registry. + + + This operation performs the following actions: + + 1. Any existing objects are looked up in Benchling by the provided entity + registry ID. + + 2. Then, all objects are either created or updated accordingly, temporarily + skipping any schema field links between objects. + + 3. Schema field links can be populated using entity registry IDs or API IDs. + In the `value` field of the [Field](#/components/schemas/FieldWithResolution) + resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided + instead of the API ID if desired (see example value). You may link to objects + being created in the same operation. + + 4. Entities are registered, using the provided name and entity registry ID. + + + If any action fails, the whole operation is canceled and no objects are created + or updated. + + + Limit of 1000 entities per request. + + ' + operationId: bulkUpsertRNAOligos + parameters: + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + ' + in: query + name: returning + schema: + example: rnaOligos.id,rnaOligos.creator.handle + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligosBulkUpsertRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns the resources of the objects that were + upserted. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk upsert RNA oligos + tags: + - RNA Oligos + /rna-oligos:unarchive: + post: + description: Unarchive RNA Oligos + operationId: unarchiveRNAOligos + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligosUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaOligosArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive RNA Oligos + tags: + - RNA Oligos + /rna-sequences: + get: + description: List RNA sequences + operationId: listRNASequences + parameters: + - description: 'Number of results to return. Defaults to 50, maximum of 100. + + ' + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Method by which to order search results. Valid sorts are name, + modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending + or descending order. Default is modifiedAt. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Name of an RNA Sequence. Restricts results to those with the + specified name, alias, or entity registry ID. + in: query + name: name + schema: + type: string + - description: Name substring of an RNA Sequence. Restricts results to those + with names, aliases, or entity registry IDs that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: Full bases of the RNA sequence. Restricts results to those with + the specified bases, case-insensitive, allowing for circular or reverse + complement matches. Does not allow partial matching or loose matching via + degenerate bases. + in: query + name: bases + schema: + type: string + - description: ID of a folder. Restricts results to those in the folder. + in: query + name: folderId + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to RNA + sequences mentioned in those entries. + + ' + in: query + name: mentionedIn + schema: + type: string + - description: ID of a project. Restricts results to those in the project. + in: query + name: projectId + schema: + type: string + - description: 'ID of a registry. Restricts results to those registered in this + registry. Specifying "null" returns unregistered items. + + ' + in: query + name: registryId + schema: + nullable: true + type: string + - description: 'ID of a schema. Restricts results to those of the specified + schema. + + ' + in: query + name: schemaId + schema: + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived RNA sequences. + Use "ANY_ARCHIVED" to filter for archived RNA sequences regardless of reason. + Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and + unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + - description: 'Comma-separated list of item IDs. Restricts results to those + that mention the given items in the description. + + ' + in: query + name: mentions + schema: + type: string + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: seq_VzVOART1,seq_RahDGaaC + type: string + - description: 'Comma-separated list of entity registry IDs. Maximum of 100. + Restricts results to those that match any of the specified registry IDs. + + ' + in: query + name: entityRegistryIds.anyOf + schema: + example: TP001,TP002 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case insensitive. Warning - this filter can be non-performant due + to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, aliases, or entity registry + IDs, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: Comma separated list of users IDs + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: Comma separated list of user or app IDs. Maximum of 100. + in: query + name: authorIds.anyOf + schema: + example: ent_a0SApq3z,ent_b4AApz9b + type: string + - description: ID of the notation to use in populating the customNotation field. + in: query + name: customNotationId + schema: + example: sntx_lRe007yZ + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note**: Fields annotations, translations, and primers cannot be introspected + with the returning parameter, and any sub fields will be ignored. E.g.: + "rnaSequences.annotations.id" will return the same as "rnaSequences.annotations". + + ' + in: query + name: returning + schema: + example: rnaSequences.id, rnaSequences.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesPaginatedList' + description: OK + headers: + Result-Count: + description: The total number of items that match the given query + schema: + type: integer + x-rate-limit-limit: + description: The number of allowed requests in the current rate-limit + period + schema: + type: integer + x-rate-limit-remaining: + description: The number of requests remaining in the current rate-limit + period + schema: + type: integer + x-rate-limit-reset: + description: The number of seconds remaining in the current rate-limit + period + schema: + type: integer + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List RNA sequences + tags: + - RNA Sequences + post: + description: Create an RNA sequence + operationId: createRNASequence + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequenceCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequence' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '503': + description: Deprecated, a 429 is returned for too many requests + summary: Create an RNA sequence + tags: + - RNA Sequences + /rna-sequences/{rna_sequence_id}: + get: + description: Get an RNA sequence + operationId: getRNASequence + parameters: + - in: path + name: rna_sequence_id + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note**: Fields annotations, translations, and primers cannot be introspected + with the returning parameter, and any sub fields will be ignored. E.g.: + "annotations.id" will return the same as "annotations". + + ' + in: query + name: returning + schema: + example: id,modifiedAt + type: string + - description: ID of the notation to use in populating the customNotation field. + in: query + name: customNotationId + schema: + example: sntx_lRe007yZ + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequence' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Get an RNA sequence + tags: + - RNA Sequences + patch: + description: Update an RNA sequence + operationId: updateRNASequence + parameters: + - in: path + name: rna_sequence_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequenceUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequence' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Update an RNA sequence + tags: + - RNA Sequences + /rna-sequences:archive: + post: + description: Archive RNA Sequences. RNA sequences that are already registered + will not be removed from the registry. + operationId: archiveRNASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Archive RNA Sequences + tags: + - RNA Sequences + /rna-sequences:auto-annotate: + post: + description: Auto-annotate RNA sequences with matching features from specified + Feature Libraries. U/T bases are treated as interchangeable in both features + and sequences. + operationId: autoAnnotateRnaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutoAnnotateRnaSequences' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task has an empty response. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Auto-annotate RNA sequences with matching features from specified Feature + Libraries + tags: + - RNA Sequences + /rna-sequences:autofill-parts: + post: + description: Autofill parts from matching RNA Sequences with linked schemas. + operationId: autofillRNASequenceParts + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutofillRnaSequences' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task has an empty response. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Autofill RNA sequence parts + tags: + - RNA Sequences + /rna-sequences:autofill-translations: + post: + description: Autofill RNA sequence translations + operationId: autofillRNASequenceTranslations + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AutofillRnaSequences' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task has an empty response. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Autofill RNA sequence translations from Amino Acid sequences with matching + schemas + tags: + - RNA Sequences + /rna-sequences:bulk-create: + post: + description: Bulk Create RNA sequences. Limit of 1000 RNA Sequences per request. + operationId: bulkCreateRNASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [RNA Sequence](#/RNA%20Sequences/bulkGetRNASequences) + resources that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create RNA sequences + tags: + - RNA Sequences + /rna-sequences:bulk-get: + get: + description: Bulk get RNA sequences by ID + operationId: bulkGetRNASequences + parameters: + - description: 'Comma-separated list of IDs of RNA sequences to get. + + ' + in: query + name: rnaSequenceIds + required: true + schema: + type: string + - description: 'Comma-separated list of fields to return. Modifies the output + shape. To return all keys at a given level, enumerate them or use the wildcard, + ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). + + + **Note**: Fields annotations, translations, and primers cannot be introspected + with the returning parameter, and any sub fields will be ignored. E.g.: + "rnaSequences.annotations.id" will return the same as "rnaSequences.annotations". + + ' + in: query + name: returning + schema: + example: rnaSequences.id, rnaSequences.modifiedAt + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesBulkGet' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk get RNA sequences by ID + tags: + - RNA Sequences + /rna-sequences:bulk-update: + post: + description: Bulk Update RNA sequences + operationId: bulkUpdateRNASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [RNA Sequences](#/RNA%20Sequences/bulkGetRNASequences) + resources that were updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update RNA sequences + tags: + - RNA Sequences + /rna-sequences:match-bases: + post: + description: Return RNA sequences whose bases exactly match the provided query. + operationId: matchBasesRnaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MatchBasesRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesPaginatedList' + description: A filtered list of RNA Sequences + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Match RNA sequences by bases + tags: + - RNA Sequences + /rna-sequences:search-bases: + post: + description: 'Returns RNA Sequences that contain the provided bases. Search + indexing is asynchronous, so results my be not be available immediately after + creation. + + ' + operationId: searchRnaSequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SearchBasesRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesPaginatedList' + description: A filtered list of DNA Sequences + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Search RNA Sequences + tags: + - RNA Sequences + /rna-sequences:unarchive: + post: + description: Unarchive RNA sequences + operationId: unarchiveRNASequences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RnaSequencesArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Unarchive RNA sequences + tags: + - RNA Sequences + /tasks/{task_id}: + get: + description: Get a task by id + operationId: getTask + parameters: + - description: UUID of the task + example: f438d656-c2c3-40a4-b3fd-d7e58db78242 + in: path + name: task_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + AA Sequences - Bulk Create: + $ref: '#/components/examples/BulkOperateAaSequencesTaskResponse' + AA Sequences - Bulk Update: + $ref: '#/components/examples/BulkOperateAaSequencesTaskResponse' + AA Sequences - Find Matching Region: + $ref: '#/components/examples/AaSequencesFindMatchingRegionTaskResponse' + Containers - Bulk Create: + $ref: '#/components/examples/BulkOperateContainersTaskResponse' + Containers - Bulk Update: + $ref: '#/components/examples/BulkOperateContainersTaskResponse' + Containers - Transfers: + $ref: '#/components/examples/TransfersTaskResponse' + Custom Entities - Bulk Create: + $ref: '#/components/examples/BulkOperateCustomEntitiesTaskResponse' + Custom Entities - Bulk Update: + $ref: '#/components/examples/BulkOperateCustomEntitiesTaskResponse' + DNA Alignments - Create Consensus Alignment: + $ref: '#/components/examples/DnaCreateAlignmentTaskResponse' + DNA Alignments - Create Template Alignment: + $ref: '#/components/examples/DnaCreateAlignmentTaskResponse' + DNA Oligos - Bulk Create: + $ref: '#/components/examples/BulkOperateDnaOligosTaskResponse' + DNA Oligos - Bulk Update: + $ref: '#/components/examples/BulkOperateDnaOligosTaskResponse' + DNA Sequences - Auto Annotate: + $ref: '#/components/examples/EmptySuccessTaskResponse' + DNA Sequences - Autofill Parts: + $ref: '#/components/examples/EmptySuccessTaskResponse' + DNA Sequences - Autofill Transcriptions: + $ref: '#/components/examples/EmptySuccessTaskResponse' + DNA Sequences - Autofill Translations: + $ref: '#/components/examples/EmptySuccessTaskResponse' + DNA Sequences - Bulk Create: + $ref: '#/components/examples/BulkOperateDnaSequencesTaskResponse' + DNA Sequences - Bulk Update: + $ref: '#/components/examples/BulkOperateDnaSequencesTaskResponse' + Exports - Export Item: + $ref: '#/components/examples/ExportsTaskResponse' + Features - Bulk Create: + $ref: '#/components/examples/BulkOperateFeaturesTaskResponse' + Lab Automation - Generate Input: + $ref: '#/components/examples/AIGGenerateInputTaskResponse' + Lab Automation - Process Output: + $ref: '#/components/examples/AOPProcessOutputTaskResponse' + RNA Oligos - Bulk Create: + $ref: '#/components/examples/BulkOperateRnaOligosTaskResponse' + RNA Oligos - Bulk Update: + $ref: '#/components/examples/BulkOperateRnaOligosTaskResponse' + RNA Sequences - Auto Annotate: + $ref: '#/components/examples/EmptySuccessTaskResponse' + RNA Sequences - Autofill Parts: + $ref: '#/components/examples/EmptySuccessTaskResponse' + RNA Sequences - Autofill Translations: + $ref: '#/components/examples/EmptySuccessTaskResponse' + RNA Sequences - Bulk Create: + $ref: '#/components/examples/BulkOperateRnaSequencesTaskResponse' + RNA Sequences - Bulk Update: + $ref: '#/components/examples/BulkOperateRnaSequencesTaskResponse' + Registry - Bulk Register Entities: + $ref: '#/components/examples/EmptySuccessTaskResponse' + Task Failed: + $ref: '#/components/examples/TaskFailed' + Task Failed (Bulk): + $ref: '#/components/examples/BulkTaskFailed' + Task Running: + $ref: '#/components/examples/TaskRunning' + schema: + oneOf: + - $ref: '#/components/schemas/AsyncTask' + - $ref: '#/components/schemas/CreateTemplateAlignmentAsyncTask' + - $ref: '#/components/schemas/CreateConsensusAlignmentAsyncTask' + - $ref: '#/components/schemas/CreateNucleotideTemplateAlignmentAsyncTask' + - $ref: '#/components/schemas/CreateNucleotideConsensusAlignmentAsyncTask' + - $ref: '#/components/schemas/BulkCreateDnaSequencesAsyncTask' + - $ref: '#/components/schemas/BulkUpdateDnaSequencesAsyncTask' + - $ref: '#/components/schemas/BulkCreateRnaSequencesAsyncTask' + - $ref: '#/components/schemas/BulkUpdateRnaSequencesAsyncTask' + - $ref: '#/components/schemas/AutofillPartsAsyncTask' + - $ref: '#/components/schemas/AutofillTranscriptionsAsyncTask' + - $ref: '#/components/schemas/AutofillTranslationsAsyncTask' + - $ref: '#/components/schemas/BulkRegisterEntitiesAsyncTask' + - $ref: '#/components/schemas/BulkCreateDnaOligosAsyncTask' + - $ref: '#/components/schemas/BulkUpdateDnaOligosAsyncTask' + - $ref: '#/components/schemas/BulkCreateRnaOligosAsyncTask' + - $ref: '#/components/schemas/BulkCreateAaSequencesAsyncTask' + - $ref: '#/components/schemas/BulkCreateCustomEntitiesAsyncTask' + - $ref: '#/components/schemas/BulkUpdateCustomEntitiesAsyncTask' + - $ref: '#/components/schemas/BulkCreateContainersAsyncTask' + - $ref: '#/components/schemas/BulkUpdateContainersAsyncTask' + - $ref: '#/components/schemas/BulkUpdateAaSequencesAsyncTask' + - $ref: '#/components/schemas/BulkUpdateRnaOligosAsyncTask' + - $ref: '#/components/schemas/TransfersAsyncTask' + - $ref: '#/components/schemas/AOPProcessOutputAsyncTask' + - $ref: '#/components/schemas/AIGGenerateInputAsyncTask' + - $ref: '#/components/schemas/ExportsAsyncTask' + - $ref: '#/components/schemas/ExportAuditLogAsyncTask' + - $ref: '#/components/schemas/BulkCreateFeaturesAsyncTask' + - $ref: '#/components/schemas/FindMatchingRegionsAsyncTask' + - $ref: '#/components/schemas/FindMatchingRegionsDnaAsyncTask' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a task by id + tags: + - Tasks + /teams: + get: + description: "Returns all teams that the caller has permission to view. The\ + \ following roles have view permission:\n - tenant admins\n - members of\ + \ the team's organization\n" + operationId: listTeams + parameters: + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: team_ZJy8RTbo,team_8GVbVkPj,team_qREJ33rn + type: string + - description: Name of a team. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: Name substring of a team. Restricts results to those with names + that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: 'Comma-separated list of entry IDs. Restricts results to teams + mentioned in those entries. + + ' + in: query + name: mentionedIn + schema: + example: etr_1X1AlQPD, etr_tv7m7B78 + type: string + - description: Restricts results to those in the organization. + in: query + name: organizationId + schema: + type: string + - description: Comma-separated list of user or Benchling app IDs. Restricts + results to teams that include all the given users/apps as members. + in: query + name: hasMembers + schema: + type: string + - description: Comma-separated list of user or Benchling app IDs. Restricts + results to teams that include all the given users/apps as admins. + in: query + name: hasAdmins + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Sets the sort-order of the response. Valid sorts are modifiedAt + (modified time, most recent first) and name (team name, alphabetical). + Optionally add :asc or :desc to specify ascending or descending order. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TeamsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List teams + tags: + - Teams + post: + description: 'Create a team + + ' + operationId: createTeam + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TeamCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Team' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + summary: 'Create team + + ' + tags: + - Teams + /teams/{team_id}: + get: + description: "Returns a team by ID if the caller has permission to view. The\ + \ following roles have view permission:\n - tenant admins\n - members of\ + \ the team's organization\n" + operationId: getTeam + parameters: + - description: ID of team to get + in: path + name: team_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Team' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a team by ID + tags: + - Teams + patch: + description: 'Update team properties + + ' + operationId: updateTeam + parameters: + - in: path + name: team_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TeamUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Team' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'Update team + + ' + tags: + - Teams + /teams/{team_id}/memberships: + get: + description: 'Returns all team memberships in the given team + + ' + operationId: listTeamMemberships + parameters: + - description: Number of results to return. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: path + name: team_id + required: true + schema: + type: string + - in: query + name: role + required: false + schema: + example: ADMIN + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipsPaginatedList' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'List team memberships + + ' + tags: + - Teams + post: + description: 'Create team membership for the given user, role, and team + + ' + operationId: createTeamMembership + parameters: + - in: path + name: team_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Membership' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'Create team membership + + ' + tags: + - Teams + /teams/{team_id}/memberships/{user_id}: + delete: + description: 'Delete a single team membership + + ' + operationId: deleteTeamMembership + parameters: + - in: path + name: team_id + required: true + schema: + type: string + - in: path + name: user_id + required: true + schema: + type: string + responses: + '204': + description: No Content + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'Delete team membership by user ID and team ID + + ' + tags: + - Teams + get: + description: 'Returns team membership in the given team for the given user + + ' + operationId: getTeamMembership + parameters: + - in: path + name: team_id + required: true + schema: + type: string + - in: path + name: user_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Membership' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'Get team membership + + ' + tags: + - Teams + patch: + description: 'Update a single team membership + + ' + operationId: updateTeamMembership + parameters: + - in: path + name: team_id + required: true + schema: + type: string + - in: path + name: user_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Membership' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: 'Update team membership by user ID and team ID + + ' + tags: + - Teams + /token: + post: + description: Generate a token + operationId: generateToken + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TokenCreate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TokenResponse' + description: Generated token + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/OAuthBadRequestError' + description: Bad Request + '401': + content: + application/json: + schema: + $ref: '#/components/schemas/OAuthUnauthorizedError' + description: Unauthorized + security: + - basicClientIdSecretAuth: [] + summary: Generate a token for usage with authenticating via OAuth2 in subsequent + API calls. + tags: + - Authentication + /transfers: + post: + description: 'Transfers a volume of an entity or container into a destination + container. Limit of 5000 transfers per request. Concentration of all contents + in the destination container will be automatically updated based on the previous + volume & concentrations of the contents in that container, the concentration + of the contents being transferred in, the volume of the contents being transferred + in, and the final volume of the container. If no concentration is specified, + the concentration will not be tracked. + + ' + operationId: transferIntoContainers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MultipleContainersTransfersList' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + The task response contains the full list of destination [containers](#/Containers/getContainer). + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Transfers into containers + tags: + - Containers + /users: + get: + description: "Returns all users that the caller has permission to view. The\ + \ following roles have view permission:\n - tenant admins\n - members of\ + \ the user's organizations\n" + operationId: listUsers + parameters: + - description: 'Comma-separated list of ids. Matches all of the provided IDs, + or returns a 400 error that includes a list of which IDs are invalid. + + ' + in: query + name: ids + schema: + example: ent_ZJy8RTbo,ent_8GVbVkPj,ent_qREJ33rn + type: string + - description: Name of a user. Restricts results to those with the specified + name. + in: query + name: name + schema: + type: string + - description: Name substring of a user. Restricts results to those with names + that include the provided substring. + in: query + name: nameIncludes + schema: + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case insensitive. Warning + - this filter can be non-performant due to case insensitivity. + + ' + in: query + name: names.anyOf + schema: + example: MyName1,MyName2 + type: string + - description: 'Comma-separated list of names. Maximum of 100. Restricts results + to those that match any of the specified names, case sensitive. + + ' + in: query + name: names.anyOf.caseSensitive + schema: + example: MyName1,MyName2 + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - description: Comma-separated list of organization and/or team API IDs. Restricts + results to users that are members of all given groups. + in: query + name: memberOf + schema: + type: string + - description: Comma-separated list of organization and/or team API IDs. Restricts + results to users that are admins of all given groups. + in: query + name: adminOf + schema: + type: string + - description: Comma-separated list of handles. Restricts results to the users + with the specified handles. + in: query + name: handles + schema: + type: string + - description: Comma-separated list of emails. Maximum of 100. Restricts results + to the users with the specified emails. + in: query + name: email.anyOf + schema: + type: string + - description: 'Datetime, in RFC 3339 format. Supports the >, >=, <, <=, operators. + Time zone defaults to UTC. Restricts results to users who have last changed + their password in the specified range. e.g. > 2017-04-30. If "null" is provided + returns users that have no password set (SAML). + + ' + in: query + name: passwordLastChangedAt + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Token for pagination + in: query + name: nextToken + schema: + type: string + - in: query + name: sort + schema: + default: modifiedAt:desc + description: 'Sets the sort-order of the response. Valid sorts are modifiedAt + (modified time, most recent first) and name (user name, alphabetical). + Optionally add :asc or :desc to specify ascending or descending order. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + - modifiedAt + - modifiedAt:asc + - modifiedAt:desc + - name + - name:asc + - name:desc + nullable: false + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UsersPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: List users + tags: + - Users + post: + description: Creates a single user. + operationId: createUser + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: Created + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create a user + tags: + - Users + /users/{user_id}: + get: + description: "Returns a user by ID if the caller has permission to view. The\ + \ following roles have view permission:\n - tenant admins\n - members of\ + \ any of the user's organizations\n" + operationId: getUser + parameters: + - description: ID of user to get + in: path + name: user_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Get a user by ID + tags: + - Users + patch: + description: Update a single user. + operationId: updateUser + parameters: + - description: ID of user to update + in: path + name: user_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenError' + description: Forbidden + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Update a user by ID + tags: + - Users + /users/{user_id}/activity: + get: + description: 'Returns activity metadata for a specific user by ID. This currently + includes lastSeen data. + + ' + operationId: getUserActivity + parameters: + - description: ID of user to get + in: path + name: user_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UserActivity' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: Last user activity + tags: + - Users + /users/{user_id}/warehouse-credentials: + get: + description: Returns the list of warehouse credential summaries for this user. + operationId: getUserWarehouseLogins + parameters: + - description: ID of user to get + in: path + name: user_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + warehouseCredentials: + items: + $ref: '#/components/schemas/WarehouseCredentialSummary' + type: array + type: object + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not Found + summary: User warehouse credentials + tags: + - Users + /users:bulk-create: + post: + description: Bulk Create Users. + operationId: bulkCreateUsers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [Users](#/users/bulkCreateUsers) + resources that were created. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Create Users + tags: + - Users + /users:bulk-update: + post: + description: 'There is currently **no support** for swapping emails or handles + between existing users in the same request. + + ' + operationId: bulkUpdateUsers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: 'This endpoint launches a [long-running task](#/Tasks/getTask) + and returns the Task ID of the launched task. + + When successful, the task returns a full list of [Users](#/users/bulkUpdateUsers) + resources that were updated. + + ' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Bulk Update Users. + tags: + - Users + /warehouse-credentials: + post: + description: 'Allows for programmatically generating credentials to connect + to the Benchling warehouse. You must have a warehouse configured to access + this endpoint. + + The credentials will authenticate as the same user calling the API. + + Note that expiresIn is required - only temporary credentials are currently + allowed. + + ' + operationId: createWarehouseCredentials + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WarehouseCredentialsCreate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WarehouseCredentials' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad Request + summary: Create Benchling Warehouse credentials + tags: + - Warehouse + /workflow-flowchart-config-versions/{workflow_flowchart_config_version_id}: + get: + description: Get a workflow flowchart config version + operationId: getWorkflowFlowchartConfigVersion + parameters: + - description: The ID of the workflow flowchart config version + in: path + name: workflow_flowchart_config_version_id + required: true + schema: + example: wffccv_giVNQcAF + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowFlowchartConfigVersion' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Get a workflow flowchart config version. If there is a template flowchart, + serializes that flowchart in the same format as the workflow-flowcharts endpoint. + tags: + - Workflow Flowchart Config Versions + /workflow-flowcharts: + get: + description: List workflow flowcharts + operationId: listWorkflowFlowcharts + parameters: + - description: Comma separated list of workflow flowchart IDs + in: query + name: ids + schema: + example: wffc_5cJLQPFR,wffc_9jENXm4x + type: string + - in: query + name: sort + schema: + default: createdAt:desc + description: 'Method by which to order search results. Valid sorts are createdAt + (creation time, most recent first). Optionally add :asc or :desc to specify + ascending or descending order. + + ' + enum: + - createdAt + - createdAt:asc + - createdAt:desc + nullable: false + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. + + ' + in: query + name: createdAt + schema: + example: '2020-01-01' + format: date + type: string + - example: Im5ldyB0ZXN0Ig== + in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowFlowchartPaginatedList' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: List workflow flowcharts + tags: + - Workflow Flowcharts + /workflow-flowcharts/{workflow_flowchart_id}: + get: + description: Get a workflow flowchart + operationId: getWorkflowFlowchart + parameters: + - description: The ID of the workflow flowchart + in: path + name: workflow_flowchart_id + required: true + schema: + example: wffc_giVNQcAF + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowFlowchart' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Get a workflow flowchart + tags: + - Workflow Flowcharts + /workflow-outputs: + get: + description: List workflow outputs + operationId: listWorkflowOutputs + parameters: + - description: Comma separated list of workflow output IDs + in: query + name: ids + schema: + example: wfout_5cJLQKVF,wfout_9jENXd3t + type: string + - description: Comma separated list of workflow IDs + in: query + name: workflowTaskGroupIds + schema: + example: prs_giVNQcTL,prst6m99v1 + minLength: 1 + type: string + - description: Comma separated list of workflow task IDs + in: query + name: workflowTaskIds + schema: + example: wftask_OnnsW08k,wftask_4ejSW7en + minLength: 1 + type: string + - description: The ID of the workflow task schema of the workflow output + in: query + name: schemaId + schema: + example: prstsch_KnR9iVum + type: string + - description: Comma separated list of user IDs or "null" + in: query + name: watcherIds + schema: + example: ent_a0SApq3z,ent_asdf72354,null + minLength: 1 + type: string + - description: Comma separated list of team IDs or "null" + in: query + name: responsibleTeamIds + schema: + example: team_Thepp2c7,team_QqHMbfqK,null + minLength: 1 + type: string + - description: Comma separated list of entry IDs + in: query + name: creationOriginIds + schema: + example: etr_d00c97,etr_30ad79 + type: string + - description: 'Comma separated list of bioentity or storable IDs. Maximum of + 100. Returns workflow outputs where the output''s schema fields reference + at least one of the provided items. + + ' + in: query + name: linkedItemIds.anyOf + schema: + example: bfi_ed1ef7,con_1c76c9 + type: string + - description: 'Comma separated list of bioentity or storable IDs. Returns workflow + outputs where the output''s schema fields reference all of the provided + items. + + ' + in: query + name: linkedItemIds.allOf + schema: + example: bfi_ed1ef7,con_1c76c9 + type: string + - description: 'Comma separated list of bioentity or storable IDs. Returns workflow + outputs where the output''s schema fields do not reference any of the provided + items. + + ' + in: query + name: linkedItemIds.noneOf + schema: + example: bfi_ed1ef7,con_1c76c9 + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: The name of the workflow task + in: query + name: name + schema: + example: PR-1 + type: string + - description: Part of the name of the workflow task + in: query + name: nameIncludes + schema: + example: PR + type: string + - description: Comma separated list of user IDs. + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - example: Im5ldyB0ZXN0Ig== + in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Comma-separated list of Workflow Output Display IDs. + in: query + name: displayIds + schema: + example: ANG1-O1,ANG1-O2 + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived workflow outputs. + Use "ANY_ARCHIVED" to filter for archived workflow outputs regardless of + reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived + and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutputsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: List workflow outputs + tags: + - Workflow Outputs + post: + description: Create a new workflow output + operationId: createWorkflowOutput + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutputCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutput' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Create a new workflow output + tags: + - Workflow Outputs + /workflow-outputs/{workflow_output_id}: + get: + description: Get a workflow output + operationId: getWorkflowOutput + parameters: + - description: The ID of the workflow task output + in: path + name: workflow_output_id + required: true + schema: + example: wfout_5cJLQKVF + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutput' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Get a workflow output + tags: + - Workflow Outputs + patch: + description: Update a workflow output + operationId: updateWorkflowOutput + parameters: + - description: The ID of the workflow output + in: path + name: workflow_output_id + required: true + schema: + example: wfout_5cJLQKVF + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutputUpdate' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutput' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Update a workflow output + tags: + - Workflow Outputs + /workflow-outputs:archive: + post: + description: Archive one or more workflow outputs + operationId: archiveWorkflowOutputs + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutputsArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutputsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Archive one or more workflow outputs + tags: + - Workflow Outputs + /workflow-outputs:bulk-create: + post: + description: Bulk create new workflow outputs + operationId: bulkCreateWorkflowOutputs + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutputsBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Bulk create new workflow outputs + tags: + - Workflow Outputs + /workflow-outputs:bulk-update: + post: + description: Bulk update workflow outputs + operationId: bulkUpdateWorkflowOutputs + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutputsBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Bulk update workflow outputs + tags: + - Workflow Outputs + /workflow-outputs:unarchive: + post: + description: Unarchive one or more workflow outputs + operationId: unarchiveWorkflowOutputs + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutputsUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowOutputsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Unarchive one or more workflow outputs + tags: + - Workflow Outputs + /workflow-stage-runs/{stage_run_id}/input-samples: + get: + deprecated: true + description: List stage run input samples + operationId: listStageRunInputSamples + parameters: + - description: ID of the stage run to list input samples for + in: path + name: stage_run_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowSampleList' + description: OK + summary: List stage run input samples + tags: + - Legacy Workflows (deprecated) + /workflow-stage-runs/{stage_run_id}/output-samples: + get: + deprecated: true + description: List stage run output samples + operationId: listStageRunOutputSamples + parameters: + - description: ID of the stage run to list output samples for + in: path + name: stage_run_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowSampleList' + description: OK + summary: List stage run output samples + tags: + - Legacy Workflows (deprecated) + /workflow-stage-runs/{stage_run_id}/registered-samples: + get: + deprecated: true + description: List stage run registered samples + operationId: listStageRunRegisteredSamples + parameters: + - description: ID of the stage run to list registered samples for + in: path + name: stage_run_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowSampleList' + description: OK + summary: List stage run registered samples + tags: + - Legacy Workflows (deprecated) + /workflow-stages/{stage_id}/workflow-stage-runs: + get: + deprecated: true + description: List workflow stage runs + operationId: listWorkflowStageRuns + parameters: + - description: ID of the workflow stage to list runs for + in: path + name: stage_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowStageRunList' + description: OK + summary: List workflow stage runs + tags: + - Legacy Workflows (deprecated) + /workflow-task-groups: + get: + description: List workflow task groups + operationId: listWorkflowTaskGroups + parameters: + - description: Comma separated list of workflow task group IDs + in: query + name: ids + schema: + example: prs_giVNQcTL,prs_t6m99v1 + type: string + - description: The workflow task schema ID of tasks in this task group + in: query + name: schemaId + schema: + example: prstsch_KnR9iVum,prstsch_nJ34lw9y + type: string + - description: A folder ID + in: query + name: folderId + schema: + example: lib_bf0636 + type: string + - description: A project ID + in: query + name: projectId + schema: + example: src_NetYd96a + type: string + - description: A comma separated list entry IDs + in: query + name: mentionedIn + schema: + example: etr_30ad79,etr_d00c97 + type: string + - description: Comma separated list of user IDs or "null" + in: query + name: watcherIds + schema: + example: ent_a0SApq3z,ent_asdf72354,null + minLength: 1 + type: string + - description: 'Comma separated list of workflow execution types. Acceptable + execution types are "DIRECT" and "ENTRY" + + ' + in: query + name: executionTypes + schema: + example: ENTRY,DIRECT + minLength: 1 + type: string + - description: Comma separated list of team IDs or "null" + in: query + name: responsibleTeamIds + schema: + example: team_Thepp2c7,team_QqHMbfqK,null + minLength: 1 + type: string + - description: Commas separated list of Status ids. Maximum of 100. Returns + workflows where at least one task is of one of the provided statuses. + in: query + name: statusIds.anyOf + schema: + example: wfts_VFvwv7JV,wfts_wQzUCsW0 + minLength: 1 + type: string + - description: Commas separated list of Status ids. Returns workflows where + none of the tasks are of any of the provided statuses. + in: query + name: statusIds.noneOf + schema: + example: wfts_VFvwv7JV,wfts_wQzUCsW0 + minLength: 1 + type: string + - description: Commas separated list of Status ids. Returns workflows where + all of the tasks are of one of the provided statuses. + in: query + name: statusIds.only + schema: + example: wfts_VFvwv7JV,wfts_wQzUCsW0 + minLength: 1 + type: string + - description: The name of the workflow task group + in: query + name: name + schema: + example: Plasmid Transformation + type: string + - description: Part of the name of the workflow task group + in: query + name: nameIncludes + schema: + example: Plasmid + type: string + - description: Comma separated list of user IDs. + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - example: Im5ldyB0ZXN0Ig== + in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Comma-separated list of Workflow Display IDs. + in: query + name: displayIds + schema: + example: VPR001,VPR002 + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived workflow task + groups. Use "ANY_ARCHIVED" to filter for archived workflow task groups regardless + of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived + and unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroupsPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: List workflow task groups + tags: + - Workflow Task Groups + post: + description: Create a new workflow task group. If no name is specified, uses + the workflow schema name and a unique incrementor separated by a single whitespace. + operationId: createWorkflowTaskGroup + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroupCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroup' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Create a new workflow task group + tags: + - Workflow Task Groups + /workflow-task-groups/{workflow_task_group_id}: + get: + description: Get a workflow task group + operationId: getWorkflowTaskGroup + parameters: + - description: The ID of the workflow task group + in: path + name: workflow_task_group_id + required: true + schema: + example: prs_giVNQcTL + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroup' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Get a workflow task group + tags: + - Workflow Task Groups + patch: + description: Update a workflow task group + operationId: updateWorkflowTaskGroup + parameters: + - description: The ID of the workflow task group + in: path + name: workflow_task_group_id + required: true + schema: + example: prs_giVNQcTL + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroupUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroup' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Update a workflow task group. If updating the folder ID, other attributes + cannot be updated at the same time. + tags: + - Workflow Task Groups + /workflow-task-groups:archive: + post: + description: Archive one or more workflows + operationId: archiveWorkflowTaskGroups + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroupsArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroupsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Archive one or more workflows + tags: + - Workflow Task Groups + /workflow-task-groups:unarchive: + post: + description: Unarchive one or more workflows + operationId: unarchiveWorkflowTaskGroups + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroupsUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskGroupsArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Unarchive one or more workflows + tags: + - Workflow Task Groups + /workflow-task-schemas: + get: + description: List workflow task schemas + operationId: listWorkflowTaskSchemas + parameters: + - in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskSchemasPaginatedList' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: List workflow task schemas + tags: + - Schemas + /workflow-task-schemas/{schema_id}: + get: + description: Get a workflow task schema + operationId: getWorkflowTaskSchema + parameters: + - description: The workflow task schema ID + in: path + name: schema_id + required: true + schema: + example: prstsch_KnR9iVum + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskSchema' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Get a workflow task schema + tags: + - Schemas + /workflow-tasks: + get: + description: List workflow tasks + operationId: listWorkflowTasks + parameters: + - description: Comma separated list of workflow task IDs + in: query + name: ids + schema: + example: wftask_OnnsW08k,wftask_4ejSW7en + type: string + - description: Comma separated list of workflow IDs + in: query + name: workflowTaskGroupIds + schema: + example: prs_giVNQcTL,prs_t6m99v1 + minLength: 1 + type: string + - description: The ID of the workflow task schema of the workflow task + in: query + name: schemaId + schema: + example: prstsch_KnR9iVum + type: string + - description: Comma separated list of workflow task status ids + in: query + name: statusIds + schema: + example: wfts_wQzUCsW0,wfts_VFvwv7JV + minLength: 1 + type: string + - description: Comma separated list of user ids or "null" + in: query + name: assigneeIds + schema: + example: ent_a0SApq3z,null + minLength: 1 + type: string + - description: Comma separated list of user IDs or "null" + in: query + name: watcherIds + schema: + example: ent_a0SApq3z,ent_asdf72354,null + minLength: 1 + type: string + - description: Comma separated list of team IDs or "null" + in: query + name: responsibleTeamIds + schema: + example: team_Thepp2c7,team_QqHMbfqK,null + minLength: 1 + type: string + - description: Comma separated list of entry IDs + in: query + name: executionOriginIds + schema: + example: etr_d00c97,etr_30ad79 + minLength: 1 + type: string + - description: 'Comma separated list of workflow execution types. Acceptable + execution types are "DIRECT" and "ENTRY" + + ' + in: query + name: executionTypes + schema: + example: ENTRY,DIRECT + minLength: 1 + type: string + - description: 'Comma separated list of bioentity or storable IDs. Maximum of + 100. Returns workflow tasks where the task''s schema fields reference at + least one of the provided items. + + ' + in: query + name: linkedItemIds.anyOf + schema: + example: bfi_ed1ef7,con_1c76c9 + type: string + - description: 'Comma separated list of bioentity or storable IDs. Returns workflow + tasks where the task''s schema fields reference all of the provided items. + + ' + in: query + name: linkedItemIds.allOf + schema: + example: bfi_ed1ef7,con_1c76c9 + type: string + - description: 'Comma separated list of bioentity or storable IDs. Returns workflow + tasks where the task''s schema fields do not reference any of the provided + items. + + ' + in: query + name: linkedItemIds.noneOf + schema: + example: bfi_ed1ef7,con_1c76c9 + type: string + - description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < + or >). If any schemaField filters are present, the schemaId param must also + be present. Note that all operators must be separated from any values by + a single space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + - description: The name of the workflow task + in: query + name: name + schema: + example: PR-1 + type: string + - description: Part of the name of the workflow task + in: query + name: nameIncludes + schema: + example: PR + type: string + - description: Comma separated list of user IDs. + in: query + name: creatorIds + schema: + example: ent_a0SApq3z + type: string + - description: 'The date on which the task was scheduled to be executed. Returns + tasks which are scheduled on the provided date. If "null" is provided returns + tasks which are unshceduled. + + ' + in: query + name: scheduledOn + schema: + anyOf: + - enum: + - 'null' + type: string + - example: '2020-01-01' + format: date + type: string + - description: 'The date on which the task was scheduled to be executed. Returns + tasks which are scheduled before the provided date. + + ' + in: query + name: scheduledOn.lt + schema: + example: '2020-01-01' + format: date + type: string + - description: 'The date on which the task was scheduled to be executed. Returns + tasks which are scheduled before or on the provided date. + + ' + in: query + name: scheduledOn.lte + schema: + example: '2020-01-01' + format: date + type: string + - description: 'The date on which the task was scheduled to be executed. Returns + tasks which are scheduled on or after the provided date. + + ' + in: query + name: scheduledOn.gte + schema: + example: '2020-01-01' + format: date + type: string + - description: 'The date on which the task was scheduled to be executed. Returns + tasks which are scheduled after the provided date. + + ' + in: query + name: scheduledOn.gt + schema: + example: '2020-01-01' + format: date + type: string + - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + - example: Im5ldyB0ZXN0Ig== + in: query + name: nextToken + schema: + type: string + - in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + nullable: false + type: integer + - description: Comma-separated list of Workflow Task Display IDs. + in: query + name: displayIds + schema: + example: ANG1-T1,ANG1-T2 + type: string + - description: 'Archive reason. Restricts items to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived workflow tasks. + Use "ANY_ARCHIVED" to filter for archived workflow tasks regardless of reason. + Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and + unarchived. + + ' + examples: + 1_not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + 2_archived_reason: + summary: Includes items archived for a specific reason. + value: Retired + 3_any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + 4_any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTasksPaginatedList' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: List workflow tasks + tags: + - Workflow Tasks + post: + description: Create a new workflow task + operationId: createWorkflowTask + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskCreate' + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTask' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Create a new workflow task + tags: + - Workflow Tasks + /workflow-tasks/{workflow_task_id}: + get: + description: Get a workflow task + operationId: getWorkflowTask + parameters: + - description: The ID of the workflow task + in: path + name: workflow_task_id + required: true + schema: + example: wftask_OnnsW08k + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTask' + description: OK + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Get a workflow task + tags: + - Workflow Tasks + patch: + description: Update a workflow task + operationId: updateWorkflowTask + parameters: + - description: The ID of the workflow task + in: path + name: workflow_task_id + required: true + schema: + example: wftask_OnnsW08k + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTaskUpdate' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTask' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: Update a workflow task + tags: + - Workflow Tasks + /workflow-tasks/{workflow_task_id}:copy: + post: + description: Creates a new workflow task based on the provided task + operationId: copyWorkflowTask + parameters: + - description: The ID of the workflow task + in: path + name: workflow_task_id + required: true + schema: + example: wftask_OnnsW08k + type: string + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTask' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundError' + description: Not found + summary: 'Creates a new workflow task with the same fields and assignee as the + provided task and creates a relationship between the two tasks + + ' + tags: + - Workflow Tasks + /workflow-tasks:archive: + post: + description: Archive one or more workflow tasks + operationId: archiveWorkflowTasks + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTasksArchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTasksArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Archive one or more workflow tasks + tags: + - Workflow Tasks + /workflow-tasks:bulk-copy: + post: + description: Bulk creates new workflow tasks based on the provided tasks + operationId: bulkCopyWorkflowTasks + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTasksBulkCopyRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: 'Bulk creates new workflow tasks where each new task has the same fields + and assignee as one of the provided tasks and creates a relationship between + the provided task and its copy + + ' + tags: + - Workflow Tasks + /workflow-tasks:bulk-create: + post: + description: Create one or more workflow tasks + operationId: bulkCreateWorkflowTasks + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTasksBulkCreateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Create one or more workflow tasks + tags: + - Workflow Tasks + /workflow-tasks:bulk-update: + post: + description: Update one or more workflow tasks + operationId: bulkUpdateWorkflowTasks + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTasksBulkUpdateRequest' + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncTaskLink' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Update one or more workflow task + tags: + - Workflow Tasks + /workflow-tasks:unarchive: + post: + description: Unarchive one or more workflow tasks + operationId: unarchiveWorkflowTasks + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTasksUnarchive' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowTasksArchivalChange' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestError' + description: Bad request + summary: Unarchive one or more workflow tasks + tags: + - Workflow Tasks + /workflows: + get: + deprecated: true + description: List workflows + operationId: listWorkflows + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowList' + description: OK + summary: List workflows + tags: + - Legacy Workflows (deprecated) + /workflows/{workflow_id}: + patch: + deprecated: true + description: Update workflow metadata + operationId: UpdateWorkflowMetadata + parameters: + - description: ID of the workflow to update + in: path + name: workflow_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowPatch' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LegacyWorkflow' + description: OK + summary: Update workflow + tags: + - Legacy Workflows (deprecated) + /workflows/{workflow_id}/workflow-stages: + get: + deprecated: true + description: List workflow stages + operationId: listWorkflowStages + parameters: + - description: ID of the workflow to list stages for + in: path + name: workflow_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowStageList' + description: OK + summary: List workflow stages + tags: + - Legacy Workflows (deprecated) +components: + examples: + AIGGenerateInputTaskResponse: + value: + response: + apiURL: https://benchling.com/api/v2/automation-input-generators/aif_C3wGA9HF + assayRunId: 588aca02-1a20-4b94-a40f-b3f3a0081749 + automationFileConfig: + name: MyInstrumentName + file: + id: c33fe52d-fe6a-4c98-adcd-211bdf6778f7 + mimeType: text/csv + name: MyInstrumentInputFile.csv + type: RAW_FILE + uploadStatus: IN_PROGRESS + id: aif_C3wGA9HF + status: SUCCEEDED + status: SUCCEEDED + AOPProcessOutputTaskResponse: + value: + response: + apiURL: https://benchling.com/api/v2/automation-output-processors/aop_C3wGA9HF + archiveRecord: + reason: Made in error + assayRunId: 588aca02-1a20-4b94-a40f-b3f3a0081749 + automationFileConfig: + name: MyInstrumentName + file: + id: c33fe52d-fe6a-4c98-adcd-211bdf6778f7 + mimeType: text/csv + name: MyInstrumentInputFile.csv + type: RAW_FILE + uploadStatus: IN_PROGRESS + id: aop_C3wGA9HF + status: SUCCEEDED + status: SUCCEEDED + AaSequencesFindMatchingRegionTaskResponse: + value: + response: + aaSequenceMatches: + - matchingAASequenceIds: + - prtn_TIIi7lto + - prtn_0qTaIIDE + targetAASequenceId: prtn_W1Qh8teE + status: SUCCEEDED + BulkOperateAaSequencesTaskResponse: + value: + response: + aaSequences: + - aliases: + - Example alias + aminoAcids: IKTATARRELAETSWTGDRLWGFSDNWAPALRRPSPSALGK + annotations: + - color: '#85DAE9' + end: 10 + id: prtnann_o7zMPG0P + name: Example annotation + start: 0 + apiURL: https://benchling.com/api/v2/aa-sequences/prtn_7nMBOMm0 + archiveRecord: + reason: Made in error + createdAt: '2021-07-14T07:34:25.156Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + folderId: lib_mrZWMrft + id: prtn_ObbdtGhC + length: 0 + modifiedAt: '2021-07-14T07:34:25.157Z' + name: Example AA Sequence + registrationOrigin: + originEntryId: etr_3wievUIJ + registeredAt: '2021-07-14T07:34:25.157Z' + registryId: src_NetYd96a + schema: + id: ts_DaiFhsNA + name: Example Schema + webURL: https://benchling.com/benchling/f/lib_55UxcIps-registry/prtn_7nMBOMm0-kedchain11/edit" + status: SUCCEEDED + BulkOperateContainersTaskResponse: + value: + response: + containers: + - archiveRecord: + reason: Made in error + barcode: 201006-005 + checkoutRecord: + assignee: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + comment: Example comment + modifiedAt: '2021-07-14T12:27:27.917Z' + status: AVAILABLE + contents: + - batch: + archiveRecord: + reason: Made in error + createdAt: '2021-07-14T12:27:27.917Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + entity: + aliases: + - Example alias + annotations: [] + apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk + archiveRecord: + reason: Made in error + bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG + createdAt: '2021-07-14T12:27:27.917Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + folderId: lib_hBHqKbzE + id: seq_bhuDUw9D + isCircular: true + length: 0 + modifiedAt: '2021-07-14T12:27:27.917Z' + name: Example entity + primers: [] + registrationOrigin: + originEntryId: etr_3wievUIJ + registeredAt: '2021-07-14T07:34:25.157Z' + registryId: src_NetYd96a + schema: + id: ts_DaiFhsNA + name: Example Schema + translations: [] + webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-seqs/seq_bhuDUw9D-example-entity/edit + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + id: bat_UOIr8IjL + modifiedAt: '2021-07-14T12:27:27.917Z' + name: Example Batch + schema: + id: ts_DaiFhsNA + name: Example Schema + webURL: https://benchling.com/benchling/f/lib_55UxcIps-registry/bfi_YtegMKkT-batch-test/edit + concentration: + units: uM + value: 5 + entity: + aliases: + - Example alias + annotations: [] + apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk + archiveRecord: + reason: Made in error + bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG + createdAt: '2021-07-14T12:27:27.917Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + folderId: lib_mrZWMrft + id: seq_bhuDUw9D + isCircular: true + length: 0 + modifiedAt: '2021-07-14T12:27:27.917Z' + name: Example entity + primers: [] + registrationOrigin: + originEntryId: etr_3wievUIJ + registeredAt: '2021-07-14T07:34:25.157Z' + registryId: src_NetYd96a + schema: + id: ts_DaiFhsNA + name: Example Schema + translations: [] + webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-seqs/seq_bhuDUw9D-example-entity/edit + createdAt": '2021-07-14T12:27:27.917Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + id: con_ZBL9QQWD + modifiedAt: '2021-07-14T12:27:27.917Z' + name: Example container + parentStorageId: loc_MmtNUQIA + parentStorageSchema: + id: locsch_ToRk7Elm + name: Building + projectId: src_1m4443Ek + quantity: + units: mL + value: 10 + schema: + id: ts_DaiFhsNA + name: Example Schema + volume: + units: mL + value: 10 + webURL: https://benchling.com/samples/containers/con_FzQ1stz9 + status: SUCCEEDED + BulkOperateCustomEntitiesTaskResponse: + value: + response: + customEntities: + - aliases: + - sBN000 + apiURL: https://benchling.com/api/v2/custom-entities/bfi_xCUXNVyG + archiveRecord: + reason: Made in error + authors: + - handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + createdAt: '2021-07-14T07:34:25.156Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + folderId: lib_mrZWMrft + id: prtn_ObbdtGhC + modifiedAt: '2021-07-14T07:34:25.157Z' + name: sBN000 + registrationOrigin: + originEntryId: etr_3wievUIJ + registeredAt: '2021-07-14T07:34:25.157Z' + registryId: src_NetYd96a + schema: + id: ts_DaiFhsNA + name: Example Schema + webURL: https://benchling.com/benchling/f/R8KcsjhW-academic-registry/bfi-xCUXNVyG-sbn000/edit + status: SUCCEEDED + BulkOperateDnaOligosTaskResponse: + value: + response: + dnaOligos: + - aliases: + - Example alias + apiURL: https://benchling.com/api/v2/dna-oligos/seq_bhuDUw9D + archiveRecord: + reason: Made in error + bases: ACTTTTT + createdAt: '2021-07-13T21:00:49.245Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + folderId: lib_mrZWMrft + id: seq_bhuDUw9D + length: 0 + modifiedAt: '2021-07-13T21:00:49.245Z' + name: Example DNA Oligo + nucleotideType: DNA + registrationOrigin: + originEntryId: etr_3wievUIJ + registeredAt: '2021-07-13T21:00:49.245Z' + registryId: src_NetYd96a + schema: + id: ts_DaiFhsNA + name: Example Schema + webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-oligos/seq_bhuDUw9D-test-oligo-abc/edit + status: SUCCEEDED + BulkOperateDnaSequencesTaskResponse: + value: + response: + dnaSequences: + - aliases: + - Example alias + annotations: + - color: '#85DAE9' + end: 10 + name: Example annotation + start: 0 + strand: 0 + type: Example annotation type + apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk + archiveRecord: + reason: Made in error + bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG + createdAt: '2021-07-13T13:16:44.315Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + - additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + folderId: lib_mrZWMrft + id: seq_asQya4lk + isCircular: true + length: 0 + modifiedAt: '2021-07-13T13:16:44.315Z' + name: Example sequence + primers: + - bases: CATCG + bindPosition: 0 + color: '#F58A5E' + end: 5 + name: Example primer + oligoId: seq_HJyE332n + overhangLength: 0 + start: 0 + strand: -1 + registrationOrigin: + originEntryId: ent_a0SApq3z + registeredAt: '2021-07-13T13:16:44.315Z' + registryId: src_ae40j3TZ + schema: + id: ts_n4l12nf0 + name: Example schema + translations: + - aminoAcids: KK + end: 0 + regions: + - end: 0 + start: 0 + start: 0 + strand: 1 + webURL: https://benchling.com/benchling/f/lib_zky83cLg-computed-fields/seq_mnY8u4bs-chain-1/edit + status: SUCCEEDED + BulkOperateFeaturesTaskResponse: + value: + response: + features: + - color: '#75C6A9' + featureLibraryId: featlib_cWYhFmxq + featureType: promoter + id: feat_XhYjGBpFoZ4wVary + matchType: nucleotide + name: lacZalpha promoter + pattern: ggagtactgtcctccgagcggagtactgtcctccgagcggagtactgtcctccgagcggagtactgtcctccgagcggagttctgtcctccga + status: SUCCEEDED + BulkOperateRnaOligosTaskResponse: + value: + response: + rnaOligos: + - aliases: + - Example alias + apiURL: https://benchling.com/api/v2/rna-oligos/seq_bhuDUw9 + archiveRecord: + reason: Made in error + bases: ACUUUUU + createdAt: '2021-07-13T21:00:49.245Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + folderId: lib_mrZWMrft + id: seq_bhuDUw9D + length: 0 + modifiedAt: '2021-07-13T21:00:49.245Z' + name: Example RNA Oligo + nucleotideType: DNA + registrationOrigin: + originEntryId: etr_3wievUIJ + registeredAt: '2021-07-13T21:00:49.245Z' + registryId: src_NetYd96a + schema: + id: ts_DaiFhsNA + name: Example Schema + webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-oligos/seq_bhuDUw9D-test-oligo-abc/edit + status: SUCCEEDED + BulkOperateRnaSequencesTaskResponse: + value: + response: + rnaSequences: + - aliases: + - Example alias + annotations: + - color: '#85DAE9' + end: 10 + name: Example annotation + start: 0 + strand: 0 + type: Example annotation type + apiURL: https://benchling.com/api/v2/rna-sequences/seq_asQya4lk + archiveRecord: + reason: Made in error + bases: GUAGCAAAGANUAGUAGCCAGCUGUGAUAAAUGUCAGCUAAAAGGGGAAGCCAUG + createdAt: '2021-07-13T13:16:44.315Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + - additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: rna_sequence_link + value: seq_jdf8BV24 + folderId: lib_mrZWMrft + id: seq_asQya4lk + isCircular: false + length: 55 + modifiedAt: '2021-07-13T13:16:44.315Z' + name: Example rna sequence + primers: + - bases: CAUCG + bindPosition: 0 + color: '#F58A5E' + end: 5 + name: Example primer + oligoId: seq_HJyE332n + overhangLength: 0 + start: 0 + strand: 1 + registrationOrigin: + originEntryId: ent_a0SApq3z + registeredAt: '2021-07-13T13:16:44.315Z' + registryId: src_ae40j3TZ + schema: + id: ts_n4l12nf0 + name: Example schema + translations: + - aminoAcids: KK + end: 0 + regions: + - end: 0 + start: 0 + start: 0 + strand: 1 + webURL: https://benchling.com/benchling/f/lib_zky83cLg-example/seq_mnY8u4bs-chain-1/edit + status: SUCCEEDED + BulkTaskFailed: + value: + errors: + index: 0 + message: Invalid field value + message: Your request was invalid. + status: FAILED + DnaCreateAlignmentTaskResponse: + value: + response: + alignedSequences: + - bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG + dnaSequenceId: seq_MYmsnS1u + name: Gene001 + sequenceId: seq_MYmsnS1u + trimEnd: 60 + trimStart: 0 + apiURL: https://benchling.com/api/v2/dna-alignments/seqanl_6ZVdX98t + createdAt: '2021-07-13T12:59:51.903Z' + id: seqanl_6ZVdX98t + modifiedAt: '2021-07-13T12:59:51.903Z' + name: Example alignment + webURL: https://benchling.com/benchling/f/lib_Fy2C0HOl-example/seq_UpzwvUug-consensus/edit?alignment=seqanl_6ZVdX98t + status: SUCCEEDED + EmptySuccessTaskResponse: + value: + response: {} + status: SUCCEEDED + ExportsTaskResponse: + value: + response: + downloadURL: https://benchling-temp.s3.amazonaws.com/benchling-temp/RShkPPS0dj1jsn1LKnbpl7mz421kne52Ndp8UJnB/capillary/export_items/etr_HzOyiNj8.zip?response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAVNBDYFYCFXORLN46%2F20210714%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210714T144850Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEB4aCXVzLWVhc3QtMSJSDNU1IHZ81FpESNaiQLue6l%2Bjz04FWk7fNUhMxiEbLYCt5LDNAiEAhNbTM9EdeAuxlj4svhS01NmwRJZTyF3Bjzr%2BhK22ACcq%2BQMIFxAAGrebNzE1ODk2NTYwNjgiDHKa3fq33iZwsM1KdCrWA8dnOWQ1%2FXsYrrbzk7cCID6qPA%2F3MQH%2F7FaQoMCUvXj06aeH6RhMD5WZyqoaISBr%2FP4FUua%2B%2FFSdAW8UoFpur0IvkSFTi472CA7hfGmgcjspBdsTCrOA8R1ofgscYwOvGcFreenw5l1VhXZDSeXLC9yLJXPBWFzeup8uRyNXQFIHFcmNHvsLiLMUTY0S5eEBc5Zn9SAaWOcm4OGjAurpUJqpTTPOAu5VZOT2d1K2XMy%2FoH7x01Xf0MRIEd0yfyOLK60dhngbaey39vw1wMfPOm3JBvOyVdhGg1WR2sRF1RG10t7dI7iIO2Y4Z3Yb9w%2FdQhlafF8Ss45YtRRv2RRtzfpwoWE846At1pWvhP0tA0I1bhtehd6Upk%2F0iLehO5JWUiYqz1oMfefdZa30JAS9UNdKNqqsX8%2FjhAR9Ff09xKzOD%2FXzqeZwTT0EWtG6hqerKX9%2B%2BULfjB%2F44t3FjL5pRXrxRDIy0uZVI3qhjoRot5Nf7Lm9edccJJ%2BaujnHOMd96mxEcB584VO6eb63I99geVmNO%2FGpuuBvMxf2oV4AN83BEKipJEM3K4OYFI5VASfcTx2V3nMILj8FMKATYEWPYns0KxMuEpQ0Nf7dSSEiFKIfQ1px5iEvMKfPu4cGOqUBUaO0C2gNEeOUs8Fy4ci2hsLw4MW7jVnT5jLEQd2BB44hZzqkMvmeOYeiTxQB%2FgBpqAC%2FfZRF2Am3nCyLaADQYGpRhpg0QFRkBH8ukSxqOx%2BwLvLAV537t5AfFLcqjar4C9a0DXO9hgWfF3yY6HISlZ4NE9VGXei1wqy7i5ZDcbP1%2FlfWqH6LspK2rMJGgAlJthf7De%2BlQ5yJmYW%2FH7KG5eC%2Fu2MV&X-Amz-Signature=b08cad199962bcdc6d0b4b5d2409e90b67a4484ae554ce843f537d1d471ea70d + status: SUCCEEDED + TaskFailed: + value: + message: Alignment not found. + status: FAILED + TaskRunning: + value: + status: RUNNING + TransfersTaskResponse: + value: + response: + destinationContainers: + - archiveRecord: + reason: Made in error + barcode: 201006-005 + checkoutRecord: + assignee: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + comment: Example comment + modifiedAt: '2021-07-14T12:27:27.917Z' + status: AVAILABLE + contents: + - batch: + archiveRecord: + reason: Made in error + createdAt: '2021-07-14T12:27:27.917Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + entity: + aliases: + - Example alias + annotations: [] + apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk + archiveRecord: + reason: Made in error + bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG + createdAt: '2021-07-14T12:27:27.917Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + folderId: lib_hBHqKbzE + id: seq_bhuDUw9D + isCircular: true + length: 0 + modifiedAt: '2021-07-14T12:27:27.917Z' + name: Example entity + primers: [] + registrationOrigin: + originEntryId: etr_3wievUIJ + registeredAt: '2021-07-14T07:34:25.157Z' + registryId: src_NetYd96a + schema: + id: ts_DaiFhsNA + name: Example Schema + translations: [] + webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-seqs/seq_bhuDUw9D-example-entity/edit + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + id: bat_UOIr8IjL + modifiedAt: '2021-07-14T12:27:27.917Z' + name: Example Batch + schema: + id: ts_DaiFhsNA + name: Example Schema + webURL: https://benchling.com/benchling/f/lib_55UxcIps-registry/bfi_YtegMKkT-batch-test/edit + concentration: + units: uM + value: 5 + entity: + aliases: + - Example alias + annotations: [] + apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk + archiveRecord: + reason: Made in error + bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG + createdAt: '2021-07-14T12:27:27.917Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + customFields: + Legacy ID: + value: STR100 + entityRegistryId: sBN000 + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + folderId: lib_mrZWMrft + id: seq_bhuDUw9D + isCircular: true + length: 0 + modifiedAt: '2021-07-14T12:27:27.917Z' + name: Example entity + primers: [] + registrationOrigin: + originEntryId: etr_3wievUIJ + registeredAt: '2021-07-14T07:34:25.157Z' + registryId: src_NetYd96a + schema: + id: ts_DaiFhsNA + name: Example Schema + translations: [] + webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-seqs/seq_bhuDUw9D-example-entity/edit + createdAt": '2021-07-14T12:27:27.917Z' + creator: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + fields: + additionalProp1: + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + id: con_ZBL9QQWD + modifiedAt: '2021-07-14T12:27:27.917Z' + name: Example container + parentStorageId: loc_MmtNUQIA + parentStorageSchema: + id: locsch_ToRk7Elm + name: Building + projectId: src_1m4443Ek + quantity: + units: mL + value: 10 + schema: + id: ts_DaiFhsNA + name: Example Schema + volume: + units: mL + value: 10 + webURL: https://benchling.com/samples/containers/con_FzQ1stz9 + status: SUCCEEDED + parameters: + archiveReasonParameter: + description: 'Archive reason. Restricts results to those with the specified + archive reason. Use "NOT_ARCHIVED" to filter for unarchived items. Use "ANY_ARCHIVED" + to filter for archived items regardless of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" + to return items for both archived and unarchived. + + ' + examples: + any_archived: + summary: Includes items archived for any reason. + value: ANY_ARCHIVED + any_archived_or_not_archived: + summary: Includes both archived and unarchived items. + value: ANY_ARCHIVED_OR_NOT_ARCHIVED + arhived_reason: + summary: Includes items archived for a specific reason. + value: Retired + not_archived: + summary: Only include unarchived items (default). + value: NOT_ARCHIVED + in: query + name: archiveReason + schema: + type: string + emptyContainersGtParameter: + description: "Only return grids that have greater-than the specified number\ + \ of empty containers\n (containers without contents).\n" + in: query + name: emptyContainers.gt + schema: + type: integer + emptyContainersGteParameter: + description: "Only return grids that have greater-than or equal-to the specified\ + \ number of\n empty containers (containers without contents).\n" + in: query + name: emptyContainers.gte + schema: + type: integer + emptyContainersLtParameter: + description: "Only return grids that have less-than the specified number of\ + \ empty containers\n (containers without contents).\n" + in: query + name: emptyContainers.lt + schema: + type: integer + emptyContainersLteParameter: + description: "Only return grids that have less-than or equal-to the specified\ + \ number of\n empty containers (containers without contents).\n" + in: query + name: emptyContainers.lte + schema: + type: integer + emptyContainersParameter: + description: 'Only return grids that have the specified number of empty containers + (containers without contents). + + ' + in: query + name: emptyContainers + schema: + type: integer + emptyPositionsGtParameter: + description: 'Only return grids that have greater-than the specified number + of empty positions. + + ' + in: query + name: emptyPositions.gt + schema: + type: integer + emptyPositionsGteParameter: + description: 'Only return grids that have greater-than or equal-to the specified + number of empty positions. + + ' + in: query + name: emptyPositions.gte + schema: + type: integer + emptyPositionsLtParameter: + description: 'Only return grids that have less-than the specified number of + empty positions. + + ' + in: query + name: emptyPositions.lt + schema: + type: integer + emptyPositionsLteParameter: + description: 'Only return grids that have less-than or equal-to the specified + number of empty positions. + + ' + in: query + name: emptyPositions.lte + schema: + type: integer + emptyPositionsParameter: + description: 'Only return grids that have the specified number of empty positions + + ' + in: query + name: emptyPositions + schema: + type: integer + modifiedAtParameter: + description: 'Datetime, in RFC 3339 format. Supports the > and < operators. + Time zone defaults to UTC. Restricts results to those modified in the specified + range. e.g. > 2017-04-30. Date ranges can be specified with the following + nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' + full-rfc-3339-format: + summary: Filter for modified models using the full RFC 3339 format + value: '> 2020-12-31T21:07:14-05:00' + greater-than-example: + summary: Filter for all models modified after a certain date + value: '> 2022-03-01' + in: query + name: modifiedAt + schema: + type: string + nextTokenParameter: + description: Token for pagination + in: query + name: nextToken + schema: + type: string + pageSizeParameter: + description: Number of results to return. Defaults to 50, maximum of 100. + in: query + name: pageSize + schema: + default: 50 + maximum: 100 + minimum: 0 + type: integer + schemaFieldsParameter: + description: 'Filter based on schema field value (not display value). Restricts + results to those with a field whose value matches the filter. For Integer, + Float, and Date type fields, supports the >= and <= operators (but not < or + >). If any schemaField filters are present, the schemaId param must also be + present. Note that all operators must be separated from any values by a single + space. + + ' + in: query + name: schemaFields + schema: + $ref: '#/components/schemas/SchemaFieldsQueryParam' + schemaIdParameter: + description: 'ID of a schema. Restricts results to those of the specified schema. + + ' + in: query + name: schemaId + schema: + type: string + schemas: + AIGGenerateInputAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + $ref: '#/components/schemas/AutomationInputGenerator' + type: object + type: object + AOPProcessOutputAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + $ref: '#/components/schemas/AutomationOutputProcessor' + type: object + type: object + AaAnnotation: + properties: + color: + type: string + end: + description: 0-based exclusive end index. The end of the AA sequence is + always represented as 0. + type: integer + id: + example: prtnann_o7zMPG0P + type: string + name: + maxLength: 255 + type: string + notes: + example: Cong et al Science. 2013 Jan 3. + maxLength: 10000 + type: string + start: + description: 0-based inclusive start index. + type: integer + type: + example: Site + maxLength: 255 + type: string + type: object + AaSequence: + properties: + aliases: + description: Array of aliases + items: + type: string + type: array + aminoAcids: + description: Amino acids of the AA sequence. + example: IKTATARRELAETSWTGDRLWGFSDNWAPALRRPSPSALGK + type: string + annotations: + description: Array of annotation objects on the AA sequence. + items: + $ref: '#/components/schemas/AaAnnotation' + type: array + apiURL: + description: The canonical url of the AA Sequence in the API. + example: https://benchling.com/api/v2/aa-sequences/prtn_7nMBOMm0 + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + createdAt: + description: DateTime the AA sequence was created. + format: date-time + readOnly: true + type: string + creator: + $ref: '#/components/schemas/UserSummary' + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: Custom fields set on the AA sequence. + entityRegistryId: + description: Registry ID of the AA sequence if registered. + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + folderId: + description: ID of the folder that contains the AA sequence. + nullable: true + type: string + id: + description: ID of the AA sequence. + example: prtn_ObbdtGhC + type: string + length: + description: Number of amino acids in the AA sequence. + type: integer + modifiedAt: + description: DateTime the AA sequence was last modified. + format: date-time + readOnly: true + type: string + name: + description: Name of the AA sequence. + type: string + registrationOrigin: + allOf: + - $ref: '#/components/schemas/RegistrationOrigin' + nullable: true + readOnly: true + registryId: + description: Registry the AA sequence is registered in. + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + webURL: + description: URL of the protein. + example: https://benchling.com/benchling/f/lib_55UxcIps-registry/prtn_7nMBOMm0-kedchain11/edit" + format: uri + readOnly: true + type: string + type: object + AaSequenceBaseRequest: + properties: + aliases: + description: Aliases to add to the AA sequence + items: + type: string + type: array + aminoAcids: + description: 'Amino acids for the AA sequence. + + ' + type: string + annotations: + description: 'Annotations to create on the AA sequence. + + ' + items: + $ref: '#/components/schemas/AaAnnotation' + type: array + authorIds: + description: IDs of users to set as the AA sequence's authors. + items: + type: string + type: array + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: 'Custom fields to add to the AA sequence. Every field should + have its name as a key, mapping to an object with information about the + value of the field. + + ' + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Fields to set on the AA sequence. Must correspond with the + schema''s field definitions. Every field should have its name as a key, + mapping to an object with information about the value of the field. + + ' + folderId: + description: 'ID of the folder containing the AA sequence. + + ' + type: string + name: + description: 'Name of the AA sequence. + + ' + type: string + schemaId: + description: 'ID of the AA sequence''s schema. + + ' + type: string + type: object + AaSequenceBaseRequestForCreate: + allOf: + - $ref: '#/components/schemas/AaSequenceBaseRequest' + - required: + - aminoAcids + - name + AaSequenceBulkCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/AaSequenceCreate' + AaSequenceBulkUpdate: + additionalProperties: false + allOf: + - properties: + id: + type: string + type: object + - $ref: '#/components/schemas/AaSequenceBaseRequest' + AaSequenceBulkUpsertRequest: + allOf: + - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' + - $ref: '#/components/schemas/AaSequenceBaseRequestForCreate' + - required: + - annotations + AaSequenceCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/AaSequenceBaseRequestForCreate' + - $ref: '#/components/schemas/CreateEntityIntoRegistry' + AaSequenceRequestRegistryFields: + properties: + entityRegistryId: + type: string + type: object + AaSequenceSummary: + properties: + entityType: + enum: + - aa_sequence + type: string + id: + example: prtn_ObbdtGhC + type: string + type: + deprecated: true + type: string + type: object + AaSequenceUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/AaSequenceBaseRequest' + - $ref: '#/components/schemas/AaSequenceRequestRegistryFields' + AaSequenceUpsert: + allOf: + - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' + - $ref: '#/components/schemas/AaSequenceBaseRequestForCreate' + - required: + - annotations + AaSequenceWithEntityType: + allOf: + - $ref: '#/components/schemas/AaSequence' + - properties: + entityType: + enum: + - aa_sequence + type: string + type: object + type: object + AaSequencesArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of AA sequences along with any IDs of + batches that were archived / unarchived. + + ' + properties: + aaSequenceIds: + items: + type: string + type: array + batchIds: + items: + type: string + type: array + type: object + AaSequencesArchive: + additionalProperties: false + description: 'The request body for archiving AA sequences. + + ' + properties: + aaSequenceIds: + items: + type: string + type: array + reason: + $ref: '#/components/schemas/EntityArchiveReason' + required: + - reason + - aaSequenceIds + type: object + AaSequencesBulkCreateRequest: + additionalProperties: false + properties: + aaSequences: + items: + $ref: '#/components/schemas/AaSequenceBulkCreate' + maxItems: 1000 + type: array + type: object + AaSequencesBulkGet: + properties: + aaSequences: + items: + $ref: '#/components/schemas/AaSequence' + type: array + type: object + AaSequencesBulkUpdateRequest: + additionalProperties: false + properties: + aaSequences: + items: + $ref: '#/components/schemas/AaSequenceBulkUpdate' + type: array + type: object + AaSequencesBulkUpsertRequest: + additionalProperties: false + maxItems: 1000 + properties: + aaSequences: + items: + $ref: '#/components/schemas/AaSequenceBulkUpsertRequest' + type: array + required: + - aaSequences + type: object + AaSequencesFindMatchingRegion: + additionalProperties: false + properties: + registryId: + description: An optional Registry ID to restrict the region search to + example: src_ae40j3TZ + type: string + schemaId: + description: Schema ID for the type of AA to match to the source sequence + example: ts_n4l12nf0 + type: string + targetAASequenceIds: + description: API IDs of the AA sequences which matching regions will be + found for + example: + - prtn_W7KgYydE + - prtn_g7SI2nih + items: + type: string + type: array + required: + - targetAASequenceIds + - schemaId + type: object + AaSequencesMatchBases: + additionalProperties: false + properties: + aminoAcids: + type: string + archiveReason: + default: NOT_ARCHIVED + enum: + - NOT_ARCHIVED + - Other + - Archived + type: string + nextToken: + type: string + pageSize: + default: 50 + maximum: 100 + minimum: 0 + type: integer + registryId: + description: 'ID of a registry. Restricts results to those registered in + this registry. Specifying `null` returns unregistered items. + + ' + nullable: true + type: string + sort: + default: modifiedAt:desc + enum: + - modifiedAt:asc + - modifiedAt:desc + - name:asc + - name:desc + type: string + required: + - aminoAcids + type: object + AaSequencesPaginatedList: + properties: + aaSequences: + items: + $ref: '#/components/schemas/AaSequence' + type: array + nextToken: + type: string + type: object + AaSequencesSearchBases: + additionalProperties: false + properties: + aminoAcids: + minLength: 3 + type: string + archiveReason: + default: NOT_ARCHIVED + enum: + - NOT_ARCHIVED + - Other + - Archived + type: string + nextToken: + type: string + pageSize: + default: 50 + maximum: 100 + minimum: 0 + type: integer + registryId: + description: 'ID of a registry. Restricts results to those registered in + this registry. Specifying `null` returns unregistered items. + + ' + nullable: true + type: string + sort: + default: modifiedAt:desc + enum: + - modifiedAt:asc + - modifiedAt:desc + - name:asc + - name:desc + type: string + required: + - aminoAcids + type: object + AaSequencesUnarchive: + additionalProperties: false + description: 'The request body for unarchiving AA sequences. + + ' + properties: + aaSequenceIds: + items: + type: string + type: array + required: + - aaSequenceIds + type: object + AlignedNucleotideSequence: + properties: + bases: + example: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG + type: string + dnaSequenceId: + deprecated: true + example: seq_MYmsnS1u + nullable: true + type: string + name: + example: Gene001 + type: string + pairwiseIdentity: + description: 'Fraction of bases between trimStart and trimEnd that match + the template bases. Only present for Template Alignments; Will be empty + for Consensus Alignments. + + ' + example: 0.505 + format: float + type: number + sequenceId: + example: seq_MYmsnS1u + nullable: true + type: string + trimEnd: + example: 60 + type: integer + trimStart: + example: 0 + type: integer + type: object + AlignedSequence: + properties: + bases: + example: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG + type: string + dnaSequenceId: + deprecated: true + example: seq_MYmsnS1u + nullable: true + type: string + name: + example: Gene001 + type: string + pairwiseIdentity: + description: 'Fraction of bases between trimStart and trimEnd that match + the template bases. Only present for Template Alignments; Will be empty + for Consensus Alignments. + + ' + example: 0.505 + format: float + type: number + sequenceId: + example: seq_MYmsnS1u + nullable: true + type: string + trimEnd: + example: 60 + type: integer + trimStart: + example: 0 + type: integer + type: object + AppCanvas: + allOf: + - $ref: '#/components/schemas/AppCanvasBase' + - properties: + app: + allOf: + - $ref: '#/components/schemas/AppSummary' + - nullable: false + id: + example: cnvs_Q4mPJ34a + type: string + type: object + AppCanvasBase: + allOf: + - $ref: '#/components/schemas/AppCanvasUiBlockList' + - properties: + archiveRecord: + nullable: true + properties: + reason: + $ref: '#/components/schemas/AppCanvasesArchiveReason' + type: object + data: + description: 'Additional data to associate with the canvas. Can be useful + for persisting data associated with the canvas but won''t be rendered + to the user. If specified, it must be valid JSON in string format less + than 5kb in total. + + ' + example: '{"key": "value"}' + nullable: true + type: string + enabled: + description: 'Overall control for whether the canvas is interactable or + not. If `false`, every block is disabled and will override the individual + block''s `enabled` property. If `true` or absent, the interactivity + status will defer to the block''s `enabled` property. + + ' + type: boolean + featureId: + description: Identifier of the feature defined in Benchling App Manifest + this canvas corresponds to. + nullable: false + type: string + resourceId: + description: Identifier of the resource object to attach canvas to. + nullable: false + type: string + sessionId: + description: 'Identifier of a session. If specified, app status messages + from the session will be reported in the canvas. + + ' + example: sesn_SwKtkgB5 + nullable: true + type: string + type: object + AppCanvasCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/AppCanvasCreateBase' + - properties: + appId: + description: 'Identifier of the app owning this canvas. For backwards + compatibility, this property will be temporarily optional until the + requisite time window for breaking changes in beta endpoints has passed. + + ' + nullable: false + type: string + type: object + - required: + - blocks + - featureId + - resourceId + - appId + type: object + AppCanvasCreateBase: + allOf: + - $ref: '#/components/schemas/AppCanvasCreateUiBlockList' + - $ref: '#/components/schemas/AppCanvasWriteBase' + type: object + AppCanvasCreateUiBlockList: + properties: + blocks: + items: + discriminator: + mapping: + BUTTON: '#/components/schemas/ButtonUiBlockCreate' + CHIP: '#/components/schemas/ChipUiBlockCreate' + DROPDOWN: '#/components/schemas/DropdownUiBlockCreate' + DROPDOWN_MULTIVALUE: '#/components/schemas/DropdownMultiValueUiBlockCreate' + MARKDOWN: '#/components/schemas/MarkdownUiBlockCreate' + SEARCH_INPUT: '#/components/schemas/SearchInputUiBlockCreate' + SEARCH_INPUT_MULTIVALUE: '#/components/schemas/SearchInputMultiValueUiBlockCreate' + SECTION: '#/components/schemas/SectionUiBlockCreate' + SELECTOR_INPUT: '#/components/schemas/SelectorInputUiBlockCreate' + SELECTOR_INPUT_MULTIVALUE: '#/components/schemas/SelectorInputMultiValueUiBlockCreate' + TABLE: '#/components/schemas/TableUiBlockCreate' + TEXT_INPUT: '#/components/schemas/TextInputUiBlockCreate' + propertyName: type + oneOf: + - $ref: '#/components/schemas/ButtonUiBlockCreate' + - $ref: '#/components/schemas/ChipUiBlockCreate' + - $ref: '#/components/schemas/DropdownUiBlockCreate' + - $ref: '#/components/schemas/DropdownMultiValueUiBlockCreate' + - $ref: '#/components/schemas/MarkdownUiBlockCreate' + - $ref: '#/components/schemas/SearchInputUiBlockCreate' + - $ref: '#/components/schemas/SearchInputMultiValueUiBlockCreate' + - $ref: '#/components/schemas/SectionUiBlockCreate' + - $ref: '#/components/schemas/SelectorInputUiBlockCreate' + - $ref: '#/components/schemas/SelectorInputMultiValueUiBlockCreate' + - $ref: '#/components/schemas/TextInputUiBlockCreate' + - $ref: '#/components/schemas/TableUiBlockCreate' + type: array + type: object + AppCanvasLeafNodeUiBlockList: + properties: + children: + items: + discriminator: + mapping: + BUTTON: '#/components/schemas/ButtonUiBlock' + CHIP: '#/components/schemas/ChipUiBlock' + DROPDOWN: '#/components/schemas/DropdownUiBlock' + DROPDOWN_MULTIVALUE: '#/components/schemas/DropdownMultiValueUiBlock' + MARKDOWN: '#/components/schemas/MarkdownUiBlock' + SEARCH_INPUT: '#/components/schemas/SearchInputUiBlock' + SEARCH_INPUT_MULTIVALUE: '#/components/schemas/SearchInputMultiValueUiBlock' + SELECTOR_INPUT: '#/components/schemas/SelectorInputUiBlock' + SELECTOR_INPUT_MULTIVALUE: '#/components/schemas/SelectorInputMultiValueUiBlock' + TEXT_INPUT: '#/components/schemas/TextInputUiBlock' + propertyName: type + oneOf: + - $ref: '#/components/schemas/ButtonUiBlock' + - $ref: '#/components/schemas/ChipUiBlock' + - $ref: '#/components/schemas/DropdownUiBlock' + - $ref: '#/components/schemas/DropdownMultiValueUiBlock' + - $ref: '#/components/schemas/MarkdownUiBlock' + - $ref: '#/components/schemas/SearchInputUiBlock' + - $ref: '#/components/schemas/SearchInputMultiValueUiBlock' + - $ref: '#/components/schemas/SelectorInputUiBlock' + - $ref: '#/components/schemas/SelectorInputMultiValueUiBlock' + - $ref: '#/components/schemas/TextInputUiBlock' + type: array + required: + - children + type: object + AppCanvasUiBlockList: + properties: + blocks: + items: + discriminator: + mapping: + BUTTON: '#/components/schemas/ButtonUiBlock' + CHIP: '#/components/schemas/ChipUiBlock' + DROPDOWN: '#/components/schemas/DropdownUiBlock' + DROPDOWN_MULTIVALUE: '#/components/schemas/DropdownMultiValueUiBlock' + MARKDOWN: '#/components/schemas/MarkdownUiBlock' + SEARCH_INPUT: '#/components/schemas/SearchInputUiBlock' + SEARCH_INPUT_MULTIVALUE: '#/components/schemas/SearchInputMultiValueUiBlock' + SECTION: '#/components/schemas/SectionUiBlock' + SELECTOR_INPUT: '#/components/schemas/SelectorInputUiBlock' + SELECTOR_INPUT_MULTIVALUE: '#/components/schemas/SelectorInputMultiValueUiBlock' + TABLE: '#/components/schemas/TableUiBlock' + TEXT_INPUT: '#/components/schemas/TextInputUiBlock' + propertyName: type + oneOf: + - $ref: '#/components/schemas/ButtonUiBlock' + - $ref: '#/components/schemas/ChipUiBlock' + - $ref: '#/components/schemas/DropdownUiBlock' + - $ref: '#/components/schemas/DropdownMultiValueUiBlock' + - $ref: '#/components/schemas/MarkdownUiBlock' + - $ref: '#/components/schemas/SearchInputUiBlock' + - $ref: '#/components/schemas/SearchInputMultiValueUiBlock' + - $ref: '#/components/schemas/SectionUiBlock' + - $ref: '#/components/schemas/SelectorInputUiBlock' + - $ref: '#/components/schemas/SelectorInputMultiValueUiBlock' + - $ref: '#/components/schemas/TextInputUiBlock' + - $ref: '#/components/schemas/TableUiBlock' + type: array + type: object + AppCanvasUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/AppCanvasUpdateBase' + type: object + AppCanvasUpdateBase: + allOf: + - $ref: '#/components/schemas/AppCanvasUpdateUiBlockList' + - $ref: '#/components/schemas/AppCanvasWriteBase' + type: object + AppCanvasUpdateUiBlockList: + properties: + blocks: + items: + discriminator: + mapping: + BUTTON: '#/components/schemas/ButtonUiBlockUpdate' + CHIP: '#/components/schemas/ChipUiBlockUpdate' + DROPDOWN: '#/components/schemas/DropdownUiBlockUpdate' + DROPDOWN_MULTIVALUE: '#/components/schemas/DropdownMultiValueUiBlockUpdate' + MARKDOWN: '#/components/schemas/MarkdownUiBlockUpdate' + SEARCH_INPUT: '#/components/schemas/SearchInputUiBlockUpdate' + SEARCH_INPUT_MULTIVALUE: '#/components/schemas/SearchInputMultiValueUiBlockUpdate' + SECTION: '#/components/schemas/SectionUiBlockUpdate' + SELECTOR_INPUT: '#/components/schemas/SelectorInputUiBlockUpdate' + SELECTOR_INPUT_MULTIVALUE: '#/components/schemas/SelectorInputMultiValueUiBlockUpdate' + TABLE: '#/components/schemas/TableUiBlockUpdate' + TEXT_INPUT: '#/components/schemas/TextInputUiBlockUpdate' + propertyName: type + oneOf: + - $ref: '#/components/schemas/ButtonUiBlockUpdate' + - $ref: '#/components/schemas/ChipUiBlockUpdate' + - $ref: '#/components/schemas/DropdownUiBlockUpdate' + - $ref: '#/components/schemas/DropdownMultiValueUiBlockUpdate' + - $ref: '#/components/schemas/MarkdownUiBlockUpdate' + - $ref: '#/components/schemas/SearchInputUiBlockUpdate' + - $ref: '#/components/schemas/SearchInputMultiValueUiBlockUpdate' + - $ref: '#/components/schemas/SectionUiBlockUpdate' + - $ref: '#/components/schemas/SelectorInputUiBlockUpdate' + - $ref: '#/components/schemas/SelectorInputMultiValueUiBlockUpdate' + - $ref: '#/components/schemas/TextInputUiBlockUpdate' + - $ref: '#/components/schemas/TableUiBlockUpdate' + type: array + type: object + AppCanvasWriteBase: + allOf: + - properties: + data: + description: 'Additional data to associate with the canvas. Can be useful + for persisting data associated with the canvas but won''t be rendered + to the user. If specified, it must be valid JSON in string format less + than 5kb in total. + + ' + example: '{"key": "value"}' + nullable: true + type: string + enabled: + description: 'Overall control for whether the canvas is interactable or + not. If `false`, every block is disabled and will override the individual + block''s `enabled` property. If `true` or absent, the interactivity + status will defer to the block''s `enabled` property. + + ' + type: boolean + featureId: + description: Identifier of the feature defined in Benchling App Manifest + this canvas corresponds to. + nullable: false + type: string + resourceId: + description: Identifier of the resource object to attach canvas to. + nullable: false + type: string + sessionId: + description: 'Identifier of a session. If specified, app status messages + from the session will be reported in the canvas. + + ' + example: sesn_SwKtkgB5 + nullable: true + type: string + type: object + AppCanvasesArchivalChange: + additionalProperties: false + description: 'IDs of all items that were archived or unarchived. This includes + the IDs of canvases that were archived / unarchived. + + ' + properties: + canvasIds: + example: + - cnvs_Q4mPJ34a + - cnvs_aNz2kJNv + items: + type: string + type: array + type: object + AppCanvasesArchive: + additionalProperties: false + properties: + canvasIds: + description: Array of canvas IDs + example: + - cnvs_Q4mPJ34a + - cnvs_aNz2kJNv + items: + type: string + type: array + reason: + $ref: '#/components/schemas/AppCanvasesArchiveReason' + required: + - reason + - canvasIds + type: object + AppCanvasesArchiveReason: + description: Reason that canvases are being archived. Actual reason enum varies + by tenant. + enum: + - Other + example: Other + type: string + AppCanvasesUnarchive: + additionalProperties: false + properties: + canvasIds: + description: Array of canvas IDs + example: + - cnvs_Q4mPJ34a + - cnvs_aNz2kJNv + items: + type: string + type: array + required: + - canvasIds + type: object + AppConfigItem: + discriminator: + mapping: + aa_sequence: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + array_element: '#/components/schemas/ArrayElementAppConfigItem' + boolean: '#/components/schemas/BooleanAppConfigItem' + box: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + box_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + container: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + container_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + custom_entity: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + date: '#/components/schemas/DateAppConfigItem' + datetime: '#/components/schemas/DatetimeAppConfigItem' + dna_oligo: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + dna_sequence: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + dropdown: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + dropdown_option: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + entity_schema: '#/components/schemas/EntitySchemaAppConfigItem' + entry: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + entry_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + field: '#/components/schemas/FieldAppConfigItem' + float: '#/components/schemas/FloatAppConfigItem' + folder: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + integer: '#/components/schemas/IntegerAppConfigItem' + json: '#/components/schemas/JsonAppConfigItem' + location: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + location_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + mixture: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + molecule: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + plate: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + plate_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + project: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + registry: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + request_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + result_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + rna_oligo: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + rna_sequence: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + run_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + secure_text: '#/components/schemas/SecureTextAppConfigItem' + text: '#/components/schemas/TextAppConfigItem' + workflow_task_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + workflow_task_status: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + worklist: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + propertyName: type + oneOf: + - $ref: '#/components/schemas/ArrayElementAppConfigItem' + - $ref: '#/components/schemas/DateAppConfigItem' + - $ref: '#/components/schemas/DatetimeAppConfigItem' + - $ref: '#/components/schemas/JsonAppConfigItem' + - $ref: '#/components/schemas/EntitySchemaAppConfigItem' + - $ref: '#/components/schemas/FieldAppConfigItem' + - $ref: '#/components/schemas/BooleanAppConfigItem' + - $ref: '#/components/schemas/IntegerAppConfigItem' + - $ref: '#/components/schemas/FloatAppConfigItem' + - $ref: '#/components/schemas/TextAppConfigItem' + - $ref: '#/components/schemas/GenericApiIdentifiedAppConfigItem' + - $ref: '#/components/schemas/SecureTextAppConfigItem' + type: object + AppConfigItemApiMixin: + properties: + apiURL: + format: uri + readOnly: true + type: string + app: + properties: + id: + description: The id of the Benchling app to which this configuration + item belongs + nullable: false + type: string + type: object + createdAt: + description: DateTime the app config item was created + format: date-time + readOnly: true + type: string + id: + readOnly: true + type: string + modifiedAt: + description: DateTime the app config item was last modified + format: date-time + readOnly: true + type: string + path: + description: Array-based representation of config item's location in the + tree in order from top to bottom. + example: + - My Schema 1 + - My Field 1 + items: + type: string + type: array + type: + description: Type of the app config item + type: string + type: object + AppConfigItemBooleanBulkUpdate: + allOf: + - $ref: '#/components/schemas/AppConfigItemBooleanUpdate' + - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' + type: object + AppConfigItemBooleanCreate: + allOf: + - $ref: '#/components/schemas/AppConfigItemCreateMixin' + - properties: + type: + enum: + - boolean + example: boolean + type: string + value: + nullable: true + type: boolean + - required: + - value + - type + type: object + AppConfigItemBooleanUpdate: + properties: + type: + enum: + - boolean + example: boolean + type: string + value: + nullable: true + type: boolean + required: + - value + - type + type: object + AppConfigItemBulkUpdate: + discriminator: + mapping: + aa_sequence: '#/components/schemas/AppConfigItemGenericBulkUpdate' + boolean: '#/components/schemas/AppConfigItemBooleanBulkUpdate' + box: '#/components/schemas/AppConfigItemGenericBulkUpdate' + box_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + container: '#/components/schemas/AppConfigItemGenericBulkUpdate' + container_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + custom_entity: '#/components/schemas/AppConfigItemGenericBulkUpdate' + date: '#/components/schemas/AppConfigItemDateBulkUpdate' + datetime: '#/components/schemas/AppConfigItemDatetimeBulkUpdate' + dna_oligo: '#/components/schemas/AppConfigItemGenericBulkUpdate' + dna_sequence: '#/components/schemas/AppConfigItemGenericBulkUpdate' + dropdown: '#/components/schemas/AppConfigItemGenericBulkUpdate' + dropdown_option: '#/components/schemas/AppConfigItemGenericBulkUpdate' + entity_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + entry: '#/components/schemas/AppConfigItemGenericBulkUpdate' + entry_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + field: '#/components/schemas/AppConfigItemGenericBulkUpdate' + float: '#/components/schemas/AppConfigItemFloatBulkUpdate' + folder: '#/components/schemas/AppConfigItemGenericBulkUpdate' + integer: '#/components/schemas/AppConfigItemIntegerBulkUpdate' + json: '#/components/schemas/AppConfigItemJsonBulkUpdate' + location: '#/components/schemas/AppConfigItemGenericBulkUpdate' + location_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + mixture: '#/components/schemas/AppConfigItemGenericBulkUpdate' + molecule: '#/components/schemas/AppConfigItemGenericBulkUpdate' + plate: '#/components/schemas/AppConfigItemGenericBulkUpdate' + plate_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + project: '#/components/schemas/AppConfigItemGenericBulkUpdate' + registry: '#/components/schemas/AppConfigItemGenericBulkUpdate' + request_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + result_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + rna_oligo: '#/components/schemas/AppConfigItemGenericBulkUpdate' + rna_sequence: '#/components/schemas/AppConfigItemGenericBulkUpdate' + run_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + secure_text: '#/components/schemas/AppConfigItemGenericBulkUpdate' + text: '#/components/schemas/AppConfigItemGenericBulkUpdate' + workflow_task_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' + workflow_task_status: '#/components/schemas/AppConfigItemGenericBulkUpdate' + worklist: '#/components/schemas/AppConfigItemGenericBulkUpdate' + propertyName: type + oneOf: + - $ref: '#/components/schemas/AppConfigItemGenericBulkUpdate' + - $ref: '#/components/schemas/AppConfigItemBooleanBulkUpdate' + - $ref: '#/components/schemas/AppConfigItemIntegerBulkUpdate' + - $ref: '#/components/schemas/AppConfigItemFloatBulkUpdate' + - $ref: '#/components/schemas/AppConfigItemDateBulkUpdate' + - $ref: '#/components/schemas/AppConfigItemDatetimeBulkUpdate' + - $ref: '#/components/schemas/AppConfigItemJsonBulkUpdate' + type: object + AppConfigItemBulkUpdateMixin: + properties: + id: + example: aci_ae92kBv9aNSl593z + type: string + required: + - id + type: object + AppConfigItemCreate: + discriminator: + mapping: + aa_sequence: '#/components/schemas/AppConfigItemGenericCreate' + boolean: '#/components/schemas/AppConfigItemBooleanCreate' + box: '#/components/schemas/AppConfigItemGenericCreate' + box_schema: '#/components/schemas/AppConfigItemGenericCreate' + container: '#/components/schemas/AppConfigItemGenericCreate' + container_schema: '#/components/schemas/AppConfigItemGenericCreate' + custom_entity: '#/components/schemas/AppConfigItemGenericCreate' + date: '#/components/schemas/AppConfigItemDateCreate' + datetime: '#/components/schemas/AppConfigItemDatetimeCreate' + dna_oligo: '#/components/schemas/AppConfigItemGenericCreate' + dna_sequence: '#/components/schemas/AppConfigItemGenericCreate' + dropdown: '#/components/schemas/AppConfigItemGenericCreate' + dropdown_option: '#/components/schemas/AppConfigItemGenericCreate' + entity_schema: '#/components/schemas/AppConfigItemGenericCreate' + entry: '#/components/schemas/AppConfigItemGenericCreate' + entry_schema: '#/components/schemas/AppConfigItemGenericCreate' + field: '#/components/schemas/AppConfigItemGenericCreate' + float: '#/components/schemas/AppConfigItemFloatCreate' + folder: '#/components/schemas/AppConfigItemGenericCreate' + integer: '#/components/schemas/AppConfigItemIntegerCreate' + json: '#/components/schemas/AppConfigItemJsonCreate' + location: '#/components/schemas/AppConfigItemGenericCreate' + location_schema: '#/components/schemas/AppConfigItemGenericCreate' + mixture: '#/components/schemas/AppConfigItemGenericCreate' + molecule: '#/components/schemas/AppConfigItemGenericCreate' + plate: '#/components/schemas/AppConfigItemGenericCreate' + plate_schema: '#/components/schemas/AppConfigItemGenericCreate' + project: '#/components/schemas/AppConfigItemGenericCreate' + registry: '#/components/schemas/AppConfigItemGenericCreate' + request_schema: '#/components/schemas/AppConfigItemGenericCreate' + result_schema: '#/components/schemas/AppConfigItemGenericCreate' + rna_oligo: '#/components/schemas/AppConfigItemGenericCreate' + rna_sequence: '#/components/schemas/AppConfigItemGenericCreate' + run_schema: '#/components/schemas/AppConfigItemGenericCreate' + secure_text: '#/components/schemas/AppConfigItemGenericCreate' + text: '#/components/schemas/AppConfigItemGenericCreate' + workflow_task_schema: '#/components/schemas/AppConfigItemGenericCreate' + workflow_task_status: '#/components/schemas/AppConfigItemGenericCreate' + worklist: '#/components/schemas/AppConfigItemGenericCreate' + propertyName: type + oneOf: + - $ref: '#/components/schemas/AppConfigItemGenericCreate' + - $ref: '#/components/schemas/AppConfigItemBooleanCreate' + - $ref: '#/components/schemas/AppConfigItemIntegerCreate' + - $ref: '#/components/schemas/AppConfigItemFloatCreate' + - $ref: '#/components/schemas/AppConfigItemDateCreate' + - $ref: '#/components/schemas/AppConfigItemDatetimeCreate' + - $ref: '#/components/schemas/AppConfigItemJsonCreate' + type: object + AppConfigItemCreateMixin: + properties: + appId: + description: App id to which this config item belongs. + example: app_J39na03L1nsLS34o + type: string + path: + description: Array-based representation of config item's location in the + tree in order from top to bottom. + example: + - My Schema 1 + - My Field 1 + items: + type: string + type: array + required: + - path + - appId + type: object + AppConfigItemDateBulkUpdate: + allOf: + - $ref: '#/components/schemas/AppConfigItemDateUpdate' + - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' + type: object + AppConfigItemDateCreate: + allOf: + - $ref: '#/components/schemas/AppConfigItemCreateMixin' + - properties: + type: + enum: + - date + type: string + value: + example: '2022-05-03' + format: date + nullable: true + type: string + - required: + - value + - type + type: object + AppConfigItemDateUpdate: + properties: + type: + enum: + - date + type: string + value: + example: '2022-03-18' + nullable: true + type: string + required: + - value + - type + type: object + AppConfigItemDatetimeBulkUpdate: + allOf: + - $ref: '#/components/schemas/AppConfigItemDatetimeUpdate' + - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' + type: object + AppConfigItemDatetimeCreate: + allOf: + - $ref: '#/components/schemas/AppConfigItemCreateMixin' + - properties: + type: + enum: + - datetime + type: string + value: + example: 2022-03-18 05:14:35 PM + format: datetime + nullable: true + type: string + - required: + - value + - type + type: object + AppConfigItemDatetimeUpdate: + properties: + type: + enum: + - datetime + type: string + value: + example: 2022-03-18 05:14:35 PM + nullable: true + type: string + required: + - value + - type + type: object + AppConfigItemFloatBulkUpdate: + allOf: + - $ref: '#/components/schemas/AppConfigItemFloatUpdate' + - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' + type: object + AppConfigItemFloatCreate: + allOf: + - $ref: '#/components/schemas/AppConfigItemCreateMixin' + - properties: + type: + enum: + - float + example: float + type: string + value: + format: float + nullable: true + type: number + - required: + - value + - type + type: object + AppConfigItemFloatUpdate: + properties: + type: + enum: + - float + example: float + type: string + value: + format: float + nullable: true + type: number + required: + - value + - type + type: object + AppConfigItemGenericBulkUpdate: + allOf: + - $ref: '#/components/schemas/AppConfigItemGenericUpdate' + - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' + type: object + AppConfigItemGenericCreate: + allOf: + - $ref: '#/components/schemas/AppConfigItemCreateMixin' + - properties: + type: + enum: + - container_schema + - entity_schema + - plate_schema + - location_schema + - box_schema + - run_schema + - result_schema + - request_schema + - entry_schema + - workflow_task_schema + - dropdown + - dropdown_option + - field + - text + - date + - datetime + - secure_text + - json + - registry + - folder + - entry + - worklist + - project + - workflow_task_status + - dna_sequence + - dna_oligo + - aa_sequence + - custom_entity + - mixture + - molecule + - rna_oligo + - rna_sequence + - box + - container + - location + - plate + type: string + value: + nullable: true + type: string + - required: + - value + - type + type: object + AppConfigItemGenericUpdate: + properties: + type: + enum: + - container_schema + - entity_schema + - plate_schema + - location_schema + - box_schema + - run_schema + - result_schema + - request_schema + - entry_schema + - workflow_task_schema + - dropdown + - dropdown_option + - field + - text + - date + - datetime + - secure_text + - json + - registry + - folder + - entry + - worklist + - project + - workflow_task_status + - dna_sequence + - dna_oligo + - aa_sequence + - custom_entity + - mixture + - molecule + - rna_oligo + - rna_sequence + - box + - container + - location + - plate + type: string + value: + nullable: true + type: string + required: + - value + - type + type: object + AppConfigItemIntegerBulkUpdate: + allOf: + - $ref: '#/components/schemas/AppConfigItemIntegerUpdate' + - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' + type: object + AppConfigItemIntegerCreate: + allOf: + - $ref: '#/components/schemas/AppConfigItemCreateMixin' + - properties: + type: + enum: + - integer + example: integer + type: string + value: + nullable: true + type: integer + - required: + - value + - type + type: object + AppConfigItemIntegerUpdate: + properties: + type: + enum: + - integer + example: integer + type: string + value: + nullable: true + type: integer + required: + - value + - type + type: object + AppConfigItemJsonBulkUpdate: + allOf: + - $ref: '#/components/schemas/AppConfigItemJsonUpdate' + - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' + type: object + AppConfigItemJsonCreate: + allOf: + - $ref: '#/components/schemas/AppConfigItemCreateMixin' + - properties: + type: + enum: + - json + example: json + type: string + value: + description: The value of a json create object should be json parseable. + nullable: true + type: string + - required: + - value + - type + type: object + AppConfigItemJsonUpdate: + properties: + type: + enum: + - json + example: json + type: string + value: + nullable: true + type: string + required: + - value + - type + type: object + AppConfigItemUpdate: + discriminator: + mapping: + aa_sequence: '#/components/schemas/AppConfigItemGenericUpdate' + boolean: '#/components/schemas/AppConfigItemBooleanUpdate' + box: '#/components/schemas/AppConfigItemGenericUpdate' + box_schema: '#/components/schemas/AppConfigItemGenericUpdate' + container: '#/components/schemas/AppConfigItemGenericUpdate' + container_schema: '#/components/schemas/AppConfigItemGenericUpdate' + custom_entity: '#/components/schemas/AppConfigItemGenericUpdate' + date: '#/components/schemas/AppConfigItemDateUpdate' + datetime: '#/components/schemas/AppConfigItemDatetimeUpdate' + dna_oligo: '#/components/schemas/AppConfigItemGenericUpdate' + dna_sequence: '#/components/schemas/AppConfigItemGenericUpdate' + dropdown: '#/components/schemas/AppConfigItemGenericUpdate' + dropdown_option: '#/components/schemas/AppConfigItemGenericUpdate' + entity_schema: '#/components/schemas/AppConfigItemGenericUpdate' + entry: '#/components/schemas/AppConfigItemGenericUpdate' + entry_schema: '#/components/schemas/AppConfigItemGenericUpdate' + field: '#/components/schemas/AppConfigItemGenericUpdate' + float: '#/components/schemas/AppConfigItemFloatUpdate' + folder: '#/components/schemas/AppConfigItemGenericUpdate' + integer: '#/components/schemas/AppConfigItemIntegerUpdate' + json: '#/components/schemas/AppConfigItemJsonUpdate' + location: '#/components/schemas/AppConfigItemGenericUpdate' + location_schema: '#/components/schemas/AppConfigItemGenericUpdate' + mixture: '#/components/schemas/AppConfigItemGenericUpdate' + molecule: '#/components/schemas/AppConfigItemGenericUpdate' + plate: '#/components/schemas/AppConfigItemGenericUpdate' + plate_schema: '#/components/schemas/AppConfigItemGenericUpdate' + project: '#/components/schemas/AppConfigItemGenericUpdate' + registry: '#/components/schemas/AppConfigItemGenericUpdate' + request_schema: '#/components/schemas/AppConfigItemGenericUpdate' + result_schema: '#/components/schemas/AppConfigItemGenericUpdate' + rna_oligo: '#/components/schemas/AppConfigItemGenericUpdate' + rna_sequence: '#/components/schemas/AppConfigItemGenericUpdate' + run_schema: '#/components/schemas/AppConfigItemGenericUpdate' + secure_text: '#/components/schemas/AppConfigItemGenericUpdate' + text: '#/components/schemas/AppConfigItemGenericUpdate' + workflow_task_schema: '#/components/schemas/AppConfigItemGenericUpdate' + workflow_task_status: '#/components/schemas/AppConfigItemGenericUpdate' + worklist: '#/components/schemas/AppConfigItemGenericUpdate' + propertyName: type + oneOf: + - $ref: '#/components/schemas/AppConfigItemGenericUpdate' + - $ref: '#/components/schemas/AppConfigItemBooleanUpdate' + - $ref: '#/components/schemas/AppConfigItemIntegerUpdate' + - $ref: '#/components/schemas/AppConfigItemFloatUpdate' + - $ref: '#/components/schemas/AppConfigItemDateUpdate' + - $ref: '#/components/schemas/AppConfigItemDatetimeUpdate' + - $ref: '#/components/schemas/AppConfigItemJsonUpdate' + type: object + AppConfigItemsBulkCreateRequest: + properties: + appConfigurationItems: + items: + $ref: '#/components/schemas/AppConfigItemCreate' + maxItems: 1000 + type: array + required: + - appConfigurationItems + type: object + AppConfigItemsBulkUpdateRequest: + properties: + appConfigurationItems: + items: + $ref: '#/components/schemas/AppConfigItemBulkUpdate' + maxItems: 1000 + type: array + required: + - appConfigurationItems + type: object + AppConfigurationPaginatedList: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + appConfigurationItems: + items: + $ref: '#/components/schemas/AppConfigItem' + type: array + type: object + AppSession: + additionalProperties: false + properties: + app: + allOf: + - $ref: '#/components/schemas/AppSummary' + - nullable: false + createdAt: + format: date-time + nullable: false + type: string + id: + nullable: false + type: string + messages: + description: 'An array of `SessionMessage` describing the current session + state. + + ' + items: + $ref: '#/components/schemas/AppSessionMessage' + nullable: true + type: array + modifiedAt: + format: date-time + nullable: false + type: string + name: + description: A brief description of the app's actions for users. Length + must be between 3-100 chars. It becomes immutable once a value is set. + maxLength: 100 + minLength: 3 + nullable: false + type: string + status: + $ref: '#/components/schemas/AppSessionStatus' + timeoutSeconds: + description: 'Timeout in seconds, a value between 1 second and 30 days. + Once set, it can only be increased, not decreased. + + ' + maximum: 2592000 + minimum: 1 + nullable: false + type: integer + type: object + AppSessionCreate: + additionalProperties: false + properties: + appId: + nullable: false + type: string + messages: + default: [] + description: 'An array of `SessionMessage` describing the current session + state. + + ' + items: + $ref: '#/components/schemas/AppSessionMessageCreate' + nullable: false + type: array + name: + description: The name of the session. Length must be between 3-100 chars. + Value is required and immutable once set. + maxLength: 100 + minLength: 3 + nullable: false + type: string + timeoutSeconds: + description: 'Timeout in seconds, a value between 1 second and 30 days. + Once set, it can only be increased, not decreased. + + ' + maximum: 2592000 + minimum: 1 + nullable: false + type: integer + required: + - appId + - name + - timeoutSeconds + type: object + AppSessionMessage: + allOf: + - $ref: '#/components/schemas/AppSessionMessageCreate' + type: object + AppSessionMessageCreate: + additionalProperties: false + properties: + content: + description: 'A message string, to be rendered as plain text with Benchling + chips. References to Benchling items (up to 10 per msg) will be rendered + as chips in the Benchling UX. A valid reference is a Benchling API id, + prefixed with "id:" and contained by braces. For example: "{id:ent_a0SApq3}."' + example: 'Transferred 4ml of {id:ent_a0SApq3z} to {id:con_ae92kBv9} with + \{priority: p3\}.' + maxLength: 200 + minLength: 3 + nullable: false + type: string + style: + $ref: '#/components/schemas/AppSessionMessageStyle' + required: + - content + type: object + AppSessionMessageStyle: + default: NONE + enum: + - ERROR + - INFO + - NONE + - SUCCESS + - WARNING + nullable: false + type: string + AppSessionStatus: + description: 'All possible values of a Session''s status, including system-updated + and user-updated values. + + ' + enum: + - COMPLETED_WITH_WARNINGS + - FAILED + - RUNNING + - SUCCEEDED + - TIMEOUT + type: string + AppSessionUpdate: + additionalProperties: false + description: Update a session's messages or increase timeoutSeconds. + properties: + messages: + description: 'An array of `SessionMessage` describing the current session + state. + + ' + items: + $ref: '#/components/schemas/AppSessionMessageCreate' + maxItems: 10 + nullable: false + type: array + status: + $ref: '#/components/schemas/AppSessionUpdateStatus' + timeoutSeconds: + description: 'Timeout in seconds, a value between 1 second and 30 days. + Once set, it can only be increased, not decreased. + + ' + maximum: 2592000 + minimum: 1 + type: integer + type: object + AppSessionUpdateStatus: + description: Values that can be specified when updating the status of a Session + enum: + - COMPLETED_WITH_WARNINGS + - FAILED + - SUCCEEDED + type: string + AppSummary: + properties: + id: + description: The id of the Benchling app. + nullable: false + type: string + type: object + ArchiveRecord: + properties: + reason: + example: Made in error + type: string + type: object + ArchiveRecordSet: + additionalProperties: false + description: Currently, we only support setting a null value for archiveRecord, + which unarchives the item + example: null + nullable: true + type: object + ArrayElementAppConfigItem: + allOf: + - $ref: '#/components/schemas/AppConfigItemApiMixin' + AssayFieldsCreate: + additionalProperties: true + type: object + AssayResult: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + description: 'ArchiveRecord Resource if the result is archived. This is + null if the result is not archived. + + ' + nullable: true + createdAt: + description: DateTime at which the the result was created + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + description: UserSummary Resource of who created the request + readOnly: true + entryId: + description: ID of the entry that this result is attached to + nullable: true + type: string + fieldValidation: + additionalProperties: + $ref: '#/components/schemas/UserValidation' + description: 'Object mapping field names to a UserValidation Resource object + for that field. To **set** validation for a result, you *must* use this + object. + + ' + type: object + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Field values for the returned result. Please note the keys + of each field are the field''s warehouse name (additional_prop) instead + of the field''s display name (additionalProp). + + ' + example: + - additional_prop: null + displayValue: Amp + isMulti: true + textValue: Amp + type: dna_sequence_link + value: + - seq_jdf8BV24 + id: + description: ID of the result + type: string + isReviewed: + description: Whether or not this result is attached to an accepted entry + type: boolean + modifiedAt: + description: DateTime at which the the result was last modified + format: date-time + readOnly: true + type: string + projectId: + description: ID of the project to insert the result into + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + description: Schema that the result belongs to + title: SchemaProperty + validationComment: + readOnly: true + type: string + validationStatus: + readOnly: true + type: string + type: object + AssayResultCreate: + properties: + fieldValidation: + additionalProperties: + $ref: '#/components/schemas/UserValidation' + description: 'Dictionary mapping field names to UserValidation Resources. + + ' + type: object + fields: + anyOf: + - $ref: '#/components/schemas/Fields' + - $ref: '#/components/schemas/AssayFieldsCreate' + description: 'Dictionary of result fields. Please note the field keys must + be the field''s warehouse name, not display name. + + ' + example: + my_entity_link: + value: bfi_a0B1cd23 + my_text_field: + value: some text + id: + description: UUID + type: string + projectId: + description: 'The project that the assay result should be uploaded to. Only + users with read access to the project will be able to read the assay result. + Leaving this empty will result in only the creator having read access. + + ' + nullable: true + type: string + schemaId: + description: ID of result schema under which to upload this result + type: string + required: + - schemaId + - fields + type: object + AssayResultIdsRequest: + additionalProperties: false + properties: + assayResultIds: + items: + format: uuid + type: string + type: array + required: + - assayResultIds + type: object + AssayResultIdsResponse: + properties: + assayResultIds: + items: + format: uuid + type: string + type: array + type: object + AssayResultSchema: + allOf: + - $ref: '#/components/schemas/BaseAssaySchema' + - properties: + modifiedAt: + description: DateTime the Assay Result Schema was last modified + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + type: string + type: + enum: + - assay_result + readOnly: true + type: string + type: object + AssayResultSchemasPaginatedList: + properties: + assayResultSchemas: + items: + $ref: '#/components/schemas/AssayResultSchema' + readOnly: true + type: array + nextToken: + type: string + type: object + AssayResultTransactionCreateResponse: + properties: + id: + format: uuid + type: string + type: object + AssayResultsArchive: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/AssayResultIdsRequest' + - properties: + reason: + description: The reason for archiving the provided results. Accepted reasons + may differ based on tenant configuration + enum: + - Made in error + - Archived + - Other + type: string + type: object + AssayResultsBulkCreateInTableRequest: + allOf: + - $ref: '#/components/schemas/AssayResultsBulkCreateRequest' + - properties: + tableId: + example: strtbl_IakA58In + type: string + required: + - assayResults + type: object + AssayResultsBulkCreateRequest: + additionalProperties: false + properties: + assayResults: + items: + $ref: '#/components/schemas/AssayResultCreate' + type: array + required: + - assayResults + type: object + AssayResultsBulkGet: + properties: + assayResults: + items: + $ref: '#/components/schemas/AssayResult' + type: array + type: object + AssayResultsCreateErrorResponse: + properties: + assayResults: + default: null + items: + type: object + nullable: true + type: array + errors: + items: + properties: + fields: + type: object + global: + items: + type: string + type: array + type: object + type: array + type: object + AssayResultsCreateResponse: + properties: + assayResults: + items: + format: uuid + type: string + type: array + errors: + default: null + nullable: true + type: object + type: object + AssayResultsPaginatedList: + properties: + assayResults: + items: + $ref: '#/components/schemas/AssayResult' + type: array + nextToken: + type: string + type: object + AssayRun: + properties: + apiURL: + description: The canonical url of the Run in the API. + example: https://benchling.com/api/v2/assay-runs/21f50003-0389-4b2a-9293-a17967b85961 + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + createdAt: + example: '2021-05-06T13:43:25.752597+00:00' + type: string + creator: + $ref: '#/components/schemas/UserSummary' + entryId: + example: etr_Hds1XAaq + nullable: true + type: string + equipmentId: + example: eqpt_XzU5p4dR + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + id: + example: 77af3205-65af-457f-87f5-75462b85075a + type: string + isReviewed: + type: boolean + projectId: + example: src_YzU5p4dR + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + example: + id: assaysch_fFLKmdmG + name: Assay Run + nullable: true + title: SchemaProperty + validationComment: + example: Reported valid with no caveats + nullable: true + type: string + validationStatus: + $ref: '#/components/schemas/AssayRunValidationStatus' + type: object + AssayRunCreate: + properties: + fields: + anyOf: + - $ref: '#/components/schemas/Fields' + - $ref: '#/components/schemas/AssayFieldsCreate' + description: Object of assay run fields + id: + description: ID of assay run + type: string + projectId: + description: 'The project that the assay run should be uploaded to. Only + users with read access to the project will be able to read the assay run. + Leaving this empty will result in only the creator having read access. + + ' + type: string + schemaId: + description: ID of assay schema that assay run conforms to + type: string + validationComment: + description: Additional information about the validation status + type: string + validationStatus: + $ref: '#/components/schemas/AssayRunValidationStatus' + required: + - schemaId + - fields + type: object + AssayRunCreatedEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + assayRun: + $ref: '#/components/schemas/AssayRun' + eventType: + enum: + - v2.assayRun.created + type: string + type: object + AssayRunNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - properties: + assayRunId: + example: 588aca02-1a20-4b94-a40f-b3f3a0081749 + nullable: true + type: string + assayRunSchemaId: + example: assaysch_msh1Ly6g + type: string + type: + enum: + - assay_run + type: string + type: object + AssayRunSchema: + allOf: + - $ref: '#/components/schemas/BaseAssaySchema' + - properties: + automationInputFileConfigs: + items: + properties: + name: + type: string + type: object + type: array + automationOutputFileConfigs: + items: + properties: + name: + type: string + type: object + type: array + modifiedAt: + description: DateTime the Assay Run Schema was last modified + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + type: string + type: + enum: + - assay_run + readOnly: true + type: string + type: object + AssayRunSchemasPaginatedList: + properties: + assayRunSchemas: + items: + $ref: '#/components/schemas/AssayRunSchema' + readOnly: true + type: array + nextToken: + type: string + type: object + AssayRunUpdate: + additionalProperties: false + properties: + equipmentId: + description: The equipment that the assay run should be associated with. This + attribute is only supported if the equipment feature is enabled for the + tenant; otherwise, supplying it leads to a 400 request error + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + type: object + AssayRunUpdatedFieldsEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - $ref: '#/components/schemas/UpdateEventMixin' + - properties: + assayRun: + $ref: '#/components/schemas/AssayRun' + eventType: + enum: + - v2.assayRun.updated.fields + type: string + type: object + AssayRunValidationStatus: + description: Must be either VALID or INVALID + enum: + - VALID + - INVALID + type: string + AssayRunsArchivalChange: + description: 'IDs of all Assay Runs that were archived / unarchived. + + ' + properties: + assayRunIds: + items: + type: string + type: array + type: object + AssayRunsArchive: + additionalProperties: false + description: 'The request body for archiving Assay Runs. + + ' + properties: + assayRunIds: + items: + type: string + type: array + reason: + description: 'The reason for archiving the provided Assay Runs. Accepted + reasons may differ based on tenant configuration. + + ' + enum: + - Archived + - Made in error + - Other + type: string + required: + - reason + - assayRunIds + type: object + AssayRunsBulkCreateErrorResponse: + properties: + assayRuns: + default: null + items: + type: object + nullable: true + type: array + errors: + items: + properties: + fields: + type: object + global: + items: + type: string + type: array + type: object + type: array + type: object + AssayRunsBulkCreateRequest: + additionalProperties: false + properties: + assayRuns: + items: + $ref: '#/components/schemas/AssayRunCreate' + type: array + required: + - assayRuns + type: object + AssayRunsBulkCreateResponse: + properties: + assayRuns: + items: + type: string + type: array + errors: + default: null + nullable: true + type: object + type: object + AssayRunsBulkGet: + properties: + assayRuns: + items: + $ref: '#/components/schemas/AssayRun' + type: array + type: object + AssayRunsPaginatedList: + properties: + assayRuns: + items: + $ref: '#/components/schemas/AssayRun' + type: array + nextToken: + type: string + type: object + AssayRunsUnarchive: + additionalProperties: false + description: 'The request body for unarchiving Assay Runs. + + ' + properties: + assayRunIds: + items: + type: string + type: array + required: + - assayRunIds + type: object + AsyncTask: + properties: + errors: + description: 'Present only when status is FAILED for a bulk task. Contains + information about the individual errors in the bulk task. + + ' + type: object + message: + description: Present only when status is FAILED. Contains information about + the error. + type: string + response: + description: Present only when status is SUCCEEDED. response can be empty + if there is no data to be returned. + type: object + status: + description: The current state of the task. + enum: + - RUNNING + - SUCCEEDED + - FAILED + type: string + required: + - status + type: object + AsyncTaskLink: + properties: + taskId: + format: uuid + type: string + type: object + AutoAnnotateAaSequences: + additionalProperties: false + properties: + aaSequenceIds: + description: Array of AA sequence IDs. + items: + type: string + type: array + featureLibraryIds: + description: Array of feature library IDs. + items: + type: string + type: array + required: + - aaSequenceIds + - featureLibraryIds + type: object + AutoAnnotateDnaSequences: + additionalProperties: false + properties: + dnaSequenceIds: + description: Array of DNA sequence IDs. + items: + type: string + type: array + featureLibraryIds: + description: Array of feature library IDs. + items: + type: string + type: array + required: + - dnaSequenceIds + - featureLibraryIds + type: object + AutoAnnotateRnaSequences: + additionalProperties: false + properties: + featureLibraryIds: + description: Array of feature library IDs. + items: + type: string + type: array + rnaSequenceIds: + description: Array of RNA sequence IDs. + items: + type: string + maxItems: 1000 + type: array + required: + - rnaSequenceIds + - featureLibraryIds + type: object + AutofillPartsAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: {} + type: object + type: object + AutofillRnaSequences: + additionalProperties: false + properties: + rnaSequenceIds: + description: Array of RNA sequence IDs. + items: + type: string + maxItems: 1000 + type: array + required: + - rnaSequenceIds + type: object + AutofillSequences: + additionalProperties: false + properties: + dnaSequenceIds: + description: Array of DNA sequence IDs. + items: + type: string + type: array + required: + - dnaSequenceIds + type: object + AutofillTranscriptionsAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: {} + type: object + type: object + AutofillTranslationsAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: {} + type: object + type: object + AutomationFile: + properties: + assayRunId: + example: 588aca02-1a20-4b94-a40f-b3f3a0081749 + type: string + automationFileConfig: + properties: + name: + example: MyInstrumentName + type: string + type: object + file: + allOf: + - $ref: '#/components/schemas/Blob' + nullable: true + id: + type: string + status: + enum: + - SUCCEEDED + - FAILED + - NOT_STARTED + - RUNNING + type: string + type: object + AutomationFileInputsPaginatedList: + properties: + automationInputGenerators: + items: + $ref: '#/components/schemas/AutomationInputGenerator' + type: array + nextToken: + example: Im5ldyB0ZXN0Ig== + type: string + type: object + AutomationInputGenerator: + allOf: + - $ref: '#/components/schemas/AutomationFile' + - properties: + apiURL: + description: The canonical url of the Automation Input Generator in the + API. + example: https://benchling.com/api/v2/automation-input-generators/aif_C3wGA9HF + format: uri + readOnly: true + type: string + createdAt: + description: DateTime the Automation Input Generator was last modified + format: date-time + readOnly: true + type: string + id: + example: aif_C3wGA9HF + type: string + modifiedAt: + description: DateTime the Automation Input Generator was last modified + format: date-time + readOnly: true + type: string + transforms: + items: + allOf: + - $ref: '#/components/schemas/LabAutomationTransform' + nullable: true + type: array + type: object + AutomationInputGeneratorCompletedV2BetaEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + automationInputGenerator: + $ref: '#/components/schemas/AutomationFile' + eventType: + enum: + - v2-beta.automationInputGenerator.completed + type: string + type: object + AutomationInputGeneratorUpdate: + additionalProperties: false + properties: + fileId: + description: The ID of the file (blob) associated with the input generator. + Set to `null` to remove an existing file from the generator. + example: null + nullable: true + type: string + type: object + AutomationOutputProcessor: + allOf: + - $ref: '#/components/schemas/AutomationFile' + - properties: + apiURL: + description: The canonical url of the Automation Output Processor in the + API. + example: https://benchling.com/api/v2/automation-output-processors/aop_C3wGA9HF + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + completeWithErrors: + description: Specifies whether file processing should complete with errors. + False means any error in output file processing will result in no actions + being committed. True means that if row-level errors occur, then failing + rows and their errors will be saved to errorFile, and actions from successful + rows will be committed. + type: boolean + createdAt: + description: DateTime the Automation Output Processor was created + format: date-time + type: string + errorFile: + allOf: + - $ref: '#/components/schemas/Blob' + nullable: true + id: + example: aop_C3wGA9HF + type: string + modifiedAt: + description: DateTime the Automation Output Processor was last modified + format: date-time + type: string + progressStats: + $ref: '#/components/schemas/AutomationProgressStats' + transforms: + items: + allOf: + - $ref: '#/components/schemas/LabAutomationTransform' + nullable: true + type: array + type: object + AutomationOutputProcessorArchivalChange: + description: IDs of all items that were archived or unarchived, grouped by resource + type. This includes the IDs of any linked Results that were archived / unarchived. + properties: + automationOutputProcessorIds: + items: + type: string + type: array + resultIds: + items: + type: string + type: array + type: object + AutomationOutputProcessorCompletedV2BetaEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + automationOutputProcessor: + $ref: '#/components/schemas/AutomationFile' + eventType: + enum: + - v2-beta.automationOutputProcessor.completed + type: string + type: object + AutomationOutputProcessorCreate: + additionalProperties: false + properties: + assayRunId: + type: string + automationFileConfigName: + type: string + completeWithErrors: + description: Specifies whether file processing should complete with errors. + False means any error in output file processing will result in no actions + being committed. True means that if row-level errors occur, then failing + rows and their errors will be saved to errorFile, and actions from successful + rows will be committed. + type: boolean + fileId: + description: The ID of a blob link to process. + example: cd624536-c6ba-41b9-b802-9461689e2ea3 + type: string + required: + - fileId + - automationFileConfigName + - assayRunId + type: object + AutomationOutputProcessorUpdate: + additionalProperties: false + properties: + fileId: + description: The ID of a blob link to process. + example: cd624536-c6ba-41b9-b802-9461689e2ea3 + type: string + required: + - fileId + type: object + AutomationOutputProcessorUploadedV2BetaEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + automationOutputProcessor: + $ref: '#/components/schemas/AutomationFile' + eventType: + enum: + - v2-beta.automationOutputProcessor.uploaded + type: string + type: object + AutomationOutputProcessorsArchive: + additionalProperties: false + properties: + automationOutputProcessorIds: + description: Array of automation output processor IDs + items: + type: string + type: array + reason: + description: 'The reason that the output processors are being archived. + Accepted reasons may differ based on tenant configuration. + + ' + enum: + - Made in error + - Retired + - Expended + - Shipped + - Contaminated + - Expired + - Missing + - Other + type: string + required: + - automationOutputProcessorIds + type: object + AutomationOutputProcessorsPaginatedList: + description: A paginated list of automation output processors which have an + attached file. + properties: + automationOutputProcessors: + items: + $ref: '#/components/schemas/AutomationOutputProcessor' + type: array + nextToken: + example: Im5ldyB0ZXN0Ig== + type: string + type: object + AutomationOutputProcessorsUnarchive: + additionalProperties: false + properties: + automationOutputProcessorIds: + description: Array of automation output processor IDs + items: + type: string + type: array + required: + - automationOutputProcessorIds + type: object + AutomationProgressStats: + description: Processing progress information. + properties: + rowsFailed: + type: integer + rowsSucceeded: + type: integer + rowsUnprocessed: + type: integer + type: object + BackTranslate: + additionalProperties: false + properties: + aaSequenceIds: + description: IDs of AA sequences to back-translate. + items: + type: string + type: array + avoidedCutsiteEnzymeIds: + description: 'List of enzyme IDs whose recognition sites will be avoided + when creating the back-translated sequence. + + ' + items: + type: string + type: array + codonUsageTableId: + description: ID of the codon usage table representing the target organism. + type: string + folderId: + description: 'ID of the folder in which the back-translated sequences will + be saved. + + ' + type: string + gcContent: + default: ANY + description: 'The amount of GC content in the back-translated sequence. + If not specified, the back-translation will default to ANY (0-1). LOW + is defined as below 0.33, MEDIUM as 0.33-0.66, and HIGH as above 0.66. + + ' + enum: + - ANY + - LOW + - MEDIUM + - HIGH + type: string + hairpinParameters: + additionalProperties: false + description: 'These parameters are applied in the AvoidHairpins specification + in DNAChisel. If hairpinParameters is not specified, hairpins will not + be avoided. + + ' + properties: + stem: + default: 20 + type: integer + window: + default: 200 + type: integer + type: object + reducedPatterns: + description: 'List of patterns to avoid when creating the back-translated + sequence, on the coding strand only. + + ' + items: + $ref: '#/components/schemas/ReducedPattern' + type: array + schemaId: + description: ID of the resulting DNA sequences' schemas + type: string + shouldDepleteUridine: + default: false + description: 'If not specified, the back-translation will default to false, + and mRNA uridine depletion will not be performed. + + ' + type: boolean + required: + - aaSequenceIds + - folderId + type: object + BadRequestError: + properties: + error: + allOf: + - $ref: '#/components/schemas/BaseError' + - properties: + type: + enum: + - invalid_request_error + type: string + type: object + BadRequestErrorBulk: + allOf: + - $ref: '#/components/schemas/BadRequestError' + - properties: + error: + properties: + errors: + items: + properties: + index: + type: number + message: + type: string + type: object + type: array + type: object + type: object + BarcodeValidationResult: + properties: + barcode: + description: Barcode to validate. + type: string + isValid: + description: Whether the barcode is valid. + type: boolean + message: + description: If barcode is not valid, a message string explaining the error. + nullable: true + type: string + type: object + BarcodeValidationResults: + properties: + validationResults: + items: + $ref: '#/components/schemas/BarcodeValidationResult' + type: array + type: object + BarcodesList: + additionalProperties: false + properties: + barcodes: + description: Array of barcodes to validate. + items: + type: string + type: array + required: + - barcodes + type: object + BaseAppConfigItem: + allOf: + - $ref: '#/components/schemas/AppConfigItemApiMixin' + - properties: + description: + type: string + requiredConfig: + type: boolean + type: object + BaseAssaySchema: + allOf: + - $ref: '#/components/schemas/Schema' + - properties: + derivedFrom: + nullable: true + type: string + organization: + properties: + handle: + type: string + id: + type: string + name: + type: string + type: object + systemName: + type: string + type: object + BaseDropdownUIBlock: + allOf: + - properties: + dropdownId: + type: string + required: + - dropdownId + type: object + BaseError: + properties: + message: + type: string + type: + type: string + userMessage: + type: string + type: object + BaseNotePart: + properties: + indentation: + default: 0 + description: All notes have an indentation level - the default is 0 for + no indent. For lists, indentation gives notes hierarchy - a bulleted list + with children is modeled as one note part with indentation 1 followed + by note parts with indentation 2, for example. + minimum: 0 + type: integer + type: + description: The type of the note. Type determines what other fields are + present. + type: string + type: object + BaseSearchInputUIBlock: + allOf: + - properties: + itemType: + $ref: '#/components/schemas/SearchInputUiBlockItemType' + schemaId: + nullable: true + type: string + required: + - itemType + - schemaId + type: object + BaseSelectorInputUIBlock: + allOf: + - properties: + options: + items: + type: string + type: array + required: + - options + type: object + Batch: + additionalProperties: false + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + createdAt: + description: DateTime at which the the result was created + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + readOnly: true + defaultConcentration: + $ref: '#/components/schemas/Measurement' + entity: + discriminator: + mapping: + aa_sequence: '#/components/schemas/AaSequenceSummary' + custom_entity: '#/components/schemas/CustomEntitySummary' + dna_sequence: '#/components/schemas/DnaSequenceSummary' + propertyName: entityType + oneOf: + - $ref: '#/components/schemas/DnaSequenceSummary' + - $ref: '#/components/schemas/AaSequenceSummary' + - $ref: '#/components/schemas/CustomEntitySummary' + fields: + $ref: '#/components/schemas/Fields' + id: + example: bat_UOIr8IjL + readOnly: true + type: string + modifiedAt: + format: date-time + readOnly: true + type: string + name: + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + readOnly: true + title: SchemaProperty + webURL: + readOnly: true + type: string + type: object + BatchOrInaccessibleResource: + oneOf: + - $ref: '#/components/schemas/Batch' + - $ref: '#/components/schemas/InaccessibleResource' + BatchSchema: + allOf: + - $ref: '#/components/schemas/RegistrySchema' + - properties: + entitySchemaId: + type: string + modifiedAt: + description: DateTime the Batch Schema was last modified + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + type: string + type: object + BatchSchemasList: + properties: + batchSchemas: + items: + $ref: '#/components/schemas/BatchSchema' + readOnly: true + type: array + type: object + BatchSchemasPaginatedList: + allOf: + - $ref: '#/components/schemas/BatchSchemasList' + - properties: + nextToken: + type: string + type: object + BenchlingApp: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/BenchlingAppUpdate' + - additionalProperties: false + properties: + apiUrl: + example: https://benchling.com/api/v2/apps/app_e59sjL23Pqn30xHg + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + readOnly: true + createdAt: + description: DateTime at which the the app was created + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + readOnly: true + id: + example: app_e59sjL23Pqn30xHg + readOnly: true + type: string + modifiedAt: + description: DateTime at which the the app was last modified + format: date-time + readOnly: true + type: string + webUrl: + example: https://benchling.com/developer/apps/app_e59sjL23Pqn30xHg + format: uri + readOnly: true + type: string + type: object + BenchlingAppCreate: + additionalProperties: false + properties: + description: + example: This is my first App! + maxLength: 8192 + type: string + name: + example: My First App + maxLength: 255 + minLength: 3 + type: string + required: + - name + BenchlingAppUpdate: + additionalProperties: false + properties: + description: + example: This is my first App! + maxLength: 8192 + type: string + name: + example: My First App + maxLength: 255 + minLength: 3 + type: string + BenchlingAppsArchivalChange: + additionalProperties: false + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of apps that were archived / unarchived. + + ' + properties: + appIds: + example: + - app_J39na03L1nsLS34o + - app_ae92kBv9aNSl593z + - app_e59sjL23Pqn30xHg + items: + type: string + type: array + type: object + BenchlingAppsArchive: + additionalProperties: false + properties: + appIds: + description: Array of app IDs + example: + - app_J39na03L1nsLS34o + - app_ae92kBv9aNSl593z + - app_e59sjL23Pqn30xHg + items: + type: string + type: array + reason: + description: Reason that apps are being archived. Actual reason enum varies + by tenant. + enum: + - Made in error + - Retired + - Other + type: string + required: + - reason + - appIds + type: object + BenchlingAppsPaginatedList: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + apps: + items: + $ref: '#/components/schemas/BenchlingApp' + type: array + BenchlingAppsUnarchive: + additionalProperties: false + properties: + appIds: + description: Array of app IDs + example: + - app_J39na03L1nsLS34o + - app_ae92kBv9aNSl593z + - app_e59sjL23Pqn30xHg + items: + type: string + type: array + required: + - appIds + type: object + Blob: + properties: + id: + description: The universally unique identifier (UUID) for the blob. + example: c33fe52d-fe6a-4c98-adcd-211bdf6778f7 + format: uuid + type: string + mimeType: + description: eg. application/jpeg + example: text/csv + maxLength: 100 + type: string + name: + description: Name of the blob + example: MyInstrumentInputFile.csv + maxLength: 1000 + type: string + type: + description: 'One of RAW_FILE or VISUALIZATION. If VISUALIZATION, the blob + may be displayed as an image preview. + + ' + enum: + - RAW_FILE + - VISUALIZATION + type: string + uploadStatus: + enum: + - IN_PROGRESS + - COMPLETE + - ABORTED + type: string + type: object + BlobComplete: + additionalProperties: false + properties: + parts: + items: + $ref: '#/components/schemas/BlobPart' + type: array + type: object + BlobCreate: + additionalProperties: false + properties: + data64: + description: base64 encoded file contents + format: byte + type: string + md5: + description: 'The MD5 hash of the blob part. Note: this should be the hash + of the raw data of the blob part, not the hash of the base64 encoding. + + ' + type: string + mimeType: + default: application/octet-stream + description: eg. application/jpeg + maxLength: 100 + type: string + name: + description: Name of the blob + maxLength: 1000 + type: string + type: + description: 'One of RAW_FILE or VISUALIZATION. If VISUALIZATION, the blob + may be displayed as an image preview. + + ' + enum: + - RAW_FILE + - VISUALIZATION + type: string + required: + - name + - type + - data64 + - md5 + type: object + BlobMultipartCreate: + additionalProperties: false + properties: + mimeType: + default: application/octet-stream + description: eg. application/jpeg + maxLength: 100 + type: string + name: + description: Name of the blob + maxLength: 1000 + type: string + type: + description: 'One of RAW_FILE or VISUALIZATION. If VISUALIZATION, the blob + may be displayed as an image preview. + + ' + enum: + - RAW_FILE + - VISUALIZATION + type: string + required: + - name + - type + type: object + BlobPart: + properties: + eTag: + example: '"6f5902ac237024bdd0c176cb93063dc4"' + type: string + partNumber: + maximum: 10000 + minimum: 1 + type: integer + type: object + BlobPartCreate: + additionalProperties: false + properties: + data64: + format: bytes + type: string + md5: + type: string + partNumber: + description: 'An integer between 1 to 10,000, inclusive. The part number + must be unique per part and indicates the ordering of the part inside + the final blob. The part numbers do not need to be consecutive. + + ' + maximum: 10000 + minimum: 1 + type: integer + required: + - partNumber + - data64 + - md5 + type: object + BlobUrl: + properties: + downloadURL: + description: a pre-signed download url. + format: uri + type: string + expiresAt: + description: The unix time that the download URL expires at. + type: integer + type: object + BlobsBulkGet: + properties: + blobs: + items: + $ref: '#/components/schemas/Blob' + type: array + type: object + BooleanAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - properties: + type: + enum: + - boolean + example: boolean + type: string + value: + nullable: true + type: boolean + type: object + Box: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + availableCapacity: + description: The number of available positions in the box. + readOnly: true + type: integer + barcode: + nullable: true + type: string + createdAt: + format: date-time + readOnly: true + type: string + creator: + $ref: '#/components/schemas/UserSummary' + emptyContainers: + description: The number of containers in the box that have no contents. + readOnly: true + type: integer + emptyPositions: + description: The number of empty positions for adding additional containers + in the box. + readOnly: true + type: integer + fields: + $ref: '#/components/schemas/Fields' + filledPositions: + description: The number of containers currently in the box. + readOnly: true + type: integer + id: + type: string + modifiedAt: + format: date-time + readOnly: true + type: string + name: + type: string + occupiedCapacity: + description: The number of containers currently in the box. + readOnly: true + type: integer + parentStorageId: + nullable: true + type: string + projectId: + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + title: SchemaProperty + size: + description: The size of the box (i.e. how many containers it can store). + readOnly: true + type: integer + totalCapacity: + description: The total capacity of the box (i.e. how many containers it + can store). + readOnly: true + type: integer + webURL: + readOnly: true + type: string + type: object + BoxContentsPaginatedList: + properties: + containers: + items: + $ref: '#/components/schemas/ContainerWithCoordinates' + type: array + nextToken: + type: string + type: object + BoxCreate: + additionalProperties: false + properties: + barcode: + type: string + fields: + $ref: '#/components/schemas/Fields' + name: + type: string + parentStorageId: + type: string + projectId: + type: string + schemaId: + type: string + required: + - schemaId + type: object + BoxCreationTableNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - $ref: '#/components/schemas/StructuredTableApiIdentifiers' + - properties: + boxSchemaId: + example: boxsch_MAbGlEtf + type: string + type: + enum: + - box_creation_table + type: string + type: object + BoxSchema: + allOf: + - $ref: '#/components/schemas/RegistrySchema' + - properties: + containerSchema: + nullable: true + properties: + id: + type: string + name: + type: string + type: object + height: + type: number + type: + enum: + - box + readOnly: true + type: string + width: + type: number + type: object + BoxSchemasList: + properties: + boxSchemas: + items: + $ref: '#/components/schemas/BoxSchema' + readOnly: true + type: array + type: object + BoxSchemasPaginatedList: + allOf: + - $ref: '#/components/schemas/BoxSchemasList' + - properties: + nextToken: + type: string + type: object + BoxUpdate: + additionalProperties: false + properties: + fields: + $ref: '#/components/schemas/Fields' + name: + type: string + parentStorageId: + type: string + projectId: + type: string + type: object + BoxesArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of boxes along with any IDs of containers + that were archived / unarchived. + + ' + properties: + boxIds: + items: + type: string + type: array + containerIds: + items: + type: string + type: array + type: object + BoxesArchive: + additionalProperties: false + properties: + boxIds: + description: Array of box IDs + items: + type: string + type: array + reason: + description: 'Reason that boxes are being archived. + + ' + enum: + - Made in error + - Retired + - Expended + - Shipped + - Contaminated + - Expired + - Missing + - Other + type: string + shouldRemoveBarcodes: + description: 'Remove barcodes. Removing barcodes from archived inventory + that contain items will also remove barcodes from the contained items. + + ' + type: boolean + required: + - boxIds + - reason + type: object + BoxesBulkGet: + properties: + boxes: + items: + $ref: '#/components/schemas/Box' + type: array + type: object + BoxesPaginatedList: + properties: + boxes: + items: + $ref: '#/components/schemas/Box' + type: array + nextToken: + type: string + type: object + BoxesUnarchive: + additionalProperties: false + properties: + boxIds: + description: Array of box IDs + items: + type: string + type: array + required: + - boxIds + type: object + BulkCreateAaSequencesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + aaSequences: + items: + $ref: '#/components/schemas/AaSequence' + type: array + type: object + type: object + type: object + BulkCreateContainersAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + containers: + items: + $ref: '#/components/schemas/Container' + type: array + type: object + type: object + type: object + BulkCreateCustomEntitiesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + customEntities: + items: + $ref: '#/components/schemas/CustomEntity' + type: array + type: object + type: object + type: object + BulkCreateDnaOligosAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + dnaOligos: + items: + $ref: '#/components/schemas/DnaOligo' + type: array + type: object + type: object + type: object + BulkCreateDnaSequencesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + dnaSequences: + items: + $ref: '#/components/schemas/DnaSequence' + type: array + type: object + type: object + type: object + BulkCreateFeaturesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + features: + items: + $ref: '#/components/schemas/Feature' + type: array + type: object + type: object + type: object + BulkCreateRnaOligosAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + rnaOligos: + items: + $ref: '#/components/schemas/RnaOligo' + type: array + type: object + type: object + type: object + BulkCreateRnaSequencesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + rnaSequences: + items: + $ref: '#/components/schemas/RnaSequence' + type: array + type: object + type: object + type: object + BulkRegisterEntitiesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: {} + type: object + type: object + BulkUpdateAaSequencesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + AaSequences: + items: + $ref: '#/components/schemas/AaSequence' + type: array + type: object + type: object + type: object + BulkUpdateContainersAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + containers: + items: + $ref: '#/components/schemas/Container' + type: array + type: object + type: object + type: object + BulkUpdateCustomEntitiesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + customEntities: + items: + $ref: '#/components/schemas/CustomEntity' + type: array + type: object + type: object + type: object + BulkUpdateDnaOligosAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + dnaOligos: + items: + $ref: '#/components/schemas/DnaOligo' + type: array + type: object + type: object + type: object + BulkUpdateDnaSequencesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + dnaSequences: + items: + $ref: '#/components/schemas/DnaSequence' + type: array + type: object + type: object + type: object + BulkUpdateRnaOligosAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + rnaOligos: + items: + $ref: '#/components/schemas/RnaOligo' + type: array + type: object + type: object + type: object + BulkUpdateRnaSequencesAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + rnaSequences: + items: + $ref: '#/components/schemas/RnaSequence' + type: array + type: object + type: object + type: object + ButtonUiBlock: + allOf: + - $ref: '#/components/schemas/InteractiveUiBlock' + - properties: + text: + example: Click me to submit + type: string + type: + enum: + - BUTTON + type: string + required: + - type + - text + type: object + ButtonUiBlockCreate: + allOf: + - $ref: '#/components/schemas/ButtonUiBlock' + type: object + ButtonUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/ButtonUiBlock' + type: object + ChartNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - properties: + chart: + description: The full configuration for the chart to be displayed in-line + in this note part. + properties: + id: + description: The API identifier for this Analysis Chart. + type: string + type: object + type: + enum: + - note_linked_chart + type: string + type: object + CheckboxNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - properties: + checked: + description: 'Indicates whether the checkbox is checked or not. + + ' + type: boolean + links: + description: 'Array of links referenced in text via an @-mention, hyperlink, + or the drag-n-dropped preview attached to the note. + + ' + items: + $ref: '#/components/schemas/EntryLink' + type: array + text: + description: The textual contents of the note. + type: string + type: + enum: + - list_checkbox + type: string + type: object + description: One "line" of a checklist + CheckoutRecord: + description: ' + + *assignee field* is set if status is "RESERVED" or "CHECKED_OUT", or null + if status is "AVAILABLE". + + + *comment field* is set when container was last reserved, checked out, or checked + into. + + + *modifiedAt field* is the date and time when container was last checked out, + checked in, or reserved + + ' + properties: + assignee: + nullable: true + oneOf: + - $ref: '#/components/schemas/UserSummary' + - $ref: '#/components/schemas/TeamSummary' + comment: + type: string + modifiedAt: + format: date-time + type: string + status: + enum: + - AVAILABLE + - RESERVED + - CHECKED_OUT + type: string + type: object + ChipUiBlock: + allOf: + - properties: + id: + example: user_generated_id + type: string + type: + enum: + - CHIP + type: string + value: + type: string + required: + - type + - value + type: object + ChipUiBlockCreate: + allOf: + - $ref: '#/components/schemas/ChipUiBlock' + type: object + ChipUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/ChipUiBlock' + type: object + CodonUsageTable: + additionalProperties: false + properties: + id: + example: codtab_VfVOART1 + type: string + name: + type: string + type: object + CodonUsageTablesPaginatedList: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + codonUsageTables: + items: + $ref: '#/components/schemas/CodonUsageTable' + type: array + type: object + ConflictError: + properties: + error: + allOf: + - $ref: '#/components/schemas/BaseError' + - properties: + conflicts: + items: + type: object + type: array + type: object + Container: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + readOnly: true + barcode: + nullable: true + type: string + checkoutRecord: + allOf: + - $ref: '#/components/schemas/CheckoutRecord' + readOnly: true + contents: + items: + $ref: '#/components/schemas/ContainerContent' + readOnly: true + type: array + createdAt: + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + readOnly: true + fields: + $ref: '#/components/schemas/Fields' + id: + example: con_ZBL9QQWD + readOnly: true + type: string + modifiedAt: + format: date-time + readOnly: true + type: string + name: + type: string + parentStorageId: + nullable: true + type: string + parentStorageSchema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + readOnly: true + projectId: + nullable: true + type: string + quantity: + $ref: '#/components/schemas/ContainerQuantity' + restrictedSampleParties: + items: + anyOf: + - $ref: '#/components/schemas/UserSummary' + - $ref: '#/components/schemas/TeamSummary' + type: array + restrictionStatus: + allOf: + - $ref: '#/components/schemas/SampleRestrictionStatus' + role: + allOf: + - $ref: '#/components/schemas/ExperimentalWellRole' + nullable: true + sampleOwners: + items: + anyOf: + - $ref: '#/components/schemas/UserSummary' + - $ref: '#/components/schemas/TeamSummary' + type: array + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + readOnly: true + volume: + $ref: '#/components/schemas/DeprecatedContainerVolumeForResponse' + webURL: + readOnly: true + type: string + type: object + ContainerBulkUpdateItem: + allOf: + - $ref: '#/components/schemas/ContainerWriteBase' + - properties: + concentration: + allOf: + - $ref: '#/components/schemas/Measurement' + description: 'Concentration for the container. Only valid for single content + containers. Null values will be ignored. + + ' + example: + units: g/mL + value: 10 + containerId: + type: string + quantity: + $ref: '#/components/schemas/ContainerQuantity' + volume: + $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' + required: + - containerId + ContainerContent: + properties: + batch: + allOf: + - $ref: '#/components/schemas/BatchOrInaccessibleResource' + nullable: true + concentration: + $ref: '#/components/schemas/Measurement' + entity: + allOf: + - $ref: '#/components/schemas/EntityOrInaccessibleResource' + nullable: true + type: object + ContainerContentUpdate: + additionalProperties: false + properties: + concentration: + $ref: '#/components/schemas/Measurement' + required: + - concentration + type: object + ContainerContentsList: + properties: + contents: + items: + $ref: '#/components/schemas/ContainerContent' + readOnly: true + type: array + type: object + ContainerCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/ContainerWriteBase' + - properties: + barcode: + type: string + projectId: + nullable: true + type: string + schemaId: + type: string + writeOnly: true + required: + - schemaId + type: object + ContainerLabels: + properties: + barcode: + example: VIAL001 + type: string + id: + example: cnt_12345 + type: string + name: + example: My Container + type: string + type: object + ContainerQuantity: + description: Quantity of a container, well, or transfer. Supports mass, volume, + and other quantities. + properties: + units: + enum: + - L + - mL + - uL + - nL + - pL + - gal (US) + - qt (US) + - pt (US) + - kg + - g + - mg + - ug + - ng + - pg + - lb + - oz + - mol + - mmol + - umol + - nmol + - pmol + - cells + - (x10^3) cells + - (x10^4) cells + - (x10^5) cells + - (x10^6) cells + - (x10^7) cells + - (x10^8) cells + - (x10^9) cells + - items + - units + - null + example: mL + nullable: true + type: string + value: + example: 10 + nullable: true + type: number + type: object + ContainerSchema: + allOf: + - $ref: '#/components/schemas/RegistrySchema' + - properties: + modifiedAt: + description: DateTime the Container Schema was last modified + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + type: string + type: + enum: + - container + readOnly: true + type: string + type: object + ContainerSchemasList: + properties: + containerSchemas: + items: + $ref: '#/components/schemas/ContainerSchema' + readOnly: true + type: array + type: object + ContainerSchemasPaginatedList: + allOf: + - $ref: '#/components/schemas/ContainerSchemasList' + - properties: + nextToken: + type: string + type: object + ContainerTransfer: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/ContainerTransferBase' + - properties: + destinationContents: + description: 'This represents what the contents of the destination container + should look like post-transfer. + + ' + items: + $ref: '#/components/schemas/ContainerTransferDestinationContentsItem' + type: array + destinationQuantity: + allOf: + - $ref: '#/components/schemas/ContainerQuantity' + description: 'This represents the desired final quantity of the destination + container, post-dilution. If you don''t want to dilute the destination + container, you can omit this parameter. Supports mass, volume, and other + quantities. + + ' + destinationVolume: + allOf: + - $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' + description: 'Deprecated - use destinationQuantity instead. + + ' + required: + - destinationContents + type: object + type: object + ContainerTransferBase: + properties: + restrictedSamplePartyIds: + description: 'IDs of users or teams to be set as restricted sample parties + for the destination container. If not specified, restricted sample parties + from the source container, if present, will be added to those of the destination + container. This only applies to stand-alone containers. + + ' + items: + type: string + type: array + restrictionStatus: + allOf: + - $ref: '#/components/schemas/SampleRestrictionStatus' + description: 'Restriction status of the destination container, either RESTRICTED + or UNRESTRICTED. If not specified, the restriction status of the destination + container will be the more restrictive of the source container, if present, + and destination container restriction statuses. This only applies to stand-alone + containers (Plate wells are always set to NOT_APPLICABLE). + + ' + sampleOwnerIds: + description: 'IDs of users or teams to be set as sample owners for the destination + container. If not specified, restricted sample parties from the source + container, if present, will be added to those of the destination container. + This only applies to stand-alone containers. + + ' + items: + type: string + type: array + sourceBatchId: + description: 'ID of the batch that will be transferred in. Must specify + one of sourceEntityId, sourceBatchId, or sourceContainerId. + + ' + type: string + sourceContainerId: + description: 'ID of the container that will be transferred in. Must specify + one of sourceEntityId, sourceBatchId, or sourceContainerId. + + ' + type: string + sourceEntityId: + description: 'ID of the entity that will be transferred in. Must specify + one of sourceEntityId, sourceBatchId, or sourceContainerId. + + ' + type: string + transferQuantity: + allOf: + - $ref: '#/components/schemas/ContainerQuantity' + description: 'This represents the quantity of the source to be transferred + into the destination container. Supports mass, volume, and other quantities. + Required in place of transferVolume. + + ' + transferVolume: + allOf: + - $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' + description: 'Deprecated - use transferQuantity instead. + + ' + type: object + ContainerTransferDestinationContentsItem: + properties: + concentration: + $ref: '#/components/schemas/Measurement' + entityId: + type: string + required: + - entityId + type: object + ContainerUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/ContainerWriteBase' + - properties: + projectId: + nullable: true + type: string + quantity: + $ref: '#/components/schemas/ContainerQuantity' + role: + allOf: + - $ref: '#/components/schemas/ExperimentalWellRole' + description: Role of a well in a well plate. + nullable: true + volume: + $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' + ContainerWithCoordinates: + allOf: + - $ref: '#/components/schemas/Container' + - properties: + gridNumber: + type: number + gridPosition: + type: string + type: object + ContainerWriteBase: + properties: + fields: + $ref: '#/components/schemas/Fields' + name: + type: string + parentStorageId: + description: ID of containing parent inventory, can also specify a coordinate + for plates and boxes (e.g. plt_2bAks9dx:a2). + type: string + restrictedSamplePartyIds: + description: 'IDs of users or teams who have access to use a restricted + container. Fixed plate wells and unrestricted containers do not have restricted + sample parties. + + ' + items: + type: string + type: array + restrictionStatus: + allOf: + - $ref: '#/components/schemas/SampleRestrictionStatus' + description: 'Either RESTRICTED or UNRESTRICTED. This only applies to stand-alone + containers (Plate wells are always set to NOT_APPLICABLE). + + ' + sampleOwnerIds: + description: 'IDs of users or teams who are sample owners for the container. + Fixed plate wells do not have sample owners. + + ' + items: + type: string + type: array + ContainersArchivalChange: + description: 'IDs of all items that were unarchived, grouped by resource type. + This includes the IDs of containers that were unarchived. + + ' + properties: + containerIds: + items: + type: string + type: array + type: object + ContainersArchive: + additionalProperties: false + properties: + containerIds: + description: Array of container IDs + items: + type: string + type: array + reason: + description: 'Reason that containers are being archived. + + ' + enum: + - Made in error + - Retired + - Expended + - Shipped + - Contaminated + - Expired + - Missing + - Other + type: string + shouldRemoveBarcodes: + description: 'Remove barcodes. Removing barcodes from archived inventory + that contain items will also remove barcodes from the contained items. + + ' + type: boolean + required: + - containerIds + - reason + type: object + ContainersBulkCreateRequest: + additionalProperties: false + properties: + containers: + items: + $ref: '#/components/schemas/ContainerCreate' + maxItems: 1000 + type: array + required: + - containers + type: object + ContainersBulkUpdateRequest: + additionalProperties: false + properties: + containers: + items: + $ref: '#/components/schemas/ContainerBulkUpdateItem' + type: array + required: + - containers + type: object + ContainersCheckin: + additionalProperties: false + properties: + comments: + type: string + containerIds: + description: Array of container IDs. + items: + type: string + type: array + required: + - containerIds + type: object + ContainersCheckout: + additionalProperties: false + properties: + assigneeId: + description: User or Team API ID. + type: string + comment: + type: string + containerIds: + description: Array of container IDs. + items: + type: string + type: array + required: + - containerIds + - assigneeId + type: object + ContainersList: + properties: + containers: + items: + $ref: '#/components/schemas/Container' + type: array + type: object + ContainersPaginatedList: + allOf: + - $ref: '#/components/schemas/ContainersList' + - $ref: '#/components/schemas/Pagination' + ContainersUnarchive: + additionalProperties: false + properties: + containerIds: + description: Array of container IDs + items: + type: string + type: array + required: + - containerIds + type: object + CreateConsensusAlignmentAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + $ref: '#/components/schemas/DnaAlignment' + type: object + type: object + CreateEntityIntoRegistry: + properties: + entityRegistryId: + description: 'Entity registry ID to set for the registered entity. Cannot + specify both entityRegistryId and namingStrategy at the same time. + + ' + type: string + folderId: + description: ID of the folder containing the entity. Can be left empty when + registryId is present. + type: string + namingStrategy: + $ref: '#/components/schemas/NamingStrategy' + registryId: + description: 'Registry ID into which entity should be registered. this is + the ID of the registry which was configured for a particular organization + + To get available registryIds, use the [/registries endpoint](#/Registry/listRegistries) + + + Required in order for entities to be created directly in the registry. + + ' + type: string + type: object + CreateNucleotideConsensusAlignmentAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + $ref: '#/components/schemas/NucleotideAlignment' + type: object + type: object + CreateNucleotideTemplateAlignmentAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + $ref: '#/components/schemas/NucleotideAlignment' + type: object + type: object + CreateTemplateAlignmentAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + $ref: '#/components/schemas/DnaAlignment' + type: object + type: object + CreationOrigin: + properties: + application: + nullable: true + readOnly: true + type: string + originId: + nullable: true + readOnly: true + type: string + originModalUuid: + format: uuid + nullable: true + readOnly: true + type: string + originType: + nullable: true + readOnly: true + type: string + type: object + CustomEntitiesArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of custom entities along with any IDs + of batches that were archived (or unarchived). + + ' + properties: + batchIds: + items: + type: string + type: array + customEntityIds: + items: + type: string + type: array + type: object + CustomEntitiesArchive: + additionalProperties: false + description: 'The request body for archiving custom entities. + + ' + properties: + customEntityIds: + items: + type: string + type: array + reason: + $ref: '#/components/schemas/EntityArchiveReason' + required: + - reason + - customEntityIds + type: object + CustomEntitiesBulkCreateRequest: + additionalProperties: false + properties: + customEntities: + items: + $ref: '#/components/schemas/CustomEntityBulkCreate' + maxItems: 2500 + type: array + required: + - customEntities + CustomEntitiesBulkUpdateRequest: + additionalProperties: false + properties: + customEntities: + items: + $ref: '#/components/schemas/CustomEntityBulkUpdate' + maxItems: 2500 + type: array + required: + - customEntities + CustomEntitiesBulkUpsertRequest: + additionalProperties: false + properties: + customEntities: + items: + $ref: '#/components/schemas/CustomEntityBulkUpsertRequest' + maxItems: 2500 + type: array + required: + - customEntities + type: object + CustomEntitiesList: + properties: + customEntities: + items: + $ref: '#/components/schemas/CustomEntity' + type: array + type: object + CustomEntitiesPaginatedList: + properties: + customEntities: + items: + $ref: '#/components/schemas/CustomEntity' + type: array + nextToken: + type: string + type: object + CustomEntitiesUnarchive: + additionalProperties: false + description: 'The request body for unarchiving custom entities. + + ' + properties: + customEntityIds: + items: + type: string + type: array + required: + - customEntityIds + type: object + CustomEntity: + properties: + aliases: + items: + example: sBN000 + type: string + type: array + apiURL: + description: The canonical url of the Custom Entity in the API. + example: https://benchling.com/api/v2/custom-entities/bfi_xCUXNVyG + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + authors: + items: + $ref: '#/components/schemas/UserSummary' + type: array + createdAt: + example: '2017-04-18T05:54:56.247545+00:00' + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + - readOnly: true + customFields: + $ref: '#/components/schemas/CustomFields' + entityRegistryId: + example: sBN000 + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + folderId: + example: lib_R8KcsjhW + nullable: true + type: string + id: + example: bfi_xCUXNVyG + type: string + modifiedAt: + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + readOnly: true + type: string + name: + example: sBN000 + type: string + registrationOrigin: + allOf: + - $ref: '#/components/schemas/RegistrationOrigin' + nullable: true + readOnly: true + registryId: + example: src_NetYd96a + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + example: + id: ts_EM122lfJ + name: Strain + nullable: true + webURL: + example: https://benchling.com/benchling/f/R8KcsjhW-academic-registry/bfi-xCUXNVyG-sbn000/edit + readOnly: true + type: string + type: object + CustomEntityBaseRequest: + properties: + aliases: + description: Aliases to add to the custom entity + items: + type: string + type: array + authorIds: + description: IDs of users to set as the custom entity's authors. + items: + type: string + type: array + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: 'Custom fields to add to the custom entity. Every field should + have its name as a key, mapping to an object with information about the + value of the field. + + ' + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Schema fields to set on the custom entity. Must correspond + with the schema''s field definitions. Every field should have its name + as a key, mapping to an object with information about the value of the + field. + + ' + folderId: + description: ID of the folder that the entity is moved into + type: string + name: + type: string + schemaId: + type: string + type: object + CustomEntityBaseRequestForCreate: + allOf: + - $ref: '#/components/schemas/CustomEntityBaseRequest' + - required: + - name + - schemaId + CustomEntityBulkCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/CustomEntityCreate' + CustomEntityBulkUpdate: + additionalProperties: true + allOf: + - $ref: '#/components/schemas/CustomEntityBaseRequest' + properties: + id: + type: string + required: + - id + CustomEntityBulkUpsertRequest: + allOf: + - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' + - $ref: '#/components/schemas/CustomEntityBaseRequestForCreate' + CustomEntityCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/CustomEntityBaseRequestForCreate' + - $ref: '#/components/schemas/CreateEntityIntoRegistry' + CustomEntityRequestRegistryFields: + properties: + entityRegistryId: + type: string + type: object + CustomEntitySummary: + properties: + entityType: + enum: + - custom_entity + type: string + id: + example: bfi_xCUXNVyG + type: string + type: + deprecated: true + type: string + type: object + CustomEntityUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/CustomEntityBaseRequest' + - $ref: '#/components/schemas/CustomEntityRequestRegistryFields' + CustomEntityUpsertRequest: + allOf: + - $ref: '#/components/schemas/EntityUpsertBaseRequest' + - $ref: '#/components/schemas/CustomEntityBaseRequestForCreate' + CustomEntityWithEntityType: + allOf: + - $ref: '#/components/schemas/CustomEntity' + - properties: + entityType: + enum: + - custom_entity + type: string + type: object + type: object + CustomField: + properties: + value: + type: string + type: object + CustomFields: + additionalProperties: + $ref: '#/components/schemas/CustomField' + example: + Legacy ID: + value: STR100 + type: object + CustomNotation: + properties: + id: + example: sntx_lRe007yZ + type: string + name: + example: Your Custom Notation + type: string + type: object + CustomNotationRequest: + properties: + customNotation: + description: Representation of the sequence or oligo in the custom notation + specified by customNotationId + type: string + customNotationId: + description: ID of the notation used to interpret the string provided in + the customNotation field + type: string + type: object + CustomNotationsPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + customNotations: + items: + $ref: '#/components/schemas/CustomNotation' + type: array + type: object + DateAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - properties: + type: + enum: + - date + type: string + value: + example: '2022-01-01' + nullable: true + type: string + DatetimeAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - properties: + type: + enum: + - datetime + type: string + value: + example: 2022-03-18 05:14:35 PM + nullable: true + type: string + DeprecatedAutomationOutputProcessorsPaginatedList: + description: Deprecated - A paginated list of automation output processors + properties: + automationOutputProcessors: + items: + $ref: '#/components/schemas/AutomationOutputProcessor' + type: array + nextToken: + example: Im5ldyB0ZXN0Ig== + type: string + type: object + DeprecatedContainerVolumeForInput: + description: 'Desired volume for a container, well, or transfer. "volume" type + keys are deprecated in API requests; use the more permissive "quantity" type + key instead. + + ' + properties: + units: + enum: + - pL + - nL + - uL + - mL + - L + - null + example: mL + nullable: true + type: string + value: + example: 10 + nullable: true + type: number + type: object + DeprecatedContainerVolumeForResponse: + allOf: + - $ref: '#/components/schemas/ContainerQuantity' + - description: 'The deprecated "volume" type key in API responses can also contain + non-volume quantities for back-compatibility purposes. Use the "quantity" + type key instead. + + ' + DeprecatedEntitySchema: + allOf: + - $ref: '#/components/schemas/EntitySchema' + - properties: + type: + enum: + - custom_entity + - dna_sequence + - aa_sequence + - mixture + - dna_oligo + - rna_oligo + - molecule + - entry + readOnly: true + type: string + type: object + DeprecatedEntitySchemasList: + properties: + entitySchemas: + items: + $ref: '#/components/schemas/DeprecatedEntitySchema' + readOnly: true + type: array + type: object + DnaAlignment: + allOf: + - $ref: '#/components/schemas/DnaAlignmentSummary' + - properties: + alignedSequences: + items: + $ref: '#/components/schemas/AlignedSequence' + type: array + type: object + type: object + DnaAlignmentBase: + properties: + algorithm: + enum: + - mafft + - clustalo + type: string + files: + items: + oneOf: + - properties: + sequenceId: + example: seq_3cxbVcCf + type: string + type: object + - $ref: '#/components/schemas/DnaTemplateAlignmentFile' + type: array + name: + example: my new alignment + type: string + required: + - algorithm + - files + type: object + DnaAlignmentSummary: + properties: + apiURL: + description: The canonical url of the DNA Alignment in the API. + example: https://benchling.com/api/v2/dna-alignments/seqanl_6ZVdX98t + format: uri + type: string + createdAt: + description: DateTime the DNA Alignment was created + format: date-time + type: string + id: + example: seqanl_6ZVdX98t + type: string + modifiedAt: + description: DateTime the DNA Alignment was last modified + format: date-time + type: string + name: + type: string + referenceSequenceId: + description: The ID of the template or consensus DNA Sequence associated + with the DNA Alignment + example: seq_MYmsnS1u + type: string + webURL: + description: The Benchling web UI url to view the DNA Alignment + format: uri + type: string + type: object + DnaAlignmentsPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + dnaAlignments: + items: + $ref: '#/components/schemas/DnaAlignmentSummary' + type: array + type: object + DnaAnnotation: + allOf: + - $ref: '#/components/schemas/SequenceFeatureBase' + - properties: + end: + description: 0-based exclusive end index. The end of the sequence is always + represented as 0. + type: integer + start: + description: 0-based inclusive start index. + type: integer + strand: + maximum: 1 + minimum: -1 + type: integer + type: + type: string + type: object + DnaConsensusAlignmentCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/DnaAlignmentBase' + - properties: + newSequence: + properties: + folderId: + example: lib_qQFY3WQH + type: string + type: object + sequenceId: + type: string + DnaOligo: + allOf: + - $ref: '#/components/schemas/Oligo' + - properties: + annotations: + description: Annotations on the Oligo. + items: + $ref: '#/components/schemas/DnaAnnotation' + type: array + apiURL: + example: https://benchling.com/api/v2/dna-oligos/seq_bhuDUw9D + type: string + bases: + example: ACTTTTT + type: string + customNotation: + description: Representation of the oligo in the custom notation specified + in the request. Null if no notation was specified. + nullable: true + type: string + customNotationName: + description: Name of the custom notation specified in the request. Null + if no notation was specified. + nullable: true + type: string + helm: + description: Representation of the oligo in HELM syntax, including any + chemical modifications + example: RNA1{d(A)p.d(C)[Ssp].d(T)p.d(T)p.d(T)p.d(T)p.d(T)p}$$$$V2.0 + type: string + DnaOligoBulkUpdate: + additionalProperties: false + allOf: + - properties: + id: + type: string + type: object + - $ref: '#/components/schemas/DnaOligoUpdate' + DnaOligoCreate: + allOf: + - $ref: '#/components/schemas/OligoCreate' + - properties: + annotations: + description: Annotations on the Oligo. + items: + $ref: '#/components/schemas/DnaAnnotation' + type: array + helm: + description: Representation of the oligo in HELM syntax, including any + chemical modifications + example: RNA1{d(A)p.d([impd2G])p.d(G)[Ssp].d(A)p.d(T)p.d(T)p}$$$$V2.0 + type: string + - $ref: '#/components/schemas/CustomNotationRequest' + - required: + - name + DnaOligoUpdate: + allOf: + - $ref: '#/components/schemas/OligoUpdate' + - properties: + annotations: + description: Annotations on the Oligo. + items: + $ref: '#/components/schemas/DnaAnnotation' + type: array + helm: + description: Representation of the oligo in HELM syntax, including any + chemical modifications + example: RNA1{d(A)p.d([impd2G])p.d(G)[Ssp].d(A)p.d(T)p.d(T)p}$$$$V2.0 + type: string + - $ref: '#/components/schemas/CustomNotationRequest' + DnaOligoWithEntityType: + allOf: + - $ref: '#/components/schemas/DnaOligo' + - properties: + entityType: + enum: + - dna_oligo + type: string + type: object + type: object + DnaOligosArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of DNA Oligos along with any IDs of batches + that were archived / unarchived. + + ' + properties: + batchIds: + items: + type: string + type: array + dnaOligoIds: + items: + type: string + type: array + type: object + DnaOligosArchive: + additionalProperties: false + description: 'The request body for archiving DNA Oligos. + + ' + properties: + dnaOligoIds: + items: + type: string + type: array + reason: + $ref: '#/components/schemas/EntityArchiveReason' + required: + - reason + - dnaOligoIds + type: object + DnaOligosBulkCreateRequest: + additionalProperties: false + properties: + dnaOligos: + items: + $ref: '#/components/schemas/DnaOligoCreate' + maxItems: 1000 + type: array + type: object + DnaOligosBulkUpdateRequest: + additionalProperties: false + properties: + dnaOligos: + items: + $ref: '#/components/schemas/DnaOligoBulkUpdate' + type: array + type: object + DnaOligosBulkUpsertRequest: + additionalProperties: false + maxItems: 1000 + properties: + dnaOligos: + items: + $ref: '#/components/schemas/OligoBulkUpsertRequest' + type: array + required: + - dnaOligos + type: object + DnaOligosPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + dnaOligos: + items: + $ref: '#/components/schemas/DnaOligo' + type: array + DnaOligosUnarchive: + additionalProperties: false + description: 'The request body for unarchiving DNA Oligos. + + ' + properties: + dnaOligoIds: + items: + type: string + type: array + required: + - dnaOligoIds + type: object + DnaSequence: + properties: + aliases: + items: + type: string + type: array + annotations: + items: + $ref: '#/components/schemas/DnaAnnotation' + type: array + apiURL: + description: The canonical url of the DNA Sequence in the API. + example: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + bases: + type: string + createdAt: + format: date-time + readOnly: true + type: string + creator: + $ref: '#/components/schemas/UserSummary' + customFields: + $ref: '#/components/schemas/CustomFields' + entityRegistryId: + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + folderId: + nullable: true + type: string + id: + type: string + isCircular: + type: boolean + length: + type: integer + modifiedAt: + format: date-time + readOnly: true + type: string + name: + type: string + parts: + items: + $ref: '#/components/schemas/DnaSequencePart' + type: array + primers: + items: + $ref: '#/components/schemas/Primer' + type: array + registrationOrigin: + allOf: + - $ref: '#/components/schemas/RegistrationOrigin' + nullable: true + readOnly: true + registryId: + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + translations: + items: + $ref: '#/components/schemas/Translation' + type: array + webURL: + readOnly: true + type: string + type: object + DnaSequenceBaseRequest: + properties: + aliases: + description: Aliases to add to the DNA sequence + items: + type: string + type: array + annotations: + description: 'Annotations to create on the DNA sequence. + + ' + items: + $ref: '#/components/schemas/DnaAnnotation' + type: array + authorIds: + description: IDs of users to set as the DNA sequence's authors. + items: + type: string + type: array + bases: + description: 'Base pairs for the DNA sequence. + + ' + type: string + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: 'Custom fields to add to the DNA sequence. Every field should + have its name as a key, mapping to an object with information about the + value of the field. + + ' + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Fields to set on the DNA sequence. Must correspond with the + schema''s field definitions. Every field should have its name as a key, + mapping to an object with information about the value of the field. + + ' + folderId: + description: 'ID of the folder containing the DNA sequence. + + ' + type: string + isCircular: + description: 'Whether the DNA sequence is circular or linear. + + ' + type: boolean + name: + description: 'Name of the DNA sequence. + + ' + type: string + parts: + items: + $ref: '#/components/schemas/DnaSequencePart' + type: array + primers: + items: + $ref: '#/components/schemas/Primer' + type: array + schemaId: + description: 'ID of the DNA sequence''s schema. + + ' + type: string + translations: + description: 'Translations to create on the DNA sequence. Translations are + specified by either a combination of ''start'' and ''end'' fields, or + a list of regions. Both cannot be provided. + + ' + items: + $ref: '#/components/schemas/Translation' + type: array + type: object + DnaSequenceBaseRequestForCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/DnaSequenceBaseRequest' + - required: + - bases + - isCircular + - name + DnaSequenceBulkCreate: + allOf: + - $ref: '#/components/schemas/DnaSequenceCreate' + DnaSequenceBulkUpdate: + additionalProperties: false + allOf: + - properties: + id: + type: string + type: object + - $ref: '#/components/schemas/DnaSequenceBaseRequest' + DnaSequenceBulkUpsertRequest: + allOf: + - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' + - $ref: '#/components/schemas/DnaSequenceBaseRequestForCreate' + - required: + - annotations + - primers + DnaSequenceCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/DnaSequenceBaseRequestForCreate' + - $ref: '#/components/schemas/CreateEntityIntoRegistry' + DnaSequencePart: + allOf: + - $ref: '#/components/schemas/NucleotideSequencePart' + - properties: + strand: + example: 1 + maximum: 1 + minimum: -1 + type: integer + type: object + DnaSequenceRequestRegistryFields: + properties: + entityRegistryId: + type: string + type: object + DnaSequenceSummary: + properties: + entityType: + enum: + - dna_sequence + type: string + id: + example: seq_ObbdtGhC + type: string + type: + deprecated: true + type: string + type: object + DnaSequenceUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/DnaSequenceBaseRequest' + - $ref: '#/components/schemas/DnaSequenceRequestRegistryFields' + DnaSequenceUpsertRequest: + allOf: + - $ref: '#/components/schemas/EntityUpsertBaseRequest' + - $ref: '#/components/schemas/DnaSequenceBaseRequestForCreate' + - required: + - annotations + - primers + DnaSequenceWithEntityType: + allOf: + - $ref: '#/components/schemas/DnaSequence' + - properties: + entityType: + enum: + - dna_sequence + type: string + type: object + type: object + DnaSequencesArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of DNA sequences along with any IDs of + batches that were archived / unarchived. + + ' + properties: + batchIds: + items: + type: string + type: array + dnaSequenceIds: + items: + type: string + type: array + type: object + DnaSequencesArchive: + additionalProperties: false + description: 'The request body for archiving DNA sequences. + + ' + properties: + dnaSequenceIds: + items: + type: string + type: array + reason: + $ref: '#/components/schemas/EntityArchiveReason' + required: + - reason + - dnaSequenceIds + type: object + DnaSequencesBulkCreateRequest: + additionalProperties: false + properties: + dnaSequences: + items: + $ref: '#/components/schemas/DnaSequenceBulkCreate' + maxItems: 1000 + type: array + type: object + DnaSequencesBulkGet: + properties: + dnaSequences: + items: + $ref: '#/components/schemas/DnaSequence' + type: array + type: object + DnaSequencesBulkUpdateRequest: + additionalProperties: false + properties: + dnaSequences: + items: + $ref: '#/components/schemas/DnaSequenceBulkUpdate' + type: array + type: object + DnaSequencesBulkUpsertRequest: + additionalProperties: false + maxItems: 1000 + properties: + dnaSequences: + items: + $ref: '#/components/schemas/DnaSequenceBulkUpsertRequest' + type: array + required: + - dnaSequences + type: object + DnaSequencesFindMatchingRegion: + additionalProperties: false + properties: + registryId: + description: An optional Registry ID to restrict the region search to + example: src_ae40j3TZ + type: string + schemaId: + description: API ID for an Entity Schema. Restricts results to DNA Sequences + of this schema type. + example: ts_n4l12nf0 + type: string + targetDnaSequenceIds: + description: API IDs of the DNA sequences which matching regions will be + found for + example: + - seq_W7KgYydE + - seq_g7SI2nih + items: + type: string + maxItems: 1000 + type: array + required: + - targetDnaSequenceIds + - schemaId + type: object + DnaSequencesPaginatedList: + properties: + dnaSequences: + items: + $ref: '#/components/schemas/DnaSequence' + type: array + nextToken: + type: string + type: object + DnaSequencesUnarchive: + additionalProperties: false + description: 'The request body for unarchiving DNA sequences. + + ' + properties: + dnaSequenceIds: + items: + type: string + type: array + required: + - dnaSequenceIds + type: object + DnaTemplateAlignmentCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/DnaAlignmentBase' + - properties: + templateSequenceId: + example: seq_rXqq0IHU + type: string + required: + - templateSequenceId + type: object + DnaTemplateAlignmentFile: + properties: + data: + format: byte + type: string + name: + type: string + type: object + Dropdown: + allOf: + - $ref: '#/components/schemas/DropdownSummary' + - properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + options: + description: Array of dropdown options + items: + $ref: '#/components/schemas/DropdownOption' + type: array + type: object + description: Dropdowns are registry-wide enums. Use dropdowns to standardize + on spelling and naming conventions, especially for important metadata like + resistance markers. + DropdownCreate: + additionalProperties: false + properties: + name: + description: Name of the dropdown + type: string + options: + description: Options to set for the dropdown + items: + $ref: '#/components/schemas/DropdownOptionCreate' + type: array + registryId: + description: ID of registry in which to create the dropdown. Required if + multiple registries exist. + nullable: true + pattern: ^src_\w+ + type: string + required: + - name + - options + type: object + DropdownFieldDefinition: + allOf: + - $ref: '#/components/schemas/FieldDefinition' + - properties: + dropdownId: + nullable: true + type: string + type: + enum: + - dropdown + type: string + type: object + DropdownMultiValueUiBlock: + allOf: + - $ref: '#/components/schemas/UserInputMultiValueUiBlock' + - $ref: '#/components/schemas/BaseDropdownUIBlock' + - properties: + type: + enum: + - DROPDOWN_MULTIVALUE + type: string + required: + - type + type: object + DropdownMultiValueUiBlockCreate: + allOf: + - $ref: '#/components/schemas/DropdownMultiValueUiBlock' + type: object + DropdownMultiValueUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/DropdownMultiValueUiBlock' + type: object + DropdownOption: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + id: + type: string + name: + type: string + type: object + DropdownOptionCreate: + properties: + name: + type: string + required: + - name + type: object + DropdownOptionUpdate: + properties: + id: + description: ID of the dropdown option to update, omitted if creating a + new option. + example: sfs_9cGQIqS3 + pattern: ^sfs_\w+ + type: string + name: + description: Name of the dropdown option. + type: string + required: + - name + type: object + DropdownOptionsArchivalChange: + description: 'IDs of all items that were archived or unarchived. + + ' + properties: + dropdownOptionIds: + items: + type: string + type: array + type: object + DropdownOptionsArchive: + additionalProperties: false + properties: + dropdownOptionIds: + description: Array of dropdown option IDs + items: + type: string + type: array + reason: + description: 'Reason that dropdown options are being archived. + + ' + enum: + - Made in error + - Retired + - Other + type: string + type: object + DropdownOptionsUnarchive: + additionalProperties: false + properties: + dropdownOptionIds: + description: Array of dropdown option IDs + items: + type: string + type: array + type: object + DropdownSummariesPaginatedList: + properties: + dropdowns: + items: + $ref: '#/components/schemas/DropdownSummary' + type: array + nextToken: + type: string + type: object + DropdownSummary: + properties: + id: + description: ID of the dropdown + type: string + name: + description: Name of the dropdown + type: string + type: object + DropdownUiBlock: + allOf: + - $ref: '#/components/schemas/UserInputUiBlock' + - $ref: '#/components/schemas/BaseDropdownUIBlock' + - properties: + type: + enum: + - DROPDOWN + type: string + required: + - type + type: object + DropdownUiBlockCreate: + allOf: + - $ref: '#/components/schemas/DropdownUiBlock' + type: object + DropdownUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/DropdownUiBlock' + type: object + DropdownUpdate: + additionalProperties: false + properties: + options: + description: Options to set for the dropdown + items: + $ref: '#/components/schemas/DropdownOptionUpdate' + type: array + required: + - options + type: object + DropdownsRegistryList: + properties: + dropdowns: + items: + $ref: '#/components/schemas/DropdownSummary' + type: array + type: object + EmptyObject: + type: object + EntitiesBulkUpsertRequest: + additionalProperties: false + properties: + aaSequences: + items: + $ref: '#/components/schemas/AaSequenceBulkUpsertRequest' + type: array + customEntities: + items: + $ref: '#/components/schemas/CustomEntityBulkUpsertRequest' + type: array + dnaOligos: + items: + $ref: '#/components/schemas/OligoBulkUpsertRequest' + type: array + dnaSequences: + items: + $ref: '#/components/schemas/DnaSequenceBulkUpsertRequest' + type: array + molecules: + items: + $ref: '#/components/schemas/MoleculeBulkUpsertRequest' + type: array + rnaOligos: + items: + $ref: '#/components/schemas/OligoBulkUpsertRequest' + type: array + type: object + Entity: + oneOf: + - $ref: '#/components/schemas/DnaSequence' + - $ref: '#/components/schemas/AaSequence' + - $ref: '#/components/schemas/Mixture' + - $ref: '#/components/schemas/DnaOligo' + - $ref: '#/components/schemas/RnaOligo' + - $ref: '#/components/schemas/CustomEntity' + type: object + EntityArchiveReason: + description: 'The reason for archiving the provided entities. Accepted reasons + may differ based on tenant configuration. + + ' + enum: + - Made in error + - Retired + - Expended + - Shipped + - Contaminated + - Expired + - Missing + - Other + type: string + EntityBulkUpsertBaseRequest: + allOf: + - $ref: '#/components/schemas/EntityUpsertBaseRequest' + - properties: + entityRegistryId: + description: Registry ID of the entity in Benchling. + type: string + - required: + - entityRegistryId + EntityLabels: + properties: + entityRegistryId: + example: REAG000 + nullable: true + type: string + id: + example: bfi_12345 + type: string + name: + example: Deionized Water + type: string + type: object + EntityOrInaccessibleResource: + oneOf: + - $ref: '#/components/schemas/Entity' + - $ref: '#/components/schemas/InaccessibleResource' + type: object + EntityRegisteredEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + entity: + $ref: '#/components/schemas/GenericEntity' + eventType: + enum: + - v2.entity.registered + type: string + type: object + EntitySchema: + allOf: + - $ref: '#/components/schemas/RegistrySchema' + - properties: + constraint: + nullable: true + properties: + fieldDefinitionNames: + items: + type: string + type: array + hasUniqueResidues: + type: boolean + type: object + containableType: + enum: + - NONE + - ENTITY + - BATCH + type: string + modifiedAt: + description: DateTime the Entity Schema was last modified + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + type: string + type: + enum: + - custom_entity + - dna_sequence + - rna_sequence + - aa_sequence + - mixture + - dna_oligo + - rna_oligo + - molecule + readOnly: true + type: string + type: object + title: EntitySchema + EntitySchemaAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - $ref: '#/components/schemas/LinkedAppConfigResourceMixin' + - properties: + subtype: + $ref: '#/components/schemas/SchemaDependencySubtypes' + type: + enum: + - entity_schema + example: entity_schema + type: string + value: + example: ts_e59sjL23 + nullable: true + type: string + EntitySchemasPaginatedList: + properties: + entitySchemas: + items: + $ref: '#/components/schemas/EntitySchema' + readOnly: true + type: array + nextToken: + type: string + type: object + EntityUpsertBaseRequest: + properties: + archiveRecord: + $ref: '#/components/schemas/ArchiveRecordSet' + fields: + $ref: '#/components/schemas/FieldsWithResolution' + name: + type: string + registryId: + type: string + schemaId: + type: string + required: + - registryId + - name + - schemaId + type: object + Entries: + properties: + entries: + items: + $ref: '#/components/schemas/Entry' + type: array + type: object + EntriesArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of entries that changed.. + + ' + properties: + entryIds: + items: + type: string + type: array + type: object + EntriesArchive: + additionalProperties: false + properties: + entryIds: + description: Array of entry IDs + items: + type: string + type: array + reason: + description: 'Reason that entries are being archived. One of ["Made in error", + "Retired", "Other"]. + + ' + enum: + - Made in error + - Retired + - Other + type: string + required: + - entryIds + - reason + type: object + EntriesPaginatedList: + properties: + entries: + items: + $ref: '#/components/schemas/Entry' + type: array + nextToken: + type: string + type: object + EntriesUnarchive: + additionalProperties: false + properties: + entryIds: + description: Array of entry IDs + items: + type: string + type: array + required: + - entryIds + type: object + Entry: + description: 'Entries are notes that users can take. They''re organized by "days" + (which are user-configurable) and modeled within each day as a list of "notes." + Each note has a type - the simplest is a "text" type, but lists, tables, and + external files are also supported. + + + *Note:* the current Entry resource has a few limitations: + + - Formatting information is not yet supported. Header formatting, bolding, + and other stylistic information is not presented. + + - Data in tables is presented as text always - numeric values will need to + be parsed into floats or integers, as appropriate. + + + Note: Data in Results tables are not accessible through this API call. Results + table data can be called through the Results API calls. + + ' + properties: + apiURL: + description: The canonical url of the Entry in the API. + example: https://benchling.com/api/v2/entries/etr_tv7m7B78 + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + description: 'ArchiveRecord Resource if the entry is archived. This is null + if the entry is not archived. + + ' + nullable: true + assignedReviewers: + description: 'Array of users assigned to review the entry, if any. + + ' + items: + $ref: '#/components/schemas/UserSummary' + type: array + authors: + description: 'Array of UserSummary Resources of the authors of the entry. + This defaults to the creator but can be manually changed. + + ' + items: + $ref: '#/components/schemas/UserSummary' + type: array + createdAt: + description: DateTime the entry was created at + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + description: UserSummary Resource of the user who created the entry + readOnly: true + customFields: + $ref: '#/components/schemas/CustomFields' + days: + description: 'Array of day objects. Each day object has a date field (string) + and notes field (array of notes, expand further for details on note types). + + ' + items: + $ref: '#/components/schemas/EntryDay' + type: array + displayId: + description: User-friendly ID of the entry + type: string + entryTemplateId: + description: ID of the Entry Template this Entry was created from + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + folderId: + description: ID of the folder that contains the entry + type: string + id: + description: ID of the entry + type: string + modifiedAt: + description: DateTime the entry was last modified + type: string + name: + description: Title of the entry + type: string + reviewRecord: + description: Review record if set + nullable: true + properties: + comment: + description: Reviewer's Comments + type: string + status: + description: Review Status of the entry + enum: + - ACCEPTED + - NEEDS_REVIEW + - REJECTED + - RETRACTED + - ACCEPTANCE_SNAPSHOT_IN_PROGRESS + - REVIEW_SNAPSHOT_IN_PROGRESS + - IN_PROGRESS + - ACTION_REQUIRED + type: string + type: object + schema: + allOf: + - $ref: '#/components/schemas/EntrySchema' + description: Entry schema if set + nullable: true + title: SchemaProperty + type: object + webURL: + description: URL of the entry + type: string + type: object + EntryById: + properties: + entry: + $ref: '#/components/schemas/Entry' + type: object + EntryCreate: + additionalProperties: false + properties: + authorIds: + oneOf: + - deprecated: true + type: string + - description: 'IDs of users to set as the entry''s authors. Defaults to + the creator. + + ' + items: + type: string + type: array + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: Custom fields to add to the entry + entryTemplateId: + description: ID of the template to clone the entry from + type: string + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Fields to set on the entry. Must correspond with the schema''s + field definitions. + + ' + folderId: + description: ID of the folder that will contain the entry + type: string + initialTables: + description: 'An array of table API IDs and blob id pairs to seed tables + from the template while creating the entry. The entryTemplateId parameter + must be set to use this parameter. The table API IDs should be the API + Identifiers of the tables in the given template. + + - If a template table has one row, the values in that row act as default + values for cloned entries. + + - If a template table has multiple rows, there is no default value and + those rows are added to the cloned entry along with the provided csv data. + + - If a table has default values, they will be populated in any respective + undefined columns in the csv data. + + - If a table has no default values, undefined columns from csv data will + be empty. + + - If no csv data is provided for a table, the table in the entry will + be populated with whatever values are in the respective template table. + + ' + items: + $ref: '#/components/schemas/InitialTable' + type: array + name: + description: Name of the entry + type: string + schemaId: + description: ID of the entry's schema + type: string + required: + - name + - folderId + type: object + EntryCreatedEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + entry: + $ref: '#/components/schemas/Entry' + eventType: + enum: + - v2.entry.created + type: string + type: object + EntryDay: + properties: + date: + description: A Date string + type: string + notes: + items: + $ref: '#/components/schemas/EntryNotePart' + type: array + title: + description: Optional title of a section if sections are enabled. + nullable: true + type: string + type: object + EntryExternalFile: + description: 'The ExternalFile resource stores metadata about the file. The + actual original file can be downloaded by using the ''downloadURL'' property. + + ' + properties: + downloadURL: + description: 'A short-lived URL that can be used to download the original + file. + + ' + type: string + expiresAt: + description: UNIX timestamp when downloadURL expires. + type: integer + id: + description: ID of the external file + type: string + size: + description: Size, in bytes, of the external file + type: integer + type: object + EntryExternalFileById: + properties: + externalFile: + $ref: '#/components/schemas/EntryExternalFile' + type: object + EntryLink: + description: 'Links are contained within notes to reference resources that live + outside of the entry. A link can target an external resource via an http(s):// + hyperlink or a Benchling resource via @-mentions and drag-n-drop. + + ' + properties: + id: + description: 'For linked Benchling resources, this will be the ID of that + resource (e.g., ''seq_RhYGVnHF''). Omitted for "link" types. + + ' + type: string + type: + description: 'The type of resource being linked. For hyperlinks: ''link''. + For linked Benchling resources, one of: ''user'', ''request'', ''entry'', + ''stage_entry'', ''protocol'', ''workflow'', ''custom_entity'', ''aa_sequence'', + ''dna_sequence'', ''batch'', ''box'', ''container'', ''location'', ''plate'', + ''sql_dashboard''; and (for legacy support) ''insights_dashboard'', ''folder''. + + ' + enum: + - link + - user + - request + - entry + - stage_entry + - protocol + - workflow + - custom_entity + - aa_sequence + - dna_sequence + - batch + - box + - container + - location + - plate + - insights_dashboard + - folder + - sql_dashboard + type: string + webURL: + description: 'Canonical URL of the linked Benchling resource (if you have + at least READ authorization for that resource), or the explicit URL provided + as hyperlink for "link" types. Note: locations do not currently have a + URL. + + ' + nullable: true + type: string + type: object + EntryNotePart: + description: 'Notes are the main building blocks of entries. Each note corresponds + roughly to a paragraph. + + ' + discriminator: + mapping: + assay_run: '#/components/schemas/AssayRunNotePart' + box_creation_table: '#/components/schemas/BoxCreationTableNotePart' + code: '#/components/schemas/SimpleNotePart' + external_file: '#/components/schemas/ExternalFileNotePart' + inventory_container_table: '#/components/schemas/InventoryContainerTableNotePart' + inventory_plate_table: '#/components/schemas/InventoryPlateTableNotePart' + list_bullet: '#/components/schemas/SimpleNotePart' + list_checkbox: '#/components/schemas/CheckboxNotePart' + list_number: '#/components/schemas/SimpleNotePart' + lookup_table: '#/components/schemas/LookupTableNotePart' + mixture_prep_table: '#/components/schemas/MixturePrepTableNotePart' + note_linked_chart: '#/components/schemas/ChartNotePart' + plate_creation_table: '#/components/schemas/PlateCreationTableNotePart' + registration_table: '#/components/schemas/RegistrationTableNotePart' + results_table: '#/components/schemas/ResultsTableNotePart' + table: '#/components/schemas/TableNotePart' + text: '#/components/schemas/SimpleNotePart' + text_box: '#/components/schemas/TextBoxNotePart' + propertyName: type + oneOf: + - $ref: '#/components/schemas/SimpleNotePart' + - $ref: '#/components/schemas/TableNotePart' + - $ref: '#/components/schemas/TextBoxNotePart' + - $ref: '#/components/schemas/CheckboxNotePart' + - $ref: '#/components/schemas/ExternalFileNotePart' + - $ref: '#/components/schemas/AssayRunNotePart' + - $ref: '#/components/schemas/LookupTableNotePart' + - $ref: '#/components/schemas/ResultsTableNotePart' + - $ref: '#/components/schemas/RegistrationTableNotePart' + - $ref: '#/components/schemas/PlateCreationTableNotePart' + - $ref: '#/components/schemas/BoxCreationTableNotePart' + - $ref: '#/components/schemas/MixturePrepTableNotePart' + - $ref: '#/components/schemas/InventoryContainerTableNotePart' + - $ref: '#/components/schemas/InventoryPlateTableNotePart' + - $ref: '#/components/schemas/ChartNotePart' + type: object + EntrySchema: + description: Entry schema + properties: + id: + description: ID of the entry schema + type: string + modifiedAt: + description: DateTime the Entry Schema was last modified + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + type: string + name: + description: Name of the entry schema + type: string + type: object + EntrySchemaDetailed: + allOf: + - $ref: '#/components/schemas/RegistrySchema' + - properties: + type: + enum: + - entry + readOnly: true + type: string + type: object + EntrySchemasPaginatedList: + properties: + entrySchemas: + items: + $ref: '#/components/schemas/EntrySchemaDetailed' + readOnly: true + type: array + nextToken: + type: string + type: object + EntryTable: + description: 'Actual tabular data with rows and columns of text on the note. + + ' + properties: + columnLabels: + description: 'Array of strings, with one item per column. Defaults to null, + if the user is using the default, but is set if the user has given a custom + name to the column. + + ' + items: + nullable: true + type: string + type: array + name: + description: 'Name of the table - defaults to e.g. Table1 but can be renamed. + + ' + type: string + rows: + description: Array of row objects. + items: + $ref: '#/components/schemas/EntryTableRow' + type: array + type: object + EntryTableCell: + properties: + link: + allOf: + - $ref: '#/components/schemas/EntryLink' + description: 'A Link Resource if this cell contained a hyperlink. Otherwise, + link will be omitted from the cell object. (Note: inventory and user types + are not yet supported.) + + ' + text: + description: 'The textual content of the cell. If the cell was originally + a formula, this will be the evaluated version of the formula. + + ' + type: string + type: object + EntryTableRow: + description: Each has property 'cells' that is an array of cell objects + properties: + cells: + items: + $ref: '#/components/schemas/EntryTableCell' + type: array + type: object + EntryTemplate: + additionalProperties: false + description: 'Entry templates are templates that users can base new notebook + entries off of. + + ' + properties: + apiURL: + description: The canonical url of the Entry Template in the API. + example: https://benchling.com/api/v2/entry-templates/tmpl_tv7m7B78 + format: uri + readOnly: true + type: string + createdAt: + description: DateTime the template was created at + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + description: UserSummary Resource of the user who created the template + readOnly: true + customFields: + $ref: '#/components/schemas/CustomFields' + days: + description: 'Array of day objects. Each day object has a day index (integer) + and notes field (array of notes, expand further for details on note types). + + ' + items: + $ref: '#/components/schemas/EntryTemplateDay' + type: array + fields: + $ref: '#/components/schemas/Fields' + id: + description: ID of the entry template + type: string + modifiedAt: + description: DateTime the template was last modified + type: string + name: + description: Title of the template + type: string + schema: + allOf: + - $ref: '#/components/schemas/EntrySchema' + description: Entry schema if set + nullable: true + title: SchemaProperty + type: object + templateCollectionId: + description: ID of the collection that contains the template + type: string + webURL: + description: URL of the template + type: string + type: object + EntryTemplateDay: + properties: + day: + description: 1 indexed day signifier. If 0 is returned, that means the EntryTemplateDay + is a section with a title but no specified Day. + minimum: 0 + type: integer + notes: + items: + $ref: '#/components/schemas/EntryNotePart' + type: array + title: + description: Optional title of a section if sections are enabled. + nullable: true + type: string + type: object + EntryTemplateUpdate: + additionalProperties: false + properties: + fields: + $ref: '#/components/schemas/Fields' + modifiedAt: + description: DateTime the template was last modified + type: string + name: + description: Title of the template + type: string + schemaId: + description: ID of the schema for the entry + type: string + templateCollectionId: + description: ID of the collection that contains the template + type: string + type: object + EntryTemplatesPaginatedList: + additionalProperties: false + properties: + entryTemplates: + items: + $ref: '#/components/schemas/EntryTemplate' + type: array + nextToken: + type: string + type: object + EntryUpdate: + additionalProperties: false + properties: + authorIds: + description: IDs of users to set as the entry's authors. + type: string + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: Schema fields to set on the entry + folderId: + description: ID of the folder that will contain the entry + type: string + name: + description: New name of the entry + type: string + schemaId: + description: ID of the schema for the entry + type: string + type: object + EntryUpdatedFieldsEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - $ref: '#/components/schemas/UpdateEventMixin' + - properties: + entry: + $ref: '#/components/schemas/Entry' + eventType: + enum: + - v2.entry.updated.fields + type: string + type: object + EntryUpdatedReviewRecordEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - $ref: '#/components/schemas/UpdateEventMixin' + - properties: + entry: + $ref: '#/components/schemas/Entry' + eventType: + enum: + - v2.entry.updated.reviewRecord + type: string + type: object + Enzyme: + additionalProperties: false + properties: + cutsites: + items: + type: integer + maxItems: 2 + minItems: 1 + type: array + id: + example: enz_6ZVdX98t + type: string + isoschizomers: + items: + type: string + type: array + name: + type: string + offsets: + items: + type: integer + maxItems: 2 + minItems: 1 + type: array + restrictionSite: + type: string + type: object + EnzymesPaginatedList: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + enzymes: + items: + $ref: '#/components/schemas/Enzyme' + type: array + type: object + Event: + discriminator: + mapping: + v2-alpha.stageEntry.created: '#/components/schemas/StageEntryCreatedEvent' + v2-beta.automationInputGenerator.completed: '#/components/schemas/AutomationInputGeneratorCompletedV2BetaEvent' + v2-beta.automationOutputProcessor.completed: '#/components/schemas/AutomationOutputProcessorCompletedV2BetaEvent' + v2-beta.automationOutputProcessor.uploaded: '#/components/schemas/AutomationOutputProcessorUploadedV2BetaEvent' + v2.assayRun.created: '#/components/schemas/AssayRunCreatedEvent' + v2.assayRun.updated.fields: '#/components/schemas/AssayRunUpdatedFieldsEvent' + v2.entity.registered: '#/components/schemas/EntityRegisteredEvent' + v2.entry.created: '#/components/schemas/EntryCreatedEvent' + v2.entry.updated.fields: '#/components/schemas/EntryUpdatedFieldsEvent' + v2.entry.updated.reviewRecord: '#/components/schemas/EntryUpdatedReviewRecordEvent' + v2.request.created: '#/components/schemas/RequestCreatedEvent' + v2.request.updated.fields: '#/components/schemas/RequestUpdatedFieldsEvent' + v2.workflowOutput.created: '#/components/schemas/WorkflowOutputCreatedEvent' + v2.workflowOutput.updated.fields: '#/components/schemas/WorkflowOutputUpdatedFieldsEvent' + v2.workflowTask.created: '#/components/schemas/WorkflowTaskCreatedEvent' + v2.workflowTask.updated.assignee: '#/components/schemas/WorkflowTaskUpdatedAssigneeEvent' + v2.workflowTask.updated.fields: '#/components/schemas/WorkflowTaskUpdatedFieldsEvent' + v2.workflowTask.updated.scheduledOn: '#/components/schemas/WorkflowTaskUpdatedScheduledOnEvent' + v2.workflowTask.updated.status: '#/components/schemas/WorkflowTaskUpdatedStatusEvent' + v2.workflowTaskGroup.created: '#/components/schemas/WorkflowTaskGroupCreatedEvent' + v2.workflowTaskGroup.mappingCompleted: '#/components/schemas/WorkflowTaskGroupMappingCompletedEvent' + v2.workflowTaskGroup.updated.watchers: '#/components/schemas/WorkflowTaskGroupUpdatedWatchersEvent' + propertyName: eventType + oneOf: + - $ref: '#/components/schemas/EntityRegisteredEvent' + - $ref: '#/components/schemas/EntryCreatedEvent' + - $ref: '#/components/schemas/EntryUpdatedFieldsEvent' + - $ref: '#/components/schemas/EntryUpdatedReviewRecordEvent' + - $ref: '#/components/schemas/StageEntryCreatedEvent' + - $ref: '#/components/schemas/StageEntryUpdatedFieldsEvent' + - $ref: '#/components/schemas/StageEntryUpdatedReviewRecordEvent' + - $ref: '#/components/schemas/RequestCreatedEvent' + - $ref: '#/components/schemas/RequestUpdatedFieldsEvent' + - $ref: '#/components/schemas/AssayRunCreatedEvent' + - $ref: '#/components/schemas/AssayRunUpdatedFieldsEvent' + - $ref: '#/components/schemas/AutomationInputGeneratorCompletedV2BetaEvent' + - $ref: '#/components/schemas/AutomationOutputProcessorCompletedV2BetaEvent' + - $ref: '#/components/schemas/AutomationOutputProcessorUploadedV2BetaEvent' + - $ref: '#/components/schemas/WorkflowTaskGroupCreatedEvent' + - $ref: '#/components/schemas/WorkflowTaskGroupMappingCompletedEvent' + - $ref: '#/components/schemas/WorkflowTaskCreatedEvent' + - $ref: '#/components/schemas/WorkflowTaskUpdatedFieldsEvent' + - $ref: '#/components/schemas/WorkflowTaskUpdatedStatusEvent' + - $ref: '#/components/schemas/WorkflowTaskUpdatedAssigneeEvent' + - $ref: '#/components/schemas/WorkflowTaskUpdatedScheduledOnEvent' + - $ref: '#/components/schemas/WorkflowTaskGroupUpdatedWatchersEvent' + - $ref: '#/components/schemas/WorkflowOutputCreatedEvent' + - $ref: '#/components/schemas/WorkflowOutputUpdatedFieldsEvent' + EventBase: + properties: + createdAt: + format: date-time + type: string + deprecated: + example: false + type: boolean + excludedProperties: + description: 'These properties have been dropped from the payload due to + size. + + ' + items: + type: string + type: array + id: + type: string + schema: + nullable: true + properties: + id: + type: string + name: + type: string + type: object + type: object + EventsPaginatedList: + properties: + events: + items: + $ref: '#/components/schemas/Event' + type: array + nextToken: + type: string + type: object + ExecuteSampleGroups: + description: 'The response is intentionally empty. + + ' + type: object + ExperimentalWellRole: + properties: + group: + type: integer + primaryRole: + enum: + - SAMPLE + - CONTROL + - STANDARD + - BLANK + type: string + subrole: + nullable: true + type: string + type: object + ExportAuditLogAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + additionalProperties: false + properties: + downloadURL: + format: uri + type: string + type: object + type: object + type: object + ExportItemRequest: + additionalProperties: false + properties: + id: + description: ID of the item to export + example: etr_1X1AlQPD + type: string + required: + - id + type: object + ExportsAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + additionalProperties: false + properties: + downloadURL: + format: uri + type: string + type: object + type: object + type: object + ExternalFileNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - properties: + externalFileId: + description: 'The ID of the external file. Use the ''Get an external file'' + endpoint to retrieve metadata about it. + + ' + type: string + links: + description: 'Array of links referenced in the caption via an @-mention, + hyperlink, or the drag-n-dropped preview attached to the note. + + ' + items: + $ref: '#/components/schemas/EntryLink' + type: array + text: + description: The caption of the file attachment. + type: string + type: + enum: + - external_file + type: string + type: object + description: An attached user-uploaded file + Feature: + allOf: + - $ref: '#/components/schemas/FeatureBase' + - properties: + id: + description: The id of the feature + example: feat_4YVqX98z + type: string + matchType: + description: The match type of the feature. Used to determine how auto-annotate + matches are made. + enum: + - nucleotide + - protein + type: string + description: A feature from a feature library + type: object + FeatureBase: + properties: + color: + description: The color of the annotations generated by the feature. Must + be a valid hex string + example: '#F58A5E' + type: string + featureLibraryId: + description: The id of the feature library the feature belongs to + example: featlib_19kd9aDq + type: string + featureType: + description: 'The type of feature, like gene, promoter, etc. Note: This + is an arbitrary string, not an enum + + ' + nullable: true + type: string + name: + description: The name of the feature + type: string + pattern: + description: The pattern used for matching during auto-annotation. + type: string + type: object + FeatureBulkCreate: + allOf: + - $ref: '#/components/schemas/FeatureCreate' + FeatureCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/FeatureBase' + - properties: + matchType: + description: The match type of the feature. Used to determine how auto-annotate + matches are made. + enum: + - nucleotide + - protein + type: string + - required: + - name + - featureType + - pattern + - matchType + - featureLibraryId + description: Inputs for a new feature + type: object + FeatureLibrariesPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + featureLibraries: + items: + $ref: '#/components/schemas/FeatureLibrary' + type: array + description: A paginated list of feature libraries + type: object + FeatureLibrary: + allOf: + - $ref: '#/components/schemas/FeatureLibraryBase' + - properties: + createdAt: + description: DateTime the Feature Library was created + format: date-time + type: string + id: + description: The id of the feature library + example: featlib_6ZVdX98t + type: string + modifiedAt: + description: DateTime the Feature Library was last modified + format: date-time + type: string + owner: + anyOf: + - $ref: '#/components/schemas/Organization' + - $ref: '#/components/schemas/UserSummary' + webURL: + description: The Benchling web UI url to view the Feature Library + format: uri + type: string + description: A feature library + type: object + FeatureLibraryBase: + properties: + description: + description: The description for the feature library + type: string + name: + description: The name of the feature library + type: string + type: object + FeatureLibraryCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/FeatureLibraryBase' + - properties: + organizationId: + description: 'The organization that will own the feature library. The + requesting user must be an administrator of the organization. If unspecified + and the organization allows personal ownables, then the requesting user + will own the feature library + + ' + example: ent_a0SApq3z + type: string + - required: + - name + - description + description: Inputs for creating a feature library + type: object + FeatureLibraryUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/FeatureLibraryBase' + description: Inputs for updating a feature library + type: object + FeatureUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/FeatureBase' + description: Inputs for updating a feature + type: object + FeaturesBulkCreateRequest: + additionalProperties: false + description: Inputs for bulk creating a new feature + properties: + features: + items: + $ref: '#/components/schemas/FeatureBulkCreate' + maxItems: 1000 + type: array + type: object + FeaturesPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + features: + description: List of features for the page + items: + $ref: '#/components/schemas/Feature' + type: array + description: A paginated list of features + type: object + Field: + properties: + displayValue: + nullable: true + readOnly: true + type: string + isMulti: + readOnly: true + type: boolean + textValue: + example: Amp + nullable: true + readOnly: true + type: string + type: + allOf: + - $ref: '#/components/schemas/FieldType' + readOnly: true + value: + description: 'For single link fields, use the id of the item you want to + link (eg. "seq_jdf8BV24"). + + For multi-link fields, use an array of ids of the items you want to link + (eg. ["seq_jdf8BV24"]) + + ' + nullable: true + oneOf: + - type: string + - type: boolean + - type: number + - type: object + - items: + type: string + type: array + required: + - value + type: object + FieldAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - $ref: '#/components/schemas/LinkedAppConfigResourceMixin' + - properties: + type: + enum: + - field + example: field + type: string + value: + example: tsf_e59a3b23 + nullable: true + type: string + FieldDefinition: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + id: + example: tsf_HXUnClU9 + type: string + isMulti: + type: boolean + isRequired: + type: boolean + name: + example: Resistance Gene + type: string + type: + $ref: '#/components/schemas/FieldType' + type: object + FieldType: + enum: + - dna_sequence_link + - aa_sequence_link + - custom_entity_link + - entity_link + - mixture_link + - dropdown + - 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: string + FieldValueWithResolution: + oneOf: + - type: string + - type: boolean + - type: number + - items: + type: string + type: array + - additionalProperties: false + description: Look up an entity by its entity registry ID + properties: + entityRegistryId: + type: string + required: + - entityRegistryId + type: object + FieldWithResolution: + allOf: + - $ref: '#/components/schemas/Field' + - properties: + value: + allOf: + - $ref: '#/components/schemas/FieldValueWithResolution' + nullable: true + type: object + Fields: + additionalProperties: + $ref: '#/components/schemas/Field' + type: object + FieldsWithResolution: + additionalProperties: + $ref: '#/components/schemas/FieldWithResolution' + example: + Linked Peptide: + value: prtn_ObbdtGhC + Linked Sequence: + value: + entityRegistryId: DNA001 + Linked Strains: + value: + - entityRegistryId: STRAIN001 + - entityRegistryId: STRAIN002 + type: object + FindMatchingRegionsAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + aaSequenceMatches: + items: + properties: + matchingAASequenceIds: + items: + type: string + type: array + targetAASequenceId: + type: string + type: object + type: array + type: object + type: object + type: object + FindMatchingRegionsDnaAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + dnaSequenceMatches: + items: + properties: + matchingDnaSequenceIds: + items: + type: string + type: array + targetDnaSequenceId: + type: string + type: object + type: array + type: object + type: object + type: object + FloatAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - properties: + type: + enum: + - float + example: float + type: string + value: + example: 1.0 + format: float + nullable: true + type: number + type: object + FloatFieldDefinition: + allOf: + - $ref: '#/components/schemas/FieldDefinition' + - properties: + decimalPrecision: + nullable: true + type: number + legalTextDropdownId: + nullable: true + type: string + numericMax: + nullable: true + type: number + numericMin: + nullable: true + type: number + type: + enum: + - float + type: string + unit: + allOf: + - $ref: '#/components/schemas/UnitSummary' + nullable: true + type: object + Folder: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + readOnly: true + id: + readOnly: true + type: string + name: + type: string + parentFolderId: + description: ID of the parent folder, if it exists + nullable: true + type: string + projectId: + description: ID of the containing project + readOnly: true + type: string + FolderCreate: + additionalProperties: false + properties: + name: + description: The name of the new folder. + type: string + parentFolderId: + description: The ID of the parent folder. + type: string + required: + - name + - parentFolderId + FoldersArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of folders along with any IDs of folder + contents that were unarchived. + + ' + properties: + aaSequenceIds: + items: + type: string + type: array + customEntityIds: + items: + type: string + type: array + dnaSequenceIds: + items: + type: string + type: array + entryIds: + items: + type: string + type: array + folderIds: + items: + type: string + type: array + mixtureIds: + items: + type: string + type: array + oligoIds: + items: + type: string + type: array + protocolIds: + items: + type: string + type: array + type: object + FoldersArchive: + additionalProperties: false + properties: + folderIds: + description: A list of folder IDs to archive. + items: + type: string + type: array + reason: + description: 'The reason for archiving the provided folders. Accepted reasons + may differ based on tenant configuration. + + ' + enum: + - Made in error + - Retired + - Other + type: string + required: + - reason + - folderIds + type: object + FoldersPaginatedList: + properties: + folders: + items: + $ref: '#/components/schemas/Folder' + type: array + nextToken: + type: string + type: object + FoldersUnarchive: + additionalProperties: false + properties: + folderIds: + description: A list of folder IDs to unarchive. + items: + type: string + type: array + required: + - folderIds + type: object + ForbiddenError: + properties: + error: + properties: + invalidId: + type: string + message: + type: string + type: + type: string + userMessage: + type: string + type: object + type: object + ForbiddenRestrictedSampleError: + properties: + error: + allOf: + - $ref: '#/components/schemas/BaseError' + - properties: + invalidIds: + items: + type: string + type: array + type: + enum: + - invalid_request_error + type: string + - example: + invalidIds: + - Q6uhNZvw + - con_OwmERWGE + - con_zuDFhNvz + message: You're not a restricted sample user for some items. + type: invalid_request_error + userMessage: You're not a restricted sample user for some items. + type: object + GenericApiIdentifiedAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - $ref: '#/components/schemas/LinkedAppConfigResourceMixin' + - properties: + type: + enum: + - container_schema + - plate_schema + - location_schema + - box_schema + - run_schema + - result_schema + - request_schema + - entry_schema + - workflow_task_schema + - dropdown + - dropdown_option + - registry + - folder + - entry + - worklist + - project + - workflow_task_status + - dna_sequence + - dna_oligo + - aa_sequence + - custom_entity + - mixture + - molecule + - rna_oligo + - rna_sequence + - box + - container + - location + - plate + type: string + value: + nullable: true + type: string + type: object + GenericEntity: + additionalProperties: false + properties: + aliases: + items: + type: string + type: array + apiURL: + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + authors: + description: 'Array of UserSummary Resources of the authors of the entry. + This defaults to the creator but can be manually changed. + + ' + items: + $ref: '#/components/schemas/UserSummary' + type: array + createdAt: + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + - description: UserSummary of the user who created the request + readOnly: true + customFields: + $ref: '#/components/schemas/CustomFields' + entityRegistryId: + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + folderId: + type: string + id: + type: string + modifiedAt: + format: date-time + readOnly: true + type: string + name: + type: string + registrationOrigin: + allOf: + - $ref: '#/components/schemas/RegistrationOrigin' + nullable: true + readOnly: true + registryId: + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + title: SchemaProperty + webURL: + readOnly: true + type: string + type: object + InaccessibleResource: + additionalProperties: false + properties: + inaccessibleId: + type: string + resourceType: + enum: + - inaccessible_resource + type: string + type: + description: 'The type of this inaccessible item. Example values: "custom_entity", + "container", "plate", "dna_sequence" + + ' + example: custom_entity + type: string + type: object + Ingredient: + properties: + amount: + description: 'The amount value of this ingredient in its mixture, in string + format (to preserve full precision). Pair with `units`. Supports scientific + notation (1.23e4). One ingredient on this mixture can have an amount value + of `"QS"`. + + ' + example: '12' + nullable: true + type: string + catalogIdentifier: + example: DION_004 + nullable: true + type: string + componentEntity: + allOf: + - $ref: '#/components/schemas/EntityLabels' + - description: The entity that uniquely identifies this component. + componentLotContainer: + allOf: + - $ref: '#/components/schemas/ContainerLabels' + description: The container representing the component lot for this ingredient. + This is only present if the mixture schema supports component lots in + "inventory" format. + nullable: true + componentLotEntity: + allOf: + - $ref: '#/components/schemas/EntityLabels' + description: The entity representing the component lot for this ingredient. + This is only present if the mixture schema supports component lots in + "inventory" format. + nullable: true + componentLotText: + description: Text representing the component lot for this ingredient. This + is only present if the mixture schema supports component lots in "text" + format. + example: DION_004-source_001 + nullable: true + type: string + hasParent: + type: boolean + notes: + nullable: true + type: string + targetAmount: + description: The target amount for this ingredient such that this ingredient's + proportion in its mixture would preserve the equivalent ingredient's proportion + in the parent mixture. Pair with `units`. + example: '123' + nullable: true + readOnly: true + type: string + units: + $ref: '#/components/schemas/IngredientMeasurementUnits' + type: object + IngredientMeasurementUnits: + enum: + - nL + - uL + - mL + - L + - mg + - g + - kg + - ug + - Units + - Cells + - mol + - mmol + - umol + example: mL + nullable: true + type: string + IngredientWriteParams: + properties: + amount: + description: 'The amount value of this ingredient in its mixture, in string + format (to preserve full precision). Pair with `units`. Supports scientific + notation (1.23e4). One ingredient on this mixture can have an amount value + of `"QS"`. + + ' + example: '12' + nullable: true + type: string + catalogIdentifier: + example: DION_004 + nullable: true + type: string + componentEntityId: + description: The entity that uniquely identifies this component. + example: bfi_37hdg8 + type: string + componentLotContainerId: + description: The container representing the component lot for this ingredient. + This is only writable if the mixture schema supports component lots in + "inventory" format. + example: cnt_12345 + nullable: true + type: string + componentLotEntityId: + description: The entity representing the component lot for this ingredient. + This is only writable if the mixture schema supports component lots in + "inventory" format. + example: bfi_12345 + nullable: true + type: string + componentLotText: + description: Text representing the component lot for this ingredient. This + is only writable if the mixture schema supports component lots in "text" + format. + example: DION_004-source_001 + nullable: true + type: string + notes: + nullable: true + type: string + units: + $ref: '#/components/schemas/IngredientMeasurementUnits' + required: + - componentEntityId + - catalogIdentifier + - amount + - units + - componentLotText + - componentLotEntityId + - componentLotContainerId + - notes + type: object + InitialTable: + additionalProperties: false + properties: + csvData: + description: blobId of an uploaded csv blob. The CSV should be formatted + with column headers of `columnId` which can be found in the [EntryTemplate](#/components/schemas/EntryTemplate). + For more information on uploading a blob, [click here](https://docs.benchling.com/docs/uploading-a-blob-to-benchling). + type: string + templateTableID: + description: Template table API ID + type: string + type: object + InstrumentQuery: + properties: + command: + description: The command used in the query + type: string + connectionId: + description: The connection queried + type: string + createdAt: + description: The time the query was created + format: date-time + type: string + id: + description: The ID of the instrument query + type: string + info: + description: Additional information about the query + type: string + params: + description: Parameters used in the query + type: object + status: + description: Status of the query + type: string + values: + description: Values returned by the query + type: object + type: object + IntegerAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - properties: + type: + enum: + - integer + example: integer + type: string + value: + nullable: true + type: integer + type: object + IntegerFieldDefinition: + allOf: + - $ref: '#/components/schemas/FieldDefinition' + - properties: + numericMax: + nullable: true + type: number + numericMin: + nullable: true + type: number + type: + enum: + - integer + type: string + unit: + allOf: + - $ref: '#/components/schemas/UnitSummary' + nullable: true + type: object + InteractiveUiBlock: + properties: + enabled: + nullable: true + type: boolean + id: + example: user_defined_id + type: string + required: + - id + type: object + InventoryContainerTableNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - $ref: '#/components/schemas/StructuredTableApiIdentifiers' + - properties: + destinationContainerSchemaId: + example: consch_JEL0WCBK + type: string + mode: + enum: + - create_and_fill + - fill + - update + type: string + type: + enum: + - inventory_container_table + type: string + type: object + InventoryPlateTableNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - $ref: '#/components/schemas/StructuredTableApiIdentifiers' + - properties: + destinationPlateSchemaId: + example: pltsch_LRIuH0yJ + nullable: true + type: string + destinationWellSchemaId: + example: consch_JEL0WCBK + type: string + mode: + enum: + - create_and_fill + - fill + - update + type: string + type: + enum: + - inventory_plate_table + type: string + type: object + JsonAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - properties: + type: + enum: + - json + example: json + type: string + value: + example: '{"abc": "123"}' + nullable: true + type: string + LabAutomationBenchlingAppError: + properties: + message: + type: string + type: object + LabAutomationBenchlingAppErrors: + properties: + topLevelErrors: + items: + properties: + errorMessage: + type: string + type: object + type: array + type: object + LabAutomationTransform: + properties: + apiURL: + description: The canonical url of the transform in the API. + format: uri + readOnly: true + type: string + blobId: + format: uuid + nullable: true + type: string + customTransformId: + format: uuid + nullable: true + type: string + errors: + $ref: '#/components/schemas/LabAutomationBenchlingAppErrors' + id: + type: string + inputGeneratorId: + nullable: true + type: string + modifiedAt: + description: DateTime the transform was last modified. + format: date-time + readOnly: true + type: string + outputProcessorId: + nullable: true + type: string + status: + enum: + - NOT_STARTED + - RUNNING + - FAILED + - SUCCEEDED + type: string + type: object + LabAutomationTransformUpdate: + additionalProperties: false + properties: + blobId: + format: uuid + type: string + errors: + items: + $ref: '#/components/schemas/LabAutomationBenchlingAppError' + type: array + type: object + LabelTemplate: + properties: + id: + description: ID of the label template. + type: string + name: + description: Name of the label template. + type: string + zplTemplate: + description: The ZPL template that will be filled in and sent to a printer. + type: string + type: object + LabelTemplatesList: + properties: + labelTemplates: + items: + $ref: '#/components/schemas/LabelTemplate' + type: array + type: object + LegacyWorkflow: + properties: + createdAt: + description: DateTime at which the the legacy workflow was created + format: date-time + readOnly: true + type: string + description: + description: Description of the legacy workflow + nullable: true + type: string + displayId: + description: User-friendly ID of the legacy workflow + type: string + id: + description: ID of the legacy workflow + example: wfw_uHBz7ka2 + readOnly: true + type: string + name: + description: Name of the legacy workflow + type: string + projectId: + description: ID of the project that contains the legacy workflow + type: string + type: object + LegacyWorkflowList: + properties: + workflows: + items: + $ref: '#/components/schemas/LegacyWorkflow' + type: array + type: object + LegacyWorkflowPatch: + additionalProperties: false + properties: + description: + description: Description of the legacy workflow + type: string + name: + description: Name of the legacy workflow + type: string + projectId: + description: ID of the project that contains the legacy workflow + type: string + type: object + LegacyWorkflowSample: + properties: + batchId: + description: ID of the batch + type: string + containerIds: + description: Array of IDs of containers + items: + type: string + type: array + createdAt: + description: DateTime at which the the sample was created + format: date-time + readOnly: true + type: string + id: + description: ID of the sample + readOnly: true + type: string + name: + description: Name of the sample + type: string + type: object + LegacyWorkflowSampleList: + properties: + samples: + items: + $ref: '#/components/schemas/LegacyWorkflowSample' + type: array + type: object + LegacyWorkflowStage: + properties: + createdAt: + description: DateTime at which the the legacy workflow stage was created + format: date-time + readOnly: true + type: string + id: + description: ID of the legacy workflow stage + readOnly: true + type: string + name: + description: Name of the legacy workflow stage + type: string + type: object + LegacyWorkflowStageList: + properties: + workflowStages: + items: + $ref: '#/components/schemas/LegacyWorkflowStage' + type: array + type: object + LegacyWorkflowStageRun: + properties: + createdAt: + description: DateTime at which the the legacy workflow stage run was created + format: date-time + readOnly: true + type: string + id: + description: ID of the legacy workflow stage run + readOnly: true + type: string + name: + description: Name of the legacy workflow stage run + type: string + status: + description: Status of the legacy workflow stage run + enum: + - COMPLETED + - DISCARDED + - INITIALIZED + type: string + type: object + LegacyWorkflowStageRunList: + properties: + workflowStageRuns: + items: + $ref: '#/components/schemas/LegacyWorkflowStageRun' + type: array + type: object + LinkedAppConfigResource: + oneOf: + - $ref: '#/components/schemas/LinkedAppConfigResourceSummary' + - $ref: '#/components/schemas/InaccessibleResource' + type: object + LinkedAppConfigResourceMixin: + properties: + linkedResource: + allOf: + - $ref: '#/components/schemas/LinkedAppConfigResource' + nullable: true + type: object + LinkedAppConfigResourceSummary: + additionalProperties: false + properties: + id: + description: The API ID of the linked resource + example: tsf_e59a3b23 + type: string + name: + description: The name of the resource in Benchling + example: Parent Sample + type: string + type: object + Location: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + availableCapacity: + description: 'The number of available positions in this location. Null if + *totalCapacity* is not set. + + ' + nullable: true + readOnly: true + type: integer + barcode: + type: string + createdAt: + type: string + creator: + $ref: '#/components/schemas/UserSummary' + fields: + $ref: '#/components/schemas/Fields' + id: + type: string + modifiedAt: + type: string + name: + type: string + occupiedCapacity: + description: 'The number of plates, boxes, and containers currently in this + location. Null if *totalCapacity* is not set. + + ' + nullable: true + readOnly: true + type: integer + parentStorageId: + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + totalCapacity: + description: 'The total capacity of this location (i.e. how many plates, + boxes, and containers it can store). If null, capacity is not limited. + + ' + nullable: true + readOnly: true + type: integer + webURL: + type: string + LocationCreate: + additionalProperties: false + properties: + barcode: + type: string + fields: + $ref: '#/components/schemas/Fields' + name: + type: string + parentStorageId: + type: string + schemaId: + type: string + required: + - name + - schemaId + type: object + LocationSchema: + allOf: + - $ref: '#/components/schemas/RegistrySchema' + - properties: + type: + enum: + - location + readOnly: true + type: string + type: object + LocationSchemasList: + properties: + locationSchemas: + items: + $ref: '#/components/schemas/LocationSchema' + readOnly: true + type: array + type: object + LocationSchemasPaginatedList: + allOf: + - $ref: '#/components/schemas/LocationSchemasList' + - properties: + nextToken: + type: string + type: object + LocationUpdate: + additionalProperties: false + properties: + fields: + $ref: '#/components/schemas/Fields' + name: + type: string + parentStorageId: + type: string + type: object + LocationsArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of locations along with any IDs of locations, + boxes, plates, containers that were archived. + + ' + properties: + boxIds: + items: + type: string + type: array + containerIds: + items: + type: string + type: array + locationIds: + items: + type: string + type: array + plateIds: + items: + type: string + type: array + type: object + LocationsArchive: + additionalProperties: false + properties: + locationIds: + description: Array of location IDs + items: + type: string + type: array + reason: + description: 'Reason that locations are being archived. + + ' + enum: + - Made in error + - Retired + - Other + type: string + shouldRemoveBarcodes: + description: 'Remove barcodes. Removing barcodes from archived inventory + that contain items will also remove barcodes from the contained items. + + ' + type: boolean + required: + - locationIds + - reason + type: object + LocationsBulkGet: + properties: + locations: + items: + $ref: '#/components/schemas/Location' + type: array + type: object + LocationsPaginatedList: + properties: + locations: + items: + $ref: '#/components/schemas/Location' + type: array + nextToken: + type: string + type: object + LocationsUnarchive: + additionalProperties: false + properties: + locationIds: + description: Array of location IDs + items: + type: string + type: array + required: + - locationIds + type: object + LookupTableNotePart: + allOf: + - $ref: '#/components/schemas/StructuredTableApiIdentifiers' + - properties: + type: + enum: + - lookup_table + type: string + type: object + MarkdownUiBlock: + additionalProperties: false + properties: + id: + example: user_generated_id + type: string + type: + enum: + - MARKDOWN + type: string + value: + example: '# This is a markdown block + + 1. with **bold text**.' + type: string + required: + - type + - value + type: object + MarkdownUiBlockCreate: + allOf: + - $ref: '#/components/schemas/MarkdownUiBlock' + type: object + MarkdownUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/MarkdownUiBlock' + type: object + MatchBasesRequest: + additionalProperties: false + properties: + archiveReason: + default: NOT_ARCHIVED + enum: + - NOT_ARCHIVED + - Other + - Archived + type: string + bases: + type: string + nextToken: + type: string + pageSize: + default: 50 + maximum: 100 + minimum: 0 + type: integer + registryId: + description: 'ID of a registry. Restricts results to those registered in + this registry. Specifying `null` returns unregistered items. + + ' + nullable: true + type: string + sort: + default: modifiedAt:desc + enum: + - modifiedAt:asc + - modifiedAt:desc + - name:asc + - name:desc + type: string + required: + - bases + type: object + Measurement: + properties: + units: + description: Can only be null if value is also null + nullable: true + type: string + value: + description: Can only be null if units is also null + nullable: true + type: number + required: + - value + - units + type: object + Membership: + properties: + role: + enum: + - ADMIN + - MEMBER + type: string + user: + $ref: '#/components/schemas/UserSummary' + MembershipCreate: + properties: + role: + enum: + - ADMIN + - MEMBER + example: ADMIN + type: string + userId: + example: ent_a0SApq3z + type: string + MembershipUpdate: + properties: + role: + enum: + - ADMIN + - MEMBER + type: string + MembershipsPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + memberships: + items: + $ref: '#/components/schemas/Membership' + type: array + Mixture: + properties: + aliases: + items: + example: FRM000 + type: string + type: array + allowMeasuredIngredients: + description: Derived from the mixture's schema. + readOnly: true + type: boolean + amount: + description: The positive numerical amount value of this mixture in string + format (to preserve full precision). Pair with `units`. Supports scientific + notation (1.23e4). + example: '123' + type: string + apiURL: + description: The canonical url of the Mixture in the API. + example: https://benchling.com/api/v2/mixtures/mxt_xCUXNVyG + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + authors: + items: + $ref: '#/components/schemas/UserSummary' + type: array + createdAt: + example: '2017-04-18T05:54:56.247545+00:00' + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + - readOnly: true + customFields: + $ref: '#/components/schemas/CustomFields' + entityRegistryId: + example: FRM000 + nullable: true + type: string + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: Mixtures can have up to one parent mixture field. + folderId: + example: lib_R8KcsjhW + nullable: true + type: string + id: + example: mxt_xCUXNVyG + type: string + ingredients: + description: List of ingredients on this mixture. + items: + $ref: '#/components/schemas/Ingredient' + type: array + modifiedAt: + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + readOnly: true + type: string + name: + example: FRM000 + type: string + registrationOrigin: + allOf: + - $ref: '#/components/schemas/RegistrationOrigin' + nullable: true + readOnly: true + registryId: + example: src_NetYd96a + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + example: + id: ts_EM122lfJ + name: Prep + units: + $ref: '#/components/schemas/MixtureMeasurementUnits' + webURL: + example: https://benchling.com/benchling/f/R8KcsjhW-academic-registry/mxt-xCUXNVyG-sbn000/edit + readOnly: true + type: string + type: object + MixtureBulkUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/MixtureUpdate' + - properties: + id: + example: ingr_3jshUi + type: string + required: + - id + type: object + MixtureCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/MixtureUpdate' + - $ref: '#/components/schemas/CreateEntityIntoRegistry' + - required: + - name + - ingredients + - schemaId + - units + MixtureMeasurementUnits: + enum: + - nL + - uL + - mL + - L + - g + - kg + - mg + - ug + - Units + example: L + nullable: true + type: string + MixturePrepTableNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - $ref: '#/components/schemas/StructuredTableApiIdentifiers' + - properties: + mixtureSchemaId: + example: ts_eGNPfqCX + type: string + type: + enum: + - mixture_prep_table + type: string + type: object + MixtureUpdate: + additionalProperties: false + properties: + aliases: + description: Aliases to add to the mixture + items: + type: string + type: array + amount: + description: The positive numerical amount value of this mixture in string + format (to preserve full precision). Pair with `units`. Supports scientific + notation (1.23e4). + example: '123' + type: string + authorIds: + description: IDs of users to set as the mixture's authors. + items: + type: string + type: array + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: 'Custom fields to add to the mixture. Every field should have + its name as a key, mapping to an object with information about the value + of the field. + + ' + entityRegistryId: + example: RCP001 + type: string + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Schema fields to set on the mixture. Must correspond with + the schema''s field definitions. Every field should have its name as a + key, mapping to an object with information about the value of the field. + + If you are setting the parent mixture field here, you must also specify + `ingredients` + + ' + folderId: + description: ID of the folder that the entity is moved into + type: string + ingredients: + description: 'Desired final state for the ingredients on this mixture. + + Each ingredient you specify will be matched with the existing ingredients + on the mixture based on the component entity, and Benchling will create, + update, or delete this mixture''s ingredients so that the final state + of this mixture''s ingredients matches your request. + + Benchling will recognize that any ingredients you specify that match ingredients + on the parent mixture (based on component entity) are inherited. This + can be seen on the returned `ingredients[i].hasParent` attribute. + + ' + items: + $ref: '#/components/schemas/IngredientWriteParams' + type: array + name: + type: string + schemaId: + type: string + units: + $ref: '#/components/schemas/MixtureMeasurementUnits' + type: object + MixtureWithEntityType: + allOf: + - $ref: '#/components/schemas/Mixture' + - properties: + entityType: + enum: + - mixture + type: string + type: object + type: object + MixturesArchivalChange: + description: 'IDs of all mixtures that were archived or unarchived. + + ' + properties: + mixtureIds: + items: + example: mxt_djw9aU + type: string + type: array + type: object + MixturesArchive: + additionalProperties: false + description: 'The request body for archiving mixtures. + + ' + properties: + mixtureIds: + items: + example: mxt_djw9aU + type: string + type: array + reason: + $ref: '#/components/schemas/EntityArchiveReason' + required: + - reason + - mixtureIds + type: object + MixturesBulkCreateRequest: + additionalProperties: false + properties: + mixtures: + items: + $ref: '#/components/schemas/MixtureCreate' + maxItems: 1000 + type: array + required: + - mixtures + MixturesBulkUpdateRequest: + additionalProperties: false + properties: + mixtures: + items: + $ref: '#/components/schemas/MixtureBulkUpdate' + type: array + MixturesPaginatedList: + properties: + mixtures: + items: + $ref: '#/components/schemas/Mixture' + type: array + nextToken: + type: string + type: object + MixturesUnarchive: + additionalProperties: false + description: 'The request body for unarchiving mixtures. + + ' + properties: + mixtureIds: + items: + example: mxt_djw9aU + type: string + type: array + required: + - mixtureIds + type: object + Molecule: + additionalProperties: false + properties: + aliases: + description: Array of aliases. + items: + type: string + type: array + apiURL: + description: The canonical url of the Molecule in the API. + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + canonicalizedSmiles: + description: The canonicalized chemical structure in SMILES format. + example: Nc1nc(=O)n([H:1])cc1C1CC1 + type: string + createdAt: + description: DateTime the Molecule was created. + format: date-time + readOnly: true + type: string + creator: + $ref: '#/components/schemas/UserSummary' + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: Custom fields set on the Molecule. + entityRegistryId: + description: Registry ID of the Molecule if registered. + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + folderId: + description: ID of the folder that contains the Molecule. + type: string + id: + description: ID of the Molecule. + example: mol_bhuDUw9D + type: string + modifiedAt: + description: DateTime the Molecule was last modified. + format: date-time + readOnly: true + type: string + name: + description: Name of the Molecule. + type: string + originalSmiles: + description: The original chemical structure supplied by the user in SMILES + format. Null if the user did not originally supply SMILES. + example: Nc1nc(=O)n([H:1])cc1C1CC1 + nullable: true + type: string + registrationOrigin: + allOf: + - $ref: '#/components/schemas/RegistrationOrigin' + nullable: true + readOnly: true + registryId: + description: Registry the Molecule is registered in. + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + webURL: + description: URL of the Molecule. + example: https://benchling.com/benchling/f/lib_R8KcsjhW-molecules/mol_xCUXNVyG-molecule1/edit + format: uri + readOnly: true + type: string + type: object + MoleculeBaseRequest: + additionalProperties: false + properties: + aliases: + description: Aliases to add to the Molecule. + items: + type: string + type: array + authorIds: + description: IDs of users to set as the Molecule's authors. + items: + type: string + type: array + chemicalStructure: + allOf: + - $ref: '#/components/schemas/MoleculeStructure' + description: 'Chemical structure of the Molecule. + + ' + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: 'Custom fields to add to the Molecule. Every field should have + its name as a key, mapping to an object with information about the value + of the field. + + ' + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Fields to set on the Molecule. Must correspond with the schema''s + field definitions. Every field should have its name as a key, mapping + to an object with information about the value of the field. + + ' + folderId: + description: 'ID of the folder containing the Molecule. + + ' + type: string + name: + description: 'Name of the Molecule. + + ' + type: string + schemaId: + description: 'ID of the Molecule''s schema. + + ' + type: string + type: object + MoleculeBaseRequestForCreate: + allOf: + - $ref: '#/components/schemas/MoleculeBaseRequest' + - required: + - name + - chemicalStructure + MoleculeBulkUpdate: + additionalProperties: false + allOf: + - properties: + id: + type: string + type: object + - $ref: '#/components/schemas/MoleculeUpdate' + MoleculeBulkUpsertRequest: + allOf: + - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' + - $ref: '#/components/schemas/MoleculeBaseRequestForCreate' + MoleculeCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/MoleculeBaseRequestForCreate' + - $ref: '#/components/schemas/CreateEntityIntoRegistry' + MoleculeStructure: + additionalProperties: false + properties: + structureFormat: + description: 'Format of the chemical structure. + + - smiles + + - molfile + + ' + enum: + - smiles + - molfile + type: string + value: + description: Chemical structure in SMILES or molfile format. + example: Nc1nc(=O)n([H:1])cc1C1CC1 + type: string + type: object + MoleculeUpdate: + additionalProperties: false + allOf: + - properties: + entityRegistryId: + type: string + type: object + - $ref: '#/components/schemas/MoleculeBaseRequest' + MoleculeUpsertRequest: + allOf: + - $ref: '#/components/schemas/EntityUpsertBaseRequest' + - $ref: '#/components/schemas/MoleculeBaseRequestForCreate' + MoleculesArchivalChange: + additionalProperties: false + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of Molecules along with any IDs of batches + that were archived / unarchived. + + ' + properties: + batchIds: + items: + type: string + type: array + moleculeIds: + items: + type: string + type: array + type: object + MoleculesArchive: + additionalProperties: false + description: 'The request body for archiving Molecules. + + ' + properties: + moleculeIds: + items: + type: string + type: array + reason: + description: 'The reason for archiving the provided Molecules. Accepted + reasons may differ based on tenant configuration. + + ' + enum: + - Made in error + - Retired + - Expended + - Shipped + - Contaminated + - Expired + - Missing + - Other + type: string + required: + - reason + - moleculeIds + type: object + MoleculesBulkCreateRequest: + additionalProperties: false + properties: + molecules: + items: + $ref: '#/components/schemas/MoleculeCreate' + type: array + type: object + MoleculesBulkUpdateRequest: + additionalProperties: false + properties: + molecules: + items: + $ref: '#/components/schemas/MoleculeBulkUpdate' + type: array + type: object + MoleculesBulkUpsertRequest: + additionalProperties: false + maxItems: 1000 + properties: + molecules: + items: + $ref: '#/components/schemas/MoleculeBulkUpsertRequest' + type: array + required: + - molecules + type: object + MoleculesPaginatedList: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + molecules: + items: + $ref: '#/components/schemas/Molecule' + type: array + MoleculesUnarchive: + additionalProperties: false + description: 'The request body for unarchiving Molecules. + + ' + properties: + moleculeIds: + items: + type: string + type: array + required: + - moleculeIds + type: object + Monomer: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + attachmentPoints: + description: A list of the capping group present at each location where + the monomer can form a bond with other monomers + example: + - OH + - OH + items: + type: string + type: array + calculatedMolecularWeight: + description: The molecular weight of the monomer as calculated by RDKit + based on the monomer chemical structure + example: 120.422 + type: number + canonicalSmiles: + description: The canonicalized chemical structure in SMILES format. + example: O[P@@](=S)([OH:1])[OH:2] + type: string + createdAt: + description: DateTime the monomer was created. + format: date-time + readOnly: true + type: string + customMolecularWeight: + description: Optional molecular weight value that the user can provide to + override the calculated molecular weight + example: 119.422 + nullable: true + type: number + id: + description: ID of the monomer + example: mon_bhuDUw9D + type: string + modifiedAt: + description: DateTime the monomer was last modified. + format: date-time + readOnly: true + type: string + monomerType: + allOf: + - $ref: '#/components/schemas/MonomerType' + name: + description: Name of the monomer + example: (Rp)-Phosphorothioate + type: string + naturalAnalog: + description: Symbol for the natural equivalent of the monomer. Acceptable + natural analog values include IUPAC bases, r, and p. + example: T + type: string + polymerType: + allOf: + - $ref: '#/components/schemas/MonomerPolymerType' + symbol: + description: User-defined identifier of the monomer, unique on the monomer + type. + example: Rsp + type: string + visualColor: + description: The hex color code of the monomer visual symbol + example: '#7051FC' + nullable: true + type: string + visualSymbol: + allOf: + - $ref: '#/components/schemas/MonomerVisualSymbol' + nullable: true + type: object + MonomerBaseRequest: + properties: + color: + description: The hex color code of the monomer visual symbol + example: '#7051FC' + nullable: true + type: string + customMolecularWeight: + description: Optional molecular weight value that the user can provide to + override the calculated molecular weight + example: 119.422 + nullable: true + type: number + name: + description: Name of the monomer + example: (Rp)-Phosphorothioate + type: string + smiles: + description: The chemical structure in SMILES format. + example: O[P@@](=S)([OH:1])[OH:2] + type: string + symbol: + description: User-defined identifier of the monomer, unique on the monomer + type. + example: Rsp + type: string + visualSymbol: + allOf: + - $ref: '#/components/schemas/MonomerVisualSymbol' + type: object + MonomerCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/MonomerBaseRequest' + - properties: + naturalAnalog: + description: Symbol for the natural equivalent of the monomer. Acceptable + natural analog values include IUPAC bases, r, and p. + example: T + type: string + - required: + - smiles + - name + - naturalAnalog + - symbol + MonomerPolymerType: + description: The polymer type of the monomer. Currently only RNA monomers are + supported. + enum: + - RNA + type: string + MonomerType: + description: The part of the nucleotide structure that the monomer fits into, + i.e. backbone or branch + enum: + - BACKBONE + - BRANCH + type: string + MonomerUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/MonomerBaseRequest' + MonomerVisualSymbol: + description: The shape of the monomer visual symbol. + enum: + - DIAMOND_FILLED + - DIAMOND_HOLLOW + - DIAMOND_DASHED + - STAR_FILLED + - STAR_HOLLOW + - TRIANGLE_FILLED + - TRIANGLE_HOLLOW + - DYAD_FILLED + - DYAD_HOLLOW + - CLOVER_FILLED + - CLOVER_HOLLOW + - TRIAD_FILLED + - TRIAD_HOLLOW + - RECTANGLE_FILLED + - RECTANGLE_HOLLOW + - LETTERS_P + - LETTERS_PS + type: string + MonomersArchivalChange: + additionalProperties: false + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. + + ' + properties: + batchIds: + items: + type: string + type: array + monomerIds: + items: + type: string + type: array + type: object + MonomersArchive: + additionalProperties: false + description: 'The request body for archiving Monomers. + + ' + properties: + monomerIds: + items: + type: string + maxItems: 100 + type: array + reason: + description: 'The reason for archiving the provided Monomers. Accepted reasons + may differ based on tenant configuration. + + ' + enum: + - Made in error + - Archived + - Other + type: string + required: + - reason + - monomerIds + type: object + MonomersPaginatedList: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + monomers: + items: + $ref: '#/components/schemas/Monomer' + type: array + nextToken: + type: string + MonomersUnarchive: + additionalProperties: false + description: 'The request body for unarchiving Monomers. + + ' + properties: + monomerIds: + items: + type: string + maxItems: 100 + type: array + required: + - monomerIds + type: object + MultipleContainersTransfer: + allOf: + - $ref: '#/components/schemas/ContainerTransferBase' + - properties: + destinationContainerId: + description: ID of container that will be transferred into. + type: string + finalQuantity: + $ref: '#/components/schemas/ContainerQuantity' + finalVolume: + $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' + sourceConcentration: + allOf: + - $ref: '#/components/schemas/Measurement' + description: "Concentration at which to transfer entities. Not applicable\ + \ for container-to-container transfers (the concentration of the source\ + \ container\u2019s contents will be used).\n" + example: + units: g/mL + value: 10 + required: + - destinationContainerId + type: object + type: object + MultipleContainersTransfersList: + additionalProperties: false + properties: + transfers: + items: + $ref: '#/components/schemas/MultipleContainersTransfer' + maxItems: 5000 + type: array + required: + - transfers + type: object + NamingStrategy: + description: 'Specifies the behavior for automatically generated names when + registering an entity. + + - NEW_IDS: Generate new registry IDs + + - IDS_FROM_NAMES: Generate registry IDs based on entity names + + - DELETE_NAMES: Generate new registry IDs and replace name with registry ID + + - SET_FROM_NAME_PARTS: Generate new registry IDs, rename according to name + template, and keep old name as alias + + - REPLACE_NAMES_FROM_PARTS: Generate new registry IDs, and replace name according + to name template + + - KEEP_NAMES: Keep existing entity names as registry IDs + + - REPLACE_ID_AND_NAME_FROM_PARTS: Generate registry IDs and names according + to name template + + ' + enum: + - NEW_IDS + - IDS_FROM_NAMES + - DELETE_NAMES + - SET_FROM_NAME_PARTS + - REPLACE_NAMES_FROM_PARTS + - KEEP_NAMES + - REPLACE_ID_AND_NAME_FROM_PARTS + type: string + NotFoundError: + properties: + error: + allOf: + - $ref: '#/components/schemas/BaseError' + - properties: + invalidId: + type: string + type: + enum: + - invalid_request_error + type: string + type: object + NucleotideAlignment: + allOf: + - $ref: '#/components/schemas/NucleotideAlignmentSummary' + - properties: + alignedSequences: + items: + $ref: '#/components/schemas/AlignedNucleotideSequence' + type: array + type: object + type: object + NucleotideAlignmentBase: + properties: + algorithm: + enum: + - mafft + - clustalo + type: string + clustaloOptions: + description: Options to pass to the ClustalO algorithm, only applicable + for ClustalO. + properties: + maxGuidetreeIterations: + default: -1 + description: Max guide tree iterations within combined iterations. Use + -1 for no max (all iterations will include guide tree iterations). + maximum: 5 + minimum: -1 + type: integer + maxHmmIterations: + default: -1 + description: Max HMM iterations within combined iterations. Use -1 for + no max (all iterations will include HMM iterations). + maximum: 5 + minimum: -1 + type: integer + mbedGuideTree: + default: true + description: Whether mBed-like clustering guide tree should be used + (faster to use it). + type: boolean + mbedIteration: + default: true + description: Whether mBed-like clustering iteration should be used (faster + to use it). + type: boolean + numCombinedIterations: + default: 0 + description: Number of (combined guide-tree/HMM) iterations. + maximum: 5 + minimum: 0 + type: integer + type: object + files: + items: + oneOf: + - properties: + sequenceId: + example: seq_3cxbVcCf + type: string + type: object + - $ref: '#/components/schemas/NucleotideAlignmentFile' + type: array + mafftOptions: + description: Options to pass to the MAFFT algorithm, only applicable for + MAFFT. + properties: + adjustDirection: + default: fast + description: "Adjust direction:\n * `fast`: Enabled, quickly.\n * `accurate`:\ + \ Enabled, accurately (slow).\n * `disabled`: Disabled, fastest.\n" + enum: + - fast + - accurate + - disabled + type: string + gapExtensionPenalty: + default: 0.0 + description: Gap extension penalty. + type: number + gapOpenPenalty: + default: 1.53 + description: Gap open penalty. + type: number + maxIterations: + default: 0 + description: Max refinement iterations. Not applicable for auto strategy, + as it will be selected automatically. + type: integer + retree: + default: 2 + description: Tree rebuilding. Only used for 6-mer strategy. + type: integer + strategy: + default: auto + description: "MAFFT Strategy:\n * `auto`: Pick a strategy automatically\ + \ based on the count and size of inputs.\n * `sixmer`: Use 6-mer distance\ + \ for constructing the guide tree.\n * `localpair`: Compute local\ + \ pairwise alignments using Smith-Waterman for constructing the guide\ + \ tree and iterative refinement.\n * `globalpair`: Compute global\ + \ pairwise alignments using Needleman-Wunsch for constructing the\ + \ guide tree and iterative refinement.\n" + enum: + - auto + - sixmer + - localpair + - globalpair + type: string + type: object + name: + example: my new alignment + maxLength: 255 + type: string + required: + - algorithm + - files + type: object + NucleotideAlignmentFile: + properties: + data: + format: byte + type: string + name: + type: string + type: object + NucleotideAlignmentSummary: + properties: + apiURL: + description: The canonical url of the Alignment in the API. + example: https://benchling.com/api/v2/alignments/seqanl_6ZVdX98t + format: uri + type: string + createdAt: + description: DateTime the Alignment was created + format: date-time + type: string + id: + example: seqanl_6ZVdX98t + type: string + modifiedAt: + description: DateTime the Alignment was last modified + format: date-time + type: string + name: + type: string + referenceSequenceId: + description: The ID of the template or consensus Sequence associated with + the Alignment + example: seq_MYmsnS1u + type: string + webURL: + description: The Benchling web UI url to view the Alignment + format: uri + type: string + type: object + NucleotideAlignmentsPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + alignments: + items: + $ref: '#/components/schemas/NucleotideAlignmentSummary' + type: array + type: object + NucleotideConsensusAlignmentCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/NucleotideAlignmentBase' + - properties: + newSequence: + properties: + folderId: + example: lib_qQFY3WQH + type: string + type: object + sequenceId: + type: string + NucleotideSequencePart: + properties: + end: + description: 0-based exclusive end index. The end of the sequence is always + represented as 0. + type: integer + sequenceId: + example: seq_VfVOART1 + type: string + start: + description: 0-based inclusive start index. + type: integer + type: object + NucleotideTemplateAlignmentCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/NucleotideAlignmentBase' + - properties: + templateSequenceId: + example: seq_rXqq0IHU + type: string + required: + - templateSequenceId + type: object + OAuthBadRequestError: + properties: + error: + allOf: + - $ref: '#/components/schemas/BaseError' + - properties: + type: + enum: + - invalid_request + - invalid_grant + - unauthorized_client + - unsupported_grant_type + type: string + type: object + OAuthUnauthorizedError: + properties: + error: + allOf: + - $ref: '#/components/schemas/BaseError' + - properties: + type: + enum: + - invalid_client + type: string + type: object + Oligo: + discriminator: + mapping: + DNA: DnaOligo + RNA: RnaOligo + propertyName: nucleotideType + properties: + aliases: + description: Array of aliases + items: + type: string + type: array + apiURL: + description: The canonical url of the Oligo in the API. + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + bases: + description: Base pairs of the Oligo. + example: ACTTTTT + type: string + createdAt: + description: DateTime the Oligo was created. + format: date-time + readOnly: true + type: string + creator: + $ref: '#/components/schemas/UserSummary' + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: Custom fields set on the Oligo. + entityRegistryId: + description: Registry ID of the Oligo if registered. + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + folderId: + description: ID of the folder that contains the Oligo. + nullable: true + type: string + id: + description: ID of the Oligo. + example: seq_bhuDUw9D + type: string + length: + description: Number of bases in the Oligo. + type: integer + modifiedAt: + description: DateTime the Oligo was last modified. + format: date-time + readOnly: true + type: string + name: + description: Name of the Oligo. + type: string + nucleotideType: + description: Nucleotide type of the Oligo. + enum: + - DNA + - RNA + type: string + registrationOrigin: + allOf: + - $ref: '#/components/schemas/RegistrationOrigin' + nullable: true + readOnly: true + registryId: + description: Registry the Oligo is registered in. + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + webURL: + description: URL of the Oligo. + example: https://benchling.com/benchling/f/lib_hBHqKbzE-oligos/seq_bhuDUw9D-test-oligo-abc/edit + format: uri + readOnly: true + type: string + type: object + OligoBaseRequest: + properties: + aliases: + description: Aliases to add to the Oligo + items: + type: string + type: array + authorIds: + description: IDs of users to set as the Oligo's authors. + items: + type: string + type: array + bases: + description: 'Base pairs of the oligo. + + ' + type: string + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: 'Custom fields to add to the Oligo. Every field should have + its name as a key, mapping to an object with information about the value + of the field. + + ' + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Fields to set on the Oligo. Must correspond with the schema''s + field definitions. Every field should have its name as a key, mapping + to an object with information about the value of the field. + + ' + folderId: + description: 'ID of the folder containing the Oligo. + + ' + type: string + name: + description: 'Name of the Oligo. + + ' + type: string + schemaId: + description: 'ID of the oligo''s schema. + + ' + type: string + type: object + OligoBaseRequestForCreate: + allOf: + - $ref: '#/components/schemas/OligoBaseRequest' + - required: + - bases + - name + OligoBulkUpsertRequest: + allOf: + - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' + - $ref: '#/components/schemas/OligoBaseRequestForCreate' + OligoCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/OligoBaseRequestForCreate' + - $ref: '#/components/schemas/CreateEntityIntoRegistry' + OligoUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/OligoBaseRequest' + OligoUpsertRequest: + allOf: + - $ref: '#/components/schemas/EntityUpsertBaseRequest' + - $ref: '#/components/schemas/OligoBaseRequestForCreate' + OligosArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of Oligos along with any IDs of batches + that were archived / unarchived. + + ' + properties: + batchIds: + items: + type: string + type: array + oligoIds: + items: + type: string + type: array + type: object + OligosArchive: + additionalProperties: false + description: 'The request body for archiving Oligos. + + ' + properties: + oligoIds: + items: + type: string + type: array + reason: + $ref: '#/components/schemas/EntityArchiveReason' + required: + - reason + - oligoIds + type: object + OligosBulkCreateRequest: + additionalProperties: false + properties: + oligos: + items: + $ref: '#/components/schemas/OligoCreate' + maxItems: 1000 + type: array + type: object + OligosBulkGet: + properties: + oligos: + items: + anyOf: + - $ref: '#/components/schemas/DnaOligo' + - $ref: '#/components/schemas/RnaOligo' + type: array + type: object + OligosPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + oligos: + items: + $ref: '#/components/schemas/Oligo' + type: array + OligosUnarchive: + additionalProperties: false + description: 'The request body for unarchiving Oligos. + + ' + properties: + oligoIds: + items: + type: string + type: array + required: + - oligoIds + type: object + OptimizeCodons: + additionalProperties: false + properties: + avoidedCutsiteEnzymeIds: + description: 'List of enzyme IDs whose recognition sites will be avoided + when creating the optimized sequence. + + ' + items: + type: string + type: array + codonUsageTableId: + description: ID of the codon usage table representing the target organism. + type: string + dnaSequenceIds: + description: IDs of DNA sequences to codon-optimize. + items: + type: string + type: array + folderId: + description: 'ID of the folder in which the optimized sequences will be + saved. + + ' + type: string + gcContent: + default: ANY + description: 'The amount of GC content in the optimized sequence. If not + specified, the optimization will default to ANY (0-1). LOW is defined + as below 0.33, MEDIUM as 0.33-0.66, and HIGH as above 0.66. + + ' + enum: + - ANY + - LOW + - MEDIUM + - HIGH + type: string + hairpinParameters: + additionalProperties: false + description: 'These parameters are applied in the AvoidHairpins specification + in DNAChisel. If hairpinParameters is not specified, hairpins will not + be avoided. + + ' + properties: + stem: + default: 20 + type: integer + window: + default: 200 + type: integer + type: object + reducedPatterns: + description: 'List of patterns to avoid when creating the optimized sequence, + on the coding strand only. + + ' + items: + $ref: '#/components/schemas/ReducedPattern' + type: array + schemaId: + description: ID of the optimized DNA sequences' schemas + type: string + shouldDepleteUridine: + default: false + description: 'If not specified, the optimization will default to false, + and mRNA uridine depletion will not be performed. + + ' + type: boolean + required: + - dnaSequenceIds + - folderId + type: object + Organization: + properties: + handle: + type: string + id: + type: string + name: + type: string + type: object + OrganizationSummary: + properties: + handle: + type: string + id: + type: string + name: + type: string + type: object + OrganizationsPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + organizations: + items: + $ref: '#/components/schemas/Organization' + type: array + type: object + Pagination: + properties: + nextToken: + type: string + PartySummary: + properties: + handle: + type: string + id: + type: string + name: + type: string + type: object + Plate: + additionalProperties: false + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + availableCapacity: + description: 'The number of available positions in a matrix plate. Null + for well plates. + + ' + nullable: true + readOnly: true + type: integer + barcode: + description: Barcode of the plate + nullable: true + type: string + createdAt: + description: DateTime the container was created + format: date-time + readOnly: true + type: string + creator: + $ref: '#/components/schemas/UserSummary' + fields: + $ref: '#/components/schemas/Fields' + id: + description: ID of the plate + type: string + modifiedAt: + description: DateTime the plate was last modified + format: date-time + readOnly: true + type: string + name: + description: Name of the plate, defaults to barcode if name is not provided. + type: string + occupiedCapacity: + description: 'The number of containers currently in a matrix plate. Null + for well plates. + + ' + nullable: true + readOnly: true + type: integer + parentStorageId: + description: ID of containing parent inventory (e.g. loc_k2lNspzS). + nullable: true + type: string + projectId: + description: ID of the project if set + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + title: SchemaProperty + totalCapacity: + description: 'The total capacity of a matrix plate (i.e. how many containers + it can store). Null for well plates. + + ' + nullable: true + readOnly: true + type: integer + type: + enum: + - matrix_plate + - well_plate + type: string + webURL: + readOnly: true + type: string + wells: + additionalProperties: + $ref: '#/components/schemas/WellOrInaccessibleResource' + description: Well contents of the plate, keyed by position string (eg. "A1"). + type: object + type: object + PlateCreate: + additionalProperties: false + properties: + barcode: + type: string + containerSchemaId: + type: string + fields: + $ref: '#/components/schemas/Fields' + name: + type: string + parentStorageId: + type: string + projectId: + type: string + schemaId: + type: string + wells: + additionalProperties: + properties: + barcode: + type: string + type: object + type: object + required: + - schemaId + type: object + PlateCreationTableNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - $ref: '#/components/schemas/StructuredTableApiIdentifiers' + - properties: + plateSchemaId: + example: pltsch_LRIuH0yJ + type: string + type: + enum: + - plate_creation_table + type: string + type: object + PlateSchema: + allOf: + - $ref: '#/components/schemas/RegistrySchema' + - properties: + containerSchema: + nullable: true + properties: + id: + type: string + name: + type: string + type: object + height: + type: number + plateType: + type: string + type: + enum: + - plate + readOnly: true + type: string + width: + type: number + type: object + PlateSchemasList: + properties: + plateSchemas: + items: + $ref: '#/components/schemas/PlateSchema' + readOnly: true + type: array + type: object + PlateSchemasPaginatedList: + allOf: + - $ref: '#/components/schemas/PlateSchemasList' + - properties: + nextToken: + type: string + type: object + PlateUpdate: + additionalProperties: false + properties: + fields: + $ref: '#/components/schemas/Fields' + name: + type: string + parentStorageId: + type: string + projectId: + type: string + type: object + PlatesArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of plates along with any IDs of containers + that were archived / unarchived. + + ' + properties: + containerIds: + items: + type: string + type: array + plateIds: + items: + type: string + type: array + type: object + PlatesArchive: + additionalProperties: false + properties: + plateIds: + description: Array of plate IDs + items: + type: string + type: array + reason: + description: 'Reason that plates are being archived. + + ' + enum: + - Made in error + - Retired + - Expended + - Shipped + - Contaminated + - Expired + - Missing + - Other + type: string + shouldRemoveBarcodes: + description: 'Remove barcodes. Removing barcodes from archived inventory + that contain items will also remove barcodes from the contained items. + + ' + type: boolean + required: + - plateIds + - reason + - shouldRemoveBarcodes + type: object + PlatesBulkGet: + properties: + plates: + items: + $ref: '#/components/schemas/Plate' + type: array + type: object + PlatesPaginatedList: + properties: + nextToken: + type: string + plates: + items: + $ref: '#/components/schemas/Plate' + type: array + type: object + PlatesUnarchive: + additionalProperties: false + properties: + plateIds: + description: Array of plate IDs + items: + type: string + type: array + required: + - plateIds + type: object + Primer: + properties: + bases: + readOnly: true + type: string + bindPosition: + readOnly: true + type: integer + color: + readOnly: true + type: string + end: + description: 0-based exclusive end index. The end of the sequence is always + represented as 0. + type: integer + name: + readOnly: true + type: string + oligoId: + type: string + overhangLength: + readOnly: true + type: integer + start: + description: 0-based inclusive start index. + type: integer + strand: + example: 1 + type: integer + type: object + PrintLabels: + additionalProperties: false + properties: + containerIds: + description: 'List of IDs of containers that will have labels printed (one + label will be printed per container). + + ' + items: + type: string + type: array + labelTemplateId: + description: 'ID of label template to use (same template will be used for + all labels printed). + + ' + example: lbltmp_lCpY5Qvh + type: string + printerId: + description: 'ID of printer to use (same printer will be used for all labels + printed). + + ' + example: print_YJQkilOJ + type: string + required: + - containerIds + - labelTemplateId + - printerId + type: object + Printer: + properties: + address: + description: Web address of the printer (either IP address or URL). + type: string + description: + description: Short description of the printer. + nullable: true + type: string + id: + description: ID of the printer. + type: string + name: + description: Name of the printer. + type: string + port: + description: Port to reach the printer at. + nullable: true + type: integer + registryId: + description: ID of the registry associated with this printer. + type: string + type: object + PrintersList: + properties: + labelPrinters: + items: + $ref: '#/components/schemas/Printer' + type: array + type: object + Project: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + id: + type: string + name: + type: string + owner: + anyOf: + - $ref: '#/components/schemas/Organization' + - $ref: '#/components/schemas/UserSummary' + type: object + ProjectsArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of projects along with any IDs of project + contents that were unarchived. + + ' + properties: + aaSequenceIds: + items: + type: string + type: array + customEntityIds: + items: + type: string + type: array + dnaSequenceIds: + items: + type: string + type: array + entryIds: + items: + type: string + type: array + folderIds: + items: + type: string + type: array + mixtureIds: + items: + type: string + type: array + oligoIds: + items: + type: string + type: array + projectIds: + items: + type: string + type: array + protocolIds: + items: + type: string + type: array + type: object + ProjectsArchive: + additionalProperties: false + properties: + projectIds: + description: A list of project IDs to archive. + items: + type: string + type: array + reason: + description: 'The reason for archiving the provided projects. Accepted reasons + may differ based on tenant configuration. + + ' + enum: + - Made in error + - Retired + - Other + type: string + required: + - reason + - projectIds + type: object + ProjectsPaginatedList: + properties: + nextToken: + type: string + projects: + items: + $ref: '#/components/schemas/Project' + type: array + type: object + ProjectsUnarchive: + additionalProperties: false + properties: + projectIds: + description: A list of project IDs to unarchive. + items: + type: string + type: array + required: + - projectIds + type: object + ReducedPattern: + additionalProperties: false + description: 'Patterns must consist of ATGC bases only, and are case-insensitive + ("gat" will reduce usage of "GAT"). If avoidReverseComplement is true, then + the pattern''s reverse complement will also be avoided. + + ' + properties: + avoidReverseComplement: + default: false + type: boolean + pattern: + type: string + type: object + RegisterEntities: + additionalProperties: false + properties: + entityIds: + description: Array of entity IDs + items: + type: string + maxItems: 2500 + type: array + namingStrategy: + $ref: '#/components/schemas/NamingStrategy' + required: + - entityIds + - namingStrategy + type: object + RegisteredEntitiesList: + properties: + entities: + items: + discriminator: + mapping: + aa_sequence: '#/components/schemas/AaSequenceWithEntityType' + custom_entity: '#/components/schemas/CustomEntityWithEntityType' + dna_oligo: '#/components/schemas/DnaOligoWithEntityType' + dna_sequence: '#/components/schemas/DnaSequenceWithEntityType' + mixture: '#/components/schemas/MixtureWithEntityType' + rna_oligo: '#/components/schemas/RnaOligoWithEntityType' + propertyName: entityType + oneOf: + - $ref: '#/components/schemas/DnaSequenceWithEntityType' + - $ref: '#/components/schemas/CustomEntityWithEntityType' + - $ref: '#/components/schemas/AaSequenceWithEntityType' + - $ref: '#/components/schemas/MixtureWithEntityType' + - $ref: '#/components/schemas/DnaOligoWithEntityType' + - $ref: '#/components/schemas/RnaOligoWithEntityType' + type: array + type: object + RegistrationOrigin: + properties: + originEntryId: + nullable: true + readOnly: true + type: string + registeredAt: + format: date-time + readOnly: true + type: string + type: object + RegistrationTableNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - $ref: '#/components/schemas/StructuredTableApiIdentifiers' + - properties: + entitySchemaId: + example: ts_hMbJPSA8 + type: string + type: + enum: + - registration_table + type: string + type: object + RegistriesList: + properties: + registries: + items: + $ref: '#/components/schemas/Registry' + type: array + type: object + Registry: + properties: + id: + type: string + modifiedAt: + description: DateTime the Registry was last modified + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + type: string + name: + type: string + owner: + $ref: '#/components/schemas/Organization' + type: object + RegistrySchema: + allOf: + - $ref: '#/components/schemas/Schema' + - properties: + prefix: + type: string + registryId: + type: string + type: object + Request: + allOf: + - $ref: '#/components/schemas/RequestBase' + - properties: + apiURL: + description: The canonical url of the Request in the API. + example: https://benchling.com/api/v2/requests/req_dnn2JtWq + format: uri + readOnly: true + type: string + assignees: + description: Array of assignees + items: + oneOf: + - $ref: '#/components/schemas/RequestUserAssignee' + - $ref: '#/components/schemas/RequestTeamAssignee' + readOnly: true + type: array + createdAt: + description: Date and time the request was created + example: 2017-04-23 01:30:50.970926 + format: isoformat + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + - description: UserSummary of the user who created the request + - readOnly: true + displayId: + description: User-friendly ID of the request + example: VP1 + readOnly: true + type: string + fields: + $ref: '#/components/schemas/Fields' + id: + description: Unique ID for the request + example: req_JekfeyVS + readOnly: true + type: string + projectId: + description: The ID of the project to which the request belongs. + example: src_29pt8Ida + type: string + requestStatus: + $ref: '#/components/schemas/RequestStatus' + requestor: + allOf: + - $ref: '#/components/schemas/UserSummary' + - description: UserSummary of the user making the request + - readOnly: true + sampleGroups: + items: + $ref: '#/components/schemas/RequestSampleGroup' + type: array + scheduledOn: + description: Date the request is scheduled to be executed on, in YYYY-MM-DD + format. + example: 2019-09-12 + format: date + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + - description: SchemaSummary for the request + example: + id: assaysch_3IF58QOf + name: Vector Production + readOnly: true + title: SchemaProperty + tasks: + items: + $ref: '#/components/schemas/RequestTask' + type: array + webURL: + description: URL of the request + example: https://benchling.com/requests/req_JekfeyVS + format: uri + readOnly: true + type: string + RequestBase: + description: A request is an ask to perform a service, e.g. produce a sample + or perform assays on a sample. Requests are usually placed to another team + or individual who specializes in performing the service. + type: object + RequestCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/RequestWriteBase' + - properties: + schemaId: + description: ID of the request's schema. + example: assaysch_3IF58QOf + type: string + writeOnly: true + required: + - schemaId + - fields + - samples + - sampleGroups + - projectId + RequestCreatedEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.request.created + type: string + request: + $ref: '#/components/schemas/Request' + type: object + RequestFulfillment: + description: 'A request fulfillment represents work that is done which changes + the status of a request or a sample group within that request. + + Fulfillments are created when state changes between IN_PROGRESS, COMPLETED, + or FAILED statuses. Fulfillments do not capture a PENDING state because all + requests or request sample groups are considered PENDING until the first corresponding + fulfillment is created. + + ' + properties: + createdAt: + description: Date and time the fulfillment was created + format: date-time + type: string + entryId: + description: ID of the entry this fulfillment was executed in, if any + example: etr_IKwdYx31 + type: string + id: + description: ID of the request fulfillment + example: reqffm_8Hm71Usw + type: string + modifiedAt: + description: DateTime the Request Fulfillment was last modified + format: date-time + readOnly: true + type: string + requestId: + description: ID of the request this fulfillment fulfills + example: req_pu9caSiv + type: string + sampleGroup: + allOf: + - $ref: '#/components/schemas/SampleGroup' + description: The request sample group this fulfillment was executed upon, + if any. + nullable: true + status: + $ref: '#/components/schemas/SampleGroupStatus' + type: object + RequestFulfillmentsPaginatedList: + description: An object containing an array of RequestFulfillments + properties: + nextToken: + example: Im5ldyB0ZXN0Ig== + type: string + requestFulfillments: + items: + $ref: '#/components/schemas/RequestFulfillment' + type: array + type: object + RequestResponse: + properties: + results: + items: + $ref: '#/components/schemas/AssayResult' + type: array + samples: + description: Array of samples produced by the request. + items: + properties: + batch: + allOf: + - $ref: '#/components/schemas/RequestResponseSamplesItemBatch' + description: The sample, if it is a batch resource. Null otherwise. + nullable: true + entity: + allOf: + - $ref: '#/components/schemas/RequestResponseSamplesItemEntity' + description: The sample, if it is an entity resource. Null otherwise. + nullable: true + status: + description: The status of the sample, based on the status of the + stage run that generated it. + enum: + - COMPLETED + - DISCARDED + type: string + type: object + type: array + type: object + RequestResponseSamplesItemBatch: + allOf: + - $ref: '#/components/schemas/BatchOrInaccessibleResource' + RequestResponseSamplesItemEntity: + allOf: + - $ref: '#/components/schemas/EntityOrInaccessibleResource' + RequestSampleGroup: + properties: + id: + example: sgrp_YJKtcWV + type: string + samples: + $ref: '#/components/schemas/RequestSampleGroupSamples' + type: object + RequestSampleGroupCreate: + properties: + samples: + $ref: '#/components/schemas/RequestSampleGroupSamples' + required: + - samples + type: object + RequestSampleGroupSamples: + additionalProperties: + oneOf: + - $ref: '#/components/schemas/RequestSampleWithEntity' + - $ref: '#/components/schemas/RequestSampleWithBatch' + description: 'The key for each RequestSample should match one of the samplesSchema[n].name + property in the request schema json. + + ' + example: + Batch Example: + batchId: bat_XK0UnLyk + Entity Example: + containerId: ctn_urUAEBq + entityId: seq_nDtxYEs + type: object + RequestSampleWithBatch: + properties: + batchId: + example: bat_XK0UnLyk + type: string + containerId: + example: ctn_urUAEBq + type: string + required: + - batchId + type: object + RequestSampleWithEntity: + properties: + containerId: + example: ctn_urUAEBq + type: string + entityId: + example: seq_nDtxYEs + type: string + required: + - entityId + type: object + RequestSchema: + allOf: + - $ref: '#/components/schemas/Schema' + - properties: + modifiedAt: + description: DateTime the Request Schema was last modified + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + type: string + organization: + description: 'The organization that owns the schema. + + ' + properties: + handle: + type: string + id: + type: string + name: + type: string + type: object + systemName: + type: string + type: + enum: + - request + readOnly: true + type: string + type: object + RequestSchemasPaginatedList: + properties: + nextToken: + type: string + requestSchemas: + items: + $ref: '#/components/schemas/RequestSchema' + readOnly: true + type: array + type: object + RequestStatus: + enum: + - REQUESTED + - SCHEDULED + - IN_PROGRESS + - COMPLETED + - CANCELLED + type: string + RequestTask: + allOf: + - $ref: '#/components/schemas/RequestTaskBase' + description: 'A request task. + + ' + properties: + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + title: SchemaProperty + type: object + RequestTaskBase: + allOf: + - $ref: '#/components/schemas/RequestTaskBaseFields' + description: 'A request task. + + ' + properties: + id: + description: ID of the request task + example: reqtsk_PFHQ8rmb + type: string + required: + - id + type: object + RequestTaskBaseFields: + description: 'Shared fields for request tasks and related endpoints. + + ' + properties: + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Schema fields to set on the request task. + + Every field should have its name as a key, mapping to an object with information + about the value of the field. + + ' + sampleGroupIds: + description: IDs of all request sample groups now associated with this task. + items: + type: string + type: array + type: object + RequestTaskSchema: + allOf: + - $ref: '#/components/schemas/Schema' + - properties: + modifiedAt: + description: DateTime the Request Task Schema was last modified + example: '2017-04-18T05:55:48.685345+00:00' + format: date-time + type: string + organization: + description: 'The organization that owns the schema. + + ' + properties: + handle: + type: string + id: + type: string + name: + type: string + type: object + systemName: + type: string + type: + enum: + - request_task + readOnly: true + type: string + type: object + RequestTaskSchemasPaginatedList: + properties: + nextToken: + type: string + requestTaskSchemas: + items: + $ref: '#/components/schemas/RequestTaskSchema' + readOnly: true + type: array + type: object + RequestTasksBulkCreate: + allOf: + - $ref: '#/components/schemas/RequestTaskBaseFields' + properties: + schemaId: + description: The schema id of the task to create + example: reqtsksch_XHu79QRw + type: string + required: + - schemaId + type: object + RequestTasksBulkCreateRequest: + additionalProperties: false + properties: + tasks: + description: The tasks to create + items: + $ref: '#/components/schemas/RequestTasksBulkCreate' + maxItems: 100 + type: array + required: + - tasks + type: object + RequestTasksBulkCreateResponse: + properties: + tasks: + description: The created tasks + items: + $ref: '#/components/schemas/RequestTask' + type: array + type: object + RequestTasksBulkUpdateRequest: + additionalProperties: false + description: 'A request body for bulk updating request tasks. + + ' + properties: + tasks: + description: The tasks to update + items: + $ref: '#/components/schemas/RequestTaskBase' + type: array + required: + - tasks + type: object + RequestTasksBulkUpdateResponse: + properties: + tasks: + description: The tasks to update + items: + $ref: '#/components/schemas/RequestTask' + type: array + type: object + RequestTeamAssignee: + properties: + team: + $ref: '#/components/schemas/TeamSummary' + type: object + RequestUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/RequestWriteBase' + - properties: + requestStatus: + $ref: '#/components/schemas/RequestStatus' + RequestUpdatedFieldsEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - $ref: '#/components/schemas/UpdateEventMixin' + - properties: + eventType: + enum: + - v2.request.updated.fields + type: string + request: + $ref: '#/components/schemas/Request' + type: object + RequestUserAssignee: + properties: + user: + $ref: '#/components/schemas/UserSummary' + type: object + RequestWriteBase: + allOf: + - $ref: '#/components/schemas/RequestBase' + - properties: + assignees: + description: Array of assignees + items: + oneOf: + - $ref: '#/components/schemas/RequestWriteUserAssignee' + - $ref: '#/components/schemas/RequestWriteTeamAssignee' + type: array + writeOnly: true + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: The request's fields + projectId: + description: The ID of the project to which the request belongs. + example: src_29pt8Ida + type: string + requestorId: + description: 'ID of the user making the request. If unspecified, the requestor + is the request creator. + + ' + example: ent_a0SApq3z + nullable: true + type: string + writeOnly: true + sampleGroups: + items: + $ref: '#/components/schemas/RequestSampleGroupCreate' + type: array + scheduledOn: + description: Date the request is scheduled to be executed on, in YYYY-MM-DD + format. + example: 2019-09-12 + format: date + type: string + writeOnly: true + RequestWriteTeamAssignee: + properties: + teamId: + example: team_5cjIguqc + type: string + required: + - teamId + type: object + RequestWriteUserAssignee: + properties: + userId: + example: ent_a0SApq3z + type: string + required: + - userId + type: object + RequestsBulkGet: + properties: + requests: + items: + $ref: '#/components/schemas/Request' + type: array + type: object + RequestsPaginatedList: + allOf: + - $ref: '#/components/schemas/RequestsBulkGet' + - properties: + nextToken: + type: string + ResultsTableNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - $ref: '#/components/schemas/StructuredTableApiIdentifiers' + - properties: + assayResultSchemaId: + example: assaysch_msh1Ly6g + type: string + type: + enum: + - results_table + type: string + type: object + RnaAnnotation: + allOf: + - $ref: '#/components/schemas/SequenceFeatureBase' + - properties: + end: + description: 0-based exclusive end index. The end of the sequence is always + represented as 0. + type: integer + start: + description: 0-based inclusive start index. + type: integer + strand: + example: 1 + maximum: 1 + minimum: 0 + type: integer + type: + type: string + type: object + RnaOligo: + allOf: + - $ref: '#/components/schemas/Oligo' + - properties: + annotations: + description: Annotations on the Oligo. + items: + $ref: '#/components/schemas/RnaAnnotation' + type: array + apiURL: + example: https://benchling.com/api/v2/rna-oligos/seq_bhuDUw9D + type: string + bases: + example: ACUUUUU + type: string + customNotation: + description: Representation of the oligo in the custom notation specified + in the request. Null if no notation was specified. + nullable: true + type: string + customNotationName: + description: Name of the custom notation specified in the request. Null + if no notation was specified. + nullable: true + type: string + helm: + description: Representation of the oligo in HELM syntax, including any + chemical modifications + example: RNA1{r(A)p.r(C)[Ssp].r(U)p.r(U)p.r(U)p.r(U)p.r(U)p}$$$$V2.0 + type: string + nucleotideType: + example: RNA + type: string + RnaOligoBulkUpdate: + additionalProperties: false + allOf: + - properties: + id: + type: string + type: object + - $ref: '#/components/schemas/RnaOligoUpdate' + RnaOligoCreate: + allOf: + - $ref: '#/components/schemas/OligoCreate' + - properties: + annotations: + description: Annotations on the Oligo. + items: + $ref: '#/components/schemas/RnaAnnotation' + type: array + helm: + description: Representation of the oligo in HELM syntax, including any + chemical modifications + example: RNA1{r(A)p.r([impr2G])p.r(G)[Ssp].r(A)p.r(U)p.r(U)p}$$$$V2.0 + type: string + - $ref: '#/components/schemas/CustomNotationRequest' + - required: + - name + RnaOligoUpdate: + allOf: + - $ref: '#/components/schemas/OligoUpdate' + - properties: + annotations: + description: Annotations on the Oligo. + items: + $ref: '#/components/schemas/RnaAnnotation' + type: array + helm: + description: Representation of the oligo in HELM syntax, including any + chemical modifications + example: RNA1{r(A)p.r([impr2G])p.r(G)[Ssp].r(A)p.r(U)p.r(U)p}$$$$V2.0 + type: string + - $ref: '#/components/schemas/CustomNotationRequest' + RnaOligoWithEntityType: + allOf: + - $ref: '#/components/schemas/RnaOligo' + - properties: + entityType: + enum: + - rna_oligo + type: string + type: object + type: object + RnaOligosArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type. This includes the IDs of RNA Oligos along with any IDs of batches + that were archived / unarchived. + + ' + properties: + batchIds: + items: + type: string + type: array + rnaOligoIds: + items: + type: string + type: array + type: object + RnaOligosArchive: + additionalProperties: false + description: 'The request body for archiving RNA Oligos. + + ' + properties: + reason: + $ref: '#/components/schemas/EntityArchiveReason' + rnaOligoIds: + items: + type: string + type: array + required: + - reason + - rnaOligoIds + type: object + RnaOligosBulkCreateRequest: + additionalProperties: false + properties: + rnaOligos: + items: + $ref: '#/components/schemas/RnaOligoCreate' + maxItems: 1000 + type: array + type: object + RnaOligosBulkUpdateRequest: + additionalProperties: false + properties: + rnaOligos: + items: + $ref: '#/components/schemas/RnaOligoBulkUpdate' + type: array + type: object + RnaOligosBulkUpsertRequest: + additionalProperties: false + maxItems: 1000 + properties: + rnaOligos: + items: + $ref: '#/components/schemas/OligoBulkUpsertRequest' + type: array + required: + - rnaOligos + type: object + RnaOligosPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + rnaOligos: + items: + $ref: '#/components/schemas/RnaOligo' + type: array + RnaOligosUnarchive: + additionalProperties: false + description: 'The request body for unarchiving RNA Oligos. + + ' + properties: + rnaOligoIds: + items: + type: string + type: array + required: + - rnaOligoIds + type: object + RnaSequence: + properties: + aliases: + items: + type: string + type: array + annotations: + items: + $ref: '#/components/schemas/RnaAnnotation' + type: array + apiURL: + description: The canonical url of the RNA Sequence in the API. + example: https://benchling.com/api/v2/rna-sequences/seq_asZya4lk + format: uri + readOnly: true + type: string + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + bases: + type: string + createdAt: + format: date-time + readOnly: true + type: string + creator: + $ref: '#/components/schemas/UserSummary' + customFields: + $ref: '#/components/schemas/CustomFields' + customNotation: + description: Representation of the RNA Sequence in the custom notation specified + in the request. Null if no notation was specified. + nullable: true + type: string + customNotationName: + description: Name of the custom notation specified in the request. Null + if no notation was specified. + nullable: true + type: string + entityRegistryId: + nullable: true + type: string + fields: + $ref: '#/components/schemas/Fields' + folderId: + nullable: true + type: string + helm: + description: Representation of the RNA Sequence in HELM syntax, including + any chemical modifications. + example: RNA1{r(A)p.r(C)[Ssp].r(U)p.r(U)p.r(U)p.r(U)p.r(U)p}$$$$V2.0 + nullable: true + type: string + id: + type: string + isCircular: + example: false + type: boolean + length: + type: integer + modifiedAt: + format: date-time + readOnly: true + type: string + name: + type: string + parts: + items: + $ref: '#/components/schemas/RnaSequencePart' + type: array + primers: + items: + $ref: '#/components/schemas/Primer' + type: array + registrationOrigin: + allOf: + - $ref: '#/components/schemas/RegistrationOrigin' + nullable: true + readOnly: true + registryId: + nullable: true + type: string + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + translations: + items: + $ref: '#/components/schemas/Translation' + type: array + webURL: + readOnly: true + type: string + type: object + RnaSequenceBaseRequest: + allOf: + - properties: + aliases: + description: Aliases to add to the RNA sequence + items: + type: string + type: array + annotations: + description: 'Annotations to create on the RNA sequence. + + ' + items: + $ref: '#/components/schemas/RnaAnnotation' + type: array + authorIds: + description: IDs of users to set as the RNA sequence's authors. + items: + type: string + type: array + bases: + description: 'Base pairs for the RNA sequence. + + ' + type: string + customFields: + allOf: + - $ref: '#/components/schemas/CustomFields' + description: 'Custom fields to add to the RNA sequence. Every field should + have its name as a key, mapping to an object with information about + the value of the field. + + ' + fields: + allOf: + - $ref: '#/components/schemas/Fields' + description: 'Fields to set on the RNA sequence. Must correspond with + the schema''s field definitions. Every field should have its name as + a key, mapping to an object with information about the value of the + field. + + ' + folderId: + description: 'ID of the folder containing the RNA sequence. + + ' + type: string + helm: + description: Representation of the RNA sequence in HELM syntax, including + any chemical modifications + example: RNA1{r(A)p.r([impr2G])p.r(G)[Ssp].r(A)p.r(U)p.r(U)p}$$$$V2.0 + type: string + isCircular: + description: 'Whether the RNA sequence is circular or linear. RNA sequences + can only be linear + + ' + example: false + type: boolean + name: + description: 'Name of the RNA sequence. + + ' + type: string + parts: + items: + $ref: '#/components/schemas/RnaSequencePart' + type: array + primers: + items: + $ref: '#/components/schemas/Primer' + type: array + schemaId: + description: 'ID of the RNA sequence''s schema. + + ' + type: string + translations: + description: 'Translations to create on the RNA sequence. Translations + are specified by either a combination of ''start'' and ''end'' fields, + or a list of regions. Both cannot be provided. + + ' + items: + $ref: '#/components/schemas/Translation' + type: array + - $ref: '#/components/schemas/CustomNotationRequest' + type: object + RnaSequenceBaseRequestForCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/RnaSequenceBaseRequest' + - required: + - name + RnaSequenceBulkCreate: + allOf: + - $ref: '#/components/schemas/RnaSequenceCreate' + RnaSequenceBulkUpdate: + additionalProperties: false + allOf: + - properties: + id: + type: string + type: object + - $ref: '#/components/schemas/RnaSequenceBaseRequest' + RnaSequenceCreate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/RnaSequenceBaseRequestForCreate' + - $ref: '#/components/schemas/CreateEntityIntoRegistry' + RnaSequencePart: + allOf: + - $ref: '#/components/schemas/NucleotideSequencePart' + - properties: + strand: + example: 1 + maximum: 1 + minimum: 1 + type: integer + type: object + RnaSequenceRequestRegistryFields: + properties: + entityRegistryId: + type: string + type: object + RnaSequenceUpdate: + additionalProperties: false + allOf: + - $ref: '#/components/schemas/RnaSequenceBaseRequest' + - $ref: '#/components/schemas/RnaSequenceRequestRegistryFields' + RnaSequencesArchivalChange: + description: 'IDs of all RNA Sequences that were archived or unarchived, grouped + by resource type. + + ' + properties: + rnaSequenceIds: + items: + type: string + type: array + type: object + RnaSequencesArchive: + additionalProperties: false + description: 'The request body for archiving RNA sequences. + + ' + properties: + reason: + $ref: '#/components/schemas/EntityArchiveReason' + rnaSequenceIds: + items: + type: string + type: array + required: + - reason + - rnaSequenceIds + type: object + RnaSequencesBulkCreateRequest: + additionalProperties: false + properties: + rnaSequences: + items: + $ref: '#/components/schemas/RnaSequenceBulkCreate' + maxItems: 1000 + type: array + type: object + RnaSequencesBulkGet: + properties: + rnaSequences: + items: + $ref: '#/components/schemas/RnaSequence' + type: array + type: object + RnaSequencesBulkUpdateRequest: + additionalProperties: false + properties: + rnaSequences: + items: + $ref: '#/components/schemas/RnaSequenceBulkUpdate' + type: array + type: object + RnaSequencesPaginatedList: + properties: + nextToken: + type: string + rnaSequences: + items: + $ref: '#/components/schemas/RnaSequence' + type: array + type: object + RnaSequencesUnarchive: + additionalProperties: false + description: 'The request body for unarchiving RNA sequences. + + ' + properties: + rnaSequenceIds: + items: + type: string + type: array + required: + - rnaSequenceIds + type: object + SampleGroup: + description: Represents a sample group that is an input to a request. A sample + group is a set of samples upon which work in the request should be done. + properties: + id: + type: string + samples: + type: object + type: object + SampleGroupStatus: + description: Status of a sample group + enum: + - IN_PROGRESS + - COMPLETED + - FAILED + type: string + SampleGroupStatusUpdate: + properties: + sampleGroupId: + description: The string id of the sample group + example: sgrp_2GPCXk6 + type: string + status: + $ref: '#/components/schemas/SampleGroupStatus' + required: + - sampleGroupId + - status + type: object + SampleGroupsStatusUpdate: + additionalProperties: false + description: Specification to update status of sample groups on the request + which were executed. + properties: + sampleGroups: + items: + $ref: '#/components/schemas/SampleGroupStatusUpdate' + type: array + required: + - sampleGroups + type: object + SampleRestrictionStatus: + enum: + - RESTRICTED + - UNRESTRICTED + - NOT_APPLICABLE + type: string + Schema: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + fieldDefinitions: + items: + oneOf: + - $ref: '#/components/schemas/SimpleFieldDefinition' + - $ref: '#/components/schemas/IntegerFieldDefinition' + - $ref: '#/components/schemas/FloatFieldDefinition' + - $ref: '#/components/schemas/DropdownFieldDefinition' + - $ref: '#/components/schemas/SchemaLinkFieldDefinition' + type: array + id: + type: string + name: + type: string + type: + type: string + type: object + SchemaDependencySubtypes: + enum: + - aa_sequence + - dna_sequence + - custom_entity + - mixture + - molecule + - dna_oligo + - rna_oligo + - rna_sequence + type: string + SchemaFieldsQueryParam: + additionalProperties: true + example: + schemaField.Cell Count: '>= 10 AND <= 50' + schemaField.Experiment: MyExperiment + schemaField.Started On: <= 2023-05-23T00:00:00Z + type: object + SchemaLinkFieldDefinition: + allOf: + - $ref: '#/components/schemas/FieldDefinition' + - properties: + schemaId: + nullable: true + type: string + type: + enum: + - entity_link + - entry_link + - part_link + - translation_link + - batch_link + - storage_link + - assay_request_link + - assay_result_link + - assay_run_link + type: string + type: object + SchemaSummary: + properties: + id: + type: string + name: + type: string + type: object + SearchBasesRequest: + additionalProperties: false + properties: + archiveReason: + default: NOT_ARCHIVED + enum: + - NOT_ARCHIVED + - Other + - Archived + type: string + bases: + example: GATTACAA + minLength: 8 + type: string + nextToken: + type: string + pageSize: + default: 50 + maximum: 100 + minimum: 0 + type: integer + registryId: + description: 'ID of a registry. Restricts results to those registered in + this registry. Specifying `null` returns unregistered items. + + ' + example: src_pwKo8pHh + nullable: true + type: string + schemaId: + description: 'ID of the nucleotide sequence''s schema. + + ' + example: ts_Y6t0Zbhg + type: string + sort: + default: modifiedAt:desc + enum: + - modifiedAt:asc + - modifiedAt:desc + - name:asc + - name:desc + type: string + required: + - bases + type: object + SearchInputMultiValueUiBlock: + allOf: + - $ref: '#/components/schemas/UserInputMultiValueUiBlock' + - $ref: '#/components/schemas/BaseSearchInputUIBlock' + - properties: + type: + enum: + - SEARCH_INPUT_MULTIVALUE + type: string + required: + - type + type: object + SearchInputMultiValueUiBlockCreate: + allOf: + - $ref: '#/components/schemas/SearchInputMultiValueUiBlock' + type: object + SearchInputMultiValueUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/SearchInputMultiValueUiBlock' + type: object + SearchInputUiBlock: + allOf: + - $ref: '#/components/schemas/UserInputUiBlock' + - $ref: '#/components/schemas/BaseSearchInputUIBlock' + - properties: + type: + enum: + - SEARCH_INPUT + type: string + required: + - type + type: object + SearchInputUiBlockCreate: + allOf: + - $ref: '#/components/schemas/SearchInputUiBlock' + type: object + SearchInputUiBlockItemType: + enum: + - dna_sequence + - dna_oligo + - aa_sequence + - custom_entity + - mixture + - box + - container + - location + - plate + type: string + SearchInputUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/SearchInputUiBlock' + type: object + SectionUiBlock: + allOf: + - $ref: '#/components/schemas/AppCanvasLeafNodeUiBlockList' + - properties: + id: + example: user_generated_id + type: string + type: + enum: + - SECTION + type: string + type: object + SectionUiBlockCreate: + allOf: + - $ref: '#/components/schemas/SectionUiBlock' + type: object + SectionUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/SectionUiBlock' + type: object + SecureTextAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - properties: + type: + enum: + - secure_text + example: secure_text + type: string + value: + example: + nullable: true + type: string + type: object + SelectorInputMultiValueUiBlock: + allOf: + - $ref: '#/components/schemas/UserInputMultiValueUiBlock' + - $ref: '#/components/schemas/BaseSelectorInputUIBlock' + - properties: + type: + enum: + - SELECTOR_INPUT_MULTIVALUE + type: string + required: + - type + type: object + SelectorInputMultiValueUiBlockCreate: + allOf: + - $ref: '#/components/schemas/SelectorInputMultiValueUiBlock' + type: object + SelectorInputMultiValueUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/SelectorInputMultiValueUiBlock' + type: object + SelectorInputUiBlock: + allOf: + - $ref: '#/components/schemas/UserInputUiBlock' + - $ref: '#/components/schemas/BaseSelectorInputUIBlock' + - properties: + type: + enum: + - SELECTOR_INPUT + type: string + required: + - type + type: object + SelectorInputUiBlockCreate: + allOf: + - $ref: '#/components/schemas/SelectorInputUiBlock' + type: object + SelectorInputUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/SelectorInputUiBlock' + type: object + SequenceFeatureBase: + properties: + color: + description: Hex color code used when displaying this feature in the UI. + example: '#F58A5E' + type: string + customFields: + items: + $ref: '#/components/schemas/SequenceFeatureCustomField' + maxItems: 100 + type: array + name: + maxLength: 2048 + type: string + notes: + example: Cong et al Science. 2013 Jan 3. + maxLength: 10000 + type: string + type: object + SequenceFeatureCustomField: + description: A name and value pair associated with a sequence feature (annotation + or translation). For genbank imports, these are the qualifiers associated + with each feature. + properties: + name: + description: Name of the custom field + type: string + value: + description: Value of the custom field + type: string + type: object + SimpleFieldDefinition: + allOf: + - $ref: '#/components/schemas/FieldDefinition' + - properties: + type: + enum: + - dna_sequence_link + - aa_sequence_link + - custom_entity_link + - mixture_link + - blob_link + - text + - long_text + - boolean + - datetime + - date + - json + type: string + type: object + SimpleNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - properties: + links: + description: 'Array of links referenced in text via an @-mention, hyperlink, + or the drag-n-dropped preview attached to the note. + + ' + items: + $ref: '#/components/schemas/EntryLink' + type: array + text: + description: The textual contents of the note. + type: string + type: + enum: + - text + - code + - list_bullet + - list_number + type: string + type: object + description: 'Simple note parts include the following types: - ''text'': plain + text - ''code'': preformatted code block - ''list_bullet'': one "line" of + a bulleted list - ''list_number'': one "line" of a numbered list + + ' + StageEntry: + additionalProperties: false + description: A notebook entry used for execution of one or more stage runs in + a legacy workflow. + properties: + apiURL: + description: The canonical url of the Stage Entry in the API. + example: https://benchling.com/api/v2-alpha/stage-entries/stgentr_1HEcejZq + format: uri + readOnly: true + type: string + authors: + description: 'Array of UserSummary Resources of the authors of the stage + entry. This defaults to the creator but can be manually changed. + + ' + items: + $ref: '#/components/schemas/UserSummary' + type: array + createdAt: + description: DateTime the stage entry was created at + format: date-time + readOnly: true + type: string + creator: + allOf: + - $ref: '#/components/schemas/UserSummary' + description: UserSummary Resource of the user who created the stage entry + readOnly: true + customFields: + $ref: '#/components/schemas/CustomFields' + displayId: + description: User-friendly ID of the stage entry + type: string + fields: + $ref: '#/components/schemas/Fields' + folderId: + description: ID of the folder that contains the stage entry + type: string + id: + description: ID of the stage entry + type: string + modifiedAt: + description: DateTime the stage entry was last modified + type: string + name: + description: Title of the stage entry + type: string + reviewRecord: + description: Review record if set + nullable: true + type: object + schema: + allOf: + - $ref: '#/components/schemas/EntrySchema' + description: Entry schema if set + nullable: true + title: SchemaProperty + type: object + webURL: + description: URL of the stage entry + type: string + workflowId: + description: ID of the parent workflow + example: wfw_7COQmok7 + type: string + workflowStageId: + description: ID of the associated workflow stage + example: wfwstg_EZuryAiW + type: string + type: object + StageEntryCreatedEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + StageEntryUpdatedFieldsEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - $ref: '#/components/schemas/UpdateEventMixin' + - properties: + eventType: + enum: + - v2-alpha.stageEntry.updated.fields + type: string + stageEntry: + $ref: '#/components/schemas/StageEntry' + type: object + StageEntryUpdatedReviewRecordEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - $ref: '#/components/schemas/UpdateEventMixin' + - properties: + entry: + $ref: '#/components/schemas/StageEntry' + eventType: + enum: + - v2-alpha.stageEntry.updated.reviewRecord + type: string + type: object + StructuredTableApiIdentifiers: + properties: + apiId: + type: string + columns: + items: + $ref: '#/components/schemas/StructuredTableColumnInfo' + type: array + type: object + StructuredTableColumnInfo: + properties: + columnId: + type: string + isReadOnly: + type: boolean + name: + type: string + type: object + TableNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - properties: + links: + description: 'Array of links referenced in the caption via an @-mention, + hyperlink, or the drag-n-dropped preview attached to the note. + + ' + items: + $ref: '#/components/schemas/EntryLink' + type: array + table: + allOf: + - $ref: '#/components/schemas/EntryTable' + type: object + text: + description: The caption of the table. + type: string + type: + enum: + - table + type: string + type: object + description: A table with rows and columns of text + TableUiBlock: + allOf: + - $ref: '#/components/schemas/InteractiveUiBlock' + - properties: + name: + description: Display name for the table block, to be shown in the UI + type: string + source: + $ref: '#/components/schemas/TableUiBlockSource' + type: + enum: + - TABLE + type: string + required: + - type + - name + - source + type: object + TableUiBlockCreate: + allOf: + - $ref: '#/components/schemas/TableUiBlock' + type: object + TableUiBlockDataFrameSource: + properties: + dataFrameId: + description: '`dataFrameId` of an uploaded data frame (see [Create Data + Frame endpoint](https://benchling.com/api/v2-beta/reference#/Data%20Frames)). + Note: Canvas tables currently support only text-type columns. + + ' + example: dset_mfz1f3ai2e8y + nullable: true + type: string + type: + enum: + - DATA_FRAME + type: string + required: + - type + - dataFrameId + type: object + TableUiBlockDatasetSource: + deprecated: true + properties: + datasetId: + description: '`datasetId` of an uploaded dataset (see [Create Data Frame + endpoint](https://benchling.com/api/v2-beta/reference#/Data%20Frames)). + Note: Canvas tables currently support only text-type columns. Datasets + are currently undergoing re-work. datasetId will refer to a DataFrame + until Dataset APIs are stable. Prefer `TableUiBlockDataFrameSource` meanwhile. + + ' + example: dset_mfz1f3ai2e8y + nullable: true + type: string + type: + enum: + - DATASET + type: string + required: + - type + - datasetId + type: object + TableUiBlockSource: + discriminator: + mapping: + DATASET: '#/components/schemas/TableUiBlockDatasetSource' + DATA_FRAME: '#/components/schemas/TableUiBlockDataFrameSource' + propertyName: type + oneOf: + - $ref: '#/components/schemas/TableUiBlockDatasetSource' + - $ref: '#/components/schemas/TableUiBlockDataFrameSource' + type: object + TableUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/TableUiBlock' + type: object + Team: + allOf: + - $ref: '#/components/schemas/TeamSummary' + - example: + id: team_5cjIguqc + name: Elion's Team + organization: Elion's Org + - properties: + organization: + $ref: '#/components/schemas/OrganizationSummary' + type: object + TeamCreate: + properties: + description: + type: string + name: + type: string + organizationId: + type: string + TeamSummary: + allOf: + - type: object + - properties: + id: + type: string + name: + type: string + - example: + id: team_5cjIguqc + name: Elion's Team + TeamUpdate: + properties: + description: + type: string + name: + type: string + TeamsPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + teams: + items: + $ref: '#/components/schemas/Team' + type: array + TextAppConfigItem: + allOf: + - $ref: '#/components/schemas/BaseAppConfigItem' + - properties: + type: + enum: + - text + example: text + type: string + value: + example: user configured text + nullable: true + type: string + type: object + TextBoxNotePart: + allOf: + - $ref: '#/components/schemas/BaseNotePart' + - properties: + links: + description: 'Array of links referenced via an @-mention, hyperlink, or + the drag-n-dropped preview attached to the note. + + ' + items: + $ref: '#/components/schemas/EntryLink' + type: array + name: + type: string + text: + type: string + type: + enum: + - text_box + type: string + type: object + TextInputUiBlock: + allOf: + - $ref: '#/components/schemas/UserInputUiBlock' + - properties: + placeholder: + nullable: true + type: string + type: + enum: + - TEXT_INPUT + type: string + required: + - type + type: object + TextInputUiBlockCreate: + allOf: + - $ref: '#/components/schemas/TextInputUiBlock' + type: object + TextInputUiBlockUpdate: + allOf: + - $ref: '#/components/schemas/TextInputUiBlock' + type: object + TokenCreate: + properties: + client_id: + description: 'ID of client to request token for. Leave off if client ID + and secret are being supplied through Authorization header. + + ' + type: string + client_secret: + description: 'Leave off if client ID and secret are being supplied through + Authorization header. + + ' + type: string + grant_type: + enum: + - client_credentials + example: client_credentials + type: string + required: + - grant_type + type: object + TokenResponse: + properties: + access_token: + example: eyJ... + type: string + expires_in: + description: Number of seconds that token is valid for + example: 900 + type: integer + token_type: + enum: + - Bearer + example: Bearer + type: string + type: object + TransfersAsyncTask: + allOf: + - $ref: '#/components/schemas/AsyncTask' + - additionalProperties: false + properties: + response: + properties: + destinationContainers: + items: + $ref: '#/components/schemas/Container' + type: array + type: object + type: object + type: object + Translation: + allOf: + - $ref: '#/components/schemas/SequenceFeatureBase' + - properties: + aminoAcids: + readOnly: true + type: string + coerceStartCodonToMethionine: + default: false + description: Whether to override the translation of the start codon to + Methionine. Has no effect when the start codon already translates to + Methionine. + type: boolean + end: + description: 0-based exclusive end index. The end of the sequence is always + represented as 0. + type: integer + geneticCode: + default: STANDARD + description: The genetic code to use when translating the nucleotide sequence + into amino acids. + enum: + - STANDARD + - VERTEBRATE_MITOCHONDRIAL + - YEAST_MITOCHONDRIAL + - MOLD_PROTOZOAN_COELENTERATE_MITOCHONDRIAL_MYCOPLASMA_SPIROPLASMA + - INVERTEBRATE_MITOCHONDRIAL + - CILIATE_DASYCLADACEAN_HEXAMITA_NUCLEAR + - ECHINODERM_FLATWORM_MITOCHONDRIAL + - EUPLOTID_NUCLEAR + - BACTERIAL_ARCHAEAL_PLANT_PLASTID + - ALTERNATIVE_YEAST_NUCLEAR + - ASCIDIAN_MITOCHONDRIAL + - ALTERNATIVE_FLATWORM_MITOCHONDRIAL + - CHLOROPHYCEAN_MITOCHONDRIAL + - TREMATODE_MITOCHONDRIAL + - SCENEDESMUS_OBLIQUUS_MITOCHONDRIAL + - THRAUSTOCHYTRIUM_MITOCHONDRIAL + - RHABDOPLEURIDAE_MITOCHONDRIAL + - CANDIDATE_DIVISION_SR1_GRACILIBACTERIA + - PACHYSOLEN_TANNOPHILUS_NUCLEAR + - MESODINIUM_NUCLEAR + - PERITRICH_NUCLEAR + - CEPHALODISCIDAE_MITOCHONDRIAL_UAA_TYR + type: string + regions: + items: + properties: + end: + description: 0-based exclusive end index. The end of the sequence + is always represented as 0. + type: integer + start: + description: 0-based inclusive start index. + type: integer + type: object + type: array + start: + description: 0-based inclusive start index. + type: integer + strand: + example: 1 + type: integer + type: object + UnitSummary: + properties: + id: + example: unit_NyKvCSBC + type: string + name: + example: meter + type: string + symbol: + example: m + type: string + unitTypeId: + example: qnty_7W2R1EFJ + type: string + type: object + UnregisterEntities: + additionalProperties: false + properties: + entityIds: + description: Array of entity IDs + items: + type: string + type: array + folderId: + description: ID of the folder that the entities should be moved to + type: string + required: + - entityIds + - folderId + type: object + UpdateEventMixin: + properties: + updates: + description: 'These properties have been updated, causing this message + + ' + example: + - fields.Cost Center + items: + type: string + type: array + type: object + User: + allOf: + - $ref: '#/components/schemas/UserSummary' + - example: + email: lpasteur@benchling.com + handle: lpasteur + id: ent_a0SApq3z + isSuspended: false + name: Louis Pasteur + - properties: + apiKeyLastChangedAt: + nullable: true + type: string + email: + type: string + isSuspended: + type: boolean + passwordLastChangedAt: + nullable: true + type: string + type: object + UserActivity: + properties: + lastSeen: + format: date-time + nullable: true + type: string + userId: + type: string + type: object + UserBulkCreateRequest: + additionalProperties: false + properties: + users: + items: + $ref: '#/components/schemas/UserCreate' + type: array + type: object + UserBulkUpdate: + additionalProperties: false + allOf: + - properties: + id: + type: string + required: + - id + type: object + - $ref: '#/components/schemas/UserUpdate' + UserBulkUpdateRequest: + additionalProperties: false + properties: + users: + items: + $ref: '#/components/schemas/UserBulkUpdate' + type: array + type: object + UserCreate: + additionalProperties: false + properties: + email: + description: Email of the User + type: string + handle: + description: Handle of the User + type: string + name: + description: Name of the User + type: string + required: + - name + - email + - handle + type: object + UserInputMultiValueUiBlock: + allOf: + - $ref: '#/components/schemas/InteractiveUiBlock' + - properties: + label: + example: My Input + maxLength: 50 + nullable: true + type: string + value: + items: + type: string + nullable: true + type: array + required: + - value + type: object + UserInputUiBlock: + allOf: + - $ref: '#/components/schemas/InteractiveUiBlock' + - properties: + label: + example: My Input + maxLength: 50 + nullable: true + type: string + value: + nullable: true + type: string + required: + - value + type: object + UserSummary: + allOf: + - $ref: '#/components/schemas/PartySummary' + - example: + handle: lpasteur + id: ent_a0SApq3z + name: Louis Pasteur + UserUpdate: + additionalProperties: false + properties: + email: + description: Email of the User + type: string + handle: + description: Handle of the User + type: string + isSuspended: + description: Suspended status of the User + type: boolean + name: + description: Name of the User + type: string + type: object + UserValidation: + properties: + validationComment: + description: A string explaining the reason for the provided validation + status. + type: string + validationStatus: + description: 'Valid values for this enum depend on whether it is used to + set a value (e.g., in a POST request), or is a return value for an existing + result. + + Acceptable values for setting a status are ''VALID'' or ''INVALID''. Possible + return values are ''VALID'', ''INVALID'', or ''PARTIALLY_VALID'' (a result + will be partially valid if it has some valid fields and some invalid fields). + + ' + enum: + - VALID + - INVALID + - PARTIALLY_VALID + type: string + type: object + UsersPaginatedList: + allOf: + - $ref: '#/components/schemas/Pagination' + - properties: + users: + items: + $ref: '#/components/schemas/User' + type: array + WarehouseCredentialSummary: + properties: + createdAt: + format: date-time + readOnly: true + type: string + id: + readOnly: true + type: string + label: + type: string + modifiedAt: + format: date-time + readOnly: true + type: string + userId: + readOnly: true + type: string + username: + description: The username to connect to the warehouse. + example: u$lpasteur_az + readOnly: true + type: string + type: object + WarehouseCredentials: + properties: + expiresAt: + description: 'The time after which new connections using the username/password + will not be permitted. Upon expiration, currently open connections are + not terminated. + + ' + example: '2017-04-18T05:54:56.247545+00:00' + format: date-time + readOnly: true + type: string + password: + description: The password to connect to the warehouse. + example: 9YC122LzxKW1Uq2q + readOnly: true + type: string + username: + description: The username to connect to the warehouse. + example: u$lpasteur_az + readOnly: true + type: string + type: object + WarehouseCredentialsCreate: + additionalProperties: false + properties: + expiresIn: + description: 'Duration, in seconds, that credentials should be active for. + Must be greater than 0 and less than 3600. + + ' + maximum: 3599 + minimum: 1 + type: integer + required: + - expiresIn + type: object + Well: + additionalProperties: false + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + readOnly: true + barcode: + description: Barcode of the well + type: string + checkoutRecord: + allOf: + - $ref: '#/components/schemas/CheckoutRecord' + readOnly: true + contents: + description: Array of well contents, each with an entity and concentration + items: + $ref: '#/components/schemas/ContainerContent' + type: array + createdAt: + description: DateTime the well was created + format: date-time + readOnly: true + type: string + creator: + $ref: '#/components/schemas/UserSummary' + fields: + $ref: '#/components/schemas/Fields' + id: + description: ID of the well + readOnly: true + type: string + modifiedAt: + description: DateTime the well was last modified + format: date-time + readOnly: true + type: string + name: + description: Name of the well, defaults to barcode if name is not provided. + type: string + parentStorageId: + description: ID of containing parent inventory, a plate well with a coordinate + (e.g. plt_2bAks9dx:a2). + nullable: true + type: string + parentStorageSchema: + $ref: '#/components/schemas/SchemaSummary' + projectId: + description: ID of the project if set + nullable: true + type: string + quantity: + $ref: '#/components/schemas/ContainerQuantity' + resourceType: + enum: + - container + type: string + restrictedSampleParties: + description: Not applicable for fixed plate wells. + items: + anyOf: + - $ref: '#/components/schemas/UserSummary' + - $ref: '#/components/schemas/TeamSummary' + type: array + restrictionStatus: + allOf: + - $ref: '#/components/schemas/SampleRestrictionStatus' + description: Not applicable for fixed plate wells. + role: + allOf: + - $ref: '#/components/schemas/ExperimentalWellRole' + description: Not applicable for matrix plate wells. + nullable: true + sampleOwners: + description: Not applicable for fixed plate wells. + items: + anyOf: + - $ref: '#/components/schemas/UserSummary' + - $ref: '#/components/schemas/TeamSummary' + type: array + schema: + allOf: + - $ref: '#/components/schemas/SchemaSummary' + nullable: true + volume: + $ref: '#/components/schemas/DeprecatedContainerVolumeForResponse' + webURL: + readOnly: true + type: string + type: object + WellOrInaccessibleResource: + discriminator: + mapping: + container: '#/components/schemas/Well' + inaccessible_resource: '#/components/schemas/InaccessibleResource' + propertyName: resourceType + oneOf: + - $ref: '#/components/schemas/Well' + - $ref: '#/components/schemas/InaccessibleResource' + type: object + WorkflowEndNodeDetails: + additionalProperties: false + properties: + id: + description: The ID of the workflow flowchart end node config details + example: wftrnd_aB8Wi12c + readOnly: true + type: string + name: + description: The name of the end node + example: End 1 + readOnly: true + type: string + nodeType: + description: The type of the node + enum: + - END + type: string + type: object + WorkflowFlowchart: + properties: + createdAt: + description: The ISO formatted date and time that the flowchart was created + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + edgeConfigs: + description: The edges of the flowchart + items: + $ref: '#/components/schemas/WorkflowFlowchartEdgeConfig' + readOnly: true + type: array + id: + description: The ID of the flowchart + example: wffc_7fc412 + readOnly: true + type: string + migratedFromFlowchartId: + description: The ID of the flowchart that this was migrated from + example: wffc_1de847 + nullable: true + readOnly: true + type: string + migratedToFlowchartId: + description: The ID of the flowchart that this was migrated to + example: wffc_df2993 + nullable: true + readOnly: true + type: string + modifiedAt: + description: The ISO formatted date and time that the flowchart was last + modified + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + nodeConfigs: + description: The nodes of the flowchart + items: + $ref: '#/components/schemas/WorkflowFlowchartNodeConfig' + readOnly: true + type: array + type: object + WorkflowFlowchartConfigSummary: + properties: + flowchartConfigVersionIds: + description: The ID of all the versions of this flowchart config sorted + chronologically from most recent (current) version to the least recent + one + items: + example: wffccv_giVNQcAF + type: string + readOnly: true + type: array + id: + description: The ID of the workflow flowchart config + example: wffcc_giVNQcAF + readOnly: true + type: string + type: object + WorkflowFlowchartConfigVersion: + properties: + createdAt: + description: The ISO formatted date and time that the flowchart config version + was created + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + id: + description: The ID of the workflow flowchart config version + example: wffccv_giVNQcAF + readOnly: true + type: string + modifiedAt: + description: The ISO formatted date and time that the flowchart config version + was last modified + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + templateFlowchart: + allOf: + - $ref: '#/components/schemas/WorkflowFlowchart' + description: The default flowchart that tasks using this flowchart configuration + will use. + type: object + WorkflowFlowchartEdgeConfig: + properties: + fromNodeConfigId: + description: The ID of the source workflow flowchart node config of this + edge + example: wffcnc_giVNQcTL + readOnly: true + type: string + id: + description: The ID of the workflow flowchart edge config + example: wffcec_giVNQcTL + readOnly: true + type: string + toNodeConfigId: + description: The ID of the destination workflow flowchart node config of + this edge + example: wffcnc_giVNQcAF + readOnly: true + type: string + type: object + WorkflowFlowchartNodeConfig: + properties: + id: + description: The ID of the workflow flowchart node config + readOnly: true + type: string + nodeDetails: + discriminator: + mapping: + END: '#/components/schemas/WorkflowEndNodeDetails' + OUTPUT: '#/components/schemas/WorkflowOutputNodeDetails' + ROOT: '#/components/schemas/WorkflowRootNodeDetails' + ROUTER: '#/components/schemas/WorkflowRouterNodeDetails' + TASK: '#/components/schemas/WorkflowTaskNodeDetails' + propertyName: nodeType + oneOf: + - $ref: '#/components/schemas/WorkflowRootNodeDetails' + - $ref: '#/components/schemas/WorkflowOutputNodeDetails' + - $ref: '#/components/schemas/WorkflowTaskNodeDetails' + - $ref: '#/components/schemas/WorkflowRouterNodeDetails' + - $ref: '#/components/schemas/WorkflowEndNodeDetails' + nodeType: + description: The type associated with the node config + enum: + - ROOT + - OUTPUT + - TASK + - ROUTER + - END + type: string + type: object + WorkflowFlowchartPaginatedList: + properties: + nextToken: + example: Im5ldyB0ZXN0Ig== + type: string + workflowFlowcharts: + items: + $ref: '#/components/schemas/WorkflowFlowchart' + type: array + type: object + WorkflowList: + properties: + workflows: + items: + $ref: '#/components/schemas/LegacyWorkflow' + type: array + type: object + WorkflowNodeTaskGroupSummary: + allOf: + - $ref: '#/components/schemas/WorkflowTaskGroupSummary' + - properties: + nodeConfigId: + description: The node in a Flowchart that this task group is associated + with. This will be null if the task group is not part of a flowchart. + example: wffcnc_giVNQcTL + type: string + WorkflowOutput: + allOf: + - $ref: '#/components/schemas/WorkflowOutputSummary' + - properties: + createdAt: + description: The ISO formatted date and time that the output was created + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + creationOrigin: + $ref: '#/components/schemas/CreationOrigin' + fields: + $ref: '#/components/schemas/Fields' + modifiedAt: + description: The ISO formatted date and time that the output was last + modified + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + nextOutputs: + description: The outputs in the flowchart which are generated by this + output. + items: + $ref: '#/components/schemas/WorkflowOutputSummary' + type: array + nextTasks: + description: The downstream tasks in the flowchart which are generated + by this output. + items: + $ref: '#/components/schemas/WorkflowTaskSummary' + type: array + sourceOutputs: + description: The outputs in the flowchart which were used to generate + this output. + items: + $ref: '#/components/schemas/WorkflowOutputSummary' + type: array + sourceTasks: + description: The tasks in the flowchart which were used to generate this + output. + items: + $ref: '#/components/schemas/WorkflowTaskSummary' + type: array + webURL: + description: URL of the workflow output + format: uri + readOnly: true + type: string + workflowTask: + $ref: '#/components/schemas/WorkflowTaskSummary' + workflowTaskGroup: + $ref: '#/components/schemas/WorkflowTaskGroupSummary' + WorkflowOutputArchiveReason: + description: 'The reason for archiving the provided workflow outputs. Accepted + reasons may differ based on tenant configuration. + + ' + enum: + - Made in error + - Retired + - Other + type: string + WorkflowOutputBulkCreate: + allOf: + - $ref: '#/components/schemas/WorkflowOutputCreate' + WorkflowOutputBulkUpdate: + allOf: + - $ref: '#/components/schemas/WorkflowOutputWriteBase' + - properties: + workflowOutputId: + description: The ID of the workflow output + example: wfout_5cJLQKVF + type: string + WorkflowOutputCreate: + allOf: + - $ref: '#/components/schemas/WorkflowOutputWriteBase' + - properties: + workflowTaskId: + description: The ID of the workflow task this output belogns to + example: wftask_OnnsW08k + type: string + required: + - workflowTaskId + WorkflowOutputCreatedEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowOutput.created + type: string + workflowOutput: + $ref: '#/components/schemas/WorkflowOutput' + type: object + WorkflowOutputNodeDetails: + additionalProperties: false + properties: + id: + description: The ID of the workflow output node config details + example: wfond_hbVNQcEM + readOnly: true + type: string + nodeType: + description: The type of the node + enum: + - OUTPUT + type: string + outputSchema: + $ref: '#/components/schemas/SchemaSummary' + type: object + WorkflowOutputSchema: + properties: + archiveRecord: + allOf: + - $ref: '#/components/schemas/ArchiveRecord' + nullable: true + fieldDefinitions: + items: + oneOf: + - $ref: '#/components/schemas/SimpleFieldDefinition' + - $ref: '#/components/schemas/IntegerFieldDefinition' + - $ref: '#/components/schemas/FloatFieldDefinition' + - $ref: '#/components/schemas/DropdownFieldDefinition' + - $ref: '#/components/schemas/SchemaLinkFieldDefinition' + type: array + name: + type: string + prefix: + type: string + type: + type: string + type: object + WorkflowOutputSummary: + properties: + displayId: + description: User-friendly ID of the workflow task group + type: string + id: + description: The ID of the workflow output + example: wfout_5cJLQKVF + readOnly: true + type: string + WorkflowOutputUpdate: + allOf: + - $ref: '#/components/schemas/WorkflowOutputWriteBase' + WorkflowOutputUpdatedFieldsEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowOutput.updated.fields + type: string + workflowOutput: + $ref: '#/components/schemas/WorkflowOutput' + type: object + WorkflowOutputWriteBase: + properties: + fields: + $ref: '#/components/schemas/Fields' + WorkflowOutputsArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type + + ' + properties: + workflowOutputIds: + items: + example: wfout_5cJLQKVF + type: string + type: array + type: object + WorkflowOutputsArchive: + properties: + reason: + $ref: '#/components/schemas/WorkflowOutputArchiveReason' + workflowOutputIds: + items: + example: wfout_5cJLQKVF + type: string + type: array + required: + - workflowOutputIds + - reason + type: object + WorkflowOutputsBulkCreateRequest: + properties: + workflowOutputs: + items: + $ref: '#/components/schemas/WorkflowOutputBulkCreate' + maxItems: 100 + type: array + type: object + WorkflowOutputsBulkUpdateRequest: + properties: + workflowOutputs: + items: + $ref: '#/components/schemas/WorkflowOutputBulkUpdate' + maxItems: 100 + type: array + type: object + WorkflowOutputsPaginatedList: + properties: + nextToken: + example: Im5ldyB0ZXN0Ig== + type: string + workflowOutputs: + items: + $ref: '#/components/schemas/WorkflowOutput' + type: array + type: object + WorkflowOutputsUnarchive: + properties: + workflowOutputIds: + items: + type: string + type: array + required: + - workflowOutputIds + type: object + WorkflowPatch: + additionalProperties: false + properties: + description: + description: Description of the workflow + type: string + name: + description: Name of the workflow + type: string + projectId: + description: ID of the project that contains the workflow + type: string + type: object + WorkflowRootNodeDetails: + additionalProperties: false + properties: + id: + description: The ID of the workflow root node config details + example: wfrnd_hbVNQcEM + readOnly: true + type: string + nodeType: + description: The type of the node + enum: + - ROOT + type: string + rootTaskSchema: + $ref: '#/components/schemas/WorkflowTaskSchemaSummary' + type: object + WorkflowRouterFunction: + additionalProperties: false + properties: + edgeConfigId: + description: The ID of the workflow flowchart edge config associated with + this function + example: wffcec_giVNQcTL + readOnly: true + type: string + id: + description: The function associated with a router node + example: wfrf_b2VJBmBj + readOnly: true + type: string + isDefault: + readOnly: true + name: + description: The name of a function associated with a router node + example: Rule 1 + readOnly: true + type: string + type: object + WorkflowRouterNodeDetails: + additionalProperties: false + properties: + id: + description: The ID of the workflow router node config details + example: wfrnd_hbVJBcMC + readOnly: true + type: string + name: + description: The name of the router node + example: Router 1 + readOnly: true + type: string + nodeType: + description: The type of the node + enum: + - ROUTER + type: string + routerFunctions: + description: Router functions associated with this router node + items: + $ref: '#/components/schemas/WorkflowRouterFunction' + readOnly: true + type: array + type: object + WorkflowSample: + properties: + batchId: + description: ID of the batch + type: string + containerIds: + description: Array of IDs of containers + items: + type: string + type: array + createdAt: + description: DateTime at which the the sample was created + format: date-time + readOnly: true + type: string + id: + description: ID of the sample + readOnly: true + type: string + name: + description: Name of the sample + type: string + type: object + WorkflowSampleList: + properties: + samples: + items: + $ref: '#/components/schemas/WorkflowSample' + type: array + type: object + WorkflowStage: + properties: + createdAt: + description: DateTime at which the the workflow stage was created + format: date-time + readOnly: true + type: string + id: + description: ID of the workflow stage + readOnly: true + type: string + name: + description: Name of the workflow stage + type: string + type: object + WorkflowStageList: + properties: + workflowStages: + items: + $ref: '#/components/schemas/WorkflowStage' + type: array + type: object + WorkflowStageRun: + properties: + createdAt: + description: DateTime at which the the stage run was created + format: date-time + readOnly: true + type: string + id: + description: ID of the stage run + readOnly: true + type: string + name: + description: Name of the stage run + type: string + status: + description: Status of the stage run + enum: + - COMPLETED + - DISCARDED + - INITIALIZED + type: string + type: object + WorkflowStageRunList: + properties: + workflowStageRuns: + items: + $ref: '#/components/schemas/WorkflowStageRun' + type: array + type: object + WorkflowTask: + allOf: + - $ref: '#/components/schemas/WorkflowTaskBase' + - properties: + executionFlowchartId: + description: The ID of the flowchart that this task will execute. This + will only be defined if the task has exectutionType FLOWCHART + example: wffc_6fd512 + type: string + executionType: + description: The method by which the task of the workflow is executed + enum: + - DIRECT + - ENTRY + - FLOWCHART + - PROCEDURE + - PROCEDURE_METHOD + - PROCEDURE_STEP + type: string + nextOutputs: + description: The outputs in the flowchart which are generated by this + task. + items: + $ref: '#/components/schemas/WorkflowOutputSummary' + type: array + nextTasks: + description: The downstream tasks in the flowchart which are generated + by this task. + items: + $ref: '#/components/schemas/WorkflowTaskSummary' + type: array + responsibleParties: + description: List of users and teams that are responsible for this task + items: + $ref: '#/components/schemas/PartySummary' + type: array + rootTask: + allOf: + - $ref: '#/components/schemas/WorkflowTaskSummary' + description: The task which is at the root of the flowchart. This will + be null if the task is not part of a flowchart. + sourceOutputs: + description: The parent outputs in the flowchart which were used to generate + this task. + items: + $ref: '#/components/schemas/WorkflowOutputSummary' + type: array + sourceTasks: + description: The parent tasks in the flowchart which were used to generate + this task. + items: + $ref: '#/components/schemas/WorkflowTaskSummary' + type: array + WorkflowTaskArchiveReason: + description: 'The reason for archiving the provided workflow tasks. Accepted + reasons may differ based on tenant configuration. + + ' + enum: + - Made in error + - Retired + - Other + type: string + WorkflowTaskBase: + allOf: + - $ref: '#/components/schemas/WorkflowTaskSummary' + - properties: + assignee: + allOf: + - $ref: '#/components/schemas/UserSummary' + nullable: true + clonedFrom: + allOf: + - $ref: '#/components/schemas/WorkflowTaskSummary' + nullable: true + createdAt: + description: The ISO formatted date and time that the task was created + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + creationOrigin: + $ref: '#/components/schemas/CreationOrigin' + creator: + $ref: '#/components/schemas/UserSummary' + executionOrigin: + allOf: + - $ref: '#/components/schemas/WorkflowTaskExecutionOrigin' + nullable: true + fields: + $ref: '#/components/schemas/Fields' + modifiedAt: + description: The ISO formatted date and time that the task was last modified + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + outputs: + items: + $ref: '#/components/schemas/WorkflowOutputSummary' + type: array + scheduledOn: + description: The date on which the task is scheduled to be executed + example: '2020-08-01' + format: date + nullable: true + type: string + schema: + $ref: '#/components/schemas/WorkflowTaskSchemaSummary' + status: + $ref: '#/components/schemas/WorkflowTaskStatus' + webURL: + description: URL of the workflow task + format: uri + readOnly: true + type: string + workflowTaskGroup: + $ref: '#/components/schemas/WorkflowTaskGroupSummary' + WorkflowTaskBulkCreate: + allOf: + - $ref: '#/components/schemas/WorkflowTaskCreate' + WorkflowTaskBulkUpdate: + allOf: + - $ref: '#/components/schemas/WorkflowTaskUpdate' + - properties: + workflowTaskId: + description: The workflow task ID + example: wftask_OnnsW08k + type: string + type: object + WorkflowTaskCreate: + allOf: + - $ref: '#/components/schemas/WorkflowTaskWriteBase' + - properties: + workflowTaskGroupId: + description: The workflow ID + example: prs_giVNQcTL + type: string + required: + - workflowTaskGroupId + WorkflowTaskCreatedEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowTask.created + type: string + workflowTask: + $ref: '#/components/schemas/WorkflowTask' + type: object + WorkflowTaskExecutionOrigin: + description: The context into which a task was executed + properties: + entryId: + example: etr_30ad79 + nullable: true + type: string + originModalUuid: + example: e8805895-0654-4613-ac04-39ee7462202e + format: uuid + nullable: true + type: string + type: + enum: + - API + - ENTRY + - MODAL + type: string + type: object + WorkflowTaskGroup: + allOf: + - $ref: '#/components/schemas/WorkflowTaskGroupBase' + - properties: + executionType: + description: The method by which the workflow is executed + enum: + - DIRECT + - ENTRY + - FLOWCHART + - PROCEDURE + - PROCEDURE_METHOD + - PROCEDURE_STEP + type: string + flowchartConfigVersionId: + description: The flowchart configuration that this task group uses. This + will be null if the task group does not have executionType FLOWCHART. + example: wffccv_giVNQcAF + type: string + flowchartTaskGroups: + description: The task groups that are members of the flowchart that this + task group is the root of. This will be null this task group is not + the root task group of a flowchart (eg if the task group does not have + executionType FLOWCHART). + items: + $ref: '#/components/schemas/WorkflowNodeTaskGroupSummary' + type: array + nodeConfig: + allOf: + - $ref: '#/components/schemas/WorkflowFlowchartNodeConfig' + description: The node in a Flowchart that this task group is associated + with. This will be null if the task group is not part of a flowchart. + rootTaskGroup: + allOf: + - $ref: '#/components/schemas/WorkflowTaskGroupSummary' + description: The task group associated with the root node of the flowchart + that this task group is a part of. This will be null if the task group + is not part of a flowchart. + WorkflowTaskGroupArchiveReason: + description: 'The reason for archiving the provided workflow task groups. Accepted + reasons may differ based on tenant configuration. + + ' + enum: + - Made in error + - Retired + - Other + type: string + WorkflowTaskGroupBase: + allOf: + - $ref: '#/components/schemas/WorkflowTaskGroupSummary' + - properties: + createdAt: + description: The ISO formatted date and time that the task group was created + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + creationOrigin: + $ref: '#/components/schemas/CreationOrigin' + creator: + $ref: '#/components/schemas/UserSummary' + folder: + $ref: '#/components/schemas/Folder' + modifiedAt: + description: The ISO formatted date and time that the task group was last + modified + example: '2020-08-01T00:00:00.000Z' + nullable: false + type: string + outputs: + description: The outputs of the workflow task group + items: + $ref: '#/components/schemas/WorkflowOutputSummary' + type: array + responsibleTeam: + allOf: + - $ref: '#/components/schemas/TeamSummary' + nullable: true + watchers: + description: The users watching the workflow task group + items: + $ref: '#/components/schemas/UserSummary' + type: array + webURL: + description: URL of the workflow task group + format: uri + readOnly: true + type: string + workflowTaskSchema: + $ref: '#/components/schemas/WorkflowTaskSchemaSummary' + workflowTasks: + description: The input tasks to the workflow task group + items: + $ref: '#/components/schemas/WorkflowTaskSummary' + type: array + WorkflowTaskGroupCreate: + allOf: + - $ref: '#/components/schemas/WorkflowTaskGroupWriteBase' + - properties: + schemaId: + description: The workflow task schema of tasks in this task group + example: prstsch_KnR9iVum + type: string + required: + - schemaId + - folderId + WorkflowTaskGroupCreatedEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowTaskGroup.created + type: string + workflowTaskGroup: + $ref: '#/components/schemas/WorkflowTaskGroup' + type: object + WorkflowTaskGroupMappingCompletedEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowTaskGroup.mappingCompleted + type: string + workflowTaskGroup: + $ref: '#/components/schemas/WorkflowTaskGroup' + type: object + WorkflowTaskGroupSummary: + properties: + displayId: + description: User-friendly ID of the workflow task group + type: string + id: + description: The ID of the workflow task group + example: prs_giVNQcTL + readOnly: true + type: string + name: + description: The name of the workflow task group + type: string + WorkflowTaskGroupUpdate: + allOf: + - $ref: '#/components/schemas/WorkflowTaskGroupWriteBase' + WorkflowTaskGroupUpdatedWatchersEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowTaskGroup.updated.watchers + type: string + workflowTaskGroup: + $ref: '#/components/schemas/WorkflowTaskGroup' + type: object + WorkflowTaskGroupWriteBase: + properties: + folderId: + description: ID of the folder that contains the workflow task group + type: string + name: + description: The name of the workflow task group + type: string + watcherIds: + description: IDs of the users watching the workflow task group + items: + example: ent_a0SApq3z + type: string + type: array + WorkflowTaskGroupsArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type + + ' + properties: + workflowTaskGroupIds: + items: + example: prs_giVNQcTL + type: string + type: array + type: object + WorkflowTaskGroupsArchive: + properties: + reason: + $ref: '#/components/schemas/WorkflowTaskGroupArchiveReason' + workflowTaskGroupIds: + items: + example: prs_giVNQcTL + type: string + type: array + required: + - workflowTaskGroupIds + - reason + type: object + WorkflowTaskGroupsPaginatedList: + properties: + nextToken: + example: Im5ldyB0ZXN0Ig== + type: string + workflowTaskGroups: + items: + $ref: '#/components/schemas/WorkflowTaskGroup' + type: array + type: object + WorkflowTaskGroupsUnarchive: + properties: + workflowTaskGroupIds: + items: + example: prs_giVNQcTL + type: string + type: array + required: + - workflowTaskGroupIds + type: object + WorkflowTaskNodeDetails: + additionalProperties: false + properties: + id: + description: The ID of the workflow task node config details + example: wftnd_hbVNQcEM + readOnly: true + type: string + nodeType: + description: The type of the node + enum: + - TASK + type: string + taskSchema: + $ref: '#/components/schemas/WorkflowTaskSchemaSummary' + type: object + WorkflowTaskSchema: + allOf: + - $ref: '#/components/schemas/WorkflowTaskSchemaBase' + - properties: + defaultResponsibleParties: + description: Default list of users and teams that are responsible for + tasks of this schema + items: + $ref: '#/components/schemas/PartySummary' + type: array + executionType: + description: The method by which instances of this schema are executed + enum: + - DIRECT + - ENTRY + - FLOWCHART + - PROCEDURE + - PROCEDURE_METHOD + - PROCEDURE_STEP + type: string + flowchartConfig: + allOf: + - $ref: '#/components/schemas/WorkflowFlowchartConfigSummary' + WorkflowTaskSchemaBase: + allOf: + - $ref: '#/components/schemas/Schema' + - properties: + canSetAssigneeOnTaskCreation: + description: Whether or not tasks of this schema can be created with a + non-null assignee. + type: boolean + defaultCreationFolderId: + description: ID of the default folder for creating workflow task groups + nullable: true + type: string + defaultEntryExecutionFolderId: + description: ID of the default folder for workflow task execution entries + nullable: true + type: string + defaultResponsibleTeam: + allOf: + - $ref: '#/components/schemas/TeamSummary' + nullable: true + entryTemplateId: + description: The ID of the template of the entries tasks of this schema + will be executed into. + example: tmpl_27b8fb + nullable: true + type: string + isPropagateWatchersEnabled: + description: Whether propagation of watchers has been enabled for this + task schema. + type: boolean + prefix: + description: The prefix for the displayId of tasks of this schema. + type: string + statusLifecycle: + $ref: '#/components/schemas/WorkflowTaskStatusLifecycle' + taskGroupPrefix: + description: The prefix for the displayId of task groups containing tasks + of this schema + type: string + workflowOutputSchema: + allOf: + - $ref: '#/components/schemas/WorkflowOutputSchema' + nullable: true + WorkflowTaskSchemaSummary: + properties: + id: + description: The ID of the workflow task schema + type: string + name: + description: The name of the workflow task schema + type: string + WorkflowTaskSchemasPaginatedList: + additionalProperties: false + properties: + nextToken: + example: Im5ldyB0ZXN0Ig== + type: string + workflowTaskSchemas: + items: + $ref: '#/components/schemas/WorkflowTaskSchema' + type: array + type: object + WorkflowTaskStatus: + properties: + displayName: + description: The status label + example: Pending + readOnly: true + type: string + id: + description: The ID of the workflow task status + example: wfts_wQzUCsW0 + readOnly: true + type: string + statusType: + description: The status type + enum: + - PENDING + - IN_PROGRESS + - FAILED + - CANCELLED + - INVALID + - COMPLETED + example: PENDING + readOnly: true + type: string + type: object + WorkflowTaskStatusLifecycle: + properties: + id: + example: prstswf_123kjlkj + type: string + initialStatus: + $ref: '#/components/schemas/WorkflowTaskStatus' + name: + example: Direct Completion + type: string + statuses: + example: + - displayName: Pending + id: prsts_wQzUCsW0 + statusType: PENDING + - displayName: In Progress + id: prsts_fc0781 + statusType: IN_PROGRESS + items: + $ref: '#/components/schemas/WorkflowTaskStatus' + type: array + transitions: + items: + $ref: '#/components/schemas/WorkflowTaskStatusLifecycleTransition' + type: array + type: object + WorkflowTaskStatusLifecycleTransition: + example: + from: + displayName: Pending + id: prsts_wQzUCsW0 + statusType: PENDING + to: + displayName: In Progress + id: prsts_fc0781 + statusType: IN_PROGRESS + properties: + from: + $ref: '#/components/schemas/WorkflowTaskStatus' + to: + $ref: '#/components/schemas/WorkflowTaskStatus' + type: object + WorkflowTaskSummary: + properties: + displayId: + description: User-friendly ID of the workflow task + type: string + id: + description: The ID of the workflow task + example: wftask_OnnsW08k + readOnly: true + type: string + WorkflowTaskUpdate: + allOf: + - properties: + statusId: + example: wfts_VFvwv7JV + type: string + - $ref: '#/components/schemas/WorkflowTaskWriteBase' + type: object + WorkflowTaskUpdatedAssigneeEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowTask.updated.assignee + type: string + workflowTask: + $ref: '#/components/schemas/WorkflowTask' + type: object + WorkflowTaskUpdatedFieldsEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowTask.updated.fields + type: string + workflowTask: + $ref: '#/components/schemas/WorkflowTask' + type: object + WorkflowTaskUpdatedScheduledOnEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowTask.updated.scheduledOn + type: string + workflowTask: + $ref: '#/components/schemas/WorkflowTask' + type: object + WorkflowTaskUpdatedStatusEvent: + allOf: + - $ref: '#/components/schemas/EventBase' + - properties: + eventType: + enum: + - v2.workflowTask.updated.status + type: string + workflowTask: + $ref: '#/components/schemas/WorkflowTask' + type: object + WorkflowTaskWriteBase: + properties: + assigneeId: + description: The id of the user assigned to the task + example: ent_0YuSQS51 + type: string + fields: + $ref: '#/components/schemas/Fields' + scheduledOn: + description: The date on which the task is scheduled to be executed + example: '2020-08-01' + format: date + type: string + WorkflowTasksArchivalChange: + description: 'IDs of all items that were archived or unarchived, grouped by + resource type + + ' + properties: + workflowTaskIds: + items: + example: wftask_OnnsW08k + type: string + type: array + type: object + WorkflowTasksArchive: + properties: + reason: + $ref: '#/components/schemas/WorkflowTaskArchiveReason' + workflowTaskIds: + items: + example: wftask_OnnsW08k + type: string + type: array + required: + - workflowTaskIds + - reason + type: object + WorkflowTasksBulkCopyRequest: + properties: + workflowTaskIds: + items: + example: wftask_OnnsW08k + maxItems: 100 + type: string + type: array + type: object + WorkflowTasksBulkCreateRequest: + properties: + workflowTasks: + items: + $ref: '#/components/schemas/WorkflowTaskBulkCreate' + type: array + type: object + WorkflowTasksBulkUpdateRequest: + properties: + workflowTasks: + items: + $ref: '#/components/schemas/WorkflowTaskBulkUpdate' + type: array + type: object + WorkflowTasksPaginatedList: + properties: + nextToken: + example: Im5ldyB0ZXN0Ig== + type: string + workflowTasks: + items: + $ref: '#/components/schemas/WorkflowTask' + type: array + type: object + WorkflowTasksUnarchive: + properties: + workflowTaskIds: + items: + example: wftask_OnnsW08k + type: string + type: array + required: + - workflowTaskIds + type: object + securitySchemes: + basicApiKeyAuth: + description: Use issued API key for standard access to the API + scheme: basic + type: http + basicClientIdSecretAuth: + description: Auth used as part of client credentials OAuth flow prior to receiving + a bearer token. + scheme: basic + type: http + oAuth: + description: OAuth2 Client Credentials flow intended for service access + flows: + clientCredentials: + scopes: {} + tokenUrl: /api/v2/token + type: oauth2 +externalDocs: + description: Additional API Documentation + url: https://docs.benchling.com +info: + license: + name: Apache 2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html + title: Benchling API + version: 2.0.0 +openapi: 3.0.1 +security: +- oAuth: [] +- basicApiKeyAuth: [] +servers: +- url: /api/v2 +tags: +- description: 'AA Sequences are the working units of cells that make everything run + (they help make structures, catalyze reactions and allow for signaling - a kind + of internal cell communication). On Benchling, these are comprised of a string + of amino acids and collections of other attributes, such as annotations. + + ' + name: AA Sequences +- description: Create and manage Benchling apps on your tenant + name: Apps +- description: ' + + Results represent the output of assays that have been performed. You can customize + the schemas of results to fit your needs. Results can link to runs, entities, + and other types. + + + To learn more about creating results, [click here](https://docs.benchling.com/docs/example-creating-results). + + ' + name: Assay Results +- description: Runs capture the details / parameters of a run that was performed. + Results are usually nested under a run. + name: Assay Runs +- description: Endpoints to help authenticate with the rest of the API resources. + name: Authentication +- description: 'Blobs are opaque files that can be linked to other items in Benchling, + like assay runs or results. For example, you can upload a blob, then upload an + assay result that links to that blob by ID. The blob will then appear as part + of the assay result in the Benchling web UI. + + ' + name: Blobs +- description: ' + + Boxes are a structured inventory type, consisting of a grid of positions that + can each hold one container. Unlike locations, there are a maximum number of containers + that a box can hold (one per position). + + + Boxes are all associated with schemas, which define the type of the box (e.g. + "10x10 Cryo Box") along with the fields that are tracked and the dimensions of + the box. + + + Like all inventory, every Box has a barcode that is unique across the registry. + + ' + name: Boxes +- description: Benchling curates codon usage data for a variety of organisms to support + operations such as Codon Optimization and Back Translation. + name: Codon Usage Tables +- description: ' + + Containers are the backbone of sample management in Benchling. They represent + physical containers, such as tubes or wells, that hold quantities of biological + samples (represented by the entities inside the container). The container itself + tracks its total volume, and the concentration of every entity inside of it. + + + Containers are all associated with schemas, which define the type of the container + (e.g. "Tube") along with the fields that are tracked. + + + Like all inventory, every container has a barcode that is unique across the registry. + + ' + name: Containers +- description: 'Benchling supports custom entities for biological entities that are + neither sequences or proteins. Custom entities must have an entity schema set + and can have both schema fields and custom fields. + + ' + name: Custom Entities +- description: Benchling allows users to configure their own fully-custom string representation + formats for import/export of nucleotide sequences (including chemical modifications). + name: Custom Notations +- description: A DNA alignment is a Benchling object representing an alignment of + multiple DNA sequences. This endpoint is deprecated, please migrate to the existing + [Nucleotide Alignments endpoints.](#/Nucleotide%20Alignments) + name: DNA Alignments +- description: DNA Oligos are short linear DNA sequences that can be attached as primers + to full DNA sequences. Just like other entities, they support schemas, tags, and + aliases. + name: DNA Oligos +- description: 'DNA sequences are the bread and butter of the Benchling Molecular + Biology suite. On Benchling, these are comprised of a string of nucleotides and + collections of other attributes, such as annotations and primers. + + ' + name: DNA Sequences +- description: Dropdowns are registry-wide enums. Use dropdowns to standardize on + spelling and naming conventions, especially for important metadata like resistance + markers. + name: Dropdowns +- description: Entities include DNA and AA sequences, oligos, molecules, custom entities, + and other biological objects in Benchling. Entities support schemas, tags, and + aliases, and can be registered. + name: Entities +- description: Entries are rich text documents that allow you to capture all of your + experimental data in one place. + name: Entries +- description: Restriction enzymes are curated by Benchling for operations such as + Digests and Codon Optimization. + name: Enzymes +- description: The Events system allows external services to subscribe to events that + are triggered in Benchling (e.g. plasmid registration, request submission, etc). + name: Events +- description: Export a Notebook Entry or a Legacy Workflow Stage Entry. + name: Exports +- description: Feature Libraries are collections of shared canonical patterns that + can be used to generate annotations on matching regions of DNA Sequences or AA + Sequences. + name: Feature Libraries +- description: Folders are nested within projects to provide additional organization. + name: Folders +- description: Instrument Queries are used to query the instrument service. + name: Instrument Queries +- description: Manage inventory wide objects. + name: Inventory +- description: Lab Automation endpoints support integration with lab instruments, + and liquid handlers to create samples or results, and capture transfers between + containers at scale. + name: Lab Automation +- description: List label templates. + name: Label Templates +- description: Legacy Workflows allow orchestrating complex experiments. + name: Legacy Workflows +- description: Please use endpoints for Legacy Workflows. These deprecated endpoints + will be removed once users are migrated onto Legacy Workflows endpoints. + name: Legacy Workflows (deprecated) +- description: ' + + Manage locations objects. + + + Like all inventory, every Location has a barcode that is unique across the registry. + + ' + name: Locations +- description: 'Mixtures are solutions comprised of multiple ingredients where the + exact quantities of each ingredient are important to track. Each ingredient is + uniquely identified by its component entity. + + ' + name: Mixtures +- description: Molecules are groups of atoms held together by bonds, representing + entities smaller than DNA Sequences and AA Sequences. Just like other entities, + they support schemas, tags, and aliases. + name: Molecules +- description: Monomers are chemical building blocks with specified structures used + to compose modified nucleotides. Note that monomer write endpoints require tenant + admin permissions. + name: Monomers +- description: A Nucleotide Alignment is a Benchling object representing an alignment + of multiple DNA and/or RNA sequences. + name: Nucleotide Alignments +- description: ' + + Oligos are short linear DNA sequences that can be attached as primers to full + DNA sequences. Just like other entities, they support schemas, tags, and aliases. + + + Please migrate to the corresponding DNA Oligos endpoints so that we can support + RNA Oligos. + + ' + name: Oligos +- description: View organization objects. + name: Organizations +- description: ' + + Plates are a structured inventory type, grids of wells that each function like + containers. Plates come in two types: a traditional "fixed" type, where the wells + cannot move, and a "matrix" type. A matrix plate has similar functionality to + a box, where the containers inside can be moved around and removed altogether. + + + Plates are all associated with schemas, which define the type of the plate (e.g. + "96 Well Plate") along with the fields that are tracked, the dimensions of the + plate, and whether or not the plate is a matrix plate or a traditional well plate. + + + Like all inventory, every Plate has a barcode that is unique across the registry. + + ' + name: Plates +- description: List printers. + name: Printers +- description: Manage project objects. + name: Projects +- description: 'Manage registry objects. + + + See our documentation on [how to register entities](https://docs.benchling.com/docs/registering-entities). + + ' + name: Registry +- description: Requests allow scientists and teams to collaborate around experimental + assays and workflows. + name: Requests +- description: RNA Oligos are short linear RNA sequences that can be attached as primers + to full DNA sequences. Just like other entities, they support schemas, tags, and + aliases. + name: RNA Oligos +- description: Chains of linear, single stranded RNA that support most capabilities + and attributes of DNA Sequences. + name: RNA Sequences +- description: ' + + Schemas represent custom configuration of objects in Benchling. See this [guide + in our documentation](https://docs.benchling.com/docs/schemas) on how Schemas + impact our developers + + ' + name: Schemas +- description: ' + + Endpoints that perform expensive computations launch long-running tasks. These + endpoints return the task ID (a UUID) in the response body. + + + After launching a task, periodically invoke the [Get a task](#/Tasks/getTask) + endpoint with the task UUID (e.g., every 10 seconds), until the status is no longer + RUNNING. + + + You can access a task for up to 30 minutes after its completion, after which its + data will no longer be available. + + ' + name: Tasks +- description: View team objects. + name: Teams +- description: Manage user objects. + name: Users +- description: Manage warehouse credentials. + name: Warehouse +- description: Workflow flowchart config versions are versioned graphs of flowchart + configurations. + name: Workflow Flowchart Config Versions +- description: Workflow flowcharts represent the nodes and edges that a flowchart + is comprised of. + name: Workflow Flowcharts +- description: Workflow outputs are outputs of a workflow task + name: Workflow Outputs +- description: Workflow task groups are groups of workflow tasks of the same schema + name: Workflow Task Groups +- description: Workflow tasks encapsulate a single unit of work + name: Workflow Tasks diff --git a/tests/test_parser/test_properties/test_date.py b/tests/test_parser/test_properties/test_date.py deleted file mode 100644 index bcc3292b6..000000000 --- a/tests/test_parser/test_properties/test_date.py +++ /dev/null @@ -1,28 +0,0 @@ -from openapi_python_client.parser.errors import PropertyError -from openapi_python_client.parser.properties import DateProperty - - -def test_invalid_default_value(): - err = DateProperty.build( - default="not a date", - description=None, - example=None, - required=False, - python_name="not_a_date", - name="not_a_date", - ) - - assert isinstance(err, PropertyError) - - -def test_default_with_bad_type(): - err = DateProperty.build( - default=123, - description=None, - example=None, - required=False, - python_name="not_a_date", - name="not_a_date", - ) - - assert isinstance(err, PropertyError) diff --git a/tests/test_parser/test_properties/test_datetime.py b/tests/test_parser/test_properties/test_datetime.py deleted file mode 100644 index 94ea6f09c..000000000 --- a/tests/test_parser/test_properties/test_datetime.py +++ /dev/null @@ -1,28 +0,0 @@ -from openapi_python_client.parser.errors import PropertyError -from openapi_python_client.parser.properties import DateTimeProperty - - -def test_invalid_default_value(): - err = DateTimeProperty.build( - default="not a date", - description=None, - example=None, - required=False, - python_name="not_a_date", - name="not_a_date", - ) - - assert isinstance(err, PropertyError) - - -def test_default_with_bad_type(): - err = DateTimeProperty.build( - default=123, - description=None, - example=None, - required=False, - python_name="not_a_date", - name="not_a_date", - ) - - assert isinstance(err, PropertyError) diff --git a/tests/test_parser/test_properties/test_file.py b/tests/test_parser/test_properties/test_file.py index 87298ba03..f399e8278 100644 --- a/tests/test_parser/test_properties/test_file.py +++ b/tests/test_parser/test_properties/test_file.py @@ -3,6 +3,8 @@ def test_no_default_allowed(): + # currently this is testing an unused code path: + # https://github.com/openapi-generators/openapi-python-client/issues/1162 err = FileProperty.build( default="not none", description=None, diff --git a/tests/test_parser/test_properties/test_init.py b/tests/test_parser/test_properties/test_init.py index f56bf065d..164377167 100644 --- a/tests/test_parser/test_properties/test_init.py +++ b/tests/test_parser/test_properties/test_init.py @@ -12,7 +12,7 @@ StringProperty, UnionProperty, ) -from openapi_python_client.parser.properties.protocol import ModelProperty, Value +from openapi_python_client.parser.properties.protocol import ModelProperty from openapi_python_client.parser.properties.schemas import Class from openapi_python_client.schema import DataType from openapi_python_client.utils import ClassName, PythonIdentifier @@ -413,200 +413,6 @@ def test_get_imports(self, mocker, literal_enum_property_factory): class TestPropertyFromData: - def test_property_from_data_str_enum(self, enum_property_factory, config): - from openapi_python_client.parser.properties import Class, Schemas, property_from_data - from openapi_python_client.schema import Schema - - existing = enum_property_factory() - data = Schema(title="AnEnum", enum=["A", "B", "C"], default="B") - name = "my_enum" - required = True - - schemas = Schemas(classes_by_name={ClassName("AnEnum", prefix=""): existing}) - - prop, new_schemas = property_from_data( - name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=config - ) - - assert prop == enum_property_factory( - name=name, - required=required, - values={"A": "A", "B": "B", "C": "C"}, - class_info=Class(name=ClassName("ParentAnEnum", ""), module_name=PythonIdentifier("parent_an_enum", "")), - value_type=str, - default=Value(python_code="ParentAnEnum.B", raw_value="B"), - ) - assert schemas != new_schemas, "Provided Schemas was mutated" - assert new_schemas.classes_by_name == { - "AnEnum": existing, - "ParentAnEnum": prop, - } - - def test_property_from_data_str_enum_with_null( - self, enum_property_factory, union_property_factory, none_property_factory, config - ): - from openapi_python_client.parser.properties import Class, Schemas, property_from_data - from openapi_python_client.schema import Schema - - existing = enum_property_factory() - data = Schema(title="AnEnum", enum=["A", "B", "C", None], default="B") - name = "my_enum" - required = True - - schemas = Schemas(classes_by_name={ClassName("AnEnum", ""): existing}) - - prop, new_schemas = property_from_data( - name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=config - ) - - # None / null is removed from enum, and property is now nullable - assert isinstance(prop, UnionProperty), "Enums with None should be converted to UnionProperties" - enum_prop = enum_property_factory( - name="my_enum_type_1", - required=required, - values={"A": "A", "B": "B", "C": "C"}, - class_info=Class(name=ClassName("ParentAnEnum", ""), module_name=PythonIdentifier("parent_an_enum", "")), - value_type=str, - default=Value(python_code="ParentAnEnum.B", raw_value="B"), - ) - none_property = none_property_factory(name="my_enum_type_0", required=required) - assert prop == union_property_factory( - name=name, - default=Value(python_code="ParentAnEnum.B", raw_value="B"), - inner_properties=[none_property, enum_prop], - ) - assert schemas != new_schemas, "Provided Schemas was mutated" - assert new_schemas.classes_by_name == { - "AnEnum": existing, - "ParentAnEnum": enum_prop, - } - - def test_property_from_data_null_enum(self, enum_property_factory, none_property_factory, config): - from openapi_python_client.parser.properties import Schemas, property_from_data - from openapi_python_client.schema import Schema - - data = Schema(title="AnEnumWithOnlyNull", enum=[None], default=None) - name = "my_enum" - required = True - - schemas = Schemas() - - prop, new_schemas = property_from_data( - name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=config - ) - - assert prop == none_property_factory( - name="my_enum", required=required, default=Value(python_code="None", raw_value="None") - ) - - def test_property_from_data_int_enum(self, enum_property_factory, config): - from openapi_python_client.parser.properties import Class, Schemas, property_from_data - from openapi_python_client.schema import Schema - - name = "my_enum" - required = True - data = Schema.model_construct(title="anEnum", enum=[1, 2, 3], default=3) - - existing = enum_property_factory() - schemas = Schemas(classes_by_name={ClassName("AnEnum", ""): existing}) - - prop, new_schemas = property_from_data( - name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=config - ) - - assert prop == enum_property_factory( - name=name, - required=required, - values={"VALUE_1": 1, "VALUE_2": 2, "VALUE_3": 3}, - class_info=Class(name=ClassName("ParentAnEnum", ""), module_name=PythonIdentifier("parent_an_enum", "")), - value_type=int, - default=Value(python_code="ParentAnEnum.VALUE_3", raw_value=3), - ) - assert schemas != new_schemas, "Provided Schemas was mutated" - assert new_schemas.classes_by_name == { - "AnEnum": existing, - "ParentAnEnum": prop, - } - - def test_property_from_data_ref_enum(self, enum_property_factory, config): - from openapi_python_client.parser.properties import Class, Schemas, property_from_data - - name = "some_enum" - data = oai.Reference.model_construct(ref="#/components/schemas/MyEnum") - existing_enum = enum_property_factory( - name="an_enum", - required=False, - values={"A": "a"}, - class_info=Class(name="MyEnum", module_name="my_enum"), - ) - schemas = Schemas(classes_by_reference={"/components/schemas/MyEnum": existing_enum}) - - prop, new_schemas = property_from_data( - name=name, required=False, data=data, schemas=schemas, parent_name="", config=config - ) - - assert prop == enum_property_factory( - name="some_enum", - required=False, - values={"A": "a"}, - class_info=Class(name="MyEnum", module_name="my_enum"), - ) - assert schemas == new_schemas - - def test_property_from_data_ref_enum_with_overridden_default(self, enum_property_factory, config): - from openapi_python_client.parser.properties import Class, Schemas, property_from_data - - name = "some_enum" - required = False - data = oai.Schema.model_construct( - default="b", allOf=[oai.Reference.model_construct(ref="#/components/schemas/MyEnum")] - ) - existing_enum = enum_property_factory( - name="an_enum", - default=Value(python_code="MyEnum.A", raw_value="A"), - required=required, - values={"A": "a", "B": "b"}, - class_info=Class(name=ClassName("MyEnum", ""), module_name=PythonIdentifier("my_enum", "")), - ) - schemas = Schemas(classes_by_reference={ReferencePath("/components/schemas/MyEnum"): existing_enum}) - - prop, new_schemas = property_from_data( - name=name, required=required, data=data, schemas=schemas, parent_name="", config=config - ) - new_schemas = attr.evolve(new_schemas, models_to_process=[]) # intermediate state irrelevant to this test - - assert prop == enum_property_factory( - name="some_enum", - default=Value(python_code="MyEnum.B", raw_value="b"), - required=required, - values={"A": "a", "B": "b"}, - class_info=Class(name=ClassName("MyEnum", ""), module_name=PythonIdentifier("my_enum", "")), - ) - assert schemas == new_schemas - - def test_property_from_data_ref_enum_with_invalid_default(self, enum_property_factory, config): - from openapi_python_client.parser.properties import Class, Schemas, property_from_data - - name = "some_enum" - data = oai.Schema.model_construct( - default="x", allOf=[oai.Reference.model_construct(ref="#/components/schemas/MyEnum")] - ) - existing_enum = enum_property_factory( - name="an_enum", - default=Value(python_code="MyEnum.A", raw_value="A"), - values={"A": "a", "B": "b"}, - class_info=Class(name=ClassName("MyEnum", ""), module_name=PythonIdentifier("my_enum", "")), - python_name=PythonIdentifier("an_enum", ""), - ) - schemas = Schemas(classes_by_reference={ReferencePath("/components/schemas/MyEnum"): existing_enum}) - - prop, new_schemas = property_from_data( - name=name, required=False, data=data, schemas=schemas, parent_name="", config=config - ) - - assert schemas == new_schemas - assert prop == PropertyError(data=data, detail="Value x is not valid for enum an_enum") - def test_property_from_data_ref_model(self, model_property_factory, config): from openapi_python_client.parser.properties import Class, Schemas, property_from_data @@ -785,85 +591,6 @@ def test_property_from_data_no_valid_props_in_data(self, any_property_factory): class TestStringBasedProperty: - @pytest.mark.parametrize("required", (True, False)) - def test_no_format(self, string_property_factory, required, config): - from openapi_python_client.parser.properties import property_from_data - - name = "some_prop" - data = oai.Schema.model_construct(type="string", default="hello world") - - p, _ = property_from_data( - name=name, required=required, data=data, parent_name=None, config=config, schemas=Schemas() - ) - - assert p == string_property_factory( - name=name, required=required, default=StringProperty.convert_value("hello world") - ) - - def test_datetime_format(self, date_time_property_factory, config): - from openapi_python_client.parser.properties import property_from_data - - name = "datetime_prop" - required = True - data = oai.Schema.model_construct(type="string", schema_format="date-time", default="2020-11-06T12:00:00") - - p, _ = property_from_data( - name=name, required=required, data=data, schemas=Schemas(), config=config, parent_name="" - ) - - assert p == date_time_property_factory( - name=name, - required=required, - default=Value(python_code=f"isoparse('{data.default}')", raw_value=data.default), - ) - - def test_datetime_bad_default(self, config): - from openapi_python_client.parser.properties import property_from_data - - name = "datetime_prop" - required = True - data = oai.Schema.model_construct(type="string", schema_format="date-time", default="a") - - result, _ = property_from_data( - name=name, required=required, data=data, schemas=Schemas(), config=config, parent_name="" - ) - - assert isinstance(result, PropertyError) - assert result.detail.startswith("Invalid datetime") - - def test_date_format(self, date_property_factory, config): - from openapi_python_client.parser.properties import property_from_data - - name = "date_prop" - required = True - - data = oai.Schema.model_construct(type="string", schema_format="date", default="2020-11-06") - - p, _ = property_from_data( - name=name, required=required, data=data, schemas=Schemas(), config=config, parent_name="" - ) - - assert p == date_property_factory( - name=name, - required=required, - default=Value(python_code=f"isoparse('{data.default}').date()", raw_value=data.default), - ) - - def test_date_format_bad_default(self, config): - from openapi_python_client.parser.properties import property_from_data - - name = "date_prop" - required = True - - data = oai.Schema.model_construct(type="string", schema_format="date", default="a") - - p, _ = property_from_data( - name=name, required=required, data=data, schemas=Schemas(), config=config, parent_name="" - ) - - assert isinstance(p, PropertyError) - assert p.detail.startswith("Invalid date") - def test__string_based_property_binary_format(self, file_property_factory, config): from openapi_python_client.parser.properties import property_from_data @@ -876,19 +603,6 @@ def test__string_based_property_binary_format(self, file_property_factory, confi ) assert p == file_property_factory(name=name, required=required) - def test__string_based_property_unsupported_format(self, string_property_factory, config): - from openapi_python_client.parser.properties import property_from_data - - name = "unknown" - required = True - data = oai.Schema.model_construct(type="string", schema_format="blah") - - p, _ = property_from_data( - name=name, required=required, data=data, schemas=Schemas(), config=config, parent_name="" - ) - - assert p == string_property_factory(name=name, required=required) - class TestCreateSchemas: def test_skips_references_and_keeps_going(self, mocker, config): diff --git a/tests/test_parser/test_properties/test_none.py b/tests/test_parser/test_properties/test_none.py index d61ca0136..b6289cdb8 100644 --- a/tests/test_parser/test_properties/test_none.py +++ b/tests/test_parser/test_properties/test_none.py @@ -5,6 +5,8 @@ def test_default(): + # currently this is testing an unused code path: + # https://github.com/openapi-generators/openapi-python-client/issues/1162 err = NoneProperty.build( default="not None", description=None, From cd2ccb0df52618e2fcbbfd796fdf5c9495b86b71 Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Mon, 11 Nov 2024 14:32:54 -0800 Subject: [PATCH 06/15] restore some missing test coverage --- .changeset/live_tests.md | 9 +- CONTRIBUTING.md | 8 +- end_to_end_tests/end_to_end_test_helpers.py | 19 +- .../generated_code_live_tests/README.md | 1 - .../generated_code_live_tests/test_arrays.py | 152 +++++++ .../test_defaults.py | 92 ++--- .../test_enum_and_const.py | 184 --------- .../test_enums_and_consts.py | 337 ++++++++++++++++ .../test_literal_enums.py | 150 ------- ...roperty_encoding.py => test_properties.py} | 48 ++- .../generated_code_live_tests/test_unions.py | 100 +++-- .../generator_errors_and_warnings/README.md | 14 + .../test_invalid_arrays.py | 28 ++ .../test_invalid_defaults.py | 92 +++++ .../test_invalid_enums_and_consts.py | 134 +++++++ .../test_invalid_spec_format.py | 75 ++++ .../test_invalid_unions.py | 28 ++ end_to_end_tests/test_end_to_end.py | 4 +- pyproject.toml | 4 +- tests/test_parser/test_openapi.py | 45 --- .../test_properties/test_enum_property.py | 36 -- .../test_parser/test_properties/test_init.py | 372 +----------------- .../test_properties/test_list_property.py | 178 --------- .../test_parser/test_properties/test_union.py | 29 -- 24 files changed, 1019 insertions(+), 1120 deletions(-) create mode 100644 end_to_end_tests/generated_code_live_tests/test_arrays.py delete mode 100644 end_to_end_tests/generated_code_live_tests/test_enum_and_const.py create mode 100644 end_to_end_tests/generated_code_live_tests/test_enums_and_consts.py delete mode 100644 end_to_end_tests/generated_code_live_tests/test_literal_enums.py rename end_to_end_tests/generated_code_live_tests/{test_property_encoding.py => test_properties.py} (72%) create mode 100644 end_to_end_tests/generator_errors_and_warnings/README.md create mode 100644 end_to_end_tests/generator_errors_and_warnings/test_invalid_arrays.py create mode 100644 end_to_end_tests/generator_errors_and_warnings/test_invalid_defaults.py create mode 100644 end_to_end_tests/generator_errors_and_warnings/test_invalid_enums_and_consts.py create mode 100644 end_to_end_tests/generator_errors_and_warnings/test_invalid_spec_format.py create mode 100644 end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py delete mode 100644 tests/test_parser/test_properties/test_enum_property.py delete mode 100644 tests/test_parser/test_properties/test_list_property.py diff --git a/.changeset/live_tests.md b/.changeset/live_tests.md index e0f419c65..25705da72 100644 --- a/.changeset/live_tests.md +++ b/.changeset/live_tests.md @@ -2,8 +2,13 @@ default: minor --- -# New category of end-to-end tests +# New categories of end-to-end tests -There is a new set of tests that generate client code from an API document and then actually import and execute that code. See [`end_to_end_tests/generated_code_live_tests`](./end_to_end_tests/generated_code_live_tests) for more details. +Automated tests have been extended to include two new types of tests: + +1. Happy-path tests that run the generator from an inline API document and then actually import and execute the generated code. See [`end_to_end_tests/generated_code_live_tests`](./end_to_end_tests/generated_code_live_tests). +2. Warning/error condition tests that run the generator from an inline API document that contains something invalid, and make assertions about the generator's output. + +These provide more efficient and granular test coverage than the "golden record"-based end-to-end tests, and also replace some tests that were previously being done against low-level implementation details in `tests/unit`. This does not affect any runtime functionality of openapi-python-client. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f5eb6095e..2c46faeb3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -77,11 +77,13 @@ The tests run the generator against a small API spec (defined inline for each te See [`end_to_end_tests/generated_code_live_tests`](./end_to_end_tests/generated_code_live_tests). -#### Unit tests +#### Other unit tests -> **NOTE**: Several older-style unit tests using mocks exist in this project. These should be phased out rather than updated, as the tests are brittle and difficult to maintain. Only error cases should be tests with unit tests going forward. +These include: -In some cases, we need to test things which cannot be generated—like validating that errors are caught and handled correctly. These should be tested via unit tests in the `tests` directory, using the `pytest` framework. +* Regular unit tests of basic pieces of fairly self-contained low-level functionality, such as helper functions. These are implemented in the `tests/unit` directory, using the `pytest` framework. +* End-to-end tests of invalid spec conditions, where we run the generator against a small spec with some problem, and expect it to print warnings/errors rather than generating code. These are implemented in `end_to_end_tests/generator_errors_and_warnings`. +* Older-style unit tests of low-level functions like `property_from_data` that have complex behavior. These are brittle and difficult to maintain, and should not be used going forward. Instead, use either unit tests of generated code (to test happy paths), or end-to-end tests of invalid spec conditions (to test for warnings/errors), as described above. ### Creating a Pull Request diff --git a/end_to_end_tests/end_to_end_test_helpers.py b/end_to_end_tests/end_to_end_test_helpers.py index 332c2856a..084fdf783 100644 --- a/end_to_end_tests/end_to_end_test_helpers.py +++ b/end_to_end_tests/end_to_end_test_helpers.py @@ -78,6 +78,7 @@ def generate_client( extra_args: List[str] = [], output_path: str = "my-test-api-client", base_module: str = "my_test_api_client", + specify_output_path_explicitly: bool = True, overwrite: bool = True, raise_on_error: bool = True, ) -> GeneratedClientContext: @@ -85,11 +86,9 @@ def generate_client( full_output_path = Path.cwd() / output_path if not overwrite: shutil.rmtree(full_output_path, ignore_errors=True) - args = [ - *extra_args, - "--output-path", - str(full_output_path), - ] + args = extra_args + if specify_output_path_explicitly: + args = [*args, "--output-path", str(full_output_path)] if overwrite: args = [*args, "--overwrite"] generator_result = _run_command("generate", args, openapi_document, raise_on_error=raise_on_error) @@ -159,7 +158,7 @@ def inline_spec_should_fail( Returns the command result, which could include stdout data or an exception. """ with generate_client_from_inline_spec( - openapi_spec, extra_args, filename_suffix, config, add_missing_sections, raise_on_error=False + openapi_spec, extra_args, filename_suffix, config, add_missing_sections=add_missing_sections, raise_on_error=False ) as generated_client: assert generated_client.generator_result.exit_code != 0 return generated_client.generator_result @@ -170,14 +169,14 @@ def inline_spec_should_cause_warnings( extra_args: List[str] = [], filename_suffix: Optional[str] = None, config: str = "", - add_openapi_info = True, + add_missing_sections = True, ) -> str: """Asserts that the generator is able to process the spec, but printed warnings. Returns the full output. """ with generate_client_from_inline_spec( - openapi_spec, extra_args, filename_suffix, config, add_openapi_info, raise_on_error=True + openapi_spec, extra_args, filename_suffix, config, add_missing_sections=add_missing_sections, raise_on_error=True ) as generated_client: assert generated_client.generator_result.exit_code == 0 assert "Warning(s) encountered while generating" in generated_client.generator_result.stdout @@ -250,6 +249,10 @@ def assert_model_decode_encode(model_class: Any, json_data: dict, expected_insta assert instance.to_dict() == json_data +def assert_model_property_type_hint(model_class: Any, name: str, expected_type_hint: Any) -> None: + assert model_class.__annotations__[name] == expected_type_hint + + def assert_bad_schema_warning(output: str, schema_name: str, expected_message_str) -> None: bad_schema_regex = "Unable to (parse|process) schema" expected_start_regex = f"{bad_schema_regex} /components/schemas/{re.escape(schema_name)}:?\n" diff --git a/end_to_end_tests/generated_code_live_tests/README.md b/end_to_end_tests/generated_code_live_tests/README.md index f1b1a0d1f..2bb5a57bb 100644 --- a/end_to_end_tests/generated_code_live_tests/README.md +++ b/end_to_end_tests/generated_code_live_tests/README.md @@ -18,7 +18,6 @@ Each test class follows this pattern: Example: ```python - @with_generated_client_fixture( """ components: diff --git a/end_to_end_tests/generated_code_live_tests/test_arrays.py b/end_to_end_tests/generated_code_live_tests/test_arrays.py new file mode 100644 index 000000000..ce1c63f30 --- /dev/null +++ b/end_to_end_tests/generated_code_live_tests/test_arrays.py @@ -0,0 +1,152 @@ +import datetime +from typing import Any, ForwardRef, List, Union +import uuid +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_model_decode_encode, + assert_model_property_type_hint, + with_generated_client_fixture, + with_generated_code_imports, +) + + +@with_generated_client_fixture( +""" +components: + schemas: + SimpleObject: + type: object + properties: + name: {"type": "string"} + ModelWithArrayOfAny: + properties: + arrayProp: + type: array + items: {} + ModelWithArrayOfInts: + properties: + arrayProp: + type: array + items: {"type": "integer"} + ModelWithArrayOfObjects: + properties: + arrayProp: + type: array + items: {"$ref": "#/components/schemas/SimpleObject"} +""") +@with_generated_code_imports( + ".models.ModelWithArrayOfAny", + ".models.ModelWithArrayOfInts", + ".models.ModelWithArrayOfObjects", + ".models.SimpleObject", + ".types.Unset", +) +class TestArraySchemas: + def test_array_of_any(self, ModelWithArrayOfAny): + assert_model_decode_encode( + ModelWithArrayOfAny, + {"arrayProp": ["a", 1]}, + ModelWithArrayOfAny(array_prop=["a", 1]), + ) + + def test_array_of_int(self, ModelWithArrayOfInts): + assert_model_decode_encode( + ModelWithArrayOfInts, + {"arrayProp": [1, 2]}, + ModelWithArrayOfInts(array_prop=[1, 2]), + ) + # Note, currently arrays of simple types are not validated, so the following assertion would fail: + # with pytest.raises(TypeError): + # ModelWithArrayOfInt.from_dict({"arrayProp": [1, "a"]}) + + def test_array_of_object(self, ModelWithArrayOfObjects, SimpleObject): + assert_model_decode_encode( + ModelWithArrayOfObjects, + {"arrayProp": [{"name": "a"}, {"name": "b"}]}, + ModelWithArrayOfObjects(array_prop=[SimpleObject(name="a"), SimpleObject(name="b")]), + ) + + def test_type_hints(self, ModelWithArrayOfAny, ModelWithArrayOfInts, ModelWithArrayOfObjects, Unset): + assert_model_property_type_hint(ModelWithArrayOfAny, "array_prop", Union[List[Any], Unset]) + assert_model_property_type_hint(ModelWithArrayOfInts, "array_prop", Union[List[int], Unset]) + assert_model_property_type_hint(ModelWithArrayOfObjects, "array_prop", Union[List[ForwardRef("SimpleObject")], Unset]) + + +@with_generated_client_fixture( +""" +components: + schemas: + SimpleObject: + type: object + properties: + name: {"type": "string"} + ModelWithSinglePrefixItem: + type: object + properties: + arrayProp: + type: array + prefixItems: + - type: string + ModelWithPrefixItems: + type: object + properties: + arrayProp: + type: array + prefixItems: + - $ref: "#/components/schemas/SimpleObject" + - type: string + ModelWithMixedItems: + type: object + properties: + arrayProp: + type: array + prefixItems: + - $ref: "#/components/schemas/SimpleObject" + items: + type: string +""") +@with_generated_code_imports( + ".models.ModelWithSinglePrefixItem", + ".models.ModelWithPrefixItems", + ".models.ModelWithMixedItems", + ".models.SimpleObject", + ".types.Unset", +) +class TestArraysWithPrefixItems: + def test_single_prefix_item(self, ModelWithSinglePrefixItem): + assert_model_decode_encode( + ModelWithSinglePrefixItem, + {"arrayProp": ["a"]}, + ModelWithSinglePrefixItem(array_prop=["a"]), + ) + + def test_prefix_items(self, ModelWithPrefixItems, SimpleObject): + assert_model_decode_encode( + ModelWithPrefixItems, + {"arrayProp": [{"name": "a"}, "b"]}, + ModelWithPrefixItems(array_prop=[SimpleObject(name="a"), "b"]), + ) + + def test_prefix_items_and_regular_items(self, ModelWithMixedItems, SimpleObject): + assert_model_decode_encode( + ModelWithMixedItems, + {"arrayProp": [{"name": "a"}, "b"]}, + ModelWithMixedItems(array_prop=[SimpleObject(name="a"), "b"]), + ) + + def test_type_hints(self, ModelWithSinglePrefixItem, ModelWithPrefixItems, ModelWithMixedItems, Unset): + assert_model_property_type_hint(ModelWithSinglePrefixItem, "array_prop", Union[List[str], Unset]) + assert_model_property_type_hint( + ModelWithPrefixItems, + "array_prop", + Union[List[Union[ForwardRef("SimpleObject"), str]], Unset], + ) + assert_model_property_type_hint( + ModelWithMixedItems, + "array_prop", + Union[List[Union[ForwardRef("SimpleObject"), str]], Unset], + ) + # Note, this test is asserting the current behavior which, due to limitations of the implementation + # (see: https://github.com/openapi-generators/openapi-python-client/pull/1130), is not really doing + # tuple type validation-- the ordering of prefixItems is ignored, and instead all of the types are + # simply treated as a union. diff --git a/end_to_end_tests/generated_code_live_tests/test_defaults.py b/end_to_end_tests/generated_code_live_tests/test_defaults.py index 3c78f1e05..c3de3cf88 100644 --- a/end_to_end_tests/generated_code_live_tests/test_defaults.py +++ b/end_to_end_tests/generated_code_live_tests/test_defaults.py @@ -1,11 +1,6 @@ - import datetime import uuid -import pytest from end_to_end_tests.end_to_end_test_helpers import ( - assert_bad_schema_warning, - assert_model_decode_encode, - inline_spec_should_cause_warnings, with_generated_client_fixture, with_generated_code_imports, ) @@ -36,6 +31,12 @@ numberWithStringValue: {"type": "number", "default": "5.5"} stringWithNumberValue: {"type": "string", "default": 6} stringConst: {"type": "string", "const": "always", "default": "always"} + unionWithValidDefaultForType1: + anyOf: [{"type": "boolean"}, {"type": "integer"}] + default: true + unionWithValidDefaultForType2: + anyOf: [{"type": "boolean"}, {"type": "integer"}] + default: 3 """) @with_generated_code_imports(".models.MyModel") class TestSimpleDefaults: @@ -62,6 +63,8 @@ def test_defaults_in_initializer(self, MyModel): number_with_string_value=5.5, string_with_number_value="6", string_const="always", + union_with_valid_default_for_type_1=True, + union_with_valid_default_for_type_2=3, ) @@ -88,70 +91,23 @@ def test_enum_default(self, MyEnum, MyModel): assert MyModel().enum_prop == MyEnum.A -class TestInvalidDefaultValues: - @pytest.fixture(scope="class") - def warnings(self): - return inline_spec_should_cause_warnings( +@with_generated_client_fixture( """ components: schemas: - WithBadBoolean: - properties: - badBoolean: {"type": "boolean", "default": "not a boolean"} - WithBadIntAsString: - properties: - badInt: {"type": "integer", "default": "not an int"} - WithBadIntAsOther: - properties: - badInt: {"type": "integer", "default": true} - WithBadFloatAsString: - properties: - badInt: {"type": "number", "default": "not a number"} - WithBadFloatAsOther: - properties: - badInt: {"type": "number", "default": true} - WithBadDateAsString: - properties: - badDate: {"type": "string", "format": "date", "default": "xxx"} - WithBadDateAsOther: - properties: - badDate: {"type": "string", "format": "date", "default": 3} - WithBadDateTimeAsString: - properties: - badDate: {"type": "string", "format": "date-time", "default": "xxx"} - WithBadDateTimeAsOther: - properties: - badDate: {"type": "string", "format": "date-time", "default": 3} - WithBadUuidAsString: - properties: - badUuid: {"type": "string", "format": "uuid", "default": "xxx"} - WithBadUuidAsOther: - properties: - badUuid: {"type": "string", "format": "uuid", "default": 3} - WithBadEnum: + MyEnum: + type: string + enum: ["a", "A"] + MyModel: properties: - badEnum: {"type": "string", "enum": ["a", "b"], "default": "x"} -""" - ) - # Note, the null/None type, and binary strings (files), are not covered here due to a known bug: - # https://github.com/openapi-generators/openapi-python-client/issues/1162 - - @pytest.mark.parametrize( - ("model_name", "message"), - [ - ("WithBadBoolean", "Invalid boolean value"), - ("WithBadIntAsString", "Invalid int value"), - ("WithBadIntAsOther", "Invalid int value"), - ("WithBadFloatAsString", "Invalid float value"), - ("WithBadFloatAsOther", "Cannot convert True to a float"), - ("WithBadDateAsString", "Invalid date"), - ("WithBadDateAsOther", "Cannot convert 3 to a date"), - ("WithBadDateTimeAsString", "Invalid datetime"), - ("WithBadDateTimeAsOther", "Cannot convert 3 to a datetime"), - ("WithBadUuidAsString", "Invalid UUID value"), - ("WithBadUuidAsOther", "Invalid UUID value"), - ("WithBadEnum", "Value x is not valid for enum"), - ] - ) - def test_bad_default_warning(self, model_name, message, warnings): - assert_bad_schema_warning(warnings, model_name, message) + enumProp: + allOf: + - $ref: "#/components/schemas/MyEnum" + default: A +""", + config="literal_enums: true", +) +@with_generated_code_imports(".models.MyModel") +class TestLiteralEnumDefaults: + def test_default_value(self, MyModel): + assert MyModel().enum_prop == "A" diff --git a/end_to_end_tests/generated_code_live_tests/test_enum_and_const.py b/end_to_end_tests/generated_code_live_tests/test_enum_and_const.py deleted file mode 100644 index add634344..000000000 --- a/end_to_end_tests/generated_code_live_tests/test_enum_and_const.py +++ /dev/null @@ -1,184 +0,0 @@ - -from typing import Any -import pytest -from end_to_end_tests.end_to_end_test_helpers import ( - assert_bad_schema_warning, - assert_model_decode_encode, - inline_spec_should_cause_warnings, - inline_spec_should_fail, - with_generated_code_import, - with_generated_client_fixture, - with_generated_code_imports, -) - - -@with_generated_client_fixture( -""" -components: - schemas: - MyEnum: - type: string - enum: ["a", "B", "~weirdstring"] - MyIntEnum: - type: integer - enum: [2, 3, -4] - MyEnumIncludingNull: - type: ["string", "null"] - enum: ["a", "b", null] - MyNullOnlyEnum: - enum: [null] - MyModel: - properties: - enumProp: {"$ref": "#/components/schemas/MyEnum"} - intEnumProp: {"$ref": "#/components/schemas/MyIntEnum"} - nullableEnumProp: - oneOf: - - {"$ref": "#/components/schemas/MyEnum"} - - type: "null" - enumIncludingNullProp: {"$ref": "#/components/schemas/MyEnumIncludingNull"} - nullOnlyEnumProp: {"$ref": "#/components/schemas/MyNullOnlyEnum"} - inlineEnumProp: - type: string - enum: ["a", "b"] -""") -@with_generated_code_imports( - ".models.MyEnum", - ".models.MyIntEnum", - ".models.MyEnumIncludingNullType1", # see comment in test_nullable_enum_prop - ".models.MyModel", - ".models.MyModelInlineEnumProp", -) -class TestEnumClasses: - def test_enum_classes(self, MyEnum, MyIntEnum): - assert MyEnum.A == MyEnum("a") - assert MyEnum.B == MyEnum("B") - assert MyEnum.VALUE_2 == MyEnum("~weirdstring") - assert MyIntEnum.VALUE_2 == MyIntEnum(2) - assert MyIntEnum.VALUE_3 == MyIntEnum(3) - assert MyIntEnum.VALUE_NEGATIVE_4 == MyIntEnum(-4) - - def test_enum_prop(self, MyModel, MyEnum, MyIntEnum, MyModelInlineEnumProp): - assert_model_decode_encode(MyModel, {"enumProp": "B"}, MyModel(enum_prop=MyEnum.B)) - assert_model_decode_encode(MyModel, {"intEnumProp": 2}, MyModel(int_enum_prop=MyIntEnum.VALUE_2)) - assert_model_decode_encode( - MyModel, - {"inlineEnumProp": "a"}, - MyModel(inline_enum_prop=MyModelInlineEnumProp.A), - ) - - def test_enum_prop_type(self, MyModel, MyEnum): - # Just verifying that it's not using a literal vaue - assert isinstance(MyModel.from_dict({"enumProp": "B"}).enum_prop, MyEnum) - - def test_nullable_enum_prop(self, MyModel, MyEnum, MyEnumIncludingNullType1): - # Note, MyEnumIncludingNullType1 should be named just MyEnumIncludingNull - - # known bug: https://github.com/openapi-generators/openapi-python-client/issues/1120 - assert_model_decode_encode(MyModel, {"nullableEnumProp": "B"}, MyModel(nullable_enum_prop=MyEnum.B)) - assert_model_decode_encode(MyModel, {"nullableEnumProp": None}, MyModel(nullable_enum_prop=None)) - assert_model_decode_encode( - MyModel, - {"enumIncludingNullProp": "a"}, - MyModel(enum_including_null_prop=MyEnumIncludingNullType1.A), - ) - assert_model_decode_encode( MyModel, {"enumIncludingNullProp": None}, MyModel(enum_including_null_prop=None)) - assert_model_decode_encode(MyModel, {"nullOnlyEnumProp": None}, MyModel(null_only_enum_prop=None)) - - def test_invalid_values(self, MyModel): - with pytest.raises(ValueError): - MyModel.from_dict({"enumProp": "c"}) - with pytest.raises(ValueError): - MyModel.from_dict({"enumProp": "A"}) - with pytest.raises(ValueError): - MyModel.from_dict({"enumProp": 2}) - with pytest.raises(ValueError): - MyModel.from_dict({"intEnumProp": 0}) - with pytest.raises(ValueError): - MyModel.from_dict({"intEnumProp": "a"}) - - -@with_generated_client_fixture( -""" -components: - schemas: - MyModel: - properties: - mustBeErnest: - const: Ernest - mustBeThirty: - const: 30 -""", -) -@with_generated_code_import(".models.MyModel") -class TestConst: - def test_valid_string(self, MyModel): - assert_model_decode_encode( - MyModel, - {"mustBeErnest": "Ernest"}, - MyModel(must_be_ernest="Ernest"), - ) - - def test_valid_int(self, MyModel): - assert_model_decode_encode( - MyModel, - {"mustBeThirty": 30}, - MyModel(must_be_thirty=30), - ) - - def test_invalid_string(self, MyModel): - with pytest.raises(ValueError): - MyModel.from_dict({"mustBeErnest": "Jack"}) - - def test_invalid_int(self, MyModel): - with pytest.raises(ValueError): - MyModel.from_dict({"mustBeThirty": 29}) - - -class TestEnumAndConstInvalidSchemas: - @pytest.fixture(scope="class") - def warnings(self): - return inline_spec_should_cause_warnings( -""" -components: - schemas: - WithBadDefaultValue: - enum: ["A"] - default: "B" - WithBadDefaultType: - enum: ["A"] - default: 123 - WithMixedTypes: - enum: ["A", 1] - WithUnsupportedType: - enum: [1.4, 1.5] - DefaultNotMatchingConst: - const: "aaa" - default: "bbb" -""" - ) - - def test_enum_bad_default_value(self, warnings): - assert_bad_schema_warning(warnings, "WithBadDefaultValue", "Value B is not valid") - - def test_enum_bad_default_type(self, warnings): - assert_bad_schema_warning(warnings, "WithBadDefaultType", "Cannot convert 123 to enum") - - def test_enum_mixed_types(self, warnings): - assert_bad_schema_warning(warnings, "WithMixedTypes", "Enum values must all be the same type") - - def test_enum_unsupported_type(self, warnings): - assert_bad_schema_warning(warnings, "WithUnsupportedType", "Unsupported enum type") - - def test_const_default_not_matching(self, warnings): - assert_bad_schema_warning(warnings, "DefaultNotMatchingConst", "Invalid value for const") - - def test_enum_duplicate_values(self): - # This one currently causes a full generator failure rather than a warning - result = inline_spec_should_fail( -""" -components: - schemas: - WithDuplicateValues: - enum: ["x", "x"] -""" - ) - assert "Duplicate key X in enum" in str(result.exception) diff --git a/end_to_end_tests/generated_code_live_tests/test_enums_and_consts.py b/end_to_end_tests/generated_code_live_tests/test_enums_and_consts.py new file mode 100644 index 000000000..1907d461a --- /dev/null +++ b/end_to_end_tests/generated_code_live_tests/test_enums_and_consts.py @@ -0,0 +1,337 @@ +from typing import Literal, Union +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_model_decode_encode, + assert_model_property_type_hint, + with_generated_code_import, + with_generated_client_fixture, + with_generated_code_imports, +) + + +@with_generated_client_fixture( +""" +components: + schemas: + MyEnum: + type: string + enum: ["a", "B", "a23", "123", "1bc", "a Thing WIth spaces", ""] + MyModel: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + inlineEnumProp: + type: string + enum: ["a", "b"] + MyModelWithRequired: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + required: ["enumProp"] +""") +@with_generated_code_imports( + ".models.MyEnum", + ".models.MyModel", + ".models.MyModelInlineEnumProp", + ".models.MyModelWithRequired", + ".types.Unset", +) +class TestStringEnumClass: + @pytest.mark.parametrize( + "expected_name,expected_value", + [ + ("A", "a"), + ("B", "B"), + ("A23", "a23"), + ("VALUE_3", "123"), + ("VALUE_4", "1bc"), + ("A_THING_WITH_SPACES", "a Thing WIth spaces"), + ("VALUE_6", ""), + ], + ) + def test_enum_values(self, MyEnum, expected_name, expected_value): + assert getattr(MyEnum, expected_name) == MyEnum(expected_value) + + def test_enum_prop_in_object(self, MyEnum, MyModel, MyModelInlineEnumProp): + assert_model_decode_encode(MyModel, {"enumProp": "B"}, MyModel(enum_prop=MyEnum.B)) + assert_model_decode_encode( + MyModel, + {"inlineEnumProp": "a"}, + MyModel(inline_enum_prop=MyModelInlineEnumProp.A), + ) + + def test_type_hints(self, MyModel, MyModelWithRequired, MyEnum, Unset): + optional_type = Union[Unset, MyEnum] + assert_model_property_type_hint(MyModel,"enum_prop", optional_type) + assert_model_property_type_hint(MyModelWithRequired, "enum_prop", MyEnum) + + def test_invalid_values(self, MyModel): + with pytest.raises(ValueError): + MyModel.from_dict({"enumProp": "c"}) + with pytest.raises(ValueError): + MyModel.from_dict({"enumProp": "A"}) + with pytest.raises(ValueError): + MyModel.from_dict({"enumProp": 2}) + + +@with_generated_client_fixture( +""" +components: + schemas: + MyEnum: + type: integer + enum: [2, 3, -4] + MyModel: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + inlineEnumProp: + type: string + enum: [2, 3] + MyModelWithRequired: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + required: ["enumProp"] +""") +@with_generated_code_imports( + ".models.MyEnum", + ".models.MyModel", + ".models.MyModelInlineEnumProp", + ".models.MyModelWithRequired", + ".types.Unset", +) +class TestIntEnumClass: + @pytest.mark.parametrize( + "expected_name,expected_value", + [ + ("VALUE_2", 2), + ("VALUE_3", 3), + ("VALUE_NEGATIVE_4", -4), + ], + ) + def test_enum_values(self, MyEnum, expected_name, expected_value): + assert getattr(MyEnum, expected_name) == MyEnum(expected_value) + + def test_enum_prop_in_object(self, MyEnum, MyModel, MyModelInlineEnumProp): + assert_model_decode_encode(MyModel, {"enumProp": 2}, MyModel(enum_prop=MyEnum.VALUE_2)) + assert_model_decode_encode( + MyModel, + {"inlineEnumProp": 2}, + MyModel(inline_enum_prop=MyModelInlineEnumProp.VALUE_2), + ) + + def test_type_hints(self, MyModel, MyModelWithRequired, MyEnum, Unset): + optional_type = Union[Unset, MyEnum] + assert_model_property_type_hint(MyModel,"enum_prop", optional_type) + assert_model_property_type_hint(MyModelWithRequired, "enum_prop", MyEnum) + + def test_invalid_values(self, MyModel): + with pytest.raises(ValueError): + MyModel.from_dict({"enumProp": 5}) + with pytest.raises(ValueError): + MyModel.from_dict({"enumProp": "a"}) + + +@with_generated_client_fixture( +""" +components: + schemas: + MyEnum: + type: string + enum: ["a", "b"] + MyEnumIncludingNull: + type: ["string", "null"] + enum: ["a", "b", null] + MyNullOnlyEnum: + enum: [null] + MyModel: + properties: + nullableEnumProp: + oneOf: + - {"$ref": "#/components/schemas/MyEnum"} + - type: "null" + enumIncludingNullProp: {"$ref": "#/components/schemas/MyEnumIncludingNull"} + nullOnlyEnumProp: {"$ref": "#/components/schemas/MyNullOnlyEnum"} +""") +@with_generated_code_imports( + ".models.MyEnum", + ".models.MyEnumIncludingNullType1", # see comment in test_nullable_enum_prop + ".models.MyModel", + ".types.Unset", +) +class TestNullableEnums: + def test_nullable_enum_prop(self, MyModel, MyEnum, MyEnumIncludingNullType1): + # Note, MyEnumIncludingNullType1 should be named just MyEnumIncludingNull - + # known bug: https://github.com/openapi-generators/openapi-python-client/issues/1120 + assert_model_decode_encode(MyModel, {"nullableEnumProp": "b"}, MyModel(nullable_enum_prop=MyEnum.B)) + assert_model_decode_encode(MyModel, {"nullableEnumProp": None}, MyModel(nullable_enum_prop=None)) + assert_model_decode_encode( + MyModel, + {"enumIncludingNullProp": "a"}, + MyModel(enum_including_null_prop=MyEnumIncludingNullType1.A), + ) + assert_model_decode_encode( MyModel, {"enumIncludingNullProp": None}, MyModel(enum_including_null_prop=None)) + assert_model_decode_encode(MyModel, {"nullOnlyEnumProp": None}, MyModel(null_only_enum_prop=None)) + + def test_type_hints(self, MyModel, MyEnum, Unset): + expected_type = Union[MyEnum, None, Unset] + assert_model_property_type_hint(MyModel, "nullable_enum_prop", expected_type) + + +@with_generated_client_fixture( +""" +components: + schemas: + MyModel: + properties: + mustBeErnest: + const: Ernest + mustBeThirty: + const: 30 +""", +) +@with_generated_code_import(".models.MyModel") +class TestConst: + def test_valid_string(self, MyModel): + assert_model_decode_encode( + MyModel, + {"mustBeErnest": "Ernest"}, + MyModel(must_be_ernest="Ernest"), + ) + + def test_valid_int(self, MyModel): + assert_model_decode_encode( + MyModel, + {"mustBeThirty": 30}, + MyModel(must_be_thirty=30), + ) + + def test_invalid_string(self, MyModel): + with pytest.raises(ValueError): + MyModel.from_dict({"mustBeErnest": "Jack"}) + + def test_invalid_int(self, MyModel): + with pytest.raises(ValueError): + MyModel.from_dict({"mustBeThirty": 29}) + + +# The following tests of literal enums use basically the same specs as the tests above, but +# the "literal_enums" option is enabled in the test configuration. + +@with_generated_client_fixture( +""" +components: + schemas: + MyEnum: + type: string + enum: ["a", "A", "b"] + MyModel: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + inlineEnumProp: + type: string + enum: ["a", "b"] + MyModelWithRequired: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + required: ["enumProp"] +""", + config="literal_enums: true", +) +@with_generated_code_imports( + ".models.MyModel", + ".models.MyModelWithRequired", + ".types.Unset", +) +class TestStringLiteralEnum: + def test_enum_prop(self, MyModel): + assert_model_decode_encode(MyModel, {"enumProp": "a"}, MyModel(enum_prop="a")) + assert_model_decode_encode(MyModel, {"enumProp": "A"}, MyModel(enum_prop="A")) + assert_model_decode_encode(MyModel, {"inlineEnumProp": "a"}, MyModel(inline_enum_prop="a")) + + def test_type_hints(self, MyModel, MyModelWithRequired, Unset): + literal_type = Literal["a", "A", "b"] + optional_type = Union[Unset, literal_type] + assert_model_property_type_hint(MyModel, "enum_prop", optional_type) + assert_model_property_type_hint(MyModelWithRequired, "enum_prop", literal_type) + + def test_invalid_values(self, MyModel): + with pytest.raises(TypeError): + MyModel.from_dict({"enumProp": "c"}) + with pytest.raises(TypeError): + MyModel.from_dict({"enumProp": 2}) + + +@with_generated_client_fixture( +""" +components: + schemas: + MyEnum: + type: integer + enum: [2, 3, -4] + MyModel: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + inlineEnumProp: + type: string + enum: [2, 3] + MyModelWithRequired: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + required: ["enumProp"] +""", + config="literal_enums: true", +) +@with_generated_code_imports( + ".models.MyModel", + ".models.MyModelWithRequired", + ".types.Unset", +) +class TestIntLiteralEnum: + def test_enum_prop(self, MyModel): + assert_model_decode_encode(MyModel, {"enumProp": 2}, MyModel(enum_prop=2)) + assert_model_decode_encode(MyModel, {"enumProp": -4}, MyModel(enum_prop=-4)) + assert_model_decode_encode(MyModel, {"inlineEnumProp": 2}, MyModel(inline_enum_prop=2)) + + def test_type_hints(self, MyModel, MyModelWithRequired, Unset): + literal_type = Literal[2, 3, -4] + optional_type = Union[Unset, literal_type] + assert_model_property_type_hint(MyModel, "enum_prop", optional_type) + assert_model_property_type_hint(MyModelWithRequired, "enum_prop", literal_type) + + def test_invalid_values(self, MyModel): + with pytest.raises(TypeError): + MyModel.from_dict({"enumProp": 4}) + with pytest.raises(TypeError): + MyModel.from_dict({"enumProp": "a"}) + + +@with_generated_client_fixture( +""" +components: + schemas: + MyEnum: + type: string + enum: ["a", "A"] + MyEnumIncludingNull: + type: ["string", "null"] + enum: ["a", "b", null] + MyNullOnlyEnum: + enum: [null] + MyModel: + properties: + enumProp: {"$ref": "#/components/schemas/MyEnum"} + nullableEnumProp: + oneOf: + - {"$ref": "#/components/schemas/MyEnum"} + - type: "null" + enumIncludingNullProp: {"$ref": "#/components/schemas/MyEnumIncludingNull"} + nullOnlyEnumProp: {"$ref": "#/components/schemas/MyNullOnlyEnum"} +""", + config="literal_enums: true", +) +@with_generated_code_import(".models.MyModel") +class TestNullableLiteralEnum: + def test_nullable_enum_prop(self, MyModel): + assert_model_decode_encode(MyModel, {"nullableEnumProp": "B"}, MyModel(nullable_enum_prop="B")) + assert_model_decode_encode(MyModel, {"nullableEnumProp": None}, MyModel(nullable_enum_prop=None)) + assert_model_decode_encode(MyModel, {"enumIncludingNullProp": "a"}, MyModel(enum_including_null_prop="a")) + assert_model_decode_encode(MyModel, {"enumIncludingNullProp": None}, MyModel(enum_including_null_prop=None)) + assert_model_decode_encode(MyModel, {"nullOnlyEnumProp": None}, MyModel(null_only_enum_prop=None)) diff --git a/end_to_end_tests/generated_code_live_tests/test_literal_enums.py b/end_to_end_tests/generated_code_live_tests/test_literal_enums.py deleted file mode 100644 index 5606abeb8..000000000 --- a/end_to_end_tests/generated_code_live_tests/test_literal_enums.py +++ /dev/null @@ -1,150 +0,0 @@ -from typing import Any -import pytest -from end_to_end_tests.end_to_end_test_helpers import ( - assert_bad_schema_warning, - assert_model_decode_encode, - inline_spec_should_cause_warnings, - inline_spec_should_fail, - with_generated_code_import, - with_generated_client_fixture, -) - -# This is a separate file from test_enum_and_const.py because literal enums are not generated -# in the default configuration. - - -@with_generated_client_fixture( -""" -components: - schemas: - MyEnum: - type: string - enum: ["a", "A"] - MyIntEnum: - type: integer - enum: [2, 3] - MyEnumIncludingNull: - type: ["string", "null"] - enum: ["a", "b", null] - MyNullOnlyEnum: - enum: [null] - MyModel: - properties: - enumProp: {"$ref": "#/components/schemas/MyEnum"} - intEnumProp: {"$ref": "#/components/schemas/MyIntEnum"} - nullableEnumProp: - oneOf: - - {"$ref": "#/components/schemas/MyEnum"} - - type: "null" - enumIncludingNullProp: {"$ref": "#/components/schemas/MyEnumIncludingNull"} - nullOnlyEnumProp: {"$ref": "#/components/schemas/MyNullOnlyEnum"} - inlineEnumProp: - type: string - enum: ["a", "b"] -""", - config=""" -literal_enums: true -""", -) -@with_generated_code_import(".models.MyModel") -class TestLiteralEnums: - def test_enum_prop(self, MyModel): - assert_model_decode_encode(MyModel, {"enumProp": "a"}, MyModel(enum_prop="a")) - assert_model_decode_encode(MyModel, {"enumProp": "A"}, MyModel(enum_prop="A")) - assert_model_decode_encode(MyModel, {"intEnumProp": 2}, MyModel(int_enum_prop=2)) - assert_model_decode_encode(MyModel, {"inlineEnumProp": "a"}, MyModel(inline_enum_prop="a")) - - def test_enum_prop_type(self, MyModel): - assert MyModel.from_dict({"enumProp": "a"}).enum_prop.__class__ is str - assert MyModel.from_dict({"intEnumProp": 2}).int_enum_prop.__class__ is int - - def test_nullable_enum_prop(self, MyModel): - assert_model_decode_encode(MyModel, {"nullableEnumProp": "B"}, MyModel(nullable_enum_prop="B")) - assert_model_decode_encode(MyModel, {"nullableEnumProp": None}, MyModel(nullable_enum_prop=None)) - assert_model_decode_encode(MyModel, {"enumIncludingNullProp": "a"}, MyModel(enum_including_null_prop="a")) - assert_model_decode_encode(MyModel, {"enumIncludingNullProp": None}, MyModel(enum_including_null_prop=None)) - assert_model_decode_encode(MyModel, {"nullOnlyEnumProp": None}, MyModel(null_only_enum_prop=None)) - - def test_invalid_values(self, MyModel): - with pytest.raises(TypeError): - MyModel.from_dict({"enumProp": "c"}) - with pytest.raises(TypeError): - MyModel.from_dict({"enumProp": 2}) - with pytest.raises(TypeError): - MyModel.from_dict({"intEnumProp": 0}) - with pytest.raises(TypeError): - MyModel.from_dict({"intEnumProp": "a"}) - - -@with_generated_client_fixture( -""" -components: - schemas: - MyEnum: - type: string - enum: ["a", "A"] - MyModel: - properties: - enumProp: - allOf: - - $ref: "#/components/schemas/MyEnum" - default: A -""", - config="literal_enums: true", -) -@with_generated_code_import(".models.MyModel") -class TestLiteralEnumDefaults: - def test_default_value(self, MyModel): - assert MyModel().enum_prop == "A" - - -class TestLiteralEnumInvalidSchemas: - @pytest.fixture(scope="class") - def warnings(self): - return inline_spec_should_cause_warnings( -""" -components: - schemas: - WithBadDefaultValue: - enum: ["A"] - default: "B" - WithBadDefaultType: - enum: ["A"] - default: 123 - WithMixedTypes: - enum: ["A", 1] - WithUnsupportedType: - enum: [1.4, 1.5] - DefaultNotMatchingConst: - const: "aaa" - default: "bbb" -""", - config="literal_enums: true", - ) - - def test_enum_bad_default_value(self, warnings): - assert_bad_schema_warning(warnings, "WithBadDefaultValue", "Value B is not valid") - - def test_enum_bad_default_type(self, warnings): - assert_bad_schema_warning(warnings, "WithBadDefaultType", "Cannot convert 123 to enum") - - def test_enum_mixed_types(self, warnings): - assert_bad_schema_warning(warnings, "WithMixedTypes", "Enum values must all be the same type") - - def test_enum_unsupported_type(self, warnings): - assert_bad_schema_warning(warnings, "WithUnsupportedType", "Unsupported enum type") - - def test_const_default_not_matching(self, warnings): - assert_bad_schema_warning(warnings, "DefaultNotMatchingConst", "Invalid value for const") - - def test_enum_duplicate_values(self): - # This one currently causes a full generator failure rather than a warning - result = inline_spec_should_fail( -""" -components: - schemas: - WithDuplicateValues: - enum: ["x", "x"] -""" - ) - assert "Duplicate key X in enum" in str(result.exception) diff --git a/end_to_end_tests/generated_code_live_tests/test_property_encoding.py b/end_to_end_tests/generated_code_live_tests/test_properties.py similarity index 72% rename from end_to_end_tests/generated_code_live_tests/test_property_encoding.py rename to end_to_end_tests/generated_code_live_tests/test_properties.py index 94809545e..5fdc4bab9 100644 --- a/end_to_end_tests/generated_code_live_tests/test_property_encoding.py +++ b/end_to_end_tests/generated_code_live_tests/test_properties.py @@ -1,9 +1,10 @@ - import datetime +from typing import Any, ForwardRef, Union import uuid import pytest from end_to_end_tests.end_to_end_test_helpers import ( assert_model_decode_encode, + assert_model_property_type_hint, with_generated_client_fixture, with_generated_code_imports, ) @@ -28,7 +29,11 @@ req3: {"type": "string"} required: ["req3"] """) -@with_generated_code_imports(".models.MyModel", ".models.DerivedModel") +@with_generated_code_imports( + ".models.MyModel", + ".models.DerivedModel", + ".types.Unset", +) class TestRequiredAndOptionalProperties: def test_required_ok(self, MyModel, DerivedModel): assert_model_decode_encode( @@ -56,11 +61,15 @@ def test_required_and_optional(self, MyModel, DerivedModel): def test_required_missing(self, MyModel, DerivedModel): with pytest.raises(KeyError): - MyModel.from_dict({"requiredA": "a"}) + MyModel.from_dict({"req1": "a"}) with pytest.raises(KeyError): - MyModel.from_dict({"requiredB": "b"}) + MyModel.from_dict({"req2": "b"}) with pytest.raises(KeyError): - DerivedModel.from_dict({"requiredA": "a", "requiredB": "b"}) + DerivedModel.from_dict({"req1": "a", "req2": "b"}) + + def test_type_hints(self, MyModel, Unset): + assert_model_property_type_hint(MyModel, "req1", str) + assert_model_property_type_hint(MyModel, "opt", Union[str, Unset]) @with_generated_client_fixture( @@ -74,14 +83,17 @@ def test_required_missing(self, MyModel, DerivedModel): stringProp: {"type": "string"} numberProp: {"type": "number"} intProp: {"type": "integer"} - arrayOfStringsProp: {"type": "array", "items": {"type": "string"}} anyObjectProp: {"$ref": "#/components/schemas/AnyObject"} nullProp: {"type": "null"} anyProp: {} AnyObject: type: object """) -@with_generated_code_imports(".models.MyModel", ".models.AnyObject") +@with_generated_code_imports( + ".models.MyModel", + ".models.AnyObject", + ".types.Unset", +) class TestBasicModelProperties: def test_decode_encode(self, MyModel, AnyObject): json_data = { @@ -89,7 +101,6 @@ def test_decode_encode(self, MyModel, AnyObject): "stringProp": "a", "numberProp": 1.5, "intProp": 2, - "arrayOfStringsProp": ["b", "c"], "anyObjectProp": {"d": 3}, "nullProp": None, "anyProp": "e" @@ -104,7 +115,6 @@ def test_decode_encode(self, MyModel, AnyObject): string_prop="a", number_prop=1.5, int_prop=2, - array_of_strings_prop=["b", "c"], any_object_prop = expected_any_object, null_prop=None, any_prop="e", @@ -122,6 +132,15 @@ def test_decode_error_not_object(self, bad_data, MyModel): # very meaningful MyModel.from_dict(bad_data) + def test_type_hints(self, MyModel, Unset): + assert_model_property_type_hint(MyModel, "boolean_prop", Union[bool, Unset]) + assert_model_property_type_hint(MyModel, "string_prop", Union[str, Unset]) + assert_model_property_type_hint(MyModel, "number_prop", Union[float, Unset]) + assert_model_property_type_hint(MyModel, "int_prop", Union[int, Unset]) + assert_model_property_type_hint(MyModel, "any_object_prop", Union[ForwardRef("AnyObject"), Unset]) + assert_model_property_type_hint(MyModel, "null_prop", Union[None, Unset]) + assert_model_property_type_hint(MyModel, "any_prop", Union[Any, Unset]) + @with_generated_client_fixture( """ @@ -135,7 +154,10 @@ def test_decode_error_not_object(self, bad_data, MyModel): uuidProp: {"type": "string", "format": "uuid"} unknownFormatProp: {"type": "string", "format": "weird"} """) -@with_generated_code_imports(".models.MyModel") +@with_generated_code_imports( + ".models.MyModel", + ".types.Unset", +) class TestSpecialStringFormats: def test_date(self, MyModel): date_value = datetime.date.today() @@ -155,3 +177,9 @@ def test_uuid(self, MyModel): def test_unknown_format(self, MyModel): json_data = {"unknownFormatProp": "whatever"} assert_model_decode_encode(MyModel, json_data, MyModel(unknown_format_prop="whatever")) + + def test_type_hints(self, MyModel, Unset): + assert_model_property_type_hint(MyModel, "date_prop", Union[datetime.date, Unset]) + assert_model_property_type_hint(MyModel, "date_time_prop", Union[datetime.datetime, Unset]) + assert_model_property_type_hint(MyModel, "uuid_prop", Union[uuid.UUID, Unset]) + assert_model_property_type_hint(MyModel, "unknown_format_prop", Union[str, Unset]) diff --git a/end_to_end_tests/generated_code_live_tests/test_unions.py b/end_to_end_tests/generated_code_live_tests/test_unions.py index 10e29519f..f39eff4ac 100644 --- a/end_to_end_tests/generated_code_live_tests/test_unions.py +++ b/end_to_end_tests/generated_code_live_tests/test_unions.py @@ -1,14 +1,38 @@ - -import pytest +from typing import ForwardRef, Union from end_to_end_tests.end_to_end_test_helpers import ( - assert_bad_schema_warning, assert_model_decode_encode, - inline_spec_should_cause_warnings, + assert_model_property_type_hint, with_generated_client_fixture, with_generated_code_imports, ) +@with_generated_client_fixture( +""" +components: + schemas: + StringOrInt: + type: ["string", "integer"] + MyModel: + type: object + properties: + stringOrIntProp: + type: ["string", "integer"] +""" +) +@with_generated_code_imports( + ".models.MyModel", + ".types.Unset" +) +class TestSimpleTypeList: + def test_decode_encode(self, MyModel): + assert_model_decode_encode(MyModel, {"stringOrIntProp": "a"}, MyModel(string_or_int_prop="a")) + assert_model_decode_encode(MyModel, {"stringOrIntProp": 1}, MyModel(string_or_int_prop=1)) + + def test_type_hints(self, MyModel, Unset): + assert_model_property_type_hint(MyModel, "string_or_int_prop", Union[str, int, Unset]) + + @with_generated_client_fixture( """ components: @@ -23,34 +47,51 @@ properties: propB: { type: "string" } required: ["propB"] + ThingAOrB: + oneOf: + - $ref: "#/components/schemas/ThingA" + - $ref: "#/components/schemas/ThingB" ModelWithUnion: type: object properties: - thing: - oneOf: - - $ref: "#/components/schemas/ThingA" - - $ref: "#/components/schemas/ThingB" + thing: {"$ref": "#/components/schemas/ThingAOrB"} thingOrString: oneOf: - $ref: "#/components/schemas/ThingA" - type: string + ModelWithRequiredUnion: + type: object + properties: + thing: {"$ref": "#/components/schemas/ThingAOrB"} + required: ["thing"] ModelWithNestedUnion: type: object properties: thingOrValue: oneOf: - - oneOf: - - $ref: "#/components/schemas/ThingA" - - $ref: "#/components/schemas/ThingB" + - "$ref": "#/components/schemas/ThingAOrB" - oneOf: - type: string - type: number + ModelWithUnionOfOne: + type: object + properties: + thing: + oneOf: + - $ref: "#/components/schemas/ThingA" + requiredThing: + oneOf: + - $ref: "#/components/schemas/ThingA" + required: ["requiredThing"] """) @with_generated_code_imports( ".models.ThingA", ".models.ThingB", ".models.ModelWithUnion", + ".models.ModelWithRequiredUnion", ".models.ModelWithNestedUnion", + ".models.ModelWithUnionOfOne", + ".types.Unset" ) class TestOneOf: def test_disambiguate_objects_via_required_properties(self, ThingA, ThingB, ModelWithUnion): @@ -89,25 +130,20 @@ def test_disambiguate_nested_union(self, ThingA, ThingB, ModelWithNestedUnion): ModelWithNestedUnion(thing_or_value=3), ) - -class TestUnionInvalidSchemas: - @pytest.fixture(scope="class") - def warnings(self): - return inline_spec_should_cause_warnings( -""" -components: - schemas: - UnionWithInvalidReference: - anyOf: - - $ref: "#/components/schemas/DoesntExist" - UnionWithInvalidDefault: - type: ["number", "integer"] - default: aaa -""" + def test_type_hints(self, ModelWithUnion, ModelWithRequiredUnion, ModelWithUnionOfOne, ThingA, Unset): + assert_model_property_type_hint( + ModelWithUnion, + "thing", + Union[ForwardRef("ThingA"), ForwardRef("ThingB"), Unset], + ) + assert_model_property_type_hint( + ModelWithRequiredUnion, + "thing", + Union[ForwardRef("ThingA"), ForwardRef("ThingB")], + ) + assert_model_property_type_hint( + ModelWithUnionOfOne, "thing", Union[ForwardRef("ThingA"), Unset] + ) + assert_model_property_type_hint( + ModelWithUnionOfOne, "required_thing", "ThingA" ) - - def test_invalid_reference(self, warnings): - assert_bad_schema_warning(warnings, "UnionWithInvalidReference", "Could not find reference") - - def test_invalid_default(self, warnings): - assert_bad_schema_warning(warnings, "UnionWithInvalidDefault", "Invalid int value: aaa") diff --git a/end_to_end_tests/generator_errors_and_warnings/README.md b/end_to_end_tests/generator_errors_and_warnings/README.md new file mode 100644 index 000000000..443cb2a69 --- /dev/null +++ b/end_to_end_tests/generator_errors_and_warnings/README.md @@ -0,0 +1,14 @@ +## The `generator_errors_and_warnings` module + +These are end-to-end tests which run the code generator command with an invalid API spec and make assertions about the output. Some of these invalid conditions are expected to only produce warnings about the affected schemas, while others are expected to produce fatal errors that terminate the generator. + +Unlike the tests in `generated_code_live_tests`, these do not import or execute the generated code, since the generator does not produce classes for invalid schemas. + +For warning conditions, each test class follows this pattern: + +- Call `inline_spec_should_cause_warnings`, providing an inline API spec (JSON or YAML). If there are several test methods in the class using the same spec, use a fixture with scope "class" so the generator is only run once. +- Use `assert_bad_schema_warning` to parse the output and check for a specific warning message for a specific schema name. + +Or, for fatal error conditions: + +- Call `inline_spec_should_fail`, providing an inline API spec (JSON or YAML). diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_arrays.py b/end_to_end_tests/generator_errors_and_warnings/test_invalid_arrays.py new file mode 100644 index 000000000..cb384df63 --- /dev/null +++ b/end_to_end_tests/generator_errors_and_warnings/test_invalid_arrays.py @@ -0,0 +1,28 @@ +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_bad_schema_warning, + inline_spec_should_cause_warnings, +) + + +class TestArrayInvalidSchemas: + @pytest.fixture(scope="class") + def warnings(self): + return inline_spec_should_cause_warnings( +""" +components: + schemas: + ArrayWithNoItems: + type: array + ArrayWithInvalidItemsRef: + type: array + items: + $ref: "#/components/schemas/DoesntExist" +""" + ) + + def test_no_items(self, warnings): + assert_bad_schema_warning(warnings, "ArrayWithNoItems", "must have items or prefixItems defined") + + def test_invalid_items_ref(self, warnings): + assert_bad_schema_warning(warnings, "ArrayWithInvalidItemsRef", "invalid data in items of array") diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_defaults.py b/end_to_end_tests/generator_errors_and_warnings/test_invalid_defaults.py new file mode 100644 index 000000000..4f1516eea --- /dev/null +++ b/end_to_end_tests/generator_errors_and_warnings/test_invalid_defaults.py @@ -0,0 +1,92 @@ +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_bad_schema_warning, + inline_spec_should_cause_warnings, +) + + +class TestInvalidDefaultValues: + @pytest.fixture(scope="class") + def warnings(self): + return inline_spec_should_cause_warnings( +""" +components: + schemas: + WithBadBoolean: + properties: + badBoolean: {"type": "boolean", "default": "not a boolean"} + WithBadIntAsString: + properties: + badInt: {"type": "integer", "default": "not an int"} + WithBadIntAsOther: + properties: + badInt: {"type": "integer", "default": true} + WithBadFloatAsString: + properties: + badInt: {"type": "number", "default": "not a number"} + WithBadFloatAsOther: + properties: + badInt: {"type": "number", "default": true} + WithBadDateAsString: + properties: + badDate: {"type": "string", "format": "date", "default": "xxx"} + WithBadDateAsOther: + properties: + badDate: {"type": "string", "format": "date", "default": 3} + WithBadDateTimeAsString: + properties: + badDate: {"type": "string", "format": "date-time", "default": "xxx"} + WithBadDateTimeAsOther: + properties: + badDate: {"type": "string", "format": "date-time", "default": 3} + WithBadUuidAsString: + properties: + badUuid: {"type": "string", "format": "uuid", "default": "xxx"} + WithBadUuidAsOther: + properties: + badUuid: {"type": "string", "format": "uuid", "default": 3} + WithBadEnum: + properties: + badEnum: {"type": "string", "enum": ["a", "b"], "default": "x"} + GoodEnum: + type: string + enum: ["a", "b"] + OverriddenEnumWithBadDefault: + properties: + badEnum: + allOf: + - $ref: "#/components/schemas/GoodEnum" + default: "x" + UnionWithNoValidDefault: + properties: + badBoolOrInt: + anyOf: + - type: boolean + - type: integer + default: "xxx" +""" + ) + # Note, the null/None type, and binary strings (files), are not covered here due to a known bug: + # https://github.com/openapi-generators/openapi-python-client/issues/1162 + + @pytest.mark.parametrize( + ("model_name", "message"), + [ + ("WithBadBoolean", "Invalid boolean value"), + ("WithBadIntAsString", "Invalid int value"), + ("WithBadIntAsOther", "Invalid int value"), + ("WithBadFloatAsString", "Invalid float value"), + ("WithBadFloatAsOther", "Cannot convert True to a float"), + ("WithBadDateAsString", "Invalid date"), + ("WithBadDateAsOther", "Cannot convert 3 to a date"), + ("WithBadDateTimeAsString", "Invalid datetime"), + ("WithBadDateTimeAsOther", "Cannot convert 3 to a datetime"), + ("WithBadUuidAsString", "Invalid UUID value"), + ("WithBadUuidAsOther", "Invalid UUID value"), + ("WithBadEnum", "Value x is not valid for enum"), + ("OverriddenEnumWithBadDefault", "Value x is not valid for enum"), + ("UnionWithNoValidDefault", "Invalid int value"), + ] + ) + def test_bad_default_warning(self, model_name, message, warnings): + assert_bad_schema_warning(warnings, model_name, message) diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_enums_and_consts.py b/end_to_end_tests/generator_errors_and_warnings/test_invalid_enums_and_consts.py new file mode 100644 index 000000000..88facac8c --- /dev/null +++ b/end_to_end_tests/generator_errors_and_warnings/test_invalid_enums_and_consts.py @@ -0,0 +1,134 @@ +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_bad_schema_warning, + inline_spec_should_cause_warnings, + inline_spec_should_fail, +) + +class TestEnumAndConstInvalidSchemas: + @pytest.fixture(scope="class") + def warnings(self): + return inline_spec_should_cause_warnings( +""" +components: + schemas: + WithBadDefaultValue: + enum: ["A"] + default: "B" + WithBadDefaultType: + enum: ["A"] + default: 123 + WithMixedTypes: + enum: ["A", 1] + WithUnsupportedType: + enum: [1.4, 1.5] + DefaultNotMatchingConst: + const: "aaa" + default: "bbb" + WithConflictingInlineNames: + type: object + properties: + "12": + enum: ["a", "b"] + WithConflictingInlineNames1: + type: object + properties: + "2": + enum: ["c", "d"] +""" + ) + + def test_enum_bad_default_value(self, warnings): + assert_bad_schema_warning(warnings, "WithBadDefaultValue", "Value B is not valid") + + def test_enum_bad_default_type(self, warnings): + assert_bad_schema_warning(warnings, "WithBadDefaultType", "Cannot convert 123 to enum") + + def test_enum_mixed_types(self, warnings): + assert_bad_schema_warning(warnings, "WithMixedTypes", "Enum values must all be the same type") + + def test_enum_unsupported_type(self, warnings): + assert_bad_schema_warning(warnings, "WithUnsupportedType", "Unsupported enum type") + + def test_const_default_not_matching(self, warnings): + assert_bad_schema_warning(warnings, "DefaultNotMatchingConst", "Invalid value for const") + + def test_conflicting_inline_class_names(self, warnings): + assert "Found conflicting enums named WithConflictingInlineNames12 with incompatible values" in warnings + + def test_enum_duplicate_values(self): + # This one currently causes a full generator failure rather than a warning + result = inline_spec_should_fail( +""" +components: + schemas: + WithDuplicateValues: + enum: ["x", "x"] +""" + ) + assert "Duplicate key X in enum" in str(result.exception) + + +class TestLiteralEnumInvalidSchemas: + @pytest.fixture(scope="class") + def warnings(self): + return inline_spec_should_cause_warnings( +""" +components: + schemas: + WithBadDefaultValue: + enum: ["A"] + default: "B" + WithBadDefaultType: + enum: ["A"] + default: 123 + WithMixedTypes: + enum: ["A", 1] + WithUnsupportedType: + enum: [1.4, 1.5] + DefaultNotMatchingConst: + const: "aaa" + default: "bbb" + WithConflictingInlineNames: + type: object + properties: + "12": + enum: ["a", "b"] + WithConflictingInlineNames1: + type: object + properties: + "2": + enum: ["c", "d"] +""", + config="literal_enums: true", + ) + + def test_literal_enum_bad_default_value(self, warnings): + assert_bad_schema_warning(warnings, "WithBadDefaultValue", "Value B is not valid") + + def test_literal_enum_bad_default_type(self, warnings): + assert_bad_schema_warning(warnings, "WithBadDefaultType", "Cannot convert 123 to enum") + + def test_literal_enum_mixed_types(self, warnings): + assert_bad_schema_warning(warnings, "WithMixedTypes", "Enum values must all be the same type") + + def test_literal_enum_unsupported_type(self, warnings): + assert_bad_schema_warning(warnings, "WithUnsupportedType", "Unsupported enum type") + + def test_const_default_not_matching(self, warnings): + assert_bad_schema_warning(warnings, "DefaultNotMatchingConst", "Invalid value for const") + + def test_conflicting_inline_literal_enum_names(self, warnings): + assert "Found conflicting enums named WithConflictingInlineNames12 with incompatible values" in warnings + + def test_literal_enum_duplicate_values(self): + # This one currently causes a full generator failure rather than a warning + result = inline_spec_should_fail( +""" +components: + schemas: + WithDuplicateValues: + enum: ["x", "x"] +""" + ) + assert "Duplicate key X in enum" in str(result.exception) diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_spec_format.py b/end_to_end_tests/generator_errors_and_warnings/test_invalid_spec_format.py new file mode 100644 index 000000000..fcd6c6b9c --- /dev/null +++ b/end_to_end_tests/generator_errors_and_warnings/test_invalid_spec_format.py @@ -0,0 +1,75 @@ +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_bad_schema_warning, + inline_spec_should_cause_warnings, + inline_spec_should_fail, +) + + +class TestInvalidSpecFormats: + def test_missing_openapi_version(self): + result = inline_spec_should_fail( +""" +info: + title: My API + version: "1.0" +paths: {} +""", + add_missing_sections=False, + ) + for text in ["Failed to parse OpenAPI document", "1 validation error", "openapi"]: + assert text in result.output + + def test_missing_title(self): + result = inline_spec_should_fail( +""" +info: + version: "1.0" +openapi: "3.1.0" +paths: {} +""", + add_missing_sections=False, + ) + for text in ["Failed to parse OpenAPI document", "1 validation error", "title"]: + assert text in result.output + + def test_missing_version(self): + result = inline_spec_should_fail( +""" +info: + title: My API +openapi: "3.1.0" +paths: {} +""", + add_missing_sections=False, + ) + for text in ["Failed to parse OpenAPI document", "1 validation error", "version"]: + assert text in result.output + + def test_missing_paths(self): + result = inline_spec_should_fail( +""" +info: + title: My API + version: "1.0" +openapi: "3.1.0" +""", + add_missing_sections=False, + ) + for text in ["Failed to parse OpenAPI document", "1 validation error", "paths"]: + assert text in result.output + + def test_swagger_unsupported(self): + result = inline_spec_should_fail( +""" +swagger: "2.0" +info: + title: My API + version: "1.0" +openapi: "3.1" +paths: {} +components: {} +""", + add_missing_sections=False, + ) + assert "You may be trying to use a Swagger document; this is not supported by this project." in result.output diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py b/end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py new file mode 100644 index 000000000..03539806e --- /dev/null +++ b/end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py @@ -0,0 +1,28 @@ +import pytest +from end_to_end_tests.end_to_end_test_helpers import ( + assert_bad_schema_warning, + inline_spec_should_cause_warnings, +) + + +class TestUnionInvalidSchemas: + @pytest.fixture(scope="class") + def warnings(self): + return inline_spec_should_cause_warnings( +""" +components: + schemas: + UnionWithInvalidReference: + anyOf: + - $ref: "#/components/schemas/DoesntExist" + UnionWithInvalidDefault: + type: ["number", "integer"] + default: aaa +""" + ) + + def test_invalid_reference(self, warnings): + assert_bad_schema_warning(warnings, "UnionWithInvalidReference", "Could not find reference") + + def test_invalid_default(self, warnings): + assert_bad_schema_warning(warnings, "UnionWithInvalidDefault", "Invalid int value: aaa") diff --git a/end_to_end_tests/test_end_to_end.py b/end_to_end_tests/test_end_to_end.py index 811789ed7..9780181a0 100644 --- a/end_to_end_tests/test_end_to_end.py +++ b/end_to_end_tests/test_end_to_end.py @@ -86,8 +86,9 @@ def run_e2e_test( golden_record_path: str = "golden-record", output_path: str = "my-test-api-client", expected_missing: Optional[Set[str]] = None, + specify_output_path_explicitly: bool = True, ) -> Result: - with generate_client(openapi_document, extra_args, output_path) as g: + with generate_client(openapi_document, extra_args, output_path, specify_output_path_explicitly=specify_output_path_explicitly) as g: gr_path = Path(__file__).parent / golden_record_path expected_differences = expected_differences or {} @@ -165,6 +166,7 @@ def test_none_meta(): golden_record_path="test-3-1-golden-record/test_3_1_features_client", output_path="test_3_1_features_client", expected_missing={"py.typed"}, + specify_output_path_explicitly=False, ) diff --git a/pyproject.toml b/pyproject.toml index 82d2fb6e5..bea5a38e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,7 +67,7 @@ ignore = ["E501", "PLR0913", "PLR2004"] "tests/*" = ["PLR2004"] [tool.coverage.run] -omit = ["openapi_python_client/__main__.py", "openapi_python_client/templates/*"] +omit = ["openapi_python_client/__main__.py", "openapi_python_client/templates/*", "end_to_end_tests/*", "integration_tests/*", "tests/*"] [tool.mypy] plugins = ["pydantic.mypy"] @@ -119,7 +119,7 @@ re = {composite = ["regen_e2e", "e2e --snapshot-update"]} regen_e2e = "python -m end_to_end_tests.regen_golden_record" [tool.pdm.scripts.test] -cmd = "pytest tests end_to_end_tests/test_end_to_end.py --basetemp=tests/tmp" +cmd = "pytest tests end_to_end_tests/test_end_to_end.py end_to_end_tests/generated_code_live_tests --basetemp=tests/tmp" [tool.pdm.scripts.test.env] "TEST_RELATIVE" = "true" diff --git a/tests/test_parser/test_openapi.py b/tests/test_parser/test_openapi.py index 6eeadcd78..18475b1b9 100644 --- a/tests/test_parser/test_openapi.py +++ b/tests/test_parser/test_openapi.py @@ -4,7 +4,6 @@ import pytest import openapi_python_client.schema as oai -from openapi_python_client import GeneratorError from openapi_python_client.parser.errors import ParseError from openapi_python_client.parser.openapi import Endpoint, EndpointCollection from openapi_python_client.parser.properties import IntProperty, Parameters, Schemas @@ -13,50 +12,6 @@ MODULE_NAME = "openapi_python_client.parser.openapi" -class TestGeneratorData: - def test_from_dict_invalid_schema(self, mocker): - Schemas = mocker.patch(f"{MODULE_NAME}.Schemas") - config = mocker.MagicMock() - - in_dict = {} - - from openapi_python_client.parser.openapi import GeneratorData - - generator_data = GeneratorData.from_dict(in_dict, config=config) - - assert isinstance(generator_data, GeneratorError) - assert generator_data.header == "Failed to parse OpenAPI document" - keywords = ["3 validation errors for OpenAPI", "info", "paths", "openapi", "Field required"] - assert generator_data.detail and all(keyword in generator_data.detail for keyword in keywords) - - Schemas.build.assert_not_called() - Schemas.assert_not_called() - - def test_swagger_document_invalid_schema(self, mocker): - Schemas = mocker.patch(f"{MODULE_NAME}.Schemas") - config = mocker.MagicMock() - - in_dict = {"swagger": "2.0"} - - from openapi_python_client.parser.openapi import GeneratorData - - generator_data = GeneratorData.from_dict(in_dict, config=config) - - assert isinstance(generator_data, GeneratorError) - assert generator_data.header == "Failed to parse OpenAPI document" - keywords = [ - "You may be trying to use a Swagger document; this is not supported by this project.", - "info", - "paths", - "openapi", - "Field required", - ] - assert generator_data.detail and all(keyword in generator_data.detail for keyword in keywords) - - Schemas.build.assert_not_called() - Schemas.assert_not_called() - - class TestEndpoint: def make_endpoint(self): from openapi_python_client.parser.openapi import Endpoint diff --git a/tests/test_parser/test_properties/test_enum_property.py b/tests/test_parser/test_properties/test_enum_property.py deleted file mode 100644 index ab3c752c7..000000000 --- a/tests/test_parser/test_properties/test_enum_property.py +++ /dev/null @@ -1,36 +0,0 @@ -from typing import Type, Union - -import pytest - -import openapi_python_client.schema as oai -from openapi_python_client import Config -from openapi_python_client.parser.properties import LiteralEnumProperty, Schemas -from openapi_python_client.parser.properties.enum_property import EnumProperty - -PropertyClass = Union[Type[EnumProperty], Type[LiteralEnumProperty]] - - -@pytest.fixture(params=[EnumProperty, LiteralEnumProperty]) -def property_class(request) -> PropertyClass: - return request.param - - -def test_conflict(config: Config, property_class: PropertyClass) -> None: - # It'd be nice to move this test into generated_code_live_tests, but it's unclear - # how to represent this error condition in an actual API spec. - schemas = Schemas() - - _, schemas = property_class.build( - data=oai.Schema(enum=["a"]), name="Existing", required=True, schemas=schemas, parent_name="", config=config - ) - err, new_schemas = property_class.build( - data=oai.Schema(enum=["a", "b"]), - name="Existing", - required=True, - schemas=schemas, - parent_name="", - config=config, - ) - - assert schemas == new_schemas - assert err.detail == "Found conflicting enums named Existing with incompatible values." diff --git a/tests/test_parser/test_properties/test_init.py b/tests/test_parser/test_properties/test_init.py index 164377167..1af6342ad 100644 --- a/tests/test_parser/test_properties/test_init.py +++ b/tests/test_parser/test_properties/test_init.py @@ -1,86 +1,18 @@ -from unittest.mock import MagicMock, call +from unittest.mock import call -import attr import pytest import openapi_python_client.schema as oai from openapi_python_client.parser.errors import ParameterError, PropertyError from openapi_python_client.parser.properties import ( - ListProperty, ReferencePath, Schemas, - StringProperty, - UnionProperty, ) -from openapi_python_client.parser.properties.protocol import ModelProperty -from openapi_python_client.parser.properties.schemas import Class -from openapi_python_client.schema import DataType from openapi_python_client.utils import ClassName, PythonIdentifier MODULE_NAME = "openapi_python_client.parser.properties" -class TestStringProperty: - def test_is_base_type(self, string_property_factory): - assert string_property_factory().is_base_type is True - - @pytest.mark.parametrize( - "required, expected", - ( - (True, "str"), - (False, "Union[Unset, str]"), - ), - ) - def test_get_type_string(self, string_property_factory, required, expected): - p = string_property_factory(required=required) - - assert p.get_type_string() == expected - - -class TestDateTimeProperty: - def test_is_base_type(self, date_time_property_factory): - assert date_time_property_factory().is_base_type is True - - @pytest.mark.parametrize("required", (True, False)) - def test_get_imports(self, date_time_property_factory, required): - p = date_time_property_factory(required=required) - - expected = { - "import datetime", - "from typing import cast", - "from dateutil.parser import isoparse", - } - if not required: - expected |= { - "from typing import Union", - "from ...types import UNSET, Unset", - } - - assert p.get_imports(prefix="...") == expected - - -class TestDateProperty: - def test_is_base_type(self, date_property_factory): - assert date_property_factory().is_base_type is True - - @pytest.mark.parametrize("required", (True, False)) - def test_get_imports(self, date_property_factory, required): - p = date_property_factory(required=required) - - expected = { - "import datetime", - "from typing import cast", - "from dateutil.parser import isoparse", - } - if not required: - expected |= { - "from typing import Union", - "from ...types import UNSET, Unset", - } - - assert p.get_imports(prefix="...") == expected - - class TestFileProperty: def test_is_base_type(self, file_property_factory): assert file_property_factory().is_base_type is True @@ -102,117 +34,6 @@ def test_get_imports(self, file_property_factory, required): assert p.get_imports(prefix="...") == expected -class TestNoneProperty: - def test_is_base_type(self, none_property_factory): - assert none_property_factory().is_base_type is True - - -class TestBooleanProperty: - def test_is_base_type(self, boolean_property_factory): - assert boolean_property_factory().is_base_type is True - - -class TestAnyProperty: - def test_is_base_type(self, any_property_factory): - assert any_property_factory().is_base_type is True - - -class TestIntProperty: - def test_is_base_type(self, int_property_factory): - assert int_property_factory().is_base_type is True - - -class TestListProperty: - def test_is_base_type(self, list_property_factory): - assert list_property_factory().is_base_type is False - - @pytest.mark.parametrize("quoted", (True, False)) - def test_get_base_json_type_string_base_inner(self, list_property_factory, quoted): - p = list_property_factory() - assert p.get_base_json_type_string(quoted=quoted) == "List[str]" - - @pytest.mark.parametrize("quoted", (True, False)) - def test_get_base_json_type_string_model_inner(self, list_property_factory, model_property_factory, quoted): - m = model_property_factory() - p = list_property_factory(inner_property=m) - assert p.get_base_json_type_string(quoted=quoted) == "List[Dict[str, Any]]" - - def test_get_lazy_import_base_inner(self, list_property_factory): - p = list_property_factory() - assert p.get_lazy_imports(prefix="..") == set() - - def test_get_lazy_import_model_inner(self, list_property_factory, model_property_factory): - m = model_property_factory() - p = list_property_factory(inner_property=m) - assert p.get_lazy_imports(prefix="..") == {"from ..models.my_module import MyClass"} - - @pytest.mark.parametrize( - "required, expected", - ( - (True, "List[str]"), - (False, "Union[Unset, List[str]]"), - ), - ) - def test_get_type_string_base_inner(self, list_property_factory, required, expected): - p = list_property_factory(required=required) - - assert p.get_type_string() == expected - - @pytest.mark.parametrize( - "required, expected", - ( - (True, "List['MyClass']"), - (False, "Union[Unset, List['MyClass']]"), - ), - ) - def test_get_type_string_model_inner(self, list_property_factory, model_property_factory, required, expected): - m = model_property_factory() - p = list_property_factory(required=required, inner_property=m) - - assert p.get_type_string() == expected - - @pytest.mark.parametrize( - "quoted,expected", - [ - (False, "List[str]"), - (True, "List[str]"), - ], - ) - def test_get_base_type_string_base_inner(self, list_property_factory, quoted, expected): - p = list_property_factory() - assert p.get_base_type_string(quoted=quoted) == expected - - @pytest.mark.parametrize( - "quoted,expected", - [ - (False, "List['MyClass']"), - (True, "List['MyClass']"), - ], - ) - def test_get_base_type_string_model_inner(self, list_property_factory, model_property_factory, quoted, expected): - m = model_property_factory() - p = list_property_factory(inner_property=m) - assert p.get_base_type_string(quoted=quoted) == expected - - @pytest.mark.parametrize("required", (True, False)) - def test_get_type_imports(self, list_property_factory, date_time_property_factory, required): - inner_property = date_time_property_factory() - p = list_property_factory(inner_property=inner_property, required=required) - expected = { - "import datetime", - "from typing import cast", - "from dateutil.parser import isoparse", - "from typing import cast, List", - } - if not required: - expected |= { - "from typing import Union", - "from ...types import UNSET, Unset", - } - - assert p.get_imports(prefix="...") == expected - - class TestUnionProperty: def test_is_base_type(self, union_property_factory): assert union_property_factory().is_base_type is False @@ -314,104 +135,6 @@ def test_get_type_imports(self, union_property_factory, date_time_property_facto assert p.get_imports(prefix="...") == expected -class TestEnumProperty: - def test_is_base_type(self, enum_property_factory): - assert enum_property_factory().is_base_type is True - - @pytest.mark.parametrize( - "required, expected", - ( - (False, "Union[Unset, {}]"), - (True, "{}"), - ), - ) - def test_get_type_string(self, mocker, enum_property_factory, required, expected): - fake_class = mocker.MagicMock() - fake_class.name = "MyTestEnum" - - p = enum_property_factory(class_info=fake_class, required=required) - - assert p.get_type_string() == expected.format(fake_class.name) - assert p.get_type_string(no_optional=True) == fake_class.name - assert p.get_type_string(json=True) == expected.format("str") - - def test_get_imports(self, mocker, enum_property_factory): - fake_class = mocker.MagicMock(module_name="my_test_enum") - fake_class.name = "MyTestEnum" - prefix = "..." - - enum_property = enum_property_factory(class_info=fake_class, required=False) - - assert enum_property.get_imports(prefix=prefix) == { - f"from {prefix}models.{fake_class.module_name} import {fake_class.name}", - "from typing import Union", # Makes sure unset is handled via base class - "from ...types import UNSET, Unset", - } - - def test_values_from_list(self): - from openapi_python_client.parser.properties import EnumProperty - - data = ["abc", "123", "a23", "1bc", 4, -3, "a Thing WIth spaces", ""] - - result = EnumProperty.values_from_list(data, Class("ClassName", "module_name")) - - assert result == { - "ABC": "abc", - "VALUE_1": "123", - "A23": "a23", - "VALUE_3": "1bc", - "VALUE_4": 4, - "VALUE_NEGATIVE_3": -3, - "A_THING_WITH_SPACES": "a Thing WIth spaces", - "VALUE_7": "", - } - - def test_values_from_list_duplicate(self): - from openapi_python_client.parser.properties import EnumProperty - - data = ["abc", "123", "a23", "abc"] - - with pytest.raises(ValueError): - EnumProperty.values_from_list(data, Class("ClassName", "module_name")) - - -class TestLiteralEnumProperty: - def test_is_base_type(self, literal_enum_property_factory): - assert literal_enum_property_factory().is_base_type is True - - @pytest.mark.parametrize( - "required, expected", - ( - (False, "Union[Unset, {}]"), - (True, "{}"), - ), - ) - def test_get_type_string(self, mocker, literal_enum_property_factory, required, expected): - fake_class = mocker.MagicMock() - fake_class.name = "MyTestEnum" - - p = literal_enum_property_factory(class_info=fake_class, required=required) - - assert p.get_type_string() == expected.format(fake_class.name) - assert p.get_type_string(no_optional=True) == fake_class.name - assert p.get_type_string(json=True) == expected.format("str") - - def test_get_imports(self, mocker, literal_enum_property_factory): - fake_class = mocker.MagicMock(module_name="my_test_enum") - fake_class.name = "MyTestEnum" - prefix = "..." - - literal_enum_property = literal_enum_property_factory(class_info=fake_class, required=False) - - assert literal_enum_property.get_imports(prefix=prefix) == { - "from typing import cast", - f"from {prefix}models.{fake_class.module_name} import {fake_class.name}", - f"from {prefix}models.{fake_class.module_name} import check_my_test_enum", - "from typing import Union", # Makes sure unset is handled via base class - "from ...types import UNSET, Unset", - } - - class TestPropertyFromData: def test_property_from_data_ref_model(self, model_property_factory, config): from openapi_python_client.parser.properties import Class, Schemas, property_from_data @@ -496,99 +219,6 @@ def test_property_from_data_invalid_ref(self, mocker): assert prop == PropertyError(data=data, detail="bad stuff") assert schemas == new_schemas - def test_property_from_data_array(self, config): - from openapi_python_client.parser.properties import Schemas, property_from_data - - name = "a_list_prop" - required = True - data = oai.Schema( - type=DataType.ARRAY, - items=oai.Schema(type=DataType.STRING), - ) - schemas = Schemas() - - response = property_from_data( - name=name, - required=required, - data=data, - schemas=schemas, - parent_name="parent", - config=config, - )[0] - - assert isinstance(response, ListProperty) - assert isinstance(response.inner_property, StringProperty) - - def test_property_from_data_union(self, config): - from openapi_python_client.parser.properties import Schemas, property_from_data - - name = "union_prop" - required = True - data = oai.Schema( - anyOf=[oai.Schema(type=DataType.NUMBER)], - oneOf=[ - oai.Schema(type=DataType.INTEGER), - ], - ) - schemas = Schemas() - - response = property_from_data( - name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=config - )[0] - - assert isinstance(response, UnionProperty) - assert len(response.inner_properties) == 2 - - def test_property_from_data_list_of_types(self, config): - from openapi_python_client.parser.properties import Schemas, property_from_data - - name = "union_prop" - required = True - data = oai.Schema( - type=[DataType.NUMBER, DataType.NULL], - ) - schemas = Schemas() - - response = property_from_data( - name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=config - )[0] - - assert isinstance(response, UnionProperty) - assert len(response.inner_properties) == 2 - - def test_property_from_data_union_of_one_element(self, model_property_factory, config): - from openapi_python_client.parser.properties import Schemas, property_from_data - - name = "new_name" - required = False - class_name = "MyModel" - existing_model: ModelProperty = model_property_factory() - schemas = Schemas(classes_by_reference={f"/{class_name}": existing_model}) - - data = oai.Schema.model_construct( - allOf=[oai.Reference.model_construct(ref=f"#/{class_name}")], - ) - - prop, schemas = property_from_data( - name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=config - ) - - assert prop == attr.evolve(existing_model, name=name, required=required, python_name=PythonIdentifier(name, "")) - - def test_property_from_data_no_valid_props_in_data(self, any_property_factory): - from openapi_python_client.parser.properties import Schemas, property_from_data - - schemas = Schemas() - data = oai.Schema() - name = "blah" - - prop, new_schemas = property_from_data( - name=name, required=True, data=data, schemas=schemas, parent_name="parent", config=MagicMock() - ) - - assert prop == any_property_factory(name=name, required=True, default=None) - assert new_schemas == schemas - class TestStringBasedProperty: def test__string_based_property_binary_format(self, file_property_factory, config): diff --git a/tests/test_parser/test_properties/test_list_property.py b/tests/test_parser/test_properties/test_list_property.py deleted file mode 100644 index 60fb0a35d..000000000 --- a/tests/test_parser/test_properties/test_list_property.py +++ /dev/null @@ -1,178 +0,0 @@ -import attr - -import openapi_python_client.schema as oai -from openapi_python_client.parser.errors import ParseError, PropertyError -from openapi_python_client.parser.properties import ListProperty -from openapi_python_client.parser.properties.schemas import ReferencePath -from openapi_python_client.schema import DataType -from openapi_python_client.utils import ClassName - - -def test_build_list_property_no_items(config): - from openapi_python_client.parser import properties - - name = "list_prop" - required = True - data = oai.Schema(type=DataType.ARRAY) - schemas = properties.Schemas() - - p, new_schemas = ListProperty.build( - name=name, - required=required, - data=data, - schemas=schemas, - parent_name="parent", - config=config, - process_properties=True, - roots={ReferencePath("root")}, - ) - - assert p == PropertyError(data=data, detail="type array must have items or prefixItems defined") - assert new_schemas == schemas - - -def test_build_list_property_invalid_items(config): - from openapi_python_client.parser import properties - - name = "name" - required = True - data = oai.Schema( - type=DataType.ARRAY, - items=oai.Reference.model_validate({"$ref": "doesnt exist"}), - ) - schemas = properties.Schemas(errors=[ParseError("error")]) - process_properties = False - roots: set[ReferencePath | ClassName] = {ReferencePath("root")} - - p, new_schemas = ListProperty.build( - name=name, - required=required, - data=data, - schemas=attr.evolve(schemas), - parent_name="parent", - config=config, - roots=roots, - process_properties=process_properties, - ) - - assert isinstance(p, PropertyError) - assert p.data == data.items - assert p.header.startswith(f"invalid data in items of array {name}") - assert new_schemas == schemas - - -def test_build_list_property(any_property_factory, config): - from openapi_python_client.parser import properties - - name = "prop" - data = oai.Schema( - type=DataType.ARRAY, - items=oai.Schema(), - ) - schemas = properties.Schemas(errors=[ParseError("error")]) - - p, new_schemas = ListProperty.build( - name=name, - required=True, - data=data, - schemas=schemas, - parent_name="parent", - config=config, - roots={ReferencePath("root")}, - process_properties=True, - ) - - assert isinstance(p, properties.ListProperty) - assert p.inner_property == any_property_factory(name=f"{name}_item") - assert new_schemas == schemas - - -def test_build_list_property_single_prefix_item(any_property_factory, config): - from openapi_python_client.parser import properties - - name = "prop" - data = oai.Schema( - type=DataType.ARRAY, - prefixItems=[oai.Schema()], - ) - schemas = properties.Schemas(errors=[ParseError("error")]) - - p, new_schemas = ListProperty.build( - name=name, - required=True, - data=data, - schemas=schemas, - parent_name="parent", - config=config, - roots={ReferencePath("root")}, - process_properties=True, - ) - - assert isinstance(p, properties.ListProperty) - assert p.inner_property == any_property_factory(name=f"{name}_item") - assert new_schemas == schemas - - -def test_build_list_property_items_and_prefix_items( - union_property_factory, - string_property_factory, - none_property_factory, - int_property_factory, - config, -): - from openapi_python_client.parser import properties - - name = "list_prop" - required = True - data = oai.Schema( - type=DataType.ARRAY, - items=oai.Schema(type=DataType.INTEGER), - prefixItems=[oai.Schema(type=DataType.STRING), oai.Schema(type=DataType.NULL)], - ) - schemas = properties.Schemas() - - p, new_schemas = ListProperty.build( - name=name, - required=required, - data=data, - schemas=schemas, - parent_name="parent", - config=config, - process_properties=True, - roots={ReferencePath("root")}, - ) - - assert isinstance(p, properties.ListProperty) - assert p.inner_property == union_property_factory( - name=f"{name}_item", - inner_properties=[ - string_property_factory(name=f"{name}_item_type_0"), - none_property_factory(name=f"{name}_item_type_1"), - int_property_factory(name=f"{name}_item_type_2"), - ], - ) - assert new_schemas == schemas - - -def test_build_list_property_prefix_items_only(any_property_factory, config): - from openapi_python_client.parser import properties - - name = "list_prop" - required = True - data = oai.Schema(type=DataType.ARRAY, prefixItems=[oai.Schema()]) - schemas = properties.Schemas() - - p, new_schemas = ListProperty.build( - name=name, - required=required, - data=data, - schemas=schemas, - parent_name="parent", - config=config, - process_properties=True, - roots={ReferencePath("root")}, - ) - - assert isinstance(p, properties.ListProperty) - assert p.inner_property == any_property_factory(name=f"{name}_item") - assert new_schemas == schemas diff --git a/tests/test_parser/test_properties/test_union.py b/tests/test_parser/test_properties/test_union.py index 471574c9b..84e00067d 100644 --- a/tests/test_parser/test_properties/test_union.py +++ b/tests/test_parser/test_properties/test_union.py @@ -1,38 +1,9 @@ import openapi_python_client.schema as oai from openapi_python_client.parser.errors import ParseError from openapi_python_client.parser.properties import Schemas, UnionProperty -from openapi_python_client.parser.properties.protocol import Value from openapi_python_client.schema import DataType, ParameterLocation -def test_property_from_data_union(union_property_factory, date_time_property_factory, string_property_factory, config): - from openapi_python_client.parser.properties import Schemas, property_from_data - - name = "union_prop" - required = True - data = oai.Schema( - anyOf=[oai.Schema(type=DataType.STRING, default="a")], - oneOf=[ - oai.Schema(type=DataType.STRING, schema_format="date-time"), - ], - ) - expected = union_property_factory( - name=name, - required=required, - inner_properties=[ - string_property_factory(name=f"{name}_type_0", default=Value("'a'", "a")), - date_time_property_factory(name=f"{name}_type_1"), - ], - ) - - p, s = property_from_data( - name=name, required=required, data=data, schemas=Schemas(), parent_name="parent", config=config - ) - - assert p == expected - assert s == Schemas() - - def test_invalid_location(config): data = oai.Schema( type=[DataType.NUMBER, DataType.NULL], From 79c322d8b1e6836a89a6bde27f5269dbdcbd5137 Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Mon, 11 Nov 2024 20:08:14 -0800 Subject: [PATCH 07/15] don't run tests in 3.8 because type hints don't work the same --- .github/workflows/checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 34543fdf2..2cf49e42b 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -11,7 +11,7 @@ jobs: test: strategy: matrix: - python: [ "3.8", "3.9", "3.10", "3.11", "3.12", "3.13" ] + python: [ "3.9", "3.10", "3.11", "3.12", "3.13" ] os: [ ubuntu-latest, macos-latest, windows-latest ] runs-on: ${{ matrix.os }} steps: From d915267086bdfd9d8fa740c97a83524da8eed4e4 Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Mon, 11 Nov 2024 20:09:24 -0800 Subject: [PATCH 08/15] make sure all tests get run --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index bea5a38e9..f23c4ce5e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -119,7 +119,7 @@ re = {composite = ["regen_e2e", "e2e --snapshot-update"]} regen_e2e = "python -m end_to_end_tests.regen_golden_record" [tool.pdm.scripts.test] -cmd = "pytest tests end_to_end_tests/test_end_to_end.py end_to_end_tests/generated_code_live_tests --basetemp=tests/tmp" +cmd = "pytest tests end_to_end_tests/test_end_to_end.py end_to_end_tests/generated_code_live_tests end_to_end_tests/generator_errors_and_warnings --basetemp=tests/tmp" [tool.pdm.scripts.test.env] "TEST_RELATIVE" = "true" From 87673c8df23f97803cfbb4ddf5cd8e808d5f8174 Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Mon, 11 Nov 2024 20:19:35 -0800 Subject: [PATCH 09/15] cover another error case --- .../generator_errors_and_warnings/test_invalid_unions.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py b/end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py index 03539806e..ad824efc4 100644 --- a/end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py +++ b/end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py @@ -18,6 +18,10 @@ def warnings(self): UnionWithInvalidDefault: type: ["number", "integer"] default: aaa + UnionWithMalformedVariant: + anyOf: + - type: string + - type: array # invalid because no items """ ) @@ -26,3 +30,6 @@ def test_invalid_reference(self, warnings): def test_invalid_default(self, warnings): assert_bad_schema_warning(warnings, "UnionWithInvalidDefault", "Invalid int value: aaa") + + def test_invalid_property(self, warnings): + assert_bad_schema_warning(warnings, "UnionWithMalformedVariant", "Invalid property in union") \ No newline at end of file From 3a0c36c6ee95f7e9f1de15debe2e268accb5b94d Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Mon, 11 Nov 2024 20:44:39 -0800 Subject: [PATCH 10/15] reorganize --- .changeset/live_tests.md | 8 +++--- CONTRIBUTING.md | 11 ++++---- .../README.md | 25 +++++++++++++++++-- .../generated_code_execution}/test_arrays.py | 0 .../test_defaults.py | 0 .../test_docstrings.py | 0 .../test_enums_and_consts.py | 0 .../test_properties.py | 0 .../generated_code_execution}/test_unions.py | 0 .../test_invalid_arrays.py | 0 .../test_invalid_defaults.py | 0 .../test_invalid_enums_and_consts.py | 0 .../test_invalid_spec_format.py | 0 .../test_invalid_unions.py | 0 .../generator_errors_and_warnings/README.md | 14 ----------- pyproject.toml | 2 +- 16 files changed, 33 insertions(+), 27 deletions(-) rename end_to_end_tests/{generated_code_live_tests => functional_tests}/README.md (56%) rename end_to_end_tests/{generated_code_live_tests => functional_tests/generated_code_execution}/test_arrays.py (100%) rename end_to_end_tests/{generated_code_live_tests => functional_tests/generated_code_execution}/test_defaults.py (100%) rename end_to_end_tests/{generated_code_live_tests => functional_tests/generated_code_execution}/test_docstrings.py (100%) rename end_to_end_tests/{generated_code_live_tests => functional_tests/generated_code_execution}/test_enums_and_consts.py (100%) rename end_to_end_tests/{generated_code_live_tests => functional_tests/generated_code_execution}/test_properties.py (100%) rename end_to_end_tests/{generated_code_live_tests => functional_tests/generated_code_execution}/test_unions.py (100%) rename end_to_end_tests/{generator_errors_and_warnings => functional_tests/generator_failure_cases}/test_invalid_arrays.py (100%) rename end_to_end_tests/{generator_errors_and_warnings => functional_tests/generator_failure_cases}/test_invalid_defaults.py (100%) rename end_to_end_tests/{generator_errors_and_warnings => functional_tests/generator_failure_cases}/test_invalid_enums_and_consts.py (100%) rename end_to_end_tests/{generator_errors_and_warnings => functional_tests/generator_failure_cases}/test_invalid_spec_format.py (100%) rename end_to_end_tests/{generator_errors_and_warnings => functional_tests/generator_failure_cases}/test_invalid_unions.py (100%) delete mode 100644 end_to_end_tests/generator_errors_and_warnings/README.md diff --git a/.changeset/live_tests.md b/.changeset/live_tests.md index 25705da72..90ba90ffc 100644 --- a/.changeset/live_tests.md +++ b/.changeset/live_tests.md @@ -2,13 +2,13 @@ default: minor --- -# New categories of end-to-end tests +# Functional tests -Automated tests have been extended to include two new types of tests: +Automated tests have been extended to include a new category of "functional" tests, in [`end_to_end_tests/functional_tests`](./end_to_end_tests/functional_tests). These are of two kinds: -1. Happy-path tests that run the generator from an inline API document and then actually import and execute the generated code. See [`end_to_end_tests/generated_code_live_tests`](./end_to_end_tests/generated_code_live_tests). +1. Happy-path tests that run the generator from an inline API document and then actually import and execute the generated code. 2. Warning/error condition tests that run the generator from an inline API document that contains something invalid, and make assertions about the generator's output. -These provide more efficient and granular test coverage than the "golden record"-based end-to-end tests, and also replace some tests that were previously being done against low-level implementation details in `tests/unit`. +These provide more efficient and granular test coverage than the "golden record"-based end-to-end tests. Also, the low-level unit tests in `tests`, which are dependent on internal implementation details, can now in many cases be replaced by functional tests. This does not affect any runtime functionality of openapi-python-client. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2c46faeb3..fbd3482f7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,21 +69,20 @@ There are 4 types of snapshots generated right now, you may have to update only 3. `test_custom_templates` are used with `baseline_openapi_3.0.json` to generate `custom-templates-golden-record` for testing custom templates 4. `3.1_specific.openapi.yaml` is used to generate `test-3-1-golden-record` and test 3.1-specific features (things which do not have a 3.0 equivalent) -#### Unit tests of generated code +#### Functional tests -These verify the runtime behavior of the generated code, without making assertions about the exact implementation of the code. For instance, they can verify that JSON data is correctly decoded into model class attributes. +These are black-box tests that verify the runtime behavior of generated code, as well as the generator's validation behavior. For instance, they can verify that JSON data is correctly decoded into model class attributes, or that the generator will emit an appropriate warning for an invalid spec. -The tests run the generator against a small API spec (defined inline for each test class), and then import and execute the generated code. This can sometimes identify issues with validation logic, module imports, etc., that might be harder to diagnose via the snapshot tests, especially during development of a new feature. +This can sometimes identify issues with error handling, validation logic, module imports, etc., that might be harder to diagnose via the snapshot tests, especially during development of a new feature. -See [`end_to_end_tests/generated_code_live_tests`](./end_to_end_tests/generated_code_live_tests). +See [`end_to_end_tests/functional_tests`](./end_to_end_tests/functional_tests). #### Other unit tests These include: * Regular unit tests of basic pieces of fairly self-contained low-level functionality, such as helper functions. These are implemented in the `tests/unit` directory, using the `pytest` framework. -* End-to-end tests of invalid spec conditions, where we run the generator against a small spec with some problem, and expect it to print warnings/errors rather than generating code. These are implemented in `end_to_end_tests/generator_errors_and_warnings`. -* Older-style unit tests of low-level functions like `property_from_data` that have complex behavior. These are brittle and difficult to maintain, and should not be used going forward. Instead, use either unit tests of generated code (to test happy paths), or end-to-end tests of invalid spec conditions (to test for warnings/errors), as described above. +* Older-style unit tests of low-level functions like `property_from_data` that have complex behavior. These are brittle and difficult to maintain, and should not be used going forward. Instead, they should be migrated to functional tests. ### Creating a Pull Request diff --git a/end_to_end_tests/generated_code_live_tests/README.md b/end_to_end_tests/functional_tests/README.md similarity index 56% rename from end_to_end_tests/generated_code_live_tests/README.md rename to end_to_end_tests/functional_tests/README.md index 2bb5a57bb..ebbad24f9 100644 --- a/end_to_end_tests/generated_code_live_tests/README.md +++ b/end_to_end_tests/functional_tests/README.md @@ -1,6 +1,14 @@ -## The `generated_code_live_tests` module +## The `functional_tests` module -These are end-to-end tests which run the code generator command, but unlike the other tests in `end_to_end_tests`, they are also unit tests _of the behavior of the generated code_. +These are end-to-end tests which run the client generator against many small API documents that are specific to various test cases. + +Rather than testing low-level implementation details (like the unit tests in `tests`), or making assertions about the exact content of the generated code (like the "golden record"-based end-to-end tests), these treat both the generator and the generated code as black boxes and make assertions about their behavior. + +The tests are in two submodules: + +# `generated_code_execution` + +These tests use valid API specs, and after running the generator, they _import and execute_ pieces of the generated code to verify that it actually works at runtime. Each test class follows this pattern: @@ -33,3 +41,16 @@ class TestSimpleJsonObject: instance = MyModel(string_prop="abc") assert instance.to_dict() == {"stringProp": "abc"} ``` + +# `generator_failure_cases` + +These run the generator with an invalid API spec and make assertions about the warning/error output. Some of these invalid conditions are expected to only produce warnings about the affected schemas, while others are expected to produce fatal errors that terminate the generator. + +For warning conditions, each test class follows this pattern: + +- Call `inline_spec_should_cause_warnings`, providing an inline API spec (JSON or YAML). If there are several test methods in the class using the same spec, use a fixture with scope "class" so the generator is only run once. +- Use `assert_bad_schema_warning` to parse the output and check for a specific warning message for a specific schema name. + +Or, for fatal error conditions: + +- Call `inline_spec_should_fail`, providing an inline API spec (JSON or YAML). diff --git a/end_to_end_tests/generated_code_live_tests/test_arrays.py b/end_to_end_tests/functional_tests/generated_code_execution/test_arrays.py similarity index 100% rename from end_to_end_tests/generated_code_live_tests/test_arrays.py rename to end_to_end_tests/functional_tests/generated_code_execution/test_arrays.py diff --git a/end_to_end_tests/generated_code_live_tests/test_defaults.py b/end_to_end_tests/functional_tests/generated_code_execution/test_defaults.py similarity index 100% rename from end_to_end_tests/generated_code_live_tests/test_defaults.py rename to end_to_end_tests/functional_tests/generated_code_execution/test_defaults.py diff --git a/end_to_end_tests/generated_code_live_tests/test_docstrings.py b/end_to_end_tests/functional_tests/generated_code_execution/test_docstrings.py similarity index 100% rename from end_to_end_tests/generated_code_live_tests/test_docstrings.py rename to end_to_end_tests/functional_tests/generated_code_execution/test_docstrings.py diff --git a/end_to_end_tests/generated_code_live_tests/test_enums_and_consts.py b/end_to_end_tests/functional_tests/generated_code_execution/test_enums_and_consts.py similarity index 100% rename from end_to_end_tests/generated_code_live_tests/test_enums_and_consts.py rename to end_to_end_tests/functional_tests/generated_code_execution/test_enums_and_consts.py diff --git a/end_to_end_tests/generated_code_live_tests/test_properties.py b/end_to_end_tests/functional_tests/generated_code_execution/test_properties.py similarity index 100% rename from end_to_end_tests/generated_code_live_tests/test_properties.py rename to end_to_end_tests/functional_tests/generated_code_execution/test_properties.py diff --git a/end_to_end_tests/generated_code_live_tests/test_unions.py b/end_to_end_tests/functional_tests/generated_code_execution/test_unions.py similarity index 100% rename from end_to_end_tests/generated_code_live_tests/test_unions.py rename to end_to_end_tests/functional_tests/generated_code_execution/test_unions.py diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_arrays.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_arrays.py similarity index 100% rename from end_to_end_tests/generator_errors_and_warnings/test_invalid_arrays.py rename to end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_arrays.py diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_defaults.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_defaults.py similarity index 100% rename from end_to_end_tests/generator_errors_and_warnings/test_invalid_defaults.py rename to end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_defaults.py diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_enums_and_consts.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_enums_and_consts.py similarity index 100% rename from end_to_end_tests/generator_errors_and_warnings/test_invalid_enums_and_consts.py rename to end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_enums_and_consts.py diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_spec_format.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py similarity index 100% rename from end_to_end_tests/generator_errors_and_warnings/test_invalid_spec_format.py rename to end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py diff --git a/end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_unions.py similarity index 100% rename from end_to_end_tests/generator_errors_and_warnings/test_invalid_unions.py rename to end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_unions.py diff --git a/end_to_end_tests/generator_errors_and_warnings/README.md b/end_to_end_tests/generator_errors_and_warnings/README.md deleted file mode 100644 index 443cb2a69..000000000 --- a/end_to_end_tests/generator_errors_and_warnings/README.md +++ /dev/null @@ -1,14 +0,0 @@ -## The `generator_errors_and_warnings` module - -These are end-to-end tests which run the code generator command with an invalid API spec and make assertions about the output. Some of these invalid conditions are expected to only produce warnings about the affected schemas, while others are expected to produce fatal errors that terminate the generator. - -Unlike the tests in `generated_code_live_tests`, these do not import or execute the generated code, since the generator does not produce classes for invalid schemas. - -For warning conditions, each test class follows this pattern: - -- Call `inline_spec_should_cause_warnings`, providing an inline API spec (JSON or YAML). If there are several test methods in the class using the same spec, use a fixture with scope "class" so the generator is only run once. -- Use `assert_bad_schema_warning` to parse the output and check for a specific warning message for a specific schema name. - -Or, for fatal error conditions: - -- Call `inline_spec_should_fail`, providing an inline API spec (JSON or YAML). diff --git a/pyproject.toml b/pyproject.toml index f23c4ce5e..a3909f909 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -119,7 +119,7 @@ re = {composite = ["regen_e2e", "e2e --snapshot-update"]} regen_e2e = "python -m end_to_end_tests.regen_golden_record" [tool.pdm.scripts.test] -cmd = "pytest tests end_to_end_tests/test_end_to_end.py end_to_end_tests/generated_code_live_tests end_to_end_tests/generator_errors_and_warnings --basetemp=tests/tmp" +cmd = "pytest tests end_to_end_tests/test_end_to_end.py end_to_end_tests/functional_tests --basetemp=tests/tmp" [tool.pdm.scripts.test.env] "TEST_RELATIVE" = "true" From eabbf2bf2f9e30666475f46433daca078a221ed3 Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Mon, 11 Nov 2024 20:47:18 -0800 Subject: [PATCH 11/15] rm test file --- localtest/v2api.yml | 33030 ------------------------------------------ 1 file changed, 33030 deletions(-) delete mode 100644 localtest/v2api.yml diff --git a/localtest/v2api.yml b/localtest/v2api.yml deleted file mode 100644 index c31d94274..000000000 --- a/localtest/v2api.yml +++ /dev/null @@ -1,33030 +0,0 @@ -paths: - /aa-sequences: - get: - description: List AA sequences - operationId: listAASequences - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of an AA Sequence. Restricts results to those with the specified - name, alias, or entity registry ID. - in: query - name: name - schema: - type: string - - description: Name substring of an AA sequence. Restricts results to those - with names, aliases, or entity registry IDs that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: String of amino acids. Restricts results to AA sequences exactly - matching these amino acids (case-insensitive). - in: query - name: aminoAcids - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. - in: query - name: folderId - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to AA sequences - mentioned in those entries. - - ' - in: query - name: mentionedIn - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'ID of a registry. Restricts results to those registered in this - registry. Specifying "null" returns unregistered items. - - ' - in: query - name: registryId - schema: - nullable: true - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived AA sequences. - Use "ANY_ARCHIVED" to filter for archived AA sequences regardless of reason. - Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and - unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of item IDs. Restricts results to those - that mention the given items in the description. - - ' - in: query - name: mentions - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: prtn_6gxJGfPh,prtn_u7fOvqWg - type: string - - description: 'Comma-separated list of entity registry IDs. Maximum of 100. - Restricts results to those that match any of the specified registry IDs. - - ' - in: query - name: entityRegistryIds.anyOf - schema: - example: TP001,TP002 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case insensitive. Warning - this filter can be non-performant due - to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma separated list of user or app IDs. Maximum of 100. - in: query - name: authorIds.anyOf - schema: - example: ent_a0SApq3z,ent_b4AApz9b - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note**: Fields annotations, translations, and primers cannot be introspected - with the returning parameter, and any sub fields will be ignored. E.g.: - "aaSequences.annotations.id" will return the same as "aaSequences.annotations". - - ' - in: query - name: returning - schema: - example: aaSequences.id,aaSequences.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List AA sequences - tags: - - AA Sequences - post: - description: Create an AA sequence - operationId: createAASequence - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequenceCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequence' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '503': - description: Deprecated, a 429 is returned for too many requests - summary: Create an AA sequence - tags: - - AA Sequences - /aa-sequences/{aa_sequence_id}: - get: - description: Get an AA sequence - operationId: getAASequence - parameters: - - in: path - name: aa_sequence_id - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note**: Fields annotations, translations, and primers cannot be introspected - with the returning parameter, and any sub fields will be ignored. E.g.: - "annotations.id" will return the same as "annotations". - - ' - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequence' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get an AA sequence - tags: - - AA Sequences - patch: - description: Update an AA sequence - operationId: updateAASequence - parameters: - - in: path - name: aa_sequence_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequenceUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequence' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update an AA sequence - tags: - - AA Sequences - /aa-sequences/{entity_registry_id}:upsert: - patch: - description: 'Create or update a registered AA sequence. - - - Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). - - ' - operationId: upsertAaSequence - parameters: - - in: path - name: entity_registry_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequenceUpsert' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequence' - description: OK - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequence' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create or update a registered AA sequence. - tags: - - AA Sequences - /aa-sequences:archive: - post: - description: Archive AA sequences - operationId: archiveAASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive AA sequences - tags: - - AA Sequences - /aa-sequences:auto-annotate: - post: - description: Auto-annotate AA sequences with matching features from specified - Feature Libraries - operationId: autoAnnotateAaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutoAnnotateAaSequences' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task has an empty response. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Auto-annotate AA sequences with matching features from specified Feature - Libraries - tags: - - AA Sequences - /aa-sequences:back-translate: - post: - description: Create back-translated DNA sequences from AA sequences. - operationId: backTranslate - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BackTranslate' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the resources of the DNA Sequence entities - that were back-translated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create back-translated DNA sequences from AA sequences. - tags: - - AA Sequences - /aa-sequences:bulk-create: - post: - description: Bulk Create AA sequences. Limit of 1000 AA Sequences per request. - operationId: bulkCreateAASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of AA Sequences that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create AA sequences - tags: - - AA Sequences - /aa-sequences:bulk-get: - get: - description: Bulk get AA sequences by ID - operationId: bulkGetAASequences - parameters: - - description: 'Comma-separated list of IDs of AA sequences to get. - - ' - in: query - name: aaSequenceIds - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note**: Fields annotations, translations, and primers cannot be introspected - with the returning parameter, and any sub fields will be ignored. E.g.: - "aaSequences.annotations.id" will return the same as "aaSequences.annotations". - - ' - in: query - name: returning - schema: - example: aaSequences.id, aaSequences.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk get AA sequences by ID - tags: - - AA Sequences - /aa-sequences:bulk-update: - post: - description: Bulk Update AA sequences - operationId: bulkUpdateAASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [AA Sequence](#/AA%20Sequences/bulkGetAASequences) - resources - - that were updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update AA sequences - tags: - - AA Sequences - /aa-sequences:bulk-upsert: - post: - description: 'All entities and their schemas must be within the same registry. - - - This operation performs the following actions: - - 1. Any existing objects are looked up in Benchling by the provided entity - registry ID. - - 2. Then, all objects are either created or updated accordingly, temporarily - skipping any schema field links between objects. - - 3. Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). You may link to objects - being created in the same operation. - - 4. Entities are registered, using the provided name and entity registry ID. - - - If any action fails, the whole operation is canceled and no objects are created - or updated. - - ' - operationId: bulkUpsertAASequences - parameters: - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: aaSequences.id,aaSequences.creator.handle - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesBulkUpsertRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the resources of the objects that were - upserted. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk upsert AA sequences - tags: - - AA Sequences - /aa-sequences:find-matching-regions: - post: - description: Find matching regions for AA sequences - operationId: findMatchingRegionsAaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesFindMatchingRegion' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - It is used to search for AA sequences that are either subsequences or - exact matches of the provided target sequences. - - Each returned item represents the group of sequences that partially or - fully match the target sequence." - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Find matching regions for AA sequences - tags: - - AA Sequences - /aa-sequences:match-amino-acids: - post: - description: 'Returns AA Sequences that exactly match the provided amino acids. - - ' - operationId: matchAminoAcidsAaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesMatchBases' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesPaginatedList' - description: A filtered list of AA Sequences - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List entities with matching amino acids - tags: - - AA Sequences - /aa-sequences:search-amino-acids: - post: - description: 'Returns AA Sequences that contain the provided amino acids. Search - indexing is asynchronous, so results my be not be available immediately after - creation. - - ' - operationId: searchAaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesSearchBases' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesPaginatedList' - description: A filtered list of AA Sequences - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Search AA Sequences - tags: - - AA Sequences - /aa-sequences:unarchive: - post: - description: Unarchive AA sequences - operationId: unarchiveAASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AaSequencesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive AA sequences - tags: - - AA Sequences - /app-canvases: - post: - description: 'Create an App Canvas that a Benchling App can write to and read - user interaction from. - - ' - operationId: createAppCanvas - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppCanvasCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/AppCanvas' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - summary: Create an App Canvas - tags: - - Apps - /app-canvases/{canvas_id}: - get: - description: Get the current state of the App Canvas, including user input elements. - operationId: getAppCanvas - parameters: - - example: cnvs_Q4mPJ34a - in: path - name: canvas_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AppCanvas' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get App Canvas - tags: - - Apps - patch: - description: Update App Canvas - operationId: updateAppCanvas - parameters: - - example: cnvs_Q4mPJ34a - in: path - name: canvas_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppCanvasUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AppCanvas' - description: OK - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update App Canvas - tags: - - Apps - /app-canvases:archive: - post: - description: Archive app canvases - operationId: archiveAppCanvases - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppCanvasesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AppCanvasesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive app canvases - tags: - - Apps - /app-canvases:unarchive: - post: - description: Unarchive app canvases - operationId: unarchiveAppCanvases - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppCanvasesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AppCanvasesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive app canvases - tags: - - Apps - /app-configuration-items: - get: - description: Get app configuration items - operationId: listAppConfigurationItems - parameters: - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: Number of results to return. Defaults to 50, maximum of 100. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: App id to which the configuration belongs. - example: app_e59sjL23Pqn30xHg - in: query - name: appId - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: aci_VfVOART1,aci_RFhDGaaC - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are modifiedAt - (modified time, most recent first) and createdAt (created time, most recent - first). Optionally add :asc or :desc to specify ascending or descending - order. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - nullable: false - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AppConfigurationPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get app configuration items - tags: - - Apps - post: - description: Create app configuration item - operationId: createAppConfigurationItem - requestBody: - content: - application/json: - example: "{\n \"appId\": \"app_J39na03L1nsLS34o\",\n \"path\": [\n \ - \ \"My Schema 1\",\n \"My Field 1\"\n ],\n \"type\": \"field\"\ - ,\n \"value\": \"tsf_HXUnClU9\"\n}\n" - schema: - $ref: '#/components/schemas/AppConfigItemCreate' - responses: - '201': - content: - application/json: - example: "{\n \"apiURL\": \"string\",\n \"app\": {\n \"id\": \"\ - string\"\n },\n \"createdAt\": \"2024-03-14T21:52:32.929Z\",\n \ - \ \"id\": \"string\",\n \"type\": \"field\",\n \"modifiedAt\": \"\ - 2024-03-14T21:52:32.929Z\",\n \"path\": [\n \"My Schema 1\",\n\ - \ \"My Field 1\"\n ],\n \"value\": \"tsf_HXUnClU9\"\n}\n" - schema: - $ref: '#/components/schemas/AppConfigItem' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create app configuration item - tags: - - Apps - /app-configuration-items/{item_id}: - get: - description: Get app configuration item - operationId: getAppConfigurationItemById - parameters: - - example: aci_e59sjL23Pqn30xHg - in: path - name: item_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - example: "{\n \"apiURL\": \"string\",\n \"app\": {\n \"id\": \"\ - string\"\n },\n \"createdAt\": \"2024-03-14T21:54:20.435Z\",\n \ - \ \"id\": \"string\",\n \"type\": \"field\",\n \"modifiedAt\": \"\ - 2024-03-14T21:54:20.435Z\",\n \"path\": [\n \"My Schema 1\",\n\ - \ \"My Field 1\"\n ]\n}\n" - schema: - $ref: '#/components/schemas/AppConfigItem' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get app configuration item - tags: - - Apps - patch: - description: Update app configuration item - operationId: updateAppConfigurationItem - parameters: - - example: aci_e59sjL23Pqn30xHg - in: path - name: item_id - required: true - schema: - type: string - requestBody: - content: - application/json: - example: "{\n \"apiURL\": \"string\",\n \"app\": {\n \"id\": \"string\"\ - \n },\n \"createdAt\": \"2024-03-14T21:59:01.233Z\",\n \"id\": \"\ - string\",\n \"type\": \"field\",\n \"modifiedAt\": \"2024-03-14T21:59:01.233Z\"\ - ,\n \"path\": [\n \"My Schema 1\",\n \"My Field 1\"\n ]\n}\n" - schema: - $ref: '#/components/schemas/AppConfigItemUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AppConfigItem' - description: OK - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update app configuration item - tags: - - Apps - /app-configuration-items:bulk-create: - post: - description: Bulk Create app configuration items - operationId: bulkCreateAppConfigurationItems - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppConfigItemsBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: Accepted - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create app configuration items. Limit of 1000 App Config Items - per request. - tags: - - Apps - /app-configuration-items:bulk-update: - post: - description: Bulk Update app configuration items - operationId: bulkUpdateAppConfigurationItems - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppConfigItemsBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: Accepted - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update app configuration items. Limit of 1000 App Config Items - per request. - tags: - - Apps - /app-sessions: - post: - description: 'Create a new app session. Sessions cannot be archived once created. - - ' - operationId: createAppSession - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppSessionCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/AppSession' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - summary: Create a new app session - tags: - - Apps - /app-sessions/{id}: - get: - description: Get an app session - operationId: getAppSessionById - parameters: - - example: sesn_J2PGE0Z516Y - in: path - name: id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AppSession' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get an app session - tags: - - Apps - patch: - description: Update app session - operationId: updateAppSession - parameters: - - in: path - name: id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppSessionUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AppSession' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update app session - tags: - - Apps - /apps: - get: - description: List apps - operationId: listBenchlingApps - parameters: - - description: Number of results to return. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - in: query - name: sort - schema: - default: modifiedAt - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - name - - modifiedAt:asc - - name:asc - - modifiedAt:desc - - name:desc - nullable: false - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: app_J39na03L1nsLS34o,app_ae92kBv9aNSl593z,app_e59sjL23Pqn30xHg - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of an app. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: Name substring of an app. Restricts results to those with names - that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Comma-separated list of app names. Maximum of 100. Restricts - results to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1, MyName2 - type: string - - description: 'Comma-separated list of app names. Maximum of 100. Restricts - results to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma-separated list of organization and/or team API IDs. Restricts - results to apps that are members of all given groups. - in: query - name: memberOf - schema: - type: string - - description: Comma-separated list of organization and/or team API IDs. Restricts - results to apps that are admins of all given groups. - in: query - name: adminOf - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingAppsPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - summary: List apps - tags: - - Apps - post: - deprecated: true - description: Create an app - operationId: createBenchlingApp - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingAppCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingApp' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '409': - content: - application/json: - schema: - $ref: '#/components/schemas/ConflictError' - description: Conflict - summary: Create an app - tags: - - Apps - /apps/{app_id}: - get: - description: Get an app by ID - operationId: getBenchlingAppByID - parameters: - - example: app_J39na03L1nsLS34o - in: path - name: app_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingApp' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get an app by ID - tags: - - Apps - patch: - deprecated: true - description: Update an app - operationId: patchBenchlingApp - parameters: - - example: app_e59sjL23Pqn30xHg - in: path - name: app_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingAppUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingApp' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update an app - tags: - - Apps - /apps:archive: - post: - deprecated: true - description: Archive apps - operationId: archiveBenchlingApps - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingAppsArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingAppsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive apps - tags: - - Apps - /apps:unarchive: - post: - deprecated: true - description: Unarchive apps - operationId: unarchiveBenchlingApps - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingAppsUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BenchlingAppsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive apps - tags: - - Apps - /assay-result-schemas: - get: - description: List assay result schemas - operationId: listAssayResultSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultSchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed assay results in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List assay result schemas - tags: - - Schemas - /assay-result-schemas/{schema_id}: - get: - description: Get a Result schema by ID - operationId: getResultSchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultSchema' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a Result schema by ID - tags: - - Schemas - /assay-results: - get: - description: List results - operationId: listAssayResults - parameters: - - description: ID of the assay result schema to filter by - in: query - name: schemaId - required: false - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts - results to those created before the specified time. e.g. < 2017-04-30. - - ' - in: query - name: createdAt.lt - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts - results to those created after the specified time. e.g. > 2017-04-30. - - ' - in: query - name: createdAt.gt - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts - results to those created on or before the specified time. e.g. <= 2017-04-30. - - ' - in: query - name: createdAt.lte - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts - results to those created on or after the specified time. e.g. >= 2017-04-30. - - ' - in: query - name: createdAt.gte - schema: - type: string - - deprecated: true - description: Filter by results created after this unix timestamp - in: query - name: minCreatedTime - schema: - type: integer - - deprecated: true - description: Filter by results created before this unix timestamp - in: query - name: maxCreatedTime - schema: - type: integer - - description: 'Method by which to order search results. Valid sorts are createdAt - (created time, oldest first). Use :asc or :desc to specify ascending or - descending order. Default is createdAt:asc. - - ' - in: query - name: sort - schema: - default: createdAt:asc - enum: - - createdAt:asc - - createdAt:desc - - modifiedAt:asc - - modifiedAt:desc - nullable: false - type: string - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: Number of results to return. Defaults to 50, maximum of 100. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Filter by comma-separated list of related Entity IDs, maximum - of 20. - in: query - name: entityIds - schema: - type: string - - description: 'Filter by comma-separated list of related inventory (container, - box, plate, or location) IDs, maximum of 20. - - ' - in: query - name: storageIds - schema: - type: string - - description: Filter by comma-separated list of associated AssayRun IDs. At - most one of {assayRunIds, automationOutputProcessorId} may be supplied. - in: query - name: assayRunIds - schema: - type: string - - description: Filter by Automation Output Processor ID. Either this or schemaId - is required; if both are given, the associated schemas must match. At most - one of {assayRunIds, automationOutputProcessorId} may be supplied. - in: query - name: automationOutputProcessorId - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - format: uuid - type: string - - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts - results to those modified before the specified time. e.g. < 2017-04-30. - - ' - in: query - name: modifiedAt.lt - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts - results to those modified after the specified time. e.g. > 2017-04-30. - - ' - in: query - name: modifiedAt.gt - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts - results to those modified on or before the specified time. e.g. <= 2017-04-30. - - ' - in: query - name: modifiedAt.lte - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts - results to those modified on or after the specified time. e.g. >= 2017-04-30. - - ' - in: query - name: modifiedAt.gte - schema: - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived Assay Results. - Use "ANY_ARCHIVED" to filter for archived Assay Results regardless of reason. - Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and - unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultsPaginatedList' - description: OK - summary: List results - tags: - - Assay Results - post: - description: 'Create 1 or more results. - - If you are looking to add results to a specific table in a notebook entry, - please use the [assay-results bulk-create](#/Assay%20Results/bulkCreateAssayResults) - endpoint instead. - - ' - operationId: createAssayResults - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultsBulkCreateRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultsCreateResponse' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create 1 or more results. - tags: - - Assay Results - /assay-results/{assay_result_id}: - get: - description: Get a result - operationId: getAssayResult - parameters: - - in: path - name: assay_result_id - required: true - schema: - format: uuid - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResult' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get a result - tags: - - Assay Results - /assay-results:archive: - post: - description: 'Results that have been added to a Legacy Result or Legacy Run - table in a Notebook Entry **cannot** be Archived. - - ' - operationId: archiveAssayResults - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultsArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultIdsResponse' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive 1 or more results. - tags: - - Assay Results - /assay-results:bulk-create: - post: - description: Bulk create results. Limit of 4000 results per request. - operationId: bulkCreateAssayResults - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultsBulkCreateInTableRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. The task response contains - the full list of results that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk create results - tags: - - Assay Results - /assay-results:bulk-get: - get: - description: Up to 200 IDs can be specified at once. - operationId: bulkGetAssayResults - parameters: - - description: Comma-separated list of assay result IDs. - in: query - name: assayResultIds - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultsBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Gets multiple results specified by a list of IDs. - tags: - - Assay Results - /assay-results:unarchive: - post: - description: Unarchive 1 or more results. - operationId: unarchiveAssayResults - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultIdsRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultIdsResponse' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive 1 or more results. - tags: - - Assay Results - /assay-run-schemas: - get: - description: List assay run schemas - operationId: listAssayRunSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunSchemasPaginatedList' - description: OK - headers: - Run-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed assay runs in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List assay run schemas - tags: - - Schemas - /assay-run-schemas/{schema_id}: - get: - description: Get a Run schema by ID - operationId: getRunSchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunSchema' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a Run schema by ID - tags: - - Schemas - /assay-runs: - get: - description: List runs - operationId: listAssayRuns - parameters: - - description: ID of the assay run schema to filter by - in: query - name: schemaId - required: true - schema: - type: string - - description: Filter by runs created after this unix timestamp - in: query - name: minCreatedTime - schema: - type: integer - - description: Filter by runs created before this unix timestamp - in: query - name: maxCreatedTime - schema: - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: Number of results to return. Defaults to 50, maximum of 100. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - format: uuid - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunsPaginatedList' - description: OK - summary: List runs - tags: - - Assay Runs - post: - description: Create 1 or more runs. - operationId: createAssayRuns - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunsBulkCreateRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunsBulkCreateResponse' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunsBulkCreateErrorResponse' - description: Bad Request - summary: Create 1 or more runs. - tags: - - Assay Runs - /assay-runs/{assay_run_id}: - get: - description: Get a run - operationId: getAssayRun - parameters: - - in: path - name: assay_run_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRun' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get a run - tags: - - Assay Runs - patch: - description: Update a run - operationId: updateAssayRun - parameters: - - description: ID of the Run to be updated - in: path - name: assay_run_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRun' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update a run - tags: - - Assay Runs - /assay-runs/{assay_run_id}/automation-input-generators: - get: - description: list AutomationInputGenerators by Run - operationId: listAutomationInputGenerators - parameters: - - in: path - name: assay_run_id - required: true - schema: - type: string - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationFileInputsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: list AutomationInputGenerators by Run - tags: - - Assay Runs - /assay-runs/{assay_run_id}/automation-output-processors: - get: - deprecated: true - description: Deprecated in favor of '/automation-output-processors'. For each - output config in the run config, will create an empty automationOutputProcessor - for the run if one doesn't exist. - operationId: listAutomationOutputProcessorsDeprecated - parameters: - - in: path - name: assay_run_id - required: true - schema: - type: string - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DeprecatedAutomationOutputProcessorsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: list AutomationOutputProcessors by Run - tags: - - Assay Runs - /assay-runs:archive: - post: - description: Archive assay runs that are not embedded in a notebook entry - operationId: archiveAssayRuns - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunsArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive Assay Runs - tags: - - Assay Runs - /assay-runs:bulk-get: - get: - description: Bulk get runs by ID - operationId: bulkGetAssayRuns - parameters: - - description: Comma-separated list of assay run IDs - in: query - name: assayRunIds - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunsBulkGet' - description: OK - summary: Bulk get runs by ID - tags: - - Assay Runs - /assay-runs:unarchive: - post: - description: Unarchive assay runs - operationId: unarchiveAssayRuns - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunsUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayRunsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive Assay Runs - tags: - - Assay Runs - /automation-file-transforms/{transform_id}: - get: - description: Get a Lab Automation Transform step - operationId: getLabAutomationTransform - parameters: - - in: path - name: transform_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LabAutomationTransform' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a Lab Automation Transform step - tags: - - Lab Automation - patch: - description: Update a Lab Automation Transform step - operationId: updateLabAutomationTransform - parameters: - - in: path - name: transform_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LabAutomationTransformUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LabAutomationTransform' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update a Lab Automation Transform step - tags: - - Lab Automation - /automation-input-generators/{input_generator_id}: - get: - description: Get an Automation Input Generator - operationId: getAutomationInputGenerator - parameters: - - in: path - name: input_generator_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationInputGenerator' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get an Automation Input Generator - tags: - - Lab Automation - patch: - description: Update an Automation Input Generator - operationId: updateAutomationInputGenerator - parameters: - - in: path - name: input_generator_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationInputGeneratorUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationInputGenerator' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update an Automation Input Generator - tags: - - Lab Automation - /automation-input-generators/{input_generator_id}:generate-input: - post: - description: Generate Input with an Automation Input Generator - operationId: generateInputWithAutomationInputGenerator - parameters: - - in: path - name: input_generator_id - required: true - schema: - type: string - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the Automation Input Generator with the generated - file. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Generate Input with an Automation Input Generator - tags: - - Lab Automation - /automation-output-processors: - get: - description: List Automation Output Processors which have an attached file - operationId: listAutomationOutputProcessors - parameters: - - description: Id of the Run - in: query - name: assayRunId - schema: - type: string - - description: Name of the Automation File Config - in: query - name: automationFileConfigName - schema: - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived processors. - Use "ANY_ARCHIVED" to filter for archived processors regardless of reason. - Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and - unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessorsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List non-empty Automation Output Processors - tags: - - Lab Automation - post: - description: Create Automation Output Processor - operationId: createAutomationOutputProcessor - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessorCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessor' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create Automation Output Processor - tags: - - Lab Automation - /automation-output-processors/{output_processor_id}: - get: - description: Get an Automation Output Processor - operationId: getAutomationOutputProcessor - parameters: - - in: path - name: output_processor_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessor' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get an Automation Output Processor - tags: - - Lab Automation - patch: - description: Update an Automation Output Processor - operationId: updateAutomationOutputProcessor - parameters: - - in: path - name: output_processor_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessorUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessor' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update an Automation Output Processor - tags: - - Lab Automation - /automation-output-processors/{output_processor_id}:process-output: - post: - description: Process Output with an Automation Output Processor - operationId: processOutputWithAutomationOutputProcessor - parameters: - - in: path - name: output_processor_id - required: true - schema: - type: string - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the Automation Output Processor that was processed. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Process Output with an Automation Output Processor - tags: - - Lab Automation - /automation-output-processors:archive: - post: - description: Archive Automation Output Processors and linked Results - operationId: archiveAutomationOutputProcessors - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessorsArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessorArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive Automation Output Processors and linked Results - tags: - - Lab Automation - /automation-output-processors:unarchive: - post: - description: Unarchive Automation Output Processors and linked Results - operationId: unarchiveAutomationOutputProcessors - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessorsUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AutomationOutputProcessorArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive Automation Output Processors and linked Results - tags: - - Lab Automation - /batch-schemas: - get: - description: List batch schemas - operationId: listBatchSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BatchSchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List batch schemas - tags: - - Schemas - /batch-schemas/{schema_id}: - get: - description: Get a batch schema by ID - operationId: getBatchSchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BatchSchema' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a batch schema by ID - tags: - - Schemas - /blobs: - post: - description: ' - - This endpoint uploads a blob in a single API call. - - - Blobs larger than 10MB should be uploaded in [multiple parts](#/Blobs/createMultipartBlob). - The data64 parameter is the base64-encoded part contents, and the md5 parameter - is the hex-encoded MD5 hash of the part contents. For example, given the string - hello, data64 is aGVsbG8= and md5 is 5d41402abc4b2a76b9719d911017c592. - - ' - operationId: createBlob - requestBody: - content: - application/json: - examples: - raw_file: - summary: A file containing the string "hello" - value: - data64: aGVsbG8= - md5: 5d41402abc4b2a76b9719d911017c592 - mimeType: text/plain - name: hello.txt - type: RAW_FILE - visualization_file: - summary: A .png image - value: - data64: iVBORw0KGgoAAAANSUhEUgAAAB4AAAAUBAMAAABohZD3AAAAG1BMVEUAAAD////f39+/v78fHx9/f39fX1+fn58/Pz+3dh1rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAT0lEQVQYlWNgoDlQBhGF7AIwvjOIYGJQwMkPSigsAPLZhRrAfCe3sgAzID+dDaLEmcNUUBTIL2NQgfLNAkD6k1wg8oqFooUahepCMP00BQC95QvY1zDquQAAAABJRU5ErkJggg== - md5: 50170053b55179167f1c21350c869bb7 - mimeType: image/png - name: hello.png - type: VISUALIZATION - schema: - $ref: '#/components/schemas/BlobCreate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Blob' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Upload single-part blob - tags: - - Blobs - /blobs/{blob_id}: - get: - description: Get a Blob - operationId: getBlob - parameters: - - in: path - name: blob_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Blob' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a Blob - tags: - - Blobs - /blobs/{blob_id}/download: - get: - description: "Download a blob.\n\nThis endpoint issues a 302 redirect to a pre-signed\ - \ download link.\nIt does not consume from the standard rate-limit.\n\nExample\ - \ `wget` usage with a User API Key:\n```bash\nexport BLOB_ID=\"ffe43fd5-b928-4996-9b7f-40222cd33d8e\"\ - \nwget \"https://tenant.benchling.com/api/v2/blobs/$BLOB_ID/download\" \\\n\ - \ --user $API_TOKEN \\ # Your API Key\n --password '' \\ \ - \ # Leave password empty\n --content-disposition # Save file with\ - \ original filename\n```\n\n**Note: Calling this endpoint from a browser is\ - \ not supported.**\n" - operationId: getBlobFile - parameters: - - in: path - name: blob_id - required: true - schema: - type: string - responses: - '200': - description: OK - '302': - description: Redirect to Content Location - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Download a blob - tags: - - Blobs - /blobs/{blob_id}/download-url: - get: - description: Get a Blob's download url - operationId: getBlobUrl - parameters: - - in: path - name: blob_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BlobUrl' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a Blob's download url - tags: - - Blobs - /blobs/{blob_id}/parts: - post: - description: ' - - Upload a part of the blob. This part must be at least 5MB, unless it''s the - last or only part. It''s recommended to keep the part size around 10MB. - - - The data64 parameter is the base64-encoded part contents, and the md5 parameter - is the hex-encoded MD5 hash of the part contents. For example, given the string - hello, data64 is aGVsbG8= and md5 is 5d41402abc4b2a76b9719d911017c592. - - - ## Multipart Upload - - - If a blob is larger than 10MB, it should be uploaded in multiple parts using - the following endpoints: - - - [Start a multi-part blob upload](#/Blobs/createMultipartBlob) - - - [Upload a blob part](#/Blobs/createBlobPart) - - - [Complete a blob upload](#/Blobs/completeMultipartBlob) - - - Each part has a *partNumber* and an *eTag*. The part number can be any number - between 1 to 10,000, inclusive - this number should be unique and identifies - the order of the part in the final blob. The eTag of a part is returned in - the API response - this eTag must be specified when completing the upload - in order to ensure the server has received all the expected parts. - - ' - operationId: createBlobPart - parameters: - - in: path - name: blob_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BlobPartCreate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BlobPart' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Upload a part of a multi-part blob - tags: - - Blobs - /blobs/{blob_id}:abort-upload: - post: - description: Abort multi-part blob upload - operationId: abortMultipartBlob - parameters: - - in: path - name: blob_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EmptyObject' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Abort multi-part blob upload - tags: - - Blobs - /blobs/{blob_id}:complete-upload: - post: - description: ' - - Combine blob parts into a single blob. - - - ## Multipart Upload - - - If a blob is larger than 10MB, it should be uploaded in multiple parts using - the following endpoints: - - - [Start a multi-part blob upload](#/Blobs/createMultipartBlob) - - - [Upload a blob part](#/Blobs/createBlobPart) - - - [Complete a blob upload](#/Blobs/completeMultipartBlob) - - - Each part must be at least 5MB in size, except for the last part. We recommend - keeping each part to under 10MB when uploading. - - - Each part has a *partNumber* and an *eTag*. The part number can be any number - between 1 to 10,000, inclusive - this number should be unique and identifies - the order of the part in the final blob. The eTag of a part is returned in - the API response - this eTag must be specified when completing the upload - in order to ensure the server has received all the expected parts. - - ' - operationId: completeMultipartBlob - parameters: - - in: path - name: blob_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BlobComplete' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Blob' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Complete multi-part blob upload - tags: - - Blobs - /blobs:bulk-get: - get: - description: Bulk get Blobs by UUID - operationId: bulkGetBlobs - parameters: - - description: Comma-separated list of blob IDs. - in: query - name: blobIds - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: blobs.id,blobs.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BlobsBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk get Blobs by UUID - tags: - - Blobs - /blobs:start-multipart-upload: - post: - description: ' - - Blobs may be uploaded using multi-part upload. This endpoint initiates the - upload process - blob parts can then be uploaded in multiple blob parts. - - - ## Multipart Upload - - - If a blob is larger than 10MB, it should be uploaded in multiple parts using - the following endpoints: - - - [Start a multi-part blob upload](#/Blobs/createMultipartBlob) - - - [Upload a blob part](#/Blobs/createBlobPart) - - - [Complete a blob upload](#/Blobs/completeMultipartBlob) - - - Each part must be at least 5MB in size, except for the last part. We recommend - keeping each part to under 10MB when uploading. - - - Each part has a *partNumber* and an *eTag*. The part number can be any number - between 1 to 10,000, inclusive - this number should be unique and identifies - the order of the part in the final blob. The eTag of a part is returned in - the API response - this eTag must be specified when completing the upload - in order to ensure the server has received all the expected parts. - - ' - operationId: createMultipartBlob - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BlobMultipartCreate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Blob' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Initiate multi-part blob upload - tags: - - Blobs - /box-schemas: - get: - description: List box schemas - operationId: listBoxSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BoxSchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List box schemas - tags: - - Schemas - /box-schemas/{schema_id}: - get: - description: Get a box schema by ID - operationId: getBoxSchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BoxSchema' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a box schema by ID - tags: - - Schemas - /boxes: - get: - description: List boxes - operationId: listBoxes - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are barcode, - name, modifiedAt, and createdAt. Optionally add :asc or :desc to specify - ascending or descending order. Default is modifiedAt. - - ' - enum: - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - - createdAt - - createdAt:asc - - createdAt:desc - - barcode - - barcode:asc - - barcode:desc - nullable: false - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a box. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: 'Name substring of a box. Restricts results to those with names - that include the provided substring. - - ' - in: query - name: nameIncludes - schema: - type: string - - description: 'Only return boxes that have the specified number of empty positions - - ' - in: query - name: emptyPositions - schema: - type: integer - - description: 'Only return boxes that have greater-than or equal-to the specified - number of empty positions. - - ' - in: query - name: emptyPositions.gte - schema: - type: integer - - description: 'Only return boxes that have greater-than the specified number - of empty positions. - - ' - in: query - name: emptyPositions.gt - schema: - type: integer - - description: 'Only return boxes that have less-than or equal-to the specified - number of empty positions. - - ' - in: query - name: emptyPositions.lte - schema: - type: integer - - description: 'Only return boxes that have less-than the specified number of - empty positions. - - ' - in: query - name: emptyPositions.lt - schema: - type: integer - - description: 'Only return boxes that have the specified number of empty containers - (containers without contents). - - ' - in: query - name: emptyContainers - schema: - type: integer - - description: 'Only return boxes that have greater-than or equal-to the specified - number of empty containers (containers without contents). - - ' - in: query - name: emptyContainers.gte - schema: - type: integer - - description: 'Only return boxes that have greater-than the specified number - of empty containers (containers without contents). - - ' - in: query - name: emptyContainers.gt - schema: - type: integer - - description: 'Only return boxes that have less-than or equal-to the specified - number of empty containers (containers without contents). - - ' - in: query - name: emptyContainers.lte - schema: - type: integer - - description: 'Only return boxes that have less-than the specified number of - empty containers (containers without contents). - - ' - in: query - name: emptyContainers.lt - schema: - type: integer - - description: 'ID of a location. Restricts results to those located in the - specified inventory. - - ' - in: query - name: ancestorStorageId - schema: - type: string - - description: 'ID of a entity, or entity schema. Restricts results to those - that hold containers with entities associated with the specified ID. - - ' - in: query - name: storageContentsId - schema: - type: string - - description: 'Comma-separated list of IDs of entities. Restricts results to - those that hold containers with at least one of the specified entities. - - ' - in: query - name: storageContentsIds - schema: - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived boxes. Use "ANY_ARCHIVED" - to filter for archived boxes regardless of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" - to return items for both archived and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: box_Jx8Zsphf,box_s9Zv7Jto,box_mFDuLwA6 - type: string - - description: 'Comma-separated list of barcodes. Matches all of the provided - barcodes, or returns a 400 error that includes a list of which barcodes - are invalid. - - ' - in: query - name: barcodes - schema: - example: 10x10-BOX105,10x10-BOX115 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BoxesPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List boxes - tags: - - Boxes - post: - description: Create a box - operationId: createBox - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BoxCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Box' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a box - tags: - - Boxes - /boxes/{box_id}: - get: - description: Get a box - operationId: getBox - parameters: - - in: path - name: box_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Box' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get a box - tags: - - Boxes - patch: - description: Update a box - operationId: updateBox - parameters: - - in: path - name: box_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BoxUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Box' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update a box - tags: - - Boxes - /boxes/{box_id}/contents: - get: - description: List a box's contents - operationId: listBoxContents - parameters: - - in: path - name: box_id - required: true - schema: - type: string - - description: Number of results to return. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BoxContentsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: List a box's contents - tags: - - Boxes - /boxes:archive: - post: - description: Archive boxes and any containers of the boxes - operationId: archiveBoxes - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BoxesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BoxesArchivalChange' - description: OK - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - summary: Archive boxes - tags: - - Boxes - /boxes:bulk-get: - get: - description: BulkGet boxes - operationId: bulkGetBoxes - parameters: - - in: query - name: boxIds - schema: - type: string - - in: query - name: barcodes - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BoxesBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: BulkGet boxes - tags: - - Boxes - /boxes:unarchive: - post: - description: Unarchive boxes and the containers that were archived along with - them - operationId: unarchiveBoxes - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BoxesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BoxesArchivalChange' - description: OK - summary: Unarchive boxes - tags: - - Boxes - /codon-usage-tables: - get: - description: 'List tables with codon usage data for organisms that can be specified - for other Benchling operations. - - ' - operationId: listCodonUsageTables - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: name:asc - description: 'Method by which to order search results. Valid sort is name - (entity name, alphabetical). Optionally add :asc or :desc to specify ascending - or descending order. - - ' - enum: - - name - - name:asc - - name:desc - nullable: false - type: string - - description: Name of a codon usage table (tables are named for the organisms - that they represent). Restricts results to those with the specified name. - in: query - name: name - schema: - example: Arabidopsis thaliana - type: string - - description: Name substring of a codon usage table (tables are named for the - organisms that they represent). Restricts results to those with names that - include the provided substring. - in: query - name: nameIncludes - schema: - example: thaliana - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: codtab_VfVOART1,codtab_RFhDGaaC - type: string - - description: 'Comma-separated list of names. Restricts results to those that - match any of the specified names. - - ' - in: query - name: names.anyOf - schema: - example: Arabidopsis thaliana,Anopheles stephensi - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/CodonUsageTablesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List codon usage tables for organisms - tags: - - Codon Usage Tables - /container-schemas: - get: - description: List container schemas - operationId: listContainerSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerSchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List container schemas - tags: - - Schemas - /container-schemas/{schema_id}: - get: - description: Get a container schema by ID - operationId: getContainerSchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerSchema' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a container schema by ID - tags: - - Schemas - /containers: - get: - description: List containers - operationId: listContainers - parameters: - - description: Number of results to return. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: 'Method by which to order search results. Valid sorts are barcode, - name, modifiedAt, and createdAt. Optionally add :asc or :desc to specify - ascending or descending order. Default is modifiedAt. - - ' - in: query - name: sort - schema: - default: modifiedAt - enum: - - createdAt - - barcode - - modifiedAt - - name - - barcode:asc - - modifiedAt:asc - - name:asc - - barcode:desc - - modifiedAt:desc - - name:desc - - createdAt:asc - - createdAt:desc - nullable: false - type: string - - description: ID of a schema. Restricts results to those of the specified schema. - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a container. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: 'Name substring of a container. Restricts results to those with - names that include the provided substring. - - ' - in: query - name: nameIncludes - schema: - type: string - - description: ID of a plate, box, or location. Restricts results to those located - in the specified inventory. - in: query - name: ancestorStorageId - schema: - type: string - - description: 'ID of an entity or entity schema. Restricts results to those - that contain the specified entities or entities of the specified schema. - - ' - in: query - name: storageContentsId - schema: - type: string - - description: 'Comma-separated list of IDs of entities. Restricts results to - those that hold containers with at least one of the specified entities. - - ' - in: query - name: storageContentsIds - schema: - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived containers. - Use "ANY_ARCHIVED" to filter for archived containers regardless of reason. - Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and - unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of check-out statuses. Restricts results - to those that match one of the specified statuses. Valid statuses are AVAILABLE, - RESERVED, and CHECKED_OUT. - - ' - in: query - name: checkoutStatus - schema: - enum: - - AVAILABLE - - RESERVED - - CHECKED_OUT - type: string - - description: 'Comma-separated list of user or team IDs. Maximum of 100. Restricts - results to those that are reserved or checked out for a user or team who - matches any of the specified IDs or returns a 400 error with a list of invalid - IDs. - - ' - in: query - name: checkoutAssigneeIds.anyOf - schema: - example: ent_a0SApq3z,team_Il92ydiY - type: string - - description: 'Comma-separated list of restriction statuses. Restricts results - to those that match one of the specified statuses. Valid statuses are RESTRICTED, - UNRESTRICTED, and NOT_APPLICABLE. - - ' - in: query - name: restrictionStatus - schema: - $ref: '#/components/schemas/SampleRestrictionStatus' - - description: 'Comma-separated list of user or team IDs. Restricts results - to those that match all of the specified IDs or returns a 400 error with - a list of invalid IDs. - - ' - in: query - name: sampleOwnerIds.allOf - schema: - example: ent_a0SApq3z,team_Il92ydiY - type: string - - description: 'Comma-separated list of user or team IDs. Maximum of 100. Restricts - results to those that match any of the specified IDs or returns a 400 error - with a list of invalid IDs. - - ' - in: query - name: sampleOwnerIds.anyOf - schema: - example: ent_a0SApq3z,team_Il92ydiY - type: string - - description: 'Comma-separated list of user or team IDs. Restricts results - to those that do not match any of the specified IDs or returns a 400 error - with a list of invalid IDs. - - ' - in: query - name: sampleOwnerIds.noneOf - schema: - example: ent_a0SApq3z,team_Il92ydiY - type: string - - description: 'Comma-separated list of user, team, or app IDs. Restricts results - to those that match all of the specified IDs or returns a 400 error with - a list of invalid IDs. - - ' - in: query - name: restrictedSamplePartyIds.allOf - schema: - example: ent_a0SApq3z,team_Il92ydiY - type: string - - description: 'Comma-separated list of user, team, or app IDs. Maximum of 100. - Restricts results to those that match any of the specified IDs or returns - a 400 error with a list of invalid IDs. - - ' - in: query - name: restrictedSamplePartyIds.anyOf - schema: - example: ent_a0SApq3z,team_Il92ydiY - type: string - - description: 'Comma-separated list of user, team, or app IDs. Restricts results - to those that do not match any of the specified IDs or returns a 400 error - with a list of invalid IDs. - - ' - in: query - name: restrictedSamplePartyIds.noneOf - schema: - example: ent_a0SApq3z,team_Il92ydiY - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: con_Q6uhNZvw,con_OwmERWGE,con_nzuDFhNvz - type: string - - description: 'Comma-separated list of barcodes. Matches all of the provided - barcodes, or returns a 400 error that includes a list of which barcodes - are invalid. - - ' - in: query - name: barcodes - schema: - example: W103371,W103343,W103366 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: containers.id,containers.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersPaginatedList' - description: OK - '400': - content: - application/json: - schema: - allOf: - - $ref: '#/components/schemas/BadRequestError' - properties: - invalidIds: - items: - type: string - type: array - type: object - description: Bad Request - summary: List containers - tags: - - Containers - post: - description: Create a new container - operationId: createContainer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Container' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a new container - tags: - - Containers - /containers/{container_id}: - get: - description: get a container by id - operationId: getContainer - parameters: - - in: path - name: container_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Container' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: get a container by id - tags: - - Containers - patch: - description: update a container - operationId: updateContainer - parameters: - - in: path - name: container_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Container' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: update a container - tags: - - Containers - /containers/{container_id}/contents: - get: - description: List a container's contents - operationId: listContainerContents - parameters: - - in: path - name: container_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerContentsList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: List a container's contents - tags: - - Containers - /containers/{container_id}/contents/{containable_id}: - delete: - description: Delete a container content - operationId: deleteContainerContent - parameters: - - in: path - name: container_id - required: true - schema: - type: string - - in: path - name: containable_id - required: true - schema: - type: string - responses: - '204': - description: No Content - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Delete a container content - tags: - - Containers - get: - description: Get a container content - operationId: getContainerContent - parameters: - - in: path - name: container_id - required: true - schema: - type: string - - in: path - name: containable_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerContent' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a container content - tags: - - Containers - patch: - description: Update a container content - operationId: updateContainerContent - parameters: - - in: path - name: container_id - required: true - schema: - type: string - - in: path - name: containable_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerContentUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerContent' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update a container content - tags: - - Containers - /containers/{destination_container_id}:transfer: - post: - description: 'Transfers a volume of an entity or container into a destination - container. - - Transfering a volume is cumulative with the existing destination container''s - contents. To transfer an entire container''s contents, the sourceContainerId - should be specified. To otherwise transfer multiple entities within a container, - you can make multiple calls to this endpoint, specifying a single entity with - each call. - - ' - operationId: transferIntoContainer - parameters: - - in: path - name: destination_container_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerTransfer' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EmptyObject' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - summary: Transfer into container - tags: - - Containers - /containers:archive: - post: - description: Archive containers - operationId: archiveContainers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - summary: Archive containers - tags: - - Containers - /containers:bulk-create: - post: - description: Bulk create containers - operationId: bulkCreateContainers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of Containers that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk create containers. Limit of 1000 containers per request. - tags: - - Containers - /containers:bulk-get: - get: - description: Bulk get a set of containers. Provide either containerIds or barcodes, - not both. - operationId: bulkGetContainers - parameters: - - description: 'Comma-separated list of container IDs. - - ' - in: query - name: containerIds - schema: - type: string - - description: 'Comma-separated list of barcodes. Matches all of the provided - barcodes, or returns a 400 error that includes a list of which barcodes - are invalid. - - ' - in: query - name: barcodes - schema: - example: W102477,W102478 - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: containers.id,containers.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk get a set of containers - tags: - - Containers - /containers:bulk-update: - post: - description: Bulk update containers - operationId: bulkUpdateContainers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of Containers that were updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk update containers - tags: - - Containers - /containers:check-in: - post: - description: Check in containers to signify that they are available for use. - operationId: checkinContainers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersCheckin' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EmptyObject' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - summary: Check in containers - tags: - - Containers - /containers:check-out: - post: - description: Check out containers to signify that they are in use. - operationId: checkoutContainers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersCheckout' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EmptyObject' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - summary: Check out containers - tags: - - Containers - /containers:print-labels: - post: - description: Print labels. Supported print methods are "REMOTE_PRINT_SERVER", - "LEGACY_HTTP", and "LEGACY_TCP". - operationId: printLabels - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PrintLabels' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EmptyObject' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Print labels - tags: - - Containers - /containers:reserve: - post: - description: Reserve containers to signify that someone plans to use the containers. - operationId: reserveContainers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersCheckout' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EmptyObject' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - summary: Reserve containers - tags: - - Containers - /containers:unarchive: - post: - description: Unarchive containers - operationId: unarchiveContainers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainersArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive containers - tags: - - Containers - /custom-entities: - get: - description: List custom entities - operationId: listCustomEntities - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a custom entity. Restricts results to those with the - specified name, alias, or entity registry ID. - in: query - name: name - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: customEntities.id,customEntities.modifiedAt - type: string - - description: 'Name substring of a custom entity. Restricts results to those - with names, aliases, or entity registry IDs that include the provided substring. - - ' - in: query - name: nameIncludes - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. - in: query - name: folderId - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to custom - entities mentioned in those entries. - - ' - in: query - name: mentionedIn - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'ID of a registry. Restricts results to those registered in this - registry. Specifying "null" returns unregistered items. - - ' - in: query - name: registryId - schema: - nullable: true - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived custom entities. - Use "ANY_ARCHIVED" to filter for archived custom entities regardless of - reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived - and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of resource IDs. Restricts results to those - that mention the given items in the description. - - ' - in: query - name: mentions - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: bfi_blhxTUl1,bfi_y5bkDmJp,bfi_xwfILBog - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case insensitive. Warning - this filter can be non-performant due - to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of entity registry IDs. Maximum of 100. - Restricts results to those that match any of the specified registry IDs - - ' - in: query - name: entityRegistryIds.anyOf - schema: - example: TP001,TP002 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma separated list of user or app IDs. Maximum of 100. - in: query - name: authorIds.anyOf - schema: - example: ent_a0SApq3z,ent_b4AApz9b - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntitiesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List custom entities - tags: - - Custom Entities - post: - description: Create a custom entity - operationId: createCustomEntity - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntityCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntity' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '503': - description: Deprecated, a 429 is returned for too many requests - summary: Create a custom entity - tags: - - Custom Entities - /custom-entities/{custom_entity_id}: - get: - description: Get a custom entity - operationId: getCustomEntity - parameters: - - in: path - name: custom_entity_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntity' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get a custom entity - tags: - - Custom Entities - patch: - description: Update a custom entity - operationId: updateCustomEntity - parameters: - - in: path - name: custom_entity_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntityUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntity' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update a custom entity - tags: - - Custom Entities - /custom-entities/{entity_registry_id}:upsert: - patch: - description: 'Create or update a registered custom entity. - - - Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). - - ' - operationId: upsertCustomEntity - parameters: - - example: entity_registry_id_001 - in: path - name: entity_registry_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntityUpsertRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntity' - description: Updated - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntity' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create or update a registered custom entity - tags: - - Custom Entities - /custom-entities:archive: - post: - description: Archive custom entities - operationId: archiveCustomEntities - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntitiesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntitiesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive custom entities - tags: - - Custom Entities - /custom-entities:bulk-create: - post: - description: Bulk Create custom entities. Limit of 2500 custom entities per - request. - operationId: bulkCreateCustomEntities - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntitiesBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of custom entities that were - created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create custom entities - tags: - - Custom Entities - /custom-entities:bulk-get: - get: - description: Bulk get custom entities by ID - operationId: bulkGetCustomEntities - parameters: - - description: 'Comma-separated list of IDs of custom entities to get. - - ' - in: query - name: customEntityIds - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: customEntities.id,customEntities.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntitiesList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk get custom entities by ID - tags: - - Custom Entities - /custom-entities:bulk-update: - post: - description: Bulk Update custom entities - operationId: bulkUpdateCustomEntities - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntitiesBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of custom entities that were - updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update custom entities - tags: - - Custom Entities - /custom-entities:bulk-upsert: - post: - description: 'All entities and their schemas must be within the same registry. - - - This operation performs the following actions: - - 1. Any existing objects are looked up in Benchling by the provided entity - registry ID. - - 2. Then, all objects are either created or updated accordingly, temporarily - skipping any schema field links between objects. - - 3. Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). You may link to objects - being created in the same operation. - - 4. Entities are registered, using the provided name and entity registry ID. - - - If any action fails, the whole operation is canceled and no objects are created - or updated. - - - Limit of 2500 custom entities per request. - - ' - operationId: bulkUpsertCustomEntities - parameters: [] - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntitiesBulkUpsertRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the resources of the objects that were - upserted. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk upsert custom entities - tags: - - Custom Entities - /custom-entities:unarchive: - post: - description: Unarchive custom entities - operationId: unarchiveCustomEntities - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntitiesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomEntitiesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive custom entities - tags: - - Custom Entities - /custom-notations: - get: - description: List all available custom notations for specifying modified nucleotide - sequences - operationId: listCustomNotations - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/CustomNotationsPaginatedList' - description: OK - summary: List custom notations - tags: - - Custom Notations - - DNA Oligos - - RNA Oligos - /dna-alignments: - get: - deprecated: true - description: List DNA Alignments - operationId: listDNAAlignments - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a DNA Alignment. Restricts results to those with the - specified name. - in: query - name: name - schema: - type: string - - description: Name substring of a DNA Alignment. Restricts results to those - with names that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: seqanl_VfVOART1,seqanl_RFhDGaaC - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of sequence ids that own one or more DNA - Alignments (i.e. ids of sequences used as the template in a Template Alignment - or created as the consensus sequence from a Consensus Alignment). Matches - all of the provided IDs, or returns a 400 error that includes a list of - which IDs are invalid. - - ' - in: query - name: sequenceIds - schema: - example: seq_VfVOART1,seq_RFhDGaaC - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaAlignmentsPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List DNA Alignments - tags: - - DNA Alignments - /dna-alignments/{dna_alignment_id}: - delete: - deprecated: true - description: Delete a DNA Alignment - operationId: deleteDNAAlignment - parameters: - - in: path - name: dna_alignment_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EmptyObject' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Delete a DNA Alignment - tags: - - DNA Alignments - get: - deprecated: true - description: Get a DNA Alignment - operationId: getDNAAlignment - parameters: - - in: path - name: dna_alignment_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaAlignment' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get a DNA Alignment - tags: - - DNA Alignments - /dna-alignments:create-consensus-alignment: - post: - deprecated: true - description: Create a consensus DNA alignment - operationId: createDnaConsensusAlignment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaConsensusAlignmentCreate' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the [DNA Alignment](#/DNA%20Alignments/getDNAAlignment) - resource that was created. - - ' - summary: Create a consensus DNA alignment - tags: - - DNA Alignments - /dna-alignments:create-template-alignment: - post: - deprecated: true - description: Create a template DNA alignment - operationId: createDnaTemplateAlignment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaTemplateAlignmentCreate' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the [DNA Alignment](#/DNA%20Alignments/getDNAAlignment) - resource that was created. - - ' - summary: Create a template DNA alignment - tags: - - DNA Alignments - /dna-oligos: - get: - description: List DNA Oligos - operationId: listDNAOligos - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a DNA Oligo. Restricts results to those with the specified - name, alias, or entity registry ID. - in: query - name: name - schema: - type: string - - description: Name substring of a DNA Oligo. Restricts results to those with - names, aliases, or entity registry IDs that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Full bases of the DNA Oligo. Restricts results to those with - the specified bases, case-insensitive, allowing for circular or reverse - complement matches. Does not allow partial matching or loose matching via - degenerate bases. - - ' - in: query - name: bases - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. - in: query - name: folderId - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to DNA - Oligos mentioned in those entries. - - ' - in: query - name: mentionedIn - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'ID of a registry. Restricts results to those registered in this - registry. Specifying "null" returns unregistered items. - - ' - in: query - name: registryId - schema: - nullable: true - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived DNA Oligos. - Use "ANY_ARCHIVED" to filter for archived DNA Oligos regardless of reason. - Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and - unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of item IDs. Restricts results to those - that mention the given items in the description. - - ' - in: query - name: mentions - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: seq_yWs5X7lv,seq_RhYGVnHF - type: string - - description: 'Comma-separated list of entity registry IDs. Maximum of 100. - Restricts results to those that match any of the specified registry IDs. - - ' - in: query - name: entityRegistryIds.anyOf - schema: - example: TP001,TP002 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case insensitive. Warning - this filter can be non-performant due - to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma separated list of user or app IDs. Maximum of 100. - in: query - name: authorIds.anyOf - schema: - example: ent_a0SApq3z,ent_b4AApz9b - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: dnaOligos.id,dnaOligos.modifiedAt - type: string - - description: ID of the notation to use in populating the customNotation field. - in: query - name: customNotationId - schema: - example: sntx_lRe007yZ - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligosPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List DNA Oligos - tags: - - DNA Oligos - post: - description: Create a DNA Oligo - operationId: createDNAOligo - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligoCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligo' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '503': - description: Deprecated, a 429 is returned for too many requests - summary: Create a DNA Oligo - tags: - - DNA Oligos - /dna-oligos/{entity_registry_id}:upsert: - patch: - description: 'Create or update a registered DNA oligo. - - - Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). - - ' - operationId: upsertDnaOligo - parameters: - - example: entity_registry_id_001 - in: path - name: entity_registry_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/OligoUpsertRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligo' - description: Updated - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligo' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create or update a registered DNA oligo - tags: - - DNA Oligos - /dna-oligos/{oligo_id}: - get: - description: Get a DNA Oligo - operationId: getDNAOligo - parameters: - - in: path - name: oligo_id - required: true - schema: - type: string - - description: ID of the notation to use in populating the customNotation field. - in: query - name: customNotationId - schema: - example: sntx_lRe007yZ - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligo' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get a DNA Oligo - tags: - - DNA Oligos - patch: - description: Update a DNA Oligo - operationId: updateDNAOligo - parameters: - - in: path - name: oligo_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligoUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligo' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update a DNA Oligo - tags: - - DNA Oligos - /dna-oligos:archive: - post: - description: Archive DNA Oligos - operationId: archiveDNAOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligosArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligosArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive DNA Oligos - tags: - - DNA Oligos - /dna-oligos:bulk-create: - post: - description: Bulk Create DNA Oligos. Limit of 1000 DNA Oligos per request. - operationId: bulkCreateDNAOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligosBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of DNA Oligos that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create DNA Oligos - tags: - - DNA Oligos - /dna-oligos:bulk-update: - post: - description: Bulk Update DNA Oligos - operationId: bulkUpdateDNAOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligosBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [DNA Oligo](#/DNA%20Oligos/getDNAOligo) - resources that were updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update DNA Oligos - tags: - - DNA Oligos - /dna-oligos:bulk-upsert: - post: - description: 'All entities and their schemas must be within the same registry. - - - This operation performs the following actions: - - 1. Any existing objects are looked up in Benchling by the provided entity - registry ID. - - 2. Then, all objects are either created or updated accordingly, temporarily - skipping any schema field links between objects. - - 3. Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). You may link to objects - being created in the same operation. - - 4. Entities are registered, using the provided name and entity registry ID. - - - If any action fails, the whole operation is canceled and no objects are created - or updated. - - - Limit of 1000 entities per request. - - ' - operationId: bulkUpsertDNAOligos - parameters: - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: dnaOligos.id,dnaOligos.creator.handle - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligosBulkUpsertRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the resources of the objects that were - upserted. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk upsert DNA oligos - tags: - - DNA Oligos - /dna-oligos:unarchive: - post: - description: Unarchive DNA Oligos - operationId: unarchiveDNAOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligosUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligosArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive DNA Oligos - tags: - - DNA Oligos - /dna-sequences: - get: - description: List DNA sequences - operationId: listDNASequences - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a DNA Sequence. Restricts results to those with the specified - name, alias, or entity registry ID. - in: query - name: name - schema: - type: string - - description: Name substring of a DNA Sequence. Restricts results to those - with names, aliases, or entity registry IDs that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: Full bases of the DNA sequence. Restricts results to those with - the specified bases, case-insensitive, allowing for circular or reverse - complement matches. Does not allow partial matching or loose matching via - degenerate bases. - in: query - name: bases - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. - in: query - name: folderId - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to DNA - sequences mentioned in those entries. - - ' - in: query - name: mentionedIn - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'ID of a registry. Restricts results to those registered in this - registry. Specifying "null" returns unregistered items. - - ' - in: query - name: registryId - schema: - nullable: true - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived DNA sequences. - Use "ANY_ARCHIVED" to filter for archived DNA sequences regardless of reason. - Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and - unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of item IDs. Restricts results to those - that mention the given items in the description. - - ' - in: query - name: mentions - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: seq_VfVOART1,seq_RFhDGaaC - type: string - - description: 'Comma-separated list of entity registry IDs. Maximum of 100. - Restricts results to those that match any of the specified registry IDs. - - ' - in: query - name: entityRegistryIds.anyOf - schema: - example: TP001,TP002 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case insensitive. Warning - this filter can be non-performant due - to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma separated list of user or app IDs. Maximum of 100. - in: query - name: authorIds.anyOf - schema: - example: ent_a0SApq3z,ent_b4AApz9b - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note**: Fields annotations, translations, and primers cannot be introspected - with the returning parameter, and any sub fields will be ignored. E.g.: - "dnaSequences.annotations.id" will return the same as "dnaSequences.annotations". - - ' - in: query - name: returning - schema: - example: dnaSequences.id, dnaSequences.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List DNA sequences - tags: - - DNA Sequences - post: - description: Create a DNA sequence - operationId: createDNASequence - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequenceCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequence' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '503': - description: Deprecated, a 429 is returned for too many requests - summary: Create a DNA sequence - tags: - - DNA Sequences - /dna-sequences/{dna_sequence_id}: - get: - description: Get a DNA sequence - operationId: getDNASequence - parameters: - - in: path - name: dna_sequence_id - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note**: Fields annotations, translations, and primers cannot be introspected - with the returning parameter, and any sub fields will be ignored. E.g.: - "annotations.id" will return the same as "annotations". - - ' - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequence' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get a DNA sequence - tags: - - DNA Sequences - patch: - description: Update a DNA sequence - operationId: updateDNASequence - parameters: - - in: path - name: dna_sequence_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequenceUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequence' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update a DNA sequence - tags: - - DNA Sequences - /dna-sequences/{entity_registry_id}:upsert: - patch: - description: 'Create or update a registered DNA sequence. - - - Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). - - ' - operationId: upsertDNASequence - parameters: - - in: path - name: entity_registry_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequenceUpsertRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequence' - description: OK - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequence' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create or update a registered DNA sequence - tags: - - DNA Sequences - /dna-sequences:archive: - post: - description: Archive DNA sequences - operationId: archiveDNASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive DNA sequences - tags: - - DNA Sequences - /dna-sequences:auto-annotate: - post: - description: Auto-annotate DNA sequences with matching features from specified - Feature Libraries. Limit of 2000 DNA Sequences per request. - operationId: autoAnnotateDnaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutoAnnotateDnaSequences' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task has an empty response. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Auto-annotate DNA sequences with matching features from specified Feature - Libraries - tags: - - DNA Sequences - /dna-sequences:autofill-parts: - post: - description: Autofill DNA sequence parts. Limit of 2000 DNA Sequences per request. - operationId: autofillDNASequenceParts - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutofillSequences' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task has an empty response. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Autofill DNA sequence parts - tags: - - DNA Sequences - /dna-sequences:autofill-transcriptions: - post: - description: Autofill DNA sequence transcriptions from RNA Sequences with matching - schemas and bases. Limit of 2000 DNA Sequences per request. - operationId: autofillDNASequenceTranscriptions - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutofillSequences' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task has an empty response. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Autofill DNA sequence transcriptions - tags: - - DNA Sequences - /dna-sequences:autofill-translations: - post: - description: Autofill DNA sequence translations. Limit of 2000 DNA Sequences - per request. - operationId: autofillDNASequenceTranslations - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutofillSequences' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task has an empty response. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Autofill DNA sequence translations - tags: - - DNA Sequences - /dna-sequences:bulk-create: - post: - description: Bulk Create DNA sequences. Limit of 1000 DNA Sequences per request. - operationId: bulkCreateDNASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [DNA Sequence](#/DNA%20Sequences/getDNASequence) - resources that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create DNA sequences - tags: - - DNA Sequences - /dna-sequences:bulk-get: - get: - description: Bulk get DNA sequences by ID - operationId: bulkGetDNASequences - parameters: - - description: 'Comma-separated list of IDs of DNA sequences to get. - - ' - in: query - name: dnaSequenceIds - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note**: Fields annotations, translations, and primers cannot be introspected - with the returning parameter, and any sub fields will be ignored. E.g.: - "dnaSequences.annotations.id" will return the same as "dnaSequences.annotations". - - ' - in: query - name: returning - schema: - example: dnaSequences.id,dnaSequences.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk get DNA sequences by ID - tags: - - DNA Sequences - /dna-sequences:bulk-update: - post: - description: Bulk Update DNA sequences. Limit of 1000 DNA Sequences per request. - operationId: bulkUpdateDNASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [DNA Sequence](#/DNA%20Sequences/getDNASequence) - resources that were updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update DNA sequences - tags: - - DNA Sequences - /dna-sequences:bulk-upsert: - post: - description: 'All entities and their schemas must be within the same registry. - - - This operation performs the following actions: - - 1. Any existing objects are looked up in Benchling by the provided entity - registry ID. - - 2. Then, all objects are either created or updated accordingly, temporarily - skipping any schema field links between objects. - - 3. Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). You may link to objects - being created in the same operation. - - 4. Entities are registered, using the provided name and entity registry ID. - - - If any action fails, the whole operation is canceled and no objects are created - or updated. - - - Limit of 1000 DNA Sequences per request. - - ' - operationId: bulkUpsertDnaSequences - parameters: - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: dnaSequences.id,dnaSequences.creator.handle - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesBulkUpsertRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the resources of the objects that were - upserted. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk upsert DNA sequences - tags: - - DNA Sequences - /dna-sequences:find-matching-regions: - post: - description: Find matching regions for DNA sequences. Limit of 1000 DNA Sequences - per request. - operationId: findMatchingRegionsDnaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesFindMatchingRegion' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - It is used to search for DNA sequences that are either subsequences or - exact matches of the provided target sequences. - - Each returned item represents the group of sequences that partially or - fully match the target sequence." - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Find matching regions for DNA sequences - tags: - - DNA Sequences - /dna-sequences:match-bases: - post: - description: 'Returns DNA Sequences that exactly match the provided bases. - - ' - operationId: matchBasesDnaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MatchBasesRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesPaginatedList' - description: A filtered list of DNA Sequences - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List entities with matching bases - tags: - - DNA Sequences - /dna-sequences:optimize-codons: - post: - description: Create codon-optimized DNA sequences. - operationId: optimizeCodons - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/OptimizeCodons' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task has an empty response. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create codon-optimized DNA sequences. - tags: - - DNA Sequences - /dna-sequences:search-bases: - post: - description: 'Returns DNA Sequences that contain the provided bases. Search - indexing is asynchronous, so results my be not be available immediately after - creation. - - ' - operationId: searchDnaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/SearchBasesRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesPaginatedList' - description: A filtered list of DNA Sequences - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Search DNA Sequences - tags: - - DNA Sequences - /dna-sequences:unarchive: - post: - description: Unarchive DNA sequences - operationId: unarchiveDNASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaSequencesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive DNA sequences - tags: - - DNA Sequences - /dropdowns: - get: - description: List dropdowns - operationId: listDropdowns - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DropdownSummariesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of dropdowns that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List dropdowns - tags: - - Dropdowns - post: - description: Create a dropdown - operationId: createDropdown - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DropdownCreate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Dropdown' - description: Created - headers: - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a dropdown - tags: - - Dropdowns - /dropdowns/{dropdown_id}: - get: - description: Get a dropdown - operationId: getDropdown - parameters: - - in: path - name: dropdown_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Dropdown' - description: OK - headers: - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a dropdown - tags: - - Dropdowns - patch: - description: Update a dropdown - operationId: updateDropdown - parameters: - - in: path - name: dropdown_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DropdownUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Dropdown' - description: OK - headers: - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update a dropdown - tags: - - Dropdowns - /dropdowns/{dropdown_id}/options:archive: - post: - description: Archive options belonging to a dropdown - operationId: archiveDropdownOptions - parameters: - - description: ID of the dropdown to archive options for. - in: path - name: dropdown_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DropdownOptionsArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DropdownOptionsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Archive dropdown options - tags: - - Dropdowns - /dropdowns/{dropdown_id}/options:unarchive: - post: - description: Unarchive options belonging to a dropdown - operationId: unarchiveDropdownOptions - parameters: - - description: ID of the dropdown to archive options for. - in: path - name: dropdown_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DropdownOptionsUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DropdownOptionsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Unarchive dropdown options - tags: - - Dropdowns - /entities:bulk-upsert: - post: - description: 'All entities and their schemas must be within the same registry. - - - This operation performs the following actions: - - 1. Any existing objects are looked up in Benchling by the provided entity - registry ID. - - 2. Then, all objects are either created or updated accordingly, temporarily - skipping any schema field links between objects. - - 3. Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). You may link to objects - being created in the same operation. - - 4. Entities are registered, using the provided name and entity registry ID. - - - If any action fails, the whole operation is canceled and no objects are created - or updated. - - ' - operationId: bulkUpsertEntities - parameters: - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: customEntities.id,customEntities.creator.handle - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EntitiesBulkUpsertRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the resources of the objects that were - upserted. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk upsert entities - tags: - - Entities - /entity-schemas: - get: - description: List entity schemas - operationId: listEntitySchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntitySchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List entity schemas - tags: - - Schemas - /entity-schemas/{schema_id}: - get: - description: Get an entity schema by ID - operationId: getEntitySchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntitySchema' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get an entity schema by ID - tags: - - Schemas - /entries: - get: - description: List notebook entries - operationId: listEntries - parameters: - - description: Number of results to return. Defaults to 50, maximum of 100. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: 'Method by which to order search results. Valid sorts are modifiedAt - (modified time, most recent first) and name (entity name, alphabetical). - Optionally add :asc or :desc to specify ascending or descending order. - - ' - in: query - name: sort - schema: - default: modifiedAt:desc - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of an Entry. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived entries. Use - "ANY_ARCHIVED" to filter for archived entries regardless of reason. Use - "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Restrict results to those with the given review status. Supported - statuses: IN_PROGRESS, ACCEPTED, REJECTED, NEEDS_REVIEW, RETRACTED - - ' - in: query - name: reviewStatus - schema: - enum: - - IN_PROGRESS - - ACCEPTED - - REJECTED - - NEEDS_REVIEW - - RETRACTED - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to those - mentioned within the entries in this list. - - ' - in: query - name: mentionedIn - schema: - type: string - - description: 'Comma-separated list of resource IDs. Restricts results to entries - that mention the given items. - - ' - in: query - name: mentions - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma-separated list of ids. Restricts results to entries that - have assignees of any of the specified ids. - in: query - name: assignedReviewerIds.anyOf - schema: - example: ent_a0SApq3z,ent_SdUvia1v - type: string - - description: Comma separated list of users IDs. - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma separated list of user or app IDs. Maximum of 100. - in: query - name: authorIds.anyOf - schema: - example: ent_a0SApq3z,ent_b4AApz9b - type: string - - description: Comma-separated list of Entry Display IDs. - in: query - name: displayIds - schema: - example: VPR001,VPR002 - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note:** "entries.days.notes" cannot be introspected with the returning - parameter, and any sub fields will be ignored. E.g., "entries.days.notes.text" - will return the same model as "entries.days.notes". - - ' - in: query - name: returning - schema: - example: entries.id, entries.name, entries.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntriesPaginatedList' - description: 'Returns a list of entries. Entries are notes that users can - take. They''re organized by "days" (which are user-configurable) and modeled - within each day as a list of "notes." Each note has a type - the simplest - is a "text" type, but lists, tables, and external files are also supported. - - - *Note:* the current Entry resource has a few limitations: - - - Formatting information is not yet supported. Header formatting, bolding, - and other stylistic information is not presented. - - - Data in tables is presented as text always - numeric values will need - to be parsed into floats or integers, as appropriate. - - - Note: Data in Results tables are not accessible through this API call. - Results table data can be called through the Results API calls. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List entries - tags: - - Entries - post: - description: Create a notebook entry - operationId: createEntry - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EntryCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Entry' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a notebook entry - tags: - - Entries - /entries/{entry_id}: - get: - description: Get a notebook entry by ID - operationId: getEntry - parameters: - - description: ID of the entry - in: path - name: entry_id - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note:** "days.notes" cannot be introspected with the returning parameter, - and any sub fields will be ignored. E.g., "days.notes.text" will return - the same model as "days.notes". - - ' - in: query - name: returning - schema: - example: id, name, modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntryById' - description: 'Returns a single entry. Entries are notes that users can take. - They''re organized by "days" (which are user-configurable) and modeled - within each day as a list of "notes." Each note has a type - the simplest - is a "text" type, but lists, tables, and external files are also supported. - - - *Note:* the current Entry resource has a few limitations: - - - Formatting information is not yet supported. Header formatting, bolding, - and other stylistic information is not presented. - - - Data in tables is presented as text always - numeric values will need - to be parsed into floats or integers, as appropriate. - - - Note: Data in Results tables are not accessible through this API call. - Results table data can be called through the Results API calls. - - ' - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a notebook entry by ID - tags: - - Entries - patch: - description: Update a notebook entry's metadata - operationId: updateEntry - parameters: - - description: ID of the entry - in: path - name: entry_id - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note:** "days.notes" cannot be introspected with the returning parameter, - and any sub fields will be ignored. E.g., "days.notes.text" will return - the same model as "days.notes". - - ' - in: query - name: returning - schema: - example: id, name, modifiedAt - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EntryUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Entry' - description: OK - summary: Update a notebook entry's metadata - tags: - - Entries - /entries/{entry_id}/external-files/{external_file_id}: - get: - description: 'Retrieves the metadata for an external file. Use the ''downloadURL'' - to download the actual file. (Expand the schema view for details) - - ' - operationId: getExternalFileMetadata - parameters: - - description: ID of the entry the file was uploaded to - in: path - name: entry_id - required: true - schema: - type: string - - description: ID of the external file - in: path - name: external_file_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntryExternalFileById' - description: OK - summary: 'Retrieves the metadata for an external file. Use the ''downloadURL'' - to download the actual file. - - ' - tags: - - Entries - /entries:archive: - post: - description: Archive notebook entries - operationId: archiveEntries - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EntriesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntriesArchivalChange' - description: OK - summary: Archive notebook entries - tags: - - Entries - /entries:bulk-get: - get: - description: Get notebook entries using entry IDs or display IDs - operationId: bulkGetEntries - parameters: - - description: Comma-separated list of Entry IDs. - in: query - name: entryIds - schema: - type: string - - description: Comma-separated list of Entry Display IDs. - in: query - name: displayIds - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note:** "entries.days.notes" cannot be introspected with the returning - parameter, and any sub fields will be ignored. E.g., "entries.days.notes.text" - will return the same model as "entries.days.notes". - - ' - in: query - name: returning - schema: - example: entries.id, entries.name, entries.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Entries' - description: 'Returns a list of entries. Entries are notes that users can - take. They''re organized by "days" (which are user-configurable) and modeled - within each day as a list of "notes." Each note has a type - the simplest - is a "text" type, but lists, tables, and external files are also supported. - - - *Note:* the current Entry resource has a few limitations: - - - Formatting information is not yet supported. Header formatting, bolding, - and other stylistic information is not presented. - - - Data in tables is presented as text always - numeric values will need - to be parsed into floats or integers, as appropriate. - - - Note: Data in Results tables are not accessible through this API call. - Results table data can be called through the Results API calls. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get notebook entries using entry IDs or display IDs - tags: - - Entries - /entries:unarchive: - post: - description: Unarchive notebook entries - operationId: unarchiveEntries - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EntriesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntriesArchivalChange' - description: OK - summary: Unarchive notebook entries - tags: - - Entries - /entry-schemas: - get: - description: List entry schemas - operationId: listEntrySchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntrySchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed entrys in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List entry schemas - tags: - - Schemas - /entry-schemas/{schema_id}: - get: - description: Get an Entry schema by ID - operationId: getEntrySchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntrySchemaDetailed' - description: OK - '400': - description: Bad Entry - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get an Entry schema by ID - tags: - - Schemas - /entry-templates: - get: - description: List entry templates - operationId: listEntryTemplates - parameters: - - description: Number of results to return. Defaults to 50, maximum of 100. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of an Entry Template. Restricts results to those with the - specified name. - in: query - name: name - schema: - type: string - - description: 'ID of a template collection. Resticts results to those in the - template collection. - - ' - in: query - name: templateCollectionId - schema: - example: tmplcol_jC7rOniv - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note:** "entryTemplates.days.notes" cannot be introspected with the returning - parameter, and any sub fields will be ignored. E.g., "entryTemplates.days.notes.text" - will return the same model as "entryTemplates.days.notes". - - ' - in: query - name: returning - schema: - example: entryTemplates.id,entryTemplates.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntryTemplatesPaginatedList' - description: 'Returns a list of entry templates. Entry templates are templates - that users can base new notebook entries off of. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List entry templates - tags: - - Entries - /entry-templates/{entry_template_id}: - get: - description: Get a notebook template entry by ID - operationId: getEntryTemplate - parameters: - - description: ID of the entry template - in: path - name: entry_template_id - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note:** "days.notes" cannot be introspected with the returning parameter, - and any sub fields will be ignored. E.g., "days.notes.text" will return - the same model as "days.notes". - - ' - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntryTemplate' - description: 'Returns a single entry template. Entry templates are templates - that users can base new notebook entries off of. - - ' - summary: Get a notebook template entry by ID - tags: - - Entries - patch: - description: Update a notebook template entry's metadata - operationId: updateEntryTemplate - parameters: - - description: ID of the template entry - in: path - name: entry_template_id - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note:** "days.notes" cannot be introspected with the returning parameter, - and any sub fields will be ignored. E.g., "days.notes.text" will return - the same model as "days.notes". - - ' - in: query - name: returning - schema: - example: id, name, modifiedAt - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EntryTemplateUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EntryTemplate' - description: OK - summary: Update a notebook template entry's metadata - tags: - - Entries - /enzymes: - get: - description: 'List enzymes that can be specified for other Benchling operations. - - ' - operationId: listEnzymes - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: name:asc - description: 'Method by which to order search results. Valid sort is name - (entity name, alphabetical). Optionally add :asc or :desc to specify ascending - or descending order. - - ' - enum: - - name - - name:asc - - name:desc - nullable: false - type: string - - description: Name of an enzyme. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: Name substring of an enzyme. Restricts results to those with - names that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: enz_VfVOART1,enz_RFhDGaaC - type: string - - description: 'Comma-separated list of names. Restricts results to those that - match any of the specified names. - - ' - in: query - name: names.anyOf - schema: - example: AarI,BcnI - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EnzymesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List enzymes - tags: - - Enzymes - /events: - get: - description: 'List Events - - - ## Event Sort Order - - - Events in Benchling are assigned a stable sort order that reflects when the - event was processed (not created). The createdAt time is not the stable sorted - order of events. For this reason event createdAt time may appear out of order. - - ' - operationId: listEvents - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts - results to those modified in the specified range. e.g. "2020-05-23". - - ' - in: query - name: createdAt.gte - schema: - type: string - - description: Event ID after which events will be returned. - in: query - name: startingAfter - schema: - type: string - - description: Comma-separated list of event types to return. - in: query - name: eventTypes - schema: - type: string - - description: When True, the API will always return a nextToken to enable polling - events indefinitely. - in: query - name: poll - schema: - type: boolean - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EventsPaginatedList' - description: ' - - Returns a list of event resources. For additional JSON examples, [click - here](https://docs.benchling.com/docs/events-reference#json-examples). - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List Events - tags: - - Events - /exports: - post: - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains a link to download the exported item from Amazon - S3. The download is a ZIP file that contains the exported PDFs. - - ' - operationId: exportItem - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ExportItemRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains a link to download the exported item from Amazon - S3. - - The download is a ZIP file that contains the exported PDFs. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Export Item - tags: - - Exports - /feature-libraries: - get: - description: List Feature Libraries - operationId: listFeatureLibraries - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are modifiedAt - (modified time, most recent first) and name (entity name, alphabetical). - Optionally add :asc or :desc to specify ascending or descending order. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a Feature Library. Restricts results to those with the - specified name. - in: query - name: name - schema: - type: string - - description: Name substring of a Feature Library. Restricts results to those - with names that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: featlib_VfVOART1,featlib_RFhDGaaC - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: featureLibraries.id,featureLibraries.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/FeatureLibrariesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List Feature Libraries - tags: - - Feature Libraries - post: - description: Create a Feature Library - operationId: createFeatureLibrary - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FeatureLibraryCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/FeatureLibrary' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a Feature Library - tags: - - Feature Libraries - /feature-libraries/{feature_library_id}: - get: - description: Get a feature library by ID - operationId: getFeatureLibrary - parameters: - - description: ID of feature library to get - in: path - name: feature_library_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/FeatureLibrary' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a feature library by ID - tags: - - Feature Libraries - patch: - description: 'Update a feature library. Note: Features cannot be updated from - this endpoint. - - Use the /features* endpoints to add or modify features. - - ' - operationId: updateFeatureLibrary - parameters: - - in: path - name: feature_library_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FeatureLibraryUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/FeatureLibrary' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update a feature library - tags: - - Feature Libraries - /features: - get: - description: List Features - operationId: listFeatures - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: Name of a Feature. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: feat_VfVOART1,feat_RFhDGaaC - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Id of a Feature Library. Restricts results to those associated - with the provided feature library - in: query - name: featureLibraryId - schema: - example: featlib_D0v2x9Q7 - type: string - - description: 'The type of feature, like gene, promoter, etc. Note: This is - an arbitrary string, not an enum - - ' - in: query - name: featureType - schema: - example: terminator - type: string - - description: The match type of the feature used to determine how auto-annotate - matches are made. - in: query - name: matchType - schema: - enum: - - nucleotide - - protein - example: nucleotide - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: features.id,features.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/FeaturesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List Features - tags: - - Feature Libraries - post: - description: Create a Feature - operationId: createFeature - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FeatureCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Feature' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a Feature - tags: - - Feature Libraries - /features/{feature_id}: - get: - description: Get a feature by ID - operationId: getFeature - parameters: - - description: ID of feature to get - in: path - name: feature_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Feature' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a feature by ID - tags: - - Feature Libraries - patch: - description: Update a feature - operationId: updateFeature - parameters: - - in: path - name: feature_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FeatureUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Feature' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update a feature - tags: - - Feature Libraries - /features:bulk-create: - post: - description: Bulk create Features - operationId: bulkCreateFeatures - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FeaturesBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of features that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk create Features - tags: - - Feature Libraries - /folders: - get: - description: List folders - operationId: listFolders - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Method by which to order search results. Valid sorts are modifiedAt - (modified time, most recent first) and name (folder name, alphabetical). - Optionally add :asc or :desc to specify ascending or descending order. - - ' - in: query - name: sort - schema: - default: name - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - name - - modifiedAt:asc - - name:asc - - modifiedAt:desc - - name:desc - nullable: false - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived folders. Use - "ANY_ARCHIVED" to filter for archived folders regardless of reason. Use - "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Name substring of a folder. Restricts results to those with - names that include the provided substring. - - ' - in: query - name: nameIncludes - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. Use - "NO_PARENT" to filter for root folders. - in: query - name: parentFolderId - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: lib_qQFY3WQH,lib_QvXryHdi,lib_3eF8mZjn - type: string - - description: Name of a folder. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - deprecated: true - description: 'Deprecated - Folder types have been merged, however this will - restrict to the pre-merge types. - - ' - in: query - name: section - schema: - enum: - - INVENTORY - - NOTEBOOK - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/FoldersPaginatedList' - description: OK - summary: List folders - tags: - - Folders - post: - description: Create folder - operationId: createFolder - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FolderCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Folder' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create folder - tags: - - Folders - /folders/{folder_id}: - get: - description: Get a folder by ID - operationId: getFolder - parameters: - - description: ID of folder to get - in: path - name: folder_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Folder' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a folder by ID - tags: - - Folders - /folders:archive: - post: - description: Archives folders and their contents - operationId: archiveFolders - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FoldersArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/FoldersArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive folders - tags: - - Folders - /folders:unarchive: - post: - description: Unarchives folders and the contents that were archived along with - them - operationId: unarchiveFolders - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FoldersUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/FoldersArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive folders - tags: - - Folders - /instruments/{instrument_query_id}/query: - get: - description: Get an instrument query - operationId: getInstrumentQuery - parameters: - - description: The instrument query ID - in: path - name: instrument_query_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/InstrumentQuery' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Get an instrument query - tags: - - Instrument Queries - /legacy-workflow-stage-runs/{stage_run_id}/input-samples: - get: - description: List legacy workflow stage run input samples - operationId: listLegacyWorkflowStageRunInputSamples - parameters: - - description: ID of the legacy workflow stage run to list input samples for - in: path - name: stage_run_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LegacyWorkflowSampleList' - description: OK - summary: List legacy workflow stage run input samples - tags: - - Legacy Workflows - /legacy-workflow-stage-runs/{stage_run_id}/output-samples: - get: - description: List legacy workflow stage run output samples - operationId: listLegacyWorkflowStageRunOutputSamples - parameters: - - description: ID of the legacy workflow stage run to list output samples for - in: path - name: stage_run_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LegacyWorkflowSampleList' - description: OK - summary: List legacy workflow stage run output samples - tags: - - Legacy Workflows - /legacy-workflow-stage-runs/{stage_run_id}/registered-samples: - get: - description: List legacy workflow stage run registered samples - operationId: listLegacyWorkflowStageRunRegisteredSamples - parameters: - - description: ID of the legacy workflow stage run to list registered samples - for - in: path - name: stage_run_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LegacyWorkflowSampleList' - description: OK - summary: List legacy workflow stage run registered samples - tags: - - Legacy Workflows - /legacy-workflow-stages/{stage_id}/workflow-stage-runs: - get: - description: List legacy workflow stage runs - operationId: listLegacyWorkflowStageRuns - parameters: - - description: ID of the legacy workflow stage to list runs for - in: path - name: stage_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LegacyWorkflowStageRunList' - description: OK - summary: List legacy workflow stage runs - tags: - - Legacy Workflows - /legacy-workflows: - get: - description: List legacy workflows - operationId: listLegacyWorkflows - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LegacyWorkflowList' - description: OK - summary: List legacy workflows - tags: - - Legacy Workflows - /legacy-workflows/{legacy_workflow_id}: - patch: - description: Update workflow metadata - operationId: UpdateLegacyWorkflowMetadata - parameters: - - description: ID of the legacy workflow to update - in: path - name: legacy_workflow_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LegacyWorkflowPatch' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LegacyWorkflow' - description: OK - summary: Update legacy workflow - tags: - - Legacy Workflows - /legacy-workflows/{legacy_workflow_id}/workflow-stages: - get: - description: List legacy workflow stages - operationId: listLegacyWorkflowStages - parameters: - - description: ID of the legacy workflow to list stages for - in: path - name: legacy_workflow_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LegacyWorkflowStageList' - description: OK - summary: List legacy workflow stages - tags: - - Legacy Workflows - /location-schemas: - get: - description: List location schemas - operationId: listLocationSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LocationSchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List location schemas - tags: - - Schemas - /location-schemas/{schema_id}: - get: - description: Get a location schema by ID - operationId: getLocationSchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LocationSchema' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a location schema by ID - tags: - - Schemas - /locations: - get: - description: List locations - operationId: listLocations - parameters: - - description: Number of results to return. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: 'Method by which to order search results. Valid sorts are barcode, - name, modifiedAt, and createdAt. Optionally add :asc or :desc to specify - ascending or descending order. Default is modifiedAt. - - ' - in: query - name: sort - schema: - default: modifiedAt - enum: - - barcode - - modifiedAt - - name - - barcode:asc - - modifiedAt:asc - - name:asc - - barcode:desc - - modifiedAt:desc - - name:desc - - createdAt - - createdAt:asc - - createdAt:desc - nullable: false - type: string - - description: ID of a schema. Restricts results to those of the specified schema. - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a location. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: 'Name substring of a location. Restricts results to those with - names that include the provided substring. - - ' - in: query - name: nameIncludes - schema: - type: string - - description: ID of a plate, box, or location. Restricts results to those located - in the specified inventory. - in: query - name: ancestorStorageId - schema: - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived locations. Use - "ANY_ARCHIVED" to filter for archived locations regardless of reason. Use - "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: loc_9fxPzGDy,loc_fALwBTI7,loc_GyxUeUIi - type: string - - description: 'Comma-separated list of barcodes. Matches all of the provided - barcodes, or returns a 400 error that includes a list of which barcodes - are invalid. - - ' - in: query - name: barcodes - schema: - example: b001, b002, f001 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LocationsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List locations - tags: - - Locations - post: - description: Create a location - operationId: createLocation - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LocationCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Location' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a location - tags: - - Locations - /locations/{location_id}: - get: - description: Get a location by ID - operationId: getLocation - parameters: - - description: ID of location to get - in: path - name: location_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Location' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a location by ID - tags: - - Locations - patch: - description: Update a location - operationId: updateLocation - parameters: - - description: ID of the location to update - in: path - name: location_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LocationUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Location' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update a location - tags: - - Locations - /locations:archive: - post: - description: Archive locations - operationId: archiveLocations - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LocationsArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LocationsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - summary: Archive locations - tags: - - Locations - /locations:bulk-get: - get: - description: BulkGet locations - operationId: bulkGetLocations - parameters: - - description: Comma-separated list of location IDs. - in: query - name: locationIds - schema: - type: string - - description: Comma-separated list of location barcodes. - explode: false - in: query - name: barcodes - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LocationsBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: BulkGet locations - tags: - - Locations - /locations:unarchive: - post: - description: Unarchive locations - operationId: unarchiveLocations - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LocationsUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LocationsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive locations - tags: - - Locations - /mixtures: - get: - description: List mixtures - operationId: listMixtures - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a mixture. Restricts results to those with the specified - name, alias, or entity registry ID. - in: query - name: name - schema: - type: string - - description: 'Name substring of a mixture. Restricts results to those with - names, aliases, or entity registry IDs that include the provided substring. - - ' - in: query - name: nameIncludes - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. - in: query - name: folderId - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to mixtures - mentioned in those entries. - - ' - in: query - name: mentionedIn - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'ID of a registry. Restricts results to those registered in this - registry. Specifying "null" returns unregistered items. - - ' - in: query - name: registryId - schema: - nullable: true - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived mixtures. Use - "ANY_ARCHIVED" to filter for archived mixtures regardless of reason. Use - "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of resource IDs. Restricts results to those - that mention the given items in the description. - - ' - in: query - name: mentions - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: bfi_blhxTUl1,bfi_y5bkDmJp,bfi_xwfILBog - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case insensitive. Warning - this filter can be non-performant due - to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of entity registry IDs. Maximum of 100. - Restricts results to those that match any of the specified registry IDs. - - ' - in: query - name: entityRegistryIds.anyOf - schema: - example: TP001,TP002 - type: string - - description: 'Comma-separated list of ingredient component entity ids. Matches - all mixtures that contain ingredients whose component entities match all - of the provided IDs, or returns a 400 error that includes a list of which - IDs are invalid. - - ' - in: query - name: ingredientComponentEntityIds - schema: - example: bfi_blhxTUl1,bfi_y5bkDmJp,bfi_xwfILBog - type: string - - description: 'Comma-separated list of ingredient component entity ids. Maximum - of 100. Matches all mixtures that contain ingredients whose component entities - match any of the provided IDs, or returns a 400 error that includes a list - of which IDs are invalid. - - ' - in: query - name: ingredientComponentEntityIds.anyOf - schema: - example: bfi_blhxTUl1,bfi_y5bkDmJp,bfi_xwfILBog - type: string - - description: Comma separated list of user or app IDs. Maximum of 100. - in: query - name: authorIds.anyOf - schema: - example: ent_a0SApq3z,ent_b4AApz9b - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MixturesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List mixtures - tags: - - Mixtures - post: - description: 'Create a mixture. - - To create a new child mixture (eg. a prep) from a parent mixture (eg. a recipe), - set the parent mixture field and specify the desired final state for your - ingredients. - - Benchling will recognize that any ingredients you specify that match ingredients - on the parent mixture (based on component entity) are inherited. This can - be seen on the returned `ingredients[i].hasParent` attribute. - - ' - operationId: createMixture - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MixtureCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Mixture' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '503': - description: Deprecated, a 429 is returned for too many requests - summary: Create a mixture - tags: - - Mixtures - /mixtures/{mixture_id}: - get: - description: Get a mixture - operationId: getMixture - parameters: - - in: path - name: mixture_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Mixture' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get a mixture - tags: - - Mixtures - patch: - description: 'Update a mixture. - - To change the parent mixture, set the parent mixture field and specify the - desired final state for your ingredients. - - Benchling will recognize that any ingredients you specify that match ingredients - on the parent mixture (based on component entity) are inherited. This can - be seen on the returned `ingredients[i].hasParent` attribute. - - ' - operationId: updateMixture - parameters: - - in: path - name: mixture_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MixtureUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Mixture' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update a mixture - tags: - - Mixtures - /mixtures:archive: - post: - description: Archive mixtures - operationId: archiveMixtures - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MixturesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MixturesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive mixtures - tags: - - Mixtures - /mixtures:bulk-create: - post: - description: 'Create multiple mixtures. Limit of 1000 mixtures per request. - - To create new child mixtures (eg. a prep) from parent mixtures (eg. a recipe), - set the parent mixture field and specify the desired final state for your - ingredients. - - Benchling will recognize that any ingredients you specify that match ingredients - on the parent mixtures (based on component entity) are inherited. This can - be seen on the returned `ingredients[i].hasParent` attribute. - - ' - operationId: bulkCreateMixtures - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MixturesBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of mixtures that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create mixtures - tags: - - Mixtures - /mixtures:bulk-update: - post: - description: 'Update multiple mixtures. - - To change the parent mixture on your specified mixtures, set the parent mixture - field and specify the desired final state for your ingredients. - - Benchling will recognize that any ingredients you specify that match ingredients - on the parent mixtures (based on component entity) are inherited. This can - be seen on the returned `ingredients[i].hasParent` attribute. - - ' - operationId: bulkUpdateMixtures - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MixturesBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of mixtures that were updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update mixtures - tags: - - Mixtures - /mixtures:unarchive: - post: - description: Unarchive mixtures - operationId: unarchiveMixtures - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MixturesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MixturesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive mixtures - tags: - - Mixtures - /molecules: - get: - description: List molecules - operationId: listMolecules - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a Molecule. Restricts results to those with the specified - name, alias, or entity registry ID. - in: query - name: name - schema: - type: string - - description: Name substring of a Molecule. Restricts results to those with - names, aliases, or entity registry IDs that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. - in: query - name: folderId - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to Molecules - mentioned in those entries. - - ' - explode: false - in: query - name: mentionedIn - schema: - items: - type: string - type: array - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'ID of a registry. Restricts results to those registered in this - registry. Specifying "null" returns unregistered items. - - ' - in: query - name: registryId - schema: - nullable: true - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: "Archive reason. Restricts results to those with the specified\ - \ archive reason. Use \u201CNOT_ARCHIVED\u201D to filter for unarchived\ - \ Molecules. Use \"ANY_ARCHIVED\" to filter for archived Molecules regardless\ - \ of reason. Use \"ANY_ARCHIVED_OR_NOT_ARCHIVED\" to return items for both\ - \ archived and unarchived.\n" - examples: - any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - arhived_reason: - summary: Includes items archived for a specific reason. - value: Retired - not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of item IDs. Restricts results to those - that mention the given items in the description. - - ' - explode: false - in: query - name: mentions - schema: - items: - type: string - type: array - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: mol_yWs5X7lv,mol_RhYGVnHF - type: string - - description: 'Comma-separated list of entity registry IDs. Maximum of 100. - Restricts results to those that match any of the specified registry IDs. - - ' - in: query - name: entityRegistryIds.anyOf - schema: - example: TP001,TP002 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of user or app IDs. Maximum of 100. - in: query - name: authorIds.anyOf - schema: - example: ent_a0SApq3z,ent_b4AApz9b - type: string - - description: mol-formatted string for a chemical substructure to search by - in: query - name: chemicalSubstructure.mol - schema: - example: "Format described at https://en.wikipedia.org/wiki/Chemical_table_file#Molfile\ - \ As an example, ethanol is represented as follows: ChEBI\n Marvin 10060515352D\n\ - \n 3 2 0 0 0 0 999 V2000\n 4.8667 -3.3230 0.0000\ - \ C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5812 -2.9105 0.0000\ - \ C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.2956 -3.3230 0.0000\ - \ O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 \ - \ 3 1 0 0 0 0\nM END\n" - type: string - - description: SMILES string for a chemical substructure to search by - in: query - name: chemicalSubstructure.smiles - schema: - example: CCO,C(C1C(C(C(C(O1)O)O)O)O)O - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculesPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: List Molecules - tags: - - Molecules - post: - description: Create a Molecule - operationId: createMolecule - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculeCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Molecule' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '503': - description: Deprecated, a 429 is returned for too many requests - summary: Create a Molecule - tags: - - Molecules - /molecules/{entity_registry_id}:upsert: - patch: - description: 'Create or update a registered Molecule. - - - Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). - - ' - operationId: upsertMolecule - parameters: - - in: path - name: entity_registry_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculeUpsertRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Molecule' - description: OK - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Molecule' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create or update a registered Molecule - tags: - - Molecules - /molecules/{molecule_id}: - get: - description: Get a Molecule - operationId: getMolecule - parameters: - - in: path - name: molecule_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Molecule' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get a Molecule - tags: - - Molecules - patch: - description: Update a Molecule - operationId: updateMolecule - parameters: - - in: path - name: molecule_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculeUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Molecule' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update a Molecule - tags: - - Molecules - /molecules:archive: - post: - description: Archive Molecules - operationId: archiveMolecules - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive Molecules - tags: - - Molecules - /molecules:bulk-create: - post: - description: Bulk Create Molecules - operationId: bulkCreateMolecules - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculesBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: Accepted - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create Molecules - tags: - - Molecules - /molecules:bulk-update: - post: - description: Bulk Update Molecules - operationId: bulkUpdateMolecules - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculesBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [Molecule](#/Molecules/getMolecule) - resources that were updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update Molecules - tags: - - Molecules - /molecules:bulk-upsert: - post: - description: 'All entities and their schemas must be within the same registry. - - - This operation performs the following actions: - - 1. Any existing objects are looked up in Benchling by the provided entity - registry ID. - - 2. Then, all objects are either created or updated accordingly, temporarily - skipping any schema field links between objects. - - 3. Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). You may link to objects - being created in the same operation. - - 4. Entities are registered, using the provided name and entity registry ID. - - - If any action fails, the whole operation is canceled and no objects are created - or updated. - - ' - operationId: bulkUpsertMolecules - parameters: - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: molecules.id,molecules.creator.handle - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculesBulkUpsertRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the resources of the objects that were - upserted. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk upsert Molecules - tags: - - Molecules - /molecules:unarchive: - post: - description: Unarchive Molecules - operationId: unarchiveMolecules - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MoleculesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive Molecules - tags: - - Molecules - /monomers: - get: - description: List all available monomers - operationId: listMonomers - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: monomers.id,monomers.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MonomersPaginatedList' - description: OK - summary: List Monomers - tags: - - Monomers - post: - description: Create a monomer. - operationId: createMonomer - parameters: - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: monomers.id,monomers.symbol - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MonomerCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Monomer' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - summary: Create a monomer - tags: - - Monomers - /monomers/{monomer_id}: - patch: - description: Update a Monomer. - operationId: updateMonomer - parameters: - - in: path - name: monomer_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id, modifiedAt - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MonomerUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Monomer' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update a Monomer - tags: - - Monomers - /monomers:archive: - post: - description: Archive Monomers. - operationId: archiveMonomers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MonomersArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MonomersArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive Monomers - tags: - - Monomers - /monomers:unarchive: - post: - description: Unarchive Monomers. - operationId: unarchiveMonomers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MonomersUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MonomersArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive Monomers - tags: - - Monomers - /nucleotide-alignments: - get: - description: List Nucleotide Alignments - operationId: listNucleotideAlignments - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a Nucleotide Alignment. Restricts results to those with - the specified name. - in: query - name: name - schema: - type: string - - description: Name substring of a Nucleotide Alignment. Restricts results to - those with names that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: seqanl_VfVOART1,seqanl_RFhDGaaC - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of sequence ids that own one or more Nucleotide - Alignments (i.e. ids of sequences used as the template in a Template Alignment - or created as the consensus sequence from a Consensus Alignment). Matches - all of the provided IDs, or returns a 400 error that includes a list of - which IDs are invalid. - - ' - in: query - name: sequenceIds - schema: - example: seq_VfVOART1,seq_RFhDGaaC - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/NucleotideAlignmentsPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List Nucleotide Alignments - tags: - - Nucleotide Alignments - /nucleotide-alignments/{alignment_id}: - delete: - description: Delete a Nucleotide Alignment - operationId: deleteNucleotideAlignment - parameters: - - in: path - name: alignment_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EmptyObject' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Delete a Nucleotide Alignment - tags: - - Nucleotide Alignments - get: - description: Get a Nucleotide Alignment - operationId: getNucleotideAlignment - parameters: - - in: path - name: alignment_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/NucleotideAlignment' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a Nucleotide Alignment - tags: - - Nucleotide Alignments - /nucleotide-alignments:create-consensus-alignment: - post: - description: Create a consensus Nucleotide Alignment - operationId: createConsensusNucleotideAlignment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/NucleotideConsensusAlignmentCreate' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the [Nucleotide Alignment](#/Nucleotide%20Alignments/getNucleotideAlignment) - resource that was created. - - ' - summary: Create a consensus Nucleotide Alignment - tags: - - Nucleotide Alignments - /nucleotide-alignments:create-template-alignment: - post: - description: Create a template Nucleotide Alignment - operationId: createTemplateNucleotideAlignment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/NucleotideTemplateAlignmentCreate' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the [Nucleotide Alignment](#/Nucleotide%20Alignments/getNucleotideAlignment) - resource that was created. - - ' - summary: Create a template Nucleotide Alignment - tags: - - Nucleotide Alignments - /oligos: - get: - deprecated: true - description: List Oligos - operationId: listOligos - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of an Oligo. Restricts results to those with the specified - name, alias, or entity registry ID. - in: query - name: name - schema: - type: string - - description: 'Full bases of the oligo. Restricts results to those with the - specified bases, case-insensitive, allowing for circular or reverse complement - matches. Does not allow partial matching or loose matching via degenerate - bases. - - ' - in: query - name: bases - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. - in: query - name: folderId - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to Oligos - mentioned in those entries. - - ' - in: query - name: mentionedIn - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'ID of a registry. Restricts results to those registered in this - registry. Specifying "null" returns unregistered items. - - ' - in: query - name: registryId - schema: - nullable: true - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived Oligos. Use - "ANY_ARCHIVED" to filter for archived Oligos regardless of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" - to return items for both archived and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of item IDs. Restricts results to those - that mention the given items in the description. - - ' - in: query - name: mentions - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: seq_yWs5X7lv,seq_RhYGVnHF - type: string - - description: 'Comma-separated list of entity registry IDs. Maximum of 100. - Restricts results to those that match any of the specified registry IDs. - - ' - in: query - name: entityRegistryIds.anyOf - schema: - example: TP001,TP002 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case insensitive. Warning - this filter can be non-performant due - to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: oligos.id,oligos.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/OligosPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List Oligos - tags: - - Oligos - post: - deprecated: true - description: Create an Oligo - operationId: createOligo - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/OligoCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligo' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '503': - description: Deprecated, a 429 is returned for too many requests - summary: Create an Oligo - tags: - - Oligos - /oligos/{oligo_id}: - get: - deprecated: true - description: Get an Oligo - operationId: getOligo - parameters: - - in: path - name: oligo_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligo' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get an Oligo - tags: - - Oligos - patch: - deprecated: true - description: Update an Oligo - operationId: updateOligo - parameters: - - in: path - name: oligo_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/OligoUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DnaOligo' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update an Oligo - tags: - - Oligos - /oligos:archive: - post: - deprecated: true - description: Archive Oligos - operationId: archiveOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/OligosArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/OligosArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive Oligos - tags: - - Oligos - /oligos:bulk-create: - post: - deprecated: true - description: 'Bulk Create DNA Oligos - - Please migrate to [Bulk Create DNA Oligos](#/DNA%20Oligos/bulkCreateDNAOligos) - so that we can support RNA Oligos. - - ' - operationId: bulkCreateOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/OligosBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of DNA Oligos that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create DNA Oligos - tags: - - Oligos - /oligos:bulk-get: - get: - description: Bulk get Oligos by ID - operationId: bulkGetOligos - parameters: - - description: 'Comma-separated list of IDs of Oligos to get. - - ' - in: query - name: oligoIds - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: oligos.id,oligos.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/OligosBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk get Oligos by ID - tags: - - Oligos - /oligos:unarchive: - post: - deprecated: true - description: Unarchive Oligos - operationId: unarchiveOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/OligosUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/OligosArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive Oligos - tags: - - Oligos - /organizations: - get: - description: "Returns all organizations that the caller has permission to view.\ - \ The following roles have view permission:\n - tenant admins\n - members\ - \ of the organization\n" - operationId: listOrganizations - parameters: - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: ent_ZJy8RTbo,ent_8GVbVkPj,ent_qREJ33rn - type: string - - description: Name of an organization. Restricts results to those with the - specified name. - in: query - name: name - schema: - type: string - - description: Name substring of an organization. Restricts results to those - with names that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Comma-separated list of user or Benchling app IDs. Restricts - results to organizations that include all the given users/apps as members. - in: query - name: hasMembers - schema: - type: string - - description: Comma-separated list of user or Benchling app IDs. Restricts - results to organizations that include all the given users/apps as admins. - in: query - name: hasAdmins - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Sets the sort-order of the response. Valid sorts are modifiedAt - (modified time, most recent first) and name (organization name, alphabetical). - Optionally add :asc or :desc to specify ascending or descending order. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/OrganizationsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List organizations - tags: - - Organizations - /organizations/{organization_id}: - get: - description: "Returns an organization by ID if the caller has permission to\ - \ view. The following roles have view permission:\n - tenant admins\n -\ - \ members of the organization\n" - operationId: getOrganization - parameters: - - description: ID of organization to get - in: path - name: organization_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Organization' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get an organization by ID - tags: - - Organizations - /organizations/{organization_id}/memberships: - get: - description: 'Returns all organization memberships in the given organization - - ' - operationId: listOrganizationMemberships - parameters: - - description: Number of results to return. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: path - name: organization_id - required: true - schema: - type: string - - in: query - name: role - required: false - schema: - example: ADMIN - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MembershipsPaginatedList' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'List organization memberships - - ' - tags: - - Organizations - post: - description: 'Create organization membership for the given user, role, and organization - - ' - operationId: createOrganizationMembership - parameters: - - in: path - name: organization_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MembershipCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Membership' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'Create organization membership - - ' - tags: - - Organizations - /organizations/{organization_id}/memberships/{user_id}: - delete: - description: 'Delete a single organization membership - - ' - operationId: deleteOrganizationMembership - parameters: - - in: path - name: organization_id - required: true - schema: - type: string - - in: path - name: user_id - required: true - schema: - type: string - responses: - '204': - description: No Content - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'Delete organization membership by user ID and organization ID - - ' - tags: - - Organizations - get: - description: 'Returns organization membership in the given organization for - the given user - - ' - operationId: getOrganizationMembership - parameters: - - in: path - name: organization_id - required: true - schema: - type: string - - in: path - name: user_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Membership' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'Get organization membership - - ' - tags: - - Organizations - patch: - description: 'Update a single organization membership - - ' - operationId: updateOrganizationMembership - parameters: - - in: path - name: organization_id - required: true - schema: - type: string - - in: path - name: user_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MembershipUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Membership' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'Update organization membership by user ID and organization ID - - ' - tags: - - Organizations - /plate-schemas: - get: - description: List plate schemas - operationId: listPlateSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/PlateSchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List plate schemas - tags: - - Schemas - /plate-schemas/{schema_id}: - get: - description: Get a plate schema by ID - operationId: getPlateSchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/PlateSchema' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a plate schema by ID - tags: - - Schemas - /plates: - get: - description: List plates - operationId: listPlates - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - description: 'Method by which to order search results. Valid sorts are barcode, - name, modifiedAt, and createdAt. Optionally add :asc or :desc to specify - ascending or descending order. Default is modifiedAt. - - ' - in: query - name: sort - schema: - default: modifiedAt:desc - enum: - - barcode - - barcode:asc - - barcode:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - - createdAt - - createdAt:asc - - createdAt:desc - nullable: false - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of a plate. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: 'Name substring of a plate. Restricts results to those with names - that include the provided substring. - - ' - in: query - name: nameIncludes - schema: - type: string - - description: 'Only return plates that have the specified number of empty positions - - ' - in: query - name: emptyPositions - schema: - type: integer - - description: 'Only return plates that have greater-than or equal-to the specified - number of empty positions. - - ' - in: query - name: emptyPositions.gte - schema: - type: integer - - description: 'Only return plates that have greater-than the specified number - of empty positions. - - ' - in: query - name: emptyPositions.gt - schema: - type: integer - - description: 'Only return plates that have less-than or equal-to the specified - number of empty positions. - - ' - in: query - name: emptyPositions.lte - schema: - type: integer - - description: 'Only return plates that have less-than the specified number - of empty positions. - - ' - in: query - name: emptyPositions.lt - schema: - type: integer - - description: 'Only return plates that have the specified number of empty containers - (containers without contents). - - ' - in: query - name: emptyContainers - schema: - type: integer - - description: 'Only return plates that have greater-than or equal-to the specified - number of empty containers (containers without contents). - - ' - in: query - name: emptyContainers.gte - schema: - type: integer - - description: 'Only return plates that have greater-than the specified number - of empty containers (containers without contents). - - ' - in: query - name: emptyContainers.gt - schema: - type: integer - - description: 'Only return plates that have less-than or equal-to the specified - number of empty containers (containers without contents). - - ' - in: query - name: emptyContainers.lte - schema: - type: integer - - description: 'Only return plates that have less-than the specified number - of empty containers (containers without contents). - - ' - in: query - name: emptyContainers.lt - schema: - type: integer - - description: 'ID of a location. Restricts results to those located in the - specified inventory. - - ' - in: query - name: ancestorStorageId - schema: - type: string - - description: 'ID of a entity, or entity schema. Restricts results to those - that hold containers with entities. - - ' - in: query - name: storageContentsId - schema: - type: string - - description: 'Comma-separated list of IDs of entities. Restricts results to - those that hold containers with at least one of the specified entities. - - ' - in: query - name: storageContentsIds - schema: - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived plates. Use - "ANY_ARCHIVED" to filter for archived plates regardless of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" - to return items for both archived and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: plt_xd4hj4eB,plt_xd4hj4C - type: string - - description: 'Comma-separated list of barcodes. Matches all of the provided - barcodes, or returns a 400 error that includes a list of which barcodes - are invalid. - - ' - in: query - name: barcodes - schema: - example: W102477,W102478 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: plates.id,plates.wells.*.webURL - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/PlatesPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List plates - tags: - - Plates - post: - description: Create a plate - operationId: createPlate - parameters: - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: id,webURL - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PlateCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Plate' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a plate - tags: - - Plates - /plates/{plate_id}: - get: - description: Get a plate - operationId: getPlate - parameters: - - in: path - name: plate_id - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: id,webURL - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Plate' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a plate - tags: - - Plates - patch: - description: Update a plate - operationId: updatePlate - parameters: - - in: path - name: plate_id - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: id,webURL - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PlateUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Plate' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update a plate - tags: - - Plates - /plates:archive: - post: - description: Archive plates and any containers of the plates - operationId: archivePlates - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PlatesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/PlatesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenRestrictedSampleError' - description: Forbidden - summary: Archive plates - tags: - - Plates - /plates:bulk-get: - get: - description: BulkGet plates - operationId: bulkGetPlates - parameters: - - description: Comma-separated list of plate IDs. - in: query - name: plateIds - schema: - type: string - - description: Comma-separated list of plate barcodes. - explode: false - in: query - name: barcodes - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: plates.id,plates.wells.*.webURL - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/PlatesBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: BulkGet plates - tags: - - Plates - /plates:unarchive: - post: - description: Unarchive plates and the containers that were archived along with - them - operationId: unarchivePlates - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PlatesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/PlatesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive plates - tags: - - Plates - /projects: - get: - description: List projects - operationId: listProjects - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - in: query - name: sort - schema: - default: modifiedAt - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - name - - modifiedAt:asc - - name:asc - - modifiedAt:desc - - name:desc - nullable: false - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived projects. Use - "ANY_ARCHIVED" to filter for archived projects regardless of reason. Use - "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: src_ZJy8RTbo,src_8GVbVkPj,src_qREJ33rn - type: string - - description: Name of a project. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ProjectsPaginatedList' - description: OK - summary: List projects - tags: - - Projects - /projects/{project_id}: - get: - description: Get a project by ID - operationId: getProject - parameters: - - description: ID of project to get - in: path - name: project_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Project' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a project by ID - tags: - - Projects - /projects:archive: - post: - description: Archives projects and their contents - operationId: archiveProjects - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ProjectsArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ProjectsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive projects - tags: - - Projects - /projects:unarchive: - post: - description: Unarchives projects and the contents that were archived along with - them - operationId: unarchiveProjects - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ProjectsUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ProjectsArchivalChange' - description: OK - summary: Unarchive projects - tags: - - Projects - /registries: - get: - description: List registries - operationId: listRegistries - parameters: - - description: Name of a registry. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RegistriesList' - description: OK - summary: List registries - tags: - - Registry - /registries/{registry_id}: - get: - description: Get registry - operationId: getRegistry - parameters: - - description: ID for the registry - in: path - name: registry_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Registry' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get registry - tags: - - Registry - /registries/{registry_id}/batch-schemas: - get: - deprecated: true - description: List batch schemas by registry. Deprecated - use Schemas endpoints - instead. - operationId: listBatchSchemasByRegistry - parameters: - - description: ID for the registry - in: path - name: registry_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BatchSchemasList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List batch schemas by registry - tags: - - Registry - /registries/{registry_id}/box-schemas: - get: - deprecated: true - description: List box schemas by registry. Deprecated - use Schemas endpoints - instead. - operationId: listBoxSchemasByRegistry - parameters: - - description: ID for the registry - in: path - name: registry_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BoxSchemasList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List box schemas by registry - tags: - - Registry - /registries/{registry_id}/container-schemas: - get: - deprecated: true - description: List container schemas by registry. Deprecated - use Schemas endpoints - instead. - operationId: listContainerSchemasByRegistry - parameters: - - description: ID for the registry - in: path - name: registry_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ContainerSchemasList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List container schemas by registry - tags: - - Registry - /registries/{registry_id}/dropdowns: - get: - deprecated: true - description: List dropdowns by registry - operationId: listDropdownsByRegistry - parameters: - - description: ID of the registry to list the dropdowns for. - in: path - name: registry_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DropdownsRegistryList' - description: OK - headers: - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List dropdowns for a given registry - tags: - - Registry - /registries/{registry_id}/entity-schemas: - get: - deprecated: true - description: List entity schemas by registry. Deprecated - use Schemas endpoints - instead. - operationId: listEntitySchemasByRegistry - parameters: - - description: ID for the registry - in: path - name: registry_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DeprecatedEntitySchemasList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List entity schemas by registry - tags: - - Registry - /registries/{registry_id}/label-printers: - get: - description: List printers - operationId: listPrinters - parameters: - - description: ID of the registry to list the printers for. - in: path - name: registry_id - required: true - schema: - type: string - - description: Name of a printer. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/PrintersList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: List printers - tags: - - Printers - /registries/{registry_id}/label-templates: - get: - description: List label templates - operationId: listLabelTemplates - parameters: - - description: ID of the registry to list the label templates of. - in: path - name: registry_id - required: true - schema: - type: string - - description: Name of a label template. Restricts results to those with the - specified name. - in: query - name: name - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LabelTemplatesList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: List label templates - tags: - - Label Templates - /registries/{registry_id}/location-schemas: - get: - deprecated: true - description: List location schemas by registry. Deprecated - use Schemas endpoints - instead. - operationId: listLocationSchemasByRegistry - parameters: - - description: ID for the registry - in: path - name: registry_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LocationSchemasList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List location schemas by registry - tags: - - Registry - /registries/{registry_id}/plate-schemas: - get: - deprecated: true - description: List plate schemas by registry. Deprecated - use Schemas endpoints - instead. - operationId: listPlateSchemasByRegistry - parameters: - - description: ID for the registry - in: path - name: registry_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/PlateSchemasList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List plate schemas by registry - tags: - - Registry - /registries/{registry_id}/registered-entities:bulk-get: - get: - description: Bulk get registered entities - operationId: bulkGetRegisteredEntities - parameters: - - description: ID for the registry - in: path - name: registry_id - required: true - schema: - type: string - - description: Comma separated list of entity Registry IDs - in: query - name: entityRegistryIds - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RegisteredEntitiesList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Bulk get registered entities - tags: - - Registry - /registries/{registry_id}:bulk-register-entities: - post: - description: 'Attempts to move entities into the registry. Limit of 2500 entities - per request. This endpoint will first check that the entities are all valid - to be moved into the registry, given the namingStrategy. If any entities fail - validation, no files will be moved and errors describing invalid entities - is returned. If all entities pass validation, the entities are moved into - the registry. - - ' - operationId: registerEntities - parameters: - - description: ID for the registry - in: path - name: registry_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RegisterEntities' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: "\nThis endpoint launches a [long-running task](#/Tasks/getTask)\ - \ and returns the Task ID of the launched task.\n\nWhen successful, the\ - \ task has an empty response. Benchling cannot always process two registration\ - \ attempts within the same registry at the same time,\nso it's possible\ - \ for the task to return an error response that indicates another attempt\ - \ is already in progress and currently blocking this one.\nBenchling will\ - \ automatically retry the task up to 3 times, and in the unlikely event\ - \ that it is still failing, the task status will be \u201CFAILED\u201D\ - \ and the error message will read:\n\n> Another registration attempt is\ - \ in progress. Please try again in a few moments. If this problem persists,\ - \ please wait 1-2 minutes before trying again.\n" - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Register entities - tags: - - Registry - /registries/{registry_id}:unregister-entities: - post: - description: Unregisters entities and moves them to a folder - operationId: unregisterEntities - parameters: - - description: ID of the registry - in: path - name: registry_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/UnregisterEntities' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/EmptyObject' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unregister entities - tags: - - Registry - /registries/{registry_id}:validate-barcodes: - post: - description: Validate barcodes on inventory objects. - operationId: validateBarcodes - parameters: - - description: ID of the registry to validate barcodes in. - in: path - name: registry_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BarcodesList' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/BarcodeValidationResults' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Validate barcodes - tags: - - Inventory - /request-fulfillments: - get: - description: List Request Fulfillments - operationId: listRequestFulfillments - parameters: - - example: etr_IKwdYx31 - in: query - name: entryId - required: true - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - example: Im5ldyB0ZXN0Ig== - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestFulfillmentsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List Request Fulfillments - tags: - - Requests - /request-fulfillments/{request_fulfillment_id}: - get: - description: Get a request's fulfillment - operationId: getRequestFulfillment - parameters: - - example: reqffm_8Hm71Usw - in: path - name: request_fulfillment_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestFulfillment' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a request's fulfillment - tags: - - Requests - /request-schemas: - get: - description: List request schemas - operationId: listRequestSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestSchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List request schemas - tags: - - Schemas - /request-schemas/{schema_id}: - get: - description: Get a Request schema by ID - operationId: getRequestSchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestSchema' - description: OK - '400': - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a Request schema by ID - tags: - - Schemas - /request-task-schemas: - get: - description: List request task schemas - operationId: listRequestTaskSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestTaskSchemasPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of schemas that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of calls remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List request task schemas - tags: - - Schemas - /request-task-schemas/{schema_id}: - get: - description: Get a Request Task schema by ID - operationId: getRequestTaskSchema - parameters: - - description: ID of schema to get - in: path - name: schema_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestTaskSchema' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a Request Task schema by ID - tags: - - Schemas - /requests: - get: - description: List requests - operationId: listRequests - parameters: - - in: query - name: schemaId - required: true - schema: - type: string - - in: query - name: requestStatus - schema: - $ref: '#/components/schemas/RequestStatus' - - description: minimum create time (unix seconds) - in: query - name: minCreatedTime - schema: - type: integer - - description: maximum create time (unix seconds) - in: query - name: maxCreatedTime - schema: - type: integer - - example: Im5ldyB0ZXN0Ig== - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: requests.id,requests.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestsPaginatedList' - description: OK - summary: List requests - tags: - - Requests - post: - description: Create a request - operationId: createRequest - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RequestCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Request' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a request - tags: - - Requests - /requests/{request_id}: - get: - description: Get a request by ID - operationId: getRequest - parameters: - - example: req_JekfeyVS - in: path - name: request_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Request' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a request by ID - tags: - - Requests - patch: - description: Update a request - operationId: patchRequest - parameters: - - in: path - name: request_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RequestUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Request' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update a request - tags: - - Requests - /requests/{request_id}/response: - get: - description: Get a request's response - operationId: getRequestResponse - parameters: - - example: req_JekfeyVS - in: path - name: request_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestResponse' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a request's response - tags: - - Requests - /requests/{request_id}/tasks:bulk-create: - post: - description: Create tasks for a request - operationId: bulkCreateRequestTasks - parameters: - - example: req_JekfeyVS - in: path - name: request_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RequestTasksBulkCreateRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestTasksBulkCreateResponse' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestErrorBulk' - description: Bad Request - summary: Create tasks for a request - tags: - - Requests - /requests/{request_id}/tasks:bulk-update: - post: - description: Bulk update tasks for a request - operationId: bulkUpdateRequestTasks - parameters: - - example: req_JekfeyVS - in: path - name: request_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RequestTasksBulkUpdateRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestTasksBulkUpdateResponse' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Bulk update tasks for a request - tags: - - Requests - /requests/{request_id}:execute-sample-groups: - post: - description: Update the status of sample groups in a request - operationId: executeRequestsSampleGroups - parameters: - - example: req_JekfeyVS - in: path - name: request_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/SampleGroupsStatusUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/ExecuteSampleGroups' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update the status of sample groups in a request - tags: - - Requests - /requests:bulk-get: - get: - description: Bulk get requests by API ID or display ID - operationId: bulkGetRequests - parameters: - - description: Comma-separated list of request IDs. Exactly one of requestIds - or displayIds must be specified. - example: req_xJk20sla,req_lQJ3nMs5 - in: query - name: requestIds - schema: - type: string - - description: Comma-separated list of display IDs. Exactly one of requestIds - or displayIds must be specified. - example: VPR001,VPR002 - in: query - name: displayIds - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: requests.id,requests.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RequestsBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk get requests - tags: - - Requests - /result-transactions: - post: - description: 'Transactions allow results to be upload in multiple requests. - This endpoint lets you create a transaction. You can then upload results to - the transaction, abort the transaction, or commit the transaction. - - ' - operationId: createAssayResultsTransaction - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultTransactionCreateResponse' - description: OK - summary: Create a transaction - tags: - - Assay Results - /result-transactions/{transaction_id}/results: - post: - description: Create results in a transaction - operationId: createAssayResultsInTransaction - parameters: - - in: path - name: transaction_id - required: true - schema: - format: uuid - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultsBulkCreateRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultsCreateResponse' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultsCreateErrorResponse' - description: Bad Request - summary: Create results in a transaction - tags: - - Assay Results - /result-transactions/{transaction_id}:abort: - post: - description: Aborting a transaction will discard all uploaded results. - operationId: abortAssayResultsTransaction - parameters: - - in: path - name: transaction_id - required: true - schema: - format: uuid - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultTransactionCreateResponse' - description: OK - summary: Abort a transaction - tags: - - Assay Results - /result-transactions/{transaction_id}:commit: - post: - description: Committing a transaction will cause all results that have been - uploaded to be saved and visible to others. - operationId: commitAssayResultsTransaction - parameters: - - in: path - name: transaction_id - required: true - schema: - format: uuid - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/AssayResultTransactionCreateResponse' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Commit a transaction - tags: - - Assay Results - /rna-oligos: - get: - description: List RNA Oligos - operationId: listRNAOligos - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of an RNA Oligo. Restricts results to those with the specified - name, alias, or entity registry ID. - in: query - name: name - schema: - type: string - - description: Name substring of an RNA Oligo. Restricts results to those with - names, aliases, or entity registry IDs that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Full bases of the RNA Oligo. Restricts results to those with - the specified bases, case-insensitive, allowing for circular or reverse - complement matches. Does not allow partial matching or loose matching via - degenerate bases. - - ' - in: query - name: bases - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. - in: query - name: folderId - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to RNA - Oligos mentioned in those entries. - - ' - in: query - name: mentionedIn - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'ID of a registry. Restricts results to those registered in this - registry. Specifying "null" returns unregistered items. - - ' - in: query - name: registryId - schema: - nullable: true - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived RNA Oligos. - Use "ANY_ARCHIVED" to filter for archived RNA Oligos regardless of reason. - Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and - unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of item IDs. Restricts results to those - that mention the given items in the description. - - ' - in: query - name: mentions - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: seq_yWs5X7lv,seq_RhYGVnHF - type: string - - description: 'Comma-separated list of entity registry IDs. Maximum of 100. - Restricts results to those that match any of the specified registry IDs. - - ' - in: query - name: entityRegistryIds.anyOf - schema: - example: TP001,TP002 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case insensitive. Warning - this filter can be non-performant due - to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma separated list of user or app IDs. Maximum of 100. - in: query - name: authorIds.anyOf - schema: - example: ent_a0SApq3z,ent_b4AApz9b - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: rnaOligos.id,rnaOligos.modifiedAt - type: string - - description: ID of the notation to use in populating the customNotation field. - in: query - name: customNotationId - schema: - example: sntx_lRe007yZ - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligosPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List RNA Oligos - tags: - - RNA Oligos - post: - description: Create an RNA Oligo - operationId: createRNAOligo - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligoCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligo' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '503': - description: Deprecated, a 429 is returned for too many requests - summary: Create an RNA Oligo - tags: - - RNA Oligos - /rna-oligos/{entity_registry_id}:upsert: - patch: - description: 'Create or update a registered RNA oligo. - - - Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). - - ' - operationId: upsertRnaOligo - parameters: - - example: entity_registry_id_001 - in: path - name: entity_registry_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/OligoUpsertRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligo' - description: Updated - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligo' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create or update a registered RNA oligo - tags: - - RNA Oligos - /rna-oligos/{oligo_id}: - get: - description: Get an RNA Oligo - operationId: getRNAOligo - parameters: - - in: path - name: oligo_id - required: true - schema: - type: string - - description: Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - '*'. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - in: query - name: returning - schema: - example: id,modifiedAt - type: string - - description: ID of the notation to use in populating the customNotation field. - in: query - name: customNotationId - schema: - example: sntx_lRe007yZ - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligo' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get an RNA Oligo - tags: - - RNA Oligos - patch: - description: Update an RNA Oligo - operationId: updateRNAOligo - parameters: - - in: path - name: oligo_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligoUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligo' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update an RNA Oligo - tags: - - RNA Oligos - /rna-oligos:archive: - post: - description: Archive RNA Oligos - operationId: archiveRNAOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligosArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligosArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive RNA Oligos - tags: - - RNA Oligos - /rna-oligos:bulk-create: - post: - description: Bulk Create RNA Oligos. Limit of 1000 RNA Oligos per request. - operationId: bulkCreateRNAOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligosBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of RNA Oligos that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create RNA Oligos - tags: - - RNA Oligos - /rna-oligos:bulk-update: - post: - description: Bulk Update RNA Oligos - operationId: bulkUpdateRNAOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligosBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [RNA Oligo](#/RNA%20Oligos/getRNAOligo) - resources that were updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update RNA Oligos - tags: - - RNA Oligos - /rna-oligos:bulk-upsert: - post: - description: 'All entities and their schemas must be within the same registry. - - - This operation performs the following actions: - - 1. Any existing objects are looked up in Benchling by the provided entity - registry ID. - - 2. Then, all objects are either created or updated accordingly, temporarily - skipping any schema field links between objects. - - 3. Schema field links can be populated using entity registry IDs or API IDs. - In the `value` field of the [Field](#/components/schemas/FieldWithResolution) - resource, the object `{"entityRegistryId": ENTITY_REGISTRY_ID}` may be provided - instead of the API ID if desired (see example value). You may link to objects - being created in the same operation. - - 4. Entities are registered, using the provided name and entity registry ID. - - - If any action fails, the whole operation is canceled and no objects are created - or updated. - - - Limit of 1000 entities per request. - - ' - operationId: bulkUpsertRNAOligos - parameters: - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - ' - in: query - name: returning - schema: - example: rnaOligos.id,rnaOligos.creator.handle - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligosBulkUpsertRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns the resources of the objects that were - upserted. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk upsert RNA oligos - tags: - - RNA Oligos - /rna-oligos:unarchive: - post: - description: Unarchive RNA Oligos - operationId: unarchiveRNAOligos - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligosUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaOligosArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive RNA Oligos - tags: - - RNA Oligos - /rna-sequences: - get: - description: List RNA sequences - operationId: listRNASequences - parameters: - - description: 'Number of results to return. Defaults to 50, maximum of 100. - - ' - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Method by which to order search results. Valid sorts are name, - modifiedAt, and createdAt. Optionally add :asc or :desc to specify ascending - or descending order. Default is modifiedAt. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Name of an RNA Sequence. Restricts results to those with the - specified name, alias, or entity registry ID. - in: query - name: name - schema: - type: string - - description: Name substring of an RNA Sequence. Restricts results to those - with names, aliases, or entity registry IDs that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: Full bases of the RNA sequence. Restricts results to those with - the specified bases, case-insensitive, allowing for circular or reverse - complement matches. Does not allow partial matching or loose matching via - degenerate bases. - in: query - name: bases - schema: - type: string - - description: ID of a folder. Restricts results to those in the folder. - in: query - name: folderId - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to RNA - sequences mentioned in those entries. - - ' - in: query - name: mentionedIn - schema: - type: string - - description: ID of a project. Restricts results to those in the project. - in: query - name: projectId - schema: - type: string - - description: 'ID of a registry. Restricts results to those registered in this - registry. Specifying "null" returns unregistered items. - - ' - in: query - name: registryId - schema: - nullable: true - type: string - - description: 'ID of a schema. Restricts results to those of the specified - schema. - - ' - in: query - name: schemaId - schema: - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived RNA sequences. - Use "ANY_ARCHIVED" to filter for archived RNA sequences regardless of reason. - Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and - unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - - description: 'Comma-separated list of item IDs. Restricts results to those - that mention the given items in the description. - - ' - in: query - name: mentions - schema: - type: string - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: seq_VzVOART1,seq_RahDGaaC - type: string - - description: 'Comma-separated list of entity registry IDs. Maximum of 100. - Restricts results to those that match any of the specified registry IDs. - - ' - in: query - name: entityRegistryIds.anyOf - schema: - example: TP001,TP002 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case insensitive. Warning - this filter can be non-performant due - to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, aliases, or entity registry - IDs, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: Comma separated list of users IDs - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: Comma separated list of user or app IDs. Maximum of 100. - in: query - name: authorIds.anyOf - schema: - example: ent_a0SApq3z,ent_b4AApz9b - type: string - - description: ID of the notation to use in populating the customNotation field. - in: query - name: customNotationId - schema: - example: sntx_lRe007yZ - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note**: Fields annotations, translations, and primers cannot be introspected - with the returning parameter, and any sub fields will be ignored. E.g.: - "rnaSequences.annotations.id" will return the same as "rnaSequences.annotations". - - ' - in: query - name: returning - schema: - example: rnaSequences.id, rnaSequences.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesPaginatedList' - description: OK - headers: - Result-Count: - description: The total number of items that match the given query - schema: - type: integer - x-rate-limit-limit: - description: The number of allowed requests in the current rate-limit - period - schema: - type: integer - x-rate-limit-remaining: - description: The number of requests remaining in the current rate-limit - period - schema: - type: integer - x-rate-limit-reset: - description: The number of seconds remaining in the current rate-limit - period - schema: - type: integer - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List RNA sequences - tags: - - RNA Sequences - post: - description: Create an RNA sequence - operationId: createRNASequence - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequenceCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequence' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '503': - description: Deprecated, a 429 is returned for too many requests - summary: Create an RNA sequence - tags: - - RNA Sequences - /rna-sequences/{rna_sequence_id}: - get: - description: Get an RNA sequence - operationId: getRNASequence - parameters: - - in: path - name: rna_sequence_id - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note**: Fields annotations, translations, and primers cannot be introspected - with the returning parameter, and any sub fields will be ignored. E.g.: - "annotations.id" will return the same as "annotations". - - ' - in: query - name: returning - schema: - example: id,modifiedAt - type: string - - description: ID of the notation to use in populating the customNotation field. - in: query - name: customNotationId - schema: - example: sntx_lRe007yZ - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequence' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Get an RNA sequence - tags: - - RNA Sequences - patch: - description: Update an RNA sequence - operationId: updateRNASequence - parameters: - - in: path - name: rna_sequence_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequenceUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequence' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Update an RNA sequence - tags: - - RNA Sequences - /rna-sequences:archive: - post: - description: Archive RNA Sequences. RNA sequences that are already registered - will not be removed from the registry. - operationId: archiveRNASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Archive RNA Sequences - tags: - - RNA Sequences - /rna-sequences:auto-annotate: - post: - description: Auto-annotate RNA sequences with matching features from specified - Feature Libraries. U/T bases are treated as interchangeable in both features - and sequences. - operationId: autoAnnotateRnaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutoAnnotateRnaSequences' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task has an empty response. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Auto-annotate RNA sequences with matching features from specified Feature - Libraries - tags: - - RNA Sequences - /rna-sequences:autofill-parts: - post: - description: Autofill parts from matching RNA Sequences with linked schemas. - operationId: autofillRNASequenceParts - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutofillRnaSequences' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task has an empty response. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Autofill RNA sequence parts - tags: - - RNA Sequences - /rna-sequences:autofill-translations: - post: - description: Autofill RNA sequence translations - operationId: autofillRNASequenceTranslations - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AutofillRnaSequences' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task has an empty response. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Autofill RNA sequence translations from Amino Acid sequences with matching - schemas - tags: - - RNA Sequences - /rna-sequences:bulk-create: - post: - description: Bulk Create RNA sequences. Limit of 1000 RNA Sequences per request. - operationId: bulkCreateRNASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [RNA Sequence](#/RNA%20Sequences/bulkGetRNASequences) - resources that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create RNA sequences - tags: - - RNA Sequences - /rna-sequences:bulk-get: - get: - description: Bulk get RNA sequences by ID - operationId: bulkGetRNASequences - parameters: - - description: 'Comma-separated list of IDs of RNA sequences to get. - - ' - in: query - name: rnaSequenceIds - required: true - schema: - type: string - - description: 'Comma-separated list of fields to return. Modifies the output - shape. To return all keys at a given level, enumerate them or use the wildcard, - ''*''. For more information, [click here](https://docs.benchling.com/docs/getting-started-1#returning-query-parameter). - - - **Note**: Fields annotations, translations, and primers cannot be introspected - with the returning parameter, and any sub fields will be ignored. E.g.: - "rnaSequences.annotations.id" will return the same as "rnaSequences.annotations". - - ' - in: query - name: returning - schema: - example: rnaSequences.id, rnaSequences.modifiedAt - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesBulkGet' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk get RNA sequences by ID - tags: - - RNA Sequences - /rna-sequences:bulk-update: - post: - description: Bulk Update RNA sequences - operationId: bulkUpdateRNASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [RNA Sequences](#/RNA%20Sequences/bulkGetRNASequences) - resources that were updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update RNA sequences - tags: - - RNA Sequences - /rna-sequences:match-bases: - post: - description: Return RNA sequences whose bases exactly match the provided query. - operationId: matchBasesRnaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MatchBasesRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesPaginatedList' - description: A filtered list of RNA Sequences - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Match RNA sequences by bases - tags: - - RNA Sequences - /rna-sequences:search-bases: - post: - description: 'Returns RNA Sequences that contain the provided bases. Search - indexing is asynchronous, so results my be not be available immediately after - creation. - - ' - operationId: searchRnaSequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/SearchBasesRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesPaginatedList' - description: A filtered list of DNA Sequences - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Search RNA Sequences - tags: - - RNA Sequences - /rna-sequences:unarchive: - post: - description: Unarchive RNA sequences - operationId: unarchiveRNASequences - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/RnaSequencesArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Unarchive RNA sequences - tags: - - RNA Sequences - /tasks/{task_id}: - get: - description: Get a task by id - operationId: getTask - parameters: - - description: UUID of the task - example: f438d656-c2c3-40a4-b3fd-d7e58db78242 - in: path - name: task_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - examples: - AA Sequences - Bulk Create: - $ref: '#/components/examples/BulkOperateAaSequencesTaskResponse' - AA Sequences - Bulk Update: - $ref: '#/components/examples/BulkOperateAaSequencesTaskResponse' - AA Sequences - Find Matching Region: - $ref: '#/components/examples/AaSequencesFindMatchingRegionTaskResponse' - Containers - Bulk Create: - $ref: '#/components/examples/BulkOperateContainersTaskResponse' - Containers - Bulk Update: - $ref: '#/components/examples/BulkOperateContainersTaskResponse' - Containers - Transfers: - $ref: '#/components/examples/TransfersTaskResponse' - Custom Entities - Bulk Create: - $ref: '#/components/examples/BulkOperateCustomEntitiesTaskResponse' - Custom Entities - Bulk Update: - $ref: '#/components/examples/BulkOperateCustomEntitiesTaskResponse' - DNA Alignments - Create Consensus Alignment: - $ref: '#/components/examples/DnaCreateAlignmentTaskResponse' - DNA Alignments - Create Template Alignment: - $ref: '#/components/examples/DnaCreateAlignmentTaskResponse' - DNA Oligos - Bulk Create: - $ref: '#/components/examples/BulkOperateDnaOligosTaskResponse' - DNA Oligos - Bulk Update: - $ref: '#/components/examples/BulkOperateDnaOligosTaskResponse' - DNA Sequences - Auto Annotate: - $ref: '#/components/examples/EmptySuccessTaskResponse' - DNA Sequences - Autofill Parts: - $ref: '#/components/examples/EmptySuccessTaskResponse' - DNA Sequences - Autofill Transcriptions: - $ref: '#/components/examples/EmptySuccessTaskResponse' - DNA Sequences - Autofill Translations: - $ref: '#/components/examples/EmptySuccessTaskResponse' - DNA Sequences - Bulk Create: - $ref: '#/components/examples/BulkOperateDnaSequencesTaskResponse' - DNA Sequences - Bulk Update: - $ref: '#/components/examples/BulkOperateDnaSequencesTaskResponse' - Exports - Export Item: - $ref: '#/components/examples/ExportsTaskResponse' - Features - Bulk Create: - $ref: '#/components/examples/BulkOperateFeaturesTaskResponse' - Lab Automation - Generate Input: - $ref: '#/components/examples/AIGGenerateInputTaskResponse' - Lab Automation - Process Output: - $ref: '#/components/examples/AOPProcessOutputTaskResponse' - RNA Oligos - Bulk Create: - $ref: '#/components/examples/BulkOperateRnaOligosTaskResponse' - RNA Oligos - Bulk Update: - $ref: '#/components/examples/BulkOperateRnaOligosTaskResponse' - RNA Sequences - Auto Annotate: - $ref: '#/components/examples/EmptySuccessTaskResponse' - RNA Sequences - Autofill Parts: - $ref: '#/components/examples/EmptySuccessTaskResponse' - RNA Sequences - Autofill Translations: - $ref: '#/components/examples/EmptySuccessTaskResponse' - RNA Sequences - Bulk Create: - $ref: '#/components/examples/BulkOperateRnaSequencesTaskResponse' - RNA Sequences - Bulk Update: - $ref: '#/components/examples/BulkOperateRnaSequencesTaskResponse' - Registry - Bulk Register Entities: - $ref: '#/components/examples/EmptySuccessTaskResponse' - Task Failed: - $ref: '#/components/examples/TaskFailed' - Task Failed (Bulk): - $ref: '#/components/examples/BulkTaskFailed' - Task Running: - $ref: '#/components/examples/TaskRunning' - schema: - oneOf: - - $ref: '#/components/schemas/AsyncTask' - - $ref: '#/components/schemas/CreateTemplateAlignmentAsyncTask' - - $ref: '#/components/schemas/CreateConsensusAlignmentAsyncTask' - - $ref: '#/components/schemas/CreateNucleotideTemplateAlignmentAsyncTask' - - $ref: '#/components/schemas/CreateNucleotideConsensusAlignmentAsyncTask' - - $ref: '#/components/schemas/BulkCreateDnaSequencesAsyncTask' - - $ref: '#/components/schemas/BulkUpdateDnaSequencesAsyncTask' - - $ref: '#/components/schemas/BulkCreateRnaSequencesAsyncTask' - - $ref: '#/components/schemas/BulkUpdateRnaSequencesAsyncTask' - - $ref: '#/components/schemas/AutofillPartsAsyncTask' - - $ref: '#/components/schemas/AutofillTranscriptionsAsyncTask' - - $ref: '#/components/schemas/AutofillTranslationsAsyncTask' - - $ref: '#/components/schemas/BulkRegisterEntitiesAsyncTask' - - $ref: '#/components/schemas/BulkCreateDnaOligosAsyncTask' - - $ref: '#/components/schemas/BulkUpdateDnaOligosAsyncTask' - - $ref: '#/components/schemas/BulkCreateRnaOligosAsyncTask' - - $ref: '#/components/schemas/BulkCreateAaSequencesAsyncTask' - - $ref: '#/components/schemas/BulkCreateCustomEntitiesAsyncTask' - - $ref: '#/components/schemas/BulkUpdateCustomEntitiesAsyncTask' - - $ref: '#/components/schemas/BulkCreateContainersAsyncTask' - - $ref: '#/components/schemas/BulkUpdateContainersAsyncTask' - - $ref: '#/components/schemas/BulkUpdateAaSequencesAsyncTask' - - $ref: '#/components/schemas/BulkUpdateRnaOligosAsyncTask' - - $ref: '#/components/schemas/TransfersAsyncTask' - - $ref: '#/components/schemas/AOPProcessOutputAsyncTask' - - $ref: '#/components/schemas/AIGGenerateInputAsyncTask' - - $ref: '#/components/schemas/ExportsAsyncTask' - - $ref: '#/components/schemas/ExportAuditLogAsyncTask' - - $ref: '#/components/schemas/BulkCreateFeaturesAsyncTask' - - $ref: '#/components/schemas/FindMatchingRegionsAsyncTask' - - $ref: '#/components/schemas/FindMatchingRegionsDnaAsyncTask' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a task by id - tags: - - Tasks - /teams: - get: - description: "Returns all teams that the caller has permission to view. The\ - \ following roles have view permission:\n - tenant admins\n - members of\ - \ the team's organization\n" - operationId: listTeams - parameters: - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: team_ZJy8RTbo,team_8GVbVkPj,team_qREJ33rn - type: string - - description: Name of a team. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: Name substring of a team. Restricts results to those with names - that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: 'Comma-separated list of entry IDs. Restricts results to teams - mentioned in those entries. - - ' - in: query - name: mentionedIn - schema: - example: etr_1X1AlQPD, etr_tv7m7B78 - type: string - - description: Restricts results to those in the organization. - in: query - name: organizationId - schema: - type: string - - description: Comma-separated list of user or Benchling app IDs. Restricts - results to teams that include all the given users/apps as members. - in: query - name: hasMembers - schema: - type: string - - description: Comma-separated list of user or Benchling app IDs. Restricts - results to teams that include all the given users/apps as admins. - in: query - name: hasAdmins - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Sets the sort-order of the response. Valid sorts are modifiedAt - (modified time, most recent first) and name (team name, alphabetical). - Optionally add :asc or :desc to specify ascending or descending order. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/TeamsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List teams - tags: - - Teams - post: - description: 'Create a team - - ' - operationId: createTeam - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/TeamCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Team' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - summary: 'Create team - - ' - tags: - - Teams - /teams/{team_id}: - get: - description: "Returns a team by ID if the caller has permission to view. The\ - \ following roles have view permission:\n - tenant admins\n - members of\ - \ the team's organization\n" - operationId: getTeam - parameters: - - description: ID of team to get - in: path - name: team_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Team' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a team by ID - tags: - - Teams - patch: - description: 'Update team properties - - ' - operationId: updateTeam - parameters: - - in: path - name: team_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/TeamUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Team' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'Update team - - ' - tags: - - Teams - /teams/{team_id}/memberships: - get: - description: 'Returns all team memberships in the given team - - ' - operationId: listTeamMemberships - parameters: - - description: Number of results to return. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: path - name: team_id - required: true - schema: - type: string - - in: query - name: role - required: false - schema: - example: ADMIN - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/MembershipsPaginatedList' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'List team memberships - - ' - tags: - - Teams - post: - description: 'Create team membership for the given user, role, and team - - ' - operationId: createTeamMembership - parameters: - - in: path - name: team_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MembershipCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/Membership' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'Create team membership - - ' - tags: - - Teams - /teams/{team_id}/memberships/{user_id}: - delete: - description: 'Delete a single team membership - - ' - operationId: deleteTeamMembership - parameters: - - in: path - name: team_id - required: true - schema: - type: string - - in: path - name: user_id - required: true - schema: - type: string - responses: - '204': - description: No Content - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'Delete team membership by user ID and team ID - - ' - tags: - - Teams - get: - description: 'Returns team membership in the given team for the given user - - ' - operationId: getTeamMembership - parameters: - - in: path - name: team_id - required: true - schema: - type: string - - in: path - name: user_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Membership' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'Get team membership - - ' - tags: - - Teams - patch: - description: 'Update a single team membership - - ' - operationId: updateTeamMembership - parameters: - - in: path - name: team_id - required: true - schema: - type: string - - in: path - name: user_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MembershipUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Membership' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: 'Update team membership by user ID and team ID - - ' - tags: - - Teams - /token: - post: - description: Generate a token - operationId: generateToken - requestBody: - content: - application/x-www-form-urlencoded: - schema: - $ref: '#/components/schemas/TokenCreate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/TokenResponse' - description: Generated token - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/OAuthBadRequestError' - description: Bad Request - '401': - content: - application/json: - schema: - $ref: '#/components/schemas/OAuthUnauthorizedError' - description: Unauthorized - security: - - basicClientIdSecretAuth: [] - summary: Generate a token for usage with authenticating via OAuth2 in subsequent - API calls. - tags: - - Authentication - /transfers: - post: - description: 'Transfers a volume of an entity or container into a destination - container. Limit of 5000 transfers per request. Concentration of all contents - in the destination container will be automatically updated based on the previous - volume & concentrations of the contents in that container, the concentration - of the contents being transferred in, the volume of the contents being transferred - in, and the final volume of the container. If no concentration is specified, - the concentration will not be tracked. - - ' - operationId: transferIntoContainers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MultipleContainersTransfersList' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - The task response contains the full list of destination [containers](#/Containers/getContainer). - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Transfers into containers - tags: - - Containers - /users: - get: - description: "Returns all users that the caller has permission to view. The\ - \ following roles have view permission:\n - tenant admins\n - members of\ - \ the user's organizations\n" - operationId: listUsers - parameters: - - description: 'Comma-separated list of ids. Matches all of the provided IDs, - or returns a 400 error that includes a list of which IDs are invalid. - - ' - in: query - name: ids - schema: - example: ent_ZJy8RTbo,ent_8GVbVkPj,ent_qREJ33rn - type: string - - description: Name of a user. Restricts results to those with the specified - name. - in: query - name: name - schema: - type: string - - description: Name substring of a user. Restricts results to those with names - that include the provided substring. - in: query - name: nameIncludes - schema: - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case insensitive. Warning - - this filter can be non-performant due to case insensitivity. - - ' - in: query - name: names.anyOf - schema: - example: MyName1,MyName2 - type: string - - description: 'Comma-separated list of names. Maximum of 100. Restricts results - to those that match any of the specified names, case sensitive. - - ' - in: query - name: names.anyOf.caseSensitive - schema: - example: MyName1,MyName2 - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - description: Comma-separated list of organization and/or team API IDs. Restricts - results to users that are members of all given groups. - in: query - name: memberOf - schema: - type: string - - description: Comma-separated list of organization and/or team API IDs. Restricts - results to users that are admins of all given groups. - in: query - name: adminOf - schema: - type: string - - description: Comma-separated list of handles. Restricts results to the users - with the specified handles. - in: query - name: handles - schema: - type: string - - description: Comma-separated list of emails. Maximum of 100. Restricts results - to the users with the specified emails. - in: query - name: email.anyOf - schema: - type: string - - description: 'Datetime, in RFC 3339 format. Supports the >, >=, <, <=, operators. - Time zone defaults to UTC. Restricts results to users who have last changed - their password in the specified range. e.g. > 2017-04-30. If "null" is provided - returns users that have no password set (SAML). - - ' - in: query - name: passwordLastChangedAt - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Token for pagination - in: query - name: nextToken - schema: - type: string - - in: query - name: sort - schema: - default: modifiedAt:desc - description: 'Sets the sort-order of the response. Valid sorts are modifiedAt - (modified time, most recent first) and name (user name, alphabetical). - Optionally add :asc or :desc to specify ascending or descending order. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - - modifiedAt - - modifiedAt:asc - - modifiedAt:desc - - name - - name:asc - - name:desc - nullable: false - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/UsersPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: List users - tags: - - Users - post: - description: Creates a single user. - operationId: createUser - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/UserCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/User' - description: Created - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create a user - tags: - - Users - /users/{user_id}: - get: - description: "Returns a user by ID if the caller has permission to view. The\ - \ following roles have view permission:\n - tenant admins\n - members of\ - \ any of the user's organizations\n" - operationId: getUser - parameters: - - description: ID of user to get - in: path - name: user_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/User' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Get a user by ID - tags: - - Users - patch: - description: Update a single user. - operationId: updateUser - parameters: - - description: ID of user to update - in: path - name: user_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/UserUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/User' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - '403': - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenError' - description: Forbidden - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Update a user by ID - tags: - - Users - /users/{user_id}/activity: - get: - description: 'Returns activity metadata for a specific user by ID. This currently - includes lastSeen data. - - ' - operationId: getUserActivity - parameters: - - description: ID of user to get - in: path - name: user_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/UserActivity' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: Last user activity - tags: - - Users - /users/{user_id}/warehouse-credentials: - get: - description: Returns the list of warehouse credential summaries for this user. - operationId: getUserWarehouseLogins - parameters: - - description: ID of user to get - in: path - name: user_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - properties: - warehouseCredentials: - items: - $ref: '#/components/schemas/WarehouseCredentialSummary' - type: array - type: object - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not Found - summary: User warehouse credentials - tags: - - Users - /users:bulk-create: - post: - description: Bulk Create Users. - operationId: bulkCreateUsers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/UserBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [Users](#/users/bulkCreateUsers) - resources that were created. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Create Users - tags: - - Users - /users:bulk-update: - post: - description: 'There is currently **no support** for swapping emails or handles - between existing users in the same request. - - ' - operationId: bulkUpdateUsers - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/UserBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: 'This endpoint launches a [long-running task](#/Tasks/getTask) - and returns the Task ID of the launched task. - - When successful, the task returns a full list of [Users](#/users/bulkUpdateUsers) - resources that were updated. - - ' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Bulk Update Users. - tags: - - Users - /warehouse-credentials: - post: - description: 'Allows for programmatically generating credentials to connect - to the Benchling warehouse. You must have a warehouse configured to access - this endpoint. - - The credentials will authenticate as the same user calling the API. - - Note that expiresIn is required - only temporary credentials are currently - allowed. - - ' - operationId: createWarehouseCredentials - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WarehouseCredentialsCreate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WarehouseCredentials' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad Request - summary: Create Benchling Warehouse credentials - tags: - - Warehouse - /workflow-flowchart-config-versions/{workflow_flowchart_config_version_id}: - get: - description: Get a workflow flowchart config version - operationId: getWorkflowFlowchartConfigVersion - parameters: - - description: The ID of the workflow flowchart config version - in: path - name: workflow_flowchart_config_version_id - required: true - schema: - example: wffccv_giVNQcAF - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowFlowchartConfigVersion' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Get a workflow flowchart config version. If there is a template flowchart, - serializes that flowchart in the same format as the workflow-flowcharts endpoint. - tags: - - Workflow Flowchart Config Versions - /workflow-flowcharts: - get: - description: List workflow flowcharts - operationId: listWorkflowFlowcharts - parameters: - - description: Comma separated list of workflow flowchart IDs - in: query - name: ids - schema: - example: wffc_5cJLQPFR,wffc_9jENXm4x - type: string - - in: query - name: sort - schema: - default: createdAt:desc - description: 'Method by which to order search results. Valid sorts are createdAt - (creation time, most recent first). Optionally add :asc or :desc to specify - ascending or descending order. - - ' - enum: - - createdAt - - createdAt:asc - - createdAt:desc - nullable: false - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. - - ' - in: query - name: createdAt - schema: - example: '2020-01-01' - format: date - type: string - - example: Im5ldyB0ZXN0Ig== - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowFlowchartPaginatedList' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: List workflow flowcharts - tags: - - Workflow Flowcharts - /workflow-flowcharts/{workflow_flowchart_id}: - get: - description: Get a workflow flowchart - operationId: getWorkflowFlowchart - parameters: - - description: The ID of the workflow flowchart - in: path - name: workflow_flowchart_id - required: true - schema: - example: wffc_giVNQcAF - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowFlowchart' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Get a workflow flowchart - tags: - - Workflow Flowcharts - /workflow-outputs: - get: - description: List workflow outputs - operationId: listWorkflowOutputs - parameters: - - description: Comma separated list of workflow output IDs - in: query - name: ids - schema: - example: wfout_5cJLQKVF,wfout_9jENXd3t - type: string - - description: Comma separated list of workflow IDs - in: query - name: workflowTaskGroupIds - schema: - example: prs_giVNQcTL,prst6m99v1 - minLength: 1 - type: string - - description: Comma separated list of workflow task IDs - in: query - name: workflowTaskIds - schema: - example: wftask_OnnsW08k,wftask_4ejSW7en - minLength: 1 - type: string - - description: The ID of the workflow task schema of the workflow output - in: query - name: schemaId - schema: - example: prstsch_KnR9iVum - type: string - - description: Comma separated list of user IDs or "null" - in: query - name: watcherIds - schema: - example: ent_a0SApq3z,ent_asdf72354,null - minLength: 1 - type: string - - description: Comma separated list of team IDs or "null" - in: query - name: responsibleTeamIds - schema: - example: team_Thepp2c7,team_QqHMbfqK,null - minLength: 1 - type: string - - description: Comma separated list of entry IDs - in: query - name: creationOriginIds - schema: - example: etr_d00c97,etr_30ad79 - type: string - - description: 'Comma separated list of bioentity or storable IDs. Maximum of - 100. Returns workflow outputs where the output''s schema fields reference - at least one of the provided items. - - ' - in: query - name: linkedItemIds.anyOf - schema: - example: bfi_ed1ef7,con_1c76c9 - type: string - - description: 'Comma separated list of bioentity or storable IDs. Returns workflow - outputs where the output''s schema fields reference all of the provided - items. - - ' - in: query - name: linkedItemIds.allOf - schema: - example: bfi_ed1ef7,con_1c76c9 - type: string - - description: 'Comma separated list of bioentity or storable IDs. Returns workflow - outputs where the output''s schema fields do not reference any of the provided - items. - - ' - in: query - name: linkedItemIds.noneOf - schema: - example: bfi_ed1ef7,con_1c76c9 - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: The name of the workflow task - in: query - name: name - schema: - example: PR-1 - type: string - - description: Part of the name of the workflow task - in: query - name: nameIncludes - schema: - example: PR - type: string - - description: Comma separated list of user IDs. - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - example: Im5ldyB0ZXN0Ig== - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Comma-separated list of Workflow Output Display IDs. - in: query - name: displayIds - schema: - example: ANG1-O1,ANG1-O2 - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived workflow outputs. - Use "ANY_ARCHIVED" to filter for archived workflow outputs regardless of - reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived - and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutputsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: List workflow outputs - tags: - - Workflow Outputs - post: - description: Create a new workflow output - operationId: createWorkflowOutput - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutputCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutput' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Create a new workflow output - tags: - - Workflow Outputs - /workflow-outputs/{workflow_output_id}: - get: - description: Get a workflow output - operationId: getWorkflowOutput - parameters: - - description: The ID of the workflow task output - in: path - name: workflow_output_id - required: true - schema: - example: wfout_5cJLQKVF - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutput' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Get a workflow output - tags: - - Workflow Outputs - patch: - description: Update a workflow output - operationId: updateWorkflowOutput - parameters: - - description: The ID of the workflow output - in: path - name: workflow_output_id - required: true - schema: - example: wfout_5cJLQKVF - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutputUpdate' - required: true - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutput' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Update a workflow output - tags: - - Workflow Outputs - /workflow-outputs:archive: - post: - description: Archive one or more workflow outputs - operationId: archiveWorkflowOutputs - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutputsArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutputsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Archive one or more workflow outputs - tags: - - Workflow Outputs - /workflow-outputs:bulk-create: - post: - description: Bulk create new workflow outputs - operationId: bulkCreateWorkflowOutputs - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutputsBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Bulk create new workflow outputs - tags: - - Workflow Outputs - /workflow-outputs:bulk-update: - post: - description: Bulk update workflow outputs - operationId: bulkUpdateWorkflowOutputs - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutputsBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Bulk update workflow outputs - tags: - - Workflow Outputs - /workflow-outputs:unarchive: - post: - description: Unarchive one or more workflow outputs - operationId: unarchiveWorkflowOutputs - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutputsUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowOutputsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Unarchive one or more workflow outputs - tags: - - Workflow Outputs - /workflow-stage-runs/{stage_run_id}/input-samples: - get: - deprecated: true - description: List stage run input samples - operationId: listStageRunInputSamples - parameters: - - description: ID of the stage run to list input samples for - in: path - name: stage_run_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowSampleList' - description: OK - summary: List stage run input samples - tags: - - Legacy Workflows (deprecated) - /workflow-stage-runs/{stage_run_id}/output-samples: - get: - deprecated: true - description: List stage run output samples - operationId: listStageRunOutputSamples - parameters: - - description: ID of the stage run to list output samples for - in: path - name: stage_run_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowSampleList' - description: OK - summary: List stage run output samples - tags: - - Legacy Workflows (deprecated) - /workflow-stage-runs/{stage_run_id}/registered-samples: - get: - deprecated: true - description: List stage run registered samples - operationId: listStageRunRegisteredSamples - parameters: - - description: ID of the stage run to list registered samples for - in: path - name: stage_run_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowSampleList' - description: OK - summary: List stage run registered samples - tags: - - Legacy Workflows (deprecated) - /workflow-stages/{stage_id}/workflow-stage-runs: - get: - deprecated: true - description: List workflow stage runs - operationId: listWorkflowStageRuns - parameters: - - description: ID of the workflow stage to list runs for - in: path - name: stage_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowStageRunList' - description: OK - summary: List workflow stage runs - tags: - - Legacy Workflows (deprecated) - /workflow-task-groups: - get: - description: List workflow task groups - operationId: listWorkflowTaskGroups - parameters: - - description: Comma separated list of workflow task group IDs - in: query - name: ids - schema: - example: prs_giVNQcTL,prs_t6m99v1 - type: string - - description: The workflow task schema ID of tasks in this task group - in: query - name: schemaId - schema: - example: prstsch_KnR9iVum,prstsch_nJ34lw9y - type: string - - description: A folder ID - in: query - name: folderId - schema: - example: lib_bf0636 - type: string - - description: A project ID - in: query - name: projectId - schema: - example: src_NetYd96a - type: string - - description: A comma separated list entry IDs - in: query - name: mentionedIn - schema: - example: etr_30ad79,etr_d00c97 - type: string - - description: Comma separated list of user IDs or "null" - in: query - name: watcherIds - schema: - example: ent_a0SApq3z,ent_asdf72354,null - minLength: 1 - type: string - - description: 'Comma separated list of workflow execution types. Acceptable - execution types are "DIRECT" and "ENTRY" - - ' - in: query - name: executionTypes - schema: - example: ENTRY,DIRECT - minLength: 1 - type: string - - description: Comma separated list of team IDs or "null" - in: query - name: responsibleTeamIds - schema: - example: team_Thepp2c7,team_QqHMbfqK,null - minLength: 1 - type: string - - description: Commas separated list of Status ids. Maximum of 100. Returns - workflows where at least one task is of one of the provided statuses. - in: query - name: statusIds.anyOf - schema: - example: wfts_VFvwv7JV,wfts_wQzUCsW0 - minLength: 1 - type: string - - description: Commas separated list of Status ids. Returns workflows where - none of the tasks are of any of the provided statuses. - in: query - name: statusIds.noneOf - schema: - example: wfts_VFvwv7JV,wfts_wQzUCsW0 - minLength: 1 - type: string - - description: Commas separated list of Status ids. Returns workflows where - all of the tasks are of one of the provided statuses. - in: query - name: statusIds.only - schema: - example: wfts_VFvwv7JV,wfts_wQzUCsW0 - minLength: 1 - type: string - - description: The name of the workflow task group - in: query - name: name - schema: - example: Plasmid Transformation - type: string - - description: Part of the name of the workflow task group - in: query - name: nameIncludes - schema: - example: Plasmid - type: string - - description: Comma separated list of user IDs. - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - example: Im5ldyB0ZXN0Ig== - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Comma-separated list of Workflow Display IDs. - in: query - name: displayIds - schema: - example: VPR001,VPR002 - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived workflow task - groups. Use "ANY_ARCHIVED" to filter for archived workflow task groups regardless - of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived - and unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroupsPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: List workflow task groups - tags: - - Workflow Task Groups - post: - description: Create a new workflow task group. If no name is specified, uses - the workflow schema name and a unique incrementor separated by a single whitespace. - operationId: createWorkflowTaskGroup - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroupCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroup' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Create a new workflow task group - tags: - - Workflow Task Groups - /workflow-task-groups/{workflow_task_group_id}: - get: - description: Get a workflow task group - operationId: getWorkflowTaskGroup - parameters: - - description: The ID of the workflow task group - in: path - name: workflow_task_group_id - required: true - schema: - example: prs_giVNQcTL - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroup' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Get a workflow task group - tags: - - Workflow Task Groups - patch: - description: Update a workflow task group - operationId: updateWorkflowTaskGroup - parameters: - - description: The ID of the workflow task group - in: path - name: workflow_task_group_id - required: true - schema: - example: prs_giVNQcTL - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroupUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroup' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Update a workflow task group. If updating the folder ID, other attributes - cannot be updated at the same time. - tags: - - Workflow Task Groups - /workflow-task-groups:archive: - post: - description: Archive one or more workflows - operationId: archiveWorkflowTaskGroups - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroupsArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroupsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Archive one or more workflows - tags: - - Workflow Task Groups - /workflow-task-groups:unarchive: - post: - description: Unarchive one or more workflows - operationId: unarchiveWorkflowTaskGroups - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroupsUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskGroupsArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Unarchive one or more workflows - tags: - - Workflow Task Groups - /workflow-task-schemas: - get: - description: List workflow task schemas - operationId: listWorkflowTaskSchemas - parameters: - - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskSchemasPaginatedList' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: List workflow task schemas - tags: - - Schemas - /workflow-task-schemas/{schema_id}: - get: - description: Get a workflow task schema - operationId: getWorkflowTaskSchema - parameters: - - description: The workflow task schema ID - in: path - name: schema_id - required: true - schema: - example: prstsch_KnR9iVum - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskSchema' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Get a workflow task schema - tags: - - Schemas - /workflow-tasks: - get: - description: List workflow tasks - operationId: listWorkflowTasks - parameters: - - description: Comma separated list of workflow task IDs - in: query - name: ids - schema: - example: wftask_OnnsW08k,wftask_4ejSW7en - type: string - - description: Comma separated list of workflow IDs - in: query - name: workflowTaskGroupIds - schema: - example: prs_giVNQcTL,prs_t6m99v1 - minLength: 1 - type: string - - description: The ID of the workflow task schema of the workflow task - in: query - name: schemaId - schema: - example: prstsch_KnR9iVum - type: string - - description: Comma separated list of workflow task status ids - in: query - name: statusIds - schema: - example: wfts_wQzUCsW0,wfts_VFvwv7JV - minLength: 1 - type: string - - description: Comma separated list of user ids or "null" - in: query - name: assigneeIds - schema: - example: ent_a0SApq3z,null - minLength: 1 - type: string - - description: Comma separated list of user IDs or "null" - in: query - name: watcherIds - schema: - example: ent_a0SApq3z,ent_asdf72354,null - minLength: 1 - type: string - - description: Comma separated list of team IDs or "null" - in: query - name: responsibleTeamIds - schema: - example: team_Thepp2c7,team_QqHMbfqK,null - minLength: 1 - type: string - - description: Comma separated list of entry IDs - in: query - name: executionOriginIds - schema: - example: etr_d00c97,etr_30ad79 - minLength: 1 - type: string - - description: 'Comma separated list of workflow execution types. Acceptable - execution types are "DIRECT" and "ENTRY" - - ' - in: query - name: executionTypes - schema: - example: ENTRY,DIRECT - minLength: 1 - type: string - - description: 'Comma separated list of bioentity or storable IDs. Maximum of - 100. Returns workflow tasks where the task''s schema fields reference at - least one of the provided items. - - ' - in: query - name: linkedItemIds.anyOf - schema: - example: bfi_ed1ef7,con_1c76c9 - type: string - - description: 'Comma separated list of bioentity or storable IDs. Returns workflow - tasks where the task''s schema fields reference all of the provided items. - - ' - in: query - name: linkedItemIds.allOf - schema: - example: bfi_ed1ef7,con_1c76c9 - type: string - - description: 'Comma separated list of bioentity or storable IDs. Returns workflow - tasks where the task''s schema fields do not reference any of the provided - items. - - ' - in: query - name: linkedItemIds.noneOf - schema: - example: bfi_ed1ef7,con_1c76c9 - type: string - - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < - or >). If any schemaField filters are present, the schemaId param must also - be present. Note that all operators must be separated from any values by - a single space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - - description: The name of the workflow task - in: query - name: name - schema: - example: PR-1 - type: string - - description: Part of the name of the workflow task - in: query - name: nameIncludes - schema: - example: PR - type: string - - description: Comma separated list of user IDs. - in: query - name: creatorIds - schema: - example: ent_a0SApq3z - type: string - - description: 'The date on which the task was scheduled to be executed. Returns - tasks which are scheduled on the provided date. If "null" is provided returns - tasks which are unshceduled. - - ' - in: query - name: scheduledOn - schema: - anyOf: - - enum: - - 'null' - type: string - - example: '2020-01-01' - format: date - type: string - - description: 'The date on which the task was scheduled to be executed. Returns - tasks which are scheduled before the provided date. - - ' - in: query - name: scheduledOn.lt - schema: - example: '2020-01-01' - format: date - type: string - - description: 'The date on which the task was scheduled to be executed. Returns - tasks which are scheduled before or on the provided date. - - ' - in: query - name: scheduledOn.lte - schema: - example: '2020-01-01' - format: date - type: string - - description: 'The date on which the task was scheduled to be executed. Returns - tasks which are scheduled on or after the provided date. - - ' - in: query - name: scheduledOn.gte - schema: - example: '2020-01-01' - format: date - type: string - - description: 'The date on which the task was scheduled to be executed. Returns - tasks which are scheduled after the provided date. - - ' - in: query - name: scheduledOn.gt - schema: - example: '2020-01-01' - format: date - type: string - - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - - example: Im5ldyB0ZXN0Ig== - in: query - name: nextToken - schema: - type: string - - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - nullable: false - type: integer - - description: Comma-separated list of Workflow Task Display IDs. - in: query - name: displayIds - schema: - example: ANG1-T1,ANG1-T2 - type: string - - description: 'Archive reason. Restricts items to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived workflow tasks. - Use "ANY_ARCHIVED" to filter for archived workflow tasks regardless of reason. - Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" to return items for both archived and - unarchived. - - ' - examples: - 1_not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - 2_archived_reason: - summary: Includes items archived for a specific reason. - value: Retired - 3_any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - 4_any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTasksPaginatedList' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: List workflow tasks - tags: - - Workflow Tasks - post: - description: Create a new workflow task - operationId: createWorkflowTask - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskCreate' - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTask' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Create a new workflow task - tags: - - Workflow Tasks - /workflow-tasks/{workflow_task_id}: - get: - description: Get a workflow task - operationId: getWorkflowTask - parameters: - - description: The ID of the workflow task - in: path - name: workflow_task_id - required: true - schema: - example: wftask_OnnsW08k - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTask' - description: OK - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Get a workflow task - tags: - - Workflow Tasks - patch: - description: Update a workflow task - operationId: updateWorkflowTask - parameters: - - description: The ID of the workflow task - in: path - name: workflow_task_id - required: true - schema: - example: wftask_OnnsW08k - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTaskUpdate' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTask' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: Update a workflow task - tags: - - Workflow Tasks - /workflow-tasks/{workflow_task_id}:copy: - post: - description: Creates a new workflow task based on the provided task - operationId: copyWorkflowTask - parameters: - - description: The ID of the workflow task - in: path - name: workflow_task_id - required: true - schema: - example: wftask_OnnsW08k - type: string - responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTask' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundError' - description: Not found - summary: 'Creates a new workflow task with the same fields and assignee as the - provided task and creates a relationship between the two tasks - - ' - tags: - - Workflow Tasks - /workflow-tasks:archive: - post: - description: Archive one or more workflow tasks - operationId: archiveWorkflowTasks - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTasksArchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTasksArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Archive one or more workflow tasks - tags: - - Workflow Tasks - /workflow-tasks:bulk-copy: - post: - description: Bulk creates new workflow tasks based on the provided tasks - operationId: bulkCopyWorkflowTasks - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTasksBulkCopyRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: 'Bulk creates new workflow tasks where each new task has the same fields - and assignee as one of the provided tasks and creates a relationship between - the provided task and its copy - - ' - tags: - - Workflow Tasks - /workflow-tasks:bulk-create: - post: - description: Create one or more workflow tasks - operationId: bulkCreateWorkflowTasks - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTasksBulkCreateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Create one or more workflow tasks - tags: - - Workflow Tasks - /workflow-tasks:bulk-update: - post: - description: Update one or more workflow tasks - operationId: bulkUpdateWorkflowTasks - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTasksBulkUpdateRequest' - responses: - '202': - content: - application/json: - schema: - $ref: '#/components/schemas/AsyncTaskLink' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Update one or more workflow task - tags: - - Workflow Tasks - /workflow-tasks:unarchive: - post: - description: Unarchive one or more workflow tasks - operationId: unarchiveWorkflowTasks - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTasksUnarchive' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowTasksArchivalChange' - description: OK - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestError' - description: Bad request - summary: Unarchive one or more workflow tasks - tags: - - Workflow Tasks - /workflows: - get: - deprecated: true - description: List workflows - operationId: listWorkflows - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowList' - description: OK - summary: List workflows - tags: - - Legacy Workflows (deprecated) - /workflows/{workflow_id}: - patch: - deprecated: true - description: Update workflow metadata - operationId: UpdateWorkflowMetadata - parameters: - - description: ID of the workflow to update - in: path - name: workflow_id - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowPatch' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/LegacyWorkflow' - description: OK - summary: Update workflow - tags: - - Legacy Workflows (deprecated) - /workflows/{workflow_id}/workflow-stages: - get: - deprecated: true - description: List workflow stages - operationId: listWorkflowStages - parameters: - - description: ID of the workflow to list stages for - in: path - name: workflow_id - required: true - schema: - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/WorkflowStageList' - description: OK - summary: List workflow stages - tags: - - Legacy Workflows (deprecated) -components: - examples: - AIGGenerateInputTaskResponse: - value: - response: - apiURL: https://benchling.com/api/v2/automation-input-generators/aif_C3wGA9HF - assayRunId: 588aca02-1a20-4b94-a40f-b3f3a0081749 - automationFileConfig: - name: MyInstrumentName - file: - id: c33fe52d-fe6a-4c98-adcd-211bdf6778f7 - mimeType: text/csv - name: MyInstrumentInputFile.csv - type: RAW_FILE - uploadStatus: IN_PROGRESS - id: aif_C3wGA9HF - status: SUCCEEDED - status: SUCCEEDED - AOPProcessOutputTaskResponse: - value: - response: - apiURL: https://benchling.com/api/v2/automation-output-processors/aop_C3wGA9HF - archiveRecord: - reason: Made in error - assayRunId: 588aca02-1a20-4b94-a40f-b3f3a0081749 - automationFileConfig: - name: MyInstrumentName - file: - id: c33fe52d-fe6a-4c98-adcd-211bdf6778f7 - mimeType: text/csv - name: MyInstrumentInputFile.csv - type: RAW_FILE - uploadStatus: IN_PROGRESS - id: aop_C3wGA9HF - status: SUCCEEDED - status: SUCCEEDED - AaSequencesFindMatchingRegionTaskResponse: - value: - response: - aaSequenceMatches: - - matchingAASequenceIds: - - prtn_TIIi7lto - - prtn_0qTaIIDE - targetAASequenceId: prtn_W1Qh8teE - status: SUCCEEDED - BulkOperateAaSequencesTaskResponse: - value: - response: - aaSequences: - - aliases: - - Example alias - aminoAcids: IKTATARRELAETSWTGDRLWGFSDNWAPALRRPSPSALGK - annotations: - - color: '#85DAE9' - end: 10 - id: prtnann_o7zMPG0P - name: Example annotation - start: 0 - apiURL: https://benchling.com/api/v2/aa-sequences/prtn_7nMBOMm0 - archiveRecord: - reason: Made in error - createdAt: '2021-07-14T07:34:25.156Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - folderId: lib_mrZWMrft - id: prtn_ObbdtGhC - length: 0 - modifiedAt: '2021-07-14T07:34:25.157Z' - name: Example AA Sequence - registrationOrigin: - originEntryId: etr_3wievUIJ - registeredAt: '2021-07-14T07:34:25.157Z' - registryId: src_NetYd96a - schema: - id: ts_DaiFhsNA - name: Example Schema - webURL: https://benchling.com/benchling/f/lib_55UxcIps-registry/prtn_7nMBOMm0-kedchain11/edit" - status: SUCCEEDED - BulkOperateContainersTaskResponse: - value: - response: - containers: - - archiveRecord: - reason: Made in error - barcode: 201006-005 - checkoutRecord: - assignee: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - comment: Example comment - modifiedAt: '2021-07-14T12:27:27.917Z' - status: AVAILABLE - contents: - - batch: - archiveRecord: - reason: Made in error - createdAt: '2021-07-14T12:27:27.917Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - entity: - aliases: - - Example alias - annotations: [] - apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk - archiveRecord: - reason: Made in error - bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG - createdAt: '2021-07-14T12:27:27.917Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - folderId: lib_hBHqKbzE - id: seq_bhuDUw9D - isCircular: true - length: 0 - modifiedAt: '2021-07-14T12:27:27.917Z' - name: Example entity - primers: [] - registrationOrigin: - originEntryId: etr_3wievUIJ - registeredAt: '2021-07-14T07:34:25.157Z' - registryId: src_NetYd96a - schema: - id: ts_DaiFhsNA - name: Example Schema - translations: [] - webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-seqs/seq_bhuDUw9D-example-entity/edit - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - id: bat_UOIr8IjL - modifiedAt: '2021-07-14T12:27:27.917Z' - name: Example Batch - schema: - id: ts_DaiFhsNA - name: Example Schema - webURL: https://benchling.com/benchling/f/lib_55UxcIps-registry/bfi_YtegMKkT-batch-test/edit - concentration: - units: uM - value: 5 - entity: - aliases: - - Example alias - annotations: [] - apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk - archiveRecord: - reason: Made in error - bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG - createdAt: '2021-07-14T12:27:27.917Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - folderId: lib_mrZWMrft - id: seq_bhuDUw9D - isCircular: true - length: 0 - modifiedAt: '2021-07-14T12:27:27.917Z' - name: Example entity - primers: [] - registrationOrigin: - originEntryId: etr_3wievUIJ - registeredAt: '2021-07-14T07:34:25.157Z' - registryId: src_NetYd96a - schema: - id: ts_DaiFhsNA - name: Example Schema - translations: [] - webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-seqs/seq_bhuDUw9D-example-entity/edit - createdAt": '2021-07-14T12:27:27.917Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - id: con_ZBL9QQWD - modifiedAt: '2021-07-14T12:27:27.917Z' - name: Example container - parentStorageId: loc_MmtNUQIA - parentStorageSchema: - id: locsch_ToRk7Elm - name: Building - projectId: src_1m4443Ek - quantity: - units: mL - value: 10 - schema: - id: ts_DaiFhsNA - name: Example Schema - volume: - units: mL - value: 10 - webURL: https://benchling.com/samples/containers/con_FzQ1stz9 - status: SUCCEEDED - BulkOperateCustomEntitiesTaskResponse: - value: - response: - customEntities: - - aliases: - - sBN000 - apiURL: https://benchling.com/api/v2/custom-entities/bfi_xCUXNVyG - archiveRecord: - reason: Made in error - authors: - - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - createdAt: '2021-07-14T07:34:25.156Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - folderId: lib_mrZWMrft - id: prtn_ObbdtGhC - modifiedAt: '2021-07-14T07:34:25.157Z' - name: sBN000 - registrationOrigin: - originEntryId: etr_3wievUIJ - registeredAt: '2021-07-14T07:34:25.157Z' - registryId: src_NetYd96a - schema: - id: ts_DaiFhsNA - name: Example Schema - webURL: https://benchling.com/benchling/f/R8KcsjhW-academic-registry/bfi-xCUXNVyG-sbn000/edit - status: SUCCEEDED - BulkOperateDnaOligosTaskResponse: - value: - response: - dnaOligos: - - aliases: - - Example alias - apiURL: https://benchling.com/api/v2/dna-oligos/seq_bhuDUw9D - archiveRecord: - reason: Made in error - bases: ACTTTTT - createdAt: '2021-07-13T21:00:49.245Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - folderId: lib_mrZWMrft - id: seq_bhuDUw9D - length: 0 - modifiedAt: '2021-07-13T21:00:49.245Z' - name: Example DNA Oligo - nucleotideType: DNA - registrationOrigin: - originEntryId: etr_3wievUIJ - registeredAt: '2021-07-13T21:00:49.245Z' - registryId: src_NetYd96a - schema: - id: ts_DaiFhsNA - name: Example Schema - webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-oligos/seq_bhuDUw9D-test-oligo-abc/edit - status: SUCCEEDED - BulkOperateDnaSequencesTaskResponse: - value: - response: - dnaSequences: - - aliases: - - Example alias - annotations: - - color: '#85DAE9' - end: 10 - name: Example annotation - start: 0 - strand: 0 - type: Example annotation type - apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk - archiveRecord: - reason: Made in error - bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG - createdAt: '2021-07-13T13:16:44.315Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - folderId: lib_mrZWMrft - id: seq_asQya4lk - isCircular: true - length: 0 - modifiedAt: '2021-07-13T13:16:44.315Z' - name: Example sequence - primers: - - bases: CATCG - bindPosition: 0 - color: '#F58A5E' - end: 5 - name: Example primer - oligoId: seq_HJyE332n - overhangLength: 0 - start: 0 - strand: -1 - registrationOrigin: - originEntryId: ent_a0SApq3z - registeredAt: '2021-07-13T13:16:44.315Z' - registryId: src_ae40j3TZ - schema: - id: ts_n4l12nf0 - name: Example schema - translations: - - aminoAcids: KK - end: 0 - regions: - - end: 0 - start: 0 - start: 0 - strand: 1 - webURL: https://benchling.com/benchling/f/lib_zky83cLg-computed-fields/seq_mnY8u4bs-chain-1/edit - status: SUCCEEDED - BulkOperateFeaturesTaskResponse: - value: - response: - features: - - color: '#75C6A9' - featureLibraryId: featlib_cWYhFmxq - featureType: promoter - id: feat_XhYjGBpFoZ4wVary - matchType: nucleotide - name: lacZalpha promoter - pattern: ggagtactgtcctccgagcggagtactgtcctccgagcggagtactgtcctccgagcggagtactgtcctccgagcggagttctgtcctccga - status: SUCCEEDED - BulkOperateRnaOligosTaskResponse: - value: - response: - rnaOligos: - - aliases: - - Example alias - apiURL: https://benchling.com/api/v2/rna-oligos/seq_bhuDUw9 - archiveRecord: - reason: Made in error - bases: ACUUUUU - createdAt: '2021-07-13T21:00:49.245Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - folderId: lib_mrZWMrft - id: seq_bhuDUw9D - length: 0 - modifiedAt: '2021-07-13T21:00:49.245Z' - name: Example RNA Oligo - nucleotideType: DNA - registrationOrigin: - originEntryId: etr_3wievUIJ - registeredAt: '2021-07-13T21:00:49.245Z' - registryId: src_NetYd96a - schema: - id: ts_DaiFhsNA - name: Example Schema - webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-oligos/seq_bhuDUw9D-test-oligo-abc/edit - status: SUCCEEDED - BulkOperateRnaSequencesTaskResponse: - value: - response: - rnaSequences: - - aliases: - - Example alias - annotations: - - color: '#85DAE9' - end: 10 - name: Example annotation - start: 0 - strand: 0 - type: Example annotation type - apiURL: https://benchling.com/api/v2/rna-sequences/seq_asQya4lk - archiveRecord: - reason: Made in error - bases: GUAGCAAAGANUAGUAGCCAGCUGUGAUAAAUGUCAGCUAAAAGGGGAAGCCAUG - createdAt: '2021-07-13T13:16:44.315Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: rna_sequence_link - value: seq_jdf8BV24 - folderId: lib_mrZWMrft - id: seq_asQya4lk - isCircular: false - length: 55 - modifiedAt: '2021-07-13T13:16:44.315Z' - name: Example rna sequence - primers: - - bases: CAUCG - bindPosition: 0 - color: '#F58A5E' - end: 5 - name: Example primer - oligoId: seq_HJyE332n - overhangLength: 0 - start: 0 - strand: 1 - registrationOrigin: - originEntryId: ent_a0SApq3z - registeredAt: '2021-07-13T13:16:44.315Z' - registryId: src_ae40j3TZ - schema: - id: ts_n4l12nf0 - name: Example schema - translations: - - aminoAcids: KK - end: 0 - regions: - - end: 0 - start: 0 - start: 0 - strand: 1 - webURL: https://benchling.com/benchling/f/lib_zky83cLg-example/seq_mnY8u4bs-chain-1/edit - status: SUCCEEDED - BulkTaskFailed: - value: - errors: - index: 0 - message: Invalid field value - message: Your request was invalid. - status: FAILED - DnaCreateAlignmentTaskResponse: - value: - response: - alignedSequences: - - bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG - dnaSequenceId: seq_MYmsnS1u - name: Gene001 - sequenceId: seq_MYmsnS1u - trimEnd: 60 - trimStart: 0 - apiURL: https://benchling.com/api/v2/dna-alignments/seqanl_6ZVdX98t - createdAt: '2021-07-13T12:59:51.903Z' - id: seqanl_6ZVdX98t - modifiedAt: '2021-07-13T12:59:51.903Z' - name: Example alignment - webURL: https://benchling.com/benchling/f/lib_Fy2C0HOl-example/seq_UpzwvUug-consensus/edit?alignment=seqanl_6ZVdX98t - status: SUCCEEDED - EmptySuccessTaskResponse: - value: - response: {} - status: SUCCEEDED - ExportsTaskResponse: - value: - response: - downloadURL: https://benchling-temp.s3.amazonaws.com/benchling-temp/RShkPPS0dj1jsn1LKnbpl7mz421kne52Ndp8UJnB/capillary/export_items/etr_HzOyiNj8.zip?response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAVNBDYFYCFXORLN46%2F20210714%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210714T144850Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEB4aCXVzLWVhc3QtMSJSDNU1IHZ81FpESNaiQLue6l%2Bjz04FWk7fNUhMxiEbLYCt5LDNAiEAhNbTM9EdeAuxlj4svhS01NmwRJZTyF3Bjzr%2BhK22ACcq%2BQMIFxAAGrebNzE1ODk2NTYwNjgiDHKa3fq33iZwsM1KdCrWA8dnOWQ1%2FXsYrrbzk7cCID6qPA%2F3MQH%2F7FaQoMCUvXj06aeH6RhMD5WZyqoaISBr%2FP4FUua%2B%2FFSdAW8UoFpur0IvkSFTi472CA7hfGmgcjspBdsTCrOA8R1ofgscYwOvGcFreenw5l1VhXZDSeXLC9yLJXPBWFzeup8uRyNXQFIHFcmNHvsLiLMUTY0S5eEBc5Zn9SAaWOcm4OGjAurpUJqpTTPOAu5VZOT2d1K2XMy%2FoH7x01Xf0MRIEd0yfyOLK60dhngbaey39vw1wMfPOm3JBvOyVdhGg1WR2sRF1RG10t7dI7iIO2Y4Z3Yb9w%2FdQhlafF8Ss45YtRRv2RRtzfpwoWE846At1pWvhP0tA0I1bhtehd6Upk%2F0iLehO5JWUiYqz1oMfefdZa30JAS9UNdKNqqsX8%2FjhAR9Ff09xKzOD%2FXzqeZwTT0EWtG6hqerKX9%2B%2BULfjB%2F44t3FjL5pRXrxRDIy0uZVI3qhjoRot5Nf7Lm9edccJJ%2BaujnHOMd96mxEcB584VO6eb63I99geVmNO%2FGpuuBvMxf2oV4AN83BEKipJEM3K4OYFI5VASfcTx2V3nMILj8FMKATYEWPYns0KxMuEpQ0Nf7dSSEiFKIfQ1px5iEvMKfPu4cGOqUBUaO0C2gNEeOUs8Fy4ci2hsLw4MW7jVnT5jLEQd2BB44hZzqkMvmeOYeiTxQB%2FgBpqAC%2FfZRF2Am3nCyLaADQYGpRhpg0QFRkBH8ukSxqOx%2BwLvLAV537t5AfFLcqjar4C9a0DXO9hgWfF3yY6HISlZ4NE9VGXei1wqy7i5ZDcbP1%2FlfWqH6LspK2rMJGgAlJthf7De%2BlQ5yJmYW%2FH7KG5eC%2Fu2MV&X-Amz-Signature=b08cad199962bcdc6d0b4b5d2409e90b67a4484ae554ce843f537d1d471ea70d - status: SUCCEEDED - TaskFailed: - value: - message: Alignment not found. - status: FAILED - TaskRunning: - value: - status: RUNNING - TransfersTaskResponse: - value: - response: - destinationContainers: - - archiveRecord: - reason: Made in error - barcode: 201006-005 - checkoutRecord: - assignee: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - comment: Example comment - modifiedAt: '2021-07-14T12:27:27.917Z' - status: AVAILABLE - contents: - - batch: - archiveRecord: - reason: Made in error - createdAt: '2021-07-14T12:27:27.917Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - entity: - aliases: - - Example alias - annotations: [] - apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk - archiveRecord: - reason: Made in error - bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG - createdAt: '2021-07-14T12:27:27.917Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - folderId: lib_hBHqKbzE - id: seq_bhuDUw9D - isCircular: true - length: 0 - modifiedAt: '2021-07-14T12:27:27.917Z' - name: Example entity - primers: [] - registrationOrigin: - originEntryId: etr_3wievUIJ - registeredAt: '2021-07-14T07:34:25.157Z' - registryId: src_NetYd96a - schema: - id: ts_DaiFhsNA - name: Example Schema - translations: [] - webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-seqs/seq_bhuDUw9D-example-entity/edit - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - id: bat_UOIr8IjL - modifiedAt: '2021-07-14T12:27:27.917Z' - name: Example Batch - schema: - id: ts_DaiFhsNA - name: Example Schema - webURL: https://benchling.com/benchling/f/lib_55UxcIps-registry/bfi_YtegMKkT-batch-test/edit - concentration: - units: uM - value: 5 - entity: - aliases: - - Example alias - annotations: [] - apiURL: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk - archiveRecord: - reason: Made in error - bases: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG - createdAt: '2021-07-14T12:27:27.917Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - customFields: - Legacy ID: - value: STR100 - entityRegistryId: sBN000 - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - folderId: lib_mrZWMrft - id: seq_bhuDUw9D - isCircular: true - length: 0 - modifiedAt: '2021-07-14T12:27:27.917Z' - name: Example entity - primers: [] - registrationOrigin: - originEntryId: etr_3wievUIJ - registeredAt: '2021-07-14T07:34:25.157Z' - registryId: src_NetYd96a - schema: - id: ts_DaiFhsNA - name: Example Schema - translations: [] - webURL: https://benchling.com/benchling/f/lib_hBHqKbzE-seqs/seq_bhuDUw9D-example-entity/edit - createdAt": '2021-07-14T12:27:27.917Z' - creator: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - fields: - additionalProp1: - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - id: con_ZBL9QQWD - modifiedAt: '2021-07-14T12:27:27.917Z' - name: Example container - parentStorageId: loc_MmtNUQIA - parentStorageSchema: - id: locsch_ToRk7Elm - name: Building - projectId: src_1m4443Ek - quantity: - units: mL - value: 10 - schema: - id: ts_DaiFhsNA - name: Example Schema - volume: - units: mL - value: 10 - webURL: https://benchling.com/samples/containers/con_FzQ1stz9 - status: SUCCEEDED - parameters: - archiveReasonParameter: - description: 'Archive reason. Restricts results to those with the specified - archive reason. Use "NOT_ARCHIVED" to filter for unarchived items. Use "ANY_ARCHIVED" - to filter for archived items regardless of reason. Use "ANY_ARCHIVED_OR_NOT_ARCHIVED" - to return items for both archived and unarchived. - - ' - examples: - any_archived: - summary: Includes items archived for any reason. - value: ANY_ARCHIVED - any_archived_or_not_archived: - summary: Includes both archived and unarchived items. - value: ANY_ARCHIVED_OR_NOT_ARCHIVED - arhived_reason: - summary: Includes items archived for a specific reason. - value: Retired - not_archived: - summary: Only include unarchived items (default). - value: NOT_ARCHIVED - in: query - name: archiveReason - schema: - type: string - emptyContainersGtParameter: - description: "Only return grids that have greater-than the specified number\ - \ of empty containers\n (containers without contents).\n" - in: query - name: emptyContainers.gt - schema: - type: integer - emptyContainersGteParameter: - description: "Only return grids that have greater-than or equal-to the specified\ - \ number of\n empty containers (containers without contents).\n" - in: query - name: emptyContainers.gte - schema: - type: integer - emptyContainersLtParameter: - description: "Only return grids that have less-than the specified number of\ - \ empty containers\n (containers without contents).\n" - in: query - name: emptyContainers.lt - schema: - type: integer - emptyContainersLteParameter: - description: "Only return grids that have less-than or equal-to the specified\ - \ number of\n empty containers (containers without contents).\n" - in: query - name: emptyContainers.lte - schema: - type: integer - emptyContainersParameter: - description: 'Only return grids that have the specified number of empty containers - (containers without contents). - - ' - in: query - name: emptyContainers - schema: - type: integer - emptyPositionsGtParameter: - description: 'Only return grids that have greater-than the specified number - of empty positions. - - ' - in: query - name: emptyPositions.gt - schema: - type: integer - emptyPositionsGteParameter: - description: 'Only return grids that have greater-than or equal-to the specified - number of empty positions. - - ' - in: query - name: emptyPositions.gte - schema: - type: integer - emptyPositionsLtParameter: - description: 'Only return grids that have less-than the specified number of - empty positions. - - ' - in: query - name: emptyPositions.lt - schema: - type: integer - emptyPositionsLteParameter: - description: 'Only return grids that have less-than or equal-to the specified - number of empty positions. - - ' - in: query - name: emptyPositions.lte - schema: - type: integer - emptyPositionsParameter: - description: 'Only return grids that have the specified number of empty positions - - ' - in: query - name: emptyPositions - schema: - type: integer - modifiedAtParameter: - description: 'Datetime, in RFC 3339 format. Supports the > and < operators. - Time zone defaults to UTC. Restricts results to those modified in the specified - range. e.g. > 2017-04-30. Date ranges can be specified with the following - nomenclature > YYYY-MM-DD AND 2022-03-01 AND < 2022-04-01' - full-rfc-3339-format: - summary: Filter for modified models using the full RFC 3339 format - value: '> 2020-12-31T21:07:14-05:00' - greater-than-example: - summary: Filter for all models modified after a certain date - value: '> 2022-03-01' - in: query - name: modifiedAt - schema: - type: string - nextTokenParameter: - description: Token for pagination - in: query - name: nextToken - schema: - type: string - pageSizeParameter: - description: Number of results to return. Defaults to 50, maximum of 100. - in: query - name: pageSize - schema: - default: 50 - maximum: 100 - minimum: 0 - type: integer - schemaFieldsParameter: - description: 'Filter based on schema field value (not display value). Restricts - results to those with a field whose value matches the filter. For Integer, - Float, and Date type fields, supports the >= and <= operators (but not < or - >). If any schemaField filters are present, the schemaId param must also be - present. Note that all operators must be separated from any values by a single - space. - - ' - in: query - name: schemaFields - schema: - $ref: '#/components/schemas/SchemaFieldsQueryParam' - schemaIdParameter: - description: 'ID of a schema. Restricts results to those of the specified schema. - - ' - in: query - name: schemaId - schema: - type: string - schemas: - AIGGenerateInputAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - $ref: '#/components/schemas/AutomationInputGenerator' - type: object - type: object - AOPProcessOutputAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - $ref: '#/components/schemas/AutomationOutputProcessor' - type: object - type: object - AaAnnotation: - properties: - color: - type: string - end: - description: 0-based exclusive end index. The end of the AA sequence is - always represented as 0. - type: integer - id: - example: prtnann_o7zMPG0P - type: string - name: - maxLength: 255 - type: string - notes: - example: Cong et al Science. 2013 Jan 3. - maxLength: 10000 - type: string - start: - description: 0-based inclusive start index. - type: integer - type: - example: Site - maxLength: 255 - type: string - type: object - AaSequence: - properties: - aliases: - description: Array of aliases - items: - type: string - type: array - aminoAcids: - description: Amino acids of the AA sequence. - example: IKTATARRELAETSWTGDRLWGFSDNWAPALRRPSPSALGK - type: string - annotations: - description: Array of annotation objects on the AA sequence. - items: - $ref: '#/components/schemas/AaAnnotation' - type: array - apiURL: - description: The canonical url of the AA Sequence in the API. - example: https://benchling.com/api/v2/aa-sequences/prtn_7nMBOMm0 - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - createdAt: - description: DateTime the AA sequence was created. - format: date-time - readOnly: true - type: string - creator: - $ref: '#/components/schemas/UserSummary' - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: Custom fields set on the AA sequence. - entityRegistryId: - description: Registry ID of the AA sequence if registered. - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - folderId: - description: ID of the folder that contains the AA sequence. - nullable: true - type: string - id: - description: ID of the AA sequence. - example: prtn_ObbdtGhC - type: string - length: - description: Number of amino acids in the AA sequence. - type: integer - modifiedAt: - description: DateTime the AA sequence was last modified. - format: date-time - readOnly: true - type: string - name: - description: Name of the AA sequence. - type: string - registrationOrigin: - allOf: - - $ref: '#/components/schemas/RegistrationOrigin' - nullable: true - readOnly: true - registryId: - description: Registry the AA sequence is registered in. - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - webURL: - description: URL of the protein. - example: https://benchling.com/benchling/f/lib_55UxcIps-registry/prtn_7nMBOMm0-kedchain11/edit" - format: uri - readOnly: true - type: string - type: object - AaSequenceBaseRequest: - properties: - aliases: - description: Aliases to add to the AA sequence - items: - type: string - type: array - aminoAcids: - description: 'Amino acids for the AA sequence. - - ' - type: string - annotations: - description: 'Annotations to create on the AA sequence. - - ' - items: - $ref: '#/components/schemas/AaAnnotation' - type: array - authorIds: - description: IDs of users to set as the AA sequence's authors. - items: - type: string - type: array - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: 'Custom fields to add to the AA sequence. Every field should - have its name as a key, mapping to an object with information about the - value of the field. - - ' - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Fields to set on the AA sequence. Must correspond with the - schema''s field definitions. Every field should have its name as a key, - mapping to an object with information about the value of the field. - - ' - folderId: - description: 'ID of the folder containing the AA sequence. - - ' - type: string - name: - description: 'Name of the AA sequence. - - ' - type: string - schemaId: - description: 'ID of the AA sequence''s schema. - - ' - type: string - type: object - AaSequenceBaseRequestForCreate: - allOf: - - $ref: '#/components/schemas/AaSequenceBaseRequest' - - required: - - aminoAcids - - name - AaSequenceBulkCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/AaSequenceCreate' - AaSequenceBulkUpdate: - additionalProperties: false - allOf: - - properties: - id: - type: string - type: object - - $ref: '#/components/schemas/AaSequenceBaseRequest' - AaSequenceBulkUpsertRequest: - allOf: - - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' - - $ref: '#/components/schemas/AaSequenceBaseRequestForCreate' - - required: - - annotations - AaSequenceCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/AaSequenceBaseRequestForCreate' - - $ref: '#/components/schemas/CreateEntityIntoRegistry' - AaSequenceRequestRegistryFields: - properties: - entityRegistryId: - type: string - type: object - AaSequenceSummary: - properties: - entityType: - enum: - - aa_sequence - type: string - id: - example: prtn_ObbdtGhC - type: string - type: - deprecated: true - type: string - type: object - AaSequenceUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/AaSequenceBaseRequest' - - $ref: '#/components/schemas/AaSequenceRequestRegistryFields' - AaSequenceUpsert: - allOf: - - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' - - $ref: '#/components/schemas/AaSequenceBaseRequestForCreate' - - required: - - annotations - AaSequenceWithEntityType: - allOf: - - $ref: '#/components/schemas/AaSequence' - - properties: - entityType: - enum: - - aa_sequence - type: string - type: object - type: object - AaSequencesArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of AA sequences along with any IDs of - batches that were archived / unarchived. - - ' - properties: - aaSequenceIds: - items: - type: string - type: array - batchIds: - items: - type: string - type: array - type: object - AaSequencesArchive: - additionalProperties: false - description: 'The request body for archiving AA sequences. - - ' - properties: - aaSequenceIds: - items: - type: string - type: array - reason: - $ref: '#/components/schemas/EntityArchiveReason' - required: - - reason - - aaSequenceIds - type: object - AaSequencesBulkCreateRequest: - additionalProperties: false - properties: - aaSequences: - items: - $ref: '#/components/schemas/AaSequenceBulkCreate' - maxItems: 1000 - type: array - type: object - AaSequencesBulkGet: - properties: - aaSequences: - items: - $ref: '#/components/schemas/AaSequence' - type: array - type: object - AaSequencesBulkUpdateRequest: - additionalProperties: false - properties: - aaSequences: - items: - $ref: '#/components/schemas/AaSequenceBulkUpdate' - type: array - type: object - AaSequencesBulkUpsertRequest: - additionalProperties: false - maxItems: 1000 - properties: - aaSequences: - items: - $ref: '#/components/schemas/AaSequenceBulkUpsertRequest' - type: array - required: - - aaSequences - type: object - AaSequencesFindMatchingRegion: - additionalProperties: false - properties: - registryId: - description: An optional Registry ID to restrict the region search to - example: src_ae40j3TZ - type: string - schemaId: - description: Schema ID for the type of AA to match to the source sequence - example: ts_n4l12nf0 - type: string - targetAASequenceIds: - description: API IDs of the AA sequences which matching regions will be - found for - example: - - prtn_W7KgYydE - - prtn_g7SI2nih - items: - type: string - type: array - required: - - targetAASequenceIds - - schemaId - type: object - AaSequencesMatchBases: - additionalProperties: false - properties: - aminoAcids: - type: string - archiveReason: - default: NOT_ARCHIVED - enum: - - NOT_ARCHIVED - - Other - - Archived - type: string - nextToken: - type: string - pageSize: - default: 50 - maximum: 100 - minimum: 0 - type: integer - registryId: - description: 'ID of a registry. Restricts results to those registered in - this registry. Specifying `null` returns unregistered items. - - ' - nullable: true - type: string - sort: - default: modifiedAt:desc - enum: - - modifiedAt:asc - - modifiedAt:desc - - name:asc - - name:desc - type: string - required: - - aminoAcids - type: object - AaSequencesPaginatedList: - properties: - aaSequences: - items: - $ref: '#/components/schemas/AaSequence' - type: array - nextToken: - type: string - type: object - AaSequencesSearchBases: - additionalProperties: false - properties: - aminoAcids: - minLength: 3 - type: string - archiveReason: - default: NOT_ARCHIVED - enum: - - NOT_ARCHIVED - - Other - - Archived - type: string - nextToken: - type: string - pageSize: - default: 50 - maximum: 100 - minimum: 0 - type: integer - registryId: - description: 'ID of a registry. Restricts results to those registered in - this registry. Specifying `null` returns unregistered items. - - ' - nullable: true - type: string - sort: - default: modifiedAt:desc - enum: - - modifiedAt:asc - - modifiedAt:desc - - name:asc - - name:desc - type: string - required: - - aminoAcids - type: object - AaSequencesUnarchive: - additionalProperties: false - description: 'The request body for unarchiving AA sequences. - - ' - properties: - aaSequenceIds: - items: - type: string - type: array - required: - - aaSequenceIds - type: object - AlignedNucleotideSequence: - properties: - bases: - example: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG - type: string - dnaSequenceId: - deprecated: true - example: seq_MYmsnS1u - nullable: true - type: string - name: - example: Gene001 - type: string - pairwiseIdentity: - description: 'Fraction of bases between trimStart and trimEnd that match - the template bases. Only present for Template Alignments; Will be empty - for Consensus Alignments. - - ' - example: 0.505 - format: float - type: number - sequenceId: - example: seq_MYmsnS1u - nullable: true - type: string - trimEnd: - example: 60 - type: integer - trimStart: - example: 0 - type: integer - type: object - AlignedSequence: - properties: - bases: - example: GTAGCAAAGANTAGTAGCCAGCTGTGATAAATGTCAGCTAAAAGGGGAAGCCATG - type: string - dnaSequenceId: - deprecated: true - example: seq_MYmsnS1u - nullable: true - type: string - name: - example: Gene001 - type: string - pairwiseIdentity: - description: 'Fraction of bases between trimStart and trimEnd that match - the template bases. Only present for Template Alignments; Will be empty - for Consensus Alignments. - - ' - example: 0.505 - format: float - type: number - sequenceId: - example: seq_MYmsnS1u - nullable: true - type: string - trimEnd: - example: 60 - type: integer - trimStart: - example: 0 - type: integer - type: object - AppCanvas: - allOf: - - $ref: '#/components/schemas/AppCanvasBase' - - properties: - app: - allOf: - - $ref: '#/components/schemas/AppSummary' - - nullable: false - id: - example: cnvs_Q4mPJ34a - type: string - type: object - AppCanvasBase: - allOf: - - $ref: '#/components/schemas/AppCanvasUiBlockList' - - properties: - archiveRecord: - nullable: true - properties: - reason: - $ref: '#/components/schemas/AppCanvasesArchiveReason' - type: object - data: - description: 'Additional data to associate with the canvas. Can be useful - for persisting data associated with the canvas but won''t be rendered - to the user. If specified, it must be valid JSON in string format less - than 5kb in total. - - ' - example: '{"key": "value"}' - nullable: true - type: string - enabled: - description: 'Overall control for whether the canvas is interactable or - not. If `false`, every block is disabled and will override the individual - block''s `enabled` property. If `true` or absent, the interactivity - status will defer to the block''s `enabled` property. - - ' - type: boolean - featureId: - description: Identifier of the feature defined in Benchling App Manifest - this canvas corresponds to. - nullable: false - type: string - resourceId: - description: Identifier of the resource object to attach canvas to. - nullable: false - type: string - sessionId: - description: 'Identifier of a session. If specified, app status messages - from the session will be reported in the canvas. - - ' - example: sesn_SwKtkgB5 - nullable: true - type: string - type: object - AppCanvasCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/AppCanvasCreateBase' - - properties: - appId: - description: 'Identifier of the app owning this canvas. For backwards - compatibility, this property will be temporarily optional until the - requisite time window for breaking changes in beta endpoints has passed. - - ' - nullable: false - type: string - type: object - - required: - - blocks - - featureId - - resourceId - - appId - type: object - AppCanvasCreateBase: - allOf: - - $ref: '#/components/schemas/AppCanvasCreateUiBlockList' - - $ref: '#/components/schemas/AppCanvasWriteBase' - type: object - AppCanvasCreateUiBlockList: - properties: - blocks: - items: - discriminator: - mapping: - BUTTON: '#/components/schemas/ButtonUiBlockCreate' - CHIP: '#/components/schemas/ChipUiBlockCreate' - DROPDOWN: '#/components/schemas/DropdownUiBlockCreate' - DROPDOWN_MULTIVALUE: '#/components/schemas/DropdownMultiValueUiBlockCreate' - MARKDOWN: '#/components/schemas/MarkdownUiBlockCreate' - SEARCH_INPUT: '#/components/schemas/SearchInputUiBlockCreate' - SEARCH_INPUT_MULTIVALUE: '#/components/schemas/SearchInputMultiValueUiBlockCreate' - SECTION: '#/components/schemas/SectionUiBlockCreate' - SELECTOR_INPUT: '#/components/schemas/SelectorInputUiBlockCreate' - SELECTOR_INPUT_MULTIVALUE: '#/components/schemas/SelectorInputMultiValueUiBlockCreate' - TABLE: '#/components/schemas/TableUiBlockCreate' - TEXT_INPUT: '#/components/schemas/TextInputUiBlockCreate' - propertyName: type - oneOf: - - $ref: '#/components/schemas/ButtonUiBlockCreate' - - $ref: '#/components/schemas/ChipUiBlockCreate' - - $ref: '#/components/schemas/DropdownUiBlockCreate' - - $ref: '#/components/schemas/DropdownMultiValueUiBlockCreate' - - $ref: '#/components/schemas/MarkdownUiBlockCreate' - - $ref: '#/components/schemas/SearchInputUiBlockCreate' - - $ref: '#/components/schemas/SearchInputMultiValueUiBlockCreate' - - $ref: '#/components/schemas/SectionUiBlockCreate' - - $ref: '#/components/schemas/SelectorInputUiBlockCreate' - - $ref: '#/components/schemas/SelectorInputMultiValueUiBlockCreate' - - $ref: '#/components/schemas/TextInputUiBlockCreate' - - $ref: '#/components/schemas/TableUiBlockCreate' - type: array - type: object - AppCanvasLeafNodeUiBlockList: - properties: - children: - items: - discriminator: - mapping: - BUTTON: '#/components/schemas/ButtonUiBlock' - CHIP: '#/components/schemas/ChipUiBlock' - DROPDOWN: '#/components/schemas/DropdownUiBlock' - DROPDOWN_MULTIVALUE: '#/components/schemas/DropdownMultiValueUiBlock' - MARKDOWN: '#/components/schemas/MarkdownUiBlock' - SEARCH_INPUT: '#/components/schemas/SearchInputUiBlock' - SEARCH_INPUT_MULTIVALUE: '#/components/schemas/SearchInputMultiValueUiBlock' - SELECTOR_INPUT: '#/components/schemas/SelectorInputUiBlock' - SELECTOR_INPUT_MULTIVALUE: '#/components/schemas/SelectorInputMultiValueUiBlock' - TEXT_INPUT: '#/components/schemas/TextInputUiBlock' - propertyName: type - oneOf: - - $ref: '#/components/schemas/ButtonUiBlock' - - $ref: '#/components/schemas/ChipUiBlock' - - $ref: '#/components/schemas/DropdownUiBlock' - - $ref: '#/components/schemas/DropdownMultiValueUiBlock' - - $ref: '#/components/schemas/MarkdownUiBlock' - - $ref: '#/components/schemas/SearchInputUiBlock' - - $ref: '#/components/schemas/SearchInputMultiValueUiBlock' - - $ref: '#/components/schemas/SelectorInputUiBlock' - - $ref: '#/components/schemas/SelectorInputMultiValueUiBlock' - - $ref: '#/components/schemas/TextInputUiBlock' - type: array - required: - - children - type: object - AppCanvasUiBlockList: - properties: - blocks: - items: - discriminator: - mapping: - BUTTON: '#/components/schemas/ButtonUiBlock' - CHIP: '#/components/schemas/ChipUiBlock' - DROPDOWN: '#/components/schemas/DropdownUiBlock' - DROPDOWN_MULTIVALUE: '#/components/schemas/DropdownMultiValueUiBlock' - MARKDOWN: '#/components/schemas/MarkdownUiBlock' - SEARCH_INPUT: '#/components/schemas/SearchInputUiBlock' - SEARCH_INPUT_MULTIVALUE: '#/components/schemas/SearchInputMultiValueUiBlock' - SECTION: '#/components/schemas/SectionUiBlock' - SELECTOR_INPUT: '#/components/schemas/SelectorInputUiBlock' - SELECTOR_INPUT_MULTIVALUE: '#/components/schemas/SelectorInputMultiValueUiBlock' - TABLE: '#/components/schemas/TableUiBlock' - TEXT_INPUT: '#/components/schemas/TextInputUiBlock' - propertyName: type - oneOf: - - $ref: '#/components/schemas/ButtonUiBlock' - - $ref: '#/components/schemas/ChipUiBlock' - - $ref: '#/components/schemas/DropdownUiBlock' - - $ref: '#/components/schemas/DropdownMultiValueUiBlock' - - $ref: '#/components/schemas/MarkdownUiBlock' - - $ref: '#/components/schemas/SearchInputUiBlock' - - $ref: '#/components/schemas/SearchInputMultiValueUiBlock' - - $ref: '#/components/schemas/SectionUiBlock' - - $ref: '#/components/schemas/SelectorInputUiBlock' - - $ref: '#/components/schemas/SelectorInputMultiValueUiBlock' - - $ref: '#/components/schemas/TextInputUiBlock' - - $ref: '#/components/schemas/TableUiBlock' - type: array - type: object - AppCanvasUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/AppCanvasUpdateBase' - type: object - AppCanvasUpdateBase: - allOf: - - $ref: '#/components/schemas/AppCanvasUpdateUiBlockList' - - $ref: '#/components/schemas/AppCanvasWriteBase' - type: object - AppCanvasUpdateUiBlockList: - properties: - blocks: - items: - discriminator: - mapping: - BUTTON: '#/components/schemas/ButtonUiBlockUpdate' - CHIP: '#/components/schemas/ChipUiBlockUpdate' - DROPDOWN: '#/components/schemas/DropdownUiBlockUpdate' - DROPDOWN_MULTIVALUE: '#/components/schemas/DropdownMultiValueUiBlockUpdate' - MARKDOWN: '#/components/schemas/MarkdownUiBlockUpdate' - SEARCH_INPUT: '#/components/schemas/SearchInputUiBlockUpdate' - SEARCH_INPUT_MULTIVALUE: '#/components/schemas/SearchInputMultiValueUiBlockUpdate' - SECTION: '#/components/schemas/SectionUiBlockUpdate' - SELECTOR_INPUT: '#/components/schemas/SelectorInputUiBlockUpdate' - SELECTOR_INPUT_MULTIVALUE: '#/components/schemas/SelectorInputMultiValueUiBlockUpdate' - TABLE: '#/components/schemas/TableUiBlockUpdate' - TEXT_INPUT: '#/components/schemas/TextInputUiBlockUpdate' - propertyName: type - oneOf: - - $ref: '#/components/schemas/ButtonUiBlockUpdate' - - $ref: '#/components/schemas/ChipUiBlockUpdate' - - $ref: '#/components/schemas/DropdownUiBlockUpdate' - - $ref: '#/components/schemas/DropdownMultiValueUiBlockUpdate' - - $ref: '#/components/schemas/MarkdownUiBlockUpdate' - - $ref: '#/components/schemas/SearchInputUiBlockUpdate' - - $ref: '#/components/schemas/SearchInputMultiValueUiBlockUpdate' - - $ref: '#/components/schemas/SectionUiBlockUpdate' - - $ref: '#/components/schemas/SelectorInputUiBlockUpdate' - - $ref: '#/components/schemas/SelectorInputMultiValueUiBlockUpdate' - - $ref: '#/components/schemas/TextInputUiBlockUpdate' - - $ref: '#/components/schemas/TableUiBlockUpdate' - type: array - type: object - AppCanvasWriteBase: - allOf: - - properties: - data: - description: 'Additional data to associate with the canvas. Can be useful - for persisting data associated with the canvas but won''t be rendered - to the user. If specified, it must be valid JSON in string format less - than 5kb in total. - - ' - example: '{"key": "value"}' - nullable: true - type: string - enabled: - description: 'Overall control for whether the canvas is interactable or - not. If `false`, every block is disabled and will override the individual - block''s `enabled` property. If `true` or absent, the interactivity - status will defer to the block''s `enabled` property. - - ' - type: boolean - featureId: - description: Identifier of the feature defined in Benchling App Manifest - this canvas corresponds to. - nullable: false - type: string - resourceId: - description: Identifier of the resource object to attach canvas to. - nullable: false - type: string - sessionId: - description: 'Identifier of a session. If specified, app status messages - from the session will be reported in the canvas. - - ' - example: sesn_SwKtkgB5 - nullable: true - type: string - type: object - AppCanvasesArchivalChange: - additionalProperties: false - description: 'IDs of all items that were archived or unarchived. This includes - the IDs of canvases that were archived / unarchived. - - ' - properties: - canvasIds: - example: - - cnvs_Q4mPJ34a - - cnvs_aNz2kJNv - items: - type: string - type: array - type: object - AppCanvasesArchive: - additionalProperties: false - properties: - canvasIds: - description: Array of canvas IDs - example: - - cnvs_Q4mPJ34a - - cnvs_aNz2kJNv - items: - type: string - type: array - reason: - $ref: '#/components/schemas/AppCanvasesArchiveReason' - required: - - reason - - canvasIds - type: object - AppCanvasesArchiveReason: - description: Reason that canvases are being archived. Actual reason enum varies - by tenant. - enum: - - Other - example: Other - type: string - AppCanvasesUnarchive: - additionalProperties: false - properties: - canvasIds: - description: Array of canvas IDs - example: - - cnvs_Q4mPJ34a - - cnvs_aNz2kJNv - items: - type: string - type: array - required: - - canvasIds - type: object - AppConfigItem: - discriminator: - mapping: - aa_sequence: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - array_element: '#/components/schemas/ArrayElementAppConfigItem' - boolean: '#/components/schemas/BooleanAppConfigItem' - box: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - box_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - container: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - container_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - custom_entity: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - date: '#/components/schemas/DateAppConfigItem' - datetime: '#/components/schemas/DatetimeAppConfigItem' - dna_oligo: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - dna_sequence: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - dropdown: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - dropdown_option: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - entity_schema: '#/components/schemas/EntitySchemaAppConfigItem' - entry: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - entry_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - field: '#/components/schemas/FieldAppConfigItem' - float: '#/components/schemas/FloatAppConfigItem' - folder: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - integer: '#/components/schemas/IntegerAppConfigItem' - json: '#/components/schemas/JsonAppConfigItem' - location: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - location_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - mixture: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - molecule: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - plate: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - plate_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - project: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - registry: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - request_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - result_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - rna_oligo: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - rna_sequence: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - run_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - secure_text: '#/components/schemas/SecureTextAppConfigItem' - text: '#/components/schemas/TextAppConfigItem' - workflow_task_schema: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - workflow_task_status: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - worklist: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - propertyName: type - oneOf: - - $ref: '#/components/schemas/ArrayElementAppConfigItem' - - $ref: '#/components/schemas/DateAppConfigItem' - - $ref: '#/components/schemas/DatetimeAppConfigItem' - - $ref: '#/components/schemas/JsonAppConfigItem' - - $ref: '#/components/schemas/EntitySchemaAppConfigItem' - - $ref: '#/components/schemas/FieldAppConfigItem' - - $ref: '#/components/schemas/BooleanAppConfigItem' - - $ref: '#/components/schemas/IntegerAppConfigItem' - - $ref: '#/components/schemas/FloatAppConfigItem' - - $ref: '#/components/schemas/TextAppConfigItem' - - $ref: '#/components/schemas/GenericApiIdentifiedAppConfigItem' - - $ref: '#/components/schemas/SecureTextAppConfigItem' - type: object - AppConfigItemApiMixin: - properties: - apiURL: - format: uri - readOnly: true - type: string - app: - properties: - id: - description: The id of the Benchling app to which this configuration - item belongs - nullable: false - type: string - type: object - createdAt: - description: DateTime the app config item was created - format: date-time - readOnly: true - type: string - id: - readOnly: true - type: string - modifiedAt: - description: DateTime the app config item was last modified - format: date-time - readOnly: true - type: string - path: - description: Array-based representation of config item's location in the - tree in order from top to bottom. - example: - - My Schema 1 - - My Field 1 - items: - type: string - type: array - type: - description: Type of the app config item - type: string - type: object - AppConfigItemBooleanBulkUpdate: - allOf: - - $ref: '#/components/schemas/AppConfigItemBooleanUpdate' - - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' - type: object - AppConfigItemBooleanCreate: - allOf: - - $ref: '#/components/schemas/AppConfigItemCreateMixin' - - properties: - type: - enum: - - boolean - example: boolean - type: string - value: - nullable: true - type: boolean - - required: - - value - - type - type: object - AppConfigItemBooleanUpdate: - properties: - type: - enum: - - boolean - example: boolean - type: string - value: - nullable: true - type: boolean - required: - - value - - type - type: object - AppConfigItemBulkUpdate: - discriminator: - mapping: - aa_sequence: '#/components/schemas/AppConfigItemGenericBulkUpdate' - boolean: '#/components/schemas/AppConfigItemBooleanBulkUpdate' - box: '#/components/schemas/AppConfigItemGenericBulkUpdate' - box_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - container: '#/components/schemas/AppConfigItemGenericBulkUpdate' - container_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - custom_entity: '#/components/schemas/AppConfigItemGenericBulkUpdate' - date: '#/components/schemas/AppConfigItemDateBulkUpdate' - datetime: '#/components/schemas/AppConfigItemDatetimeBulkUpdate' - dna_oligo: '#/components/schemas/AppConfigItemGenericBulkUpdate' - dna_sequence: '#/components/schemas/AppConfigItemGenericBulkUpdate' - dropdown: '#/components/schemas/AppConfigItemGenericBulkUpdate' - dropdown_option: '#/components/schemas/AppConfigItemGenericBulkUpdate' - entity_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - entry: '#/components/schemas/AppConfigItemGenericBulkUpdate' - entry_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - field: '#/components/schemas/AppConfigItemGenericBulkUpdate' - float: '#/components/schemas/AppConfigItemFloatBulkUpdate' - folder: '#/components/schemas/AppConfigItemGenericBulkUpdate' - integer: '#/components/schemas/AppConfigItemIntegerBulkUpdate' - json: '#/components/schemas/AppConfigItemJsonBulkUpdate' - location: '#/components/schemas/AppConfigItemGenericBulkUpdate' - location_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - mixture: '#/components/schemas/AppConfigItemGenericBulkUpdate' - molecule: '#/components/schemas/AppConfigItemGenericBulkUpdate' - plate: '#/components/schemas/AppConfigItemGenericBulkUpdate' - plate_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - project: '#/components/schemas/AppConfigItemGenericBulkUpdate' - registry: '#/components/schemas/AppConfigItemGenericBulkUpdate' - request_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - result_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - rna_oligo: '#/components/schemas/AppConfigItemGenericBulkUpdate' - rna_sequence: '#/components/schemas/AppConfigItemGenericBulkUpdate' - run_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - secure_text: '#/components/schemas/AppConfigItemGenericBulkUpdate' - text: '#/components/schemas/AppConfigItemGenericBulkUpdate' - workflow_task_schema: '#/components/schemas/AppConfigItemGenericBulkUpdate' - workflow_task_status: '#/components/schemas/AppConfigItemGenericBulkUpdate' - worklist: '#/components/schemas/AppConfigItemGenericBulkUpdate' - propertyName: type - oneOf: - - $ref: '#/components/schemas/AppConfigItemGenericBulkUpdate' - - $ref: '#/components/schemas/AppConfigItemBooleanBulkUpdate' - - $ref: '#/components/schemas/AppConfigItemIntegerBulkUpdate' - - $ref: '#/components/schemas/AppConfigItemFloatBulkUpdate' - - $ref: '#/components/schemas/AppConfigItemDateBulkUpdate' - - $ref: '#/components/schemas/AppConfigItemDatetimeBulkUpdate' - - $ref: '#/components/schemas/AppConfigItemJsonBulkUpdate' - type: object - AppConfigItemBulkUpdateMixin: - properties: - id: - example: aci_ae92kBv9aNSl593z - type: string - required: - - id - type: object - AppConfigItemCreate: - discriminator: - mapping: - aa_sequence: '#/components/schemas/AppConfigItemGenericCreate' - boolean: '#/components/schemas/AppConfigItemBooleanCreate' - box: '#/components/schemas/AppConfigItemGenericCreate' - box_schema: '#/components/schemas/AppConfigItemGenericCreate' - container: '#/components/schemas/AppConfigItemGenericCreate' - container_schema: '#/components/schemas/AppConfigItemGenericCreate' - custom_entity: '#/components/schemas/AppConfigItemGenericCreate' - date: '#/components/schemas/AppConfigItemDateCreate' - datetime: '#/components/schemas/AppConfigItemDatetimeCreate' - dna_oligo: '#/components/schemas/AppConfigItemGenericCreate' - dna_sequence: '#/components/schemas/AppConfigItemGenericCreate' - dropdown: '#/components/schemas/AppConfigItemGenericCreate' - dropdown_option: '#/components/schemas/AppConfigItemGenericCreate' - entity_schema: '#/components/schemas/AppConfigItemGenericCreate' - entry: '#/components/schemas/AppConfigItemGenericCreate' - entry_schema: '#/components/schemas/AppConfigItemGenericCreate' - field: '#/components/schemas/AppConfigItemGenericCreate' - float: '#/components/schemas/AppConfigItemFloatCreate' - folder: '#/components/schemas/AppConfigItemGenericCreate' - integer: '#/components/schemas/AppConfigItemIntegerCreate' - json: '#/components/schemas/AppConfigItemJsonCreate' - location: '#/components/schemas/AppConfigItemGenericCreate' - location_schema: '#/components/schemas/AppConfigItemGenericCreate' - mixture: '#/components/schemas/AppConfigItemGenericCreate' - molecule: '#/components/schemas/AppConfigItemGenericCreate' - plate: '#/components/schemas/AppConfigItemGenericCreate' - plate_schema: '#/components/schemas/AppConfigItemGenericCreate' - project: '#/components/schemas/AppConfigItemGenericCreate' - registry: '#/components/schemas/AppConfigItemGenericCreate' - request_schema: '#/components/schemas/AppConfigItemGenericCreate' - result_schema: '#/components/schemas/AppConfigItemGenericCreate' - rna_oligo: '#/components/schemas/AppConfigItemGenericCreate' - rna_sequence: '#/components/schemas/AppConfigItemGenericCreate' - run_schema: '#/components/schemas/AppConfigItemGenericCreate' - secure_text: '#/components/schemas/AppConfigItemGenericCreate' - text: '#/components/schemas/AppConfigItemGenericCreate' - workflow_task_schema: '#/components/schemas/AppConfigItemGenericCreate' - workflow_task_status: '#/components/schemas/AppConfigItemGenericCreate' - worklist: '#/components/schemas/AppConfigItemGenericCreate' - propertyName: type - oneOf: - - $ref: '#/components/schemas/AppConfigItemGenericCreate' - - $ref: '#/components/schemas/AppConfigItemBooleanCreate' - - $ref: '#/components/schemas/AppConfigItemIntegerCreate' - - $ref: '#/components/schemas/AppConfigItemFloatCreate' - - $ref: '#/components/schemas/AppConfigItemDateCreate' - - $ref: '#/components/schemas/AppConfigItemDatetimeCreate' - - $ref: '#/components/schemas/AppConfigItemJsonCreate' - type: object - AppConfigItemCreateMixin: - properties: - appId: - description: App id to which this config item belongs. - example: app_J39na03L1nsLS34o - type: string - path: - description: Array-based representation of config item's location in the - tree in order from top to bottom. - example: - - My Schema 1 - - My Field 1 - items: - type: string - type: array - required: - - path - - appId - type: object - AppConfigItemDateBulkUpdate: - allOf: - - $ref: '#/components/schemas/AppConfigItemDateUpdate' - - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' - type: object - AppConfigItemDateCreate: - allOf: - - $ref: '#/components/schemas/AppConfigItemCreateMixin' - - properties: - type: - enum: - - date - type: string - value: - example: '2022-05-03' - format: date - nullable: true - type: string - - required: - - value - - type - type: object - AppConfigItemDateUpdate: - properties: - type: - enum: - - date - type: string - value: - example: '2022-03-18' - nullable: true - type: string - required: - - value - - type - type: object - AppConfigItemDatetimeBulkUpdate: - allOf: - - $ref: '#/components/schemas/AppConfigItemDatetimeUpdate' - - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' - type: object - AppConfigItemDatetimeCreate: - allOf: - - $ref: '#/components/schemas/AppConfigItemCreateMixin' - - properties: - type: - enum: - - datetime - type: string - value: - example: 2022-03-18 05:14:35 PM - format: datetime - nullable: true - type: string - - required: - - value - - type - type: object - AppConfigItemDatetimeUpdate: - properties: - type: - enum: - - datetime - type: string - value: - example: 2022-03-18 05:14:35 PM - nullable: true - type: string - required: - - value - - type - type: object - AppConfigItemFloatBulkUpdate: - allOf: - - $ref: '#/components/schemas/AppConfigItemFloatUpdate' - - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' - type: object - AppConfigItemFloatCreate: - allOf: - - $ref: '#/components/schemas/AppConfigItemCreateMixin' - - properties: - type: - enum: - - float - example: float - type: string - value: - format: float - nullable: true - type: number - - required: - - value - - type - type: object - AppConfigItemFloatUpdate: - properties: - type: - enum: - - float - example: float - type: string - value: - format: float - nullable: true - type: number - required: - - value - - type - type: object - AppConfigItemGenericBulkUpdate: - allOf: - - $ref: '#/components/schemas/AppConfigItemGenericUpdate' - - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' - type: object - AppConfigItemGenericCreate: - allOf: - - $ref: '#/components/schemas/AppConfigItemCreateMixin' - - properties: - type: - enum: - - container_schema - - entity_schema - - plate_schema - - location_schema - - box_schema - - run_schema - - result_schema - - request_schema - - entry_schema - - workflow_task_schema - - dropdown - - dropdown_option - - field - - text - - date - - datetime - - secure_text - - json - - registry - - folder - - entry - - worklist - - project - - workflow_task_status - - dna_sequence - - dna_oligo - - aa_sequence - - custom_entity - - mixture - - molecule - - rna_oligo - - rna_sequence - - box - - container - - location - - plate - type: string - value: - nullable: true - type: string - - required: - - value - - type - type: object - AppConfigItemGenericUpdate: - properties: - type: - enum: - - container_schema - - entity_schema - - plate_schema - - location_schema - - box_schema - - run_schema - - result_schema - - request_schema - - entry_schema - - workflow_task_schema - - dropdown - - dropdown_option - - field - - text - - date - - datetime - - secure_text - - json - - registry - - folder - - entry - - worklist - - project - - workflow_task_status - - dna_sequence - - dna_oligo - - aa_sequence - - custom_entity - - mixture - - molecule - - rna_oligo - - rna_sequence - - box - - container - - location - - plate - type: string - value: - nullable: true - type: string - required: - - value - - type - type: object - AppConfigItemIntegerBulkUpdate: - allOf: - - $ref: '#/components/schemas/AppConfigItemIntegerUpdate' - - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' - type: object - AppConfigItemIntegerCreate: - allOf: - - $ref: '#/components/schemas/AppConfigItemCreateMixin' - - properties: - type: - enum: - - integer - example: integer - type: string - value: - nullable: true - type: integer - - required: - - value - - type - type: object - AppConfigItemIntegerUpdate: - properties: - type: - enum: - - integer - example: integer - type: string - value: - nullable: true - type: integer - required: - - value - - type - type: object - AppConfigItemJsonBulkUpdate: - allOf: - - $ref: '#/components/schemas/AppConfigItemJsonUpdate' - - $ref: '#/components/schemas/AppConfigItemBulkUpdateMixin' - type: object - AppConfigItemJsonCreate: - allOf: - - $ref: '#/components/schemas/AppConfigItemCreateMixin' - - properties: - type: - enum: - - json - example: json - type: string - value: - description: The value of a json create object should be json parseable. - nullable: true - type: string - - required: - - value - - type - type: object - AppConfigItemJsonUpdate: - properties: - type: - enum: - - json - example: json - type: string - value: - nullable: true - type: string - required: - - value - - type - type: object - AppConfigItemUpdate: - discriminator: - mapping: - aa_sequence: '#/components/schemas/AppConfigItemGenericUpdate' - boolean: '#/components/schemas/AppConfigItemBooleanUpdate' - box: '#/components/schemas/AppConfigItemGenericUpdate' - box_schema: '#/components/schemas/AppConfigItemGenericUpdate' - container: '#/components/schemas/AppConfigItemGenericUpdate' - container_schema: '#/components/schemas/AppConfigItemGenericUpdate' - custom_entity: '#/components/schemas/AppConfigItemGenericUpdate' - date: '#/components/schemas/AppConfigItemDateUpdate' - datetime: '#/components/schemas/AppConfigItemDatetimeUpdate' - dna_oligo: '#/components/schemas/AppConfigItemGenericUpdate' - dna_sequence: '#/components/schemas/AppConfigItemGenericUpdate' - dropdown: '#/components/schemas/AppConfigItemGenericUpdate' - dropdown_option: '#/components/schemas/AppConfigItemGenericUpdate' - entity_schema: '#/components/schemas/AppConfigItemGenericUpdate' - entry: '#/components/schemas/AppConfigItemGenericUpdate' - entry_schema: '#/components/schemas/AppConfigItemGenericUpdate' - field: '#/components/schemas/AppConfigItemGenericUpdate' - float: '#/components/schemas/AppConfigItemFloatUpdate' - folder: '#/components/schemas/AppConfigItemGenericUpdate' - integer: '#/components/schemas/AppConfigItemIntegerUpdate' - json: '#/components/schemas/AppConfigItemJsonUpdate' - location: '#/components/schemas/AppConfigItemGenericUpdate' - location_schema: '#/components/schemas/AppConfigItemGenericUpdate' - mixture: '#/components/schemas/AppConfigItemGenericUpdate' - molecule: '#/components/schemas/AppConfigItemGenericUpdate' - plate: '#/components/schemas/AppConfigItemGenericUpdate' - plate_schema: '#/components/schemas/AppConfigItemGenericUpdate' - project: '#/components/schemas/AppConfigItemGenericUpdate' - registry: '#/components/schemas/AppConfigItemGenericUpdate' - request_schema: '#/components/schemas/AppConfigItemGenericUpdate' - result_schema: '#/components/schemas/AppConfigItemGenericUpdate' - rna_oligo: '#/components/schemas/AppConfigItemGenericUpdate' - rna_sequence: '#/components/schemas/AppConfigItemGenericUpdate' - run_schema: '#/components/schemas/AppConfigItemGenericUpdate' - secure_text: '#/components/schemas/AppConfigItemGenericUpdate' - text: '#/components/schemas/AppConfigItemGenericUpdate' - workflow_task_schema: '#/components/schemas/AppConfigItemGenericUpdate' - workflow_task_status: '#/components/schemas/AppConfigItemGenericUpdate' - worklist: '#/components/schemas/AppConfigItemGenericUpdate' - propertyName: type - oneOf: - - $ref: '#/components/schemas/AppConfigItemGenericUpdate' - - $ref: '#/components/schemas/AppConfigItemBooleanUpdate' - - $ref: '#/components/schemas/AppConfigItemIntegerUpdate' - - $ref: '#/components/schemas/AppConfigItemFloatUpdate' - - $ref: '#/components/schemas/AppConfigItemDateUpdate' - - $ref: '#/components/schemas/AppConfigItemDatetimeUpdate' - - $ref: '#/components/schemas/AppConfigItemJsonUpdate' - type: object - AppConfigItemsBulkCreateRequest: - properties: - appConfigurationItems: - items: - $ref: '#/components/schemas/AppConfigItemCreate' - maxItems: 1000 - type: array - required: - - appConfigurationItems - type: object - AppConfigItemsBulkUpdateRequest: - properties: - appConfigurationItems: - items: - $ref: '#/components/schemas/AppConfigItemBulkUpdate' - maxItems: 1000 - type: array - required: - - appConfigurationItems - type: object - AppConfigurationPaginatedList: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - appConfigurationItems: - items: - $ref: '#/components/schemas/AppConfigItem' - type: array - type: object - AppSession: - additionalProperties: false - properties: - app: - allOf: - - $ref: '#/components/schemas/AppSummary' - - nullable: false - createdAt: - format: date-time - nullable: false - type: string - id: - nullable: false - type: string - messages: - description: 'An array of `SessionMessage` describing the current session - state. - - ' - items: - $ref: '#/components/schemas/AppSessionMessage' - nullable: true - type: array - modifiedAt: - format: date-time - nullable: false - type: string - name: - description: A brief description of the app's actions for users. Length - must be between 3-100 chars. It becomes immutable once a value is set. - maxLength: 100 - minLength: 3 - nullable: false - type: string - status: - $ref: '#/components/schemas/AppSessionStatus' - timeoutSeconds: - description: 'Timeout in seconds, a value between 1 second and 30 days. - Once set, it can only be increased, not decreased. - - ' - maximum: 2592000 - minimum: 1 - nullable: false - type: integer - type: object - AppSessionCreate: - additionalProperties: false - properties: - appId: - nullable: false - type: string - messages: - default: [] - description: 'An array of `SessionMessage` describing the current session - state. - - ' - items: - $ref: '#/components/schemas/AppSessionMessageCreate' - nullable: false - type: array - name: - description: The name of the session. Length must be between 3-100 chars. - Value is required and immutable once set. - maxLength: 100 - minLength: 3 - nullable: false - type: string - timeoutSeconds: - description: 'Timeout in seconds, a value between 1 second and 30 days. - Once set, it can only be increased, not decreased. - - ' - maximum: 2592000 - minimum: 1 - nullable: false - type: integer - required: - - appId - - name - - timeoutSeconds - type: object - AppSessionMessage: - allOf: - - $ref: '#/components/schemas/AppSessionMessageCreate' - type: object - AppSessionMessageCreate: - additionalProperties: false - properties: - content: - description: 'A message string, to be rendered as plain text with Benchling - chips. References to Benchling items (up to 10 per msg) will be rendered - as chips in the Benchling UX. A valid reference is a Benchling API id, - prefixed with "id:" and contained by braces. For example: "{id:ent_a0SApq3}."' - example: 'Transferred 4ml of {id:ent_a0SApq3z} to {id:con_ae92kBv9} with - \{priority: p3\}.' - maxLength: 200 - minLength: 3 - nullable: false - type: string - style: - $ref: '#/components/schemas/AppSessionMessageStyle' - required: - - content - type: object - AppSessionMessageStyle: - default: NONE - enum: - - ERROR - - INFO - - NONE - - SUCCESS - - WARNING - nullable: false - type: string - AppSessionStatus: - description: 'All possible values of a Session''s status, including system-updated - and user-updated values. - - ' - enum: - - COMPLETED_WITH_WARNINGS - - FAILED - - RUNNING - - SUCCEEDED - - TIMEOUT - type: string - AppSessionUpdate: - additionalProperties: false - description: Update a session's messages or increase timeoutSeconds. - properties: - messages: - description: 'An array of `SessionMessage` describing the current session - state. - - ' - items: - $ref: '#/components/schemas/AppSessionMessageCreate' - maxItems: 10 - nullable: false - type: array - status: - $ref: '#/components/schemas/AppSessionUpdateStatus' - timeoutSeconds: - description: 'Timeout in seconds, a value between 1 second and 30 days. - Once set, it can only be increased, not decreased. - - ' - maximum: 2592000 - minimum: 1 - type: integer - type: object - AppSessionUpdateStatus: - description: Values that can be specified when updating the status of a Session - enum: - - COMPLETED_WITH_WARNINGS - - FAILED - - SUCCEEDED - type: string - AppSummary: - properties: - id: - description: The id of the Benchling app. - nullable: false - type: string - type: object - ArchiveRecord: - properties: - reason: - example: Made in error - type: string - type: object - ArchiveRecordSet: - additionalProperties: false - description: Currently, we only support setting a null value for archiveRecord, - which unarchives the item - example: null - nullable: true - type: object - ArrayElementAppConfigItem: - allOf: - - $ref: '#/components/schemas/AppConfigItemApiMixin' - AssayFieldsCreate: - additionalProperties: true - type: object - AssayResult: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - description: 'ArchiveRecord Resource if the result is archived. This is - null if the result is not archived. - - ' - nullable: true - createdAt: - description: DateTime at which the the result was created - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - description: UserSummary Resource of who created the request - readOnly: true - entryId: - description: ID of the entry that this result is attached to - nullable: true - type: string - fieldValidation: - additionalProperties: - $ref: '#/components/schemas/UserValidation' - description: 'Object mapping field names to a UserValidation Resource object - for that field. To **set** validation for a result, you *must* use this - object. - - ' - type: object - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Field values for the returned result. Please note the keys - of each field are the field''s warehouse name (additional_prop) instead - of the field''s display name (additionalProp). - - ' - example: - - additional_prop: null - displayValue: Amp - isMulti: true - textValue: Amp - type: dna_sequence_link - value: - - seq_jdf8BV24 - id: - description: ID of the result - type: string - isReviewed: - description: Whether or not this result is attached to an accepted entry - type: boolean - modifiedAt: - description: DateTime at which the the result was last modified - format: date-time - readOnly: true - type: string - projectId: - description: ID of the project to insert the result into - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - description: Schema that the result belongs to - title: SchemaProperty - validationComment: - readOnly: true - type: string - validationStatus: - readOnly: true - type: string - type: object - AssayResultCreate: - properties: - fieldValidation: - additionalProperties: - $ref: '#/components/schemas/UserValidation' - description: 'Dictionary mapping field names to UserValidation Resources. - - ' - type: object - fields: - anyOf: - - $ref: '#/components/schemas/Fields' - - $ref: '#/components/schemas/AssayFieldsCreate' - description: 'Dictionary of result fields. Please note the field keys must - be the field''s warehouse name, not display name. - - ' - example: - my_entity_link: - value: bfi_a0B1cd23 - my_text_field: - value: some text - id: - description: UUID - type: string - projectId: - description: 'The project that the assay result should be uploaded to. Only - users with read access to the project will be able to read the assay result. - Leaving this empty will result in only the creator having read access. - - ' - nullable: true - type: string - schemaId: - description: ID of result schema under which to upload this result - type: string - required: - - schemaId - - fields - type: object - AssayResultIdsRequest: - additionalProperties: false - properties: - assayResultIds: - items: - format: uuid - type: string - type: array - required: - - assayResultIds - type: object - AssayResultIdsResponse: - properties: - assayResultIds: - items: - format: uuid - type: string - type: array - type: object - AssayResultSchema: - allOf: - - $ref: '#/components/schemas/BaseAssaySchema' - - properties: - modifiedAt: - description: DateTime the Assay Result Schema was last modified - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - type: string - type: - enum: - - assay_result - readOnly: true - type: string - type: object - AssayResultSchemasPaginatedList: - properties: - assayResultSchemas: - items: - $ref: '#/components/schemas/AssayResultSchema' - readOnly: true - type: array - nextToken: - type: string - type: object - AssayResultTransactionCreateResponse: - properties: - id: - format: uuid - type: string - type: object - AssayResultsArchive: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/AssayResultIdsRequest' - - properties: - reason: - description: The reason for archiving the provided results. Accepted reasons - may differ based on tenant configuration - enum: - - Made in error - - Archived - - Other - type: string - type: object - AssayResultsBulkCreateInTableRequest: - allOf: - - $ref: '#/components/schemas/AssayResultsBulkCreateRequest' - - properties: - tableId: - example: strtbl_IakA58In - type: string - required: - - assayResults - type: object - AssayResultsBulkCreateRequest: - additionalProperties: false - properties: - assayResults: - items: - $ref: '#/components/schemas/AssayResultCreate' - type: array - required: - - assayResults - type: object - AssayResultsBulkGet: - properties: - assayResults: - items: - $ref: '#/components/schemas/AssayResult' - type: array - type: object - AssayResultsCreateErrorResponse: - properties: - assayResults: - default: null - items: - type: object - nullable: true - type: array - errors: - items: - properties: - fields: - type: object - global: - items: - type: string - type: array - type: object - type: array - type: object - AssayResultsCreateResponse: - properties: - assayResults: - items: - format: uuid - type: string - type: array - errors: - default: null - nullable: true - type: object - type: object - AssayResultsPaginatedList: - properties: - assayResults: - items: - $ref: '#/components/schemas/AssayResult' - type: array - nextToken: - type: string - type: object - AssayRun: - properties: - apiURL: - description: The canonical url of the Run in the API. - example: https://benchling.com/api/v2/assay-runs/21f50003-0389-4b2a-9293-a17967b85961 - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - createdAt: - example: '2021-05-06T13:43:25.752597+00:00' - type: string - creator: - $ref: '#/components/schemas/UserSummary' - entryId: - example: etr_Hds1XAaq - nullable: true - type: string - equipmentId: - example: eqpt_XzU5p4dR - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - id: - example: 77af3205-65af-457f-87f5-75462b85075a - type: string - isReviewed: - type: boolean - projectId: - example: src_YzU5p4dR - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - example: - id: assaysch_fFLKmdmG - name: Assay Run - nullable: true - title: SchemaProperty - validationComment: - example: Reported valid with no caveats - nullable: true - type: string - validationStatus: - $ref: '#/components/schemas/AssayRunValidationStatus' - type: object - AssayRunCreate: - properties: - fields: - anyOf: - - $ref: '#/components/schemas/Fields' - - $ref: '#/components/schemas/AssayFieldsCreate' - description: Object of assay run fields - id: - description: ID of assay run - type: string - projectId: - description: 'The project that the assay run should be uploaded to. Only - users with read access to the project will be able to read the assay run. - Leaving this empty will result in only the creator having read access. - - ' - type: string - schemaId: - description: ID of assay schema that assay run conforms to - type: string - validationComment: - description: Additional information about the validation status - type: string - validationStatus: - $ref: '#/components/schemas/AssayRunValidationStatus' - required: - - schemaId - - fields - type: object - AssayRunCreatedEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - assayRun: - $ref: '#/components/schemas/AssayRun' - eventType: - enum: - - v2.assayRun.created - type: string - type: object - AssayRunNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - properties: - assayRunId: - example: 588aca02-1a20-4b94-a40f-b3f3a0081749 - nullable: true - type: string - assayRunSchemaId: - example: assaysch_msh1Ly6g - type: string - type: - enum: - - assay_run - type: string - type: object - AssayRunSchema: - allOf: - - $ref: '#/components/schemas/BaseAssaySchema' - - properties: - automationInputFileConfigs: - items: - properties: - name: - type: string - type: object - type: array - automationOutputFileConfigs: - items: - properties: - name: - type: string - type: object - type: array - modifiedAt: - description: DateTime the Assay Run Schema was last modified - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - type: string - type: - enum: - - assay_run - readOnly: true - type: string - type: object - AssayRunSchemasPaginatedList: - properties: - assayRunSchemas: - items: - $ref: '#/components/schemas/AssayRunSchema' - readOnly: true - type: array - nextToken: - type: string - type: object - AssayRunUpdate: - additionalProperties: false - properties: - equipmentId: - description: The equipment that the assay run should be associated with. This - attribute is only supported if the equipment feature is enabled for the - tenant; otherwise, supplying it leads to a 400 request error - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - type: object - AssayRunUpdatedFieldsEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - $ref: '#/components/schemas/UpdateEventMixin' - - properties: - assayRun: - $ref: '#/components/schemas/AssayRun' - eventType: - enum: - - v2.assayRun.updated.fields - type: string - type: object - AssayRunValidationStatus: - description: Must be either VALID or INVALID - enum: - - VALID - - INVALID - type: string - AssayRunsArchivalChange: - description: 'IDs of all Assay Runs that were archived / unarchived. - - ' - properties: - assayRunIds: - items: - type: string - type: array - type: object - AssayRunsArchive: - additionalProperties: false - description: 'The request body for archiving Assay Runs. - - ' - properties: - assayRunIds: - items: - type: string - type: array - reason: - description: 'The reason for archiving the provided Assay Runs. Accepted - reasons may differ based on tenant configuration. - - ' - enum: - - Archived - - Made in error - - Other - type: string - required: - - reason - - assayRunIds - type: object - AssayRunsBulkCreateErrorResponse: - properties: - assayRuns: - default: null - items: - type: object - nullable: true - type: array - errors: - items: - properties: - fields: - type: object - global: - items: - type: string - type: array - type: object - type: array - type: object - AssayRunsBulkCreateRequest: - additionalProperties: false - properties: - assayRuns: - items: - $ref: '#/components/schemas/AssayRunCreate' - type: array - required: - - assayRuns - type: object - AssayRunsBulkCreateResponse: - properties: - assayRuns: - items: - type: string - type: array - errors: - default: null - nullable: true - type: object - type: object - AssayRunsBulkGet: - properties: - assayRuns: - items: - $ref: '#/components/schemas/AssayRun' - type: array - type: object - AssayRunsPaginatedList: - properties: - assayRuns: - items: - $ref: '#/components/schemas/AssayRun' - type: array - nextToken: - type: string - type: object - AssayRunsUnarchive: - additionalProperties: false - description: 'The request body for unarchiving Assay Runs. - - ' - properties: - assayRunIds: - items: - type: string - type: array - required: - - assayRunIds - type: object - AsyncTask: - properties: - errors: - description: 'Present only when status is FAILED for a bulk task. Contains - information about the individual errors in the bulk task. - - ' - type: object - message: - description: Present only when status is FAILED. Contains information about - the error. - type: string - response: - description: Present only when status is SUCCEEDED. response can be empty - if there is no data to be returned. - type: object - status: - description: The current state of the task. - enum: - - RUNNING - - SUCCEEDED - - FAILED - type: string - required: - - status - type: object - AsyncTaskLink: - properties: - taskId: - format: uuid - type: string - type: object - AutoAnnotateAaSequences: - additionalProperties: false - properties: - aaSequenceIds: - description: Array of AA sequence IDs. - items: - type: string - type: array - featureLibraryIds: - description: Array of feature library IDs. - items: - type: string - type: array - required: - - aaSequenceIds - - featureLibraryIds - type: object - AutoAnnotateDnaSequences: - additionalProperties: false - properties: - dnaSequenceIds: - description: Array of DNA sequence IDs. - items: - type: string - type: array - featureLibraryIds: - description: Array of feature library IDs. - items: - type: string - type: array - required: - - dnaSequenceIds - - featureLibraryIds - type: object - AutoAnnotateRnaSequences: - additionalProperties: false - properties: - featureLibraryIds: - description: Array of feature library IDs. - items: - type: string - type: array - rnaSequenceIds: - description: Array of RNA sequence IDs. - items: - type: string - maxItems: 1000 - type: array - required: - - rnaSequenceIds - - featureLibraryIds - type: object - AutofillPartsAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: {} - type: object - type: object - AutofillRnaSequences: - additionalProperties: false - properties: - rnaSequenceIds: - description: Array of RNA sequence IDs. - items: - type: string - maxItems: 1000 - type: array - required: - - rnaSequenceIds - type: object - AutofillSequences: - additionalProperties: false - properties: - dnaSequenceIds: - description: Array of DNA sequence IDs. - items: - type: string - type: array - required: - - dnaSequenceIds - type: object - AutofillTranscriptionsAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: {} - type: object - type: object - AutofillTranslationsAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: {} - type: object - type: object - AutomationFile: - properties: - assayRunId: - example: 588aca02-1a20-4b94-a40f-b3f3a0081749 - type: string - automationFileConfig: - properties: - name: - example: MyInstrumentName - type: string - type: object - file: - allOf: - - $ref: '#/components/schemas/Blob' - nullable: true - id: - type: string - status: - enum: - - SUCCEEDED - - FAILED - - NOT_STARTED - - RUNNING - type: string - type: object - AutomationFileInputsPaginatedList: - properties: - automationInputGenerators: - items: - $ref: '#/components/schemas/AutomationInputGenerator' - type: array - nextToken: - example: Im5ldyB0ZXN0Ig== - type: string - type: object - AutomationInputGenerator: - allOf: - - $ref: '#/components/schemas/AutomationFile' - - properties: - apiURL: - description: The canonical url of the Automation Input Generator in the - API. - example: https://benchling.com/api/v2/automation-input-generators/aif_C3wGA9HF - format: uri - readOnly: true - type: string - createdAt: - description: DateTime the Automation Input Generator was last modified - format: date-time - readOnly: true - type: string - id: - example: aif_C3wGA9HF - type: string - modifiedAt: - description: DateTime the Automation Input Generator was last modified - format: date-time - readOnly: true - type: string - transforms: - items: - allOf: - - $ref: '#/components/schemas/LabAutomationTransform' - nullable: true - type: array - type: object - AutomationInputGeneratorCompletedV2BetaEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - automationInputGenerator: - $ref: '#/components/schemas/AutomationFile' - eventType: - enum: - - v2-beta.automationInputGenerator.completed - type: string - type: object - AutomationInputGeneratorUpdate: - additionalProperties: false - properties: - fileId: - description: The ID of the file (blob) associated with the input generator. - Set to `null` to remove an existing file from the generator. - example: null - nullable: true - type: string - type: object - AutomationOutputProcessor: - allOf: - - $ref: '#/components/schemas/AutomationFile' - - properties: - apiURL: - description: The canonical url of the Automation Output Processor in the - API. - example: https://benchling.com/api/v2/automation-output-processors/aop_C3wGA9HF - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - completeWithErrors: - description: Specifies whether file processing should complete with errors. - False means any error in output file processing will result in no actions - being committed. True means that if row-level errors occur, then failing - rows and their errors will be saved to errorFile, and actions from successful - rows will be committed. - type: boolean - createdAt: - description: DateTime the Automation Output Processor was created - format: date-time - type: string - errorFile: - allOf: - - $ref: '#/components/schemas/Blob' - nullable: true - id: - example: aop_C3wGA9HF - type: string - modifiedAt: - description: DateTime the Automation Output Processor was last modified - format: date-time - type: string - progressStats: - $ref: '#/components/schemas/AutomationProgressStats' - transforms: - items: - allOf: - - $ref: '#/components/schemas/LabAutomationTransform' - nullable: true - type: array - type: object - AutomationOutputProcessorArchivalChange: - description: IDs of all items that were archived or unarchived, grouped by resource - type. This includes the IDs of any linked Results that were archived / unarchived. - properties: - automationOutputProcessorIds: - items: - type: string - type: array - resultIds: - items: - type: string - type: array - type: object - AutomationOutputProcessorCompletedV2BetaEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - automationOutputProcessor: - $ref: '#/components/schemas/AutomationFile' - eventType: - enum: - - v2-beta.automationOutputProcessor.completed - type: string - type: object - AutomationOutputProcessorCreate: - additionalProperties: false - properties: - assayRunId: - type: string - automationFileConfigName: - type: string - completeWithErrors: - description: Specifies whether file processing should complete with errors. - False means any error in output file processing will result in no actions - being committed. True means that if row-level errors occur, then failing - rows and their errors will be saved to errorFile, and actions from successful - rows will be committed. - type: boolean - fileId: - description: The ID of a blob link to process. - example: cd624536-c6ba-41b9-b802-9461689e2ea3 - type: string - required: - - fileId - - automationFileConfigName - - assayRunId - type: object - AutomationOutputProcessorUpdate: - additionalProperties: false - properties: - fileId: - description: The ID of a blob link to process. - example: cd624536-c6ba-41b9-b802-9461689e2ea3 - type: string - required: - - fileId - type: object - AutomationOutputProcessorUploadedV2BetaEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - automationOutputProcessor: - $ref: '#/components/schemas/AutomationFile' - eventType: - enum: - - v2-beta.automationOutputProcessor.uploaded - type: string - type: object - AutomationOutputProcessorsArchive: - additionalProperties: false - properties: - automationOutputProcessorIds: - description: Array of automation output processor IDs - items: - type: string - type: array - reason: - description: 'The reason that the output processors are being archived. - Accepted reasons may differ based on tenant configuration. - - ' - enum: - - Made in error - - Retired - - Expended - - Shipped - - Contaminated - - Expired - - Missing - - Other - type: string - required: - - automationOutputProcessorIds - type: object - AutomationOutputProcessorsPaginatedList: - description: A paginated list of automation output processors which have an - attached file. - properties: - automationOutputProcessors: - items: - $ref: '#/components/schemas/AutomationOutputProcessor' - type: array - nextToken: - example: Im5ldyB0ZXN0Ig== - type: string - type: object - AutomationOutputProcessorsUnarchive: - additionalProperties: false - properties: - automationOutputProcessorIds: - description: Array of automation output processor IDs - items: - type: string - type: array - required: - - automationOutputProcessorIds - type: object - AutomationProgressStats: - description: Processing progress information. - properties: - rowsFailed: - type: integer - rowsSucceeded: - type: integer - rowsUnprocessed: - type: integer - type: object - BackTranslate: - additionalProperties: false - properties: - aaSequenceIds: - description: IDs of AA sequences to back-translate. - items: - type: string - type: array - avoidedCutsiteEnzymeIds: - description: 'List of enzyme IDs whose recognition sites will be avoided - when creating the back-translated sequence. - - ' - items: - type: string - type: array - codonUsageTableId: - description: ID of the codon usage table representing the target organism. - type: string - folderId: - description: 'ID of the folder in which the back-translated sequences will - be saved. - - ' - type: string - gcContent: - default: ANY - description: 'The amount of GC content in the back-translated sequence. - If not specified, the back-translation will default to ANY (0-1). LOW - is defined as below 0.33, MEDIUM as 0.33-0.66, and HIGH as above 0.66. - - ' - enum: - - ANY - - LOW - - MEDIUM - - HIGH - type: string - hairpinParameters: - additionalProperties: false - description: 'These parameters are applied in the AvoidHairpins specification - in DNAChisel. If hairpinParameters is not specified, hairpins will not - be avoided. - - ' - properties: - stem: - default: 20 - type: integer - window: - default: 200 - type: integer - type: object - reducedPatterns: - description: 'List of patterns to avoid when creating the back-translated - sequence, on the coding strand only. - - ' - items: - $ref: '#/components/schemas/ReducedPattern' - type: array - schemaId: - description: ID of the resulting DNA sequences' schemas - type: string - shouldDepleteUridine: - default: false - description: 'If not specified, the back-translation will default to false, - and mRNA uridine depletion will not be performed. - - ' - type: boolean - required: - - aaSequenceIds - - folderId - type: object - BadRequestError: - properties: - error: - allOf: - - $ref: '#/components/schemas/BaseError' - - properties: - type: - enum: - - invalid_request_error - type: string - type: object - BadRequestErrorBulk: - allOf: - - $ref: '#/components/schemas/BadRequestError' - - properties: - error: - properties: - errors: - items: - properties: - index: - type: number - message: - type: string - type: object - type: array - type: object - type: object - BarcodeValidationResult: - properties: - barcode: - description: Barcode to validate. - type: string - isValid: - description: Whether the barcode is valid. - type: boolean - message: - description: If barcode is not valid, a message string explaining the error. - nullable: true - type: string - type: object - BarcodeValidationResults: - properties: - validationResults: - items: - $ref: '#/components/schemas/BarcodeValidationResult' - type: array - type: object - BarcodesList: - additionalProperties: false - properties: - barcodes: - description: Array of barcodes to validate. - items: - type: string - type: array - required: - - barcodes - type: object - BaseAppConfigItem: - allOf: - - $ref: '#/components/schemas/AppConfigItemApiMixin' - - properties: - description: - type: string - requiredConfig: - type: boolean - type: object - BaseAssaySchema: - allOf: - - $ref: '#/components/schemas/Schema' - - properties: - derivedFrom: - nullable: true - type: string - organization: - properties: - handle: - type: string - id: - type: string - name: - type: string - type: object - systemName: - type: string - type: object - BaseDropdownUIBlock: - allOf: - - properties: - dropdownId: - type: string - required: - - dropdownId - type: object - BaseError: - properties: - message: - type: string - type: - type: string - userMessage: - type: string - type: object - BaseNotePart: - properties: - indentation: - default: 0 - description: All notes have an indentation level - the default is 0 for - no indent. For lists, indentation gives notes hierarchy - a bulleted list - with children is modeled as one note part with indentation 1 followed - by note parts with indentation 2, for example. - minimum: 0 - type: integer - type: - description: The type of the note. Type determines what other fields are - present. - type: string - type: object - BaseSearchInputUIBlock: - allOf: - - properties: - itemType: - $ref: '#/components/schemas/SearchInputUiBlockItemType' - schemaId: - nullable: true - type: string - required: - - itemType - - schemaId - type: object - BaseSelectorInputUIBlock: - allOf: - - properties: - options: - items: - type: string - type: array - required: - - options - type: object - Batch: - additionalProperties: false - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - createdAt: - description: DateTime at which the the result was created - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - readOnly: true - defaultConcentration: - $ref: '#/components/schemas/Measurement' - entity: - discriminator: - mapping: - aa_sequence: '#/components/schemas/AaSequenceSummary' - custom_entity: '#/components/schemas/CustomEntitySummary' - dna_sequence: '#/components/schemas/DnaSequenceSummary' - propertyName: entityType - oneOf: - - $ref: '#/components/schemas/DnaSequenceSummary' - - $ref: '#/components/schemas/AaSequenceSummary' - - $ref: '#/components/schemas/CustomEntitySummary' - fields: - $ref: '#/components/schemas/Fields' - id: - example: bat_UOIr8IjL - readOnly: true - type: string - modifiedAt: - format: date-time - readOnly: true - type: string - name: - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - readOnly: true - title: SchemaProperty - webURL: - readOnly: true - type: string - type: object - BatchOrInaccessibleResource: - oneOf: - - $ref: '#/components/schemas/Batch' - - $ref: '#/components/schemas/InaccessibleResource' - BatchSchema: - allOf: - - $ref: '#/components/schemas/RegistrySchema' - - properties: - entitySchemaId: - type: string - modifiedAt: - description: DateTime the Batch Schema was last modified - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - type: string - type: object - BatchSchemasList: - properties: - batchSchemas: - items: - $ref: '#/components/schemas/BatchSchema' - readOnly: true - type: array - type: object - BatchSchemasPaginatedList: - allOf: - - $ref: '#/components/schemas/BatchSchemasList' - - properties: - nextToken: - type: string - type: object - BenchlingApp: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/BenchlingAppUpdate' - - additionalProperties: false - properties: - apiUrl: - example: https://benchling.com/api/v2/apps/app_e59sjL23Pqn30xHg - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - readOnly: true - createdAt: - description: DateTime at which the the app was created - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - readOnly: true - id: - example: app_e59sjL23Pqn30xHg - readOnly: true - type: string - modifiedAt: - description: DateTime at which the the app was last modified - format: date-time - readOnly: true - type: string - webUrl: - example: https://benchling.com/developer/apps/app_e59sjL23Pqn30xHg - format: uri - readOnly: true - type: string - type: object - BenchlingAppCreate: - additionalProperties: false - properties: - description: - example: This is my first App! - maxLength: 8192 - type: string - name: - example: My First App - maxLength: 255 - minLength: 3 - type: string - required: - - name - BenchlingAppUpdate: - additionalProperties: false - properties: - description: - example: This is my first App! - maxLength: 8192 - type: string - name: - example: My First App - maxLength: 255 - minLength: 3 - type: string - BenchlingAppsArchivalChange: - additionalProperties: false - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of apps that were archived / unarchived. - - ' - properties: - appIds: - example: - - app_J39na03L1nsLS34o - - app_ae92kBv9aNSl593z - - app_e59sjL23Pqn30xHg - items: - type: string - type: array - type: object - BenchlingAppsArchive: - additionalProperties: false - properties: - appIds: - description: Array of app IDs - example: - - app_J39na03L1nsLS34o - - app_ae92kBv9aNSl593z - - app_e59sjL23Pqn30xHg - items: - type: string - type: array - reason: - description: Reason that apps are being archived. Actual reason enum varies - by tenant. - enum: - - Made in error - - Retired - - Other - type: string - required: - - reason - - appIds - type: object - BenchlingAppsPaginatedList: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - apps: - items: - $ref: '#/components/schemas/BenchlingApp' - type: array - BenchlingAppsUnarchive: - additionalProperties: false - properties: - appIds: - description: Array of app IDs - example: - - app_J39na03L1nsLS34o - - app_ae92kBv9aNSl593z - - app_e59sjL23Pqn30xHg - items: - type: string - type: array - required: - - appIds - type: object - Blob: - properties: - id: - description: The universally unique identifier (UUID) for the blob. - example: c33fe52d-fe6a-4c98-adcd-211bdf6778f7 - format: uuid - type: string - mimeType: - description: eg. application/jpeg - example: text/csv - maxLength: 100 - type: string - name: - description: Name of the blob - example: MyInstrumentInputFile.csv - maxLength: 1000 - type: string - type: - description: 'One of RAW_FILE or VISUALIZATION. If VISUALIZATION, the blob - may be displayed as an image preview. - - ' - enum: - - RAW_FILE - - VISUALIZATION - type: string - uploadStatus: - enum: - - IN_PROGRESS - - COMPLETE - - ABORTED - type: string - type: object - BlobComplete: - additionalProperties: false - properties: - parts: - items: - $ref: '#/components/schemas/BlobPart' - type: array - type: object - BlobCreate: - additionalProperties: false - properties: - data64: - description: base64 encoded file contents - format: byte - type: string - md5: - description: 'The MD5 hash of the blob part. Note: this should be the hash - of the raw data of the blob part, not the hash of the base64 encoding. - - ' - type: string - mimeType: - default: application/octet-stream - description: eg. application/jpeg - maxLength: 100 - type: string - name: - description: Name of the blob - maxLength: 1000 - type: string - type: - description: 'One of RAW_FILE or VISUALIZATION. If VISUALIZATION, the blob - may be displayed as an image preview. - - ' - enum: - - RAW_FILE - - VISUALIZATION - type: string - required: - - name - - type - - data64 - - md5 - type: object - BlobMultipartCreate: - additionalProperties: false - properties: - mimeType: - default: application/octet-stream - description: eg. application/jpeg - maxLength: 100 - type: string - name: - description: Name of the blob - maxLength: 1000 - type: string - type: - description: 'One of RAW_FILE or VISUALIZATION. If VISUALIZATION, the blob - may be displayed as an image preview. - - ' - enum: - - RAW_FILE - - VISUALIZATION - type: string - required: - - name - - type - type: object - BlobPart: - properties: - eTag: - example: '"6f5902ac237024bdd0c176cb93063dc4"' - type: string - partNumber: - maximum: 10000 - minimum: 1 - type: integer - type: object - BlobPartCreate: - additionalProperties: false - properties: - data64: - format: bytes - type: string - md5: - type: string - partNumber: - description: 'An integer between 1 to 10,000, inclusive. The part number - must be unique per part and indicates the ordering of the part inside - the final blob. The part numbers do not need to be consecutive. - - ' - maximum: 10000 - minimum: 1 - type: integer - required: - - partNumber - - data64 - - md5 - type: object - BlobUrl: - properties: - downloadURL: - description: a pre-signed download url. - format: uri - type: string - expiresAt: - description: The unix time that the download URL expires at. - type: integer - type: object - BlobsBulkGet: - properties: - blobs: - items: - $ref: '#/components/schemas/Blob' - type: array - type: object - BooleanAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - properties: - type: - enum: - - boolean - example: boolean - type: string - value: - nullable: true - type: boolean - type: object - Box: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - availableCapacity: - description: The number of available positions in the box. - readOnly: true - type: integer - barcode: - nullable: true - type: string - createdAt: - format: date-time - readOnly: true - type: string - creator: - $ref: '#/components/schemas/UserSummary' - emptyContainers: - description: The number of containers in the box that have no contents. - readOnly: true - type: integer - emptyPositions: - description: The number of empty positions for adding additional containers - in the box. - readOnly: true - type: integer - fields: - $ref: '#/components/schemas/Fields' - filledPositions: - description: The number of containers currently in the box. - readOnly: true - type: integer - id: - type: string - modifiedAt: - format: date-time - readOnly: true - type: string - name: - type: string - occupiedCapacity: - description: The number of containers currently in the box. - readOnly: true - type: integer - parentStorageId: - nullable: true - type: string - projectId: - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - title: SchemaProperty - size: - description: The size of the box (i.e. how many containers it can store). - readOnly: true - type: integer - totalCapacity: - description: The total capacity of the box (i.e. how many containers it - can store). - readOnly: true - type: integer - webURL: - readOnly: true - type: string - type: object - BoxContentsPaginatedList: - properties: - containers: - items: - $ref: '#/components/schemas/ContainerWithCoordinates' - type: array - nextToken: - type: string - type: object - BoxCreate: - additionalProperties: false - properties: - barcode: - type: string - fields: - $ref: '#/components/schemas/Fields' - name: - type: string - parentStorageId: - type: string - projectId: - type: string - schemaId: - type: string - required: - - schemaId - type: object - BoxCreationTableNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - $ref: '#/components/schemas/StructuredTableApiIdentifiers' - - properties: - boxSchemaId: - example: boxsch_MAbGlEtf - type: string - type: - enum: - - box_creation_table - type: string - type: object - BoxSchema: - allOf: - - $ref: '#/components/schemas/RegistrySchema' - - properties: - containerSchema: - nullable: true - properties: - id: - type: string - name: - type: string - type: object - height: - type: number - type: - enum: - - box - readOnly: true - type: string - width: - type: number - type: object - BoxSchemasList: - properties: - boxSchemas: - items: - $ref: '#/components/schemas/BoxSchema' - readOnly: true - type: array - type: object - BoxSchemasPaginatedList: - allOf: - - $ref: '#/components/schemas/BoxSchemasList' - - properties: - nextToken: - type: string - type: object - BoxUpdate: - additionalProperties: false - properties: - fields: - $ref: '#/components/schemas/Fields' - name: - type: string - parentStorageId: - type: string - projectId: - type: string - type: object - BoxesArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of boxes along with any IDs of containers - that were archived / unarchived. - - ' - properties: - boxIds: - items: - type: string - type: array - containerIds: - items: - type: string - type: array - type: object - BoxesArchive: - additionalProperties: false - properties: - boxIds: - description: Array of box IDs - items: - type: string - type: array - reason: - description: 'Reason that boxes are being archived. - - ' - enum: - - Made in error - - Retired - - Expended - - Shipped - - Contaminated - - Expired - - Missing - - Other - type: string - shouldRemoveBarcodes: - description: 'Remove barcodes. Removing barcodes from archived inventory - that contain items will also remove barcodes from the contained items. - - ' - type: boolean - required: - - boxIds - - reason - type: object - BoxesBulkGet: - properties: - boxes: - items: - $ref: '#/components/schemas/Box' - type: array - type: object - BoxesPaginatedList: - properties: - boxes: - items: - $ref: '#/components/schemas/Box' - type: array - nextToken: - type: string - type: object - BoxesUnarchive: - additionalProperties: false - properties: - boxIds: - description: Array of box IDs - items: - type: string - type: array - required: - - boxIds - type: object - BulkCreateAaSequencesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - aaSequences: - items: - $ref: '#/components/schemas/AaSequence' - type: array - type: object - type: object - type: object - BulkCreateContainersAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - containers: - items: - $ref: '#/components/schemas/Container' - type: array - type: object - type: object - type: object - BulkCreateCustomEntitiesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - customEntities: - items: - $ref: '#/components/schemas/CustomEntity' - type: array - type: object - type: object - type: object - BulkCreateDnaOligosAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - dnaOligos: - items: - $ref: '#/components/schemas/DnaOligo' - type: array - type: object - type: object - type: object - BulkCreateDnaSequencesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - dnaSequences: - items: - $ref: '#/components/schemas/DnaSequence' - type: array - type: object - type: object - type: object - BulkCreateFeaturesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - features: - items: - $ref: '#/components/schemas/Feature' - type: array - type: object - type: object - type: object - BulkCreateRnaOligosAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - rnaOligos: - items: - $ref: '#/components/schemas/RnaOligo' - type: array - type: object - type: object - type: object - BulkCreateRnaSequencesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - rnaSequences: - items: - $ref: '#/components/schemas/RnaSequence' - type: array - type: object - type: object - type: object - BulkRegisterEntitiesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: {} - type: object - type: object - BulkUpdateAaSequencesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - AaSequences: - items: - $ref: '#/components/schemas/AaSequence' - type: array - type: object - type: object - type: object - BulkUpdateContainersAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - containers: - items: - $ref: '#/components/schemas/Container' - type: array - type: object - type: object - type: object - BulkUpdateCustomEntitiesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - customEntities: - items: - $ref: '#/components/schemas/CustomEntity' - type: array - type: object - type: object - type: object - BulkUpdateDnaOligosAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - dnaOligos: - items: - $ref: '#/components/schemas/DnaOligo' - type: array - type: object - type: object - type: object - BulkUpdateDnaSequencesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - dnaSequences: - items: - $ref: '#/components/schemas/DnaSequence' - type: array - type: object - type: object - type: object - BulkUpdateRnaOligosAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - rnaOligos: - items: - $ref: '#/components/schemas/RnaOligo' - type: array - type: object - type: object - type: object - BulkUpdateRnaSequencesAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - rnaSequences: - items: - $ref: '#/components/schemas/RnaSequence' - type: array - type: object - type: object - type: object - ButtonUiBlock: - allOf: - - $ref: '#/components/schemas/InteractiveUiBlock' - - properties: - text: - example: Click me to submit - type: string - type: - enum: - - BUTTON - type: string - required: - - type - - text - type: object - ButtonUiBlockCreate: - allOf: - - $ref: '#/components/schemas/ButtonUiBlock' - type: object - ButtonUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/ButtonUiBlock' - type: object - ChartNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - properties: - chart: - description: The full configuration for the chart to be displayed in-line - in this note part. - properties: - id: - description: The API identifier for this Analysis Chart. - type: string - type: object - type: - enum: - - note_linked_chart - type: string - type: object - CheckboxNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - properties: - checked: - description: 'Indicates whether the checkbox is checked or not. - - ' - type: boolean - links: - description: 'Array of links referenced in text via an @-mention, hyperlink, - or the drag-n-dropped preview attached to the note. - - ' - items: - $ref: '#/components/schemas/EntryLink' - type: array - text: - description: The textual contents of the note. - type: string - type: - enum: - - list_checkbox - type: string - type: object - description: One "line" of a checklist - CheckoutRecord: - description: ' - - *assignee field* is set if status is "RESERVED" or "CHECKED_OUT", or null - if status is "AVAILABLE". - - - *comment field* is set when container was last reserved, checked out, or checked - into. - - - *modifiedAt field* is the date and time when container was last checked out, - checked in, or reserved - - ' - properties: - assignee: - nullable: true - oneOf: - - $ref: '#/components/schemas/UserSummary' - - $ref: '#/components/schemas/TeamSummary' - comment: - type: string - modifiedAt: - format: date-time - type: string - status: - enum: - - AVAILABLE - - RESERVED - - CHECKED_OUT - type: string - type: object - ChipUiBlock: - allOf: - - properties: - id: - example: user_generated_id - type: string - type: - enum: - - CHIP - type: string - value: - type: string - required: - - type - - value - type: object - ChipUiBlockCreate: - allOf: - - $ref: '#/components/schemas/ChipUiBlock' - type: object - ChipUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/ChipUiBlock' - type: object - CodonUsageTable: - additionalProperties: false - properties: - id: - example: codtab_VfVOART1 - type: string - name: - type: string - type: object - CodonUsageTablesPaginatedList: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - codonUsageTables: - items: - $ref: '#/components/schemas/CodonUsageTable' - type: array - type: object - ConflictError: - properties: - error: - allOf: - - $ref: '#/components/schemas/BaseError' - - properties: - conflicts: - items: - type: object - type: array - type: object - Container: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - readOnly: true - barcode: - nullable: true - type: string - checkoutRecord: - allOf: - - $ref: '#/components/schemas/CheckoutRecord' - readOnly: true - contents: - items: - $ref: '#/components/schemas/ContainerContent' - readOnly: true - type: array - createdAt: - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - readOnly: true - fields: - $ref: '#/components/schemas/Fields' - id: - example: con_ZBL9QQWD - readOnly: true - type: string - modifiedAt: - format: date-time - readOnly: true - type: string - name: - type: string - parentStorageId: - nullable: true - type: string - parentStorageSchema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - readOnly: true - projectId: - nullable: true - type: string - quantity: - $ref: '#/components/schemas/ContainerQuantity' - restrictedSampleParties: - items: - anyOf: - - $ref: '#/components/schemas/UserSummary' - - $ref: '#/components/schemas/TeamSummary' - type: array - restrictionStatus: - allOf: - - $ref: '#/components/schemas/SampleRestrictionStatus' - role: - allOf: - - $ref: '#/components/schemas/ExperimentalWellRole' - nullable: true - sampleOwners: - items: - anyOf: - - $ref: '#/components/schemas/UserSummary' - - $ref: '#/components/schemas/TeamSummary' - type: array - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - readOnly: true - volume: - $ref: '#/components/schemas/DeprecatedContainerVolumeForResponse' - webURL: - readOnly: true - type: string - type: object - ContainerBulkUpdateItem: - allOf: - - $ref: '#/components/schemas/ContainerWriteBase' - - properties: - concentration: - allOf: - - $ref: '#/components/schemas/Measurement' - description: 'Concentration for the container. Only valid for single content - containers. Null values will be ignored. - - ' - example: - units: g/mL - value: 10 - containerId: - type: string - quantity: - $ref: '#/components/schemas/ContainerQuantity' - volume: - $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' - required: - - containerId - ContainerContent: - properties: - batch: - allOf: - - $ref: '#/components/schemas/BatchOrInaccessibleResource' - nullable: true - concentration: - $ref: '#/components/schemas/Measurement' - entity: - allOf: - - $ref: '#/components/schemas/EntityOrInaccessibleResource' - nullable: true - type: object - ContainerContentUpdate: - additionalProperties: false - properties: - concentration: - $ref: '#/components/schemas/Measurement' - required: - - concentration - type: object - ContainerContentsList: - properties: - contents: - items: - $ref: '#/components/schemas/ContainerContent' - readOnly: true - type: array - type: object - ContainerCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/ContainerWriteBase' - - properties: - barcode: - type: string - projectId: - nullable: true - type: string - schemaId: - type: string - writeOnly: true - required: - - schemaId - type: object - ContainerLabels: - properties: - barcode: - example: VIAL001 - type: string - id: - example: cnt_12345 - type: string - name: - example: My Container - type: string - type: object - ContainerQuantity: - description: Quantity of a container, well, or transfer. Supports mass, volume, - and other quantities. - properties: - units: - enum: - - L - - mL - - uL - - nL - - pL - - gal (US) - - qt (US) - - pt (US) - - kg - - g - - mg - - ug - - ng - - pg - - lb - - oz - - mol - - mmol - - umol - - nmol - - pmol - - cells - - (x10^3) cells - - (x10^4) cells - - (x10^5) cells - - (x10^6) cells - - (x10^7) cells - - (x10^8) cells - - (x10^9) cells - - items - - units - - null - example: mL - nullable: true - type: string - value: - example: 10 - nullable: true - type: number - type: object - ContainerSchema: - allOf: - - $ref: '#/components/schemas/RegistrySchema' - - properties: - modifiedAt: - description: DateTime the Container Schema was last modified - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - type: string - type: - enum: - - container - readOnly: true - type: string - type: object - ContainerSchemasList: - properties: - containerSchemas: - items: - $ref: '#/components/schemas/ContainerSchema' - readOnly: true - type: array - type: object - ContainerSchemasPaginatedList: - allOf: - - $ref: '#/components/schemas/ContainerSchemasList' - - properties: - nextToken: - type: string - type: object - ContainerTransfer: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/ContainerTransferBase' - - properties: - destinationContents: - description: 'This represents what the contents of the destination container - should look like post-transfer. - - ' - items: - $ref: '#/components/schemas/ContainerTransferDestinationContentsItem' - type: array - destinationQuantity: - allOf: - - $ref: '#/components/schemas/ContainerQuantity' - description: 'This represents the desired final quantity of the destination - container, post-dilution. If you don''t want to dilute the destination - container, you can omit this parameter. Supports mass, volume, and other - quantities. - - ' - destinationVolume: - allOf: - - $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' - description: 'Deprecated - use destinationQuantity instead. - - ' - required: - - destinationContents - type: object - type: object - ContainerTransferBase: - properties: - restrictedSamplePartyIds: - description: 'IDs of users or teams to be set as restricted sample parties - for the destination container. If not specified, restricted sample parties - from the source container, if present, will be added to those of the destination - container. This only applies to stand-alone containers. - - ' - items: - type: string - type: array - restrictionStatus: - allOf: - - $ref: '#/components/schemas/SampleRestrictionStatus' - description: 'Restriction status of the destination container, either RESTRICTED - or UNRESTRICTED. If not specified, the restriction status of the destination - container will be the more restrictive of the source container, if present, - and destination container restriction statuses. This only applies to stand-alone - containers (Plate wells are always set to NOT_APPLICABLE). - - ' - sampleOwnerIds: - description: 'IDs of users or teams to be set as sample owners for the destination - container. If not specified, restricted sample parties from the source - container, if present, will be added to those of the destination container. - This only applies to stand-alone containers. - - ' - items: - type: string - type: array - sourceBatchId: - description: 'ID of the batch that will be transferred in. Must specify - one of sourceEntityId, sourceBatchId, or sourceContainerId. - - ' - type: string - sourceContainerId: - description: 'ID of the container that will be transferred in. Must specify - one of sourceEntityId, sourceBatchId, or sourceContainerId. - - ' - type: string - sourceEntityId: - description: 'ID of the entity that will be transferred in. Must specify - one of sourceEntityId, sourceBatchId, or sourceContainerId. - - ' - type: string - transferQuantity: - allOf: - - $ref: '#/components/schemas/ContainerQuantity' - description: 'This represents the quantity of the source to be transferred - into the destination container. Supports mass, volume, and other quantities. - Required in place of transferVolume. - - ' - transferVolume: - allOf: - - $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' - description: 'Deprecated - use transferQuantity instead. - - ' - type: object - ContainerTransferDestinationContentsItem: - properties: - concentration: - $ref: '#/components/schemas/Measurement' - entityId: - type: string - required: - - entityId - type: object - ContainerUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/ContainerWriteBase' - - properties: - projectId: - nullable: true - type: string - quantity: - $ref: '#/components/schemas/ContainerQuantity' - role: - allOf: - - $ref: '#/components/schemas/ExperimentalWellRole' - description: Role of a well in a well plate. - nullable: true - volume: - $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' - ContainerWithCoordinates: - allOf: - - $ref: '#/components/schemas/Container' - - properties: - gridNumber: - type: number - gridPosition: - type: string - type: object - ContainerWriteBase: - properties: - fields: - $ref: '#/components/schemas/Fields' - name: - type: string - parentStorageId: - description: ID of containing parent inventory, can also specify a coordinate - for plates and boxes (e.g. plt_2bAks9dx:a2). - type: string - restrictedSamplePartyIds: - description: 'IDs of users or teams who have access to use a restricted - container. Fixed plate wells and unrestricted containers do not have restricted - sample parties. - - ' - items: - type: string - type: array - restrictionStatus: - allOf: - - $ref: '#/components/schemas/SampleRestrictionStatus' - description: 'Either RESTRICTED or UNRESTRICTED. This only applies to stand-alone - containers (Plate wells are always set to NOT_APPLICABLE). - - ' - sampleOwnerIds: - description: 'IDs of users or teams who are sample owners for the container. - Fixed plate wells do not have sample owners. - - ' - items: - type: string - type: array - ContainersArchivalChange: - description: 'IDs of all items that were unarchived, grouped by resource type. - This includes the IDs of containers that were unarchived. - - ' - properties: - containerIds: - items: - type: string - type: array - type: object - ContainersArchive: - additionalProperties: false - properties: - containerIds: - description: Array of container IDs - items: - type: string - type: array - reason: - description: 'Reason that containers are being archived. - - ' - enum: - - Made in error - - Retired - - Expended - - Shipped - - Contaminated - - Expired - - Missing - - Other - type: string - shouldRemoveBarcodes: - description: 'Remove barcodes. Removing barcodes from archived inventory - that contain items will also remove barcodes from the contained items. - - ' - type: boolean - required: - - containerIds - - reason - type: object - ContainersBulkCreateRequest: - additionalProperties: false - properties: - containers: - items: - $ref: '#/components/schemas/ContainerCreate' - maxItems: 1000 - type: array - required: - - containers - type: object - ContainersBulkUpdateRequest: - additionalProperties: false - properties: - containers: - items: - $ref: '#/components/schemas/ContainerBulkUpdateItem' - type: array - required: - - containers - type: object - ContainersCheckin: - additionalProperties: false - properties: - comments: - type: string - containerIds: - description: Array of container IDs. - items: - type: string - type: array - required: - - containerIds - type: object - ContainersCheckout: - additionalProperties: false - properties: - assigneeId: - description: User or Team API ID. - type: string - comment: - type: string - containerIds: - description: Array of container IDs. - items: - type: string - type: array - required: - - containerIds - - assigneeId - type: object - ContainersList: - properties: - containers: - items: - $ref: '#/components/schemas/Container' - type: array - type: object - ContainersPaginatedList: - allOf: - - $ref: '#/components/schemas/ContainersList' - - $ref: '#/components/schemas/Pagination' - ContainersUnarchive: - additionalProperties: false - properties: - containerIds: - description: Array of container IDs - items: - type: string - type: array - required: - - containerIds - type: object - CreateConsensusAlignmentAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - $ref: '#/components/schemas/DnaAlignment' - type: object - type: object - CreateEntityIntoRegistry: - properties: - entityRegistryId: - description: 'Entity registry ID to set for the registered entity. Cannot - specify both entityRegistryId and namingStrategy at the same time. - - ' - type: string - folderId: - description: ID of the folder containing the entity. Can be left empty when - registryId is present. - type: string - namingStrategy: - $ref: '#/components/schemas/NamingStrategy' - registryId: - description: 'Registry ID into which entity should be registered. this is - the ID of the registry which was configured for a particular organization - - To get available registryIds, use the [/registries endpoint](#/Registry/listRegistries) - - - Required in order for entities to be created directly in the registry. - - ' - type: string - type: object - CreateNucleotideConsensusAlignmentAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - $ref: '#/components/schemas/NucleotideAlignment' - type: object - type: object - CreateNucleotideTemplateAlignmentAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - $ref: '#/components/schemas/NucleotideAlignment' - type: object - type: object - CreateTemplateAlignmentAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - $ref: '#/components/schemas/DnaAlignment' - type: object - type: object - CreationOrigin: - properties: - application: - nullable: true - readOnly: true - type: string - originId: - nullable: true - readOnly: true - type: string - originModalUuid: - format: uuid - nullable: true - readOnly: true - type: string - originType: - nullable: true - readOnly: true - type: string - type: object - CustomEntitiesArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of custom entities along with any IDs - of batches that were archived (or unarchived). - - ' - properties: - batchIds: - items: - type: string - type: array - customEntityIds: - items: - type: string - type: array - type: object - CustomEntitiesArchive: - additionalProperties: false - description: 'The request body for archiving custom entities. - - ' - properties: - customEntityIds: - items: - type: string - type: array - reason: - $ref: '#/components/schemas/EntityArchiveReason' - required: - - reason - - customEntityIds - type: object - CustomEntitiesBulkCreateRequest: - additionalProperties: false - properties: - customEntities: - items: - $ref: '#/components/schemas/CustomEntityBulkCreate' - maxItems: 2500 - type: array - required: - - customEntities - CustomEntitiesBulkUpdateRequest: - additionalProperties: false - properties: - customEntities: - items: - $ref: '#/components/schemas/CustomEntityBulkUpdate' - maxItems: 2500 - type: array - required: - - customEntities - CustomEntitiesBulkUpsertRequest: - additionalProperties: false - properties: - customEntities: - items: - $ref: '#/components/schemas/CustomEntityBulkUpsertRequest' - maxItems: 2500 - type: array - required: - - customEntities - type: object - CustomEntitiesList: - properties: - customEntities: - items: - $ref: '#/components/schemas/CustomEntity' - type: array - type: object - CustomEntitiesPaginatedList: - properties: - customEntities: - items: - $ref: '#/components/schemas/CustomEntity' - type: array - nextToken: - type: string - type: object - CustomEntitiesUnarchive: - additionalProperties: false - description: 'The request body for unarchiving custom entities. - - ' - properties: - customEntityIds: - items: - type: string - type: array - required: - - customEntityIds - type: object - CustomEntity: - properties: - aliases: - items: - example: sBN000 - type: string - type: array - apiURL: - description: The canonical url of the Custom Entity in the API. - example: https://benchling.com/api/v2/custom-entities/bfi_xCUXNVyG - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - authors: - items: - $ref: '#/components/schemas/UserSummary' - type: array - createdAt: - example: '2017-04-18T05:54:56.247545+00:00' - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - - readOnly: true - customFields: - $ref: '#/components/schemas/CustomFields' - entityRegistryId: - example: sBN000 - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - folderId: - example: lib_R8KcsjhW - nullable: true - type: string - id: - example: bfi_xCUXNVyG - type: string - modifiedAt: - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - readOnly: true - type: string - name: - example: sBN000 - type: string - registrationOrigin: - allOf: - - $ref: '#/components/schemas/RegistrationOrigin' - nullable: true - readOnly: true - registryId: - example: src_NetYd96a - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - example: - id: ts_EM122lfJ - name: Strain - nullable: true - webURL: - example: https://benchling.com/benchling/f/R8KcsjhW-academic-registry/bfi-xCUXNVyG-sbn000/edit - readOnly: true - type: string - type: object - CustomEntityBaseRequest: - properties: - aliases: - description: Aliases to add to the custom entity - items: - type: string - type: array - authorIds: - description: IDs of users to set as the custom entity's authors. - items: - type: string - type: array - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: 'Custom fields to add to the custom entity. Every field should - have its name as a key, mapping to an object with information about the - value of the field. - - ' - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Schema fields to set on the custom entity. Must correspond - with the schema''s field definitions. Every field should have its name - as a key, mapping to an object with information about the value of the - field. - - ' - folderId: - description: ID of the folder that the entity is moved into - type: string - name: - type: string - schemaId: - type: string - type: object - CustomEntityBaseRequestForCreate: - allOf: - - $ref: '#/components/schemas/CustomEntityBaseRequest' - - required: - - name - - schemaId - CustomEntityBulkCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/CustomEntityCreate' - CustomEntityBulkUpdate: - additionalProperties: true - allOf: - - $ref: '#/components/schemas/CustomEntityBaseRequest' - properties: - id: - type: string - required: - - id - CustomEntityBulkUpsertRequest: - allOf: - - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' - - $ref: '#/components/schemas/CustomEntityBaseRequestForCreate' - CustomEntityCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/CustomEntityBaseRequestForCreate' - - $ref: '#/components/schemas/CreateEntityIntoRegistry' - CustomEntityRequestRegistryFields: - properties: - entityRegistryId: - type: string - type: object - CustomEntitySummary: - properties: - entityType: - enum: - - custom_entity - type: string - id: - example: bfi_xCUXNVyG - type: string - type: - deprecated: true - type: string - type: object - CustomEntityUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/CustomEntityBaseRequest' - - $ref: '#/components/schemas/CustomEntityRequestRegistryFields' - CustomEntityUpsertRequest: - allOf: - - $ref: '#/components/schemas/EntityUpsertBaseRequest' - - $ref: '#/components/schemas/CustomEntityBaseRequestForCreate' - CustomEntityWithEntityType: - allOf: - - $ref: '#/components/schemas/CustomEntity' - - properties: - entityType: - enum: - - custom_entity - type: string - type: object - type: object - CustomField: - properties: - value: - type: string - type: object - CustomFields: - additionalProperties: - $ref: '#/components/schemas/CustomField' - example: - Legacy ID: - value: STR100 - type: object - CustomNotation: - properties: - id: - example: sntx_lRe007yZ - type: string - name: - example: Your Custom Notation - type: string - type: object - CustomNotationRequest: - properties: - customNotation: - description: Representation of the sequence or oligo in the custom notation - specified by customNotationId - type: string - customNotationId: - description: ID of the notation used to interpret the string provided in - the customNotation field - type: string - type: object - CustomNotationsPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - customNotations: - items: - $ref: '#/components/schemas/CustomNotation' - type: array - type: object - DateAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - properties: - type: - enum: - - date - type: string - value: - example: '2022-01-01' - nullable: true - type: string - DatetimeAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - properties: - type: - enum: - - datetime - type: string - value: - example: 2022-03-18 05:14:35 PM - nullable: true - type: string - DeprecatedAutomationOutputProcessorsPaginatedList: - description: Deprecated - A paginated list of automation output processors - properties: - automationOutputProcessors: - items: - $ref: '#/components/schemas/AutomationOutputProcessor' - type: array - nextToken: - example: Im5ldyB0ZXN0Ig== - type: string - type: object - DeprecatedContainerVolumeForInput: - description: 'Desired volume for a container, well, or transfer. "volume" type - keys are deprecated in API requests; use the more permissive "quantity" type - key instead. - - ' - properties: - units: - enum: - - pL - - nL - - uL - - mL - - L - - null - example: mL - nullable: true - type: string - value: - example: 10 - nullable: true - type: number - type: object - DeprecatedContainerVolumeForResponse: - allOf: - - $ref: '#/components/schemas/ContainerQuantity' - - description: 'The deprecated "volume" type key in API responses can also contain - non-volume quantities for back-compatibility purposes. Use the "quantity" - type key instead. - - ' - DeprecatedEntitySchema: - allOf: - - $ref: '#/components/schemas/EntitySchema' - - properties: - type: - enum: - - custom_entity - - dna_sequence - - aa_sequence - - mixture - - dna_oligo - - rna_oligo - - molecule - - entry - readOnly: true - type: string - type: object - DeprecatedEntitySchemasList: - properties: - entitySchemas: - items: - $ref: '#/components/schemas/DeprecatedEntitySchema' - readOnly: true - type: array - type: object - DnaAlignment: - allOf: - - $ref: '#/components/schemas/DnaAlignmentSummary' - - properties: - alignedSequences: - items: - $ref: '#/components/schemas/AlignedSequence' - type: array - type: object - type: object - DnaAlignmentBase: - properties: - algorithm: - enum: - - mafft - - clustalo - type: string - files: - items: - oneOf: - - properties: - sequenceId: - example: seq_3cxbVcCf - type: string - type: object - - $ref: '#/components/schemas/DnaTemplateAlignmentFile' - type: array - name: - example: my new alignment - type: string - required: - - algorithm - - files - type: object - DnaAlignmentSummary: - properties: - apiURL: - description: The canonical url of the DNA Alignment in the API. - example: https://benchling.com/api/v2/dna-alignments/seqanl_6ZVdX98t - format: uri - type: string - createdAt: - description: DateTime the DNA Alignment was created - format: date-time - type: string - id: - example: seqanl_6ZVdX98t - type: string - modifiedAt: - description: DateTime the DNA Alignment was last modified - format: date-time - type: string - name: - type: string - referenceSequenceId: - description: The ID of the template or consensus DNA Sequence associated - with the DNA Alignment - example: seq_MYmsnS1u - type: string - webURL: - description: The Benchling web UI url to view the DNA Alignment - format: uri - type: string - type: object - DnaAlignmentsPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - dnaAlignments: - items: - $ref: '#/components/schemas/DnaAlignmentSummary' - type: array - type: object - DnaAnnotation: - allOf: - - $ref: '#/components/schemas/SequenceFeatureBase' - - properties: - end: - description: 0-based exclusive end index. The end of the sequence is always - represented as 0. - type: integer - start: - description: 0-based inclusive start index. - type: integer - strand: - maximum: 1 - minimum: -1 - type: integer - type: - type: string - type: object - DnaConsensusAlignmentCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/DnaAlignmentBase' - - properties: - newSequence: - properties: - folderId: - example: lib_qQFY3WQH - type: string - type: object - sequenceId: - type: string - DnaOligo: - allOf: - - $ref: '#/components/schemas/Oligo' - - properties: - annotations: - description: Annotations on the Oligo. - items: - $ref: '#/components/schemas/DnaAnnotation' - type: array - apiURL: - example: https://benchling.com/api/v2/dna-oligos/seq_bhuDUw9D - type: string - bases: - example: ACTTTTT - type: string - customNotation: - description: Representation of the oligo in the custom notation specified - in the request. Null if no notation was specified. - nullable: true - type: string - customNotationName: - description: Name of the custom notation specified in the request. Null - if no notation was specified. - nullable: true - type: string - helm: - description: Representation of the oligo in HELM syntax, including any - chemical modifications - example: RNA1{d(A)p.d(C)[Ssp].d(T)p.d(T)p.d(T)p.d(T)p.d(T)p}$$$$V2.0 - type: string - DnaOligoBulkUpdate: - additionalProperties: false - allOf: - - properties: - id: - type: string - type: object - - $ref: '#/components/schemas/DnaOligoUpdate' - DnaOligoCreate: - allOf: - - $ref: '#/components/schemas/OligoCreate' - - properties: - annotations: - description: Annotations on the Oligo. - items: - $ref: '#/components/schemas/DnaAnnotation' - type: array - helm: - description: Representation of the oligo in HELM syntax, including any - chemical modifications - example: RNA1{d(A)p.d([impd2G])p.d(G)[Ssp].d(A)p.d(T)p.d(T)p}$$$$V2.0 - type: string - - $ref: '#/components/schemas/CustomNotationRequest' - - required: - - name - DnaOligoUpdate: - allOf: - - $ref: '#/components/schemas/OligoUpdate' - - properties: - annotations: - description: Annotations on the Oligo. - items: - $ref: '#/components/schemas/DnaAnnotation' - type: array - helm: - description: Representation of the oligo in HELM syntax, including any - chemical modifications - example: RNA1{d(A)p.d([impd2G])p.d(G)[Ssp].d(A)p.d(T)p.d(T)p}$$$$V2.0 - type: string - - $ref: '#/components/schemas/CustomNotationRequest' - DnaOligoWithEntityType: - allOf: - - $ref: '#/components/schemas/DnaOligo' - - properties: - entityType: - enum: - - dna_oligo - type: string - type: object - type: object - DnaOligosArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of DNA Oligos along with any IDs of batches - that were archived / unarchived. - - ' - properties: - batchIds: - items: - type: string - type: array - dnaOligoIds: - items: - type: string - type: array - type: object - DnaOligosArchive: - additionalProperties: false - description: 'The request body for archiving DNA Oligos. - - ' - properties: - dnaOligoIds: - items: - type: string - type: array - reason: - $ref: '#/components/schemas/EntityArchiveReason' - required: - - reason - - dnaOligoIds - type: object - DnaOligosBulkCreateRequest: - additionalProperties: false - properties: - dnaOligos: - items: - $ref: '#/components/schemas/DnaOligoCreate' - maxItems: 1000 - type: array - type: object - DnaOligosBulkUpdateRequest: - additionalProperties: false - properties: - dnaOligos: - items: - $ref: '#/components/schemas/DnaOligoBulkUpdate' - type: array - type: object - DnaOligosBulkUpsertRequest: - additionalProperties: false - maxItems: 1000 - properties: - dnaOligos: - items: - $ref: '#/components/schemas/OligoBulkUpsertRequest' - type: array - required: - - dnaOligos - type: object - DnaOligosPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - dnaOligos: - items: - $ref: '#/components/schemas/DnaOligo' - type: array - DnaOligosUnarchive: - additionalProperties: false - description: 'The request body for unarchiving DNA Oligos. - - ' - properties: - dnaOligoIds: - items: - type: string - type: array - required: - - dnaOligoIds - type: object - DnaSequence: - properties: - aliases: - items: - type: string - type: array - annotations: - items: - $ref: '#/components/schemas/DnaAnnotation' - type: array - apiURL: - description: The canonical url of the DNA Sequence in the API. - example: https://benchling.com/api/v2/dna-sequences/seq_asQya4lk - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - bases: - type: string - createdAt: - format: date-time - readOnly: true - type: string - creator: - $ref: '#/components/schemas/UserSummary' - customFields: - $ref: '#/components/schemas/CustomFields' - entityRegistryId: - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - folderId: - nullable: true - type: string - id: - type: string - isCircular: - type: boolean - length: - type: integer - modifiedAt: - format: date-time - readOnly: true - type: string - name: - type: string - parts: - items: - $ref: '#/components/schemas/DnaSequencePart' - type: array - primers: - items: - $ref: '#/components/schemas/Primer' - type: array - registrationOrigin: - allOf: - - $ref: '#/components/schemas/RegistrationOrigin' - nullable: true - readOnly: true - registryId: - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - translations: - items: - $ref: '#/components/schemas/Translation' - type: array - webURL: - readOnly: true - type: string - type: object - DnaSequenceBaseRequest: - properties: - aliases: - description: Aliases to add to the DNA sequence - items: - type: string - type: array - annotations: - description: 'Annotations to create on the DNA sequence. - - ' - items: - $ref: '#/components/schemas/DnaAnnotation' - type: array - authorIds: - description: IDs of users to set as the DNA sequence's authors. - items: - type: string - type: array - bases: - description: 'Base pairs for the DNA sequence. - - ' - type: string - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: 'Custom fields to add to the DNA sequence. Every field should - have its name as a key, mapping to an object with information about the - value of the field. - - ' - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Fields to set on the DNA sequence. Must correspond with the - schema''s field definitions. Every field should have its name as a key, - mapping to an object with information about the value of the field. - - ' - folderId: - description: 'ID of the folder containing the DNA sequence. - - ' - type: string - isCircular: - description: 'Whether the DNA sequence is circular or linear. - - ' - type: boolean - name: - description: 'Name of the DNA sequence. - - ' - type: string - parts: - items: - $ref: '#/components/schemas/DnaSequencePart' - type: array - primers: - items: - $ref: '#/components/schemas/Primer' - type: array - schemaId: - description: 'ID of the DNA sequence''s schema. - - ' - type: string - translations: - description: 'Translations to create on the DNA sequence. Translations are - specified by either a combination of ''start'' and ''end'' fields, or - a list of regions. Both cannot be provided. - - ' - items: - $ref: '#/components/schemas/Translation' - type: array - type: object - DnaSequenceBaseRequestForCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/DnaSequenceBaseRequest' - - required: - - bases - - isCircular - - name - DnaSequenceBulkCreate: - allOf: - - $ref: '#/components/schemas/DnaSequenceCreate' - DnaSequenceBulkUpdate: - additionalProperties: false - allOf: - - properties: - id: - type: string - type: object - - $ref: '#/components/schemas/DnaSequenceBaseRequest' - DnaSequenceBulkUpsertRequest: - allOf: - - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' - - $ref: '#/components/schemas/DnaSequenceBaseRequestForCreate' - - required: - - annotations - - primers - DnaSequenceCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/DnaSequenceBaseRequestForCreate' - - $ref: '#/components/schemas/CreateEntityIntoRegistry' - DnaSequencePart: - allOf: - - $ref: '#/components/schemas/NucleotideSequencePart' - - properties: - strand: - example: 1 - maximum: 1 - minimum: -1 - type: integer - type: object - DnaSequenceRequestRegistryFields: - properties: - entityRegistryId: - type: string - type: object - DnaSequenceSummary: - properties: - entityType: - enum: - - dna_sequence - type: string - id: - example: seq_ObbdtGhC - type: string - type: - deprecated: true - type: string - type: object - DnaSequenceUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/DnaSequenceBaseRequest' - - $ref: '#/components/schemas/DnaSequenceRequestRegistryFields' - DnaSequenceUpsertRequest: - allOf: - - $ref: '#/components/schemas/EntityUpsertBaseRequest' - - $ref: '#/components/schemas/DnaSequenceBaseRequestForCreate' - - required: - - annotations - - primers - DnaSequenceWithEntityType: - allOf: - - $ref: '#/components/schemas/DnaSequence' - - properties: - entityType: - enum: - - dna_sequence - type: string - type: object - type: object - DnaSequencesArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of DNA sequences along with any IDs of - batches that were archived / unarchived. - - ' - properties: - batchIds: - items: - type: string - type: array - dnaSequenceIds: - items: - type: string - type: array - type: object - DnaSequencesArchive: - additionalProperties: false - description: 'The request body for archiving DNA sequences. - - ' - properties: - dnaSequenceIds: - items: - type: string - type: array - reason: - $ref: '#/components/schemas/EntityArchiveReason' - required: - - reason - - dnaSequenceIds - type: object - DnaSequencesBulkCreateRequest: - additionalProperties: false - properties: - dnaSequences: - items: - $ref: '#/components/schemas/DnaSequenceBulkCreate' - maxItems: 1000 - type: array - type: object - DnaSequencesBulkGet: - properties: - dnaSequences: - items: - $ref: '#/components/schemas/DnaSequence' - type: array - type: object - DnaSequencesBulkUpdateRequest: - additionalProperties: false - properties: - dnaSequences: - items: - $ref: '#/components/schemas/DnaSequenceBulkUpdate' - type: array - type: object - DnaSequencesBulkUpsertRequest: - additionalProperties: false - maxItems: 1000 - properties: - dnaSequences: - items: - $ref: '#/components/schemas/DnaSequenceBulkUpsertRequest' - type: array - required: - - dnaSequences - type: object - DnaSequencesFindMatchingRegion: - additionalProperties: false - properties: - registryId: - description: An optional Registry ID to restrict the region search to - example: src_ae40j3TZ - type: string - schemaId: - description: API ID for an Entity Schema. Restricts results to DNA Sequences - of this schema type. - example: ts_n4l12nf0 - type: string - targetDnaSequenceIds: - description: API IDs of the DNA sequences which matching regions will be - found for - example: - - seq_W7KgYydE - - seq_g7SI2nih - items: - type: string - maxItems: 1000 - type: array - required: - - targetDnaSequenceIds - - schemaId - type: object - DnaSequencesPaginatedList: - properties: - dnaSequences: - items: - $ref: '#/components/schemas/DnaSequence' - type: array - nextToken: - type: string - type: object - DnaSequencesUnarchive: - additionalProperties: false - description: 'The request body for unarchiving DNA sequences. - - ' - properties: - dnaSequenceIds: - items: - type: string - type: array - required: - - dnaSequenceIds - type: object - DnaTemplateAlignmentCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/DnaAlignmentBase' - - properties: - templateSequenceId: - example: seq_rXqq0IHU - type: string - required: - - templateSequenceId - type: object - DnaTemplateAlignmentFile: - properties: - data: - format: byte - type: string - name: - type: string - type: object - Dropdown: - allOf: - - $ref: '#/components/schemas/DropdownSummary' - - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - options: - description: Array of dropdown options - items: - $ref: '#/components/schemas/DropdownOption' - type: array - type: object - description: Dropdowns are registry-wide enums. Use dropdowns to standardize - on spelling and naming conventions, especially for important metadata like - resistance markers. - DropdownCreate: - additionalProperties: false - properties: - name: - description: Name of the dropdown - type: string - options: - description: Options to set for the dropdown - items: - $ref: '#/components/schemas/DropdownOptionCreate' - type: array - registryId: - description: ID of registry in which to create the dropdown. Required if - multiple registries exist. - nullable: true - pattern: ^src_\w+ - type: string - required: - - name - - options - type: object - DropdownFieldDefinition: - allOf: - - $ref: '#/components/schemas/FieldDefinition' - - properties: - dropdownId: - nullable: true - type: string - type: - enum: - - dropdown - type: string - type: object - DropdownMultiValueUiBlock: - allOf: - - $ref: '#/components/schemas/UserInputMultiValueUiBlock' - - $ref: '#/components/schemas/BaseDropdownUIBlock' - - properties: - type: - enum: - - DROPDOWN_MULTIVALUE - type: string - required: - - type - type: object - DropdownMultiValueUiBlockCreate: - allOf: - - $ref: '#/components/schemas/DropdownMultiValueUiBlock' - type: object - DropdownMultiValueUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/DropdownMultiValueUiBlock' - type: object - DropdownOption: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - id: - type: string - name: - type: string - type: object - DropdownOptionCreate: - properties: - name: - type: string - required: - - name - type: object - DropdownOptionUpdate: - properties: - id: - description: ID of the dropdown option to update, omitted if creating a - new option. - example: sfs_9cGQIqS3 - pattern: ^sfs_\w+ - type: string - name: - description: Name of the dropdown option. - type: string - required: - - name - type: object - DropdownOptionsArchivalChange: - description: 'IDs of all items that were archived or unarchived. - - ' - properties: - dropdownOptionIds: - items: - type: string - type: array - type: object - DropdownOptionsArchive: - additionalProperties: false - properties: - dropdownOptionIds: - description: Array of dropdown option IDs - items: - type: string - type: array - reason: - description: 'Reason that dropdown options are being archived. - - ' - enum: - - Made in error - - Retired - - Other - type: string - type: object - DropdownOptionsUnarchive: - additionalProperties: false - properties: - dropdownOptionIds: - description: Array of dropdown option IDs - items: - type: string - type: array - type: object - DropdownSummariesPaginatedList: - properties: - dropdowns: - items: - $ref: '#/components/schemas/DropdownSummary' - type: array - nextToken: - type: string - type: object - DropdownSummary: - properties: - id: - description: ID of the dropdown - type: string - name: - description: Name of the dropdown - type: string - type: object - DropdownUiBlock: - allOf: - - $ref: '#/components/schemas/UserInputUiBlock' - - $ref: '#/components/schemas/BaseDropdownUIBlock' - - properties: - type: - enum: - - DROPDOWN - type: string - required: - - type - type: object - DropdownUiBlockCreate: - allOf: - - $ref: '#/components/schemas/DropdownUiBlock' - type: object - DropdownUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/DropdownUiBlock' - type: object - DropdownUpdate: - additionalProperties: false - properties: - options: - description: Options to set for the dropdown - items: - $ref: '#/components/schemas/DropdownOptionUpdate' - type: array - required: - - options - type: object - DropdownsRegistryList: - properties: - dropdowns: - items: - $ref: '#/components/schemas/DropdownSummary' - type: array - type: object - EmptyObject: - type: object - EntitiesBulkUpsertRequest: - additionalProperties: false - properties: - aaSequences: - items: - $ref: '#/components/schemas/AaSequenceBulkUpsertRequest' - type: array - customEntities: - items: - $ref: '#/components/schemas/CustomEntityBulkUpsertRequest' - type: array - dnaOligos: - items: - $ref: '#/components/schemas/OligoBulkUpsertRequest' - type: array - dnaSequences: - items: - $ref: '#/components/schemas/DnaSequenceBulkUpsertRequest' - type: array - molecules: - items: - $ref: '#/components/schemas/MoleculeBulkUpsertRequest' - type: array - rnaOligos: - items: - $ref: '#/components/schemas/OligoBulkUpsertRequest' - type: array - type: object - Entity: - oneOf: - - $ref: '#/components/schemas/DnaSequence' - - $ref: '#/components/schemas/AaSequence' - - $ref: '#/components/schemas/Mixture' - - $ref: '#/components/schemas/DnaOligo' - - $ref: '#/components/schemas/RnaOligo' - - $ref: '#/components/schemas/CustomEntity' - type: object - EntityArchiveReason: - description: 'The reason for archiving the provided entities. Accepted reasons - may differ based on tenant configuration. - - ' - enum: - - Made in error - - Retired - - Expended - - Shipped - - Contaminated - - Expired - - Missing - - Other - type: string - EntityBulkUpsertBaseRequest: - allOf: - - $ref: '#/components/schemas/EntityUpsertBaseRequest' - - properties: - entityRegistryId: - description: Registry ID of the entity in Benchling. - type: string - - required: - - entityRegistryId - EntityLabels: - properties: - entityRegistryId: - example: REAG000 - nullable: true - type: string - id: - example: bfi_12345 - type: string - name: - example: Deionized Water - type: string - type: object - EntityOrInaccessibleResource: - oneOf: - - $ref: '#/components/schemas/Entity' - - $ref: '#/components/schemas/InaccessibleResource' - type: object - EntityRegisteredEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - entity: - $ref: '#/components/schemas/GenericEntity' - eventType: - enum: - - v2.entity.registered - type: string - type: object - EntitySchema: - allOf: - - $ref: '#/components/schemas/RegistrySchema' - - properties: - constraint: - nullable: true - properties: - fieldDefinitionNames: - items: - type: string - type: array - hasUniqueResidues: - type: boolean - type: object - containableType: - enum: - - NONE - - ENTITY - - BATCH - type: string - modifiedAt: - description: DateTime the Entity Schema was last modified - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - type: string - type: - enum: - - custom_entity - - dna_sequence - - rna_sequence - - aa_sequence - - mixture - - dna_oligo - - rna_oligo - - molecule - readOnly: true - type: string - type: object - title: EntitySchema - EntitySchemaAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - $ref: '#/components/schemas/LinkedAppConfigResourceMixin' - - properties: - subtype: - $ref: '#/components/schemas/SchemaDependencySubtypes' - type: - enum: - - entity_schema - example: entity_schema - type: string - value: - example: ts_e59sjL23 - nullable: true - type: string - EntitySchemasPaginatedList: - properties: - entitySchemas: - items: - $ref: '#/components/schemas/EntitySchema' - readOnly: true - type: array - nextToken: - type: string - type: object - EntityUpsertBaseRequest: - properties: - archiveRecord: - $ref: '#/components/schemas/ArchiveRecordSet' - fields: - $ref: '#/components/schemas/FieldsWithResolution' - name: - type: string - registryId: - type: string - schemaId: - type: string - required: - - registryId - - name - - schemaId - type: object - Entries: - properties: - entries: - items: - $ref: '#/components/schemas/Entry' - type: array - type: object - EntriesArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of entries that changed.. - - ' - properties: - entryIds: - items: - type: string - type: array - type: object - EntriesArchive: - additionalProperties: false - properties: - entryIds: - description: Array of entry IDs - items: - type: string - type: array - reason: - description: 'Reason that entries are being archived. One of ["Made in error", - "Retired", "Other"]. - - ' - enum: - - Made in error - - Retired - - Other - type: string - required: - - entryIds - - reason - type: object - EntriesPaginatedList: - properties: - entries: - items: - $ref: '#/components/schemas/Entry' - type: array - nextToken: - type: string - type: object - EntriesUnarchive: - additionalProperties: false - properties: - entryIds: - description: Array of entry IDs - items: - type: string - type: array - required: - - entryIds - type: object - Entry: - description: 'Entries are notes that users can take. They''re organized by "days" - (which are user-configurable) and modeled within each day as a list of "notes." - Each note has a type - the simplest is a "text" type, but lists, tables, and - external files are also supported. - - - *Note:* the current Entry resource has a few limitations: - - - Formatting information is not yet supported. Header formatting, bolding, - and other stylistic information is not presented. - - - Data in tables is presented as text always - numeric values will need to - be parsed into floats or integers, as appropriate. - - - Note: Data in Results tables are not accessible through this API call. Results - table data can be called through the Results API calls. - - ' - properties: - apiURL: - description: The canonical url of the Entry in the API. - example: https://benchling.com/api/v2/entries/etr_tv7m7B78 - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - description: 'ArchiveRecord Resource if the entry is archived. This is null - if the entry is not archived. - - ' - nullable: true - assignedReviewers: - description: 'Array of users assigned to review the entry, if any. - - ' - items: - $ref: '#/components/schemas/UserSummary' - type: array - authors: - description: 'Array of UserSummary Resources of the authors of the entry. - This defaults to the creator but can be manually changed. - - ' - items: - $ref: '#/components/schemas/UserSummary' - type: array - createdAt: - description: DateTime the entry was created at - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - description: UserSummary Resource of the user who created the entry - readOnly: true - customFields: - $ref: '#/components/schemas/CustomFields' - days: - description: 'Array of day objects. Each day object has a date field (string) - and notes field (array of notes, expand further for details on note types). - - ' - items: - $ref: '#/components/schemas/EntryDay' - type: array - displayId: - description: User-friendly ID of the entry - type: string - entryTemplateId: - description: ID of the Entry Template this Entry was created from - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - folderId: - description: ID of the folder that contains the entry - type: string - id: - description: ID of the entry - type: string - modifiedAt: - description: DateTime the entry was last modified - type: string - name: - description: Title of the entry - type: string - reviewRecord: - description: Review record if set - nullable: true - properties: - comment: - description: Reviewer's Comments - type: string - status: - description: Review Status of the entry - enum: - - ACCEPTED - - NEEDS_REVIEW - - REJECTED - - RETRACTED - - ACCEPTANCE_SNAPSHOT_IN_PROGRESS - - REVIEW_SNAPSHOT_IN_PROGRESS - - IN_PROGRESS - - ACTION_REQUIRED - type: string - type: object - schema: - allOf: - - $ref: '#/components/schemas/EntrySchema' - description: Entry schema if set - nullable: true - title: SchemaProperty - type: object - webURL: - description: URL of the entry - type: string - type: object - EntryById: - properties: - entry: - $ref: '#/components/schemas/Entry' - type: object - EntryCreate: - additionalProperties: false - properties: - authorIds: - oneOf: - - deprecated: true - type: string - - description: 'IDs of users to set as the entry''s authors. Defaults to - the creator. - - ' - items: - type: string - type: array - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: Custom fields to add to the entry - entryTemplateId: - description: ID of the template to clone the entry from - type: string - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Fields to set on the entry. Must correspond with the schema''s - field definitions. - - ' - folderId: - description: ID of the folder that will contain the entry - type: string - initialTables: - description: 'An array of table API IDs and blob id pairs to seed tables - from the template while creating the entry. The entryTemplateId parameter - must be set to use this parameter. The table API IDs should be the API - Identifiers of the tables in the given template. - - - If a template table has one row, the values in that row act as default - values for cloned entries. - - - If a template table has multiple rows, there is no default value and - those rows are added to the cloned entry along with the provided csv data. - - - If a table has default values, they will be populated in any respective - undefined columns in the csv data. - - - If a table has no default values, undefined columns from csv data will - be empty. - - - If no csv data is provided for a table, the table in the entry will - be populated with whatever values are in the respective template table. - - ' - items: - $ref: '#/components/schemas/InitialTable' - type: array - name: - description: Name of the entry - type: string - schemaId: - description: ID of the entry's schema - type: string - required: - - name - - folderId - type: object - EntryCreatedEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - entry: - $ref: '#/components/schemas/Entry' - eventType: - enum: - - v2.entry.created - type: string - type: object - EntryDay: - properties: - date: - description: A Date string - type: string - notes: - items: - $ref: '#/components/schemas/EntryNotePart' - type: array - title: - description: Optional title of a section if sections are enabled. - nullable: true - type: string - type: object - EntryExternalFile: - description: 'The ExternalFile resource stores metadata about the file. The - actual original file can be downloaded by using the ''downloadURL'' property. - - ' - properties: - downloadURL: - description: 'A short-lived URL that can be used to download the original - file. - - ' - type: string - expiresAt: - description: UNIX timestamp when downloadURL expires. - type: integer - id: - description: ID of the external file - type: string - size: - description: Size, in bytes, of the external file - type: integer - type: object - EntryExternalFileById: - properties: - externalFile: - $ref: '#/components/schemas/EntryExternalFile' - type: object - EntryLink: - description: 'Links are contained within notes to reference resources that live - outside of the entry. A link can target an external resource via an http(s):// - hyperlink or a Benchling resource via @-mentions and drag-n-drop. - - ' - properties: - id: - description: 'For linked Benchling resources, this will be the ID of that - resource (e.g., ''seq_RhYGVnHF''). Omitted for "link" types. - - ' - type: string - type: - description: 'The type of resource being linked. For hyperlinks: ''link''. - For linked Benchling resources, one of: ''user'', ''request'', ''entry'', - ''stage_entry'', ''protocol'', ''workflow'', ''custom_entity'', ''aa_sequence'', - ''dna_sequence'', ''batch'', ''box'', ''container'', ''location'', ''plate'', - ''sql_dashboard''; and (for legacy support) ''insights_dashboard'', ''folder''. - - ' - enum: - - link - - user - - request - - entry - - stage_entry - - protocol - - workflow - - custom_entity - - aa_sequence - - dna_sequence - - batch - - box - - container - - location - - plate - - insights_dashboard - - folder - - sql_dashboard - type: string - webURL: - description: 'Canonical URL of the linked Benchling resource (if you have - at least READ authorization for that resource), or the explicit URL provided - as hyperlink for "link" types. Note: locations do not currently have a - URL. - - ' - nullable: true - type: string - type: object - EntryNotePart: - description: 'Notes are the main building blocks of entries. Each note corresponds - roughly to a paragraph. - - ' - discriminator: - mapping: - assay_run: '#/components/schemas/AssayRunNotePart' - box_creation_table: '#/components/schemas/BoxCreationTableNotePart' - code: '#/components/schemas/SimpleNotePart' - external_file: '#/components/schemas/ExternalFileNotePart' - inventory_container_table: '#/components/schemas/InventoryContainerTableNotePart' - inventory_plate_table: '#/components/schemas/InventoryPlateTableNotePart' - list_bullet: '#/components/schemas/SimpleNotePart' - list_checkbox: '#/components/schemas/CheckboxNotePart' - list_number: '#/components/schemas/SimpleNotePart' - lookup_table: '#/components/schemas/LookupTableNotePart' - mixture_prep_table: '#/components/schemas/MixturePrepTableNotePart' - note_linked_chart: '#/components/schemas/ChartNotePart' - plate_creation_table: '#/components/schemas/PlateCreationTableNotePart' - registration_table: '#/components/schemas/RegistrationTableNotePart' - results_table: '#/components/schemas/ResultsTableNotePart' - table: '#/components/schemas/TableNotePart' - text: '#/components/schemas/SimpleNotePart' - text_box: '#/components/schemas/TextBoxNotePart' - propertyName: type - oneOf: - - $ref: '#/components/schemas/SimpleNotePart' - - $ref: '#/components/schemas/TableNotePart' - - $ref: '#/components/schemas/TextBoxNotePart' - - $ref: '#/components/schemas/CheckboxNotePart' - - $ref: '#/components/schemas/ExternalFileNotePart' - - $ref: '#/components/schemas/AssayRunNotePart' - - $ref: '#/components/schemas/LookupTableNotePart' - - $ref: '#/components/schemas/ResultsTableNotePart' - - $ref: '#/components/schemas/RegistrationTableNotePart' - - $ref: '#/components/schemas/PlateCreationTableNotePart' - - $ref: '#/components/schemas/BoxCreationTableNotePart' - - $ref: '#/components/schemas/MixturePrepTableNotePart' - - $ref: '#/components/schemas/InventoryContainerTableNotePart' - - $ref: '#/components/schemas/InventoryPlateTableNotePart' - - $ref: '#/components/schemas/ChartNotePart' - type: object - EntrySchema: - description: Entry schema - properties: - id: - description: ID of the entry schema - type: string - modifiedAt: - description: DateTime the Entry Schema was last modified - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - type: string - name: - description: Name of the entry schema - type: string - type: object - EntrySchemaDetailed: - allOf: - - $ref: '#/components/schemas/RegistrySchema' - - properties: - type: - enum: - - entry - readOnly: true - type: string - type: object - EntrySchemasPaginatedList: - properties: - entrySchemas: - items: - $ref: '#/components/schemas/EntrySchemaDetailed' - readOnly: true - type: array - nextToken: - type: string - type: object - EntryTable: - description: 'Actual tabular data with rows and columns of text on the note. - - ' - properties: - columnLabels: - description: 'Array of strings, with one item per column. Defaults to null, - if the user is using the default, but is set if the user has given a custom - name to the column. - - ' - items: - nullable: true - type: string - type: array - name: - description: 'Name of the table - defaults to e.g. Table1 but can be renamed. - - ' - type: string - rows: - description: Array of row objects. - items: - $ref: '#/components/schemas/EntryTableRow' - type: array - type: object - EntryTableCell: - properties: - link: - allOf: - - $ref: '#/components/schemas/EntryLink' - description: 'A Link Resource if this cell contained a hyperlink. Otherwise, - link will be omitted from the cell object. (Note: inventory and user types - are not yet supported.) - - ' - text: - description: 'The textual content of the cell. If the cell was originally - a formula, this will be the evaluated version of the formula. - - ' - type: string - type: object - EntryTableRow: - description: Each has property 'cells' that is an array of cell objects - properties: - cells: - items: - $ref: '#/components/schemas/EntryTableCell' - type: array - type: object - EntryTemplate: - additionalProperties: false - description: 'Entry templates are templates that users can base new notebook - entries off of. - - ' - properties: - apiURL: - description: The canonical url of the Entry Template in the API. - example: https://benchling.com/api/v2/entry-templates/tmpl_tv7m7B78 - format: uri - readOnly: true - type: string - createdAt: - description: DateTime the template was created at - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - description: UserSummary Resource of the user who created the template - readOnly: true - customFields: - $ref: '#/components/schemas/CustomFields' - days: - description: 'Array of day objects. Each day object has a day index (integer) - and notes field (array of notes, expand further for details on note types). - - ' - items: - $ref: '#/components/schemas/EntryTemplateDay' - type: array - fields: - $ref: '#/components/schemas/Fields' - id: - description: ID of the entry template - type: string - modifiedAt: - description: DateTime the template was last modified - type: string - name: - description: Title of the template - type: string - schema: - allOf: - - $ref: '#/components/schemas/EntrySchema' - description: Entry schema if set - nullable: true - title: SchemaProperty - type: object - templateCollectionId: - description: ID of the collection that contains the template - type: string - webURL: - description: URL of the template - type: string - type: object - EntryTemplateDay: - properties: - day: - description: 1 indexed day signifier. If 0 is returned, that means the EntryTemplateDay - is a section with a title but no specified Day. - minimum: 0 - type: integer - notes: - items: - $ref: '#/components/schemas/EntryNotePart' - type: array - title: - description: Optional title of a section if sections are enabled. - nullable: true - type: string - type: object - EntryTemplateUpdate: - additionalProperties: false - properties: - fields: - $ref: '#/components/schemas/Fields' - modifiedAt: - description: DateTime the template was last modified - type: string - name: - description: Title of the template - type: string - schemaId: - description: ID of the schema for the entry - type: string - templateCollectionId: - description: ID of the collection that contains the template - type: string - type: object - EntryTemplatesPaginatedList: - additionalProperties: false - properties: - entryTemplates: - items: - $ref: '#/components/schemas/EntryTemplate' - type: array - nextToken: - type: string - type: object - EntryUpdate: - additionalProperties: false - properties: - authorIds: - description: IDs of users to set as the entry's authors. - type: string - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: Schema fields to set on the entry - folderId: - description: ID of the folder that will contain the entry - type: string - name: - description: New name of the entry - type: string - schemaId: - description: ID of the schema for the entry - type: string - type: object - EntryUpdatedFieldsEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - $ref: '#/components/schemas/UpdateEventMixin' - - properties: - entry: - $ref: '#/components/schemas/Entry' - eventType: - enum: - - v2.entry.updated.fields - type: string - type: object - EntryUpdatedReviewRecordEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - $ref: '#/components/schemas/UpdateEventMixin' - - properties: - entry: - $ref: '#/components/schemas/Entry' - eventType: - enum: - - v2.entry.updated.reviewRecord - type: string - type: object - Enzyme: - additionalProperties: false - properties: - cutsites: - items: - type: integer - maxItems: 2 - minItems: 1 - type: array - id: - example: enz_6ZVdX98t - type: string - isoschizomers: - items: - type: string - type: array - name: - type: string - offsets: - items: - type: integer - maxItems: 2 - minItems: 1 - type: array - restrictionSite: - type: string - type: object - EnzymesPaginatedList: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - enzymes: - items: - $ref: '#/components/schemas/Enzyme' - type: array - type: object - Event: - discriminator: - mapping: - v2-alpha.stageEntry.created: '#/components/schemas/StageEntryCreatedEvent' - v2-beta.automationInputGenerator.completed: '#/components/schemas/AutomationInputGeneratorCompletedV2BetaEvent' - v2-beta.automationOutputProcessor.completed: '#/components/schemas/AutomationOutputProcessorCompletedV2BetaEvent' - v2-beta.automationOutputProcessor.uploaded: '#/components/schemas/AutomationOutputProcessorUploadedV2BetaEvent' - v2.assayRun.created: '#/components/schemas/AssayRunCreatedEvent' - v2.assayRun.updated.fields: '#/components/schemas/AssayRunUpdatedFieldsEvent' - v2.entity.registered: '#/components/schemas/EntityRegisteredEvent' - v2.entry.created: '#/components/schemas/EntryCreatedEvent' - v2.entry.updated.fields: '#/components/schemas/EntryUpdatedFieldsEvent' - v2.entry.updated.reviewRecord: '#/components/schemas/EntryUpdatedReviewRecordEvent' - v2.request.created: '#/components/schemas/RequestCreatedEvent' - v2.request.updated.fields: '#/components/schemas/RequestUpdatedFieldsEvent' - v2.workflowOutput.created: '#/components/schemas/WorkflowOutputCreatedEvent' - v2.workflowOutput.updated.fields: '#/components/schemas/WorkflowOutputUpdatedFieldsEvent' - v2.workflowTask.created: '#/components/schemas/WorkflowTaskCreatedEvent' - v2.workflowTask.updated.assignee: '#/components/schemas/WorkflowTaskUpdatedAssigneeEvent' - v2.workflowTask.updated.fields: '#/components/schemas/WorkflowTaskUpdatedFieldsEvent' - v2.workflowTask.updated.scheduledOn: '#/components/schemas/WorkflowTaskUpdatedScheduledOnEvent' - v2.workflowTask.updated.status: '#/components/schemas/WorkflowTaskUpdatedStatusEvent' - v2.workflowTaskGroup.created: '#/components/schemas/WorkflowTaskGroupCreatedEvent' - v2.workflowTaskGroup.mappingCompleted: '#/components/schemas/WorkflowTaskGroupMappingCompletedEvent' - v2.workflowTaskGroup.updated.watchers: '#/components/schemas/WorkflowTaskGroupUpdatedWatchersEvent' - propertyName: eventType - oneOf: - - $ref: '#/components/schemas/EntityRegisteredEvent' - - $ref: '#/components/schemas/EntryCreatedEvent' - - $ref: '#/components/schemas/EntryUpdatedFieldsEvent' - - $ref: '#/components/schemas/EntryUpdatedReviewRecordEvent' - - $ref: '#/components/schemas/StageEntryCreatedEvent' - - $ref: '#/components/schemas/StageEntryUpdatedFieldsEvent' - - $ref: '#/components/schemas/StageEntryUpdatedReviewRecordEvent' - - $ref: '#/components/schemas/RequestCreatedEvent' - - $ref: '#/components/schemas/RequestUpdatedFieldsEvent' - - $ref: '#/components/schemas/AssayRunCreatedEvent' - - $ref: '#/components/schemas/AssayRunUpdatedFieldsEvent' - - $ref: '#/components/schemas/AutomationInputGeneratorCompletedV2BetaEvent' - - $ref: '#/components/schemas/AutomationOutputProcessorCompletedV2BetaEvent' - - $ref: '#/components/schemas/AutomationOutputProcessorUploadedV2BetaEvent' - - $ref: '#/components/schemas/WorkflowTaskGroupCreatedEvent' - - $ref: '#/components/schemas/WorkflowTaskGroupMappingCompletedEvent' - - $ref: '#/components/schemas/WorkflowTaskCreatedEvent' - - $ref: '#/components/schemas/WorkflowTaskUpdatedFieldsEvent' - - $ref: '#/components/schemas/WorkflowTaskUpdatedStatusEvent' - - $ref: '#/components/schemas/WorkflowTaskUpdatedAssigneeEvent' - - $ref: '#/components/schemas/WorkflowTaskUpdatedScheduledOnEvent' - - $ref: '#/components/schemas/WorkflowTaskGroupUpdatedWatchersEvent' - - $ref: '#/components/schemas/WorkflowOutputCreatedEvent' - - $ref: '#/components/schemas/WorkflowOutputUpdatedFieldsEvent' - EventBase: - properties: - createdAt: - format: date-time - type: string - deprecated: - example: false - type: boolean - excludedProperties: - description: 'These properties have been dropped from the payload due to - size. - - ' - items: - type: string - type: array - id: - type: string - schema: - nullable: true - properties: - id: - type: string - name: - type: string - type: object - type: object - EventsPaginatedList: - properties: - events: - items: - $ref: '#/components/schemas/Event' - type: array - nextToken: - type: string - type: object - ExecuteSampleGroups: - description: 'The response is intentionally empty. - - ' - type: object - ExperimentalWellRole: - properties: - group: - type: integer - primaryRole: - enum: - - SAMPLE - - CONTROL - - STANDARD - - BLANK - type: string - subrole: - nullable: true - type: string - type: object - ExportAuditLogAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - additionalProperties: false - properties: - downloadURL: - format: uri - type: string - type: object - type: object - type: object - ExportItemRequest: - additionalProperties: false - properties: - id: - description: ID of the item to export - example: etr_1X1AlQPD - type: string - required: - - id - type: object - ExportsAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - additionalProperties: false - properties: - downloadURL: - format: uri - type: string - type: object - type: object - type: object - ExternalFileNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - properties: - externalFileId: - description: 'The ID of the external file. Use the ''Get an external file'' - endpoint to retrieve metadata about it. - - ' - type: string - links: - description: 'Array of links referenced in the caption via an @-mention, - hyperlink, or the drag-n-dropped preview attached to the note. - - ' - items: - $ref: '#/components/schemas/EntryLink' - type: array - text: - description: The caption of the file attachment. - type: string - type: - enum: - - external_file - type: string - type: object - description: An attached user-uploaded file - Feature: - allOf: - - $ref: '#/components/schemas/FeatureBase' - - properties: - id: - description: The id of the feature - example: feat_4YVqX98z - type: string - matchType: - description: The match type of the feature. Used to determine how auto-annotate - matches are made. - enum: - - nucleotide - - protein - type: string - description: A feature from a feature library - type: object - FeatureBase: - properties: - color: - description: The color of the annotations generated by the feature. Must - be a valid hex string - example: '#F58A5E' - type: string - featureLibraryId: - description: The id of the feature library the feature belongs to - example: featlib_19kd9aDq - type: string - featureType: - description: 'The type of feature, like gene, promoter, etc. Note: This - is an arbitrary string, not an enum - - ' - nullable: true - type: string - name: - description: The name of the feature - type: string - pattern: - description: The pattern used for matching during auto-annotation. - type: string - type: object - FeatureBulkCreate: - allOf: - - $ref: '#/components/schemas/FeatureCreate' - FeatureCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/FeatureBase' - - properties: - matchType: - description: The match type of the feature. Used to determine how auto-annotate - matches are made. - enum: - - nucleotide - - protein - type: string - - required: - - name - - featureType - - pattern - - matchType - - featureLibraryId - description: Inputs for a new feature - type: object - FeatureLibrariesPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - featureLibraries: - items: - $ref: '#/components/schemas/FeatureLibrary' - type: array - description: A paginated list of feature libraries - type: object - FeatureLibrary: - allOf: - - $ref: '#/components/schemas/FeatureLibraryBase' - - properties: - createdAt: - description: DateTime the Feature Library was created - format: date-time - type: string - id: - description: The id of the feature library - example: featlib_6ZVdX98t - type: string - modifiedAt: - description: DateTime the Feature Library was last modified - format: date-time - type: string - owner: - anyOf: - - $ref: '#/components/schemas/Organization' - - $ref: '#/components/schemas/UserSummary' - webURL: - description: The Benchling web UI url to view the Feature Library - format: uri - type: string - description: A feature library - type: object - FeatureLibraryBase: - properties: - description: - description: The description for the feature library - type: string - name: - description: The name of the feature library - type: string - type: object - FeatureLibraryCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/FeatureLibraryBase' - - properties: - organizationId: - description: 'The organization that will own the feature library. The - requesting user must be an administrator of the organization. If unspecified - and the organization allows personal ownables, then the requesting user - will own the feature library - - ' - example: ent_a0SApq3z - type: string - - required: - - name - - description - description: Inputs for creating a feature library - type: object - FeatureLibraryUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/FeatureLibraryBase' - description: Inputs for updating a feature library - type: object - FeatureUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/FeatureBase' - description: Inputs for updating a feature - type: object - FeaturesBulkCreateRequest: - additionalProperties: false - description: Inputs for bulk creating a new feature - properties: - features: - items: - $ref: '#/components/schemas/FeatureBulkCreate' - maxItems: 1000 - type: array - type: object - FeaturesPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - features: - description: List of features for the page - items: - $ref: '#/components/schemas/Feature' - type: array - description: A paginated list of features - type: object - Field: - properties: - displayValue: - nullable: true - readOnly: true - type: string - isMulti: - readOnly: true - type: boolean - textValue: - example: Amp - nullable: true - readOnly: true - type: string - type: - allOf: - - $ref: '#/components/schemas/FieldType' - readOnly: true - value: - description: 'For single link fields, use the id of the item you want to - link (eg. "seq_jdf8BV24"). - - For multi-link fields, use an array of ids of the items you want to link - (eg. ["seq_jdf8BV24"]) - - ' - nullable: true - oneOf: - - type: string - - type: boolean - - type: number - - type: object - - items: - type: string - type: array - required: - - value - type: object - FieldAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - $ref: '#/components/schemas/LinkedAppConfigResourceMixin' - - properties: - type: - enum: - - field - example: field - type: string - value: - example: tsf_e59a3b23 - nullable: true - type: string - FieldDefinition: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - id: - example: tsf_HXUnClU9 - type: string - isMulti: - type: boolean - isRequired: - type: boolean - name: - example: Resistance Gene - type: string - type: - $ref: '#/components/schemas/FieldType' - type: object - FieldType: - enum: - - dna_sequence_link - - aa_sequence_link - - custom_entity_link - - entity_link - - mixture_link - - dropdown - - 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: string - FieldValueWithResolution: - oneOf: - - type: string - - type: boolean - - type: number - - items: - type: string - type: array - - additionalProperties: false - description: Look up an entity by its entity registry ID - properties: - entityRegistryId: - type: string - required: - - entityRegistryId - type: object - FieldWithResolution: - allOf: - - $ref: '#/components/schemas/Field' - - properties: - value: - allOf: - - $ref: '#/components/schemas/FieldValueWithResolution' - nullable: true - type: object - Fields: - additionalProperties: - $ref: '#/components/schemas/Field' - type: object - FieldsWithResolution: - additionalProperties: - $ref: '#/components/schemas/FieldWithResolution' - example: - Linked Peptide: - value: prtn_ObbdtGhC - Linked Sequence: - value: - entityRegistryId: DNA001 - Linked Strains: - value: - - entityRegistryId: STRAIN001 - - entityRegistryId: STRAIN002 - type: object - FindMatchingRegionsAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - aaSequenceMatches: - items: - properties: - matchingAASequenceIds: - items: - type: string - type: array - targetAASequenceId: - type: string - type: object - type: array - type: object - type: object - type: object - FindMatchingRegionsDnaAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - dnaSequenceMatches: - items: - properties: - matchingDnaSequenceIds: - items: - type: string - type: array - targetDnaSequenceId: - type: string - type: object - type: array - type: object - type: object - type: object - FloatAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - properties: - type: - enum: - - float - example: float - type: string - value: - example: 1.0 - format: float - nullable: true - type: number - type: object - FloatFieldDefinition: - allOf: - - $ref: '#/components/schemas/FieldDefinition' - - properties: - decimalPrecision: - nullable: true - type: number - legalTextDropdownId: - nullable: true - type: string - numericMax: - nullable: true - type: number - numericMin: - nullable: true - type: number - type: - enum: - - float - type: string - unit: - allOf: - - $ref: '#/components/schemas/UnitSummary' - nullable: true - type: object - Folder: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - readOnly: true - id: - readOnly: true - type: string - name: - type: string - parentFolderId: - description: ID of the parent folder, if it exists - nullable: true - type: string - projectId: - description: ID of the containing project - readOnly: true - type: string - FolderCreate: - additionalProperties: false - properties: - name: - description: The name of the new folder. - type: string - parentFolderId: - description: The ID of the parent folder. - type: string - required: - - name - - parentFolderId - FoldersArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of folders along with any IDs of folder - contents that were unarchived. - - ' - properties: - aaSequenceIds: - items: - type: string - type: array - customEntityIds: - items: - type: string - type: array - dnaSequenceIds: - items: - type: string - type: array - entryIds: - items: - type: string - type: array - folderIds: - items: - type: string - type: array - mixtureIds: - items: - type: string - type: array - oligoIds: - items: - type: string - type: array - protocolIds: - items: - type: string - type: array - type: object - FoldersArchive: - additionalProperties: false - properties: - folderIds: - description: A list of folder IDs to archive. - items: - type: string - type: array - reason: - description: 'The reason for archiving the provided folders. Accepted reasons - may differ based on tenant configuration. - - ' - enum: - - Made in error - - Retired - - Other - type: string - required: - - reason - - folderIds - type: object - FoldersPaginatedList: - properties: - folders: - items: - $ref: '#/components/schemas/Folder' - type: array - nextToken: - type: string - type: object - FoldersUnarchive: - additionalProperties: false - properties: - folderIds: - description: A list of folder IDs to unarchive. - items: - type: string - type: array - required: - - folderIds - type: object - ForbiddenError: - properties: - error: - properties: - invalidId: - type: string - message: - type: string - type: - type: string - userMessage: - type: string - type: object - type: object - ForbiddenRestrictedSampleError: - properties: - error: - allOf: - - $ref: '#/components/schemas/BaseError' - - properties: - invalidIds: - items: - type: string - type: array - type: - enum: - - invalid_request_error - type: string - - example: - invalidIds: - - Q6uhNZvw - - con_OwmERWGE - - con_zuDFhNvz - message: You're not a restricted sample user for some items. - type: invalid_request_error - userMessage: You're not a restricted sample user for some items. - type: object - GenericApiIdentifiedAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - $ref: '#/components/schemas/LinkedAppConfigResourceMixin' - - properties: - type: - enum: - - container_schema - - plate_schema - - location_schema - - box_schema - - run_schema - - result_schema - - request_schema - - entry_schema - - workflow_task_schema - - dropdown - - dropdown_option - - registry - - folder - - entry - - worklist - - project - - workflow_task_status - - dna_sequence - - dna_oligo - - aa_sequence - - custom_entity - - mixture - - molecule - - rna_oligo - - rna_sequence - - box - - container - - location - - plate - type: string - value: - nullable: true - type: string - type: object - GenericEntity: - additionalProperties: false - properties: - aliases: - items: - type: string - type: array - apiURL: - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - authors: - description: 'Array of UserSummary Resources of the authors of the entry. - This defaults to the creator but can be manually changed. - - ' - items: - $ref: '#/components/schemas/UserSummary' - type: array - createdAt: - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - - description: UserSummary of the user who created the request - readOnly: true - customFields: - $ref: '#/components/schemas/CustomFields' - entityRegistryId: - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - folderId: - type: string - id: - type: string - modifiedAt: - format: date-time - readOnly: true - type: string - name: - type: string - registrationOrigin: - allOf: - - $ref: '#/components/schemas/RegistrationOrigin' - nullable: true - readOnly: true - registryId: - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - title: SchemaProperty - webURL: - readOnly: true - type: string - type: object - InaccessibleResource: - additionalProperties: false - properties: - inaccessibleId: - type: string - resourceType: - enum: - - inaccessible_resource - type: string - type: - description: 'The type of this inaccessible item. Example values: "custom_entity", - "container", "plate", "dna_sequence" - - ' - example: custom_entity - type: string - type: object - Ingredient: - properties: - amount: - description: 'The amount value of this ingredient in its mixture, in string - format (to preserve full precision). Pair with `units`. Supports scientific - notation (1.23e4). One ingredient on this mixture can have an amount value - of `"QS"`. - - ' - example: '12' - nullable: true - type: string - catalogIdentifier: - example: DION_004 - nullable: true - type: string - componentEntity: - allOf: - - $ref: '#/components/schemas/EntityLabels' - - description: The entity that uniquely identifies this component. - componentLotContainer: - allOf: - - $ref: '#/components/schemas/ContainerLabels' - description: The container representing the component lot for this ingredient. - This is only present if the mixture schema supports component lots in - "inventory" format. - nullable: true - componentLotEntity: - allOf: - - $ref: '#/components/schemas/EntityLabels' - description: The entity representing the component lot for this ingredient. - This is only present if the mixture schema supports component lots in - "inventory" format. - nullable: true - componentLotText: - description: Text representing the component lot for this ingredient. This - is only present if the mixture schema supports component lots in "text" - format. - example: DION_004-source_001 - nullable: true - type: string - hasParent: - type: boolean - notes: - nullable: true - type: string - targetAmount: - description: The target amount for this ingredient such that this ingredient's - proportion in its mixture would preserve the equivalent ingredient's proportion - in the parent mixture. Pair with `units`. - example: '123' - nullable: true - readOnly: true - type: string - units: - $ref: '#/components/schemas/IngredientMeasurementUnits' - type: object - IngredientMeasurementUnits: - enum: - - nL - - uL - - mL - - L - - mg - - g - - kg - - ug - - Units - - Cells - - mol - - mmol - - umol - example: mL - nullable: true - type: string - IngredientWriteParams: - properties: - amount: - description: 'The amount value of this ingredient in its mixture, in string - format (to preserve full precision). Pair with `units`. Supports scientific - notation (1.23e4). One ingredient on this mixture can have an amount value - of `"QS"`. - - ' - example: '12' - nullable: true - type: string - catalogIdentifier: - example: DION_004 - nullable: true - type: string - componentEntityId: - description: The entity that uniquely identifies this component. - example: bfi_37hdg8 - type: string - componentLotContainerId: - description: The container representing the component lot for this ingredient. - This is only writable if the mixture schema supports component lots in - "inventory" format. - example: cnt_12345 - nullable: true - type: string - componentLotEntityId: - description: The entity representing the component lot for this ingredient. - This is only writable if the mixture schema supports component lots in - "inventory" format. - example: bfi_12345 - nullable: true - type: string - componentLotText: - description: Text representing the component lot for this ingredient. This - is only writable if the mixture schema supports component lots in "text" - format. - example: DION_004-source_001 - nullable: true - type: string - notes: - nullable: true - type: string - units: - $ref: '#/components/schemas/IngredientMeasurementUnits' - required: - - componentEntityId - - catalogIdentifier - - amount - - units - - componentLotText - - componentLotEntityId - - componentLotContainerId - - notes - type: object - InitialTable: - additionalProperties: false - properties: - csvData: - description: blobId of an uploaded csv blob. The CSV should be formatted - with column headers of `columnId` which can be found in the [EntryTemplate](#/components/schemas/EntryTemplate). - For more information on uploading a blob, [click here](https://docs.benchling.com/docs/uploading-a-blob-to-benchling). - type: string - templateTableID: - description: Template table API ID - type: string - type: object - InstrumentQuery: - properties: - command: - description: The command used in the query - type: string - connectionId: - description: The connection queried - type: string - createdAt: - description: The time the query was created - format: date-time - type: string - id: - description: The ID of the instrument query - type: string - info: - description: Additional information about the query - type: string - params: - description: Parameters used in the query - type: object - status: - description: Status of the query - type: string - values: - description: Values returned by the query - type: object - type: object - IntegerAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - properties: - type: - enum: - - integer - example: integer - type: string - value: - nullable: true - type: integer - type: object - IntegerFieldDefinition: - allOf: - - $ref: '#/components/schemas/FieldDefinition' - - properties: - numericMax: - nullable: true - type: number - numericMin: - nullable: true - type: number - type: - enum: - - integer - type: string - unit: - allOf: - - $ref: '#/components/schemas/UnitSummary' - nullable: true - type: object - InteractiveUiBlock: - properties: - enabled: - nullable: true - type: boolean - id: - example: user_defined_id - type: string - required: - - id - type: object - InventoryContainerTableNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - $ref: '#/components/schemas/StructuredTableApiIdentifiers' - - properties: - destinationContainerSchemaId: - example: consch_JEL0WCBK - type: string - mode: - enum: - - create_and_fill - - fill - - update - type: string - type: - enum: - - inventory_container_table - type: string - type: object - InventoryPlateTableNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - $ref: '#/components/schemas/StructuredTableApiIdentifiers' - - properties: - destinationPlateSchemaId: - example: pltsch_LRIuH0yJ - nullable: true - type: string - destinationWellSchemaId: - example: consch_JEL0WCBK - type: string - mode: - enum: - - create_and_fill - - fill - - update - type: string - type: - enum: - - inventory_plate_table - type: string - type: object - JsonAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - properties: - type: - enum: - - json - example: json - type: string - value: - example: '{"abc": "123"}' - nullable: true - type: string - LabAutomationBenchlingAppError: - properties: - message: - type: string - type: object - LabAutomationBenchlingAppErrors: - properties: - topLevelErrors: - items: - properties: - errorMessage: - type: string - type: object - type: array - type: object - LabAutomationTransform: - properties: - apiURL: - description: The canonical url of the transform in the API. - format: uri - readOnly: true - type: string - blobId: - format: uuid - nullable: true - type: string - customTransformId: - format: uuid - nullable: true - type: string - errors: - $ref: '#/components/schemas/LabAutomationBenchlingAppErrors' - id: - type: string - inputGeneratorId: - nullable: true - type: string - modifiedAt: - description: DateTime the transform was last modified. - format: date-time - readOnly: true - type: string - outputProcessorId: - nullable: true - type: string - status: - enum: - - NOT_STARTED - - RUNNING - - FAILED - - SUCCEEDED - type: string - type: object - LabAutomationTransformUpdate: - additionalProperties: false - properties: - blobId: - format: uuid - type: string - errors: - items: - $ref: '#/components/schemas/LabAutomationBenchlingAppError' - type: array - type: object - LabelTemplate: - properties: - id: - description: ID of the label template. - type: string - name: - description: Name of the label template. - type: string - zplTemplate: - description: The ZPL template that will be filled in and sent to a printer. - type: string - type: object - LabelTemplatesList: - properties: - labelTemplates: - items: - $ref: '#/components/schemas/LabelTemplate' - type: array - type: object - LegacyWorkflow: - properties: - createdAt: - description: DateTime at which the the legacy workflow was created - format: date-time - readOnly: true - type: string - description: - description: Description of the legacy workflow - nullable: true - type: string - displayId: - description: User-friendly ID of the legacy workflow - type: string - id: - description: ID of the legacy workflow - example: wfw_uHBz7ka2 - readOnly: true - type: string - name: - description: Name of the legacy workflow - type: string - projectId: - description: ID of the project that contains the legacy workflow - type: string - type: object - LegacyWorkflowList: - properties: - workflows: - items: - $ref: '#/components/schemas/LegacyWorkflow' - type: array - type: object - LegacyWorkflowPatch: - additionalProperties: false - properties: - description: - description: Description of the legacy workflow - type: string - name: - description: Name of the legacy workflow - type: string - projectId: - description: ID of the project that contains the legacy workflow - type: string - type: object - LegacyWorkflowSample: - properties: - batchId: - description: ID of the batch - type: string - containerIds: - description: Array of IDs of containers - items: - type: string - type: array - createdAt: - description: DateTime at which the the sample was created - format: date-time - readOnly: true - type: string - id: - description: ID of the sample - readOnly: true - type: string - name: - description: Name of the sample - type: string - type: object - LegacyWorkflowSampleList: - properties: - samples: - items: - $ref: '#/components/schemas/LegacyWorkflowSample' - type: array - type: object - LegacyWorkflowStage: - properties: - createdAt: - description: DateTime at which the the legacy workflow stage was created - format: date-time - readOnly: true - type: string - id: - description: ID of the legacy workflow stage - readOnly: true - type: string - name: - description: Name of the legacy workflow stage - type: string - type: object - LegacyWorkflowStageList: - properties: - workflowStages: - items: - $ref: '#/components/schemas/LegacyWorkflowStage' - type: array - type: object - LegacyWorkflowStageRun: - properties: - createdAt: - description: DateTime at which the the legacy workflow stage run was created - format: date-time - readOnly: true - type: string - id: - description: ID of the legacy workflow stage run - readOnly: true - type: string - name: - description: Name of the legacy workflow stage run - type: string - status: - description: Status of the legacy workflow stage run - enum: - - COMPLETED - - DISCARDED - - INITIALIZED - type: string - type: object - LegacyWorkflowStageRunList: - properties: - workflowStageRuns: - items: - $ref: '#/components/schemas/LegacyWorkflowStageRun' - type: array - type: object - LinkedAppConfigResource: - oneOf: - - $ref: '#/components/schemas/LinkedAppConfigResourceSummary' - - $ref: '#/components/schemas/InaccessibleResource' - type: object - LinkedAppConfigResourceMixin: - properties: - linkedResource: - allOf: - - $ref: '#/components/schemas/LinkedAppConfigResource' - nullable: true - type: object - LinkedAppConfigResourceSummary: - additionalProperties: false - properties: - id: - description: The API ID of the linked resource - example: tsf_e59a3b23 - type: string - name: - description: The name of the resource in Benchling - example: Parent Sample - type: string - type: object - Location: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - availableCapacity: - description: 'The number of available positions in this location. Null if - *totalCapacity* is not set. - - ' - nullable: true - readOnly: true - type: integer - barcode: - type: string - createdAt: - type: string - creator: - $ref: '#/components/schemas/UserSummary' - fields: - $ref: '#/components/schemas/Fields' - id: - type: string - modifiedAt: - type: string - name: - type: string - occupiedCapacity: - description: 'The number of plates, boxes, and containers currently in this - location. Null if *totalCapacity* is not set. - - ' - nullable: true - readOnly: true - type: integer - parentStorageId: - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - totalCapacity: - description: 'The total capacity of this location (i.e. how many plates, - boxes, and containers it can store). If null, capacity is not limited. - - ' - nullable: true - readOnly: true - type: integer - webURL: - type: string - LocationCreate: - additionalProperties: false - properties: - barcode: - type: string - fields: - $ref: '#/components/schemas/Fields' - name: - type: string - parentStorageId: - type: string - schemaId: - type: string - required: - - name - - schemaId - type: object - LocationSchema: - allOf: - - $ref: '#/components/schemas/RegistrySchema' - - properties: - type: - enum: - - location - readOnly: true - type: string - type: object - LocationSchemasList: - properties: - locationSchemas: - items: - $ref: '#/components/schemas/LocationSchema' - readOnly: true - type: array - type: object - LocationSchemasPaginatedList: - allOf: - - $ref: '#/components/schemas/LocationSchemasList' - - properties: - nextToken: - type: string - type: object - LocationUpdate: - additionalProperties: false - properties: - fields: - $ref: '#/components/schemas/Fields' - name: - type: string - parentStorageId: - type: string - type: object - LocationsArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of locations along with any IDs of locations, - boxes, plates, containers that were archived. - - ' - properties: - boxIds: - items: - type: string - type: array - containerIds: - items: - type: string - type: array - locationIds: - items: - type: string - type: array - plateIds: - items: - type: string - type: array - type: object - LocationsArchive: - additionalProperties: false - properties: - locationIds: - description: Array of location IDs - items: - type: string - type: array - reason: - description: 'Reason that locations are being archived. - - ' - enum: - - Made in error - - Retired - - Other - type: string - shouldRemoveBarcodes: - description: 'Remove barcodes. Removing barcodes from archived inventory - that contain items will also remove barcodes from the contained items. - - ' - type: boolean - required: - - locationIds - - reason - type: object - LocationsBulkGet: - properties: - locations: - items: - $ref: '#/components/schemas/Location' - type: array - type: object - LocationsPaginatedList: - properties: - locations: - items: - $ref: '#/components/schemas/Location' - type: array - nextToken: - type: string - type: object - LocationsUnarchive: - additionalProperties: false - properties: - locationIds: - description: Array of location IDs - items: - type: string - type: array - required: - - locationIds - type: object - LookupTableNotePart: - allOf: - - $ref: '#/components/schemas/StructuredTableApiIdentifiers' - - properties: - type: - enum: - - lookup_table - type: string - type: object - MarkdownUiBlock: - additionalProperties: false - properties: - id: - example: user_generated_id - type: string - type: - enum: - - MARKDOWN - type: string - value: - example: '# This is a markdown block - - 1. with **bold text**.' - type: string - required: - - type - - value - type: object - MarkdownUiBlockCreate: - allOf: - - $ref: '#/components/schemas/MarkdownUiBlock' - type: object - MarkdownUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/MarkdownUiBlock' - type: object - MatchBasesRequest: - additionalProperties: false - properties: - archiveReason: - default: NOT_ARCHIVED - enum: - - NOT_ARCHIVED - - Other - - Archived - type: string - bases: - type: string - nextToken: - type: string - pageSize: - default: 50 - maximum: 100 - minimum: 0 - type: integer - registryId: - description: 'ID of a registry. Restricts results to those registered in - this registry. Specifying `null` returns unregistered items. - - ' - nullable: true - type: string - sort: - default: modifiedAt:desc - enum: - - modifiedAt:asc - - modifiedAt:desc - - name:asc - - name:desc - type: string - required: - - bases - type: object - Measurement: - properties: - units: - description: Can only be null if value is also null - nullable: true - type: string - value: - description: Can only be null if units is also null - nullable: true - type: number - required: - - value - - units - type: object - Membership: - properties: - role: - enum: - - ADMIN - - MEMBER - type: string - user: - $ref: '#/components/schemas/UserSummary' - MembershipCreate: - properties: - role: - enum: - - ADMIN - - MEMBER - example: ADMIN - type: string - userId: - example: ent_a0SApq3z - type: string - MembershipUpdate: - properties: - role: - enum: - - ADMIN - - MEMBER - type: string - MembershipsPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - memberships: - items: - $ref: '#/components/schemas/Membership' - type: array - Mixture: - properties: - aliases: - items: - example: FRM000 - type: string - type: array - allowMeasuredIngredients: - description: Derived from the mixture's schema. - readOnly: true - type: boolean - amount: - description: The positive numerical amount value of this mixture in string - format (to preserve full precision). Pair with `units`. Supports scientific - notation (1.23e4). - example: '123' - type: string - apiURL: - description: The canonical url of the Mixture in the API. - example: https://benchling.com/api/v2/mixtures/mxt_xCUXNVyG - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - authors: - items: - $ref: '#/components/schemas/UserSummary' - type: array - createdAt: - example: '2017-04-18T05:54:56.247545+00:00' - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - - readOnly: true - customFields: - $ref: '#/components/schemas/CustomFields' - entityRegistryId: - example: FRM000 - nullable: true - type: string - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: Mixtures can have up to one parent mixture field. - folderId: - example: lib_R8KcsjhW - nullable: true - type: string - id: - example: mxt_xCUXNVyG - type: string - ingredients: - description: List of ingredients on this mixture. - items: - $ref: '#/components/schemas/Ingredient' - type: array - modifiedAt: - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - readOnly: true - type: string - name: - example: FRM000 - type: string - registrationOrigin: - allOf: - - $ref: '#/components/schemas/RegistrationOrigin' - nullable: true - readOnly: true - registryId: - example: src_NetYd96a - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - example: - id: ts_EM122lfJ - name: Prep - units: - $ref: '#/components/schemas/MixtureMeasurementUnits' - webURL: - example: https://benchling.com/benchling/f/R8KcsjhW-academic-registry/mxt-xCUXNVyG-sbn000/edit - readOnly: true - type: string - type: object - MixtureBulkUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/MixtureUpdate' - - properties: - id: - example: ingr_3jshUi - type: string - required: - - id - type: object - MixtureCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/MixtureUpdate' - - $ref: '#/components/schemas/CreateEntityIntoRegistry' - - required: - - name - - ingredients - - schemaId - - units - MixtureMeasurementUnits: - enum: - - nL - - uL - - mL - - L - - g - - kg - - mg - - ug - - Units - example: L - nullable: true - type: string - MixturePrepTableNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - $ref: '#/components/schemas/StructuredTableApiIdentifiers' - - properties: - mixtureSchemaId: - example: ts_eGNPfqCX - type: string - type: - enum: - - mixture_prep_table - type: string - type: object - MixtureUpdate: - additionalProperties: false - properties: - aliases: - description: Aliases to add to the mixture - items: - type: string - type: array - amount: - description: The positive numerical amount value of this mixture in string - format (to preserve full precision). Pair with `units`. Supports scientific - notation (1.23e4). - example: '123' - type: string - authorIds: - description: IDs of users to set as the mixture's authors. - items: - type: string - type: array - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: 'Custom fields to add to the mixture. Every field should have - its name as a key, mapping to an object with information about the value - of the field. - - ' - entityRegistryId: - example: RCP001 - type: string - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Schema fields to set on the mixture. Must correspond with - the schema''s field definitions. Every field should have its name as a - key, mapping to an object with information about the value of the field. - - If you are setting the parent mixture field here, you must also specify - `ingredients` - - ' - folderId: - description: ID of the folder that the entity is moved into - type: string - ingredients: - description: 'Desired final state for the ingredients on this mixture. - - Each ingredient you specify will be matched with the existing ingredients - on the mixture based on the component entity, and Benchling will create, - update, or delete this mixture''s ingredients so that the final state - of this mixture''s ingredients matches your request. - - Benchling will recognize that any ingredients you specify that match ingredients - on the parent mixture (based on component entity) are inherited. This - can be seen on the returned `ingredients[i].hasParent` attribute. - - ' - items: - $ref: '#/components/schemas/IngredientWriteParams' - type: array - name: - type: string - schemaId: - type: string - units: - $ref: '#/components/schemas/MixtureMeasurementUnits' - type: object - MixtureWithEntityType: - allOf: - - $ref: '#/components/schemas/Mixture' - - properties: - entityType: - enum: - - mixture - type: string - type: object - type: object - MixturesArchivalChange: - description: 'IDs of all mixtures that were archived or unarchived. - - ' - properties: - mixtureIds: - items: - example: mxt_djw9aU - type: string - type: array - type: object - MixturesArchive: - additionalProperties: false - description: 'The request body for archiving mixtures. - - ' - properties: - mixtureIds: - items: - example: mxt_djw9aU - type: string - type: array - reason: - $ref: '#/components/schemas/EntityArchiveReason' - required: - - reason - - mixtureIds - type: object - MixturesBulkCreateRequest: - additionalProperties: false - properties: - mixtures: - items: - $ref: '#/components/schemas/MixtureCreate' - maxItems: 1000 - type: array - required: - - mixtures - MixturesBulkUpdateRequest: - additionalProperties: false - properties: - mixtures: - items: - $ref: '#/components/schemas/MixtureBulkUpdate' - type: array - MixturesPaginatedList: - properties: - mixtures: - items: - $ref: '#/components/schemas/Mixture' - type: array - nextToken: - type: string - type: object - MixturesUnarchive: - additionalProperties: false - description: 'The request body for unarchiving mixtures. - - ' - properties: - mixtureIds: - items: - example: mxt_djw9aU - type: string - type: array - required: - - mixtureIds - type: object - Molecule: - additionalProperties: false - properties: - aliases: - description: Array of aliases. - items: - type: string - type: array - apiURL: - description: The canonical url of the Molecule in the API. - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - canonicalizedSmiles: - description: The canonicalized chemical structure in SMILES format. - example: Nc1nc(=O)n([H:1])cc1C1CC1 - type: string - createdAt: - description: DateTime the Molecule was created. - format: date-time - readOnly: true - type: string - creator: - $ref: '#/components/schemas/UserSummary' - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: Custom fields set on the Molecule. - entityRegistryId: - description: Registry ID of the Molecule if registered. - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - folderId: - description: ID of the folder that contains the Molecule. - type: string - id: - description: ID of the Molecule. - example: mol_bhuDUw9D - type: string - modifiedAt: - description: DateTime the Molecule was last modified. - format: date-time - readOnly: true - type: string - name: - description: Name of the Molecule. - type: string - originalSmiles: - description: The original chemical structure supplied by the user in SMILES - format. Null if the user did not originally supply SMILES. - example: Nc1nc(=O)n([H:1])cc1C1CC1 - nullable: true - type: string - registrationOrigin: - allOf: - - $ref: '#/components/schemas/RegistrationOrigin' - nullable: true - readOnly: true - registryId: - description: Registry the Molecule is registered in. - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - webURL: - description: URL of the Molecule. - example: https://benchling.com/benchling/f/lib_R8KcsjhW-molecules/mol_xCUXNVyG-molecule1/edit - format: uri - readOnly: true - type: string - type: object - MoleculeBaseRequest: - additionalProperties: false - properties: - aliases: - description: Aliases to add to the Molecule. - items: - type: string - type: array - authorIds: - description: IDs of users to set as the Molecule's authors. - items: - type: string - type: array - chemicalStructure: - allOf: - - $ref: '#/components/schemas/MoleculeStructure' - description: 'Chemical structure of the Molecule. - - ' - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: 'Custom fields to add to the Molecule. Every field should have - its name as a key, mapping to an object with information about the value - of the field. - - ' - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Fields to set on the Molecule. Must correspond with the schema''s - field definitions. Every field should have its name as a key, mapping - to an object with information about the value of the field. - - ' - folderId: - description: 'ID of the folder containing the Molecule. - - ' - type: string - name: - description: 'Name of the Molecule. - - ' - type: string - schemaId: - description: 'ID of the Molecule''s schema. - - ' - type: string - type: object - MoleculeBaseRequestForCreate: - allOf: - - $ref: '#/components/schemas/MoleculeBaseRequest' - - required: - - name - - chemicalStructure - MoleculeBulkUpdate: - additionalProperties: false - allOf: - - properties: - id: - type: string - type: object - - $ref: '#/components/schemas/MoleculeUpdate' - MoleculeBulkUpsertRequest: - allOf: - - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' - - $ref: '#/components/schemas/MoleculeBaseRequestForCreate' - MoleculeCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/MoleculeBaseRequestForCreate' - - $ref: '#/components/schemas/CreateEntityIntoRegistry' - MoleculeStructure: - additionalProperties: false - properties: - structureFormat: - description: 'Format of the chemical structure. - - - smiles - - - molfile - - ' - enum: - - smiles - - molfile - type: string - value: - description: Chemical structure in SMILES or molfile format. - example: Nc1nc(=O)n([H:1])cc1C1CC1 - type: string - type: object - MoleculeUpdate: - additionalProperties: false - allOf: - - properties: - entityRegistryId: - type: string - type: object - - $ref: '#/components/schemas/MoleculeBaseRequest' - MoleculeUpsertRequest: - allOf: - - $ref: '#/components/schemas/EntityUpsertBaseRequest' - - $ref: '#/components/schemas/MoleculeBaseRequestForCreate' - MoleculesArchivalChange: - additionalProperties: false - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of Molecules along with any IDs of batches - that were archived / unarchived. - - ' - properties: - batchIds: - items: - type: string - type: array - moleculeIds: - items: - type: string - type: array - type: object - MoleculesArchive: - additionalProperties: false - description: 'The request body for archiving Molecules. - - ' - properties: - moleculeIds: - items: - type: string - type: array - reason: - description: 'The reason for archiving the provided Molecules. Accepted - reasons may differ based on tenant configuration. - - ' - enum: - - Made in error - - Retired - - Expended - - Shipped - - Contaminated - - Expired - - Missing - - Other - type: string - required: - - reason - - moleculeIds - type: object - MoleculesBulkCreateRequest: - additionalProperties: false - properties: - molecules: - items: - $ref: '#/components/schemas/MoleculeCreate' - type: array - type: object - MoleculesBulkUpdateRequest: - additionalProperties: false - properties: - molecules: - items: - $ref: '#/components/schemas/MoleculeBulkUpdate' - type: array - type: object - MoleculesBulkUpsertRequest: - additionalProperties: false - maxItems: 1000 - properties: - molecules: - items: - $ref: '#/components/schemas/MoleculeBulkUpsertRequest' - type: array - required: - - molecules - type: object - MoleculesPaginatedList: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - molecules: - items: - $ref: '#/components/schemas/Molecule' - type: array - MoleculesUnarchive: - additionalProperties: false - description: 'The request body for unarchiving Molecules. - - ' - properties: - moleculeIds: - items: - type: string - type: array - required: - - moleculeIds - type: object - Monomer: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - attachmentPoints: - description: A list of the capping group present at each location where - the monomer can form a bond with other monomers - example: - - OH - - OH - items: - type: string - type: array - calculatedMolecularWeight: - description: The molecular weight of the monomer as calculated by RDKit - based on the monomer chemical structure - example: 120.422 - type: number - canonicalSmiles: - description: The canonicalized chemical structure in SMILES format. - example: O[P@@](=S)([OH:1])[OH:2] - type: string - createdAt: - description: DateTime the monomer was created. - format: date-time - readOnly: true - type: string - customMolecularWeight: - description: Optional molecular weight value that the user can provide to - override the calculated molecular weight - example: 119.422 - nullable: true - type: number - id: - description: ID of the monomer - example: mon_bhuDUw9D - type: string - modifiedAt: - description: DateTime the monomer was last modified. - format: date-time - readOnly: true - type: string - monomerType: - allOf: - - $ref: '#/components/schemas/MonomerType' - name: - description: Name of the monomer - example: (Rp)-Phosphorothioate - type: string - naturalAnalog: - description: Symbol for the natural equivalent of the monomer. Acceptable - natural analog values include IUPAC bases, r, and p. - example: T - type: string - polymerType: - allOf: - - $ref: '#/components/schemas/MonomerPolymerType' - symbol: - description: User-defined identifier of the monomer, unique on the monomer - type. - example: Rsp - type: string - visualColor: - description: The hex color code of the monomer visual symbol - example: '#7051FC' - nullable: true - type: string - visualSymbol: - allOf: - - $ref: '#/components/schemas/MonomerVisualSymbol' - nullable: true - type: object - MonomerBaseRequest: - properties: - color: - description: The hex color code of the monomer visual symbol - example: '#7051FC' - nullable: true - type: string - customMolecularWeight: - description: Optional molecular weight value that the user can provide to - override the calculated molecular weight - example: 119.422 - nullable: true - type: number - name: - description: Name of the monomer - example: (Rp)-Phosphorothioate - type: string - smiles: - description: The chemical structure in SMILES format. - example: O[P@@](=S)([OH:1])[OH:2] - type: string - symbol: - description: User-defined identifier of the monomer, unique on the monomer - type. - example: Rsp - type: string - visualSymbol: - allOf: - - $ref: '#/components/schemas/MonomerVisualSymbol' - type: object - MonomerCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/MonomerBaseRequest' - - properties: - naturalAnalog: - description: Symbol for the natural equivalent of the monomer. Acceptable - natural analog values include IUPAC bases, r, and p. - example: T - type: string - - required: - - smiles - - name - - naturalAnalog - - symbol - MonomerPolymerType: - description: The polymer type of the monomer. Currently only RNA monomers are - supported. - enum: - - RNA - type: string - MonomerType: - description: The part of the nucleotide structure that the monomer fits into, - i.e. backbone or branch - enum: - - BACKBONE - - BRANCH - type: string - MonomerUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/MonomerBaseRequest' - MonomerVisualSymbol: - description: The shape of the monomer visual symbol. - enum: - - DIAMOND_FILLED - - DIAMOND_HOLLOW - - DIAMOND_DASHED - - STAR_FILLED - - STAR_HOLLOW - - TRIANGLE_FILLED - - TRIANGLE_HOLLOW - - DYAD_FILLED - - DYAD_HOLLOW - - CLOVER_FILLED - - CLOVER_HOLLOW - - TRIAD_FILLED - - TRIAD_HOLLOW - - RECTANGLE_FILLED - - RECTANGLE_HOLLOW - - LETTERS_P - - LETTERS_PS - type: string - MonomersArchivalChange: - additionalProperties: false - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. - - ' - properties: - batchIds: - items: - type: string - type: array - monomerIds: - items: - type: string - type: array - type: object - MonomersArchive: - additionalProperties: false - description: 'The request body for archiving Monomers. - - ' - properties: - monomerIds: - items: - type: string - maxItems: 100 - type: array - reason: - description: 'The reason for archiving the provided Monomers. Accepted reasons - may differ based on tenant configuration. - - ' - enum: - - Made in error - - Archived - - Other - type: string - required: - - reason - - monomerIds - type: object - MonomersPaginatedList: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - monomers: - items: - $ref: '#/components/schemas/Monomer' - type: array - nextToken: - type: string - MonomersUnarchive: - additionalProperties: false - description: 'The request body for unarchiving Monomers. - - ' - properties: - monomerIds: - items: - type: string - maxItems: 100 - type: array - required: - - monomerIds - type: object - MultipleContainersTransfer: - allOf: - - $ref: '#/components/schemas/ContainerTransferBase' - - properties: - destinationContainerId: - description: ID of container that will be transferred into. - type: string - finalQuantity: - $ref: '#/components/schemas/ContainerQuantity' - finalVolume: - $ref: '#/components/schemas/DeprecatedContainerVolumeForInput' - sourceConcentration: - allOf: - - $ref: '#/components/schemas/Measurement' - description: "Concentration at which to transfer entities. Not applicable\ - \ for container-to-container transfers (the concentration of the source\ - \ container\u2019s contents will be used).\n" - example: - units: g/mL - value: 10 - required: - - destinationContainerId - type: object - type: object - MultipleContainersTransfersList: - additionalProperties: false - properties: - transfers: - items: - $ref: '#/components/schemas/MultipleContainersTransfer' - maxItems: 5000 - type: array - required: - - transfers - type: object - NamingStrategy: - description: 'Specifies the behavior for automatically generated names when - registering an entity. - - - NEW_IDS: Generate new registry IDs - - - IDS_FROM_NAMES: Generate registry IDs based on entity names - - - DELETE_NAMES: Generate new registry IDs and replace name with registry ID - - - SET_FROM_NAME_PARTS: Generate new registry IDs, rename according to name - template, and keep old name as alias - - - REPLACE_NAMES_FROM_PARTS: Generate new registry IDs, and replace name according - to name template - - - KEEP_NAMES: Keep existing entity names as registry IDs - - - REPLACE_ID_AND_NAME_FROM_PARTS: Generate registry IDs and names according - to name template - - ' - enum: - - NEW_IDS - - IDS_FROM_NAMES - - DELETE_NAMES - - SET_FROM_NAME_PARTS - - REPLACE_NAMES_FROM_PARTS - - KEEP_NAMES - - REPLACE_ID_AND_NAME_FROM_PARTS - type: string - NotFoundError: - properties: - error: - allOf: - - $ref: '#/components/schemas/BaseError' - - properties: - invalidId: - type: string - type: - enum: - - invalid_request_error - type: string - type: object - NucleotideAlignment: - allOf: - - $ref: '#/components/schemas/NucleotideAlignmentSummary' - - properties: - alignedSequences: - items: - $ref: '#/components/schemas/AlignedNucleotideSequence' - type: array - type: object - type: object - NucleotideAlignmentBase: - properties: - algorithm: - enum: - - mafft - - clustalo - type: string - clustaloOptions: - description: Options to pass to the ClustalO algorithm, only applicable - for ClustalO. - properties: - maxGuidetreeIterations: - default: -1 - description: Max guide tree iterations within combined iterations. Use - -1 for no max (all iterations will include guide tree iterations). - maximum: 5 - minimum: -1 - type: integer - maxHmmIterations: - default: -1 - description: Max HMM iterations within combined iterations. Use -1 for - no max (all iterations will include HMM iterations). - maximum: 5 - minimum: -1 - type: integer - mbedGuideTree: - default: true - description: Whether mBed-like clustering guide tree should be used - (faster to use it). - type: boolean - mbedIteration: - default: true - description: Whether mBed-like clustering iteration should be used (faster - to use it). - type: boolean - numCombinedIterations: - default: 0 - description: Number of (combined guide-tree/HMM) iterations. - maximum: 5 - minimum: 0 - type: integer - type: object - files: - items: - oneOf: - - properties: - sequenceId: - example: seq_3cxbVcCf - type: string - type: object - - $ref: '#/components/schemas/NucleotideAlignmentFile' - type: array - mafftOptions: - description: Options to pass to the MAFFT algorithm, only applicable for - MAFFT. - properties: - adjustDirection: - default: fast - description: "Adjust direction:\n * `fast`: Enabled, quickly.\n * `accurate`:\ - \ Enabled, accurately (slow).\n * `disabled`: Disabled, fastest.\n" - enum: - - fast - - accurate - - disabled - type: string - gapExtensionPenalty: - default: 0.0 - description: Gap extension penalty. - type: number - gapOpenPenalty: - default: 1.53 - description: Gap open penalty. - type: number - maxIterations: - default: 0 - description: Max refinement iterations. Not applicable for auto strategy, - as it will be selected automatically. - type: integer - retree: - default: 2 - description: Tree rebuilding. Only used for 6-mer strategy. - type: integer - strategy: - default: auto - description: "MAFFT Strategy:\n * `auto`: Pick a strategy automatically\ - \ based on the count and size of inputs.\n * `sixmer`: Use 6-mer distance\ - \ for constructing the guide tree.\n * `localpair`: Compute local\ - \ pairwise alignments using Smith-Waterman for constructing the guide\ - \ tree and iterative refinement.\n * `globalpair`: Compute global\ - \ pairwise alignments using Needleman-Wunsch for constructing the\ - \ guide tree and iterative refinement.\n" - enum: - - auto - - sixmer - - localpair - - globalpair - type: string - type: object - name: - example: my new alignment - maxLength: 255 - type: string - required: - - algorithm - - files - type: object - NucleotideAlignmentFile: - properties: - data: - format: byte - type: string - name: - type: string - type: object - NucleotideAlignmentSummary: - properties: - apiURL: - description: The canonical url of the Alignment in the API. - example: https://benchling.com/api/v2/alignments/seqanl_6ZVdX98t - format: uri - type: string - createdAt: - description: DateTime the Alignment was created - format: date-time - type: string - id: - example: seqanl_6ZVdX98t - type: string - modifiedAt: - description: DateTime the Alignment was last modified - format: date-time - type: string - name: - type: string - referenceSequenceId: - description: The ID of the template or consensus Sequence associated with - the Alignment - example: seq_MYmsnS1u - type: string - webURL: - description: The Benchling web UI url to view the Alignment - format: uri - type: string - type: object - NucleotideAlignmentsPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - alignments: - items: - $ref: '#/components/schemas/NucleotideAlignmentSummary' - type: array - type: object - NucleotideConsensusAlignmentCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/NucleotideAlignmentBase' - - properties: - newSequence: - properties: - folderId: - example: lib_qQFY3WQH - type: string - type: object - sequenceId: - type: string - NucleotideSequencePart: - properties: - end: - description: 0-based exclusive end index. The end of the sequence is always - represented as 0. - type: integer - sequenceId: - example: seq_VfVOART1 - type: string - start: - description: 0-based inclusive start index. - type: integer - type: object - NucleotideTemplateAlignmentCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/NucleotideAlignmentBase' - - properties: - templateSequenceId: - example: seq_rXqq0IHU - type: string - required: - - templateSequenceId - type: object - OAuthBadRequestError: - properties: - error: - allOf: - - $ref: '#/components/schemas/BaseError' - - properties: - type: - enum: - - invalid_request - - invalid_grant - - unauthorized_client - - unsupported_grant_type - type: string - type: object - OAuthUnauthorizedError: - properties: - error: - allOf: - - $ref: '#/components/schemas/BaseError' - - properties: - type: - enum: - - invalid_client - type: string - type: object - Oligo: - discriminator: - mapping: - DNA: DnaOligo - RNA: RnaOligo - propertyName: nucleotideType - properties: - aliases: - description: Array of aliases - items: - type: string - type: array - apiURL: - description: The canonical url of the Oligo in the API. - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - bases: - description: Base pairs of the Oligo. - example: ACTTTTT - type: string - createdAt: - description: DateTime the Oligo was created. - format: date-time - readOnly: true - type: string - creator: - $ref: '#/components/schemas/UserSummary' - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: Custom fields set on the Oligo. - entityRegistryId: - description: Registry ID of the Oligo if registered. - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - folderId: - description: ID of the folder that contains the Oligo. - nullable: true - type: string - id: - description: ID of the Oligo. - example: seq_bhuDUw9D - type: string - length: - description: Number of bases in the Oligo. - type: integer - modifiedAt: - description: DateTime the Oligo was last modified. - format: date-time - readOnly: true - type: string - name: - description: Name of the Oligo. - type: string - nucleotideType: - description: Nucleotide type of the Oligo. - enum: - - DNA - - RNA - type: string - registrationOrigin: - allOf: - - $ref: '#/components/schemas/RegistrationOrigin' - nullable: true - readOnly: true - registryId: - description: Registry the Oligo is registered in. - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - webURL: - description: URL of the Oligo. - example: https://benchling.com/benchling/f/lib_hBHqKbzE-oligos/seq_bhuDUw9D-test-oligo-abc/edit - format: uri - readOnly: true - type: string - type: object - OligoBaseRequest: - properties: - aliases: - description: Aliases to add to the Oligo - items: - type: string - type: array - authorIds: - description: IDs of users to set as the Oligo's authors. - items: - type: string - type: array - bases: - description: 'Base pairs of the oligo. - - ' - type: string - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: 'Custom fields to add to the Oligo. Every field should have - its name as a key, mapping to an object with information about the value - of the field. - - ' - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Fields to set on the Oligo. Must correspond with the schema''s - field definitions. Every field should have its name as a key, mapping - to an object with information about the value of the field. - - ' - folderId: - description: 'ID of the folder containing the Oligo. - - ' - type: string - name: - description: 'Name of the Oligo. - - ' - type: string - schemaId: - description: 'ID of the oligo''s schema. - - ' - type: string - type: object - OligoBaseRequestForCreate: - allOf: - - $ref: '#/components/schemas/OligoBaseRequest' - - required: - - bases - - name - OligoBulkUpsertRequest: - allOf: - - $ref: '#/components/schemas/EntityBulkUpsertBaseRequest' - - $ref: '#/components/schemas/OligoBaseRequestForCreate' - OligoCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/OligoBaseRequestForCreate' - - $ref: '#/components/schemas/CreateEntityIntoRegistry' - OligoUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/OligoBaseRequest' - OligoUpsertRequest: - allOf: - - $ref: '#/components/schemas/EntityUpsertBaseRequest' - - $ref: '#/components/schemas/OligoBaseRequestForCreate' - OligosArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of Oligos along with any IDs of batches - that were archived / unarchived. - - ' - properties: - batchIds: - items: - type: string - type: array - oligoIds: - items: - type: string - type: array - type: object - OligosArchive: - additionalProperties: false - description: 'The request body for archiving Oligos. - - ' - properties: - oligoIds: - items: - type: string - type: array - reason: - $ref: '#/components/schemas/EntityArchiveReason' - required: - - reason - - oligoIds - type: object - OligosBulkCreateRequest: - additionalProperties: false - properties: - oligos: - items: - $ref: '#/components/schemas/OligoCreate' - maxItems: 1000 - type: array - type: object - OligosBulkGet: - properties: - oligos: - items: - anyOf: - - $ref: '#/components/schemas/DnaOligo' - - $ref: '#/components/schemas/RnaOligo' - type: array - type: object - OligosPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - oligos: - items: - $ref: '#/components/schemas/Oligo' - type: array - OligosUnarchive: - additionalProperties: false - description: 'The request body for unarchiving Oligos. - - ' - properties: - oligoIds: - items: - type: string - type: array - required: - - oligoIds - type: object - OptimizeCodons: - additionalProperties: false - properties: - avoidedCutsiteEnzymeIds: - description: 'List of enzyme IDs whose recognition sites will be avoided - when creating the optimized sequence. - - ' - items: - type: string - type: array - codonUsageTableId: - description: ID of the codon usage table representing the target organism. - type: string - dnaSequenceIds: - description: IDs of DNA sequences to codon-optimize. - items: - type: string - type: array - folderId: - description: 'ID of the folder in which the optimized sequences will be - saved. - - ' - type: string - gcContent: - default: ANY - description: 'The amount of GC content in the optimized sequence. If not - specified, the optimization will default to ANY (0-1). LOW is defined - as below 0.33, MEDIUM as 0.33-0.66, and HIGH as above 0.66. - - ' - enum: - - ANY - - LOW - - MEDIUM - - HIGH - type: string - hairpinParameters: - additionalProperties: false - description: 'These parameters are applied in the AvoidHairpins specification - in DNAChisel. If hairpinParameters is not specified, hairpins will not - be avoided. - - ' - properties: - stem: - default: 20 - type: integer - window: - default: 200 - type: integer - type: object - reducedPatterns: - description: 'List of patterns to avoid when creating the optimized sequence, - on the coding strand only. - - ' - items: - $ref: '#/components/schemas/ReducedPattern' - type: array - schemaId: - description: ID of the optimized DNA sequences' schemas - type: string - shouldDepleteUridine: - default: false - description: 'If not specified, the optimization will default to false, - and mRNA uridine depletion will not be performed. - - ' - type: boolean - required: - - dnaSequenceIds - - folderId - type: object - Organization: - properties: - handle: - type: string - id: - type: string - name: - type: string - type: object - OrganizationSummary: - properties: - handle: - type: string - id: - type: string - name: - type: string - type: object - OrganizationsPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - organizations: - items: - $ref: '#/components/schemas/Organization' - type: array - type: object - Pagination: - properties: - nextToken: - type: string - PartySummary: - properties: - handle: - type: string - id: - type: string - name: - type: string - type: object - Plate: - additionalProperties: false - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - availableCapacity: - description: 'The number of available positions in a matrix plate. Null - for well plates. - - ' - nullable: true - readOnly: true - type: integer - barcode: - description: Barcode of the plate - nullable: true - type: string - createdAt: - description: DateTime the container was created - format: date-time - readOnly: true - type: string - creator: - $ref: '#/components/schemas/UserSummary' - fields: - $ref: '#/components/schemas/Fields' - id: - description: ID of the plate - type: string - modifiedAt: - description: DateTime the plate was last modified - format: date-time - readOnly: true - type: string - name: - description: Name of the plate, defaults to barcode if name is not provided. - type: string - occupiedCapacity: - description: 'The number of containers currently in a matrix plate. Null - for well plates. - - ' - nullable: true - readOnly: true - type: integer - parentStorageId: - description: ID of containing parent inventory (e.g. loc_k2lNspzS). - nullable: true - type: string - projectId: - description: ID of the project if set - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - title: SchemaProperty - totalCapacity: - description: 'The total capacity of a matrix plate (i.e. how many containers - it can store). Null for well plates. - - ' - nullable: true - readOnly: true - type: integer - type: - enum: - - matrix_plate - - well_plate - type: string - webURL: - readOnly: true - type: string - wells: - additionalProperties: - $ref: '#/components/schemas/WellOrInaccessibleResource' - description: Well contents of the plate, keyed by position string (eg. "A1"). - type: object - type: object - PlateCreate: - additionalProperties: false - properties: - barcode: - type: string - containerSchemaId: - type: string - fields: - $ref: '#/components/schemas/Fields' - name: - type: string - parentStorageId: - type: string - projectId: - type: string - schemaId: - type: string - wells: - additionalProperties: - properties: - barcode: - type: string - type: object - type: object - required: - - schemaId - type: object - PlateCreationTableNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - $ref: '#/components/schemas/StructuredTableApiIdentifiers' - - properties: - plateSchemaId: - example: pltsch_LRIuH0yJ - type: string - type: - enum: - - plate_creation_table - type: string - type: object - PlateSchema: - allOf: - - $ref: '#/components/schemas/RegistrySchema' - - properties: - containerSchema: - nullable: true - properties: - id: - type: string - name: - type: string - type: object - height: - type: number - plateType: - type: string - type: - enum: - - plate - readOnly: true - type: string - width: - type: number - type: object - PlateSchemasList: - properties: - plateSchemas: - items: - $ref: '#/components/schemas/PlateSchema' - readOnly: true - type: array - type: object - PlateSchemasPaginatedList: - allOf: - - $ref: '#/components/schemas/PlateSchemasList' - - properties: - nextToken: - type: string - type: object - PlateUpdate: - additionalProperties: false - properties: - fields: - $ref: '#/components/schemas/Fields' - name: - type: string - parentStorageId: - type: string - projectId: - type: string - type: object - PlatesArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of plates along with any IDs of containers - that were archived / unarchived. - - ' - properties: - containerIds: - items: - type: string - type: array - plateIds: - items: - type: string - type: array - type: object - PlatesArchive: - additionalProperties: false - properties: - plateIds: - description: Array of plate IDs - items: - type: string - type: array - reason: - description: 'Reason that plates are being archived. - - ' - enum: - - Made in error - - Retired - - Expended - - Shipped - - Contaminated - - Expired - - Missing - - Other - type: string - shouldRemoveBarcodes: - description: 'Remove barcodes. Removing barcodes from archived inventory - that contain items will also remove barcodes from the contained items. - - ' - type: boolean - required: - - plateIds - - reason - - shouldRemoveBarcodes - type: object - PlatesBulkGet: - properties: - plates: - items: - $ref: '#/components/schemas/Plate' - type: array - type: object - PlatesPaginatedList: - properties: - nextToken: - type: string - plates: - items: - $ref: '#/components/schemas/Plate' - type: array - type: object - PlatesUnarchive: - additionalProperties: false - properties: - plateIds: - description: Array of plate IDs - items: - type: string - type: array - required: - - plateIds - type: object - Primer: - properties: - bases: - readOnly: true - type: string - bindPosition: - readOnly: true - type: integer - color: - readOnly: true - type: string - end: - description: 0-based exclusive end index. The end of the sequence is always - represented as 0. - type: integer - name: - readOnly: true - type: string - oligoId: - type: string - overhangLength: - readOnly: true - type: integer - start: - description: 0-based inclusive start index. - type: integer - strand: - example: 1 - type: integer - type: object - PrintLabels: - additionalProperties: false - properties: - containerIds: - description: 'List of IDs of containers that will have labels printed (one - label will be printed per container). - - ' - items: - type: string - type: array - labelTemplateId: - description: 'ID of label template to use (same template will be used for - all labels printed). - - ' - example: lbltmp_lCpY5Qvh - type: string - printerId: - description: 'ID of printer to use (same printer will be used for all labels - printed). - - ' - example: print_YJQkilOJ - type: string - required: - - containerIds - - labelTemplateId - - printerId - type: object - Printer: - properties: - address: - description: Web address of the printer (either IP address or URL). - type: string - description: - description: Short description of the printer. - nullable: true - type: string - id: - description: ID of the printer. - type: string - name: - description: Name of the printer. - type: string - port: - description: Port to reach the printer at. - nullable: true - type: integer - registryId: - description: ID of the registry associated with this printer. - type: string - type: object - PrintersList: - properties: - labelPrinters: - items: - $ref: '#/components/schemas/Printer' - type: array - type: object - Project: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - id: - type: string - name: - type: string - owner: - anyOf: - - $ref: '#/components/schemas/Organization' - - $ref: '#/components/schemas/UserSummary' - type: object - ProjectsArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of projects along with any IDs of project - contents that were unarchived. - - ' - properties: - aaSequenceIds: - items: - type: string - type: array - customEntityIds: - items: - type: string - type: array - dnaSequenceIds: - items: - type: string - type: array - entryIds: - items: - type: string - type: array - folderIds: - items: - type: string - type: array - mixtureIds: - items: - type: string - type: array - oligoIds: - items: - type: string - type: array - projectIds: - items: - type: string - type: array - protocolIds: - items: - type: string - type: array - type: object - ProjectsArchive: - additionalProperties: false - properties: - projectIds: - description: A list of project IDs to archive. - items: - type: string - type: array - reason: - description: 'The reason for archiving the provided projects. Accepted reasons - may differ based on tenant configuration. - - ' - enum: - - Made in error - - Retired - - Other - type: string - required: - - reason - - projectIds - type: object - ProjectsPaginatedList: - properties: - nextToken: - type: string - projects: - items: - $ref: '#/components/schemas/Project' - type: array - type: object - ProjectsUnarchive: - additionalProperties: false - properties: - projectIds: - description: A list of project IDs to unarchive. - items: - type: string - type: array - required: - - projectIds - type: object - ReducedPattern: - additionalProperties: false - description: 'Patterns must consist of ATGC bases only, and are case-insensitive - ("gat" will reduce usage of "GAT"). If avoidReverseComplement is true, then - the pattern''s reverse complement will also be avoided. - - ' - properties: - avoidReverseComplement: - default: false - type: boolean - pattern: - type: string - type: object - RegisterEntities: - additionalProperties: false - properties: - entityIds: - description: Array of entity IDs - items: - type: string - maxItems: 2500 - type: array - namingStrategy: - $ref: '#/components/schemas/NamingStrategy' - required: - - entityIds - - namingStrategy - type: object - RegisteredEntitiesList: - properties: - entities: - items: - discriminator: - mapping: - aa_sequence: '#/components/schemas/AaSequenceWithEntityType' - custom_entity: '#/components/schemas/CustomEntityWithEntityType' - dna_oligo: '#/components/schemas/DnaOligoWithEntityType' - dna_sequence: '#/components/schemas/DnaSequenceWithEntityType' - mixture: '#/components/schemas/MixtureWithEntityType' - rna_oligo: '#/components/schemas/RnaOligoWithEntityType' - propertyName: entityType - oneOf: - - $ref: '#/components/schemas/DnaSequenceWithEntityType' - - $ref: '#/components/schemas/CustomEntityWithEntityType' - - $ref: '#/components/schemas/AaSequenceWithEntityType' - - $ref: '#/components/schemas/MixtureWithEntityType' - - $ref: '#/components/schemas/DnaOligoWithEntityType' - - $ref: '#/components/schemas/RnaOligoWithEntityType' - type: array - type: object - RegistrationOrigin: - properties: - originEntryId: - nullable: true - readOnly: true - type: string - registeredAt: - format: date-time - readOnly: true - type: string - type: object - RegistrationTableNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - $ref: '#/components/schemas/StructuredTableApiIdentifiers' - - properties: - entitySchemaId: - example: ts_hMbJPSA8 - type: string - type: - enum: - - registration_table - type: string - type: object - RegistriesList: - properties: - registries: - items: - $ref: '#/components/schemas/Registry' - type: array - type: object - Registry: - properties: - id: - type: string - modifiedAt: - description: DateTime the Registry was last modified - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - type: string - name: - type: string - owner: - $ref: '#/components/schemas/Organization' - type: object - RegistrySchema: - allOf: - - $ref: '#/components/schemas/Schema' - - properties: - prefix: - type: string - registryId: - type: string - type: object - Request: - allOf: - - $ref: '#/components/schemas/RequestBase' - - properties: - apiURL: - description: The canonical url of the Request in the API. - example: https://benchling.com/api/v2/requests/req_dnn2JtWq - format: uri - readOnly: true - type: string - assignees: - description: Array of assignees - items: - oneOf: - - $ref: '#/components/schemas/RequestUserAssignee' - - $ref: '#/components/schemas/RequestTeamAssignee' - readOnly: true - type: array - createdAt: - description: Date and time the request was created - example: 2017-04-23 01:30:50.970926 - format: isoformat - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - - description: UserSummary of the user who created the request - - readOnly: true - displayId: - description: User-friendly ID of the request - example: VP1 - readOnly: true - type: string - fields: - $ref: '#/components/schemas/Fields' - id: - description: Unique ID for the request - example: req_JekfeyVS - readOnly: true - type: string - projectId: - description: The ID of the project to which the request belongs. - example: src_29pt8Ida - type: string - requestStatus: - $ref: '#/components/schemas/RequestStatus' - requestor: - allOf: - - $ref: '#/components/schemas/UserSummary' - - description: UserSummary of the user making the request - - readOnly: true - sampleGroups: - items: - $ref: '#/components/schemas/RequestSampleGroup' - type: array - scheduledOn: - description: Date the request is scheduled to be executed on, in YYYY-MM-DD - format. - example: 2019-09-12 - format: date - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - - description: SchemaSummary for the request - example: - id: assaysch_3IF58QOf - name: Vector Production - readOnly: true - title: SchemaProperty - tasks: - items: - $ref: '#/components/schemas/RequestTask' - type: array - webURL: - description: URL of the request - example: https://benchling.com/requests/req_JekfeyVS - format: uri - readOnly: true - type: string - RequestBase: - description: A request is an ask to perform a service, e.g. produce a sample - or perform assays on a sample. Requests are usually placed to another team - or individual who specializes in performing the service. - type: object - RequestCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/RequestWriteBase' - - properties: - schemaId: - description: ID of the request's schema. - example: assaysch_3IF58QOf - type: string - writeOnly: true - required: - - schemaId - - fields - - samples - - sampleGroups - - projectId - RequestCreatedEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.request.created - type: string - request: - $ref: '#/components/schemas/Request' - type: object - RequestFulfillment: - description: 'A request fulfillment represents work that is done which changes - the status of a request or a sample group within that request. - - Fulfillments are created when state changes between IN_PROGRESS, COMPLETED, - or FAILED statuses. Fulfillments do not capture a PENDING state because all - requests or request sample groups are considered PENDING until the first corresponding - fulfillment is created. - - ' - properties: - createdAt: - description: Date and time the fulfillment was created - format: date-time - type: string - entryId: - description: ID of the entry this fulfillment was executed in, if any - example: etr_IKwdYx31 - type: string - id: - description: ID of the request fulfillment - example: reqffm_8Hm71Usw - type: string - modifiedAt: - description: DateTime the Request Fulfillment was last modified - format: date-time - readOnly: true - type: string - requestId: - description: ID of the request this fulfillment fulfills - example: req_pu9caSiv - type: string - sampleGroup: - allOf: - - $ref: '#/components/schemas/SampleGroup' - description: The request sample group this fulfillment was executed upon, - if any. - nullable: true - status: - $ref: '#/components/schemas/SampleGroupStatus' - type: object - RequestFulfillmentsPaginatedList: - description: An object containing an array of RequestFulfillments - properties: - nextToken: - example: Im5ldyB0ZXN0Ig== - type: string - requestFulfillments: - items: - $ref: '#/components/schemas/RequestFulfillment' - type: array - type: object - RequestResponse: - properties: - results: - items: - $ref: '#/components/schemas/AssayResult' - type: array - samples: - description: Array of samples produced by the request. - items: - properties: - batch: - allOf: - - $ref: '#/components/schemas/RequestResponseSamplesItemBatch' - description: The sample, if it is a batch resource. Null otherwise. - nullable: true - entity: - allOf: - - $ref: '#/components/schemas/RequestResponseSamplesItemEntity' - description: The sample, if it is an entity resource. Null otherwise. - nullable: true - status: - description: The status of the sample, based on the status of the - stage run that generated it. - enum: - - COMPLETED - - DISCARDED - type: string - type: object - type: array - type: object - RequestResponseSamplesItemBatch: - allOf: - - $ref: '#/components/schemas/BatchOrInaccessibleResource' - RequestResponseSamplesItemEntity: - allOf: - - $ref: '#/components/schemas/EntityOrInaccessibleResource' - RequestSampleGroup: - properties: - id: - example: sgrp_YJKtcWV - type: string - samples: - $ref: '#/components/schemas/RequestSampleGroupSamples' - type: object - RequestSampleGroupCreate: - properties: - samples: - $ref: '#/components/schemas/RequestSampleGroupSamples' - required: - - samples - type: object - RequestSampleGroupSamples: - additionalProperties: - oneOf: - - $ref: '#/components/schemas/RequestSampleWithEntity' - - $ref: '#/components/schemas/RequestSampleWithBatch' - description: 'The key for each RequestSample should match one of the samplesSchema[n].name - property in the request schema json. - - ' - example: - Batch Example: - batchId: bat_XK0UnLyk - Entity Example: - containerId: ctn_urUAEBq - entityId: seq_nDtxYEs - type: object - RequestSampleWithBatch: - properties: - batchId: - example: bat_XK0UnLyk - type: string - containerId: - example: ctn_urUAEBq - type: string - required: - - batchId - type: object - RequestSampleWithEntity: - properties: - containerId: - example: ctn_urUAEBq - type: string - entityId: - example: seq_nDtxYEs - type: string - required: - - entityId - type: object - RequestSchema: - allOf: - - $ref: '#/components/schemas/Schema' - - properties: - modifiedAt: - description: DateTime the Request Schema was last modified - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - type: string - organization: - description: 'The organization that owns the schema. - - ' - properties: - handle: - type: string - id: - type: string - name: - type: string - type: object - systemName: - type: string - type: - enum: - - request - readOnly: true - type: string - type: object - RequestSchemasPaginatedList: - properties: - nextToken: - type: string - requestSchemas: - items: - $ref: '#/components/schemas/RequestSchema' - readOnly: true - type: array - type: object - RequestStatus: - enum: - - REQUESTED - - SCHEDULED - - IN_PROGRESS - - COMPLETED - - CANCELLED - type: string - RequestTask: - allOf: - - $ref: '#/components/schemas/RequestTaskBase' - description: 'A request task. - - ' - properties: - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - title: SchemaProperty - type: object - RequestTaskBase: - allOf: - - $ref: '#/components/schemas/RequestTaskBaseFields' - description: 'A request task. - - ' - properties: - id: - description: ID of the request task - example: reqtsk_PFHQ8rmb - type: string - required: - - id - type: object - RequestTaskBaseFields: - description: 'Shared fields for request tasks and related endpoints. - - ' - properties: - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Schema fields to set on the request task. - - Every field should have its name as a key, mapping to an object with information - about the value of the field. - - ' - sampleGroupIds: - description: IDs of all request sample groups now associated with this task. - items: - type: string - type: array - type: object - RequestTaskSchema: - allOf: - - $ref: '#/components/schemas/Schema' - - properties: - modifiedAt: - description: DateTime the Request Task Schema was last modified - example: '2017-04-18T05:55:48.685345+00:00' - format: date-time - type: string - organization: - description: 'The organization that owns the schema. - - ' - properties: - handle: - type: string - id: - type: string - name: - type: string - type: object - systemName: - type: string - type: - enum: - - request_task - readOnly: true - type: string - type: object - RequestTaskSchemasPaginatedList: - properties: - nextToken: - type: string - requestTaskSchemas: - items: - $ref: '#/components/schemas/RequestTaskSchema' - readOnly: true - type: array - type: object - RequestTasksBulkCreate: - allOf: - - $ref: '#/components/schemas/RequestTaskBaseFields' - properties: - schemaId: - description: The schema id of the task to create - example: reqtsksch_XHu79QRw - type: string - required: - - schemaId - type: object - RequestTasksBulkCreateRequest: - additionalProperties: false - properties: - tasks: - description: The tasks to create - items: - $ref: '#/components/schemas/RequestTasksBulkCreate' - maxItems: 100 - type: array - required: - - tasks - type: object - RequestTasksBulkCreateResponse: - properties: - tasks: - description: The created tasks - items: - $ref: '#/components/schemas/RequestTask' - type: array - type: object - RequestTasksBulkUpdateRequest: - additionalProperties: false - description: 'A request body for bulk updating request tasks. - - ' - properties: - tasks: - description: The tasks to update - items: - $ref: '#/components/schemas/RequestTaskBase' - type: array - required: - - tasks - type: object - RequestTasksBulkUpdateResponse: - properties: - tasks: - description: The tasks to update - items: - $ref: '#/components/schemas/RequestTask' - type: array - type: object - RequestTeamAssignee: - properties: - team: - $ref: '#/components/schemas/TeamSummary' - type: object - RequestUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/RequestWriteBase' - - properties: - requestStatus: - $ref: '#/components/schemas/RequestStatus' - RequestUpdatedFieldsEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - $ref: '#/components/schemas/UpdateEventMixin' - - properties: - eventType: - enum: - - v2.request.updated.fields - type: string - request: - $ref: '#/components/schemas/Request' - type: object - RequestUserAssignee: - properties: - user: - $ref: '#/components/schemas/UserSummary' - type: object - RequestWriteBase: - allOf: - - $ref: '#/components/schemas/RequestBase' - - properties: - assignees: - description: Array of assignees - items: - oneOf: - - $ref: '#/components/schemas/RequestWriteUserAssignee' - - $ref: '#/components/schemas/RequestWriteTeamAssignee' - type: array - writeOnly: true - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: The request's fields - projectId: - description: The ID of the project to which the request belongs. - example: src_29pt8Ida - type: string - requestorId: - description: 'ID of the user making the request. If unspecified, the requestor - is the request creator. - - ' - example: ent_a0SApq3z - nullable: true - type: string - writeOnly: true - sampleGroups: - items: - $ref: '#/components/schemas/RequestSampleGroupCreate' - type: array - scheduledOn: - description: Date the request is scheduled to be executed on, in YYYY-MM-DD - format. - example: 2019-09-12 - format: date - type: string - writeOnly: true - RequestWriteTeamAssignee: - properties: - teamId: - example: team_5cjIguqc - type: string - required: - - teamId - type: object - RequestWriteUserAssignee: - properties: - userId: - example: ent_a0SApq3z - type: string - required: - - userId - type: object - RequestsBulkGet: - properties: - requests: - items: - $ref: '#/components/schemas/Request' - type: array - type: object - RequestsPaginatedList: - allOf: - - $ref: '#/components/schemas/RequestsBulkGet' - - properties: - nextToken: - type: string - ResultsTableNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - $ref: '#/components/schemas/StructuredTableApiIdentifiers' - - properties: - assayResultSchemaId: - example: assaysch_msh1Ly6g - type: string - type: - enum: - - results_table - type: string - type: object - RnaAnnotation: - allOf: - - $ref: '#/components/schemas/SequenceFeatureBase' - - properties: - end: - description: 0-based exclusive end index. The end of the sequence is always - represented as 0. - type: integer - start: - description: 0-based inclusive start index. - type: integer - strand: - example: 1 - maximum: 1 - minimum: 0 - type: integer - type: - type: string - type: object - RnaOligo: - allOf: - - $ref: '#/components/schemas/Oligo' - - properties: - annotations: - description: Annotations on the Oligo. - items: - $ref: '#/components/schemas/RnaAnnotation' - type: array - apiURL: - example: https://benchling.com/api/v2/rna-oligos/seq_bhuDUw9D - type: string - bases: - example: ACUUUUU - type: string - customNotation: - description: Representation of the oligo in the custom notation specified - in the request. Null if no notation was specified. - nullable: true - type: string - customNotationName: - description: Name of the custom notation specified in the request. Null - if no notation was specified. - nullable: true - type: string - helm: - description: Representation of the oligo in HELM syntax, including any - chemical modifications - example: RNA1{r(A)p.r(C)[Ssp].r(U)p.r(U)p.r(U)p.r(U)p.r(U)p}$$$$V2.0 - type: string - nucleotideType: - example: RNA - type: string - RnaOligoBulkUpdate: - additionalProperties: false - allOf: - - properties: - id: - type: string - type: object - - $ref: '#/components/schemas/RnaOligoUpdate' - RnaOligoCreate: - allOf: - - $ref: '#/components/schemas/OligoCreate' - - properties: - annotations: - description: Annotations on the Oligo. - items: - $ref: '#/components/schemas/RnaAnnotation' - type: array - helm: - description: Representation of the oligo in HELM syntax, including any - chemical modifications - example: RNA1{r(A)p.r([impr2G])p.r(G)[Ssp].r(A)p.r(U)p.r(U)p}$$$$V2.0 - type: string - - $ref: '#/components/schemas/CustomNotationRequest' - - required: - - name - RnaOligoUpdate: - allOf: - - $ref: '#/components/schemas/OligoUpdate' - - properties: - annotations: - description: Annotations on the Oligo. - items: - $ref: '#/components/schemas/RnaAnnotation' - type: array - helm: - description: Representation of the oligo in HELM syntax, including any - chemical modifications - example: RNA1{r(A)p.r([impr2G])p.r(G)[Ssp].r(A)p.r(U)p.r(U)p}$$$$V2.0 - type: string - - $ref: '#/components/schemas/CustomNotationRequest' - RnaOligoWithEntityType: - allOf: - - $ref: '#/components/schemas/RnaOligo' - - properties: - entityType: - enum: - - rna_oligo - type: string - type: object - type: object - RnaOligosArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type. This includes the IDs of RNA Oligos along with any IDs of batches - that were archived / unarchived. - - ' - properties: - batchIds: - items: - type: string - type: array - rnaOligoIds: - items: - type: string - type: array - type: object - RnaOligosArchive: - additionalProperties: false - description: 'The request body for archiving RNA Oligos. - - ' - properties: - reason: - $ref: '#/components/schemas/EntityArchiveReason' - rnaOligoIds: - items: - type: string - type: array - required: - - reason - - rnaOligoIds - type: object - RnaOligosBulkCreateRequest: - additionalProperties: false - properties: - rnaOligos: - items: - $ref: '#/components/schemas/RnaOligoCreate' - maxItems: 1000 - type: array - type: object - RnaOligosBulkUpdateRequest: - additionalProperties: false - properties: - rnaOligos: - items: - $ref: '#/components/schemas/RnaOligoBulkUpdate' - type: array - type: object - RnaOligosBulkUpsertRequest: - additionalProperties: false - maxItems: 1000 - properties: - rnaOligos: - items: - $ref: '#/components/schemas/OligoBulkUpsertRequest' - type: array - required: - - rnaOligos - type: object - RnaOligosPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - rnaOligos: - items: - $ref: '#/components/schemas/RnaOligo' - type: array - RnaOligosUnarchive: - additionalProperties: false - description: 'The request body for unarchiving RNA Oligos. - - ' - properties: - rnaOligoIds: - items: - type: string - type: array - required: - - rnaOligoIds - type: object - RnaSequence: - properties: - aliases: - items: - type: string - type: array - annotations: - items: - $ref: '#/components/schemas/RnaAnnotation' - type: array - apiURL: - description: The canonical url of the RNA Sequence in the API. - example: https://benchling.com/api/v2/rna-sequences/seq_asZya4lk - format: uri - readOnly: true - type: string - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - bases: - type: string - createdAt: - format: date-time - readOnly: true - type: string - creator: - $ref: '#/components/schemas/UserSummary' - customFields: - $ref: '#/components/schemas/CustomFields' - customNotation: - description: Representation of the RNA Sequence in the custom notation specified - in the request. Null if no notation was specified. - nullable: true - type: string - customNotationName: - description: Name of the custom notation specified in the request. Null - if no notation was specified. - nullable: true - type: string - entityRegistryId: - nullable: true - type: string - fields: - $ref: '#/components/schemas/Fields' - folderId: - nullable: true - type: string - helm: - description: Representation of the RNA Sequence in HELM syntax, including - any chemical modifications. - example: RNA1{r(A)p.r(C)[Ssp].r(U)p.r(U)p.r(U)p.r(U)p.r(U)p}$$$$V2.0 - nullable: true - type: string - id: - type: string - isCircular: - example: false - type: boolean - length: - type: integer - modifiedAt: - format: date-time - readOnly: true - type: string - name: - type: string - parts: - items: - $ref: '#/components/schemas/RnaSequencePart' - type: array - primers: - items: - $ref: '#/components/schemas/Primer' - type: array - registrationOrigin: - allOf: - - $ref: '#/components/schemas/RegistrationOrigin' - nullable: true - readOnly: true - registryId: - nullable: true - type: string - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - translations: - items: - $ref: '#/components/schemas/Translation' - type: array - webURL: - readOnly: true - type: string - type: object - RnaSequenceBaseRequest: - allOf: - - properties: - aliases: - description: Aliases to add to the RNA sequence - items: - type: string - type: array - annotations: - description: 'Annotations to create on the RNA sequence. - - ' - items: - $ref: '#/components/schemas/RnaAnnotation' - type: array - authorIds: - description: IDs of users to set as the RNA sequence's authors. - items: - type: string - type: array - bases: - description: 'Base pairs for the RNA sequence. - - ' - type: string - customFields: - allOf: - - $ref: '#/components/schemas/CustomFields' - description: 'Custom fields to add to the RNA sequence. Every field should - have its name as a key, mapping to an object with information about - the value of the field. - - ' - fields: - allOf: - - $ref: '#/components/schemas/Fields' - description: 'Fields to set on the RNA sequence. Must correspond with - the schema''s field definitions. Every field should have its name as - a key, mapping to an object with information about the value of the - field. - - ' - folderId: - description: 'ID of the folder containing the RNA sequence. - - ' - type: string - helm: - description: Representation of the RNA sequence in HELM syntax, including - any chemical modifications - example: RNA1{r(A)p.r([impr2G])p.r(G)[Ssp].r(A)p.r(U)p.r(U)p}$$$$V2.0 - type: string - isCircular: - description: 'Whether the RNA sequence is circular or linear. RNA sequences - can only be linear - - ' - example: false - type: boolean - name: - description: 'Name of the RNA sequence. - - ' - type: string - parts: - items: - $ref: '#/components/schemas/RnaSequencePart' - type: array - primers: - items: - $ref: '#/components/schemas/Primer' - type: array - schemaId: - description: 'ID of the RNA sequence''s schema. - - ' - type: string - translations: - description: 'Translations to create on the RNA sequence. Translations - are specified by either a combination of ''start'' and ''end'' fields, - or a list of regions. Both cannot be provided. - - ' - items: - $ref: '#/components/schemas/Translation' - type: array - - $ref: '#/components/schemas/CustomNotationRequest' - type: object - RnaSequenceBaseRequestForCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/RnaSequenceBaseRequest' - - required: - - name - RnaSequenceBulkCreate: - allOf: - - $ref: '#/components/schemas/RnaSequenceCreate' - RnaSequenceBulkUpdate: - additionalProperties: false - allOf: - - properties: - id: - type: string - type: object - - $ref: '#/components/schemas/RnaSequenceBaseRequest' - RnaSequenceCreate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/RnaSequenceBaseRequestForCreate' - - $ref: '#/components/schemas/CreateEntityIntoRegistry' - RnaSequencePart: - allOf: - - $ref: '#/components/schemas/NucleotideSequencePart' - - properties: - strand: - example: 1 - maximum: 1 - minimum: 1 - type: integer - type: object - RnaSequenceRequestRegistryFields: - properties: - entityRegistryId: - type: string - type: object - RnaSequenceUpdate: - additionalProperties: false - allOf: - - $ref: '#/components/schemas/RnaSequenceBaseRequest' - - $ref: '#/components/schemas/RnaSequenceRequestRegistryFields' - RnaSequencesArchivalChange: - description: 'IDs of all RNA Sequences that were archived or unarchived, grouped - by resource type. - - ' - properties: - rnaSequenceIds: - items: - type: string - type: array - type: object - RnaSequencesArchive: - additionalProperties: false - description: 'The request body for archiving RNA sequences. - - ' - properties: - reason: - $ref: '#/components/schemas/EntityArchiveReason' - rnaSequenceIds: - items: - type: string - type: array - required: - - reason - - rnaSequenceIds - type: object - RnaSequencesBulkCreateRequest: - additionalProperties: false - properties: - rnaSequences: - items: - $ref: '#/components/schemas/RnaSequenceBulkCreate' - maxItems: 1000 - type: array - type: object - RnaSequencesBulkGet: - properties: - rnaSequences: - items: - $ref: '#/components/schemas/RnaSequence' - type: array - type: object - RnaSequencesBulkUpdateRequest: - additionalProperties: false - properties: - rnaSequences: - items: - $ref: '#/components/schemas/RnaSequenceBulkUpdate' - type: array - type: object - RnaSequencesPaginatedList: - properties: - nextToken: - type: string - rnaSequences: - items: - $ref: '#/components/schemas/RnaSequence' - type: array - type: object - RnaSequencesUnarchive: - additionalProperties: false - description: 'The request body for unarchiving RNA sequences. - - ' - properties: - rnaSequenceIds: - items: - type: string - type: array - required: - - rnaSequenceIds - type: object - SampleGroup: - description: Represents a sample group that is an input to a request. A sample - group is a set of samples upon which work in the request should be done. - properties: - id: - type: string - samples: - type: object - type: object - SampleGroupStatus: - description: Status of a sample group - enum: - - IN_PROGRESS - - COMPLETED - - FAILED - type: string - SampleGroupStatusUpdate: - properties: - sampleGroupId: - description: The string id of the sample group - example: sgrp_2GPCXk6 - type: string - status: - $ref: '#/components/schemas/SampleGroupStatus' - required: - - sampleGroupId - - status - type: object - SampleGroupsStatusUpdate: - additionalProperties: false - description: Specification to update status of sample groups on the request - which were executed. - properties: - sampleGroups: - items: - $ref: '#/components/schemas/SampleGroupStatusUpdate' - type: array - required: - - sampleGroups - type: object - SampleRestrictionStatus: - enum: - - RESTRICTED - - UNRESTRICTED - - NOT_APPLICABLE - type: string - Schema: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - fieldDefinitions: - items: - oneOf: - - $ref: '#/components/schemas/SimpleFieldDefinition' - - $ref: '#/components/schemas/IntegerFieldDefinition' - - $ref: '#/components/schemas/FloatFieldDefinition' - - $ref: '#/components/schemas/DropdownFieldDefinition' - - $ref: '#/components/schemas/SchemaLinkFieldDefinition' - type: array - id: - type: string - name: - type: string - type: - type: string - type: object - SchemaDependencySubtypes: - enum: - - aa_sequence - - dna_sequence - - custom_entity - - mixture - - molecule - - dna_oligo - - rna_oligo - - rna_sequence - type: string - SchemaFieldsQueryParam: - additionalProperties: true - example: - schemaField.Cell Count: '>= 10 AND <= 50' - schemaField.Experiment: MyExperiment - schemaField.Started On: <= 2023-05-23T00:00:00Z - type: object - SchemaLinkFieldDefinition: - allOf: - - $ref: '#/components/schemas/FieldDefinition' - - properties: - schemaId: - nullable: true - type: string - type: - enum: - - entity_link - - entry_link - - part_link - - translation_link - - batch_link - - storage_link - - assay_request_link - - assay_result_link - - assay_run_link - type: string - type: object - SchemaSummary: - properties: - id: - type: string - name: - type: string - type: object - SearchBasesRequest: - additionalProperties: false - properties: - archiveReason: - default: NOT_ARCHIVED - enum: - - NOT_ARCHIVED - - Other - - Archived - type: string - bases: - example: GATTACAA - minLength: 8 - type: string - nextToken: - type: string - pageSize: - default: 50 - maximum: 100 - minimum: 0 - type: integer - registryId: - description: 'ID of a registry. Restricts results to those registered in - this registry. Specifying `null` returns unregistered items. - - ' - example: src_pwKo8pHh - nullable: true - type: string - schemaId: - description: 'ID of the nucleotide sequence''s schema. - - ' - example: ts_Y6t0Zbhg - type: string - sort: - default: modifiedAt:desc - enum: - - modifiedAt:asc - - modifiedAt:desc - - name:asc - - name:desc - type: string - required: - - bases - type: object - SearchInputMultiValueUiBlock: - allOf: - - $ref: '#/components/schemas/UserInputMultiValueUiBlock' - - $ref: '#/components/schemas/BaseSearchInputUIBlock' - - properties: - type: - enum: - - SEARCH_INPUT_MULTIVALUE - type: string - required: - - type - type: object - SearchInputMultiValueUiBlockCreate: - allOf: - - $ref: '#/components/schemas/SearchInputMultiValueUiBlock' - type: object - SearchInputMultiValueUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/SearchInputMultiValueUiBlock' - type: object - SearchInputUiBlock: - allOf: - - $ref: '#/components/schemas/UserInputUiBlock' - - $ref: '#/components/schemas/BaseSearchInputUIBlock' - - properties: - type: - enum: - - SEARCH_INPUT - type: string - required: - - type - type: object - SearchInputUiBlockCreate: - allOf: - - $ref: '#/components/schemas/SearchInputUiBlock' - type: object - SearchInputUiBlockItemType: - enum: - - dna_sequence - - dna_oligo - - aa_sequence - - custom_entity - - mixture - - box - - container - - location - - plate - type: string - SearchInputUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/SearchInputUiBlock' - type: object - SectionUiBlock: - allOf: - - $ref: '#/components/schemas/AppCanvasLeafNodeUiBlockList' - - properties: - id: - example: user_generated_id - type: string - type: - enum: - - SECTION - type: string - type: object - SectionUiBlockCreate: - allOf: - - $ref: '#/components/schemas/SectionUiBlock' - type: object - SectionUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/SectionUiBlock' - type: object - SecureTextAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - properties: - type: - enum: - - secure_text - example: secure_text - type: string - value: - example: - nullable: true - type: string - type: object - SelectorInputMultiValueUiBlock: - allOf: - - $ref: '#/components/schemas/UserInputMultiValueUiBlock' - - $ref: '#/components/schemas/BaseSelectorInputUIBlock' - - properties: - type: - enum: - - SELECTOR_INPUT_MULTIVALUE - type: string - required: - - type - type: object - SelectorInputMultiValueUiBlockCreate: - allOf: - - $ref: '#/components/schemas/SelectorInputMultiValueUiBlock' - type: object - SelectorInputMultiValueUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/SelectorInputMultiValueUiBlock' - type: object - SelectorInputUiBlock: - allOf: - - $ref: '#/components/schemas/UserInputUiBlock' - - $ref: '#/components/schemas/BaseSelectorInputUIBlock' - - properties: - type: - enum: - - SELECTOR_INPUT - type: string - required: - - type - type: object - SelectorInputUiBlockCreate: - allOf: - - $ref: '#/components/schemas/SelectorInputUiBlock' - type: object - SelectorInputUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/SelectorInputUiBlock' - type: object - SequenceFeatureBase: - properties: - color: - description: Hex color code used when displaying this feature in the UI. - example: '#F58A5E' - type: string - customFields: - items: - $ref: '#/components/schemas/SequenceFeatureCustomField' - maxItems: 100 - type: array - name: - maxLength: 2048 - type: string - notes: - example: Cong et al Science. 2013 Jan 3. - maxLength: 10000 - type: string - type: object - SequenceFeatureCustomField: - description: A name and value pair associated with a sequence feature (annotation - or translation). For genbank imports, these are the qualifiers associated - with each feature. - properties: - name: - description: Name of the custom field - type: string - value: - description: Value of the custom field - type: string - type: object - SimpleFieldDefinition: - allOf: - - $ref: '#/components/schemas/FieldDefinition' - - properties: - type: - enum: - - dna_sequence_link - - aa_sequence_link - - custom_entity_link - - mixture_link - - blob_link - - text - - long_text - - boolean - - datetime - - date - - json - type: string - type: object - SimpleNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - properties: - links: - description: 'Array of links referenced in text via an @-mention, hyperlink, - or the drag-n-dropped preview attached to the note. - - ' - items: - $ref: '#/components/schemas/EntryLink' - type: array - text: - description: The textual contents of the note. - type: string - type: - enum: - - text - - code - - list_bullet - - list_number - type: string - type: object - description: 'Simple note parts include the following types: - ''text'': plain - text - ''code'': preformatted code block - ''list_bullet'': one "line" of - a bulleted list - ''list_number'': one "line" of a numbered list - - ' - StageEntry: - additionalProperties: false - description: A notebook entry used for execution of one or more stage runs in - a legacy workflow. - properties: - apiURL: - description: The canonical url of the Stage Entry in the API. - example: https://benchling.com/api/v2-alpha/stage-entries/stgentr_1HEcejZq - format: uri - readOnly: true - type: string - authors: - description: 'Array of UserSummary Resources of the authors of the stage - entry. This defaults to the creator but can be manually changed. - - ' - items: - $ref: '#/components/schemas/UserSummary' - type: array - createdAt: - description: DateTime the stage entry was created at - format: date-time - readOnly: true - type: string - creator: - allOf: - - $ref: '#/components/schemas/UserSummary' - description: UserSummary Resource of the user who created the stage entry - readOnly: true - customFields: - $ref: '#/components/schemas/CustomFields' - displayId: - description: User-friendly ID of the stage entry - type: string - fields: - $ref: '#/components/schemas/Fields' - folderId: - description: ID of the folder that contains the stage entry - type: string - id: - description: ID of the stage entry - type: string - modifiedAt: - description: DateTime the stage entry was last modified - type: string - name: - description: Title of the stage entry - type: string - reviewRecord: - description: Review record if set - nullable: true - type: object - schema: - allOf: - - $ref: '#/components/schemas/EntrySchema' - description: Entry schema if set - nullable: true - title: SchemaProperty - type: object - webURL: - description: URL of the stage entry - type: string - workflowId: - description: ID of the parent workflow - example: wfw_7COQmok7 - type: string - workflowStageId: - description: ID of the associated workflow stage - example: wfwstg_EZuryAiW - type: string - type: object - StageEntryCreatedEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - StageEntryUpdatedFieldsEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - $ref: '#/components/schemas/UpdateEventMixin' - - properties: - eventType: - enum: - - v2-alpha.stageEntry.updated.fields - type: string - stageEntry: - $ref: '#/components/schemas/StageEntry' - type: object - StageEntryUpdatedReviewRecordEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - $ref: '#/components/schemas/UpdateEventMixin' - - properties: - entry: - $ref: '#/components/schemas/StageEntry' - eventType: - enum: - - v2-alpha.stageEntry.updated.reviewRecord - type: string - type: object - StructuredTableApiIdentifiers: - properties: - apiId: - type: string - columns: - items: - $ref: '#/components/schemas/StructuredTableColumnInfo' - type: array - type: object - StructuredTableColumnInfo: - properties: - columnId: - type: string - isReadOnly: - type: boolean - name: - type: string - type: object - TableNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - properties: - links: - description: 'Array of links referenced in the caption via an @-mention, - hyperlink, or the drag-n-dropped preview attached to the note. - - ' - items: - $ref: '#/components/schemas/EntryLink' - type: array - table: - allOf: - - $ref: '#/components/schemas/EntryTable' - type: object - text: - description: The caption of the table. - type: string - type: - enum: - - table - type: string - type: object - description: A table with rows and columns of text - TableUiBlock: - allOf: - - $ref: '#/components/schemas/InteractiveUiBlock' - - properties: - name: - description: Display name for the table block, to be shown in the UI - type: string - source: - $ref: '#/components/schemas/TableUiBlockSource' - type: - enum: - - TABLE - type: string - required: - - type - - name - - source - type: object - TableUiBlockCreate: - allOf: - - $ref: '#/components/schemas/TableUiBlock' - type: object - TableUiBlockDataFrameSource: - properties: - dataFrameId: - description: '`dataFrameId` of an uploaded data frame (see [Create Data - Frame endpoint](https://benchling.com/api/v2-beta/reference#/Data%20Frames)). - Note: Canvas tables currently support only text-type columns. - - ' - example: dset_mfz1f3ai2e8y - nullable: true - type: string - type: - enum: - - DATA_FRAME - type: string - required: - - type - - dataFrameId - type: object - TableUiBlockDatasetSource: - deprecated: true - properties: - datasetId: - description: '`datasetId` of an uploaded dataset (see [Create Data Frame - endpoint](https://benchling.com/api/v2-beta/reference#/Data%20Frames)). - Note: Canvas tables currently support only text-type columns. Datasets - are currently undergoing re-work. datasetId will refer to a DataFrame - until Dataset APIs are stable. Prefer `TableUiBlockDataFrameSource` meanwhile. - - ' - example: dset_mfz1f3ai2e8y - nullable: true - type: string - type: - enum: - - DATASET - type: string - required: - - type - - datasetId - type: object - TableUiBlockSource: - discriminator: - mapping: - DATASET: '#/components/schemas/TableUiBlockDatasetSource' - DATA_FRAME: '#/components/schemas/TableUiBlockDataFrameSource' - propertyName: type - oneOf: - - $ref: '#/components/schemas/TableUiBlockDatasetSource' - - $ref: '#/components/schemas/TableUiBlockDataFrameSource' - type: object - TableUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/TableUiBlock' - type: object - Team: - allOf: - - $ref: '#/components/schemas/TeamSummary' - - example: - id: team_5cjIguqc - name: Elion's Team - organization: Elion's Org - - properties: - organization: - $ref: '#/components/schemas/OrganizationSummary' - type: object - TeamCreate: - properties: - description: - type: string - name: - type: string - organizationId: - type: string - TeamSummary: - allOf: - - type: object - - properties: - id: - type: string - name: - type: string - - example: - id: team_5cjIguqc - name: Elion's Team - TeamUpdate: - properties: - description: - type: string - name: - type: string - TeamsPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - teams: - items: - $ref: '#/components/schemas/Team' - type: array - TextAppConfigItem: - allOf: - - $ref: '#/components/schemas/BaseAppConfigItem' - - properties: - type: - enum: - - text - example: text - type: string - value: - example: user configured text - nullable: true - type: string - type: object - TextBoxNotePart: - allOf: - - $ref: '#/components/schemas/BaseNotePart' - - properties: - links: - description: 'Array of links referenced via an @-mention, hyperlink, or - the drag-n-dropped preview attached to the note. - - ' - items: - $ref: '#/components/schemas/EntryLink' - type: array - name: - type: string - text: - type: string - type: - enum: - - text_box - type: string - type: object - TextInputUiBlock: - allOf: - - $ref: '#/components/schemas/UserInputUiBlock' - - properties: - placeholder: - nullable: true - type: string - type: - enum: - - TEXT_INPUT - type: string - required: - - type - type: object - TextInputUiBlockCreate: - allOf: - - $ref: '#/components/schemas/TextInputUiBlock' - type: object - TextInputUiBlockUpdate: - allOf: - - $ref: '#/components/schemas/TextInputUiBlock' - type: object - TokenCreate: - properties: - client_id: - description: 'ID of client to request token for. Leave off if client ID - and secret are being supplied through Authorization header. - - ' - type: string - client_secret: - description: 'Leave off if client ID and secret are being supplied through - Authorization header. - - ' - type: string - grant_type: - enum: - - client_credentials - example: client_credentials - type: string - required: - - grant_type - type: object - TokenResponse: - properties: - access_token: - example: eyJ... - type: string - expires_in: - description: Number of seconds that token is valid for - example: 900 - type: integer - token_type: - enum: - - Bearer - example: Bearer - type: string - type: object - TransfersAsyncTask: - allOf: - - $ref: '#/components/schemas/AsyncTask' - - additionalProperties: false - properties: - response: - properties: - destinationContainers: - items: - $ref: '#/components/schemas/Container' - type: array - type: object - type: object - type: object - Translation: - allOf: - - $ref: '#/components/schemas/SequenceFeatureBase' - - properties: - aminoAcids: - readOnly: true - type: string - coerceStartCodonToMethionine: - default: false - description: Whether to override the translation of the start codon to - Methionine. Has no effect when the start codon already translates to - Methionine. - type: boolean - end: - description: 0-based exclusive end index. The end of the sequence is always - represented as 0. - type: integer - geneticCode: - default: STANDARD - description: The genetic code to use when translating the nucleotide sequence - into amino acids. - enum: - - STANDARD - - VERTEBRATE_MITOCHONDRIAL - - YEAST_MITOCHONDRIAL - - MOLD_PROTOZOAN_COELENTERATE_MITOCHONDRIAL_MYCOPLASMA_SPIROPLASMA - - INVERTEBRATE_MITOCHONDRIAL - - CILIATE_DASYCLADACEAN_HEXAMITA_NUCLEAR - - ECHINODERM_FLATWORM_MITOCHONDRIAL - - EUPLOTID_NUCLEAR - - BACTERIAL_ARCHAEAL_PLANT_PLASTID - - ALTERNATIVE_YEAST_NUCLEAR - - ASCIDIAN_MITOCHONDRIAL - - ALTERNATIVE_FLATWORM_MITOCHONDRIAL - - CHLOROPHYCEAN_MITOCHONDRIAL - - TREMATODE_MITOCHONDRIAL - - SCENEDESMUS_OBLIQUUS_MITOCHONDRIAL - - THRAUSTOCHYTRIUM_MITOCHONDRIAL - - RHABDOPLEURIDAE_MITOCHONDRIAL - - CANDIDATE_DIVISION_SR1_GRACILIBACTERIA - - PACHYSOLEN_TANNOPHILUS_NUCLEAR - - MESODINIUM_NUCLEAR - - PERITRICH_NUCLEAR - - CEPHALODISCIDAE_MITOCHONDRIAL_UAA_TYR - type: string - regions: - items: - properties: - end: - description: 0-based exclusive end index. The end of the sequence - is always represented as 0. - type: integer - start: - description: 0-based inclusive start index. - type: integer - type: object - type: array - start: - description: 0-based inclusive start index. - type: integer - strand: - example: 1 - type: integer - type: object - UnitSummary: - properties: - id: - example: unit_NyKvCSBC - type: string - name: - example: meter - type: string - symbol: - example: m - type: string - unitTypeId: - example: qnty_7W2R1EFJ - type: string - type: object - UnregisterEntities: - additionalProperties: false - properties: - entityIds: - description: Array of entity IDs - items: - type: string - type: array - folderId: - description: ID of the folder that the entities should be moved to - type: string - required: - - entityIds - - folderId - type: object - UpdateEventMixin: - properties: - updates: - description: 'These properties have been updated, causing this message - - ' - example: - - fields.Cost Center - items: - type: string - type: array - type: object - User: - allOf: - - $ref: '#/components/schemas/UserSummary' - - example: - email: lpasteur@benchling.com - handle: lpasteur - id: ent_a0SApq3z - isSuspended: false - name: Louis Pasteur - - properties: - apiKeyLastChangedAt: - nullable: true - type: string - email: - type: string - isSuspended: - type: boolean - passwordLastChangedAt: - nullable: true - type: string - type: object - UserActivity: - properties: - lastSeen: - format: date-time - nullable: true - type: string - userId: - type: string - type: object - UserBulkCreateRequest: - additionalProperties: false - properties: - users: - items: - $ref: '#/components/schemas/UserCreate' - type: array - type: object - UserBulkUpdate: - additionalProperties: false - allOf: - - properties: - id: - type: string - required: - - id - type: object - - $ref: '#/components/schemas/UserUpdate' - UserBulkUpdateRequest: - additionalProperties: false - properties: - users: - items: - $ref: '#/components/schemas/UserBulkUpdate' - type: array - type: object - UserCreate: - additionalProperties: false - properties: - email: - description: Email of the User - type: string - handle: - description: Handle of the User - type: string - name: - description: Name of the User - type: string - required: - - name - - email - - handle - type: object - UserInputMultiValueUiBlock: - allOf: - - $ref: '#/components/schemas/InteractiveUiBlock' - - properties: - label: - example: My Input - maxLength: 50 - nullable: true - type: string - value: - items: - type: string - nullable: true - type: array - required: - - value - type: object - UserInputUiBlock: - allOf: - - $ref: '#/components/schemas/InteractiveUiBlock' - - properties: - label: - example: My Input - maxLength: 50 - nullable: true - type: string - value: - nullable: true - type: string - required: - - value - type: object - UserSummary: - allOf: - - $ref: '#/components/schemas/PartySummary' - - example: - handle: lpasteur - id: ent_a0SApq3z - name: Louis Pasteur - UserUpdate: - additionalProperties: false - properties: - email: - description: Email of the User - type: string - handle: - description: Handle of the User - type: string - isSuspended: - description: Suspended status of the User - type: boolean - name: - description: Name of the User - type: string - type: object - UserValidation: - properties: - validationComment: - description: A string explaining the reason for the provided validation - status. - type: string - validationStatus: - description: 'Valid values for this enum depend on whether it is used to - set a value (e.g., in a POST request), or is a return value for an existing - result. - - Acceptable values for setting a status are ''VALID'' or ''INVALID''. Possible - return values are ''VALID'', ''INVALID'', or ''PARTIALLY_VALID'' (a result - will be partially valid if it has some valid fields and some invalid fields). - - ' - enum: - - VALID - - INVALID - - PARTIALLY_VALID - type: string - type: object - UsersPaginatedList: - allOf: - - $ref: '#/components/schemas/Pagination' - - properties: - users: - items: - $ref: '#/components/schemas/User' - type: array - WarehouseCredentialSummary: - properties: - createdAt: - format: date-time - readOnly: true - type: string - id: - readOnly: true - type: string - label: - type: string - modifiedAt: - format: date-time - readOnly: true - type: string - userId: - readOnly: true - type: string - username: - description: The username to connect to the warehouse. - example: u$lpasteur_az - readOnly: true - type: string - type: object - WarehouseCredentials: - properties: - expiresAt: - description: 'The time after which new connections using the username/password - will not be permitted. Upon expiration, currently open connections are - not terminated. - - ' - example: '2017-04-18T05:54:56.247545+00:00' - format: date-time - readOnly: true - type: string - password: - description: The password to connect to the warehouse. - example: 9YC122LzxKW1Uq2q - readOnly: true - type: string - username: - description: The username to connect to the warehouse. - example: u$lpasteur_az - readOnly: true - type: string - type: object - WarehouseCredentialsCreate: - additionalProperties: false - properties: - expiresIn: - description: 'Duration, in seconds, that credentials should be active for. - Must be greater than 0 and less than 3600. - - ' - maximum: 3599 - minimum: 1 - type: integer - required: - - expiresIn - type: object - Well: - additionalProperties: false - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - readOnly: true - barcode: - description: Barcode of the well - type: string - checkoutRecord: - allOf: - - $ref: '#/components/schemas/CheckoutRecord' - readOnly: true - contents: - description: Array of well contents, each with an entity and concentration - items: - $ref: '#/components/schemas/ContainerContent' - type: array - createdAt: - description: DateTime the well was created - format: date-time - readOnly: true - type: string - creator: - $ref: '#/components/schemas/UserSummary' - fields: - $ref: '#/components/schemas/Fields' - id: - description: ID of the well - readOnly: true - type: string - modifiedAt: - description: DateTime the well was last modified - format: date-time - readOnly: true - type: string - name: - description: Name of the well, defaults to barcode if name is not provided. - type: string - parentStorageId: - description: ID of containing parent inventory, a plate well with a coordinate - (e.g. plt_2bAks9dx:a2). - nullable: true - type: string - parentStorageSchema: - $ref: '#/components/schemas/SchemaSummary' - projectId: - description: ID of the project if set - nullable: true - type: string - quantity: - $ref: '#/components/schemas/ContainerQuantity' - resourceType: - enum: - - container - type: string - restrictedSampleParties: - description: Not applicable for fixed plate wells. - items: - anyOf: - - $ref: '#/components/schemas/UserSummary' - - $ref: '#/components/schemas/TeamSummary' - type: array - restrictionStatus: - allOf: - - $ref: '#/components/schemas/SampleRestrictionStatus' - description: Not applicable for fixed plate wells. - role: - allOf: - - $ref: '#/components/schemas/ExperimentalWellRole' - description: Not applicable for matrix plate wells. - nullable: true - sampleOwners: - description: Not applicable for fixed plate wells. - items: - anyOf: - - $ref: '#/components/schemas/UserSummary' - - $ref: '#/components/schemas/TeamSummary' - type: array - schema: - allOf: - - $ref: '#/components/schemas/SchemaSummary' - nullable: true - volume: - $ref: '#/components/schemas/DeprecatedContainerVolumeForResponse' - webURL: - readOnly: true - type: string - type: object - WellOrInaccessibleResource: - discriminator: - mapping: - container: '#/components/schemas/Well' - inaccessible_resource: '#/components/schemas/InaccessibleResource' - propertyName: resourceType - oneOf: - - $ref: '#/components/schemas/Well' - - $ref: '#/components/schemas/InaccessibleResource' - type: object - WorkflowEndNodeDetails: - additionalProperties: false - properties: - id: - description: The ID of the workflow flowchart end node config details - example: wftrnd_aB8Wi12c - readOnly: true - type: string - name: - description: The name of the end node - example: End 1 - readOnly: true - type: string - nodeType: - description: The type of the node - enum: - - END - type: string - type: object - WorkflowFlowchart: - properties: - createdAt: - description: The ISO formatted date and time that the flowchart was created - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - edgeConfigs: - description: The edges of the flowchart - items: - $ref: '#/components/schemas/WorkflowFlowchartEdgeConfig' - readOnly: true - type: array - id: - description: The ID of the flowchart - example: wffc_7fc412 - readOnly: true - type: string - migratedFromFlowchartId: - description: The ID of the flowchart that this was migrated from - example: wffc_1de847 - nullable: true - readOnly: true - type: string - migratedToFlowchartId: - description: The ID of the flowchart that this was migrated to - example: wffc_df2993 - nullable: true - readOnly: true - type: string - modifiedAt: - description: The ISO formatted date and time that the flowchart was last - modified - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - nodeConfigs: - description: The nodes of the flowchart - items: - $ref: '#/components/schemas/WorkflowFlowchartNodeConfig' - readOnly: true - type: array - type: object - WorkflowFlowchartConfigSummary: - properties: - flowchartConfigVersionIds: - description: The ID of all the versions of this flowchart config sorted - chronologically from most recent (current) version to the least recent - one - items: - example: wffccv_giVNQcAF - type: string - readOnly: true - type: array - id: - description: The ID of the workflow flowchart config - example: wffcc_giVNQcAF - readOnly: true - type: string - type: object - WorkflowFlowchartConfigVersion: - properties: - createdAt: - description: The ISO formatted date and time that the flowchart config version - was created - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - id: - description: The ID of the workflow flowchart config version - example: wffccv_giVNQcAF - readOnly: true - type: string - modifiedAt: - description: The ISO formatted date and time that the flowchart config version - was last modified - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - templateFlowchart: - allOf: - - $ref: '#/components/schemas/WorkflowFlowchart' - description: The default flowchart that tasks using this flowchart configuration - will use. - type: object - WorkflowFlowchartEdgeConfig: - properties: - fromNodeConfigId: - description: The ID of the source workflow flowchart node config of this - edge - example: wffcnc_giVNQcTL - readOnly: true - type: string - id: - description: The ID of the workflow flowchart edge config - example: wffcec_giVNQcTL - readOnly: true - type: string - toNodeConfigId: - description: The ID of the destination workflow flowchart node config of - this edge - example: wffcnc_giVNQcAF - readOnly: true - type: string - type: object - WorkflowFlowchartNodeConfig: - properties: - id: - description: The ID of the workflow flowchart node config - readOnly: true - type: string - nodeDetails: - discriminator: - mapping: - END: '#/components/schemas/WorkflowEndNodeDetails' - OUTPUT: '#/components/schemas/WorkflowOutputNodeDetails' - ROOT: '#/components/schemas/WorkflowRootNodeDetails' - ROUTER: '#/components/schemas/WorkflowRouterNodeDetails' - TASK: '#/components/schemas/WorkflowTaskNodeDetails' - propertyName: nodeType - oneOf: - - $ref: '#/components/schemas/WorkflowRootNodeDetails' - - $ref: '#/components/schemas/WorkflowOutputNodeDetails' - - $ref: '#/components/schemas/WorkflowTaskNodeDetails' - - $ref: '#/components/schemas/WorkflowRouterNodeDetails' - - $ref: '#/components/schemas/WorkflowEndNodeDetails' - nodeType: - description: The type associated with the node config - enum: - - ROOT - - OUTPUT - - TASK - - ROUTER - - END - type: string - type: object - WorkflowFlowchartPaginatedList: - properties: - nextToken: - example: Im5ldyB0ZXN0Ig== - type: string - workflowFlowcharts: - items: - $ref: '#/components/schemas/WorkflowFlowchart' - type: array - type: object - WorkflowList: - properties: - workflows: - items: - $ref: '#/components/schemas/LegacyWorkflow' - type: array - type: object - WorkflowNodeTaskGroupSummary: - allOf: - - $ref: '#/components/schemas/WorkflowTaskGroupSummary' - - properties: - nodeConfigId: - description: The node in a Flowchart that this task group is associated - with. This will be null if the task group is not part of a flowchart. - example: wffcnc_giVNQcTL - type: string - WorkflowOutput: - allOf: - - $ref: '#/components/schemas/WorkflowOutputSummary' - - properties: - createdAt: - description: The ISO formatted date and time that the output was created - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - creationOrigin: - $ref: '#/components/schemas/CreationOrigin' - fields: - $ref: '#/components/schemas/Fields' - modifiedAt: - description: The ISO formatted date and time that the output was last - modified - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - nextOutputs: - description: The outputs in the flowchart which are generated by this - output. - items: - $ref: '#/components/schemas/WorkflowOutputSummary' - type: array - nextTasks: - description: The downstream tasks in the flowchart which are generated - by this output. - items: - $ref: '#/components/schemas/WorkflowTaskSummary' - type: array - sourceOutputs: - description: The outputs in the flowchart which were used to generate - this output. - items: - $ref: '#/components/schemas/WorkflowOutputSummary' - type: array - sourceTasks: - description: The tasks in the flowchart which were used to generate this - output. - items: - $ref: '#/components/schemas/WorkflowTaskSummary' - type: array - webURL: - description: URL of the workflow output - format: uri - readOnly: true - type: string - workflowTask: - $ref: '#/components/schemas/WorkflowTaskSummary' - workflowTaskGroup: - $ref: '#/components/schemas/WorkflowTaskGroupSummary' - WorkflowOutputArchiveReason: - description: 'The reason for archiving the provided workflow outputs. Accepted - reasons may differ based on tenant configuration. - - ' - enum: - - Made in error - - Retired - - Other - type: string - WorkflowOutputBulkCreate: - allOf: - - $ref: '#/components/schemas/WorkflowOutputCreate' - WorkflowOutputBulkUpdate: - allOf: - - $ref: '#/components/schemas/WorkflowOutputWriteBase' - - properties: - workflowOutputId: - description: The ID of the workflow output - example: wfout_5cJLQKVF - type: string - WorkflowOutputCreate: - allOf: - - $ref: '#/components/schemas/WorkflowOutputWriteBase' - - properties: - workflowTaskId: - description: The ID of the workflow task this output belogns to - example: wftask_OnnsW08k - type: string - required: - - workflowTaskId - WorkflowOutputCreatedEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowOutput.created - type: string - workflowOutput: - $ref: '#/components/schemas/WorkflowOutput' - type: object - WorkflowOutputNodeDetails: - additionalProperties: false - properties: - id: - description: The ID of the workflow output node config details - example: wfond_hbVNQcEM - readOnly: true - type: string - nodeType: - description: The type of the node - enum: - - OUTPUT - type: string - outputSchema: - $ref: '#/components/schemas/SchemaSummary' - type: object - WorkflowOutputSchema: - properties: - archiveRecord: - allOf: - - $ref: '#/components/schemas/ArchiveRecord' - nullable: true - fieldDefinitions: - items: - oneOf: - - $ref: '#/components/schemas/SimpleFieldDefinition' - - $ref: '#/components/schemas/IntegerFieldDefinition' - - $ref: '#/components/schemas/FloatFieldDefinition' - - $ref: '#/components/schemas/DropdownFieldDefinition' - - $ref: '#/components/schemas/SchemaLinkFieldDefinition' - type: array - name: - type: string - prefix: - type: string - type: - type: string - type: object - WorkflowOutputSummary: - properties: - displayId: - description: User-friendly ID of the workflow task group - type: string - id: - description: The ID of the workflow output - example: wfout_5cJLQKVF - readOnly: true - type: string - WorkflowOutputUpdate: - allOf: - - $ref: '#/components/schemas/WorkflowOutputWriteBase' - WorkflowOutputUpdatedFieldsEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowOutput.updated.fields - type: string - workflowOutput: - $ref: '#/components/schemas/WorkflowOutput' - type: object - WorkflowOutputWriteBase: - properties: - fields: - $ref: '#/components/schemas/Fields' - WorkflowOutputsArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type - - ' - properties: - workflowOutputIds: - items: - example: wfout_5cJLQKVF - type: string - type: array - type: object - WorkflowOutputsArchive: - properties: - reason: - $ref: '#/components/schemas/WorkflowOutputArchiveReason' - workflowOutputIds: - items: - example: wfout_5cJLQKVF - type: string - type: array - required: - - workflowOutputIds - - reason - type: object - WorkflowOutputsBulkCreateRequest: - properties: - workflowOutputs: - items: - $ref: '#/components/schemas/WorkflowOutputBulkCreate' - maxItems: 100 - type: array - type: object - WorkflowOutputsBulkUpdateRequest: - properties: - workflowOutputs: - items: - $ref: '#/components/schemas/WorkflowOutputBulkUpdate' - maxItems: 100 - type: array - type: object - WorkflowOutputsPaginatedList: - properties: - nextToken: - example: Im5ldyB0ZXN0Ig== - type: string - workflowOutputs: - items: - $ref: '#/components/schemas/WorkflowOutput' - type: array - type: object - WorkflowOutputsUnarchive: - properties: - workflowOutputIds: - items: - type: string - type: array - required: - - workflowOutputIds - type: object - WorkflowPatch: - additionalProperties: false - properties: - description: - description: Description of the workflow - type: string - name: - description: Name of the workflow - type: string - projectId: - description: ID of the project that contains the workflow - type: string - type: object - WorkflowRootNodeDetails: - additionalProperties: false - properties: - id: - description: The ID of the workflow root node config details - example: wfrnd_hbVNQcEM - readOnly: true - type: string - nodeType: - description: The type of the node - enum: - - ROOT - type: string - rootTaskSchema: - $ref: '#/components/schemas/WorkflowTaskSchemaSummary' - type: object - WorkflowRouterFunction: - additionalProperties: false - properties: - edgeConfigId: - description: The ID of the workflow flowchart edge config associated with - this function - example: wffcec_giVNQcTL - readOnly: true - type: string - id: - description: The function associated with a router node - example: wfrf_b2VJBmBj - readOnly: true - type: string - isDefault: - readOnly: true - name: - description: The name of a function associated with a router node - example: Rule 1 - readOnly: true - type: string - type: object - WorkflowRouterNodeDetails: - additionalProperties: false - properties: - id: - description: The ID of the workflow router node config details - example: wfrnd_hbVJBcMC - readOnly: true - type: string - name: - description: The name of the router node - example: Router 1 - readOnly: true - type: string - nodeType: - description: The type of the node - enum: - - ROUTER - type: string - routerFunctions: - description: Router functions associated with this router node - items: - $ref: '#/components/schemas/WorkflowRouterFunction' - readOnly: true - type: array - type: object - WorkflowSample: - properties: - batchId: - description: ID of the batch - type: string - containerIds: - description: Array of IDs of containers - items: - type: string - type: array - createdAt: - description: DateTime at which the the sample was created - format: date-time - readOnly: true - type: string - id: - description: ID of the sample - readOnly: true - type: string - name: - description: Name of the sample - type: string - type: object - WorkflowSampleList: - properties: - samples: - items: - $ref: '#/components/schemas/WorkflowSample' - type: array - type: object - WorkflowStage: - properties: - createdAt: - description: DateTime at which the the workflow stage was created - format: date-time - readOnly: true - type: string - id: - description: ID of the workflow stage - readOnly: true - type: string - name: - description: Name of the workflow stage - type: string - type: object - WorkflowStageList: - properties: - workflowStages: - items: - $ref: '#/components/schemas/WorkflowStage' - type: array - type: object - WorkflowStageRun: - properties: - createdAt: - description: DateTime at which the the stage run was created - format: date-time - readOnly: true - type: string - id: - description: ID of the stage run - readOnly: true - type: string - name: - description: Name of the stage run - type: string - status: - description: Status of the stage run - enum: - - COMPLETED - - DISCARDED - - INITIALIZED - type: string - type: object - WorkflowStageRunList: - properties: - workflowStageRuns: - items: - $ref: '#/components/schemas/WorkflowStageRun' - type: array - type: object - WorkflowTask: - allOf: - - $ref: '#/components/schemas/WorkflowTaskBase' - - properties: - executionFlowchartId: - description: The ID of the flowchart that this task will execute. This - will only be defined if the task has exectutionType FLOWCHART - example: wffc_6fd512 - type: string - executionType: - description: The method by which the task of the workflow is executed - enum: - - DIRECT - - ENTRY - - FLOWCHART - - PROCEDURE - - PROCEDURE_METHOD - - PROCEDURE_STEP - type: string - nextOutputs: - description: The outputs in the flowchart which are generated by this - task. - items: - $ref: '#/components/schemas/WorkflowOutputSummary' - type: array - nextTasks: - description: The downstream tasks in the flowchart which are generated - by this task. - items: - $ref: '#/components/schemas/WorkflowTaskSummary' - type: array - responsibleParties: - description: List of users and teams that are responsible for this task - items: - $ref: '#/components/schemas/PartySummary' - type: array - rootTask: - allOf: - - $ref: '#/components/schemas/WorkflowTaskSummary' - description: The task which is at the root of the flowchart. This will - be null if the task is not part of a flowchart. - sourceOutputs: - description: The parent outputs in the flowchart which were used to generate - this task. - items: - $ref: '#/components/schemas/WorkflowOutputSummary' - type: array - sourceTasks: - description: The parent tasks in the flowchart which were used to generate - this task. - items: - $ref: '#/components/schemas/WorkflowTaskSummary' - type: array - WorkflowTaskArchiveReason: - description: 'The reason for archiving the provided workflow tasks. Accepted - reasons may differ based on tenant configuration. - - ' - enum: - - Made in error - - Retired - - Other - type: string - WorkflowTaskBase: - allOf: - - $ref: '#/components/schemas/WorkflowTaskSummary' - - properties: - assignee: - allOf: - - $ref: '#/components/schemas/UserSummary' - nullable: true - clonedFrom: - allOf: - - $ref: '#/components/schemas/WorkflowTaskSummary' - nullable: true - createdAt: - description: The ISO formatted date and time that the task was created - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - creationOrigin: - $ref: '#/components/schemas/CreationOrigin' - creator: - $ref: '#/components/schemas/UserSummary' - executionOrigin: - allOf: - - $ref: '#/components/schemas/WorkflowTaskExecutionOrigin' - nullable: true - fields: - $ref: '#/components/schemas/Fields' - modifiedAt: - description: The ISO formatted date and time that the task was last modified - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - outputs: - items: - $ref: '#/components/schemas/WorkflowOutputSummary' - type: array - scheduledOn: - description: The date on which the task is scheduled to be executed - example: '2020-08-01' - format: date - nullable: true - type: string - schema: - $ref: '#/components/schemas/WorkflowTaskSchemaSummary' - status: - $ref: '#/components/schemas/WorkflowTaskStatus' - webURL: - description: URL of the workflow task - format: uri - readOnly: true - type: string - workflowTaskGroup: - $ref: '#/components/schemas/WorkflowTaskGroupSummary' - WorkflowTaskBulkCreate: - allOf: - - $ref: '#/components/schemas/WorkflowTaskCreate' - WorkflowTaskBulkUpdate: - allOf: - - $ref: '#/components/schemas/WorkflowTaskUpdate' - - properties: - workflowTaskId: - description: The workflow task ID - example: wftask_OnnsW08k - type: string - type: object - WorkflowTaskCreate: - allOf: - - $ref: '#/components/schemas/WorkflowTaskWriteBase' - - properties: - workflowTaskGroupId: - description: The workflow ID - example: prs_giVNQcTL - type: string - required: - - workflowTaskGroupId - WorkflowTaskCreatedEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowTask.created - type: string - workflowTask: - $ref: '#/components/schemas/WorkflowTask' - type: object - WorkflowTaskExecutionOrigin: - description: The context into which a task was executed - properties: - entryId: - example: etr_30ad79 - nullable: true - type: string - originModalUuid: - example: e8805895-0654-4613-ac04-39ee7462202e - format: uuid - nullable: true - type: string - type: - enum: - - API - - ENTRY - - MODAL - type: string - type: object - WorkflowTaskGroup: - allOf: - - $ref: '#/components/schemas/WorkflowTaskGroupBase' - - properties: - executionType: - description: The method by which the workflow is executed - enum: - - DIRECT - - ENTRY - - FLOWCHART - - PROCEDURE - - PROCEDURE_METHOD - - PROCEDURE_STEP - type: string - flowchartConfigVersionId: - description: The flowchart configuration that this task group uses. This - will be null if the task group does not have executionType FLOWCHART. - example: wffccv_giVNQcAF - type: string - flowchartTaskGroups: - description: The task groups that are members of the flowchart that this - task group is the root of. This will be null this task group is not - the root task group of a flowchart (eg if the task group does not have - executionType FLOWCHART). - items: - $ref: '#/components/schemas/WorkflowNodeTaskGroupSummary' - type: array - nodeConfig: - allOf: - - $ref: '#/components/schemas/WorkflowFlowchartNodeConfig' - description: The node in a Flowchart that this task group is associated - with. This will be null if the task group is not part of a flowchart. - rootTaskGroup: - allOf: - - $ref: '#/components/schemas/WorkflowTaskGroupSummary' - description: The task group associated with the root node of the flowchart - that this task group is a part of. This will be null if the task group - is not part of a flowchart. - WorkflowTaskGroupArchiveReason: - description: 'The reason for archiving the provided workflow task groups. Accepted - reasons may differ based on tenant configuration. - - ' - enum: - - Made in error - - Retired - - Other - type: string - WorkflowTaskGroupBase: - allOf: - - $ref: '#/components/schemas/WorkflowTaskGroupSummary' - - properties: - createdAt: - description: The ISO formatted date and time that the task group was created - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - creationOrigin: - $ref: '#/components/schemas/CreationOrigin' - creator: - $ref: '#/components/schemas/UserSummary' - folder: - $ref: '#/components/schemas/Folder' - modifiedAt: - description: The ISO formatted date and time that the task group was last - modified - example: '2020-08-01T00:00:00.000Z' - nullable: false - type: string - outputs: - description: The outputs of the workflow task group - items: - $ref: '#/components/schemas/WorkflowOutputSummary' - type: array - responsibleTeam: - allOf: - - $ref: '#/components/schemas/TeamSummary' - nullable: true - watchers: - description: The users watching the workflow task group - items: - $ref: '#/components/schemas/UserSummary' - type: array - webURL: - description: URL of the workflow task group - format: uri - readOnly: true - type: string - workflowTaskSchema: - $ref: '#/components/schemas/WorkflowTaskSchemaSummary' - workflowTasks: - description: The input tasks to the workflow task group - items: - $ref: '#/components/schemas/WorkflowTaskSummary' - type: array - WorkflowTaskGroupCreate: - allOf: - - $ref: '#/components/schemas/WorkflowTaskGroupWriteBase' - - properties: - schemaId: - description: The workflow task schema of tasks in this task group - example: prstsch_KnR9iVum - type: string - required: - - schemaId - - folderId - WorkflowTaskGroupCreatedEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowTaskGroup.created - type: string - workflowTaskGroup: - $ref: '#/components/schemas/WorkflowTaskGroup' - type: object - WorkflowTaskGroupMappingCompletedEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowTaskGroup.mappingCompleted - type: string - workflowTaskGroup: - $ref: '#/components/schemas/WorkflowTaskGroup' - type: object - WorkflowTaskGroupSummary: - properties: - displayId: - description: User-friendly ID of the workflow task group - type: string - id: - description: The ID of the workflow task group - example: prs_giVNQcTL - readOnly: true - type: string - name: - description: The name of the workflow task group - type: string - WorkflowTaskGroupUpdate: - allOf: - - $ref: '#/components/schemas/WorkflowTaskGroupWriteBase' - WorkflowTaskGroupUpdatedWatchersEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowTaskGroup.updated.watchers - type: string - workflowTaskGroup: - $ref: '#/components/schemas/WorkflowTaskGroup' - type: object - WorkflowTaskGroupWriteBase: - properties: - folderId: - description: ID of the folder that contains the workflow task group - type: string - name: - description: The name of the workflow task group - type: string - watcherIds: - description: IDs of the users watching the workflow task group - items: - example: ent_a0SApq3z - type: string - type: array - WorkflowTaskGroupsArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type - - ' - properties: - workflowTaskGroupIds: - items: - example: prs_giVNQcTL - type: string - type: array - type: object - WorkflowTaskGroupsArchive: - properties: - reason: - $ref: '#/components/schemas/WorkflowTaskGroupArchiveReason' - workflowTaskGroupIds: - items: - example: prs_giVNQcTL - type: string - type: array - required: - - workflowTaskGroupIds - - reason - type: object - WorkflowTaskGroupsPaginatedList: - properties: - nextToken: - example: Im5ldyB0ZXN0Ig== - type: string - workflowTaskGroups: - items: - $ref: '#/components/schemas/WorkflowTaskGroup' - type: array - type: object - WorkflowTaskGroupsUnarchive: - properties: - workflowTaskGroupIds: - items: - example: prs_giVNQcTL - type: string - type: array - required: - - workflowTaskGroupIds - type: object - WorkflowTaskNodeDetails: - additionalProperties: false - properties: - id: - description: The ID of the workflow task node config details - example: wftnd_hbVNQcEM - readOnly: true - type: string - nodeType: - description: The type of the node - enum: - - TASK - type: string - taskSchema: - $ref: '#/components/schemas/WorkflowTaskSchemaSummary' - type: object - WorkflowTaskSchema: - allOf: - - $ref: '#/components/schemas/WorkflowTaskSchemaBase' - - properties: - defaultResponsibleParties: - description: Default list of users and teams that are responsible for - tasks of this schema - items: - $ref: '#/components/schemas/PartySummary' - type: array - executionType: - description: The method by which instances of this schema are executed - enum: - - DIRECT - - ENTRY - - FLOWCHART - - PROCEDURE - - PROCEDURE_METHOD - - PROCEDURE_STEP - type: string - flowchartConfig: - allOf: - - $ref: '#/components/schemas/WorkflowFlowchartConfigSummary' - WorkflowTaskSchemaBase: - allOf: - - $ref: '#/components/schemas/Schema' - - properties: - canSetAssigneeOnTaskCreation: - description: Whether or not tasks of this schema can be created with a - non-null assignee. - type: boolean - defaultCreationFolderId: - description: ID of the default folder for creating workflow task groups - nullable: true - type: string - defaultEntryExecutionFolderId: - description: ID of the default folder for workflow task execution entries - nullable: true - type: string - defaultResponsibleTeam: - allOf: - - $ref: '#/components/schemas/TeamSummary' - nullable: true - entryTemplateId: - description: The ID of the template of the entries tasks of this schema - will be executed into. - example: tmpl_27b8fb - nullable: true - type: string - isPropagateWatchersEnabled: - description: Whether propagation of watchers has been enabled for this - task schema. - type: boolean - prefix: - description: The prefix for the displayId of tasks of this schema. - type: string - statusLifecycle: - $ref: '#/components/schemas/WorkflowTaskStatusLifecycle' - taskGroupPrefix: - description: The prefix for the displayId of task groups containing tasks - of this schema - type: string - workflowOutputSchema: - allOf: - - $ref: '#/components/schemas/WorkflowOutputSchema' - nullable: true - WorkflowTaskSchemaSummary: - properties: - id: - description: The ID of the workflow task schema - type: string - name: - description: The name of the workflow task schema - type: string - WorkflowTaskSchemasPaginatedList: - additionalProperties: false - properties: - nextToken: - example: Im5ldyB0ZXN0Ig== - type: string - workflowTaskSchemas: - items: - $ref: '#/components/schemas/WorkflowTaskSchema' - type: array - type: object - WorkflowTaskStatus: - properties: - displayName: - description: The status label - example: Pending - readOnly: true - type: string - id: - description: The ID of the workflow task status - example: wfts_wQzUCsW0 - readOnly: true - type: string - statusType: - description: The status type - enum: - - PENDING - - IN_PROGRESS - - FAILED - - CANCELLED - - INVALID - - COMPLETED - example: PENDING - readOnly: true - type: string - type: object - WorkflowTaskStatusLifecycle: - properties: - id: - example: prstswf_123kjlkj - type: string - initialStatus: - $ref: '#/components/schemas/WorkflowTaskStatus' - name: - example: Direct Completion - type: string - statuses: - example: - - displayName: Pending - id: prsts_wQzUCsW0 - statusType: PENDING - - displayName: In Progress - id: prsts_fc0781 - statusType: IN_PROGRESS - items: - $ref: '#/components/schemas/WorkflowTaskStatus' - type: array - transitions: - items: - $ref: '#/components/schemas/WorkflowTaskStatusLifecycleTransition' - type: array - type: object - WorkflowTaskStatusLifecycleTransition: - example: - from: - displayName: Pending - id: prsts_wQzUCsW0 - statusType: PENDING - to: - displayName: In Progress - id: prsts_fc0781 - statusType: IN_PROGRESS - properties: - from: - $ref: '#/components/schemas/WorkflowTaskStatus' - to: - $ref: '#/components/schemas/WorkflowTaskStatus' - type: object - WorkflowTaskSummary: - properties: - displayId: - description: User-friendly ID of the workflow task - type: string - id: - description: The ID of the workflow task - example: wftask_OnnsW08k - readOnly: true - type: string - WorkflowTaskUpdate: - allOf: - - properties: - statusId: - example: wfts_VFvwv7JV - type: string - - $ref: '#/components/schemas/WorkflowTaskWriteBase' - type: object - WorkflowTaskUpdatedAssigneeEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowTask.updated.assignee - type: string - workflowTask: - $ref: '#/components/schemas/WorkflowTask' - type: object - WorkflowTaskUpdatedFieldsEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowTask.updated.fields - type: string - workflowTask: - $ref: '#/components/schemas/WorkflowTask' - type: object - WorkflowTaskUpdatedScheduledOnEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowTask.updated.scheduledOn - type: string - workflowTask: - $ref: '#/components/schemas/WorkflowTask' - type: object - WorkflowTaskUpdatedStatusEvent: - allOf: - - $ref: '#/components/schemas/EventBase' - - properties: - eventType: - enum: - - v2.workflowTask.updated.status - type: string - workflowTask: - $ref: '#/components/schemas/WorkflowTask' - type: object - WorkflowTaskWriteBase: - properties: - assigneeId: - description: The id of the user assigned to the task - example: ent_0YuSQS51 - type: string - fields: - $ref: '#/components/schemas/Fields' - scheduledOn: - description: The date on which the task is scheduled to be executed - example: '2020-08-01' - format: date - type: string - WorkflowTasksArchivalChange: - description: 'IDs of all items that were archived or unarchived, grouped by - resource type - - ' - properties: - workflowTaskIds: - items: - example: wftask_OnnsW08k - type: string - type: array - type: object - WorkflowTasksArchive: - properties: - reason: - $ref: '#/components/schemas/WorkflowTaskArchiveReason' - workflowTaskIds: - items: - example: wftask_OnnsW08k - type: string - type: array - required: - - workflowTaskIds - - reason - type: object - WorkflowTasksBulkCopyRequest: - properties: - workflowTaskIds: - items: - example: wftask_OnnsW08k - maxItems: 100 - type: string - type: array - type: object - WorkflowTasksBulkCreateRequest: - properties: - workflowTasks: - items: - $ref: '#/components/schemas/WorkflowTaskBulkCreate' - type: array - type: object - WorkflowTasksBulkUpdateRequest: - properties: - workflowTasks: - items: - $ref: '#/components/schemas/WorkflowTaskBulkUpdate' - type: array - type: object - WorkflowTasksPaginatedList: - properties: - nextToken: - example: Im5ldyB0ZXN0Ig== - type: string - workflowTasks: - items: - $ref: '#/components/schemas/WorkflowTask' - type: array - type: object - WorkflowTasksUnarchive: - properties: - workflowTaskIds: - items: - example: wftask_OnnsW08k - type: string - type: array - required: - - workflowTaskIds - type: object - securitySchemes: - basicApiKeyAuth: - description: Use issued API key for standard access to the API - scheme: basic - type: http - basicClientIdSecretAuth: - description: Auth used as part of client credentials OAuth flow prior to receiving - a bearer token. - scheme: basic - type: http - oAuth: - description: OAuth2 Client Credentials flow intended for service access - flows: - clientCredentials: - scopes: {} - tokenUrl: /api/v2/token - type: oauth2 -externalDocs: - description: Additional API Documentation - url: https://docs.benchling.com -info: - license: - name: Apache 2.0 - url: http://www.apache.org/licenses/LICENSE-2.0.html - title: Benchling API - version: 2.0.0 -openapi: 3.0.1 -security: -- oAuth: [] -- basicApiKeyAuth: [] -servers: -- url: /api/v2 -tags: -- description: 'AA Sequences are the working units of cells that make everything run - (they help make structures, catalyze reactions and allow for signaling - a kind - of internal cell communication). On Benchling, these are comprised of a string - of amino acids and collections of other attributes, such as annotations. - - ' - name: AA Sequences -- description: Create and manage Benchling apps on your tenant - name: Apps -- description: ' - - Results represent the output of assays that have been performed. You can customize - the schemas of results to fit your needs. Results can link to runs, entities, - and other types. - - - To learn more about creating results, [click here](https://docs.benchling.com/docs/example-creating-results). - - ' - name: Assay Results -- description: Runs capture the details / parameters of a run that was performed. - Results are usually nested under a run. - name: Assay Runs -- description: Endpoints to help authenticate with the rest of the API resources. - name: Authentication -- description: 'Blobs are opaque files that can be linked to other items in Benchling, - like assay runs or results. For example, you can upload a blob, then upload an - assay result that links to that blob by ID. The blob will then appear as part - of the assay result in the Benchling web UI. - - ' - name: Blobs -- description: ' - - Boxes are a structured inventory type, consisting of a grid of positions that - can each hold one container. Unlike locations, there are a maximum number of containers - that a box can hold (one per position). - - - Boxes are all associated with schemas, which define the type of the box (e.g. - "10x10 Cryo Box") along with the fields that are tracked and the dimensions of - the box. - - - Like all inventory, every Box has a barcode that is unique across the registry. - - ' - name: Boxes -- description: Benchling curates codon usage data for a variety of organisms to support - operations such as Codon Optimization and Back Translation. - name: Codon Usage Tables -- description: ' - - Containers are the backbone of sample management in Benchling. They represent - physical containers, such as tubes or wells, that hold quantities of biological - samples (represented by the entities inside the container). The container itself - tracks its total volume, and the concentration of every entity inside of it. - - - Containers are all associated with schemas, which define the type of the container - (e.g. "Tube") along with the fields that are tracked. - - - Like all inventory, every container has a barcode that is unique across the registry. - - ' - name: Containers -- description: 'Benchling supports custom entities for biological entities that are - neither sequences or proteins. Custom entities must have an entity schema set - and can have both schema fields and custom fields. - - ' - name: Custom Entities -- description: Benchling allows users to configure their own fully-custom string representation - formats for import/export of nucleotide sequences (including chemical modifications). - name: Custom Notations -- description: A DNA alignment is a Benchling object representing an alignment of - multiple DNA sequences. This endpoint is deprecated, please migrate to the existing - [Nucleotide Alignments endpoints.](#/Nucleotide%20Alignments) - name: DNA Alignments -- description: DNA Oligos are short linear DNA sequences that can be attached as primers - to full DNA sequences. Just like other entities, they support schemas, tags, and - aliases. - name: DNA Oligos -- description: 'DNA sequences are the bread and butter of the Benchling Molecular - Biology suite. On Benchling, these are comprised of a string of nucleotides and - collections of other attributes, such as annotations and primers. - - ' - name: DNA Sequences -- description: Dropdowns are registry-wide enums. Use dropdowns to standardize on - spelling and naming conventions, especially for important metadata like resistance - markers. - name: Dropdowns -- description: Entities include DNA and AA sequences, oligos, molecules, custom entities, - and other biological objects in Benchling. Entities support schemas, tags, and - aliases, and can be registered. - name: Entities -- description: Entries are rich text documents that allow you to capture all of your - experimental data in one place. - name: Entries -- description: Restriction enzymes are curated by Benchling for operations such as - Digests and Codon Optimization. - name: Enzymes -- description: The Events system allows external services to subscribe to events that - are triggered in Benchling (e.g. plasmid registration, request submission, etc). - name: Events -- description: Export a Notebook Entry or a Legacy Workflow Stage Entry. - name: Exports -- description: Feature Libraries are collections of shared canonical patterns that - can be used to generate annotations on matching regions of DNA Sequences or AA - Sequences. - name: Feature Libraries -- description: Folders are nested within projects to provide additional organization. - name: Folders -- description: Instrument Queries are used to query the instrument service. - name: Instrument Queries -- description: Manage inventory wide objects. - name: Inventory -- description: Lab Automation endpoints support integration with lab instruments, - and liquid handlers to create samples or results, and capture transfers between - containers at scale. - name: Lab Automation -- description: List label templates. - name: Label Templates -- description: Legacy Workflows allow orchestrating complex experiments. - name: Legacy Workflows -- description: Please use endpoints for Legacy Workflows. These deprecated endpoints - will be removed once users are migrated onto Legacy Workflows endpoints. - name: Legacy Workflows (deprecated) -- description: ' - - Manage locations objects. - - - Like all inventory, every Location has a barcode that is unique across the registry. - - ' - name: Locations -- description: 'Mixtures are solutions comprised of multiple ingredients where the - exact quantities of each ingredient are important to track. Each ingredient is - uniquely identified by its component entity. - - ' - name: Mixtures -- description: Molecules are groups of atoms held together by bonds, representing - entities smaller than DNA Sequences and AA Sequences. Just like other entities, - they support schemas, tags, and aliases. - name: Molecules -- description: Monomers are chemical building blocks with specified structures used - to compose modified nucleotides. Note that monomer write endpoints require tenant - admin permissions. - name: Monomers -- description: A Nucleotide Alignment is a Benchling object representing an alignment - of multiple DNA and/or RNA sequences. - name: Nucleotide Alignments -- description: ' - - Oligos are short linear DNA sequences that can be attached as primers to full - DNA sequences. Just like other entities, they support schemas, tags, and aliases. - - - Please migrate to the corresponding DNA Oligos endpoints so that we can support - RNA Oligos. - - ' - name: Oligos -- description: View organization objects. - name: Organizations -- description: ' - - Plates are a structured inventory type, grids of wells that each function like - containers. Plates come in two types: a traditional "fixed" type, where the wells - cannot move, and a "matrix" type. A matrix plate has similar functionality to - a box, where the containers inside can be moved around and removed altogether. - - - Plates are all associated with schemas, which define the type of the plate (e.g. - "96 Well Plate") along with the fields that are tracked, the dimensions of the - plate, and whether or not the plate is a matrix plate or a traditional well plate. - - - Like all inventory, every Plate has a barcode that is unique across the registry. - - ' - name: Plates -- description: List printers. - name: Printers -- description: Manage project objects. - name: Projects -- description: 'Manage registry objects. - - - See our documentation on [how to register entities](https://docs.benchling.com/docs/registering-entities). - - ' - name: Registry -- description: Requests allow scientists and teams to collaborate around experimental - assays and workflows. - name: Requests -- description: RNA Oligos are short linear RNA sequences that can be attached as primers - to full DNA sequences. Just like other entities, they support schemas, tags, and - aliases. - name: RNA Oligos -- description: Chains of linear, single stranded RNA that support most capabilities - and attributes of DNA Sequences. - name: RNA Sequences -- description: ' - - Schemas represent custom configuration of objects in Benchling. See this [guide - in our documentation](https://docs.benchling.com/docs/schemas) on how Schemas - impact our developers - - ' - name: Schemas -- description: ' - - Endpoints that perform expensive computations launch long-running tasks. These - endpoints return the task ID (a UUID) in the response body. - - - After launching a task, periodically invoke the [Get a task](#/Tasks/getTask) - endpoint with the task UUID (e.g., every 10 seconds), until the status is no longer - RUNNING. - - - You can access a task for up to 30 minutes after its completion, after which its - data will no longer be available. - - ' - name: Tasks -- description: View team objects. - name: Teams -- description: Manage user objects. - name: Users -- description: Manage warehouse credentials. - name: Warehouse -- description: Workflow flowchart config versions are versioned graphs of flowchart - configurations. - name: Workflow Flowchart Config Versions -- description: Workflow flowcharts represent the nodes and edges that a flowchart - is comprised of. - name: Workflow Flowcharts -- description: Workflow outputs are outputs of a workflow task - name: Workflow Outputs -- description: Workflow task groups are groups of workflow tasks of the same schema - name: Workflow Task Groups -- description: Workflow tasks encapsulate a single unit of work - name: Workflow Tasks From 80c833318c06a1a152d433b7d5036f3f60bd29bb Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Tue, 12 Nov 2024 10:17:34 -0800 Subject: [PATCH 12/15] reorganize --- end_to_end_tests/__init__.py | 1 + end_to_end_tests/end_to_end_test_helpers.py | 267 ------------------ end_to_end_tests/functional_tests/README.md | 27 +- .../generated_code_execution/test_arrays.py | 6 +- .../generated_code_execution/test_defaults.py | 3 +- .../test_docstrings.py | 3 +- .../test_enums_and_consts.py | 8 +- .../test_properties.py | 3 +- .../generated_code_execution/test_unions.py | 3 +- .../test_invalid_arrays.py | 25 +- .../test_invalid_defaults.py | 18 +- .../test_invalid_enums_and_consts.py | 78 +++-- .../test_invalid_spec_format.py | 17 +- .../test_invalid_unions.py | 29 +- end_to_end_tests/functional_tests/helpers.py | 130 +++++++++ end_to_end_tests/generated_client.py | 143 ++++++++++ end_to_end_tests/test_end_to_end.py | 22 +- 17 files changed, 390 insertions(+), 393 deletions(-) delete mode 100644 end_to_end_tests/end_to_end_test_helpers.py create mode 100644 end_to_end_tests/functional_tests/helpers.py create mode 100644 end_to_end_tests/generated_client.py diff --git a/end_to_end_tests/__init__.py b/end_to_end_tests/__init__.py index 8c2224e4a..3793e0395 100644 --- a/end_to_end_tests/__init__.py +++ b/end_to_end_tests/__init__.py @@ -2,3 +2,4 @@ import pytest pytest.register_assert_rewrite("end_to_end_tests.end_to_end_test_helpers") +pytest.register_assert_rewrite("end_to_end_tests.functional_tests.helpers") diff --git a/end_to_end_tests/end_to_end_test_helpers.py b/end_to_end_tests/end_to_end_test_helpers.py deleted file mode 100644 index 084fdf783..000000000 --- a/end_to_end_tests/end_to_end_test_helpers.py +++ /dev/null @@ -1,267 +0,0 @@ -import importlib -import os -import re -import shutil -from filecmp import cmpfiles, dircmp -from pathlib import Path -import sys -import tempfile -from typing import Any, Callable, Dict, Generator, List, Optional, Set, Tuple - -from attrs import define -import pytest -from click.testing import Result -from typer.testing import CliRunner - -from openapi_python_client.cli import app -from openapi_python_client.utils import snake_case - - -@define -class GeneratedClientContext: - """A context manager with helpers for tests that run against generated client code. - - On entering this context, sys.path is changed to include the root directory of the - generated code, so its modules can be imported. On exit, the original sys.path is - restored, and any modules that were loaded within the context are removed. - """ - - output_path: Path - generator_result: Result - base_module: str - monkeypatch: pytest.MonkeyPatch - old_modules: Optional[Set[str]] = None - - def __enter__(self) -> "GeneratedClientContext": - self.monkeypatch.syspath_prepend(self.output_path) - self.old_modules = set(sys.modules.keys()) - return self - - def __exit__(self, exc_type, exc_value, traceback): - self.monkeypatch.undo() - for module_name in set(sys.modules.keys()) - self.old_modules: - del sys.modules[module_name] - shutil.rmtree(self.output_path, ignore_errors=True) - - def import_module(self, module_path: str) -> Any: - """Attempt to import a module from the generated code.""" - return importlib.import_module(f"{self.base_module}{module_path}") - - -def _run_command( - command: str, - extra_args: Optional[List[str]] = None, - openapi_document: Optional[str] = None, - url: Optional[str] = None, - config_path: Optional[Path] = None, - raise_on_error: bool = True, -) -> Result: - """Generate a client from an OpenAPI document and return the result of the command.""" - runner = CliRunner() - if openapi_document is not None: - openapi_path = Path(__file__).parent / openapi_document - source_arg = f"--path={openapi_path}" - else: - source_arg = f"--url={url}" - config_path = config_path or (Path(__file__).parent / "config.yml") - args = [command, f"--config={config_path}", source_arg] - if extra_args: - args.extend(extra_args) - result = runner.invoke(app, args) - if result.exit_code != 0 and raise_on_error: - raise Exception(result.stdout) - return result - - -def generate_client( - openapi_document: str, - extra_args: List[str] = [], - output_path: str = "my-test-api-client", - base_module: str = "my_test_api_client", - specify_output_path_explicitly: bool = True, - overwrite: bool = True, - raise_on_error: bool = True, -) -> GeneratedClientContext: - """Run the generator and return a GeneratedClientContext for accessing the generated code.""" - full_output_path = Path.cwd() / output_path - if not overwrite: - shutil.rmtree(full_output_path, ignore_errors=True) - args = extra_args - if specify_output_path_explicitly: - args = [*args, "--output-path", str(full_output_path)] - if overwrite: - args = [*args, "--overwrite"] - generator_result = _run_command("generate", args, openapi_document, raise_on_error=raise_on_error) - return GeneratedClientContext( - full_output_path, - generator_result, - base_module, - pytest.MonkeyPatch(), - ) - - -def generate_client_from_inline_spec( - openapi_spec: str, - extra_args: List[str] = [], - filename_suffix: Optional[str] = None, - config: str = "", - base_module: str = "testapi_client", - add_missing_sections = True, - raise_on_error: bool = True, -) -> GeneratedClientContext: - """Run the generator on a temporary file created with the specified contents. - - You can also optionally tell it to create a temporary config file. - """ - if add_missing_sections: - if not re.search("^openapi:", openapi_spec, re.MULTILINE): - openapi_spec += "\nopenapi: '3.1.0'\n" - if not re.search("^info:", openapi_spec, re.MULTILINE): - openapi_spec += "\ninfo: {'title': 'testapi', 'description': 'my test api', 'version': '0.0.1'}\n" - if not re.search("^paths:", openapi_spec, re.MULTILINE): - openapi_spec += "\npaths: {}\n" - - output_path = tempfile.mkdtemp() - file = tempfile.NamedTemporaryFile(suffix=filename_suffix, delete=False) - file.write(openapi_spec.encode('utf-8')) - file.close() - - if config: - config_file = tempfile.NamedTemporaryFile(delete=False) - config_file.write(config.encode('utf-8')) - config_file.close() - extra_args = [*extra_args, "--config", config_file.name] - - generated_client = generate_client( - file.name, - extra_args, - output_path, - base_module, - raise_on_error=raise_on_error, - ) - os.unlink(file.name) - if config: - os.unlink(config_file.name) - - return generated_client - - -def inline_spec_should_fail( - openapi_spec: str, - extra_args: List[str] = [], - filename_suffix: Optional[str] = None, - config: str = "", - add_missing_sections = True, -) -> Result: - """Asserts that the generator could not process the spec. - - Returns the command result, which could include stdout data or an exception. - """ - with generate_client_from_inline_spec( - openapi_spec, extra_args, filename_suffix, config, add_missing_sections=add_missing_sections, raise_on_error=False - ) as generated_client: - assert generated_client.generator_result.exit_code != 0 - return generated_client.generator_result - - -def inline_spec_should_cause_warnings( - openapi_spec: str, - extra_args: List[str] = [], - filename_suffix: Optional[str] = None, - config: str = "", - add_missing_sections = True, -) -> str: - """Asserts that the generator is able to process the spec, but printed warnings. - - Returns the full output. - """ - with generate_client_from_inline_spec( - openapi_spec, extra_args, filename_suffix, config, add_missing_sections=add_missing_sections, raise_on_error=True - ) as generated_client: - assert generated_client.generator_result.exit_code == 0 - assert "Warning(s) encountered while generating" in generated_client.generator_result.stdout - return generated_client.generator_result.stdout - - -def with_generated_client_fixture( - openapi_spec: str, - name: str="generated_client", - config: str="", - extra_args: List[str] = [], -): - """Decorator to apply to a test class to create a fixture inside it called 'generated_client'. - - The fixture value will be a GeneratedClientContext created by calling - generate_client_from_inline_spec(). - """ - def _decorator(cls): - def generated_client(self): - with generate_client_from_inline_spec(openapi_spec, extra_args=extra_args, config=config) as g: - print(g.generator_result.stdout) # so we'll see the output if a test failed - yield g - - setattr(cls, name, pytest.fixture(scope="class")(generated_client)) - return cls - - return _decorator - - -def with_generated_code_import(import_path: str, alias: Optional[str] = None): - """Decorator to apply to a test class to create a fixture from a generated code import. - - The 'generated_client' fixture must also be present. - - If import_path is "a.b.c", then the fixture's value is equal to "from a.b import c", and - its name is "c" unless you specify a different name with the alias parameter. - """ - parts = import_path.split(".") - module_name = ".".join(parts[0:-1]) - import_name = parts[-1] - - def _decorator(cls): - nonlocal alias - - def _func(self, generated_client): - module = generated_client.import_module(module_name) - return getattr(module, import_name) - - alias = alias or import_name - _func.__name__ = alias - setattr(cls, alias, pytest.fixture(scope="class")(_func)) - return cls - - return _decorator - - -def with_generated_code_imports(*import_paths: str): - def _decorator(cls): - decorated = cls - for import_path in import_paths: - decorated = with_generated_code_import(import_path)(decorated) - return decorated - - return _decorator - - -def assert_model_decode_encode(model_class: Any, json_data: dict, expected_instance: Any) -> None: - instance = model_class.from_dict(json_data) - assert instance == expected_instance - assert instance.to_dict() == json_data - - -def assert_model_property_type_hint(model_class: Any, name: str, expected_type_hint: Any) -> None: - assert model_class.__annotations__[name] == expected_type_hint - - -def assert_bad_schema_warning(output: str, schema_name: str, expected_message_str) -> None: - bad_schema_regex = "Unable to (parse|process) schema" - expected_start_regex = f"{bad_schema_regex} /components/schemas/{re.escape(schema_name)}:?\n" - if not (match := re.search(expected_start_regex, output)): - # this assert is to get better failure output - assert False, f"Did not find '{expected_start_regex}' in output: {output}" - output = output[match.end():] - # The amount of other information in between that message and the warning detail can vary - # depending on the error, so just make sure we're not picking up output from a different schema - if (next_match := re.search(bad_schema_regex, output)): - output = output[0:next_match.start()] - assert expected_message_str in output diff --git a/end_to_end_tests/functional_tests/README.md b/end_to_end_tests/functional_tests/README.md index ebbad24f9..1008527c5 100644 --- a/end_to_end_tests/functional_tests/README.md +++ b/end_to_end_tests/functional_tests/README.md @@ -37,7 +37,7 @@ components: """) @with_generated_code_import(".models.MyModel") class TestSimpleJsonObject: - def test_encoding(MyModel): + def test_encoding(self, MyModel): instance = MyModel(string_prop="abc") assert instance.to_dict() == {"stringProp": "abc"} ``` @@ -46,11 +46,30 @@ class TestSimpleJsonObject: These run the generator with an invalid API spec and make assertions about the warning/error output. Some of these invalid conditions are expected to only produce warnings about the affected schemas, while others are expected to produce fatal errors that terminate the generator. -For warning conditions, each test class follows this pattern: +For warning conditions, each test class uses `@with_generated_client_fixture` as above, then uses `assert_bad_schema` to parse the output and check for a specific warning message for a specific schema name. -- Call `inline_spec_should_cause_warnings`, providing an inline API spec (JSON or YAML). If there are several test methods in the class using the same spec, use a fixture with scope "class" so the generator is only run once. -- Use `assert_bad_schema_warning` to parse the output and check for a specific warning message for a specific schema name. +```python +@with_generated_client_fixture( +""" +components: + schemas: + MyModel: + # some kind of invalid schema +""") +class TestBadSchema: + def test_encoding(self, generated_client): + assert_bad_schema(generated_client, "MyModel", "some expected warning text") +``` Or, for fatal error conditions: - Call `inline_spec_should_fail`, providing an inline API spec (JSON or YAML). + +```python +class TestBadSpec: + def test_some_spec_error(self): + result = inline_spec_should_fail(""" +# some kind of invalid spec +""") + assert "some expected error text" in result.output +``` diff --git a/end_to_end_tests/functional_tests/generated_code_execution/test_arrays.py b/end_to_end_tests/functional_tests/generated_code_execution/test_arrays.py index ce1c63f30..9fe3d3042 100644 --- a/end_to_end_tests/functional_tests/generated_code_execution/test_arrays.py +++ b/end_to_end_tests/functional_tests/generated_code_execution/test_arrays.py @@ -1,8 +1,6 @@ -import datetime from typing import Any, ForwardRef, List, Union -import uuid -import pytest -from end_to_end_tests.end_to_end_test_helpers import ( + +from end_to_end_tests.functional_tests.helpers import ( assert_model_decode_encode, assert_model_property_type_hint, with_generated_client_fixture, diff --git a/end_to_end_tests/functional_tests/generated_code_execution/test_defaults.py b/end_to_end_tests/functional_tests/generated_code_execution/test_defaults.py index c3de3cf88..5f8affb25 100644 --- a/end_to_end_tests/functional_tests/generated_code_execution/test_defaults.py +++ b/end_to_end_tests/functional_tests/generated_code_execution/test_defaults.py @@ -1,6 +1,7 @@ import datetime import uuid -from end_to_end_tests.end_to_end_test_helpers import ( + +from end_to_end_tests.functional_tests.helpers import ( with_generated_client_fixture, with_generated_code_imports, ) diff --git a/end_to_end_tests/functional_tests/generated_code_execution/test_docstrings.py b/end_to_end_tests/functional_tests/generated_code_execution/test_docstrings.py index 2752829e5..afc0dc3c7 100644 --- a/end_to_end_tests/functional_tests/generated_code_execution/test_docstrings.py +++ b/end_to_end_tests/functional_tests/generated_code_execution/test_docstrings.py @@ -1,5 +1,6 @@ from typing import Any, List -from end_to_end_tests.end_to_end_test_helpers import ( + +from end_to_end_tests.functional_tests.helpers import ( with_generated_code_import, with_generated_client_fixture, ) diff --git a/end_to_end_tests/functional_tests/generated_code_execution/test_enums_and_consts.py b/end_to_end_tests/functional_tests/generated_code_execution/test_enums_and_consts.py index 1907d461a..89dbef7dc 100644 --- a/end_to_end_tests/functional_tests/generated_code_execution/test_enums_and_consts.py +++ b/end_to_end_tests/functional_tests/generated_code_execution/test_enums_and_consts.py @@ -1,9 +1,9 @@ from typing import Literal, Union import pytest -from end_to_end_tests.end_to_end_test_helpers import ( + +from end_to_end_tests.functional_tests.helpers import ( assert_model_decode_encode, assert_model_property_type_hint, - with_generated_code_import, with_generated_client_fixture, with_generated_code_imports, ) @@ -187,7 +187,7 @@ def test_type_hints(self, MyModel, MyEnum, Unset): const: 30 """, ) -@with_generated_code_import(".models.MyModel") +@with_generated_code_imports(".models.MyModel") class TestConst: def test_valid_string(self, MyModel): assert_model_decode_encode( @@ -327,7 +327,7 @@ def test_invalid_values(self, MyModel): """, config="literal_enums: true", ) -@with_generated_code_import(".models.MyModel") +@with_generated_code_imports(".models.MyModel") class TestNullableLiteralEnum: def test_nullable_enum_prop(self, MyModel): assert_model_decode_encode(MyModel, {"nullableEnumProp": "B"}, MyModel(nullable_enum_prop="B")) diff --git a/end_to_end_tests/functional_tests/generated_code_execution/test_properties.py b/end_to_end_tests/functional_tests/generated_code_execution/test_properties.py index 5fdc4bab9..e1cfce9a5 100644 --- a/end_to_end_tests/functional_tests/generated_code_execution/test_properties.py +++ b/end_to_end_tests/functional_tests/generated_code_execution/test_properties.py @@ -2,7 +2,8 @@ from typing import Any, ForwardRef, Union import uuid import pytest -from end_to_end_tests.end_to_end_test_helpers import ( + +from end_to_end_tests.functional_tests.helpers import ( assert_model_decode_encode, assert_model_property_type_hint, with_generated_client_fixture, diff --git a/end_to_end_tests/functional_tests/generated_code_execution/test_unions.py b/end_to_end_tests/functional_tests/generated_code_execution/test_unions.py index f39eff4ac..9a9b49e4c 100644 --- a/end_to_end_tests/functional_tests/generated_code_execution/test_unions.py +++ b/end_to_end_tests/functional_tests/generated_code_execution/test_unions.py @@ -1,5 +1,6 @@ from typing import ForwardRef, Union -from end_to_end_tests.end_to_end_test_helpers import ( + +from end_to_end_tests.functional_tests.helpers import ( assert_model_decode_encode, assert_model_property_type_hint, with_generated_client_fixture, diff --git a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_arrays.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_arrays.py index cb384df63..e4ef0cffd 100644 --- a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_arrays.py +++ b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_arrays.py @@ -1,14 +1,9 @@ import pytest -from end_to_end_tests.end_to_end_test_helpers import ( - assert_bad_schema_warning, - inline_spec_should_cause_warnings, -) +from end_to_end_tests.functional_tests.helpers import assert_bad_schema, with_generated_client_fixture -class TestArrayInvalidSchemas: - @pytest.fixture(scope="class") - def warnings(self): - return inline_spec_should_cause_warnings( + +@with_generated_client_fixture( """ components: schemas: @@ -18,11 +13,11 @@ def warnings(self): type: array items: $ref: "#/components/schemas/DoesntExist" -""" - ) - - def test_no_items(self, warnings): - assert_bad_schema_warning(warnings, "ArrayWithNoItems", "must have items or prefixItems defined") +""" +) +class TestArrayInvalidSchemas: + def test_no_items(self, generated_client): + assert_bad_schema(generated_client, "ArrayWithNoItems", "must have items or prefixItems defined") - def test_invalid_items_ref(self, warnings): - assert_bad_schema_warning(warnings, "ArrayWithInvalidItemsRef", "invalid data in items of array") + def test_invalid_items_ref(self, generated_client): + assert_bad_schema(generated_client, "ArrayWithInvalidItemsRef", "invalid data in items of array") diff --git a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_defaults.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_defaults.py index 4f1516eea..93f5e11d4 100644 --- a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_defaults.py +++ b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_defaults.py @@ -1,14 +1,9 @@ import pytest -from end_to_end_tests.end_to_end_test_helpers import ( - assert_bad_schema_warning, - inline_spec_should_cause_warnings, -) +from end_to_end_tests.functional_tests.helpers import assert_bad_schema, with_generated_client_fixture -class TestInvalidDefaultValues: - @pytest.fixture(scope="class") - def warnings(self): - return inline_spec_should_cause_warnings( + +@with_generated_client_fixture( """ components: schemas: @@ -65,7 +60,8 @@ def warnings(self): - type: integer default: "xxx" """ - ) +) +class TestInvalidDefaultValues: # Note, the null/None type, and binary strings (files), are not covered here due to a known bug: # https://github.com/openapi-generators/openapi-python-client/issues/1162 @@ -88,5 +84,5 @@ def warnings(self): ("UnionWithNoValidDefault", "Invalid int value"), ] ) - def test_bad_default_warning(self, model_name, message, warnings): - assert_bad_schema_warning(warnings, model_name, message) + def test_bad_default_warning(self, model_name, message, generated_client): + assert_bad_schema(generated_client, model_name, message) diff --git a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_enums_and_consts.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_enums_and_consts.py index 88facac8c..7f1586f29 100644 --- a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_enums_and_consts.py +++ b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_enums_and_consts.py @@ -1,14 +1,11 @@ -import pytest -from end_to_end_tests.end_to_end_test_helpers import ( - assert_bad_schema_warning, - inline_spec_should_cause_warnings, +from end_to_end_tests.functional_tests.helpers import ( + assert_bad_schema, inline_spec_should_fail, + with_generated_client_fixture, ) -class TestEnumAndConstInvalidSchemas: - @pytest.fixture(scope="class") - def warnings(self): - return inline_spec_should_cause_warnings( + +@with_generated_client_fixture( """ components: schemas: @@ -35,26 +32,26 @@ def warnings(self): properties: "2": enum: ["c", "d"] -""" - ) - - def test_enum_bad_default_value(self, warnings): - assert_bad_schema_warning(warnings, "WithBadDefaultValue", "Value B is not valid") +""" +) +class TestEnumAndConstInvalidSchemas: + def test_enum_bad_default_value(self, generated_client): + assert_bad_schema(generated_client, "WithBadDefaultValue", "Value B is not valid") - def test_enum_bad_default_type(self, warnings): - assert_bad_schema_warning(warnings, "WithBadDefaultType", "Cannot convert 123 to enum") + def test_enum_bad_default_type(self, generated_client): + assert_bad_schema(generated_client, "WithBadDefaultType", "Cannot convert 123 to enum") - def test_enum_mixed_types(self, warnings): - assert_bad_schema_warning(warnings, "WithMixedTypes", "Enum values must all be the same type") + def test_enum_mixed_types(self, generated_client): + assert_bad_schema(generated_client, "WithMixedTypes", "Enum values must all be the same type") - def test_enum_unsupported_type(self, warnings): - assert_bad_schema_warning(warnings, "WithUnsupportedType", "Unsupported enum type") + def test_enum_unsupported_type(self, generated_client): + assert_bad_schema(generated_client, "WithUnsupportedType", "Unsupported enum type") - def test_const_default_not_matching(self, warnings): - assert_bad_schema_warning(warnings, "DefaultNotMatchingConst", "Invalid value for const") + def test_const_default_not_matching(self, generated_client): + assert_bad_schema(generated_client, "DefaultNotMatchingConst", "Invalid value for const") - def test_conflicting_inline_class_names(self, warnings): - assert "Found conflicting enums named WithConflictingInlineNames12 with incompatible values" in warnings + def test_conflicting_inline_class_names(self, generated_client): + assert "Found conflicting enums named WithConflictingInlineNames12 with incompatible values" in generated_client.generator_result.output def test_enum_duplicate_values(self): # This one currently causes a full generator failure rather than a warning @@ -69,10 +66,7 @@ def test_enum_duplicate_values(self): assert "Duplicate key X in enum" in str(result.exception) -class TestLiteralEnumInvalidSchemas: - @pytest.fixture(scope="class") - def warnings(self): - return inline_spec_should_cause_warnings( +@with_generated_client_fixture( """ components: schemas: @@ -100,26 +94,26 @@ def warnings(self): "2": enum: ["c", "d"] """, - config="literal_enums: true", - ) - - def test_literal_enum_bad_default_value(self, warnings): - assert_bad_schema_warning(warnings, "WithBadDefaultValue", "Value B is not valid") + config="literal_enums: true", +) +class TestLiteralEnumInvalidSchemas: + def test_literal_enum_bad_default_value(self, generated_client): + assert_bad_schema(generated_client, "WithBadDefaultValue", "Value B is not valid") - def test_literal_enum_bad_default_type(self, warnings): - assert_bad_schema_warning(warnings, "WithBadDefaultType", "Cannot convert 123 to enum") + def test_literal_enum_bad_default_type(self, generated_client): + assert_bad_schema(generated_client, "WithBadDefaultType", "Cannot convert 123 to enum") - def test_literal_enum_mixed_types(self, warnings): - assert_bad_schema_warning(warnings, "WithMixedTypes", "Enum values must all be the same type") + def test_literal_enum_mixed_types(self, generated_client): + assert_bad_schema(generated_client, "WithMixedTypes", "Enum values must all be the same type") - def test_literal_enum_unsupported_type(self, warnings): - assert_bad_schema_warning(warnings, "WithUnsupportedType", "Unsupported enum type") + def test_literal_enum_unsupported_type(self, generated_client): + assert_bad_schema(generated_client, "WithUnsupportedType", "Unsupported enum type") - def test_const_default_not_matching(self, warnings): - assert_bad_schema_warning(warnings, "DefaultNotMatchingConst", "Invalid value for const") + def test_const_default_not_matching(self, generated_client): + assert_bad_schema(generated_client, "DefaultNotMatchingConst", "Invalid value for const") - def test_conflicting_inline_literal_enum_names(self, warnings): - assert "Found conflicting enums named WithConflictingInlineNames12 with incompatible values" in warnings + def test_conflicting_inline_literal_enum_names(self, generated_client): + assert "Found conflicting enums named WithConflictingInlineNames12 with incompatible values" in generated_client.generator_result.output def test_literal_enum_duplicate_values(self): # This one currently causes a full generator failure rather than a warning diff --git a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py index fcd6c6b9c..c9b785cb0 100644 --- a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py +++ b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py @@ -1,12 +1,23 @@ import pytest -from end_to_end_tests.end_to_end_test_helpers import ( - assert_bad_schema_warning, - inline_spec_should_cause_warnings, +from end_to_end_tests.functional_tests.helpers import ( inline_spec_should_fail, ) class TestInvalidSpecFormats: + @pytest.mark.parametrize( + ("content", "expected_error"), + ( + ("not a valid openapi document", "Failed to parse OpenAPI document"), + ("Invalid JSON", "Invalid JSON"), + ("{", "Invalid YAML"), + ), + ids=("invalid_openapi", "invalid_json", "invalid_yaml"), + ) + def test_unparseable_file(self, content, expected_error): + result = inline_spec_should_fail(content, add_missing_sections=False) + assert expected_error in result.output + def test_missing_openapi_version(self): result = inline_spec_should_fail( """ diff --git a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_unions.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_unions.py index ad824efc4..75621a094 100644 --- a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_unions.py +++ b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_unions.py @@ -1,14 +1,7 @@ -import pytest -from end_to_end_tests.end_to_end_test_helpers import ( - assert_bad_schema_warning, - inline_spec_should_cause_warnings, -) +from end_to_end_tests.functional_tests.helpers import assert_bad_schema, with_generated_client_fixture -class TestUnionInvalidSchemas: - @pytest.fixture(scope="class") - def warnings(self): - return inline_spec_should_cause_warnings( +@with_generated_client_fixture( """ components: schemas: @@ -22,14 +15,14 @@ def warnings(self): anyOf: - type: string - type: array # invalid because no items -""" - ) - - def test_invalid_reference(self, warnings): - assert_bad_schema_warning(warnings, "UnionWithInvalidReference", "Could not find reference") +""" +) +class TestUnionInvalidSchemas: + def test_invalid_reference(self, generated_client): + assert_bad_schema(generated_client, "UnionWithInvalidReference", "Could not find reference") - def test_invalid_default(self, warnings): - assert_bad_schema_warning(warnings, "UnionWithInvalidDefault", "Invalid int value: aaa") + def test_invalid_default(self, generated_client): + assert_bad_schema(generated_client, "UnionWithInvalidDefault", "Invalid int value: aaa") - def test_invalid_property(self, warnings): - assert_bad_schema_warning(warnings, "UnionWithMalformedVariant", "Invalid property in union") \ No newline at end of file + def test_invalid_property(self, generated_client): + assert_bad_schema(generated_client, "UnionWithMalformedVariant", "Invalid property in union") diff --git a/end_to_end_tests/functional_tests/helpers.py b/end_to_end_tests/functional_tests/helpers.py new file mode 100644 index 000000000..78b88cdee --- /dev/null +++ b/end_to_end_tests/functional_tests/helpers.py @@ -0,0 +1,130 @@ +from typing import Any, Dict +import re +from typing import List, Optional + +from click.testing import Result +import pytest + +from end_to_end_tests.generated_client import generate_client_from_inline_spec, GeneratedClientContext + + +def with_generated_client_fixture( + openapi_spec: str, + name: str="generated_client", + config: str="", + extra_args: List[str] = [], +): + """Decorator to apply to a test class to create a fixture inside it called 'generated_client'. + + The fixture value will be a GeneratedClientContext created by calling + generate_client_from_inline_spec(). + """ + def _decorator(cls): + def generated_client(self): + with generate_client_from_inline_spec(openapi_spec, extra_args=extra_args, config=config) as g: + print(g.generator_result.stdout) # so we'll see the output if a test failed + yield g + + setattr(cls, name, pytest.fixture(scope="class")(generated_client)) + return cls + + return _decorator + + +def with_generated_code_import(import_path: str, alias: Optional[str] = None): + """Decorator to apply to a test class to create a fixture from a generated code import. + + The 'generated_client' fixture must also be present. + + If import_path is "a.b.c", then the fixture's value is equal to "from a.b import c", and + its name is "c" unless you specify a different name with the alias parameter. + """ + parts = import_path.split(".") + module_name = ".".join(parts[0:-1]) + import_name = parts[-1] + + def _decorator(cls): + nonlocal alias + + def _func(self, generated_client): + module = generated_client.import_module(module_name) + return getattr(module, import_name) + + alias = alias or import_name + _func.__name__ = alias + setattr(cls, alias, pytest.fixture(scope="class")(_func)) + return cls + + return _decorator + + +def with_generated_code_imports(*import_paths: str): + def _decorator(cls): + decorated = cls + for import_path in import_paths: + decorated = with_generated_code_import(import_path)(decorated) + return decorated + + return _decorator + + +def assert_model_decode_encode(model_class: Any, json_data: dict, expected_instance: Any) -> None: + instance = model_class.from_dict(json_data) + assert instance == expected_instance + assert instance.to_dict() == json_data + + +def assert_model_property_type_hint(model_class: Any, name: str, expected_type_hint: Any) -> None: + assert model_class.__annotations__[name] == expected_type_hint + + +def inline_spec_should_fail( + openapi_spec: str, + extra_args: List[str] = [], + config: str = "", + add_missing_sections = True, +) -> Result: + """Asserts that the generator could not process the spec. + + Returns the command result, which could include stdout data or an exception. + """ + with generate_client_from_inline_spec( + openapi_spec, extra_args, config, add_missing_sections=add_missing_sections, raise_on_error=False + ) as generated_client: + assert generated_client.generator_result.exit_code != 0 + return generated_client.generator_result + + +def assert_bad_schema( + generated_client: GeneratedClientContext, + schema_name: str, + expected_message_str: str, +) -> None: + warnings = _GeneratorWarningsParser(generated_client) + assert schema_name in warnings.by_schema, f"Did not find warning for schema {schema_name} in output: {warnings.output}" + assert expected_message_str in warnings.by_schema[schema_name] + + +class _GeneratorWarningsParser: + output: str + by_schema: Dict[str, str] + + def __init__(self, generated_client: GeneratedClientContext) -> None: + """Runs the generator, asserts that it printed warnings, and parses the warnings.""" + + assert generated_client.generator_result.exit_code == 0 + output = generated_client.generator_result.stdout + assert "Warning(s) encountered while generating" in output + self.by_schema = {} + self.output = output + bad_schema_regex = "Unable to (parse|process) schema /components/schemas/(\w*)" + last_name = "" + while True: + if not (match := re.search(bad_schema_regex, output)): + break + if last_name: + self.by_schema[last_name] = output[0:match.start()] + output = output[match.end():] + last_name = match.group(2) + if last_name: + self.by_schema[last_name] = output diff --git a/end_to_end_tests/generated_client.py b/end_to_end_tests/generated_client.py new file mode 100644 index 000000000..ca1ad9888 --- /dev/null +++ b/end_to_end_tests/generated_client.py @@ -0,0 +1,143 @@ +import importlib +import os +import re +import shutil +from pathlib import Path +import sys +import tempfile +from typing import Any, List, Optional, Set + +from attrs import define +import pytest +from click.testing import Result +from typer.testing import CliRunner + +from openapi_python_client.cli import app + + +@define +class GeneratedClientContext: + """A context manager with helpers for tests that run against generated client code. + + On entering this context, sys.path is changed to include the root directory of the + generated code, so its modules can be imported. On exit, the original sys.path is + restored, and any modules that were loaded within the context are removed. + """ + + output_path: Path + generator_result: Result + base_module: str + monkeypatch: pytest.MonkeyPatch + old_modules: Optional[Set[str]] = None + + def __enter__(self) -> "GeneratedClientContext": + self.monkeypatch.syspath_prepend(self.output_path) + self.old_modules = set(sys.modules.keys()) + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.monkeypatch.undo() + for module_name in set(sys.modules.keys()) - self.old_modules: + del sys.modules[module_name] + shutil.rmtree(self.output_path, ignore_errors=True) + + def import_module(self, module_path: str) -> Any: + """Attempt to import a module from the generated code.""" + return importlib.import_module(f"{self.base_module}{module_path}") + + +def _run_command( + command: str, + extra_args: Optional[List[str]] = None, + openapi_document: Optional[str] = None, + url: Optional[str] = None, + config_path: Optional[Path] = None, + raise_on_error: bool = True, +) -> Result: + """Generate a client from an OpenAPI document and return the result of the command.""" + runner = CliRunner() + if openapi_document is not None: + openapi_path = Path(__file__).parent / openapi_document + source_arg = f"--path={openapi_path}" + else: + source_arg = f"--url={url}" + config_path = config_path or (Path(__file__).parent / "config.yml") + args = [command, f"--config={config_path}", source_arg] + if extra_args: + args.extend(extra_args) + result = runner.invoke(app, args) + if result.exit_code != 0 and raise_on_error: + raise Exception(result.stdout) + return result + + +def generate_client( + openapi_document: str, + extra_args: List[str] = [], + output_path: str = "my-test-api-client", + base_module: str = "my_test_api_client", + specify_output_path_explicitly: bool = True, + overwrite: bool = True, + raise_on_error: bool = True, +) -> GeneratedClientContext: + """Run the generator and return a GeneratedClientContext for accessing the generated code.""" + full_output_path = Path.cwd() / output_path + if not overwrite: + shutil.rmtree(full_output_path, ignore_errors=True) + args = extra_args + if specify_output_path_explicitly: + args = [*args, "--output-path", str(full_output_path)] + if overwrite: + args = [*args, "--overwrite"] + generator_result = _run_command("generate", args, openapi_document, raise_on_error=raise_on_error) + return GeneratedClientContext( + full_output_path, + generator_result, + base_module, + pytest.MonkeyPatch(), + ) + + +def generate_client_from_inline_spec( + openapi_spec: str, + extra_args: List[str] = [], + config: str = "", + base_module: str = "testapi_client", + add_missing_sections = True, + raise_on_error: bool = True, +) -> GeneratedClientContext: + """Run the generator on a temporary file created with the specified contents. + + You can also optionally tell it to create a temporary config file. + """ + if add_missing_sections: + if not re.search("^openapi:", openapi_spec, re.MULTILINE): + openapi_spec += "\nopenapi: '3.1.0'\n" + if not re.search("^info:", openapi_spec, re.MULTILINE): + openapi_spec += "\ninfo: {'title': 'testapi', 'description': 'my test api', 'version': '0.0.1'}\n" + if not re.search("^paths:", openapi_spec, re.MULTILINE): + openapi_spec += "\npaths: {}\n" + + output_path = tempfile.mkdtemp() + file = tempfile.NamedTemporaryFile(delete=False) + file.write(openapi_spec.encode('utf-8')) + file.close() + + if config: + config_file = tempfile.NamedTemporaryFile(delete=False) + config_file.write(config.encode('utf-8')) + config_file.close() + extra_args = [*extra_args, "--config", config_file.name] + + generated_client = generate_client( + file.name, + extra_args, + output_path, + base_module, + raise_on_error=raise_on_error, + ) + os.unlink(file.name) + if config: + os.unlink(config_file.name) + + return generated_client diff --git a/end_to_end_tests/test_end_to_end.py b/end_to_end_tests/test_end_to_end.py index 9780181a0..7f5582fa4 100644 --- a/end_to_end_tests/test_end_to_end.py +++ b/end_to_end_tests/test_end_to_end.py @@ -7,7 +7,7 @@ from click.testing import Result from typer.testing import CliRunner -from end_to_end_tests.end_to_end_test_helpers import ( +from end_to_end_tests.generated_client import ( _run_command, generate_client, generate_client_from_inline_spec, ) from openapi_python_client.cli import app @@ -253,26 +253,6 @@ def test_generate_dir_already_exists(): shutil.rmtree(Path.cwd() / "my-test-api-client", ignore_errors=True) -@pytest.mark.parametrize( - ("suffix", "content", "expected_error"), - ( - (".yaml", "not a valid openapi document", "Failed to parse OpenAPI document"), - (".json", "Invalid JSON", "Invalid JSON"), - (".yaml", "{", "Invalid YAML"), - ), - ids=("invalid_openapi", "invalid_json", "invalid_yaml") -) -def test_invalid_openapi_document(suffix, content, expected_error): - with generate_client_from_inline_spec( - content, - filename_suffix=suffix, - add_missing_sections=False, - raise_on_error=False, - ) as g: - assert g.generator_result.exit_code == 1 - assert expected_error in g.generator_result.stdout - - def test_update_integration_tests(): url = "https://raw.githubusercontent.com/openapi-generators/openapi-test-server/main/openapi.json" source_path = Path(__file__).parent.parent / "integration-tests" From 1c59c6c29d4d8b82ff130ff0df0225ead36112a1 Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Tue, 12 Nov 2024 10:49:20 -0800 Subject: [PATCH 13/15] coverage --- .../test_invalid_spec_format.py | 12 ++++++------ end_to_end_tests/functional_tests/helpers.py | 8 +++++++- end_to_end_tests/generated_client.py | 3 ++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py index c9b785cb0..2b0dfdda9 100644 --- a/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py +++ b/end_to_end_tests/functional_tests/generator_failure_cases/test_invalid_spec_format.py @@ -6,16 +6,16 @@ class TestInvalidSpecFormats: @pytest.mark.parametrize( - ("content", "expected_error"), + ("filename_suffix", "content", "expected_error"), ( - ("not a valid openapi document", "Failed to parse OpenAPI document"), - ("Invalid JSON", "Invalid JSON"), - ("{", "Invalid YAML"), + (".yaml", "not a valid openapi document", "Failed to parse OpenAPI document"), + (".json", "Invalid JSON", "Invalid JSON"), + (".yaml", "{", "Invalid YAML"), ), ids=("invalid_openapi", "invalid_json", "invalid_yaml"), ) - def test_unparseable_file(self, content, expected_error): - result = inline_spec_should_fail(content, add_missing_sections=False) + def test_unparseable_file(self, filename_suffix, content, expected_error): + result = inline_spec_should_fail(content, filename_suffix=filename_suffix, add_missing_sections=False) assert expected_error in result.output def test_missing_openapi_version(self): diff --git a/end_to_end_tests/functional_tests/helpers.py b/end_to_end_tests/functional_tests/helpers.py index 78b88cdee..d7b090662 100644 --- a/end_to_end_tests/functional_tests/helpers.py +++ b/end_to_end_tests/functional_tests/helpers.py @@ -82,6 +82,7 @@ def inline_spec_should_fail( openapi_spec: str, extra_args: List[str] = [], config: str = "", + filename_suffix: str = "", add_missing_sections = True, ) -> Result: """Asserts that the generator could not process the spec. @@ -89,7 +90,12 @@ def inline_spec_should_fail( Returns the command result, which could include stdout data or an exception. """ with generate_client_from_inline_spec( - openapi_spec, extra_args, config, add_missing_sections=add_missing_sections, raise_on_error=False + openapi_spec, + extra_args, + config, + filename_suffix=filename_suffix, + add_missing_sections=add_missing_sections, + raise_on_error=False, ) as generated_client: assert generated_client.generator_result.exit_code != 0 return generated_client.generator_result diff --git a/end_to_end_tests/generated_client.py b/end_to_end_tests/generated_client.py index ca1ad9888..bb580604e 100644 --- a/end_to_end_tests/generated_client.py +++ b/end_to_end_tests/generated_client.py @@ -102,6 +102,7 @@ def generate_client_from_inline_spec( openapi_spec: str, extra_args: List[str] = [], config: str = "", + filename_suffix: Optional[str] = None, base_module: str = "testapi_client", add_missing_sections = True, raise_on_error: bool = True, @@ -119,7 +120,7 @@ def generate_client_from_inline_spec( openapi_spec += "\npaths: {}\n" output_path = tempfile.mkdtemp() - file = tempfile.NamedTemporaryFile(delete=False) + file = tempfile.NamedTemporaryFile(suffix=filename_suffix, delete=False) file.write(openapi_spec.encode('utf-8')) file.close() From aa63390e06834a47c9f9f977090069633ff103b8 Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Tue, 12 Nov 2024 12:13:02 -0800 Subject: [PATCH 14/15] docs --- CONTRIBUTING.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fbd3482f7..0d993a5d6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,13 +50,14 @@ All changes must be tested, I recommend writing the test first, then writing the If you think that some of the added code is not testable (or testing it would add little value), mention that in your PR and we can discuss it. -1. If you're adding support for a new OpenAPI feature or covering a new edge case, add an [end-to-end test](#end-to-end-tests) -2. If you're modifying the way an existing feature works, make sure an existing test generates the _old_ code in `end_to_end_tests/golden-record`. You'll use this to check for the new code once your changes are complete. -3. If you're improving an error or adding a new error, add a [unit test](#unit-tests) +1. If you're adding support for a new OpenAPI feature or covering a new edge case, add [functional tests](#functional-tests), and optionally an [end-to-end snapshot test](#end-to-end-snapshot-tests). +2. If you're modifying the way an existing feature works, make sure functional tests cover this case. Existing end-to-end snapshot tests might also be affected if you have changed what generated model/endpoint code looks like. +3. If you're improving error handling or adding a new error, add [functional tests](#functional-tests). +4. For tests of low-level pieces of code that are fairly self-contained, and not tightly coupled to other internal implementation details, you can use regular [unit tests](#unit-tests). #### End-to-end snapshot tests -This project aims to have all "happy paths" (types of code which _can_ be generated) covered by end-to-end tests. There are two types of these: snapshot tests, and unit tests of generated code. +This project aims to have all "happy paths" (types of code which _can_ be generated) covered by end-to-end tests. There are two types of these: snapshot tests, and functional tests. Snapshot tests verify that the generated code is identical to a previously-committed set of snapshots (called a "golden record" here). They are basically regression tests to catch any unintended changes in the generator output. @@ -71,17 +72,17 @@ There are 4 types of snapshots generated right now, you may have to update only #### Functional tests -These are black-box tests that verify the runtime behavior of generated code, as well as the generator's validation behavior. For instance, they can verify that JSON data is correctly decoded into model class attributes, or that the generator will emit an appropriate warning for an invalid spec. +These are black-box tests that verify the runtime behavior of generated code, as well as the generator's validation behavior. They are also end-to-end tests, since they run the generator as a shell command. -This can sometimes identify issues with error handling, validation logic, module imports, etc., that might be harder to diagnose via the snapshot tests, especially during development of a new feature. +This can sometimes identify issues with error handling, validation logic, module imports, etc., that might be harder to diagnose via the snapshot tests, especially during development of a new feature. For instance, they can verify that JSON data is correctly decoded into model class attributes, or that the generator will emit an appropriate warning or error for an invalid spec. See [`end_to_end_tests/functional_tests`](./end_to_end_tests/functional_tests). -#### Other unit tests +#### Unit tests These include: -* Regular unit tests of basic pieces of fairly self-contained low-level functionality, such as helper functions. These are implemented in the `tests/unit` directory, using the `pytest` framework. +* Regular unit tests of basic pieces of fairly self-contained low-level functionality, such as helper functions. These are implemented in the `tests` directory, using the `pytest` framework. * Older-style unit tests of low-level functions like `property_from_data` that have complex behavior. These are brittle and difficult to maintain, and should not be used going forward. Instead, they should be migrated to functional tests. ### Creating a Pull Request From 15eafe7449f14a18d63d7fdc941e42e22a9e2ccc Mon Sep 17 00:00:00 2001 From: Eli Bishop Date: Mon, 18 Nov 2024 13:27:00 -0800 Subject: [PATCH 15/15] slight refactor, better failure output --- end_to_end_tests/functional_tests/helpers.py | 3 +-- end_to_end_tests/generated_client.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/end_to_end_tests/functional_tests/helpers.py b/end_to_end_tests/functional_tests/helpers.py index d7b090662..aadd5ede6 100644 --- a/end_to_end_tests/functional_tests/helpers.py +++ b/end_to_end_tests/functional_tests/helpers.py @@ -47,8 +47,7 @@ def _decorator(cls): nonlocal alias def _func(self, generated_client): - module = generated_client.import_module(module_name) - return getattr(module, import_name) + return generated_client.import_symbol(module_name, import_name) alias = alias or import_name _func.__name__ = alias diff --git a/end_to_end_tests/generated_client.py b/end_to_end_tests/generated_client.py index bb580604e..8007e6384 100644 --- a/end_to_end_tests/generated_client.py +++ b/end_to_end_tests/generated_client.py @@ -45,6 +45,17 @@ def import_module(self, module_path: str) -> Any: """Attempt to import a module from the generated code.""" return importlib.import_module(f"{self.base_module}{module_path}") + def import_symbol(self, module_path: str, name: str) -> Any: + module = self.import_module(module_path) + try: + return getattr(module, name) + except AttributeError: + existing = ", ".join(name for name in dir(module) if not name.startswith("_")) + assert False, ( + f"Couldn't find import \"{name}\" in \"{self.base_module}{module_path}\".\n" + f"Available imports in that module are: {existing}\n" + f"Output from generator was: {self.generator_result.stdout}" + ) def _run_command( command: str, @@ -67,7 +78,8 @@ def _run_command( args.extend(extra_args) result = runner.invoke(app, args) if result.exit_code != 0 and raise_on_error: - raise Exception(result.stdout) + message = f"{result.stdout}\n{result.exception}" if result.exception else result.stdout + raise Exception(message) return result