[{"data":1,"prerenderedAt":3395},["ShallowReactive",2],{"navigation":3,"\u002Fautomate\u002Fguides\u002Fworkflows-api":750,"\u002Fautomate\u002Fguides\u002Fworkflows-api-surround":3390},[4,80,134,364,428,530,567,646],{"title":5,"path":6,"stem":7,"children":8,"page":42},"Get Started","\u002Fget-started","01.get-started",[9,13,17,43,47],{"title":10,"path":11,"stem":12},"Welcome to UniteLabs","\u002Fget-started\u002Fwelcome","01.get-started\u002F00.welcome",{"title":14,"path":15,"stem":16},"How it works","\u002Fget-started\u002Fhow-it-works","01.get-started\u002F01.how-it-works",{"title":18,"path":19,"stem":20,"children":21,"page":42},"Use Cases","\u002Fget-started\u002Fuse-cases","01.get-started\u002F02.use-cases",[22,26,30,34,38],{"title":23,"path":24,"stem":25},"Instrument Control","\u002Fget-started\u002Fuse-cases\u002Flow-level-instrument-control","01.get-started\u002F02.use-cases\u002F10.low-level-instrument-control",{"title":27,"path":28,"stem":29},"Multi-device Control","\u002Fget-started\u002Fuse-cases\u002Fmulti-device-control","01.get-started\u002F02.use-cases\u002F20.multi-device-control",{"title":31,"path":32,"stem":33},"Workflow Orchestration","\u002Fget-started\u002Fuse-cases\u002Fworkflow-orchestration","01.get-started\u002F02.use-cases\u002F30.workflow-orchestration",{"title":35,"path":36,"stem":37},"Custom Apps and LIMS Integration","\u002Fget-started\u002Fuse-cases\u002Fcustom-apps-lims","01.get-started\u002F02.use-cases\u002F40.custom-apps-lims",{"title":39,"path":40,"stem":41},"Scale and Fleet Management","\u002Fget-started\u002Fuse-cases\u002Fscale-and-fleet","01.get-started\u002F02.use-cases\u002F50.scale-and-fleet",false,{"title":44,"path":45,"stem":46},"Lab as Code","\u002Fget-started\u002Fwhy-code","01.get-started\u002F03.why-code",{"title":48,"path":49,"stem":50,"children":51,"page":42},"Setup","\u002Fget-started\u002Fsetup","01.get-started\u002F20.setup",[52,56,60,64,68,72,76],{"title":53,"path":54,"stem":55},"GroundControl","\u002Fget-started\u002Fsetup\u002Fgroundcontrol","01.get-started\u002F20.setup\u002F10.groundcontrol",{"title":57,"path":58,"stem":59},"Network requirements","\u002Fget-started\u002Fsetup\u002Fnetwork-requirements","01.get-started\u002F20.setup\u002F20.network-requirements",{"title":61,"path":62,"stem":63},"Multi-device Networking","\u002Fget-started\u002Fsetup\u002Fmultiple-devices","01.get-started\u002F20.setup\u002F30.multiple-devices",{"title":65,"path":66,"stem":67},"Connect to Platform","\u002Fget-started\u002Fsetup\u002Fconnect-to-platform","01.get-started\u002F20.setup\u002F40.connect-to-platform",{"title":69,"path":70,"stem":71},"Headless install","\u002Fget-started\u002Fsetup\u002Fheadless-install","01.get-started\u002F20.setup\u002F50.headless-install",{"title":73,"path":74,"stem":75},"Raspberry Pi","\u002Fget-started\u002Fsetup\u002Fraspberry-pi","01.get-started\u002F20.setup\u002F55.raspberry-pi",{"title":77,"path":78,"stem":79},"Installation","\u002Fget-started\u002Fsetup\u002Fsdk-installation","01.get-started\u002F20.setup\u002F60.sdk-installation",{"title":81,"path":82,"stem":83,"children":84,"page":42},"Integrate","\u002Fintegrate","02.integrate",[85,89,93,118],{"title":86,"path":87,"stem":88},"What is a connector?","\u002Fintegrate\u002Fwhat-is-a-connector","02.integrate\u002F00.what-is-a-connector",{"title":90,"path":91,"stem":92},"Calling a Connector","\u002Fintegrate\u002Fcontrol-with-code","02.integrate\u002F05.control-with-code",{"title":94,"path":95,"stem":96,"children":97,"page":42},"Concepts","\u002Fintegrate\u002Fconcepts","02.integrate\u002F10.concepts",[98,102,106,110,114],{"title":99,"path":100,"stem":101},"Connector","\u002Fintegrate\u002Fconcepts\u002Fconnector","02.integrate\u002F10.concepts\u002F10.connector",{"title":103,"path":104,"stem":105},"Module","\u002Fintegrate\u002Fconcepts\u002Fmodule","02.integrate\u002F10.concepts\u002F20.module",{"title":107,"path":108,"stem":109},"Action","\u002Fintegrate\u002Fconcepts\u002Faction","02.integrate\u002F10.concepts\u002F30.action",{"title":111,"path":112,"stem":113},"Subscription","\u002Fintegrate\u002Fconcepts\u002Fsubscription","02.integrate\u002F10.concepts\u002F40.subscription",{"title":115,"path":116,"stem":117},"Device","\u002Fintegrate\u002Fconcepts\u002Fdevice","02.integrate\u002F10.concepts\u002F50.device",{"title":119,"path":120,"stem":121,"children":122,"page":42},"Use a connector","\u002Fintegrate\u002Fuse-a-connector","02.integrate\u002F30.use-a-connector",[123,126,130],{"title":53,"path":124,"stem":125},"\u002Fintegrate\u002Fuse-a-connector\u002Fgroundcontrol","02.integrate\u002F30.use-a-connector\u002F10.groundcontrol",{"title":127,"path":128,"stem":129},"Platform","\u002Fintegrate\u002Fuse-a-connector\u002Fplatform","02.integrate\u002F30.use-a-connector\u002F20.platform",{"title":131,"path":132,"stem":133},"UniteLabs SDK & REST API","\u002Fintegrate\u002Fuse-a-connector\u002Fpython","02.integrate\u002F30.use-a-connector\u002F30.python",{"title":135,"path":136,"stem":137,"children":138,"page":42},"Operate","\u002Foperate","03.operate",[139,142,146,186,259],{"title":135,"path":140,"stem":141},"\u002Foperate\u002Foverview","03.operate\u002F00.overview",{"title":143,"path":144,"stem":145},"Your First Protocol","\u002Foperate\u002Fyour-first-protocol","03.operate\u002F05.your-first-protocol",{"title":94,"path":147,"stem":148,"children":149,"page":42},"\u002Foperate\u002Fconcepts","03.operate\u002F10.concepts",[150,154,158,162,166,170,174,178,182],{"title":151,"path":152,"stem":153},"Liquid Handling","\u002Foperate\u002Fconcepts\u002Fliquid-handling","03.operate\u002F10.concepts\u002F10.liquid-handling",{"title":155,"path":156,"stem":157},"Modules","\u002Foperate\u002Fconcepts\u002Fmodules","03.operate\u002F10.concepts\u002F20.modules",{"title":159,"path":160,"stem":161},"Deck","\u002Foperate\u002Fconcepts\u002Fdeck","03.operate\u002F10.concepts\u002F30.deck",{"title":163,"path":164,"stem":165},"Labware","\u002Foperate\u002Fconcepts\u002Flabware","03.operate\u002F10.concepts\u002F40.labware",{"title":167,"path":168,"stem":169},"Liquids","\u002Foperate\u002Fconcepts\u002Fliquids","03.operate\u002F10.concepts\u002F50.liquids",{"title":171,"path":172,"stem":173},"Liquid Classes","\u002Foperate\u002Fconcepts\u002Fliquid-classes","03.operate\u002F10.concepts\u002F60.liquid-classes",{"title":175,"path":176,"stem":177},"Tips and Tip Tracking","\u002Foperate\u002Fconcepts\u002Ftips","03.operate\u002F10.concepts\u002F70.tips",{"title":179,"path":180,"stem":181},"Simulation","\u002Foperate\u002Fconcepts\u002Fsimulation","03.operate\u002F10.concepts\u002F80.simulation",{"title":183,"path":184,"stem":185},"Error Handling","\u002Foperate\u002Fconcepts\u002Ferror-handling","03.operate\u002F10.concepts\u002F90.error-handling",{"title":187,"path":188,"stem":189,"children":190,"page":42},"Guides","\u002Foperate\u002Fguides","03.operate\u002F20.guides",[191,220,232,256],{"title":163,"path":192,"stem":193,"children":194},"\u002Foperate\u002Fguides\u002Flabware","03.operate\u002F20.guides\u002F10.labware\u002Findex",[195,196,200,204,208,212,216],{"title":163,"path":192,"stem":193},{"title":197,"path":198,"stem":199},"Standard Labware","\u002Foperate\u002Fguides\u002Flabware\u002Fstandard-labware","03.operate\u002F20.guides\u002F10.labware\u002F05.standard-labware",{"title":201,"path":202,"stem":203},"Plates","\u002Foperate\u002Fguides\u002Flabware\u002Fplates","03.operate\u002F20.guides\u002F10.labware\u002F10.plates",{"title":205,"path":206,"stem":207},"Tips and Tip Racks","\u002Foperate\u002Fguides\u002Flabware\u002Ftips-and-racks","03.operate\u002F20.guides\u002F10.labware\u002F20.tips-and-racks",{"title":209,"path":210,"stem":211},"Tubes and Tube Racks","\u002Foperate\u002Fguides\u002Flabware\u002Ftubes-and-tube-racks","03.operate\u002F20.guides\u002F10.labware\u002F30.tubes-and-tube-racks",{"title":213,"path":214,"stem":215},"Troughs","\u002Foperate\u002Fguides\u002Flabware\u002Ftroughs","03.operate\u002F20.guides\u002F10.labware\u002F35.troughs",{"title":217,"path":218,"stem":219},"Carriers and Adapters","\u002Foperate\u002Fguides\u002Flabware\u002Fcarriers-and-adapters","03.operate\u002F20.guides\u002F10.labware\u002F40.carriers-and-adapters",{"title":159,"path":221,"stem":222,"children":223,"page":42},"\u002Foperate\u002Fguides\u002Fdeck","03.operate\u002F20.guides\u002F20.deck",[224,228],{"title":225,"path":226,"stem":227},"Building a Deck","\u002Foperate\u002Fguides\u002Fdeck\u002Fbuilding-a-deck","03.operate\u002F20.guides\u002F20.deck\u002F10.building-a-deck",{"title":229,"path":230,"stem":231},"Save\u002FLoad a Deck","\u002Foperate\u002Fguides\u002Fdeck\u002Fsave-load-deck","03.operate\u002F20.guides\u002F20.deck\u002F20.save-load-deck",{"title":233,"path":234,"stem":235,"children":236,"page":42},"Pipetting","\u002Foperate\u002Fguides\u002Fpipetting","03.operate\u002F20.guides\u002F30.pipetting",[237,241,245,249,252],{"title":238,"path":239,"stem":240},"Basic Pipetting","\u002Foperate\u002Fguides\u002Fpipetting\u002Fbasic-pipetting","03.operate\u002F20.guides\u002F30.pipetting\u002F10.basic-pipetting",{"title":242,"path":243,"stem":244},"Advanced Pipetting","\u002Foperate\u002Fguides\u002Fpipetting\u002Fadvanced-pipetting","03.operate\u002F20.guides\u002F30.pipetting\u002F20.advanced-pipetting",{"title":246,"path":247,"stem":248},"Tip Handling","\u002Foperate\u002Fguides\u002Fpipetting\u002Ftip-handling","03.operate\u002F20.guides\u002F30.pipetting\u002F30.tip-handling",{"title":171,"path":250,"stem":251},"\u002Foperate\u002Fguides\u002Fpipetting\u002Fliquid-classes","03.operate\u002F20.guides\u002F30.pipetting\u002F40.liquid-classes",{"title":253,"path":254,"stem":255},"Labware Transport","\u002Foperate\u002Fguides\u002Fpipetting\u002Flabware-transport","03.operate\u002F20.guides\u002F30.pipetting\u002F50.labware-transport",{"title":179,"path":257,"stem":258},"\u002Foperate\u002Fguides\u002Fsimulation","03.operate\u002F20.guides\u002F40.simulation",{"title":260,"path":261,"stem":262,"children":263,"page":42},"Liquid Handler Guides","\u002Foperate\u002Fdevices","03.operate\u002F30.devices",[264,305,330,347],{"title":265,"path":266,"stem":267,"children":268,"page":42},"Hamilton STAR","\u002Foperate\u002Fdevices\u002Fhamilton-star","03.operate\u002F30.devices\u002F10.hamilton-star",[269,273,277,281,285,289,293,297,301],{"title":270,"path":271,"stem":272},"Positioning & Movement","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fpositioning","03.operate\u002F30.devices\u002F10.hamilton-star\u002F10.positioning",{"title":274,"path":275,"stem":276},"Gripper Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcore-gripper","03.operate\u002F30.devices\u002F10.hamilton-star\u002F20.core-gripper",{"title":278,"path":279,"stem":280},"iSWAP Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fiswap","03.operate\u002F30.devices\u002F10.hamilton-star\u002F30.iswap",{"title":282,"path":283,"stem":284},"Using TADM","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Ftadm","03.operate\u002F30.devices\u002F10.hamilton-star\u002F40.tadm",{"title":286,"path":287,"stem":288},"Autoload Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fautoload","03.operate\u002F30.devices\u002F10.hamilton-star\u002F50.autoload",{"title":290,"path":291,"stem":292},"Waste Block","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fwaste-block","03.operate\u002F30.devices\u002F10.hamilton-star\u002F60.waste-block",{"title":294,"path":295,"stem":296},"Complex Mixing","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcomplex-mixing","03.operate\u002F30.devices\u002F10.hamilton-star\u002F66.complex-mixing",{"title":298,"path":299,"stem":300},"Teaching Gripper Paddle Positions","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fgripper-positions","03.operate\u002F30.devices\u002F10.hamilton-star\u002F70.gripper-positions",{"title":302,"path":303,"stem":304},"Training a Custom Deck Position With the iSWAP","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcustom-deck-position","03.operate\u002F30.devices\u002F10.hamilton-star\u002F75.custom-deck-position",{"title":306,"path":307,"stem":308,"children":309,"page":42},"Hamilton Vantage","\u002Foperate\u002Fdevices\u002Fhamilton-vantage","03.operate\u002F30.devices\u002F20.hamilton-vantage",[310,314,318,322,326],{"title":311,"path":312,"stem":313},"Waste Configuration","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fwaste-configuration","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F05.waste-configuration",{"title":315,"path":316,"stem":317},"Covers and Lights","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fcovers-and-lights","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F10.covers-and-lights",{"title":319,"path":320,"stem":321},"IDL Module","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fidl","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F20.idl",{"title":323,"path":324,"stem":325},"IPG Module","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fipg","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F30.ipg",{"title":327,"path":328,"stem":329},"XL Pipettes","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fxl-channels","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F40.xl-channels",{"title":331,"path":332,"stem":333,"children":334,"page":42},"Agilent Bravo","\u002Foperate\u002Fdevices\u002Fagilent-bravo","03.operate\u002F30.devices\u002F30.agilent-bravo",[335,338,341,344],{"title":246,"path":336,"stem":337},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Ftip-handling","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F10.tip-handling",{"title":238,"path":339,"stem":340},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fbasic-pipetting","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F20.basic-pipetting",{"title":171,"path":342,"stem":343},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fliquid-classes","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F25.liquid-classes",{"title":274,"path":345,"stem":346},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fusing-the-gripper","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F30.using-the-gripper",{"title":348,"path":349,"stem":350,"children":351,"page":42},"Tecan FluentControl","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol",[352,356,360],{"title":353,"path":354,"stem":355},"Connect & Run a Method","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Fconnect-and-run","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F10.connect-and-run",{"title":357,"path":358,"stem":359},"Sending XML Commands","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Fsending-xml-commands","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F20.sending-xml-commands",{"title":361,"path":362,"stem":363},"Full Workflow Example","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Ffull-workflow-example","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F30.full-workflow-example",{"title":365,"path":366,"stem":367,"children":368,"page":42},"Device Guides","\u002Fdevice-guides","06.device-guides",[369,372,385,402,415],{"title":365,"path":370,"stem":371},"\u002Fdevice-guides\u002Foverview","06.device-guides\u002F00.overview",{"title":373,"path":374,"stem":375,"children":376,"page":42},"Incubation","\u002Fdevice-guides\u002Fincubation","06.device-guides\u002F20.incubation",[377,381],{"title":378,"path":379,"stem":380},"Inheco ODTC","\u002Fdevice-guides\u002Fincubation\u002Finheco-odtc","06.device-guides\u002F20.incubation\u002F10.inheco-odtc",{"title":382,"path":383,"stem":384},"Inheco SCILA","\u002Fdevice-guides\u002Fincubation\u002Finheco-scila","06.device-guides\u002F20.incubation\u002F20.inheco-scila",{"title":386,"path":387,"stem":388,"children":389,"page":42},"Heater-Shakers","\u002Fdevice-guides\u002Fheater-shakers","06.device-guides\u002F30.heater-shakers",[390,394,398],{"title":391,"path":392,"stem":393},"Inheco Thermoshake","\u002Fdevice-guides\u002Fheater-shakers\u002Finheco-thermoshake","06.device-guides\u002F30.heater-shakers\u002F10.inheco-thermoshake",{"title":395,"path":396,"stem":397},"QInstruments Bioshake","\u002Fdevice-guides\u002Fheater-shakers\u002Fqinstruments-bioshake","06.device-guides\u002F30.heater-shakers\u002F20.qinstruments-bioshake",{"title":399,"path":400,"stem":401},"QInstruments ColdPlate","\u002Fdevice-guides\u002Fheater-shakers\u002Fqinstruments-coldplate","06.device-guides\u002F30.heater-shakers\u002F30.qinstruments-coldplate",{"title":403,"path":404,"stem":405,"children":406,"page":42},"Readers","\u002Fdevice-guides\u002Freaders","06.device-guides\u002F40.readers",[407,411],{"title":408,"path":409,"stem":410},"Biotek Gen5","\u002Fdevice-guides\u002Freaders\u002Fbiotek-gen5","06.device-guides\u002F40.readers\u002F10.biotek-gen5",{"title":412,"path":413,"stem":414},"Biotek Synergy H1","\u002Fdevice-guides\u002Freaders\u002Fbiotek-synergy-h1","06.device-guides\u002F40.readers\u002F20.biotek-synergy-H1",{"title":416,"path":417,"stem":418,"children":419,"page":42},"Tilt & Turn","\u002Fdevice-guides\u002Ftilt-and-turn","06.device-guides\u002F50.tilt-and-turn",[420,424],{"title":421,"path":422,"stem":423},"TurnStation","\u002Fdevice-guides\u002Ftilt-and-turn\u002Fqinstruments-turnstation","06.device-guides\u002F50.tilt-and-turn\u002F10.qinstruments-turnstation",{"title":425,"path":426,"stem":427},"TiltStation","\u002Fdevice-guides\u002Ftilt-and-turn\u002Fqinstruments-tiltstation","06.device-guides\u002F50.tilt-and-turn\u002F20.qinstruments-tiltstation",{"title":429,"path":430,"stem":431,"children":432,"page":42},"Automate","\u002Fautomate","07.automate",[433,437,441,445,494],{"title":434,"path":435,"stem":436},"What is a workflow?","\u002Fautomate\u002Fwhat-is-a-workflow","07.automate\u002F00.what-is-a-workflow",{"title":438,"path":439,"stem":440},"Workflow template","\u002Fautomate\u002Fworkflow-template","07.automate\u002F05.workflow-template",{"title":442,"path":443,"stem":444},"Your First Workflow","\u002Fautomate\u002Fyour-first-workflow","07.automate\u002F08.your-first-workflow",{"title":94,"pages":446,"path":456,"stem":457,"children":458,"page":42},[447,448,449,450,451,452,453,454,455],"workflow","phase","step","runs","input","artifacts","logs","human-in-the-loop","error-handling","\u002Fautomate\u002Fconcepts","07.automate\u002F10.concepts",[459,463,467,471,475,479,483,487,491],{"title":460,"path":461,"stem":462},"Workflow","\u002Fautomate\u002Fconcepts\u002Fworkflow","07.automate\u002F10.concepts\u002F10.workflow",{"title":464,"path":465,"stem":466},"Phase","\u002Fautomate\u002Fconcepts\u002Fphase","07.automate\u002F10.concepts\u002F20.phase",{"title":468,"path":469,"stem":470},"Step","\u002Fautomate\u002Fconcepts\u002Fstep","07.automate\u002F10.concepts\u002F30.step",{"title":472,"path":473,"stem":474},"Runs","\u002Fautomate\u002Fconcepts\u002Fruns","07.automate\u002F10.concepts\u002F40.runs",{"title":476,"path":477,"stem":478},"Input","\u002Fautomate\u002Fconcepts\u002Finput","07.automate\u002F10.concepts\u002F50.input",{"title":480,"path":481,"stem":482},"Artifacts","\u002Fautomate\u002Fconcepts\u002Fartifacts","07.automate\u002F10.concepts\u002F60.artifacts",{"title":484,"path":485,"stem":486},"Logs","\u002Fautomate\u002Fconcepts\u002Flogs","07.automate\u002F10.concepts\u002F70.logs",{"title":488,"path":489,"stem":490},"Human in the Loop","\u002Fautomate\u002Fconcepts\u002Fhuman-in-the-loop","07.automate\u002F10.concepts\u002F80.human-in-the-loop",{"title":183,"path":492,"stem":493},"\u002Fautomate\u002Fconcepts\u002Ferror-handling","07.automate\u002F10.concepts\u002F90.error-handling",{"title":187,"path":495,"stem":496,"children":497,"page":42},"\u002Fautomate\u002Fguides","07.automate\u002F25.guides",[498,502,506,510,514,518,522,526],{"title":499,"path":500,"stem":501},"Deploy a workflow","\u002Fautomate\u002Fguides\u002Fdeploy-a-workflow","07.automate\u002F25.guides\u002F30.deploy-a-workflow",{"title":503,"path":504,"stem":505},"Run a workflow","\u002Fautomate\u002Fguides\u002Frun-a-workflow","07.automate\u002F25.guides\u002F35.run-a-workflow",{"title":507,"path":508,"stem":509},"CI\u002FCD for workflows","\u002Fautomate\u002Fguides\u002Fcicd-for-workflows","07.automate\u002F25.guides\u002F40.cicd-for-workflows",{"title":511,"path":512,"stem":513},"HITL basics","\u002Fautomate\u002Fguides\u002Fbasic-hitl","07.automate\u002F25.guides\u002F50.basic-hitl",{"title":515,"path":516,"stem":517},"Typed operator inputs","\u002Fautomate\u002Fguides\u002Ftyped-operator-inputs","07.automate\u002F25.guides\u002F55.typed-operator-inputs",{"title":519,"path":520,"stem":521},"Error recovery","\u002Fautomate\u002Fguides\u002Fbasic-error-handling","07.automate\u002F25.guides\u002F60.basic-error-handling",{"title":523,"path":524,"stem":525},"Advanced error handling","\u002Fautomate\u002Fguides\u002Fadvanced-error-handling","07.automate\u002F25.guides\u002F70.advanced-error-handling",{"title":527,"path":528,"stem":529},"Workflows REST API","\u002Fautomate\u002Fguides\u002Fworkflows-api","07.automate\u002F25.guides\u002F80.workflows-api",{"title":531,"path":532,"stem":533,"children":534,"page":42},"Observe","\u002Fobserve","08.observe",[535,539,555],{"title":536,"path":537,"stem":538},"Overview","\u002Fobserve\u002Foverview","08.observe\u002F10.overview",{"title":94,"path":540,"stem":541,"children":542,"page":42},"\u002Fobserve\u002Fconcepts","08.observe\u002F20.concepts",[543,547,551],{"title":544,"path":545,"stem":546},"Object Storage","\u002Fobserve\u002Fconcepts\u002Fstorage","08.observe\u002F20.concepts\u002F10.storage",{"title":548,"path":549,"stem":550},"Secrets","\u002Fobserve\u002Fconcepts\u002Fsecrets","08.observe\u002F20.concepts\u002F20.secrets",{"title":552,"path":553,"stem":554},"Data sources","\u002Fobserve\u002Fconcepts\u002Fdata-sources","08.observe\u002F20.concepts\u002F30.data-sources",{"title":187,"path":556,"stem":557,"children":558,"page":42},"\u002Fobserve\u002Fguides","08.observe\u002F30.guides",[559,563],{"title":560,"path":561,"stem":562},"File System Connector","\u002Fobserve\u002Fguides\u002Ffilesystem-connector","08.observe\u002F30.guides\u002F10.filesystem-connector",{"title":564,"path":565,"stem":566},"Building an ETL","\u002Fobserve\u002Fguides\u002Fbuilding-an-etl","08.observe\u002F30.guides\u002F20.building-an-etl",{"title":568,"path":569,"stem":570,"children":571,"page":42},"Technical Reference","\u002Ftechnical-reference","10.technical-reference",[572,576,580,592,603,614,624,635],{"title":573,"path":574,"stem":575},"Introduction","\u002Ftechnical-reference\u002Fplatform-blueprint","10.technical-reference\u002F00.platform-blueprint",{"title":577,"path":578,"stem":579},"REST API","\u002Ftechnical-reference\u002Frest-api","10.technical-reference\u002F01.rest-api",{"title":53,"path":581,"stem":582,"children":583,"page":42},"\u002Ftechnical-reference\u002Fgroundcontrol","10.technical-reference\u002F10.groundcontrol",[584,588],{"title":585,"path":586,"stem":587},"Install & Setup","\u002Ftechnical-reference\u002Fgroundcontrol\u002Finstall","10.technical-reference\u002F10.groundcontrol\u002F10.install",{"title":589,"path":590,"stem":591},"Changelog","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fchangelog","10.technical-reference\u002F10.groundcontrol\u002F20.changelog",{"title":593,"path":594,"stem":595,"children":596,"page":42},"UniteLabs SDK","\u002Ftechnical-reference\u002Fpython-sdk","10.technical-reference\u002F20.python-sdk",[597,600],{"title":585,"path":598,"stem":599},"\u002Ftechnical-reference\u002Fpython-sdk\u002Finstall","10.technical-reference\u002F20.python-sdk\u002F10.install",{"title":589,"path":601,"stem":602},"\u002Ftechnical-reference\u002Fpython-sdk\u002Fchangelog","10.technical-reference\u002F20.python-sdk\u002F20.changelog",{"title":604,"path":605,"stem":606,"children":607,"page":42},"Liquid Handling SDK","\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk","10.technical-reference\u002F30.python-liquid-handling-sdk",[608,611],{"title":585,"path":609,"stem":610},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Finstall","10.technical-reference\u002F30.python-liquid-handling-sdk\u002F10.install",{"title":589,"path":612,"stem":613},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Fchangelog","10.technical-reference\u002F30.python-liquid-handling-sdk\u002F20.changelog",{"title":163,"path":615,"stem":616,"children":617,"page":42},"\u002Ftechnical-reference\u002Flabware","10.technical-reference\u002F40.labware",[618,621],{"title":585,"path":619,"stem":620},"\u002Ftechnical-reference\u002Flabware\u002Finstall","10.technical-reference\u002F40.labware\u002F10.install",{"title":589,"path":622,"stem":623},"\u002Ftechnical-reference\u002Flabware\u002Fchangelog","10.technical-reference\u002F40.labware\u002F20.changelog",{"title":625,"path":626,"stem":627,"children":628,"page":42},"Python Omnibus","\u002Ftechnical-reference\u002Fpython-omnibus","10.technical-reference\u002F50.python-omnibus",[629,632],{"title":585,"path":630,"stem":631},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Finstall","10.technical-reference\u002F50.python-omnibus\u002F10.install",{"title":589,"path":633,"stem":634},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Fchangelog","10.technical-reference\u002F50.python-omnibus\u002F20.changelog",{"title":636,"path":637,"stem":638,"children":639,"page":42},"Python CDK","\u002Ftechnical-reference\u002Fpython-cdk","10.technical-reference\u002F60.python-cdk",[640,643],{"title":585,"path":641,"stem":642},"\u002Ftechnical-reference\u002Fpython-cdk\u002Finstall","10.technical-reference\u002F60.python-cdk\u002F10.install",{"title":589,"path":644,"stem":645},"\u002Ftechnical-reference\u002Fpython-cdk\u002Fchangelog","10.technical-reference\u002F60.python-cdk\u002F20.changelog",{"title":647,"path":648,"stem":649,"children":650},"Connector Development (CDK)","\u002Fconnector-development","20.connector-development",[651,653,672,705,713,744],{"title":647,"path":648,"stem":652},"20.connector-development\u002Findex",{"title":654,"path":655,"stem":656,"children":657,"page":42},"Getting Started","\u002Fconnector-development\u002Fgetting-started","20.connector-development\u002F10.getting-started",[658,661,665,668],{"title":536,"path":659,"stem":660},"\u002Fconnector-development\u002Fgetting-started\u002Foverview","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":662,"path":663,"stem":664},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":77,"path":666,"stem":667},"\u002Fconnector-development\u002Fgetting-started\u002Finstallation","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":669,"path":670,"stem":671},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":673,"path":674,"stem":675,"children":676,"page":42},"Tutorial","\u002Fconnector-development\u002Ftutorial","20.connector-development\u002F20.tutorial",[677,681,685,689,693,697,701],{"title":678,"path":679,"stem":680},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":682,"path":683,"stem":684},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints","20.connector-development\u002F20.tutorial\u002F10.sila-endpoints",{"title":686,"path":687,"stem":688},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":690,"path":691,"stem":692},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":694,"path":695,"stem":696},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":698,"path":699,"stem":700},"Feature","\u002Fconnector-development\u002Ftutorial\u002Fconnector-structure","20.connector-development\u002F20.tutorial\u002F70.connector-structure",{"title":702,"path":703,"stem":704},"Hardware Communication","\u002Fconnector-development\u002Ftutorial\u002Fhardware-communication","20.connector-development\u002F20.tutorial\u002F90.hardware-communication",{"title":94,"path":706,"stem":707,"children":708,"page":42},"\u002Fconnector-development\u002Fconcepts","20.connector-development\u002F30.concepts",[709],{"title":710,"path":711,"stem":712},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila","20.connector-development\u002F30.concepts\u002Fsila",{"title":187,"path":714,"stem":715,"children":716,"page":42},"\u002Fconnector-development\u002Fguides","20.connector-development\u002F40.guides",[717,721,725,729,733,736,740],{"title":718,"path":719,"stem":720},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration","20.connector-development\u002F40.guides\u002F20.configuration",{"title":722,"path":723,"stem":724},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment","20.connector-development\u002F40.guides\u002F30.deployment",{"title":726,"path":727,"stem":728},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity","20.connector-development\u002F40.guides\u002F40.security",{"title":730,"path":731,"stem":732},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":183,"path":734,"stem":735},"\u002Fconnector-development\u002Fguides\u002Ferror-handling","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":737,"path":738,"stem":739},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":741,"path":742,"stem":743},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting","20.connector-development\u002F40.guides\u002F80.testing",{"title":745,"path":746,"stem":747,"children":748},"References","\u002Fconnector-development\u002Freference","20.connector-development\u002F50.reference\u002Findex",[749],{"title":745,"path":746,"stem":747},{"id":751,"title":527,"body":752,"description":3384,"extension":3385,"links":3386,"meta":3387,"navigation":882,"path":528,"seo":3388,"stem":529,"__hash__":3389},"docs\u002F07.automate\u002F25.guides\u002F80.workflows-api.md",{"type":753,"value":754,"toc":3360},"minimark",[755,759,765,772,777,780,1076,1087,1090,1094,1099,1102,1509,1515,1559,1563,1673,1676,1708,1712,1852,1856,1859,2050,2052,2054,2058,2065,2328,2332,2380,2384,2489,2491,2495,2499,2527,2617,2621,2718,2722,3074,3076,3080,3087,3091,3151,3155,3165,3262,3266,3326,3338,3342,3356],[756,757,758],"p",{},"The UniteLabs REST API lets you manage the full workflow lifecycle programmatically — create and deploy workflows, trigger runs, monitor progress, and interact with paused runs.",[756,760,761],{},[762,763,764],"strong",{},"Prerequisites",[766,767,768],"ul",{},[769,770,771],"li",{},"A UniteLabs account with a tenant ID and API credentials (client ID + secret)",[773,774,776],"h2",{"id":775},"authentication","Authentication",[756,778,779],{},"All API requests require a Bearer token obtained via OAuth2:",[781,782,783,857],"tabs",{},[784,785,788],"div",{"icon":786,"label":787},"i-heroicons-command-line","curl",[789,790,796],"pre",{"className":791,"code":792,"filename":793,"language":794,"meta":795,"style":795},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST \"https:\u002F\u002Fauth.unitelabs.io\u002Frealms\u002F{tenant-id}\u002Fprotocol\u002Fopenid-connect\u002Ftoken\" \\\n  -H \"Content-Type: application\u002Fx-www-form-urlencoded\" \\\n  -d \"grant_type=client_credentials&client_id={client-id}&client_secret={client-secret}\"\n","Terminal","bash","",[797,798,799,828,843],"code",{"__ignoreMap":795},[800,801,804,807,811,814,818,821,824],"span",{"class":802,"line":803},"line",1,[800,805,787],{"class":806},"sBMFI",[800,808,810],{"class":809},"sfazB"," -X",[800,812,813],{"class":809}," POST",[800,815,817],{"class":816},"sMK4o"," \"",[800,819,820],{"class":809},"https:\u002F\u002Fauth.unitelabs.io\u002Frealms\u002F{tenant-id}\u002Fprotocol\u002Fopenid-connect\u002Ftoken",[800,822,823],{"class":816},"\"",[800,825,827],{"class":826},"sTEyZ"," \\\n",[800,829,831,834,836,839,841],{"class":802,"line":830},2,[800,832,833],{"class":809},"  -H",[800,835,817],{"class":816},[800,837,838],{"class":809},"Content-Type: application\u002Fx-www-form-urlencoded",[800,840,823],{"class":816},[800,842,827],{"class":826},[800,844,846,849,851,854],{"class":802,"line":845},3,[800,847,848],{"class":809},"  -d",[800,850,817],{"class":816},[800,852,853],{"class":809},"grant_type=client_credentials&client_id={client-id}&client_secret={client-secret}",[800,855,856],{"class":816},"\"\n",[784,858,861],{"icon":859,"label":860},"i-simple-icons-python","Python",[789,862,867],{"className":863,"code":864,"filename":865,"language":866,"meta":795,"style":795},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import httpx\n\ntoken_response = httpx.post(\n    \"https:\u002F\u002Fauth.unitelabs.io\u002Frealms\u002F{tenant-id}\u002Fprotocol\u002Fopenid-connect\u002Ftoken\",\n    data={\n        \"grant_type\": \"client_credentials\",\n        \"client_id\": \"{client-id}\",\n        \"client_secret\": \"{client-secret}\",\n    },\n)\ntoken = token_response.json()[\"access_token\"]\nheaders = {\"Authorization\": f\"Bearer {token}\"}\n","auth.py","python",[797,868,869,878,884,905,918,928,951,972,993,999,1005,1034],{"__ignoreMap":795},[800,870,871,875],{"class":802,"line":803},[800,872,874],{"class":873},"s7zQu","import",[800,876,877],{"class":826}," httpx\n",[800,879,880],{"class":802,"line":830},[800,881,883],{"emptyLinePlaceholder":882},true,"\n",[800,885,886,889,892,895,898,902],{"class":802,"line":845},[800,887,888],{"class":826},"token_response ",[800,890,891],{"class":816},"=",[800,893,894],{"class":826}," httpx",[800,896,897],{"class":816},".",[800,899,901],{"class":900},"s2Zo4","post",[800,903,904],{"class":816},"(\n",[800,906,908,911,913,915],{"class":802,"line":907},4,[800,909,910],{"class":816},"    \"",[800,912,820],{"class":809},[800,914,823],{"class":816},[800,916,917],{"class":816},",\n",[800,919,921,925],{"class":802,"line":920},5,[800,922,924],{"class":923},"sHdIc","    data",[800,926,927],{"class":816},"={\n",[800,929,931,934,937,939,942,944,947,949],{"class":802,"line":930},6,[800,932,933],{"class":816},"        \"",[800,935,936],{"class":809},"grant_type",[800,938,823],{"class":816},[800,940,941],{"class":816},":",[800,943,817],{"class":816},[800,945,946],{"class":809},"client_credentials",[800,948,823],{"class":816},[800,950,917],{"class":816},[800,952,954,956,959,961,963,965,968,970],{"class":802,"line":953},7,[800,955,933],{"class":816},[800,957,958],{"class":809},"client_id",[800,960,823],{"class":816},[800,962,941],{"class":816},[800,964,817],{"class":816},[800,966,967],{"class":809},"{client-id}",[800,969,823],{"class":816},[800,971,917],{"class":816},[800,973,975,977,980,982,984,986,989,991],{"class":802,"line":974},8,[800,976,933],{"class":816},[800,978,979],{"class":809},"client_secret",[800,981,823],{"class":816},[800,983,941],{"class":816},[800,985,817],{"class":816},[800,987,988],{"class":809},"{client-secret}",[800,990,823],{"class":816},[800,992,917],{"class":816},[800,994,996],{"class":802,"line":995},9,[800,997,998],{"class":816},"    },\n",[800,1000,1002],{"class":802,"line":1001},10,[800,1003,1004],{"class":816},")\n",[800,1006,1008,1011,1013,1016,1018,1021,1024,1026,1029,1031],{"class":802,"line":1007},11,[800,1009,1010],{"class":826},"token ",[800,1012,891],{"class":816},[800,1014,1015],{"class":826}," token_response",[800,1017,897],{"class":816},[800,1019,1020],{"class":900},"json",[800,1022,1023],{"class":816},"()[",[800,1025,823],{"class":816},[800,1027,1028],{"class":809},"access_token",[800,1030,823],{"class":816},[800,1032,1033],{"class":816},"]\n",[800,1035,1037,1040,1042,1045,1047,1050,1052,1054,1058,1061,1065,1068,1071,1073],{"class":802,"line":1036},12,[800,1038,1039],{"class":826},"headers ",[800,1041,891],{"class":816},[800,1043,1044],{"class":816}," {",[800,1046,823],{"class":816},[800,1048,1049],{"class":809},"Authorization",[800,1051,823],{"class":816},[800,1053,941],{"class":816},[800,1055,1057],{"class":1056},"spNyl"," f",[800,1059,1060],{"class":809},"\"Bearer ",[800,1062,1064],{"class":1063},"sbssI","{",[800,1066,1067],{"class":826},"token",[800,1069,1070],{"class":1063},"}",[800,1072,823],{"class":809},[800,1074,1075],{"class":816},"}\n",[756,1077,1078,1079,1082,1083,1086],{},"All examples below assume ",[797,1080,1081],{},"BASE_URL = \"https:\u002F\u002Fapi.unitelabs.io\u002F{tenant-id}\u002Fv1\""," and ",[797,1084,1085],{},"headers"," set as above.",[1088,1089],"hr",{},[773,1091,1093],{"id":1092},"workflows","Workflows",[1095,1096,1098],"h3",{"id":1097},"create-a-workflow","Create a workflow",[756,1100,1101],{},"Register a new workflow. Upload files separately or as a ZIP in one shot.",[781,1103,1104,1209,1287],{},[784,1105,1107],{"icon":786,"label":1106},"JSON body",[789,1108,1110],{"className":791,"code":1109,"filename":793,"language":794,"meta":795,"style":795},"curl -X POST \"$BASE_URL\u002Fworkflows\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"plate-qc-pipeline\",\n    \"description\": \"QC check before dispensing\",\n    \"entrypoint\": \"workflow.py:entrypoint\",\n    \"dependencies\": \"pandas,httpx\",\n    \"tags\": [\"qc\", \"production\"],\n    \"enabled\": true\n  }'\n",[797,1111,1112,1132,1148,1161,1171,1176,1181,1186,1191,1196,1201],{"__ignoreMap":795},[800,1113,1114,1116,1118,1120,1122,1125,1128,1130],{"class":802,"line":803},[800,1115,787],{"class":806},[800,1117,810],{"class":809},[800,1119,813],{"class":809},[800,1121,817],{"class":816},[800,1123,1124],{"class":826},"$BASE_URL",[800,1126,1127],{"class":809},"\u002Fworkflows",[800,1129,823],{"class":816},[800,1131,827],{"class":826},[800,1133,1134,1136,1138,1141,1144,1146],{"class":802,"line":830},[800,1135,833],{"class":809},[800,1137,817],{"class":816},[800,1139,1140],{"class":809},"Authorization: Bearer ",[800,1142,1143],{"class":826},"$TOKEN",[800,1145,823],{"class":816},[800,1147,827],{"class":826},[800,1149,1150,1152,1154,1157,1159],{"class":802,"line":845},[800,1151,833],{"class":809},[800,1153,817],{"class":816},[800,1155,1156],{"class":809},"Content-Type: application\u002Fjson",[800,1158,823],{"class":816},[800,1160,827],{"class":826},[800,1162,1163,1165,1168],{"class":802,"line":907},[800,1164,848],{"class":809},[800,1166,1167],{"class":816}," '",[800,1169,1170],{"class":809},"{\n",[800,1172,1173],{"class":802,"line":920},[800,1174,1175],{"class":809},"    \"name\": \"plate-qc-pipeline\",\n",[800,1177,1178],{"class":802,"line":930},[800,1179,1180],{"class":809},"    \"description\": \"QC check before dispensing\",\n",[800,1182,1183],{"class":802,"line":953},[800,1184,1185],{"class":809},"    \"entrypoint\": \"workflow.py:entrypoint\",\n",[800,1187,1188],{"class":802,"line":974},[800,1189,1190],{"class":809},"    \"dependencies\": \"pandas,httpx\",\n",[800,1192,1193],{"class":802,"line":995},[800,1194,1195],{"class":809},"    \"tags\": [\"qc\", \"production\"],\n",[800,1197,1198],{"class":802,"line":1001},[800,1199,1200],{"class":809},"    \"enabled\": true\n",[800,1202,1203,1206],{"class":802,"line":1007},[800,1204,1205],{"class":809},"  }",[800,1207,1208],{"class":816},"'\n",[784,1210,1212],{"icon":786,"label":1211},"ZIP upload",[789,1213,1215],{"className":791,"code":1214,"filename":793,"language":794,"meta":795,"style":795},"curl -X POST \"$BASE_URL\u002Fworkflows\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"name=plate-qc-pipeline\" \\\n  -F \"entrypoint=workflow.py:entrypoint\" \\\n  -F \"file=@workflow.zip\"\n",[797,1216,1217,1235,1249,1263,1276],{"__ignoreMap":795},[800,1218,1219,1221,1223,1225,1227,1229,1231,1233],{"class":802,"line":803},[800,1220,787],{"class":806},[800,1222,810],{"class":809},[800,1224,813],{"class":809},[800,1226,817],{"class":816},[800,1228,1124],{"class":826},[800,1230,1127],{"class":809},[800,1232,823],{"class":816},[800,1234,827],{"class":826},[800,1236,1237,1239,1241,1243,1245,1247],{"class":802,"line":830},[800,1238,833],{"class":809},[800,1240,817],{"class":816},[800,1242,1140],{"class":809},[800,1244,1143],{"class":826},[800,1246,823],{"class":816},[800,1248,827],{"class":826},[800,1250,1251,1254,1256,1259,1261],{"class":802,"line":845},[800,1252,1253],{"class":809},"  -F",[800,1255,817],{"class":816},[800,1257,1258],{"class":809},"name=plate-qc-pipeline",[800,1260,823],{"class":816},[800,1262,827],{"class":826},[800,1264,1265,1267,1269,1272,1274],{"class":802,"line":907},[800,1266,1253],{"class":809},[800,1268,817],{"class":816},[800,1270,1271],{"class":809},"entrypoint=workflow.py:entrypoint",[800,1273,823],{"class":816},[800,1275,827],{"class":826},[800,1277,1278,1280,1282,1285],{"class":802,"line":920},[800,1279,1253],{"class":809},[800,1281,817],{"class":816},[800,1283,1284],{"class":809},"file=@workflow.zip",[800,1286,856],{"class":816},[784,1288,1289],{"icon":859,"label":860},[789,1290,1293],{"className":863,"code":1291,"filename":1292,"language":866,"meta":795,"style":795},"response = httpx.post(\n    f\"{BASE_URL}\u002Fworkflows\",\n    headers=headers,\n    json={\n        \"name\": \"plate-qc-pipeline\",\n        \"description\": \"QC check before dispensing\",\n        \"entrypoint\": \"workflow.py:entrypoint\",\n        \"dependencies\": \"pandas,httpx\",\n        \"tags\": [\"qc\", \"production\"],\n        \"enabled\": True,\n    },\n)\nworkflow_id = response.json()[\"id\"]\n","create_workflow.py",[797,1294,1295,1310,1329,1340,1347,1367,1387,1407,1427,1461,1475,1479,1483],{"__ignoreMap":795},[800,1296,1297,1300,1302,1304,1306,1308],{"class":802,"line":803},[800,1298,1299],{"class":826},"response ",[800,1301,891],{"class":816},[800,1303,894],{"class":826},[800,1305,897],{"class":816},[800,1307,901],{"class":900},[800,1309,904],{"class":816},[800,1311,1312,1315,1317,1319,1322,1324,1327],{"class":802,"line":830},[800,1313,1314],{"class":1056},"    f",[800,1316,823],{"class":809},[800,1318,1064],{"class":1063},[800,1320,1321],{"class":900},"BASE_URL",[800,1323,1070],{"class":1063},[800,1325,1326],{"class":809},"\u002Fworkflows\"",[800,1328,917],{"class":816},[800,1330,1331,1334,1336,1338],{"class":802,"line":845},[800,1332,1333],{"class":923},"    headers",[800,1335,891],{"class":816},[800,1337,1085],{"class":900},[800,1339,917],{"class":816},[800,1341,1342,1345],{"class":802,"line":907},[800,1343,1344],{"class":923},"    json",[800,1346,927],{"class":816},[800,1348,1349,1351,1354,1356,1358,1360,1363,1365],{"class":802,"line":920},[800,1350,933],{"class":816},[800,1352,1353],{"class":809},"name",[800,1355,823],{"class":816},[800,1357,941],{"class":816},[800,1359,817],{"class":816},[800,1361,1362],{"class":809},"plate-qc-pipeline",[800,1364,823],{"class":816},[800,1366,917],{"class":816},[800,1368,1369,1371,1374,1376,1378,1380,1383,1385],{"class":802,"line":930},[800,1370,933],{"class":816},[800,1372,1373],{"class":809},"description",[800,1375,823],{"class":816},[800,1377,941],{"class":816},[800,1379,817],{"class":816},[800,1381,1382],{"class":809},"QC check before dispensing",[800,1384,823],{"class":816},[800,1386,917],{"class":816},[800,1388,1389,1391,1394,1396,1398,1400,1403,1405],{"class":802,"line":953},[800,1390,933],{"class":816},[800,1392,1393],{"class":809},"entrypoint",[800,1395,823],{"class":816},[800,1397,941],{"class":816},[800,1399,817],{"class":816},[800,1401,1402],{"class":809},"workflow.py:entrypoint",[800,1404,823],{"class":816},[800,1406,917],{"class":816},[800,1408,1409,1411,1414,1416,1418,1420,1423,1425],{"class":802,"line":974},[800,1410,933],{"class":816},[800,1412,1413],{"class":809},"dependencies",[800,1415,823],{"class":816},[800,1417,941],{"class":816},[800,1419,817],{"class":816},[800,1421,1422],{"class":809},"pandas,httpx",[800,1424,823],{"class":816},[800,1426,917],{"class":816},[800,1428,1429,1431,1434,1436,1438,1441,1443,1446,1448,1451,1453,1456,1458],{"class":802,"line":995},[800,1430,933],{"class":816},[800,1432,1433],{"class":809},"tags",[800,1435,823],{"class":816},[800,1437,941],{"class":816},[800,1439,1440],{"class":816}," [",[800,1442,823],{"class":816},[800,1444,1445],{"class":809},"qc",[800,1447,823],{"class":816},[800,1449,1450],{"class":816},",",[800,1452,817],{"class":816},[800,1454,1455],{"class":809},"production",[800,1457,823],{"class":816},[800,1459,1460],{"class":816},"],\n",[800,1462,1463,1465,1468,1470,1472],{"class":802,"line":1001},[800,1464,933],{"class":816},[800,1466,1467],{"class":809},"enabled",[800,1469,823],{"class":816},[800,1471,941],{"class":816},[800,1473,1474],{"class":816}," True,\n",[800,1476,1477],{"class":802,"line":1007},[800,1478,998],{"class":816},[800,1480,1481],{"class":802,"line":1036},[800,1482,1004],{"class":816},[800,1484,1486,1489,1491,1494,1496,1498,1500,1502,1505,1507],{"class":802,"line":1485},13,[800,1487,1488],{"class":826},"workflow_id ",[800,1490,891],{"class":816},[800,1492,1493],{"class":826}," response",[800,1495,897],{"class":816},[800,1497,1020],{"class":900},[800,1499,1023],{"class":816},[800,1501,823],{"class":816},[800,1503,1504],{"class":809},"id",[800,1506,823],{"class":816},[800,1508,1033],{"class":816},[756,1510,1511,1512,941],{},"Response ",[797,1513,1514],{},"201",[789,1516,1519],{"className":1517,"code":1518,"language":1020,"meta":795,"style":795},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"id\": \"d81023e8-87ab-4c9e-8394-0fc10ab562f3\",\n  \"name\": \"plate-qc-pipeline\",\n  \"entrypoint\": \"workflow.py:entrypoint\",\n  \"dependencies\": \"pandas,httpx\",\n  \"tags\": [\"qc\", \"production\"],\n  \"enabled\": true\n}\n",[797,1520,1521,1525,1530,1535,1540,1545,1550,1555],{"__ignoreMap":795},[800,1522,1523],{"class":802,"line":803},[800,1524,1170],{},[800,1526,1527],{"class":802,"line":830},[800,1528,1529],{},"  \"id\": \"d81023e8-87ab-4c9e-8394-0fc10ab562f3\",\n",[800,1531,1532],{"class":802,"line":845},[800,1533,1534],{},"  \"name\": \"plate-qc-pipeline\",\n",[800,1536,1537],{"class":802,"line":907},[800,1538,1539],{},"  \"entrypoint\": \"workflow.py:entrypoint\",\n",[800,1541,1542],{"class":802,"line":920},[800,1543,1544],{},"  \"dependencies\": \"pandas,httpx\",\n",[800,1546,1547],{"class":802,"line":930},[800,1548,1549],{},"  \"tags\": [\"qc\", \"production\"],\n",[800,1551,1552],{"class":802,"line":953},[800,1553,1554],{},"  \"enabled\": true\n",[800,1556,1557],{"class":802,"line":974},[800,1558,1075],{},[1095,1560,1562],{"id":1561},"list-workflows","List workflows",[789,1564,1566],{"className":791,"code":1565,"filename":793,"language":794,"meta":795,"style":795},"# Most recent 10, sorted by creation date\ncurl \"$BASE_URL\u002Fworkflows?_take=10&_sort=-createdAt\" \\\n  -H \"Authorization: Bearer $TOKEN\"\n\n# Filter by name (partial match)\ncurl \"$BASE_URL\u002Fworkflows?name[like]=plate\" \\\n  -H \"Authorization: Bearer $TOKEN\"\n\n# Include recent runs in the response\ncurl \"$BASE_URL\u002Fworkflows?_include[]=recentRuns\" \\\n  -H \"Authorization: Bearer $TOKEN\"\n",[797,1567,1568,1574,1589,1601,1605,1610,1625,1637,1641,1646,1661],{"__ignoreMap":795},[800,1569,1570],{"class":802,"line":803},[800,1571,1573],{"class":1572},"sHwdD","# Most recent 10, sorted by creation date\n",[800,1575,1576,1578,1580,1582,1585,1587],{"class":802,"line":830},[800,1577,787],{"class":806},[800,1579,817],{"class":816},[800,1581,1124],{"class":826},[800,1583,1584],{"class":809},"\u002Fworkflows?_take=10&_sort=-createdAt",[800,1586,823],{"class":816},[800,1588,827],{"class":826},[800,1590,1591,1593,1595,1597,1599],{"class":802,"line":845},[800,1592,833],{"class":809},[800,1594,817],{"class":816},[800,1596,1140],{"class":809},[800,1598,1143],{"class":826},[800,1600,856],{"class":816},[800,1602,1603],{"class":802,"line":907},[800,1604,883],{"emptyLinePlaceholder":882},[800,1606,1607],{"class":802,"line":920},[800,1608,1609],{"class":1572},"# Filter by name (partial match)\n",[800,1611,1612,1614,1616,1618,1621,1623],{"class":802,"line":930},[800,1613,787],{"class":806},[800,1615,817],{"class":816},[800,1617,1124],{"class":826},[800,1619,1620],{"class":809},"\u002Fworkflows?name[like]=plate",[800,1622,823],{"class":816},[800,1624,827],{"class":826},[800,1626,1627,1629,1631,1633,1635],{"class":802,"line":953},[800,1628,833],{"class":809},[800,1630,817],{"class":816},[800,1632,1140],{"class":809},[800,1634,1143],{"class":826},[800,1636,856],{"class":816},[800,1638,1639],{"class":802,"line":974},[800,1640,883],{"emptyLinePlaceholder":882},[800,1642,1643],{"class":802,"line":995},[800,1644,1645],{"class":1572},"# Include recent runs in the response\n",[800,1647,1648,1650,1652,1654,1657,1659],{"class":802,"line":1001},[800,1649,787],{"class":806},[800,1651,817],{"class":816},[800,1653,1124],{"class":826},[800,1655,1656],{"class":809},"\u002Fworkflows?_include[]=recentRuns",[800,1658,823],{"class":816},[800,1660,827],{"class":826},[800,1662,1663,1665,1667,1669,1671],{"class":802,"line":1007},[800,1664,833],{"class":809},[800,1666,817],{"class":816},[800,1668,1140],{"class":809},[800,1670,1143],{"class":826},[800,1672,856],{"class":816},[756,1674,1675],{},"Paginate using the cursor from the previous response:",[789,1677,1679],{"className":791,"code":1678,"filename":793,"language":794,"meta":795,"style":795},"curl \"$BASE_URL\u002Fworkflows?_take=20&_cursor=eyJpZCI6Ii4uLiJ9\" \\\n  -H \"Authorization: Bearer $TOKEN\"\n",[797,1680,1681,1696],{"__ignoreMap":795},[800,1682,1683,1685,1687,1689,1692,1694],{"class":802,"line":803},[800,1684,787],{"class":806},[800,1686,817],{"class":816},[800,1688,1124],{"class":826},[800,1690,1691],{"class":809},"\u002Fworkflows?_take=20&_cursor=eyJpZCI6Ii4uLiJ9",[800,1693,823],{"class":816},[800,1695,827],{"class":826},[800,1697,1698,1700,1702,1704,1706],{"class":802,"line":830},[800,1699,833],{"class":809},[800,1701,817],{"class":816},[800,1703,1140],{"class":809},[800,1705,1143],{"class":826},[800,1707,856],{"class":816},[1095,1709,1711],{"id":1710},"get-update-delete","Get, update, delete",[789,1713,1715],{"className":791,"code":1714,"filename":793,"language":794,"meta":795,"style":795},"# Get\ncurl \"$BASE_URL\u002Fworkflows\u002F{workflowId}\" -H \"Authorization: Bearer $TOKEN\"\n\n# Update (partial — only include fields to change)\ncurl -X PATCH \"$BASE_URL\u002Fworkflows\u002F{workflowId}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"enabled\": false, \"tags\": [\"qc\", \"staging\"]}'\n\n# Delete\ncurl -X DELETE \"$BASE_URL\u002Fworkflows\u002F{workflowId}\" -H \"Authorization: Bearer $TOKEN\"\n# Returns 204 No Content\n",[797,1716,1717,1722,1746,1750,1755,1774,1788,1800,1811,1815,1820,1847],{"__ignoreMap":795},[800,1718,1719],{"class":802,"line":803},[800,1720,1721],{"class":1572},"# Get\n",[800,1723,1724,1726,1728,1730,1733,1735,1738,1740,1742,1744],{"class":802,"line":830},[800,1725,787],{"class":806},[800,1727,817],{"class":816},[800,1729,1124],{"class":826},[800,1731,1732],{"class":809},"\u002Fworkflows\u002F{workflowId}",[800,1734,823],{"class":816},[800,1736,1737],{"class":809}," -H",[800,1739,817],{"class":816},[800,1741,1140],{"class":809},[800,1743,1143],{"class":826},[800,1745,856],{"class":816},[800,1747,1748],{"class":802,"line":845},[800,1749,883],{"emptyLinePlaceholder":882},[800,1751,1752],{"class":802,"line":907},[800,1753,1754],{"class":1572},"# Update (partial — only include fields to change)\n",[800,1756,1757,1759,1761,1764,1766,1768,1770,1772],{"class":802,"line":920},[800,1758,787],{"class":806},[800,1760,810],{"class":809},[800,1762,1763],{"class":809}," PATCH",[800,1765,817],{"class":816},[800,1767,1124],{"class":826},[800,1769,1732],{"class":809},[800,1771,823],{"class":816},[800,1773,827],{"class":826},[800,1775,1776,1778,1780,1782,1784,1786],{"class":802,"line":930},[800,1777,833],{"class":809},[800,1779,817],{"class":816},[800,1781,1140],{"class":809},[800,1783,1143],{"class":826},[800,1785,823],{"class":816},[800,1787,827],{"class":826},[800,1789,1790,1792,1794,1796,1798],{"class":802,"line":953},[800,1791,833],{"class":809},[800,1793,817],{"class":816},[800,1795,1156],{"class":809},[800,1797,823],{"class":816},[800,1799,827],{"class":826},[800,1801,1802,1804,1806,1809],{"class":802,"line":974},[800,1803,848],{"class":809},[800,1805,1167],{"class":816},[800,1807,1808],{"class":809},"{\"enabled\": false, \"tags\": [\"qc\", \"staging\"]}",[800,1810,1208],{"class":816},[800,1812,1813],{"class":802,"line":995},[800,1814,883],{"emptyLinePlaceholder":882},[800,1816,1817],{"class":802,"line":1001},[800,1818,1819],{"class":1572},"# Delete\n",[800,1821,1822,1824,1826,1829,1831,1833,1835,1837,1839,1841,1843,1845],{"class":802,"line":1007},[800,1823,787],{"class":806},[800,1825,810],{"class":809},[800,1827,1828],{"class":809}," DELETE",[800,1830,817],{"class":816},[800,1832,1124],{"class":826},[800,1834,1732],{"class":809},[800,1836,823],{"class":816},[800,1838,1737],{"class":809},[800,1840,817],{"class":816},[800,1842,1140],{"class":809},[800,1844,1143],{"class":826},[800,1846,856],{"class":816},[800,1848,1849],{"class":802,"line":1036},[800,1850,1851],{"class":1572},"# Returns 204 No Content\n",[1095,1853,1855],{"id":1854},"upload-workflow-files","Upload workflow files",[756,1857,1858],{},"Add or update individual source files without redeploying the whole workflow:",[789,1860,1862],{"className":791,"code":1861,"filename":793,"language":794,"meta":795,"style":795},"# Create a file\ncurl -X POST \"$BASE_URL\u002Fworkflows\u002F{workflowId}\u002Ffiles\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"workflow.py\",\n    \"path\": \"\u002F\",\n    \"type\": \"file\",\n    \"content\": \"from unitelabs.sdk.automate import workflow\\n\\n@workflow  # workflow\\nasync def entrypoint():\\n    pass\\n\"\n  }'\n\n# Update a file\ncurl -X PATCH \"$BASE_URL\u002Fworkflows\u002F{workflowId}\u002Ffiles\u002Fworkflow.py\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"content\": \"# updated content\\n\"}'\n\n# List all files\ncurl \"$BASE_URL\u002Fworkflows\u002F{workflowId}\u002Ffiles\" -H \"Authorization: Bearer $TOKEN\"\n",[797,1863,1864,1869,1888,1902,1914,1922,1927,1932,1937,1942,1948,1952,1957,1976,1991,2004,2016,2021,2027],{"__ignoreMap":795},[800,1865,1866],{"class":802,"line":803},[800,1867,1868],{"class":1572},"# Create a file\n",[800,1870,1871,1873,1875,1877,1879,1881,1884,1886],{"class":802,"line":830},[800,1872,787],{"class":806},[800,1874,810],{"class":809},[800,1876,813],{"class":809},[800,1878,817],{"class":816},[800,1880,1124],{"class":826},[800,1882,1883],{"class":809},"\u002Fworkflows\u002F{workflowId}\u002Ffiles",[800,1885,823],{"class":816},[800,1887,827],{"class":826},[800,1889,1890,1892,1894,1896,1898,1900],{"class":802,"line":845},[800,1891,833],{"class":809},[800,1893,817],{"class":816},[800,1895,1140],{"class":809},[800,1897,1143],{"class":826},[800,1899,823],{"class":816},[800,1901,827],{"class":826},[800,1903,1904,1906,1908,1910,1912],{"class":802,"line":907},[800,1905,833],{"class":809},[800,1907,817],{"class":816},[800,1909,1156],{"class":809},[800,1911,823],{"class":816},[800,1913,827],{"class":826},[800,1915,1916,1918,1920],{"class":802,"line":920},[800,1917,848],{"class":809},[800,1919,1167],{"class":816},[800,1921,1170],{"class":809},[800,1923,1924],{"class":802,"line":930},[800,1925,1926],{"class":809},"    \"name\": \"workflow.py\",\n",[800,1928,1929],{"class":802,"line":953},[800,1930,1931],{"class":809},"    \"path\": \"\u002F\",\n",[800,1933,1934],{"class":802,"line":974},[800,1935,1936],{"class":809},"    \"type\": \"file\",\n",[800,1938,1939],{"class":802,"line":995},[800,1940,1941],{"class":809},"    \"content\": \"from unitelabs.sdk.automate import workflow\\n\\n@workflow  # workflow\\nasync def entrypoint():\\n    pass\\n\"\n",[800,1943,1944,1946],{"class":802,"line":1001},[800,1945,1205],{"class":809},[800,1947,1208],{"class":816},[800,1949,1950],{"class":802,"line":1007},[800,1951,883],{"emptyLinePlaceholder":882},[800,1953,1954],{"class":802,"line":1036},[800,1955,1956],{"class":1572},"# Update a file\n",[800,1958,1959,1961,1963,1965,1967,1969,1972,1974],{"class":802,"line":1485},[800,1960,787],{"class":806},[800,1962,810],{"class":809},[800,1964,1763],{"class":809},[800,1966,817],{"class":816},[800,1968,1124],{"class":826},[800,1970,1971],{"class":809},"\u002Fworkflows\u002F{workflowId}\u002Ffiles\u002Fworkflow.py",[800,1973,823],{"class":816},[800,1975,827],{"class":826},[800,1977,1979,1981,1983,1985,1987,1989],{"class":802,"line":1978},14,[800,1980,833],{"class":809},[800,1982,817],{"class":816},[800,1984,1140],{"class":809},[800,1986,1143],{"class":826},[800,1988,823],{"class":816},[800,1990,827],{"class":826},[800,1992,1994,1996,1998,2000,2002],{"class":802,"line":1993},15,[800,1995,833],{"class":809},[800,1997,817],{"class":816},[800,1999,1156],{"class":809},[800,2001,823],{"class":816},[800,2003,827],{"class":826},[800,2005,2007,2009,2011,2014],{"class":802,"line":2006},16,[800,2008,848],{"class":809},[800,2010,1167],{"class":816},[800,2012,2013],{"class":809},"{\"content\": \"# updated content\\n\"}",[800,2015,1208],{"class":816},[800,2017,2019],{"class":802,"line":2018},17,[800,2020,883],{"emptyLinePlaceholder":882},[800,2022,2024],{"class":802,"line":2023},18,[800,2025,2026],{"class":1572},"# List all files\n",[800,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048],{"class":802,"line":2029},19,[800,2031,787],{"class":806},[800,2033,817],{"class":816},[800,2035,1124],{"class":826},[800,2037,1883],{"class":809},[800,2039,823],{"class":816},[800,2041,1737],{"class":809},[800,2043,817],{"class":816},[800,2045,1140],{"class":809},[800,2047,1143],{"class":826},[800,2049,856],{"class":816},[1088,2051],{},[773,2053,472],{"id":450},[1095,2055,2057],{"id":2056},"create-a-run","Create a run",[756,2059,2060,2061,2064],{},"Start a workflow by its ID. Pass ",[797,2062,2063],{},"parameters"," to supply runtime values to the workflow function:",[781,2066,2067,2158],{},[784,2068,2069],{"icon":786,"label":787},[789,2070,2072],{"className":791,"code":2071,"filename":793,"language":794,"meta":795,"style":795},"curl -X POST \"$BASE_URL\u002Fworkflows\u002F{workflowId}\u002Fruns\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"QC Run — Plate B3\",\n    \"parameters\": {\n      \"sample_id\": \"B3\",\n      \"min_concentration\": 250.0\n    }\n  }'\n",[797,2073,2074,2093,2107,2119,2127,2132,2137,2142,2147,2152],{"__ignoreMap":795},[800,2075,2076,2078,2080,2082,2084,2086,2089,2091],{"class":802,"line":803},[800,2077,787],{"class":806},[800,2079,810],{"class":809},[800,2081,813],{"class":809},[800,2083,817],{"class":816},[800,2085,1124],{"class":826},[800,2087,2088],{"class":809},"\u002Fworkflows\u002F{workflowId}\u002Fruns",[800,2090,823],{"class":816},[800,2092,827],{"class":826},[800,2094,2095,2097,2099,2101,2103,2105],{"class":802,"line":830},[800,2096,833],{"class":809},[800,2098,817],{"class":816},[800,2100,1140],{"class":809},[800,2102,1143],{"class":826},[800,2104,823],{"class":816},[800,2106,827],{"class":826},[800,2108,2109,2111,2113,2115,2117],{"class":802,"line":845},[800,2110,833],{"class":809},[800,2112,817],{"class":816},[800,2114,1156],{"class":809},[800,2116,823],{"class":816},[800,2118,827],{"class":826},[800,2120,2121,2123,2125],{"class":802,"line":907},[800,2122,848],{"class":809},[800,2124,1167],{"class":816},[800,2126,1170],{"class":809},[800,2128,2129],{"class":802,"line":920},[800,2130,2131],{"class":809},"    \"name\": \"QC Run — Plate B3\",\n",[800,2133,2134],{"class":802,"line":930},[800,2135,2136],{"class":809},"    \"parameters\": {\n",[800,2138,2139],{"class":802,"line":953},[800,2140,2141],{"class":809},"      \"sample_id\": \"B3\",\n",[800,2143,2144],{"class":802,"line":974},[800,2145,2146],{"class":809},"      \"min_concentration\": 250.0\n",[800,2148,2149],{"class":802,"line":995},[800,2150,2151],{"class":809},"    }\n",[800,2153,2154,2156],{"class":802,"line":1001},[800,2155,1205],{"class":809},[800,2157,1208],{"class":816},[784,2159,2160],{"icon":859,"label":860},[789,2161,2164],{"className":863,"code":2162,"filename":2163,"language":866,"meta":795,"style":795},"response = httpx.post(\n    f\"{BASE_URL}\u002Fworkflows\u002F{workflow_id}\u002Fruns\",\n    headers=headers,\n    json={\n        \"name\": \"QC Run — Plate B3\",\n        \"parameters\": {\n            \"sample_id\": \"B3\",\n            \"min_concentration\": 250.0,\n        },\n    },\n)\nrun_id = response.json()[\"id\"]\n","trigger_run.py",[797,2165,2166,2180,2207,2217,2223,2242,2255,2276,2292,2297,2301,2305],{"__ignoreMap":795},[800,2167,2168,2170,2172,2174,2176,2178],{"class":802,"line":803},[800,2169,1299],{"class":826},[800,2171,891],{"class":816},[800,2173,894],{"class":826},[800,2175,897],{"class":816},[800,2177,901],{"class":900},[800,2179,904],{"class":816},[800,2181,2182,2184,2186,2188,2190,2192,2195,2197,2200,2202,2205],{"class":802,"line":830},[800,2183,1314],{"class":1056},[800,2185,823],{"class":809},[800,2187,1064],{"class":1063},[800,2189,1321],{"class":900},[800,2191,1070],{"class":1063},[800,2193,2194],{"class":809},"\u002Fworkflows\u002F",[800,2196,1064],{"class":1063},[800,2198,2199],{"class":900},"workflow_id",[800,2201,1070],{"class":1063},[800,2203,2204],{"class":809},"\u002Fruns\"",[800,2206,917],{"class":816},[800,2208,2209,2211,2213,2215],{"class":802,"line":845},[800,2210,1333],{"class":923},[800,2212,891],{"class":816},[800,2214,1085],{"class":900},[800,2216,917],{"class":816},[800,2218,2219,2221],{"class":802,"line":907},[800,2220,1344],{"class":923},[800,2222,927],{"class":816},[800,2224,2225,2227,2229,2231,2233,2235,2238,2240],{"class":802,"line":920},[800,2226,933],{"class":816},[800,2228,1353],{"class":809},[800,2230,823],{"class":816},[800,2232,941],{"class":816},[800,2234,817],{"class":816},[800,2236,2237],{"class":809},"QC Run — Plate B3",[800,2239,823],{"class":816},[800,2241,917],{"class":816},[800,2243,2244,2246,2248,2250,2252],{"class":802,"line":930},[800,2245,933],{"class":816},[800,2247,2063],{"class":809},[800,2249,823],{"class":816},[800,2251,941],{"class":816},[800,2253,2254],{"class":816}," {\n",[800,2256,2257,2260,2263,2265,2267,2269,2272,2274],{"class":802,"line":953},[800,2258,2259],{"class":816},"            \"",[800,2261,2262],{"class":809},"sample_id",[800,2264,823],{"class":816},[800,2266,941],{"class":816},[800,2268,817],{"class":816},[800,2270,2271],{"class":809},"B3",[800,2273,823],{"class":816},[800,2275,917],{"class":816},[800,2277,2278,2280,2283,2285,2287,2290],{"class":802,"line":974},[800,2279,2259],{"class":816},[800,2281,2282],{"class":809},"min_concentration",[800,2284,823],{"class":816},[800,2286,941],{"class":816},[800,2288,2289],{"class":1063}," 250.0",[800,2291,917],{"class":816},[800,2293,2294],{"class":802,"line":995},[800,2295,2296],{"class":816},"        },\n",[800,2298,2299],{"class":802,"line":1001},[800,2300,998],{"class":816},[800,2302,2303],{"class":802,"line":1007},[800,2304,1004],{"class":816},[800,2306,2307,2310,2312,2314,2316,2318,2320,2322,2324,2326],{"class":802,"line":1036},[800,2308,2309],{"class":826},"run_id ",[800,2311,891],{"class":816},[800,2313,1493],{"class":826},[800,2315,897],{"class":816},[800,2317,1020],{"class":900},[800,2319,1023],{"class":816},[800,2321,823],{"class":816},[800,2323,1504],{"class":809},[800,2325,823],{"class":816},[800,2327,1033],{"class":816},[756,2329,1511,2330,941],{},[797,2331,1514],{},[789,2333,2335],{"className":1517,"code":2334,"language":1020,"meta":795,"style":795},"{\n  \"id\": \"a3bb189e-8bf9-3888-9912-ace4e6543002\",\n  \"workflowId\": \"d81023e8-87ab-4c9e-8394-0fc10ab562f3\",\n  \"name\": \"QC Run — Plate B3\",\n  \"status\": \"SCHEDULED\",\n  \"statusSince\": \"2025-01-15T11:00:00.000Z\",\n  \"parameters\": { \"sample_id\": \"B3\", \"min_concentration\": 250.0 },\n  \"createdAt\": \"2025-01-15T11:00:00.000Z\"\n}\n",[797,2336,2337,2341,2346,2351,2356,2361,2366,2371,2376],{"__ignoreMap":795},[800,2338,2339],{"class":802,"line":803},[800,2340,1170],{},[800,2342,2343],{"class":802,"line":830},[800,2344,2345],{},"  \"id\": \"a3bb189e-8bf9-3888-9912-ace4e6543002\",\n",[800,2347,2348],{"class":802,"line":845},[800,2349,2350],{},"  \"workflowId\": \"d81023e8-87ab-4c9e-8394-0fc10ab562f3\",\n",[800,2352,2353],{"class":802,"line":907},[800,2354,2355],{},"  \"name\": \"QC Run — Plate B3\",\n",[800,2357,2358],{"class":802,"line":920},[800,2359,2360],{},"  \"status\": \"SCHEDULED\",\n",[800,2362,2363],{"class":802,"line":930},[800,2364,2365],{},"  \"statusSince\": \"2025-01-15T11:00:00.000Z\",\n",[800,2367,2368],{"class":802,"line":953},[800,2369,2370],{},"  \"parameters\": { \"sample_id\": \"B3\", \"min_concentration\": 250.0 },\n",[800,2372,2373],{"class":802,"line":974},[800,2374,2375],{},"  \"createdAt\": \"2025-01-15T11:00:00.000Z\"\n",[800,2377,2378],{"class":802,"line":995},[800,2379,1075],{},[1095,2381,2383],{"id":2382},"list-and-get-runs","List and get runs",[789,2385,2387],{"className":791,"code":2386,"filename":793,"language":794,"meta":795,"style":795},"# All runs for a workflow, newest first\ncurl \"$BASE_URL\u002Fworkflows\u002F{workflowId}\u002Fruns?_sort=-createdAt\" \\\n  -H \"Authorization: Bearer $TOKEN\"\n\n# Filter by date range\ncurl \"$BASE_URL\u002Fruns?created_at[gte]=2025-01-01T00:00:00Z&created_at[lte]=2025-01-31T23:59:59Z\" \\\n  -H \"Authorization: Bearer $TOKEN\"\n\n# Get a specific run\ncurl \"$BASE_URL\u002Fruns\u002F{runId}\" -H \"Authorization: Bearer $TOKEN\"\n",[797,2388,2389,2394,2409,2421,2425,2430,2445,2457,2461,2466],{"__ignoreMap":795},[800,2390,2391],{"class":802,"line":803},[800,2392,2393],{"class":1572},"# All runs for a workflow, newest first\n",[800,2395,2396,2398,2400,2402,2405,2407],{"class":802,"line":830},[800,2397,787],{"class":806},[800,2399,817],{"class":816},[800,2401,1124],{"class":826},[800,2403,2404],{"class":809},"\u002Fworkflows\u002F{workflowId}\u002Fruns?_sort=-createdAt",[800,2406,823],{"class":816},[800,2408,827],{"class":826},[800,2410,2411,2413,2415,2417,2419],{"class":802,"line":845},[800,2412,833],{"class":809},[800,2414,817],{"class":816},[800,2416,1140],{"class":809},[800,2418,1143],{"class":826},[800,2420,856],{"class":816},[800,2422,2423],{"class":802,"line":907},[800,2424,883],{"emptyLinePlaceholder":882},[800,2426,2427],{"class":802,"line":920},[800,2428,2429],{"class":1572},"# Filter by date range\n",[800,2431,2432,2434,2436,2438,2441,2443],{"class":802,"line":930},[800,2433,787],{"class":806},[800,2435,817],{"class":816},[800,2437,1124],{"class":826},[800,2439,2440],{"class":809},"\u002Fruns?created_at[gte]=2025-01-01T00:00:00Z&created_at[lte]=2025-01-31T23:59:59Z",[800,2442,823],{"class":816},[800,2444,827],{"class":826},[800,2446,2447,2449,2451,2453,2455],{"class":802,"line":953},[800,2448,833],{"class":809},[800,2450,817],{"class":816},[800,2452,1140],{"class":809},[800,2454,1143],{"class":826},[800,2456,856],{"class":816},[800,2458,2459],{"class":802,"line":974},[800,2460,883],{"emptyLinePlaceholder":882},[800,2462,2463],{"class":802,"line":995},[800,2464,2465],{"class":1572},"# Get a specific run\n",[800,2467,2468,2470,2472,2474,2477,2479,2481,2483,2485,2487],{"class":802,"line":1001},[800,2469,787],{"class":806},[800,2471,817],{"class":816},[800,2473,1124],{"class":826},[800,2475,2476],{"class":809},"\u002Fruns\u002F{runId}",[800,2478,823],{"class":816},[800,2480,1737],{"class":809},[800,2482,817],{"class":816},[800,2484,1140],{"class":809},[800,2486,1143],{"class":826},[800,2488,856],{"class":816},[1088,2490],{},[773,2492,2494],{"id":2493},"monitoring-a-run","Monitoring a run",[1095,2496,2498],{"id":2497},"check-status","Check status",[789,2500,2502],{"className":791,"code":2501,"filename":793,"language":794,"meta":795,"style":795},"curl \"$BASE_URL\u002Fruns\u002F{runId}\u002Fstatus\" -H \"Authorization: Bearer $TOKEN\"\n",[797,2503,2504],{"__ignoreMap":795},[800,2505,2506,2508,2510,2512,2515,2517,2519,2521,2523,2525],{"class":802,"line":803},[800,2507,787],{"class":806},[800,2509,817],{"class":816},[800,2511,1124],{"class":826},[800,2513,2514],{"class":809},"\u002Fruns\u002F{runId}\u002Fstatus",[800,2516,823],{"class":816},[800,2518,1737],{"class":809},[800,2520,817],{"class":816},[800,2522,1140],{"class":809},[800,2524,1143],{"class":826},[800,2526,856],{"class":816},[2528,2529,2530,2543],"table",{},[2531,2532,2533],"thead",{},[2534,2535,2536,2540],"tr",{},[2537,2538,2539],"th",{},"Status",[2537,2541,2542],{},"Description",[2544,2545,2546,2557,2567,2577,2587,2597,2607],"tbody",{},[2534,2547,2548,2554],{},[2549,2550,2551],"td",{},[797,2552,2553],{},"SCHEDULED",[2549,2555,2556],{},"Queued, not yet started",[2534,2558,2559,2564],{},[2549,2560,2561],{},[797,2562,2563],{},"RUNNING",[2549,2565,2566],{},"Actively executing",[2534,2568,2569,2574],{},[2549,2570,2571],{},[797,2572,2573],{},"PAUSED",[2549,2575,2576],{},"Suspended — waiting for operator action",[2534,2578,2579,2584],{},[2549,2580,2581],{},[797,2582,2583],{},"AWAITING_INPUT",[2549,2585,2586],{},"Suspended — waiting for structured data input",[2534,2588,2589,2594],{},[2549,2590,2591],{},[797,2592,2593],{},"COMPLETED",[2549,2595,2596],{},"Finished successfully",[2534,2598,2599,2604],{},[2549,2600,2601],{},[797,2602,2603],{},"FAILED",[2549,2605,2606],{},"Finished with an unhandled error",[2534,2608,2609,2614],{},[2549,2610,2611],{},[797,2612,2613],{},"CANCELLED",[2549,2615,2616],{},"Cancelled before completion",[1095,2618,2620],{"id":2619},"execution-timeline-and-logs","Execution timeline and logs",[789,2622,2624],{"className":791,"code":2623,"filename":793,"language":794,"meta":795,"style":795},"# Phase and step timeline with timestamps\ncurl \"$BASE_URL\u002Fruns\u002F{runId}\u002Ftimeline\" -H \"Authorization: Bearer $TOKEN\"\n\n# Execution logs\ncurl \"$BASE_URL\u002Fruns\u002F{runId}\u002Flogs\" -H \"Authorization: Bearer $TOKEN\"\n\n# Artifacts produced by the run\ncurl \"$BASE_URL\u002Fruns\u002F{runId}\u002Fartifacts\" -H \"Authorization: Bearer $TOKEN\"\n",[797,2625,2626,2631,2654,2658,2663,2686,2690,2695],{"__ignoreMap":795},[800,2627,2628],{"class":802,"line":803},[800,2629,2630],{"class":1572},"# Phase and step timeline with timestamps\n",[800,2632,2633,2635,2637,2639,2642,2644,2646,2648,2650,2652],{"class":802,"line":830},[800,2634,787],{"class":806},[800,2636,817],{"class":816},[800,2638,1124],{"class":826},[800,2640,2641],{"class":809},"\u002Fruns\u002F{runId}\u002Ftimeline",[800,2643,823],{"class":816},[800,2645,1737],{"class":809},[800,2647,817],{"class":816},[800,2649,1140],{"class":809},[800,2651,1143],{"class":826},[800,2653,856],{"class":816},[800,2655,2656],{"class":802,"line":845},[800,2657,883],{"emptyLinePlaceholder":882},[800,2659,2660],{"class":802,"line":907},[800,2661,2662],{"class":1572},"# Execution logs\n",[800,2664,2665,2667,2669,2671,2674,2676,2678,2680,2682,2684],{"class":802,"line":920},[800,2666,787],{"class":806},[800,2668,817],{"class":816},[800,2670,1124],{"class":826},[800,2672,2673],{"class":809},"\u002Fruns\u002F{runId}\u002Flogs",[800,2675,823],{"class":816},[800,2677,1737],{"class":809},[800,2679,817],{"class":816},[800,2681,1140],{"class":809},[800,2683,1143],{"class":826},[800,2685,856],{"class":816},[800,2687,2688],{"class":802,"line":930},[800,2689,883],{"emptyLinePlaceholder":882},[800,2691,2692],{"class":802,"line":953},[800,2693,2694],{"class":1572},"# Artifacts produced by the run\n",[800,2696,2697,2699,2701,2703,2706,2708,2710,2712,2714,2716],{"class":802,"line":974},[800,2698,787],{"class":806},[800,2700,817],{"class":816},[800,2702,1124],{"class":826},[800,2704,2705],{"class":809},"\u002Fruns\u002F{runId}\u002Fartifacts",[800,2707,823],{"class":816},[800,2709,1737],{"class":809},[800,2711,817],{"class":816},[800,2713,1140],{"class":809},[800,2715,1143],{"class":826},[800,2717,856],{"class":816},[1095,2719,2721],{"id":2720},"poll-until-complete","Poll until complete",[789,2723,2726],{"className":863,"code":2724,"filename":2725,"language":866,"meta":795,"style":795},"import time\nimport httpx\n\ndef wait_for_run(run_id: str, headers: dict, base_url: str, poll_interval: int = 5) -> dict:\n    terminal = {\"COMPLETED\", \"FAILED\", \"CANCELLED\"}\n    while True:\n        run = httpx.get(f\"{base_url}\u002Fruns\u002F{run_id}\", headers=headers).json()\n        print(f\"[{run['statusSince']}] {run['status']}\")\n        if run[\"status\"] in terminal:\n            return run\n        time.sleep(poll_interval)\n\nrun = wait_for_run(run_id, headers, BASE_URL)\nprint(f\"Run finished: {run['status']}\")\n","poll.py",[797,2727,2728,2735,2741,2745,2810,2843,2851,2906,2963,2989,2997,3014,3018,3042],{"__ignoreMap":795},[800,2729,2730,2732],{"class":802,"line":803},[800,2731,874],{"class":873},[800,2733,2734],{"class":826}," time\n",[800,2736,2737,2739],{"class":802,"line":830},[800,2738,874],{"class":873},[800,2740,877],{"class":826},[800,2742,2743],{"class":802,"line":845},[800,2744,883],{"emptyLinePlaceholder":882},[800,2746,2747,2750,2753,2756,2759,2761,2764,2766,2769,2771,2774,2776,2779,2781,2783,2785,2788,2790,2793,2796,2799,2802,2805,2807],{"class":802,"line":907},[800,2748,2749],{"class":1056},"def",[800,2751,2752],{"class":900}," wait_for_run",[800,2754,2755],{"class":816},"(",[800,2757,2758],{"class":923},"run_id",[800,2760,941],{"class":816},[800,2762,2763],{"class":806}," str",[800,2765,1450],{"class":816},[800,2767,2768],{"class":923}," headers",[800,2770,941],{"class":816},[800,2772,2773],{"class":806}," dict",[800,2775,1450],{"class":816},[800,2777,2778],{"class":923}," base_url",[800,2780,941],{"class":816},[800,2782,2763],{"class":806},[800,2784,1450],{"class":816},[800,2786,2787],{"class":923}," poll_interval",[800,2789,941],{"class":816},[800,2791,2792],{"class":806}," int",[800,2794,2795],{"class":816}," =",[800,2797,2798],{"class":1063}," 5",[800,2800,2801],{"class":816},")",[800,2803,2804],{"class":816}," ->",[800,2806,2773],{"class":806},[800,2808,2809],{"class":816},":\n",[800,2811,2812,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841],{"class":802,"line":920},[800,2813,2814],{"class":826},"    terminal ",[800,2816,891],{"class":816},[800,2818,1044],{"class":816},[800,2820,823],{"class":816},[800,2822,2593],{"class":809},[800,2824,823],{"class":816},[800,2826,1450],{"class":816},[800,2828,817],{"class":816},[800,2830,2603],{"class":809},[800,2832,823],{"class":816},[800,2834,1450],{"class":816},[800,2836,817],{"class":816},[800,2838,2613],{"class":809},[800,2840,823],{"class":816},[800,2842,1075],{"class":816},[800,2844,2845,2848],{"class":802,"line":930},[800,2846,2847],{"class":873},"    while",[800,2849,2850],{"class":816}," True:\n",[800,2852,2853,2856,2858,2860,2862,2865,2867,2870,2872,2874,2877,2879,2882,2884,2886,2888,2890,2892,2894,2896,2898,2901,2903],{"class":802,"line":953},[800,2854,2855],{"class":826},"        run ",[800,2857,891],{"class":816},[800,2859,894],{"class":826},[800,2861,897],{"class":816},[800,2863,2864],{"class":900},"get",[800,2866,2755],{"class":816},[800,2868,2869],{"class":1056},"f",[800,2871,823],{"class":809},[800,2873,1064],{"class":1063},[800,2875,2876],{"class":900},"base_url",[800,2878,1070],{"class":1063},[800,2880,2881],{"class":809},"\u002Fruns\u002F",[800,2883,1064],{"class":1063},[800,2885,2758],{"class":900},[800,2887,1070],{"class":1063},[800,2889,823],{"class":809},[800,2891,1450],{"class":816},[800,2893,2768],{"class":923},[800,2895,891],{"class":816},[800,2897,1085],{"class":900},[800,2899,2900],{"class":816},").",[800,2902,1020],{"class":900},[800,2904,2905],{"class":816},"()\n",[800,2907,2908,2911,2913,2915,2918,2920,2923,2926,2929,2932,2934,2937,2939,2942,2944,2946,2948,2950,2953,2955,2957,2959,2961],{"class":802,"line":974},[800,2909,2910],{"class":900},"        print",[800,2912,2755],{"class":816},[800,2914,2869],{"class":1056},[800,2916,2917],{"class":809},"\"[",[800,2919,1064],{"class":1063},[800,2921,2922],{"class":900},"run",[800,2924,2925],{"class":816},"[",[800,2927,2928],{"class":816},"'",[800,2930,2931],{"class":809},"statusSince",[800,2933,2928],{"class":816},[800,2935,2936],{"class":816},"]",[800,2938,1070],{"class":1063},[800,2940,2941],{"class":809},"] ",[800,2943,1064],{"class":1063},[800,2945,2922],{"class":900},[800,2947,2925],{"class":816},[800,2949,2928],{"class":816},[800,2951,2952],{"class":809},"status",[800,2954,2928],{"class":816},[800,2956,2936],{"class":816},[800,2958,1070],{"class":1063},[800,2960,823],{"class":809},[800,2962,1004],{"class":816},[800,2964,2965,2968,2971,2973,2975,2977,2979,2981,2984,2987],{"class":802,"line":995},[800,2966,2967],{"class":873},"        if",[800,2969,2970],{"class":826}," run",[800,2972,2925],{"class":816},[800,2974,823],{"class":816},[800,2976,2952],{"class":809},[800,2978,823],{"class":816},[800,2980,2936],{"class":816},[800,2982,2983],{"class":816}," in",[800,2985,2986],{"class":826}," terminal",[800,2988,2809],{"class":816},[800,2990,2991,2994],{"class":802,"line":1001},[800,2992,2993],{"class":873},"            return",[800,2995,2996],{"class":826}," run\n",[800,2998,2999,3002,3004,3007,3009,3012],{"class":802,"line":1007},[800,3000,3001],{"class":826},"        time",[800,3003,897],{"class":816},[800,3005,3006],{"class":900},"sleep",[800,3008,2755],{"class":816},[800,3010,3011],{"class":900},"poll_interval",[800,3013,1004],{"class":816},[800,3015,3016],{"class":802,"line":1036},[800,3017,883],{"emptyLinePlaceholder":882},[800,3019,3020,3023,3025,3027,3029,3031,3033,3035,3037,3040],{"class":802,"line":1485},[800,3021,3022],{"class":826},"run ",[800,3024,891],{"class":816},[800,3026,2752],{"class":900},[800,3028,2755],{"class":816},[800,3030,2758],{"class":900},[800,3032,1450],{"class":816},[800,3034,2768],{"class":900},[800,3036,1450],{"class":816},[800,3038,3039],{"class":900}," BASE_URL",[800,3041,1004],{"class":816},[800,3043,3044,3047,3049,3051,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072],{"class":802,"line":1978},[800,3045,3046],{"class":900},"print",[800,3048,2755],{"class":816},[800,3050,2869],{"class":1056},[800,3052,3053],{"class":809},"\"Run finished: ",[800,3055,1064],{"class":1063},[800,3057,2922],{"class":900},[800,3059,2925],{"class":816},[800,3061,2928],{"class":816},[800,3063,2952],{"class":809},[800,3065,2928],{"class":816},[800,3067,2936],{"class":816},[800,3069,1070],{"class":1063},[800,3071,823],{"class":809},[800,3073,1004],{"class":816},[1088,3075],{},[773,3077,3079],{"id":3078},"interacting-with-run-states","Interacting with run states",[756,3081,3082,3083,3086],{},"Use ",[797,3084,3085],{},"POST \u002Fv1\u002Fruns\u002F{runId}\u002Fstatus"," to drive a run externally — resume, provide input, or cancel.",[1095,3088,3090],{"id":3089},"resume-a-paused-run","Resume a paused run",[789,3092,3094],{"className":791,"code":3093,"filename":793,"language":794,"meta":795,"style":795},"curl -X POST \"$BASE_URL\u002Fruns\u002F{runId}\u002Fstatus\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"status\": \"RUNNING\"}'\n",[797,3095,3096,3114,3128,3140],{"__ignoreMap":795},[800,3097,3098,3100,3102,3104,3106,3108,3110,3112],{"class":802,"line":803},[800,3099,787],{"class":806},[800,3101,810],{"class":809},[800,3103,813],{"class":809},[800,3105,817],{"class":816},[800,3107,1124],{"class":826},[800,3109,2514],{"class":809},[800,3111,823],{"class":816},[800,3113,827],{"class":826},[800,3115,3116,3118,3120,3122,3124,3126],{"class":802,"line":830},[800,3117,833],{"class":809},[800,3119,817],{"class":816},[800,3121,1140],{"class":809},[800,3123,1143],{"class":826},[800,3125,823],{"class":816},[800,3127,827],{"class":826},[800,3129,3130,3132,3134,3136,3138],{"class":802,"line":845},[800,3131,833],{"class":809},[800,3133,817],{"class":816},[800,3135,1156],{"class":809},[800,3137,823],{"class":816},[800,3139,827],{"class":826},[800,3141,3142,3144,3146,3149],{"class":802,"line":907},[800,3143,848],{"class":809},[800,3145,1167],{"class":816},[800,3147,3148],{"class":809},"{\"status\": \"RUNNING\"}",[800,3150,1208],{"class":816},[1095,3152,3154],{"id":3153},"provide-input-on-resume","Provide input on resume",[756,3156,3157,3158,3160,3161,3164],{},"When the run is in ",[797,3159,2583],{},", include a ",[797,3162,3163],{},"data"," object keyed by phase ID:",[789,3166,3168],{"className":791,"code":3167,"filename":793,"language":794,"meta":795,"style":795},"curl -X POST \"$BASE_URL\u002Fruns\u002F{runId}\u002Fstatus\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"status\": \"RUNNING\",\n    \"data\": {\n      \"quality_check\": {\n        \"sample_id\": \"B3\",\n        \"approved\": true\n      }\n    }\n  }'\n",[797,3169,3170,3188,3202,3214,3222,3227,3232,3237,3242,3247,3252,3256],{"__ignoreMap":795},[800,3171,3172,3174,3176,3178,3180,3182,3184,3186],{"class":802,"line":803},[800,3173,787],{"class":806},[800,3175,810],{"class":809},[800,3177,813],{"class":809},[800,3179,817],{"class":816},[800,3181,1124],{"class":826},[800,3183,2514],{"class":809},[800,3185,823],{"class":816},[800,3187,827],{"class":826},[800,3189,3190,3192,3194,3196,3198,3200],{"class":802,"line":830},[800,3191,833],{"class":809},[800,3193,817],{"class":816},[800,3195,1140],{"class":809},[800,3197,1143],{"class":826},[800,3199,823],{"class":816},[800,3201,827],{"class":826},[800,3203,3204,3206,3208,3210,3212],{"class":802,"line":845},[800,3205,833],{"class":809},[800,3207,817],{"class":816},[800,3209,1156],{"class":809},[800,3211,823],{"class":816},[800,3213,827],{"class":826},[800,3215,3216,3218,3220],{"class":802,"line":907},[800,3217,848],{"class":809},[800,3219,1167],{"class":816},[800,3221,1170],{"class":809},[800,3223,3224],{"class":802,"line":920},[800,3225,3226],{"class":809},"    \"status\": \"RUNNING\",\n",[800,3228,3229],{"class":802,"line":930},[800,3230,3231],{"class":809},"    \"data\": {\n",[800,3233,3234],{"class":802,"line":953},[800,3235,3236],{"class":809},"      \"quality_check\": {\n",[800,3238,3239],{"class":802,"line":974},[800,3240,3241],{"class":809},"        \"sample_id\": \"B3\",\n",[800,3243,3244],{"class":802,"line":995},[800,3245,3246],{"class":809},"        \"approved\": true\n",[800,3248,3249],{"class":802,"line":1001},[800,3250,3251],{"class":809},"      }\n",[800,3253,3254],{"class":802,"line":1007},[800,3255,2151],{"class":809},[800,3257,3258,3260],{"class":802,"line":1036},[800,3259,1205],{"class":809},[800,3261,1208],{"class":816},[1095,3263,3265],{"id":3264},"cancel-a-run","Cancel a run",[789,3267,3269],{"className":791,"code":3268,"filename":793,"language":794,"meta":795,"style":795},"curl -X POST \"$BASE_URL\u002Fruns\u002F{runId}\u002Fstatus\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"status\": \"CANCELLED\"}'\n",[797,3270,3271,3289,3303,3315],{"__ignoreMap":795},[800,3272,3273,3275,3277,3279,3281,3283,3285,3287],{"class":802,"line":803},[800,3274,787],{"class":806},[800,3276,810],{"class":809},[800,3278,813],{"class":809},[800,3280,817],{"class":816},[800,3282,1124],{"class":826},[800,3284,2514],{"class":809},[800,3286,823],{"class":816},[800,3288,827],{"class":826},[800,3290,3291,3293,3295,3297,3299,3301],{"class":802,"line":830},[800,3292,833],{"class":809},[800,3294,817],{"class":816},[800,3296,1140],{"class":809},[800,3298,1143],{"class":826},[800,3300,823],{"class":816},[800,3302,827],{"class":826},[800,3304,3305,3307,3309,3311,3313],{"class":802,"line":845},[800,3306,833],{"class":809},[800,3308,817],{"class":816},[800,3310,1156],{"class":809},[800,3312,823],{"class":816},[800,3314,827],{"class":826},[800,3316,3317,3319,3321,3324],{"class":802,"line":907},[800,3318,848],{"class":809},[800,3320,1167],{"class":816},[800,3322,3323],{"class":809},"{\"status\": \"CANCELLED\"}",[800,3325,1208],{"class":816},[3327,3328,3330],"callout",{"icon":3329},"i-heroicons-light-bulb",[756,3331,3332,3333,897],{},"For the workflow side — how to pause a run and wait for the resume signal from within your Python code — see ",[3334,3335,3337],"a",{"href":3336},"\u002Fautomate\u002Fguides\u002Fbasic-hitl\u002F","Human in the loop",[773,3339,3341],{"id":3340},"next-steps","Next steps",[766,3343,3344,3350],{},[769,3345,3346,3349],{},[3334,3347,503],{"href":3348},"\u002Fautomate\u002Fguides\u002Frun-a-workflow\u002F",": trigger from the UI or UniteLabs SDK",[769,3351,3352,3355],{},[3334,3353,499],{"href":3354},"\u002Fautomate\u002Fguides\u002Fdeploy-a-workflow\u002F",": package and register a workflow before running it",[3357,3358,3359],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":795,"searchDepth":803,"depth":830,"links":3361},[3362,3363,3369,3373,3378,3383],{"id":775,"depth":830,"text":776},{"id":1092,"depth":830,"text":1093,"children":3364},[3365,3366,3367,3368],{"id":1097,"depth":845,"text":1098},{"id":1561,"depth":845,"text":1562},{"id":1710,"depth":845,"text":1711},{"id":1854,"depth":845,"text":1855},{"id":450,"depth":830,"text":472,"children":3370},[3371,3372],{"id":2056,"depth":845,"text":2057},{"id":2382,"depth":845,"text":2383},{"id":2493,"depth":830,"text":2494,"children":3374},[3375,3376,3377],{"id":2497,"depth":845,"text":2498},{"id":2619,"depth":845,"text":2620},{"id":2720,"depth":845,"text":2721},{"id":3078,"depth":830,"text":3079,"children":3379},[3380,3381,3382],{"id":3089,"depth":845,"text":3090},{"id":3153,"depth":845,"text":3154},{"id":3264,"depth":845,"text":3265},{"id":3340,"depth":830,"text":3341},"Register, manage, and trigger workflows programmatically using the UniteLabs REST API.","md",null,{},{"title":527,"description":3384},"DCK8ZeapDx5lZ4EhkE_Sr2oQE1r4-XVmA_U4dag94Ts",[3391,3393],{"title":523,"path":524,"stem":525,"description":3392},"Build a structured error taxonomy with typed error codes, user-facing messages, and automatic exception classification.",{"title":536,"path":537,"stem":538,"description":3394},"How UniteLabs handles data storage, secrets, and connectivity to external systems.",1783607791170]