[{"data":1,"prerenderedAt":4450},["ShallowReactive",2],{"navigation":3,"\u002Fobserve\u002Fconcepts\u002Fsecrets":750,"\u002Fobserve\u002Fconcepts\u002Fsecrets-surround":4445},[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":548,"body":752,"description":4439,"extension":4440,"links":4441,"meta":4442,"navigation":938,"path":549,"seo":4443,"stem":550,"__hash__":4444},"docs\u002F08.observe\u002F20.concepts\u002F20.secrets.md",{"type":753,"value":754,"toc":4422},"minimark",[755,763,767,770,773,776,792,795,798,803,811,1087,1097,1108,1110,1114,1120,1242,1244,1248,1264,1395,1397,1401,1407,1521,1523,1527,1541,1925,1935,1965,1967,1971,1977,2168,2175,2244,2246,2249,2252,2404,2406,2410,2413,2622,2629,2631,2634,2637,2758,2764,2766,2770,2775,2778,3269,3273,3276,3652,3656,3659,4385,4387,4391,4418],[756,757,758],"p",{},[759,760],"img",{"alt":761,"src":762},"UniteLabs Secrets Management","\u002Fimages\u002Fplatform\u002Fplatform_secrets.webp",[764,765,536],"h1",{"id":766},"overview",[756,768,769],{},"Secrets in UniteLabs provide a secure way to store sensitive credentials—such as API keys, tokens, and passwords—that are essential for accessing external systems and instruments in your workflows.",[756,771,772],{},"Instead of hardcoding credentials or sharing them manually, you can define and manage secrets in a centralized, encrypted environment. This helps ensure security, scalability, and repeatability when running lab automation.",[756,774,775],{},"With UniteLabs Secrets, you can:",[777,778,779,783,786,789],"ul",{},[780,781,782],"li",{},"Store environment-specific credentials for APIs, devices, and services",[780,784,785],{},"Reuse secrets across multiple workflows without exposing sensitive values",[780,787,788],{},"Rotate or revoke credentials without changing workflow logic",[780,790,791],{},"Categorize secrets by type (e.g. string, JSON, connection) for structured access",[756,793,794],{},"Secrets integrate seamlessly into the workflow engine, letting scientists and engineers focus on automation logic while maintaining compliance and security across labs.",[796,797],"hr",{},[799,800,802],"h2",{"id":801},"authentication","Authentication",[756,804,805,806,810],{},"All API calls require a bearer token obtained from the UniteLabs identity provider. Replace ",[807,808,809],"code",{},"\u003Ctenant-id>"," with your organization's tenant ID:",[812,813,814,917],"code-group",{},[815,816,822],"pre",{"className":817,"code":818,"filename":819,"language":820,"meta":821,"style":821},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST \\\n  \"https:\u002F\u002Fauth.unitelabs.io\u002Frealms\u002F\u003Ctenant-id>\u002Fprotocol\u002Fopenid-connect\u002Ftoken\" \\\n  -H \"Content-Type: application\u002Fx-www-form-urlencoded\" \\\n  -d \"grant_type=client_credentials\" \\\n  -d \"client_id=\u003Cyour-client-id>\" \\\n  -d \"client_secret=\u003Cyour-client-secret>\"\n","cURL","bash","",[807,823,824,844,859,875,890,904],{"__ignoreMap":821},[825,826,829,833,837,840],"span",{"class":827,"line":828},"line",1,[825,830,832],{"class":831},"sBMFI","curl",[825,834,836],{"class":835},"sfazB"," -X",[825,838,839],{"class":835}," POST",[825,841,843],{"class":842},"sTEyZ"," \\\n",[825,845,847,851,854,857],{"class":827,"line":846},2,[825,848,850],{"class":849},"sMK4o","  \"",[825,852,853],{"class":835},"https:\u002F\u002Fauth.unitelabs.io\u002Frealms\u002F\u003Ctenant-id>\u002Fprotocol\u002Fopenid-connect\u002Ftoken",[825,855,856],{"class":849},"\"",[825,858,843],{"class":842},[825,860,862,865,868,871,873],{"class":827,"line":861},3,[825,863,864],{"class":835},"  -H",[825,866,867],{"class":849}," \"",[825,869,870],{"class":835},"Content-Type: application\u002Fx-www-form-urlencoded",[825,872,856],{"class":849},[825,874,843],{"class":842},[825,876,878,881,883,886,888],{"class":827,"line":877},4,[825,879,880],{"class":835},"  -d",[825,882,867],{"class":849},[825,884,885],{"class":835},"grant_type=client_credentials",[825,887,856],{"class":849},[825,889,843],{"class":842},[825,891,893,895,897,900,902],{"class":827,"line":892},5,[825,894,880],{"class":835},[825,896,867],{"class":849},[825,898,899],{"class":835},"client_id=\u003Cyour-client-id>",[825,901,856],{"class":849},[825,903,843],{"class":842},[825,905,907,909,911,914],{"class":827,"line":906},6,[825,908,880],{"class":835},[825,910,867],{"class":849},[825,912,913],{"class":835},"client_secret=\u003Cyour-client-secret>",[825,915,916],{"class":849},"\"\n",[815,918,923],{"className":919,"code":920,"filename":921,"language":922,"meta":821,"style":821},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import httpx\n\nresponse = httpx.post(\n    \"https:\u002F\u002Fauth.unitelabs.io\u002Frealms\u002F\u003Ctenant-id>\u002Fprotocol\u002Fopenid-connect\u002Ftoken\",\n    data={\n        \"grant_type\": \"client_credentials\",\n        \"client_id\": \"\u003Cyour-client-id>\",\n        \"client_secret\": \"\u003Cyour-client-secret>\",\n    },\n)\ntoken = response.json()[\"access_token\"]\n","Python","python",[807,924,925,934,940,961,973,982,1004,1025,1046,1052,1058],{"__ignoreMap":821},[825,926,927,931],{"class":827,"line":828},[825,928,930],{"class":929},"s7zQu","import",[825,932,933],{"class":842}," httpx\n",[825,935,936],{"class":827,"line":846},[825,937,939],{"emptyLinePlaceholder":938},true,"\n",[825,941,942,945,948,951,954,958],{"class":827,"line":861},[825,943,944],{"class":842},"response ",[825,946,947],{"class":849},"=",[825,949,950],{"class":842}," httpx",[825,952,953],{"class":849},".",[825,955,957],{"class":956},"s2Zo4","post",[825,959,960],{"class":849},"(\n",[825,962,963,966,968,970],{"class":827,"line":877},[825,964,965],{"class":849},"    \"",[825,967,853],{"class":835},[825,969,856],{"class":849},[825,971,972],{"class":849},",\n",[825,974,975,979],{"class":827,"line":892},[825,976,978],{"class":977},"sHdIc","    data",[825,980,981],{"class":849},"={\n",[825,983,984,987,990,992,995,997,1000,1002],{"class":827,"line":906},[825,985,986],{"class":849},"        \"",[825,988,989],{"class":835},"grant_type",[825,991,856],{"class":849},[825,993,994],{"class":849},":",[825,996,867],{"class":849},[825,998,999],{"class":835},"client_credentials",[825,1001,856],{"class":849},[825,1003,972],{"class":849},[825,1005,1007,1009,1012,1014,1016,1018,1021,1023],{"class":827,"line":1006},7,[825,1008,986],{"class":849},[825,1010,1011],{"class":835},"client_id",[825,1013,856],{"class":849},[825,1015,994],{"class":849},[825,1017,867],{"class":849},[825,1019,1020],{"class":835},"\u003Cyour-client-id>",[825,1022,856],{"class":849},[825,1024,972],{"class":849},[825,1026,1028,1030,1033,1035,1037,1039,1042,1044],{"class":827,"line":1027},8,[825,1029,986],{"class":849},[825,1031,1032],{"class":835},"client_secret",[825,1034,856],{"class":849},[825,1036,994],{"class":849},[825,1038,867],{"class":849},[825,1040,1041],{"class":835},"\u003Cyour-client-secret>",[825,1043,856],{"class":849},[825,1045,972],{"class":849},[825,1047,1049],{"class":827,"line":1048},9,[825,1050,1051],{"class":849},"    },\n",[825,1053,1055],{"class":827,"line":1054},10,[825,1056,1057],{"class":849},")\n",[825,1059,1061,1064,1066,1069,1071,1074,1077,1079,1082,1084],{"class":827,"line":1060},11,[825,1062,1063],{"class":842},"token ",[825,1065,947],{"class":849},[825,1067,1068],{"class":842}," response",[825,1070,953],{"class":849},[825,1072,1073],{"class":956},"json",[825,1075,1076],{"class":849},"()[",[825,1078,856],{"class":849},[825,1080,1081],{"class":835},"access_token",[825,1083,856],{"class":849},[825,1085,1086],{"class":849},"]\n",[756,1088,1089,1090,1092,1093,1096],{},"Use the returned ",[807,1091,1081],{}," as ",[807,1094,1095],{},"Authorization: Bearer \u003Ctoken>"," on every subsequent request.",[1098,1099,1101],"callout",{"icon":1100},"i-heroicons-light-bulb",[756,1102,1103,1104,1107],{},"Inside workflows, use the UniteLabs UniteLabs SDK (",[807,1105,1106],{},"unitelabs-sdk",") — it handles token acquisition and refresh automatically. See the examples below.",[796,1109],{},[799,1111,1113],{"id":1112},"endpoints","Endpoints",[756,1115,1116,1117],{},"Base URL: ",[807,1118,1119],{},"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc",[1121,1122,1123,1139],"table",{},[1124,1125,1126],"thead",{},[1127,1128,1129,1133,1136],"tr",{},[1130,1131,1132],"th",{},"Method",[1130,1134,1135],{},"Path",[1130,1137,1138],{},"Description",[1140,1141,1142,1158,1172,1186,1200,1214,1228],"tbody",{},[1127,1143,1144,1150,1155],{},[1145,1146,1147],"td",{},[807,1148,1149],{},"GET",[1145,1151,1152],{},[807,1153,1154],{},"\u002Fv1\u002Fsecrets\u002Ftypes",[1145,1156,1157],{},"List available secret types",[1127,1159,1160,1164,1169],{},[1145,1161,1162],{},[807,1163,1149],{},[1145,1165,1166],{},[807,1167,1168],{},"\u002Fv1\u002Fsecrets\u002Fschemas\u002F{slug}",[1145,1170,1171],{},"Get the JSON schema for a secret type",[1127,1173,1174,1178,1183],{},[1145,1175,1176],{},[807,1177,1149],{},[1145,1179,1180],{},[807,1181,1182],{},"\u002Fv1\u002Fsecrets",[1145,1184,1185],{},"List secrets (filter by name)",[1127,1187,1188,1192,1197],{},[1145,1189,1190],{},[807,1191,1149],{},[1145,1193,1194],{},[807,1195,1196],{},"\u002Fv1\u002Fsecrets\u002F{id}",[1145,1198,1199],{},"Get a secret by ID",[1127,1201,1202,1207,1211],{},[1145,1203,1204],{},[807,1205,1206],{},"POST",[1145,1208,1209],{},[807,1210,1182],{},[1145,1212,1213],{},"Create a new secret",[1127,1215,1216,1221,1225],{},[1145,1217,1218],{},[807,1219,1220],{},"PATCH",[1145,1222,1223],{},[807,1224,1196],{},[1145,1226,1227],{},"Update an existing secret",[1127,1229,1230,1235,1239],{},[1145,1231,1232],{},[807,1233,1234],{},"DELETE",[1145,1236,1237],{},[807,1238,1196],{},[1145,1240,1241],{},"Delete a secret",[796,1243],{},[799,1245,1247],{"id":1246},"list-secret-types","List secret types",[756,1249,1250,1251,1254,1255,1254,1257,1254,1260,1263],{},"Returns the available secret types (e.g. ",[807,1252,1253],{},"string",", ",[807,1256,1073],{},[807,1258,1259],{},"aws-s3",[807,1261,1262],{},"postgres",").",[812,1265,1266,1303],{},[815,1267,1269],{"className":817,"code":1268,"filename":819,"language":820,"meta":821,"style":821},"curl -X GET \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002Ftypes\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n",[807,1270,1271,1282,1293],{"__ignoreMap":821},[825,1272,1273,1275,1277,1280],{"class":827,"line":828},[825,1274,832],{"class":831},[825,1276,836],{"class":835},[825,1278,1279],{"class":835}," GET",[825,1281,843],{"class":842},[825,1283,1284,1286,1289,1291],{"class":827,"line":846},[825,1285,850],{"class":849},[825,1287,1288],{"class":835},"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002Ftypes",[825,1290,856],{"class":849},[825,1292,843],{"class":842},[825,1294,1295,1297,1299,1301],{"class":827,"line":861},[825,1296,864],{"class":835},[825,1298,867],{"class":849},[825,1300,1095],{"class":835},[825,1302,916],{"class":849},[815,1304,1307],{"className":919,"code":1305,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\nasync with AsyncApiClient() as client:\n    types = await client.get(\"\u002Fsecrets\u002Ftypes\")\n    print(types)\n","Python (SDK)",[807,1308,1309,1327,1331,1354,1383],{"__ignoreMap":821},[825,1310,1311,1314,1317,1319,1322,1324],{"class":827,"line":828},[825,1312,1313],{"class":929},"from",[825,1315,1316],{"class":842}," unitelabs",[825,1318,953],{"class":849},[825,1320,1321],{"class":842},"sdk ",[825,1323,930],{"class":929},[825,1325,1326],{"class":842}," AsyncApiClient\n",[825,1328,1329],{"class":827,"line":846},[825,1330,939],{"emptyLinePlaceholder":938},[825,1332,1333,1336,1339,1342,1345,1348,1351],{"class":827,"line":861},[825,1334,1335],{"class":929},"async",[825,1337,1338],{"class":929}," with",[825,1340,1341],{"class":956}," AsyncApiClient",[825,1343,1344],{"class":849},"()",[825,1346,1347],{"class":929}," as",[825,1349,1350],{"class":842}," client",[825,1352,1353],{"class":849},":\n",[825,1355,1356,1359,1361,1364,1366,1368,1371,1374,1376,1379,1381],{"class":827,"line":877},[825,1357,1358],{"class":842},"    types ",[825,1360,947],{"class":849},[825,1362,1363],{"class":929}," await",[825,1365,1350],{"class":842},[825,1367,953],{"class":849},[825,1369,1370],{"class":956},"get",[825,1372,1373],{"class":849},"(",[825,1375,856],{"class":849},[825,1377,1378],{"class":835},"\u002Fsecrets\u002Ftypes",[825,1380,856],{"class":849},[825,1382,1057],{"class":849},[825,1384,1385,1388,1390,1393],{"class":827,"line":892},[825,1386,1387],{"class":956},"    print",[825,1389,1373],{"class":849},[825,1391,1392],{"class":956},"types",[825,1394,1057],{"class":849},[796,1396],{},[799,1398,1400],{"id":1399},"get-schema-for-a-secret-type","Get schema for a secret type",[756,1402,1403,1404,953],{},"Returns the JSON schema describing the required fields for a given secret type ",[807,1405,1406],{},"slug",[812,1408,1409,1445],{},[815,1410,1412],{"className":817,"code":1411,"filename":819,"language":820,"meta":821,"style":821},"curl -X GET \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002Fschemas\u002Faws-s3\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n",[807,1413,1414,1424,1435],{"__ignoreMap":821},[825,1415,1416,1418,1420,1422],{"class":827,"line":828},[825,1417,832],{"class":831},[825,1419,836],{"class":835},[825,1421,1279],{"class":835},[825,1423,843],{"class":842},[825,1425,1426,1428,1431,1433],{"class":827,"line":846},[825,1427,850],{"class":849},[825,1429,1430],{"class":835},"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002Fschemas\u002Faws-s3",[825,1432,856],{"class":849},[825,1434,843],{"class":842},[825,1436,1437,1439,1441,1443],{"class":827,"line":861},[825,1438,864],{"class":835},[825,1440,867],{"class":849},[825,1442,1095],{"class":835},[825,1444,916],{"class":849},[815,1446,1448],{"className":919,"code":1447,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\nasync with AsyncApiClient() as client:\n    schema = await client.get(\"\u002Fsecrets\u002Fschemas\u002Faws-s3\")\n    print(schema)\n",[807,1449,1450,1464,1468,1484,1510],{"__ignoreMap":821},[825,1451,1452,1454,1456,1458,1460,1462],{"class":827,"line":828},[825,1453,1313],{"class":929},[825,1455,1316],{"class":842},[825,1457,953],{"class":849},[825,1459,1321],{"class":842},[825,1461,930],{"class":929},[825,1463,1326],{"class":842},[825,1465,1466],{"class":827,"line":846},[825,1467,939],{"emptyLinePlaceholder":938},[825,1469,1470,1472,1474,1476,1478,1480,1482],{"class":827,"line":861},[825,1471,1335],{"class":929},[825,1473,1338],{"class":929},[825,1475,1341],{"class":956},[825,1477,1344],{"class":849},[825,1479,1347],{"class":929},[825,1481,1350],{"class":842},[825,1483,1353],{"class":849},[825,1485,1486,1489,1491,1493,1495,1497,1499,1501,1503,1506,1508],{"class":827,"line":877},[825,1487,1488],{"class":842},"    schema ",[825,1490,947],{"class":849},[825,1492,1363],{"class":929},[825,1494,1350],{"class":842},[825,1496,953],{"class":849},[825,1498,1370],{"class":956},[825,1500,1373],{"class":849},[825,1502,856],{"class":849},[825,1504,1505],{"class":835},"\u002Fsecrets\u002Fschemas\u002Faws-s3",[825,1507,856],{"class":849},[825,1509,1057],{"class":849},[825,1511,1512,1514,1516,1519],{"class":827,"line":892},[825,1513,1387],{"class":956},[825,1515,1373],{"class":849},[825,1517,1518],{"class":956},"schema",[825,1520,1057],{"class":849},[796,1522],{},[799,1524,1526],{"id":1525},"create-a-secret","Create a secret",[756,1528,1529,1530,1533,1534,1536,1537,1540],{},"Creates a new secret. The ",[807,1531,1532],{},"type"," field must be a valid slug from ",[807,1535,1154],{},". The ",[807,1538,1539],{},"parameters"," object must match the schema for that type.",[812,1542,1543,1667],{},[815,1544,1546],{"className":817,"code":1545,"filename":819,"language":820,"meta":821,"style":821},"curl -X POST \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"datalake-admin\",\n    \"type\": \"aws-s3\",\n    \"parameters\": {\n      \"minio_root_user\": \"my-access-key\",\n      \"minio_root_password\": \"my-secret-key\",\n      \"aws_client_parameters\": {\n        \"endpoint_url\": \"http:\u002F\u002Fminio.svc:9000\",\n        \"bucket_name\": \"lab-data\"\n      }\n    }\n  }'\n",[807,1547,1548,1558,1569,1581,1594,1604,1609,1614,1619,1624,1629,1634,1640,1646,1652,1658],{"__ignoreMap":821},[825,1549,1550,1552,1554,1556],{"class":827,"line":828},[825,1551,832],{"class":831},[825,1553,836],{"class":835},[825,1555,839],{"class":835},[825,1557,843],{"class":842},[825,1559,1560,1562,1565,1567],{"class":827,"line":846},[825,1561,850],{"class":849},[825,1563,1564],{"class":835},"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets",[825,1566,856],{"class":849},[825,1568,843],{"class":842},[825,1570,1571,1573,1575,1577,1579],{"class":827,"line":861},[825,1572,864],{"class":835},[825,1574,867],{"class":849},[825,1576,1095],{"class":835},[825,1578,856],{"class":849},[825,1580,843],{"class":842},[825,1582,1583,1585,1587,1590,1592],{"class":827,"line":877},[825,1584,864],{"class":835},[825,1586,867],{"class":849},[825,1588,1589],{"class":835},"Content-Type: application\u002Fjson",[825,1591,856],{"class":849},[825,1593,843],{"class":842},[825,1595,1596,1598,1601],{"class":827,"line":892},[825,1597,880],{"class":835},[825,1599,1600],{"class":849}," '",[825,1602,1603],{"class":835},"{\n",[825,1605,1606],{"class":827,"line":906},[825,1607,1608],{"class":835},"    \"name\": \"datalake-admin\",\n",[825,1610,1611],{"class":827,"line":1006},[825,1612,1613],{"class":835},"    \"type\": \"aws-s3\",\n",[825,1615,1616],{"class":827,"line":1027},[825,1617,1618],{"class":835},"    \"parameters\": {\n",[825,1620,1621],{"class":827,"line":1048},[825,1622,1623],{"class":835},"      \"minio_root_user\": \"my-access-key\",\n",[825,1625,1626],{"class":827,"line":1054},[825,1627,1628],{"class":835},"      \"minio_root_password\": \"my-secret-key\",\n",[825,1630,1631],{"class":827,"line":1060},[825,1632,1633],{"class":835},"      \"aws_client_parameters\": {\n",[825,1635,1637],{"class":827,"line":1636},12,[825,1638,1639],{"class":835},"        \"endpoint_url\": \"http:\u002F\u002Fminio.svc:9000\",\n",[825,1641,1643],{"class":827,"line":1642},13,[825,1644,1645],{"class":835},"        \"bucket_name\": \"lab-data\"\n",[825,1647,1649],{"class":827,"line":1648},14,[825,1650,1651],{"class":835},"      }\n",[825,1653,1655],{"class":827,"line":1654},15,[825,1656,1657],{"class":835},"    }\n",[825,1659,1661,1664],{"class":827,"line":1660},16,[825,1662,1663],{"class":835},"  }",[825,1665,1666],{"class":849},"'\n",[815,1668,1670],{"className":919,"code":1669,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\nasync with AsyncApiClient() as client:\n    secret = await client.post(\"\u002Fsecrets\", json={\n        \"name\": \"datalake-admin\",\n        \"type\": \"aws-s3\",\n        \"parameters\": {\n            \"minio_root_user\": \"my-access-key\",\n            \"minio_root_password\": \"my-secret-key\",\n            \"aws_client_parameters\": {\n                \"endpoint_url\": \"http:\u002F\u002Fminio.svc:9000\",\n                \"bucket_name\": \"lab-data\",\n            },\n        },\n    })\n    print(secret[\"id\"])  # store this ID for updates\u002Fdeletes\n",[807,1671,1672,1686,1690,1706,1738,1758,1776,1789,1810,1830,1843,1864,1884,1889,1894,1899],{"__ignoreMap":821},[825,1673,1674,1676,1678,1680,1682,1684],{"class":827,"line":828},[825,1675,1313],{"class":929},[825,1677,1316],{"class":842},[825,1679,953],{"class":849},[825,1681,1321],{"class":842},[825,1683,930],{"class":929},[825,1685,1326],{"class":842},[825,1687,1688],{"class":827,"line":846},[825,1689,939],{"emptyLinePlaceholder":938},[825,1691,1692,1694,1696,1698,1700,1702,1704],{"class":827,"line":861},[825,1693,1335],{"class":929},[825,1695,1338],{"class":929},[825,1697,1341],{"class":956},[825,1699,1344],{"class":849},[825,1701,1347],{"class":929},[825,1703,1350],{"class":842},[825,1705,1353],{"class":849},[825,1707,1708,1711,1713,1715,1717,1719,1721,1723,1725,1728,1730,1733,1736],{"class":827,"line":877},[825,1709,1710],{"class":842},"    secret ",[825,1712,947],{"class":849},[825,1714,1363],{"class":929},[825,1716,1350],{"class":842},[825,1718,953],{"class":849},[825,1720,957],{"class":956},[825,1722,1373],{"class":849},[825,1724,856],{"class":849},[825,1726,1727],{"class":835},"\u002Fsecrets",[825,1729,856],{"class":849},[825,1731,1732],{"class":849},",",[825,1734,1735],{"class":977}," json",[825,1737,981],{"class":849},[825,1739,1740,1742,1745,1747,1749,1751,1754,1756],{"class":827,"line":892},[825,1741,986],{"class":849},[825,1743,1744],{"class":835},"name",[825,1746,856],{"class":849},[825,1748,994],{"class":849},[825,1750,867],{"class":849},[825,1752,1753],{"class":835},"datalake-admin",[825,1755,856],{"class":849},[825,1757,972],{"class":849},[825,1759,1760,1762,1764,1766,1768,1770,1772,1774],{"class":827,"line":906},[825,1761,986],{"class":849},[825,1763,1532],{"class":835},[825,1765,856],{"class":849},[825,1767,994],{"class":849},[825,1769,867],{"class":849},[825,1771,1259],{"class":835},[825,1773,856],{"class":849},[825,1775,972],{"class":849},[825,1777,1778,1780,1782,1784,1786],{"class":827,"line":1006},[825,1779,986],{"class":849},[825,1781,1539],{"class":835},[825,1783,856],{"class":849},[825,1785,994],{"class":849},[825,1787,1788],{"class":849}," {\n",[825,1790,1791,1794,1797,1799,1801,1803,1806,1808],{"class":827,"line":1027},[825,1792,1793],{"class":849},"            \"",[825,1795,1796],{"class":835},"minio_root_user",[825,1798,856],{"class":849},[825,1800,994],{"class":849},[825,1802,867],{"class":849},[825,1804,1805],{"class":835},"my-access-key",[825,1807,856],{"class":849},[825,1809,972],{"class":849},[825,1811,1812,1814,1817,1819,1821,1823,1826,1828],{"class":827,"line":1048},[825,1813,1793],{"class":849},[825,1815,1816],{"class":835},"minio_root_password",[825,1818,856],{"class":849},[825,1820,994],{"class":849},[825,1822,867],{"class":849},[825,1824,1825],{"class":835},"my-secret-key",[825,1827,856],{"class":849},[825,1829,972],{"class":849},[825,1831,1832,1834,1837,1839,1841],{"class":827,"line":1054},[825,1833,1793],{"class":849},[825,1835,1836],{"class":835},"aws_client_parameters",[825,1838,856],{"class":849},[825,1840,994],{"class":849},[825,1842,1788],{"class":849},[825,1844,1845,1848,1851,1853,1855,1857,1860,1862],{"class":827,"line":1060},[825,1846,1847],{"class":849},"                \"",[825,1849,1850],{"class":835},"endpoint_url",[825,1852,856],{"class":849},[825,1854,994],{"class":849},[825,1856,867],{"class":849},[825,1858,1859],{"class":835},"http:\u002F\u002Fminio.svc:9000",[825,1861,856],{"class":849},[825,1863,972],{"class":849},[825,1865,1866,1868,1871,1873,1875,1877,1880,1882],{"class":827,"line":1636},[825,1867,1847],{"class":849},[825,1869,1870],{"class":835},"bucket_name",[825,1872,856],{"class":849},[825,1874,994],{"class":849},[825,1876,867],{"class":849},[825,1878,1879],{"class":835},"lab-data",[825,1881,856],{"class":849},[825,1883,972],{"class":849},[825,1885,1886],{"class":827,"line":1642},[825,1887,1888],{"class":849},"            },\n",[825,1890,1891],{"class":827,"line":1648},[825,1892,1893],{"class":849},"        },\n",[825,1895,1896],{"class":827,"line":1654},[825,1897,1898],{"class":849},"    })\n",[825,1900,1901,1903,1905,1908,1911,1913,1916,1918,1921],{"class":827,"line":1660},[825,1902,1387],{"class":956},[825,1904,1373],{"class":849},[825,1906,1907],{"class":956},"secret",[825,1909,1910],{"class":849},"[",[825,1912,856],{"class":849},[825,1914,1915],{"class":835},"id",[825,1917,856],{"class":849},[825,1919,1920],{"class":849},"])",[825,1922,1924],{"class":1923},"sHwdD","  # store this ID for updates\u002Fdeletes\n",[756,1926,1927,1931,1932,994],{},[1928,1929,1930],"strong",{},"Response"," ",[807,1933,1934],{},"201 Created",[815,1936,1939],{"className":1937,"code":1938,"language":1073,"meta":821,"style":821},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"id\": \"a3bb189e-8bf9-3888-9912-ace4e6543002\",\n  \"name\": \"datalake-admin\",\n  \"type\": \"aws-s3\"\n}\n",[807,1940,1941,1945,1950,1955,1960],{"__ignoreMap":821},[825,1942,1943],{"class":827,"line":828},[825,1944,1603],{},[825,1946,1947],{"class":827,"line":846},[825,1948,1949],{},"  \"id\": \"a3bb189e-8bf9-3888-9912-ace4e6543002\",\n",[825,1951,1952],{"class":827,"line":861},[825,1953,1954],{},"  \"name\": \"datalake-admin\",\n",[825,1956,1957],{"class":827,"line":877},[825,1958,1959],{},"  \"type\": \"aws-s3\"\n",[825,1961,1962],{"class":827,"line":892},[825,1963,1964],{},"}\n",[796,1966],{},[799,1968,1970],{"id":1969},"list-secrets","List secrets",[756,1972,1973,1974,1976],{},"Returns all secrets matching the ",[807,1975,1744],{}," query parameter. Pass a partial name to search, or an exact name to fetch a specific secret.",[812,1978,1979,2020],{},[815,1980,1982],{"className":817,"code":1981,"filename":819,"language":820,"meta":821,"style":821},"# List all secrets with a name starting with \"datalake\"\ncurl -X GET \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets?name=datalake\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n",[807,1983,1984,1989,1999,2010],{"__ignoreMap":821},[825,1985,1986],{"class":827,"line":828},[825,1987,1988],{"class":1923},"# List all secrets with a name starting with \"datalake\"\n",[825,1990,1991,1993,1995,1997],{"class":827,"line":846},[825,1992,832],{"class":831},[825,1994,836],{"class":835},[825,1996,1279],{"class":835},[825,1998,843],{"class":842},[825,2000,2001,2003,2006,2008],{"class":827,"line":861},[825,2002,850],{"class":849},[825,2004,2005],{"class":835},"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets?name=datalake",[825,2007,856],{"class":849},[825,2009,843],{"class":842},[825,2011,2012,2014,2016,2018],{"class":827,"line":877},[825,2013,864],{"class":835},[825,2015,867],{"class":849},[825,2017,1095],{"class":835},[825,2019,916],{"class":849},[815,2021,2023],{"className":919,"code":2022,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\nasync with AsyncApiClient() as client:\n    secrets = await client.get(\"\u002Fsecrets\")\n\n# Find a specific secret by name\ndatalake = next(s for s in secrets if s[\"name\"] == \"datalake-admin\")\nparams = datalake[\"parameters\"]\n",[807,2024,2025,2039,2043,2059,2084,2088,2093,2148],{"__ignoreMap":821},[825,2026,2027,2029,2031,2033,2035,2037],{"class":827,"line":828},[825,2028,1313],{"class":929},[825,2030,1316],{"class":842},[825,2032,953],{"class":849},[825,2034,1321],{"class":842},[825,2036,930],{"class":929},[825,2038,1326],{"class":842},[825,2040,2041],{"class":827,"line":846},[825,2042,939],{"emptyLinePlaceholder":938},[825,2044,2045,2047,2049,2051,2053,2055,2057],{"class":827,"line":861},[825,2046,1335],{"class":929},[825,2048,1338],{"class":929},[825,2050,1341],{"class":956},[825,2052,1344],{"class":849},[825,2054,1347],{"class":929},[825,2056,1350],{"class":842},[825,2058,1353],{"class":849},[825,2060,2061,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082],{"class":827,"line":877},[825,2062,2063],{"class":842},"    secrets ",[825,2065,947],{"class":849},[825,2067,1363],{"class":929},[825,2069,1350],{"class":842},[825,2071,953],{"class":849},[825,2073,1370],{"class":956},[825,2075,1373],{"class":849},[825,2077,856],{"class":849},[825,2079,1727],{"class":835},[825,2081,856],{"class":849},[825,2083,1057],{"class":849},[825,2085,2086],{"class":827,"line":892},[825,2087,939],{"emptyLinePlaceholder":938},[825,2089,2090],{"class":827,"line":906},[825,2091,2092],{"class":1923},"# Find a specific secret by name\n",[825,2094,2095,2098,2100,2103,2105,2108,2111,2114,2117,2120,2123,2126,2128,2130,2132,2134,2137,2140,2142,2144,2146],{"class":827,"line":1006},[825,2096,2097],{"class":842},"datalake ",[825,2099,947],{"class":849},[825,2101,2102],{"class":956}," next",[825,2104,1373],{"class":849},[825,2106,2107],{"class":956},"s ",[825,2109,2110],{"class":929},"for",[825,2112,2113],{"class":956}," s ",[825,2115,2116],{"class":929},"in",[825,2118,2119],{"class":956}," secrets ",[825,2121,2122],{"class":929},"if",[825,2124,2125],{"class":956}," s",[825,2127,1910],{"class":849},[825,2129,856],{"class":849},[825,2131,1744],{"class":835},[825,2133,856],{"class":849},[825,2135,2136],{"class":849},"]",[825,2138,2139],{"class":849}," ==",[825,2141,867],{"class":849},[825,2143,1753],{"class":835},[825,2145,856],{"class":849},[825,2147,1057],{"class":849},[825,2149,2150,2153,2155,2158,2160,2162,2164,2166],{"class":827,"line":1027},[825,2151,2152],{"class":842},"params ",[825,2154,947],{"class":849},[825,2156,2157],{"class":842}," datalake",[825,2159,1910],{"class":849},[825,2161,856],{"class":849},[825,2163,1539],{"class":835},[825,2165,856],{"class":849},[825,2167,1086],{"class":849},[756,2169,2170,1931,2172,994],{},[1928,2171,1930],{},[807,2173,2174],{},"200 OK",[815,2176,2178],{"className":1937,"code":2177,"language":1073,"meta":821,"style":821},"[\n  {\n    \"id\": \"a3bb189e-8bf9-3888-9912-ace4e6543002\",\n    \"name\": \"datalake-admin\",\n    \"type\": \"aws-s3\",\n    \"parameters\": {\n      \"minio_root_user\": \"my-access-key\",\n      \"minio_root_password\": \"my-secret-key\",\n      \"aws_client_parameters\": {\n        \"endpoint_url\": \"http:\u002F\u002Fminio.svc:9000\",\n        \"bucket_name\": \"lab-data\"\n      }\n    }\n  }\n]\n",[807,2179,2180,2185,2190,2195,2199,2203,2207,2211,2215,2219,2223,2227,2231,2235,2240],{"__ignoreMap":821},[825,2181,2182],{"class":827,"line":828},[825,2183,2184],{},"[\n",[825,2186,2187],{"class":827,"line":846},[825,2188,2189],{},"  {\n",[825,2191,2192],{"class":827,"line":861},[825,2193,2194],{},"    \"id\": \"a3bb189e-8bf9-3888-9912-ace4e6543002\",\n",[825,2196,2197],{"class":827,"line":877},[825,2198,1608],{},[825,2200,2201],{"class":827,"line":892},[825,2202,1613],{},[825,2204,2205],{"class":827,"line":906},[825,2206,1618],{},[825,2208,2209],{"class":827,"line":1006},[825,2210,1623],{},[825,2212,2213],{"class":827,"line":1027},[825,2214,1628],{},[825,2216,2217],{"class":827,"line":1048},[825,2218,1633],{},[825,2220,2221],{"class":827,"line":1054},[825,2222,1639],{},[825,2224,2225],{"class":827,"line":1060},[825,2226,1645],{},[825,2228,2229],{"class":827,"line":1636},[825,2230,1651],{},[825,2232,2233],{"class":827,"line":1642},[825,2234,1657],{},[825,2236,2237],{"class":827,"line":1648},[825,2238,2239],{},"  }\n",[825,2241,2242],{"class":827,"line":1654},[825,2243,1086],{},[796,2245],{},[799,2247,1199],{"id":2248},"get-a-secret-by-id",[756,2250,2251],{},"Fetch a single secret by its UUID.",[812,2253,2254,2290],{},[815,2255,2257],{"className":817,"code":2256,"filename":819,"language":820,"meta":821,"style":821},"curl -X GET \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002Fa3bb189e-8bf9-3888-9912-ace4e6543002\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n",[807,2258,2259,2269,2280],{"__ignoreMap":821},[825,2260,2261,2263,2265,2267],{"class":827,"line":828},[825,2262,832],{"class":831},[825,2264,836],{"class":835},[825,2266,1279],{"class":835},[825,2268,843],{"class":842},[825,2270,2271,2273,2276,2278],{"class":827,"line":846},[825,2272,850],{"class":849},[825,2274,2275],{"class":835},"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002Fa3bb189e-8bf9-3888-9912-ace4e6543002",[825,2277,856],{"class":849},[825,2279,843],{"class":842},[825,2281,2282,2284,2286,2288],{"class":827,"line":861},[825,2283,864],{"class":835},[825,2285,867],{"class":849},[825,2287,1095],{"class":835},[825,2289,916],{"class":849},[815,2291,2293],{"className":919,"code":2292,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\nSECRET_ID = \"a3bb189e-8bf9-3888-9912-ace4e6543002\"\n\nasync with AsyncApiClient() as client:\n    secret = await client.get(f\"\u002Fsecrets\u002F{SECRET_ID}\")\n    params = secret[\"parameters\"]\n",[807,2294,2295,2309,2313,2327,2331,2347,2384],{"__ignoreMap":821},[825,2296,2297,2299,2301,2303,2305,2307],{"class":827,"line":828},[825,2298,1313],{"class":929},[825,2300,1316],{"class":842},[825,2302,953],{"class":849},[825,2304,1321],{"class":842},[825,2306,930],{"class":929},[825,2308,1326],{"class":842},[825,2310,2311],{"class":827,"line":846},[825,2312,939],{"emptyLinePlaceholder":938},[825,2314,2315,2318,2320,2322,2325],{"class":827,"line":861},[825,2316,2317],{"class":842},"SECRET_ID ",[825,2319,947],{"class":849},[825,2321,867],{"class":849},[825,2323,2324],{"class":835},"a3bb189e-8bf9-3888-9912-ace4e6543002",[825,2326,916],{"class":849},[825,2328,2329],{"class":827,"line":877},[825,2330,939],{"emptyLinePlaceholder":938},[825,2332,2333,2335,2337,2339,2341,2343,2345],{"class":827,"line":892},[825,2334,1335],{"class":929},[825,2336,1338],{"class":929},[825,2338,1341],{"class":956},[825,2340,1344],{"class":849},[825,2342,1347],{"class":929},[825,2344,1350],{"class":842},[825,2346,1353],{"class":849},[825,2348,2349,2351,2353,2355,2357,2359,2361,2363,2367,2370,2374,2377,2380,2382],{"class":827,"line":906},[825,2350,1710],{"class":842},[825,2352,947],{"class":849},[825,2354,1363],{"class":929},[825,2356,1350],{"class":842},[825,2358,953],{"class":849},[825,2360,1370],{"class":956},[825,2362,1373],{"class":849},[825,2364,2366],{"class":2365},"spNyl","f",[825,2368,2369],{"class":835},"\"\u002Fsecrets\u002F",[825,2371,2373],{"class":2372},"sbssI","{",[825,2375,2376],{"class":956},"SECRET_ID",[825,2378,2379],{"class":2372},"}",[825,2381,856],{"class":835},[825,2383,1057],{"class":849},[825,2385,2386,2389,2391,2394,2396,2398,2400,2402],{"class":827,"line":1006},[825,2387,2388],{"class":842},"    params ",[825,2390,947],{"class":849},[825,2392,2393],{"class":842}," secret",[825,2395,1910],{"class":849},[825,2397,856],{"class":849},[825,2399,1539],{"class":835},[825,2401,856],{"class":849},[825,2403,1086],{"class":849},[796,2405],{},[799,2407,2409],{"id":2408},"update-a-secret","Update a secret",[756,2411,2412],{},"Partial update — only include fields you want to change. Useful for rotating credentials without recreating the secret or updating any workflow code that references it by name.",[812,2414,2415,2492],{},[815,2416,2418],{"className":817,"code":2417,"filename":819,"language":820,"meta":821,"style":821},"curl -X PATCH \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002Fa3bb189e-8bf9-3888-9912-ace4e6543002\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"parameters\": {\n      \"minio_root_password\": \"new-rotated-secret-key\"\n    }\n  }'\n",[807,2419,2420,2431,2441,2453,2465,2473,2477,2482,2486],{"__ignoreMap":821},[825,2421,2422,2424,2426,2429],{"class":827,"line":828},[825,2423,832],{"class":831},[825,2425,836],{"class":835},[825,2427,2428],{"class":835}," PATCH",[825,2430,843],{"class":842},[825,2432,2433,2435,2437,2439],{"class":827,"line":846},[825,2434,850],{"class":849},[825,2436,2275],{"class":835},[825,2438,856],{"class":849},[825,2440,843],{"class":842},[825,2442,2443,2445,2447,2449,2451],{"class":827,"line":861},[825,2444,864],{"class":835},[825,2446,867],{"class":849},[825,2448,1095],{"class":835},[825,2450,856],{"class":849},[825,2452,843],{"class":842},[825,2454,2455,2457,2459,2461,2463],{"class":827,"line":877},[825,2456,864],{"class":835},[825,2458,867],{"class":849},[825,2460,1589],{"class":835},[825,2462,856],{"class":849},[825,2464,843],{"class":842},[825,2466,2467,2469,2471],{"class":827,"line":892},[825,2468,880],{"class":835},[825,2470,1600],{"class":849},[825,2472,1603],{"class":835},[825,2474,2475],{"class":827,"line":906},[825,2476,1618],{"class":835},[825,2478,2479],{"class":827,"line":1006},[825,2480,2481],{"class":835},"      \"minio_root_password\": \"new-rotated-secret-key\"\n",[825,2483,2484],{"class":827,"line":1027},[825,2485,1657],{"class":835},[825,2487,2488,2490],{"class":827,"line":1048},[825,2489,1663],{"class":835},[825,2491,1666],{"class":849},[815,2493,2495],{"className":919,"code":2494,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\nSECRET_ID = \"a3bb189e-8bf9-3888-9912-ace4e6543002\"\n\nasync with AsyncApiClient() as client:\n    updated = await client.patch(f\"\u002Fsecrets\u002F{SECRET_ID}\", json={\n        \"parameters\": {\n            \"minio_root_password\": \"new-rotated-secret-key\",\n        },\n    })\n",[807,2496,2497,2511,2515,2527,2531,2547,2583,2595,2614,2618],{"__ignoreMap":821},[825,2498,2499,2501,2503,2505,2507,2509],{"class":827,"line":828},[825,2500,1313],{"class":929},[825,2502,1316],{"class":842},[825,2504,953],{"class":849},[825,2506,1321],{"class":842},[825,2508,930],{"class":929},[825,2510,1326],{"class":842},[825,2512,2513],{"class":827,"line":846},[825,2514,939],{"emptyLinePlaceholder":938},[825,2516,2517,2519,2521,2523,2525],{"class":827,"line":861},[825,2518,2317],{"class":842},[825,2520,947],{"class":849},[825,2522,867],{"class":849},[825,2524,2324],{"class":835},[825,2526,916],{"class":849},[825,2528,2529],{"class":827,"line":877},[825,2530,939],{"emptyLinePlaceholder":938},[825,2532,2533,2535,2537,2539,2541,2543,2545],{"class":827,"line":892},[825,2534,1335],{"class":929},[825,2536,1338],{"class":929},[825,2538,1341],{"class":956},[825,2540,1344],{"class":849},[825,2542,1347],{"class":929},[825,2544,1350],{"class":842},[825,2546,1353],{"class":849},[825,2548,2549,2552,2554,2556,2558,2560,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581],{"class":827,"line":906},[825,2550,2551],{"class":842},"    updated ",[825,2553,947],{"class":849},[825,2555,1363],{"class":929},[825,2557,1350],{"class":842},[825,2559,953],{"class":849},[825,2561,2562],{"class":956},"patch",[825,2564,1373],{"class":849},[825,2566,2366],{"class":2365},[825,2568,2369],{"class":835},[825,2570,2373],{"class":2372},[825,2572,2376],{"class":956},[825,2574,2379],{"class":2372},[825,2576,856],{"class":835},[825,2578,1732],{"class":849},[825,2580,1735],{"class":977},[825,2582,981],{"class":849},[825,2584,2585,2587,2589,2591,2593],{"class":827,"line":1006},[825,2586,986],{"class":849},[825,2588,1539],{"class":835},[825,2590,856],{"class":849},[825,2592,994],{"class":849},[825,2594,1788],{"class":849},[825,2596,2597,2599,2601,2603,2605,2607,2610,2612],{"class":827,"line":1027},[825,2598,1793],{"class":849},[825,2600,1816],{"class":835},[825,2602,856],{"class":849},[825,2604,994],{"class":849},[825,2606,867],{"class":849},[825,2608,2609],{"class":835},"new-rotated-secret-key",[825,2611,856],{"class":849},[825,2613,972],{"class":849},[825,2615,2616],{"class":827,"line":1048},[825,2617,1893],{"class":849},[825,2619,2620],{"class":827,"line":1054},[825,2621,1898],{"class":849},[756,2623,2624,1931,2626,2628],{},[1928,2625,1930],{},[807,2627,2174],{}," — returns the full updated secret object.",[796,2630],{},[799,2632,1241],{"id":2633},"delete-a-secret",[756,2635,2636],{},"Permanently removes a secret. Workflows that reference it by name will fail until a replacement is created.",[812,2638,2639,2675],{},[815,2640,2642],{"className":817,"code":2641,"filename":819,"language":820,"meta":821,"style":821},"curl -X DELETE \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002Fa3bb189e-8bf9-3888-9912-ace4e6543002\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n",[807,2643,2644,2655,2665],{"__ignoreMap":821},[825,2645,2646,2648,2650,2653],{"class":827,"line":828},[825,2647,832],{"class":831},[825,2649,836],{"class":835},[825,2651,2652],{"class":835}," DELETE",[825,2654,843],{"class":842},[825,2656,2657,2659,2661,2663],{"class":827,"line":846},[825,2658,850],{"class":849},[825,2660,2275],{"class":835},[825,2662,856],{"class":849},[825,2664,843],{"class":842},[825,2666,2667,2669,2671,2673],{"class":827,"line":861},[825,2668,864],{"class":835},[825,2670,867],{"class":849},[825,2672,1095],{"class":835},[825,2674,916],{"class":849},[815,2676,2678],{"className":919,"code":2677,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\nSECRET_ID = \"a3bb189e-8bf9-3888-9912-ace4e6543002\"\n\nasync with AsyncApiClient() as client:\n    await client.delete(f\"\u002Fsecrets\u002F{SECRET_ID}\")\n",[807,2679,2680,2694,2698,2710,2714,2730],{"__ignoreMap":821},[825,2681,2682,2684,2686,2688,2690,2692],{"class":827,"line":828},[825,2683,1313],{"class":929},[825,2685,1316],{"class":842},[825,2687,953],{"class":849},[825,2689,1321],{"class":842},[825,2691,930],{"class":929},[825,2693,1326],{"class":842},[825,2695,2696],{"class":827,"line":846},[825,2697,939],{"emptyLinePlaceholder":938},[825,2699,2700,2702,2704,2706,2708],{"class":827,"line":861},[825,2701,2317],{"class":842},[825,2703,947],{"class":849},[825,2705,867],{"class":849},[825,2707,2324],{"class":835},[825,2709,916],{"class":849},[825,2711,2712],{"class":827,"line":877},[825,2713,939],{"emptyLinePlaceholder":938},[825,2715,2716,2718,2720,2722,2724,2726,2728],{"class":827,"line":892},[825,2717,1335],{"class":929},[825,2719,1338],{"class":929},[825,2721,1341],{"class":956},[825,2723,1344],{"class":849},[825,2725,1347],{"class":929},[825,2727,1350],{"class":842},[825,2729,1353],{"class":849},[825,2731,2732,2735,2737,2739,2742,2744,2746,2748,2750,2752,2754,2756],{"class":827,"line":906},[825,2733,2734],{"class":929},"    await",[825,2736,1350],{"class":842},[825,2738,953],{"class":849},[825,2740,2741],{"class":956},"delete",[825,2743,1373],{"class":849},[825,2745,2366],{"class":2365},[825,2747,2369],{"class":835},[825,2749,2373],{"class":2372},[825,2751,2376],{"class":956},[825,2753,2379],{"class":2372},[825,2755,856],{"class":835},[825,2757,1057],{"class":849},[756,2759,2760,1931,2762,953],{},[1928,2761,1930],{},[807,2763,2174],{},[796,2765],{},[799,2767,2769],{"id":2768},"common-use-cases","Common use cases",[2771,2772,2774],"h3",{"id":2773},"load-credentials-in-a-workflow","Load credentials in a workflow",[756,2776,2777],{},"The most common pattern: load all secrets at the start of a Prefect task and extract the ones you need by name.",[812,2779,2780,2816],{},[815,2781,2783],{"className":817,"code":2782,"filename":819,"language":820,"meta":821,"style":821},"curl -X GET \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets?name=warehouse-admin\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n",[807,2784,2785,2795,2806],{"__ignoreMap":821},[825,2786,2787,2789,2791,2793],{"class":827,"line":828},[825,2788,832],{"class":831},[825,2790,836],{"class":835},[825,2792,1279],{"class":835},[825,2794,843],{"class":842},[825,2796,2797,2799,2802,2804],{"class":827,"line":846},[825,2798,850],{"class":849},[825,2800,2801],{"class":835},"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets?name=warehouse-admin",[825,2803,856],{"class":849},[825,2805,843],{"class":842},[825,2807,2808,2810,2812,2814],{"class":827,"line":861},[825,2809,864],{"class":835},[825,2811,867],{"class":849},[825,2813,1095],{"class":835},[825,2815,916],{"class":849},[815,2817,2819],{"className":919,"code":2818,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\n\nasync def load_credentials() -> dict:\n    \"\"\"Load all platform secrets and return by name.\"\"\"\n    async with AsyncApiClient() as client:\n        secrets = await client.get(\"\u002Fsecrets\")\n\n    return {s[\"name\"]: s[\"parameters\"] for s in secrets}\n\n\n# In a Prefect task or flow\nasync def my_task():\n    creds = await load_credentials()\n\n    # S3\u002FMinIO credentials\n    s3 = creds[\"datalake-admin\"]\n    access_key = s3[\"minio_root_user\"]\n    secret_key = s3[\"minio_root_password\"]\n    endpoint = s3[\"aws_client_parameters\"][\"endpoint_url\"]\n\n    # Warehouse credentials\n    db = creds[\"warehouse-admin\"]\n    db_url = (\n        f\"postgresql+asyncpg:\u002F\u002F{db['username']}:{db['password']}\"\n        f\"@{db['host']}:{db['port']}\u002F{db['database']}\"\n    )\n",[807,2820,2821,2835,2839,2843,2863,2874,2891,2916,2920,2966,2970,2974,2979,2991,3005,3009,3014,3035,3056,3076,3105,3110,3116,3137,3148,3197,3263],{"__ignoreMap":821},[825,2822,2823,2825,2827,2829,2831,2833],{"class":827,"line":828},[825,2824,1313],{"class":929},[825,2826,1316],{"class":842},[825,2828,953],{"class":849},[825,2830,1321],{"class":842},[825,2832,930],{"class":929},[825,2834,1326],{"class":842},[825,2836,2837],{"class":827,"line":846},[825,2838,939],{"emptyLinePlaceholder":938},[825,2840,2841],{"class":827,"line":861},[825,2842,939],{"emptyLinePlaceholder":938},[825,2844,2845,2847,2850,2853,2855,2858,2861],{"class":827,"line":877},[825,2846,1335],{"class":2365},[825,2848,2849],{"class":2365}," def",[825,2851,2852],{"class":956}," load_credentials",[825,2854,1344],{"class":849},[825,2856,2857],{"class":849}," ->",[825,2859,2860],{"class":831}," dict",[825,2862,1353],{"class":849},[825,2864,2865,2868,2871],{"class":827,"line":892},[825,2866,2867],{"class":929},"    \"\"\"",[825,2869,2870],{"class":1923},"Load all platform secrets and return by name.",[825,2872,2873],{"class":929},"\"\"\"\n",[825,2875,2876,2879,2881,2883,2885,2887,2889],{"class":827,"line":906},[825,2877,2878],{"class":929},"    async",[825,2880,1338],{"class":929},[825,2882,1341],{"class":956},[825,2884,1344],{"class":849},[825,2886,1347],{"class":929},[825,2888,1350],{"class":842},[825,2890,1353],{"class":849},[825,2892,2893,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914],{"class":827,"line":1006},[825,2894,2895],{"class":842},"        secrets ",[825,2897,947],{"class":849},[825,2899,1363],{"class":929},[825,2901,1350],{"class":842},[825,2903,953],{"class":849},[825,2905,1370],{"class":956},[825,2907,1373],{"class":849},[825,2909,856],{"class":849},[825,2911,1727],{"class":835},[825,2913,856],{"class":849},[825,2915,1057],{"class":849},[825,2917,2918],{"class":827,"line":1027},[825,2919,939],{"emptyLinePlaceholder":938},[825,2921,2922,2925,2928,2931,2933,2935,2937,2939,2942,2944,2946,2948,2950,2952,2954,2957,2959,2961,2964],{"class":827,"line":1048},[825,2923,2924],{"class":929},"    return",[825,2926,2927],{"class":849}," {",[825,2929,2930],{"class":842},"s",[825,2932,1910],{"class":849},[825,2934,856],{"class":849},[825,2936,1744],{"class":835},[825,2938,856],{"class":849},[825,2940,2941],{"class":849},"]:",[825,2943,2125],{"class":842},[825,2945,1910],{"class":849},[825,2947,856],{"class":849},[825,2949,1539],{"class":835},[825,2951,856],{"class":849},[825,2953,2136],{"class":849},[825,2955,2956],{"class":929}," for",[825,2958,2113],{"class":842},[825,2960,2116],{"class":929},[825,2962,2963],{"class":842}," secrets",[825,2965,1964],{"class":849},[825,2967,2968],{"class":827,"line":1054},[825,2969,939],{"emptyLinePlaceholder":938},[825,2971,2972],{"class":827,"line":1060},[825,2973,939],{"emptyLinePlaceholder":938},[825,2975,2976],{"class":827,"line":1636},[825,2977,2978],{"class":1923},"# In a Prefect task or flow\n",[825,2980,2981,2983,2985,2988],{"class":827,"line":1642},[825,2982,1335],{"class":2365},[825,2984,2849],{"class":2365},[825,2986,2987],{"class":956}," my_task",[825,2989,2990],{"class":849},"():\n",[825,2992,2993,2996,2998,3000,3002],{"class":827,"line":1648},[825,2994,2995],{"class":842},"    creds ",[825,2997,947],{"class":849},[825,2999,1363],{"class":929},[825,3001,2852],{"class":956},[825,3003,3004],{"class":849},"()\n",[825,3006,3007],{"class":827,"line":1654},[825,3008,939],{"emptyLinePlaceholder":938},[825,3010,3011],{"class":827,"line":1660},[825,3012,3013],{"class":1923},"    # S3\u002FMinIO credentials\n",[825,3015,3017,3020,3022,3025,3027,3029,3031,3033],{"class":827,"line":3016},17,[825,3018,3019],{"class":842},"    s3 ",[825,3021,947],{"class":849},[825,3023,3024],{"class":842}," creds",[825,3026,1910],{"class":849},[825,3028,856],{"class":849},[825,3030,1753],{"class":835},[825,3032,856],{"class":849},[825,3034,1086],{"class":849},[825,3036,3038,3041,3043,3046,3048,3050,3052,3054],{"class":827,"line":3037},18,[825,3039,3040],{"class":842},"    access_key ",[825,3042,947],{"class":849},[825,3044,3045],{"class":842}," s3",[825,3047,1910],{"class":849},[825,3049,856],{"class":849},[825,3051,1796],{"class":835},[825,3053,856],{"class":849},[825,3055,1086],{"class":849},[825,3057,3059,3062,3064,3066,3068,3070,3072,3074],{"class":827,"line":3058},19,[825,3060,3061],{"class":842},"    secret_key ",[825,3063,947],{"class":849},[825,3065,3045],{"class":842},[825,3067,1910],{"class":849},[825,3069,856],{"class":849},[825,3071,1816],{"class":835},[825,3073,856],{"class":849},[825,3075,1086],{"class":849},[825,3077,3079,3082,3084,3086,3088,3090,3092,3094,3097,3099,3101,3103],{"class":827,"line":3078},20,[825,3080,3081],{"class":842},"    endpoint ",[825,3083,947],{"class":849},[825,3085,3045],{"class":842},[825,3087,1910],{"class":849},[825,3089,856],{"class":849},[825,3091,1836],{"class":835},[825,3093,856],{"class":849},[825,3095,3096],{"class":849},"][",[825,3098,856],{"class":849},[825,3100,1850],{"class":835},[825,3102,856],{"class":849},[825,3104,1086],{"class":849},[825,3106,3108],{"class":827,"line":3107},21,[825,3109,939],{"emptyLinePlaceholder":938},[825,3111,3113],{"class":827,"line":3112},22,[825,3114,3115],{"class":1923},"    # Warehouse credentials\n",[825,3117,3119,3122,3124,3126,3128,3130,3133,3135],{"class":827,"line":3118},23,[825,3120,3121],{"class":842},"    db ",[825,3123,947],{"class":849},[825,3125,3024],{"class":842},[825,3127,1910],{"class":849},[825,3129,856],{"class":849},[825,3131,3132],{"class":835},"warehouse-admin",[825,3134,856],{"class":849},[825,3136,1086],{"class":849},[825,3138,3140,3143,3145],{"class":827,"line":3139},24,[825,3141,3142],{"class":842},"    db_url ",[825,3144,947],{"class":849},[825,3146,3147],{"class":849}," (\n",[825,3149,3151,3154,3157,3159,3162,3164,3167,3170,3172,3174,3176,3178,3180,3182,3184,3186,3189,3191,3193,3195],{"class":827,"line":3150},25,[825,3152,3153],{"class":2365},"        f",[825,3155,3156],{"class":835},"\"postgresql+asyncpg:\u002F\u002F",[825,3158,2373],{"class":2372},[825,3160,3161],{"class":842},"db",[825,3163,1910],{"class":849},[825,3165,3166],{"class":849},"'",[825,3168,3169],{"class":835},"username",[825,3171,3166],{"class":849},[825,3173,2136],{"class":849},[825,3175,2379],{"class":2372},[825,3177,994],{"class":835},[825,3179,2373],{"class":2372},[825,3181,3161],{"class":842},[825,3183,1910],{"class":849},[825,3185,3166],{"class":849},[825,3187,3188],{"class":835},"password",[825,3190,3166],{"class":849},[825,3192,2136],{"class":849},[825,3194,2379],{"class":2372},[825,3196,916],{"class":835},[825,3198,3200,3202,3205,3207,3209,3211,3213,3216,3218,3220,3222,3224,3226,3228,3230,3232,3235,3237,3239,3241,3244,3246,3248,3250,3252,3255,3257,3259,3261],{"class":827,"line":3199},26,[825,3201,3153],{"class":2365},[825,3203,3204],{"class":835},"\"@",[825,3206,2373],{"class":2372},[825,3208,3161],{"class":842},[825,3210,1910],{"class":849},[825,3212,3166],{"class":849},[825,3214,3215],{"class":835},"host",[825,3217,3166],{"class":849},[825,3219,2136],{"class":849},[825,3221,2379],{"class":2372},[825,3223,994],{"class":835},[825,3225,2373],{"class":2372},[825,3227,3161],{"class":842},[825,3229,1910],{"class":849},[825,3231,3166],{"class":849},[825,3233,3234],{"class":835},"port",[825,3236,3166],{"class":849},[825,3238,2136],{"class":849},[825,3240,2379],{"class":2372},[825,3242,3243],{"class":835},"\u002F",[825,3245,2373],{"class":2372},[825,3247,3161],{"class":842},[825,3249,1910],{"class":849},[825,3251,3166],{"class":849},[825,3253,3254],{"class":835},"database",[825,3256,3166],{"class":849},[825,3258,2136],{"class":849},[825,3260,2379],{"class":2372},[825,3262,916],{"class":835},[825,3264,3266],{"class":827,"line":3265},27,[825,3267,3268],{"class":849},"    )\n",[2771,3270,3272],{"id":3271},"rotate-a-credential-without-touching-workflow-code","Rotate a credential without touching workflow code",[756,3274,3275],{},"When a key is compromised or expires, update only the secret value. Every workflow that loads credentials at runtime will pick up the new value on its next run — no code changes required.",[812,3277,3278,3384],{},[815,3279,3281],{"className":817,"code":3280,"filename":819,"language":820,"meta":821,"style":821},"# 1. Find the secret ID\ncurl -X GET \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets?name=benchling-credentials\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n\n# 2. Update only the API key field\ncurl -X PATCH \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002F\u003Csecret-id>\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"parameters\": {\"api_key\": \"\u003Cnew-api-key>\"}}'\n",[807,3282,3283,3288,3298,3309,3319,3323,3328,3338,3349,3361,3373],{"__ignoreMap":821},[825,3284,3285],{"class":827,"line":828},[825,3286,3287],{"class":1923},"# 1. Find the secret ID\n",[825,3289,3290,3292,3294,3296],{"class":827,"line":846},[825,3291,832],{"class":831},[825,3293,836],{"class":835},[825,3295,1279],{"class":835},[825,3297,843],{"class":842},[825,3299,3300,3302,3305,3307],{"class":827,"line":861},[825,3301,850],{"class":849},[825,3303,3304],{"class":835},"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets?name=benchling-credentials",[825,3306,856],{"class":849},[825,3308,843],{"class":842},[825,3310,3311,3313,3315,3317],{"class":827,"line":877},[825,3312,864],{"class":835},[825,3314,867],{"class":849},[825,3316,1095],{"class":835},[825,3318,916],{"class":849},[825,3320,3321],{"class":827,"line":892},[825,3322,939],{"emptyLinePlaceholder":938},[825,3324,3325],{"class":827,"line":906},[825,3326,3327],{"class":1923},"# 2. Update only the API key field\n",[825,3329,3330,3332,3334,3336],{"class":827,"line":1006},[825,3331,832],{"class":831},[825,3333,836],{"class":835},[825,3335,2428],{"class":835},[825,3337,843],{"class":842},[825,3339,3340,3342,3345,3347],{"class":827,"line":1027},[825,3341,850],{"class":849},[825,3343,3344],{"class":835},"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\u002F\u003Csecret-id>",[825,3346,856],{"class":849},[825,3348,843],{"class":842},[825,3350,3351,3353,3355,3357,3359],{"class":827,"line":1048},[825,3352,864],{"class":835},[825,3354,867],{"class":849},[825,3356,1095],{"class":835},[825,3358,856],{"class":849},[825,3360,843],{"class":842},[825,3362,3363,3365,3367,3369,3371],{"class":827,"line":1054},[825,3364,864],{"class":835},[825,3366,867],{"class":849},[825,3368,1589],{"class":835},[825,3370,856],{"class":849},[825,3372,843],{"class":842},[825,3374,3375,3377,3379,3382],{"class":827,"line":1060},[825,3376,880],{"class":835},[825,3378,1600],{"class":849},[825,3380,3381],{"class":835},"{\"parameters\": {\"api_key\": \"\u003Cnew-api-key>\"}}",[825,3383,1666],{"class":849},[815,3385,3387],{"className":919,"code":3386,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\n\nasync def rotate_api_key(secret_name: str, new_key: str) -> None:\n    async with AsyncApiClient() as client:\n        # Find the secret by name\n        secrets = await client.get(\"\u002Fsecrets\")\n        target = next(s for s in secrets if s[\"name\"] == secret_name)\n\n        # Patch only the changed field\n        await client.patch(f\"\u002Fsecrets\u002F{target['id']}\", json={\n            \"parameters\": {\"api_key\": new_key},\n        })\n        print(f\"Rotated '{secret_name}' successfully\")\n\n\n# asyncio.run(rotate_api_key(\"benchling-credentials\", \"sk-new-key-...\"))\n",[807,3388,3389,3403,3407,3411,3447,3463,3468,3492,3534,3538,3543,3585,3611,3616,3639,3643,3647],{"__ignoreMap":821},[825,3390,3391,3393,3395,3397,3399,3401],{"class":827,"line":828},[825,3392,1313],{"class":929},[825,3394,1316],{"class":842},[825,3396,953],{"class":849},[825,3398,1321],{"class":842},[825,3400,930],{"class":929},[825,3402,1326],{"class":842},[825,3404,3405],{"class":827,"line":846},[825,3406,939],{"emptyLinePlaceholder":938},[825,3408,3409],{"class":827,"line":861},[825,3410,939],{"emptyLinePlaceholder":938},[825,3412,3413,3415,3417,3420,3422,3425,3427,3430,3432,3435,3437,3439,3442,3444],{"class":827,"line":877},[825,3414,1335],{"class":2365},[825,3416,2849],{"class":2365},[825,3418,3419],{"class":956}," rotate_api_key",[825,3421,1373],{"class":849},[825,3423,3424],{"class":977},"secret_name",[825,3426,994],{"class":849},[825,3428,3429],{"class":831}," str",[825,3431,1732],{"class":849},[825,3433,3434],{"class":977}," new_key",[825,3436,994],{"class":849},[825,3438,3429],{"class":831},[825,3440,3441],{"class":849},")",[825,3443,2857],{"class":849},[825,3445,3446],{"class":849}," None:\n",[825,3448,3449,3451,3453,3455,3457,3459,3461],{"class":827,"line":892},[825,3450,2878],{"class":929},[825,3452,1338],{"class":929},[825,3454,1341],{"class":956},[825,3456,1344],{"class":849},[825,3458,1347],{"class":929},[825,3460,1350],{"class":842},[825,3462,1353],{"class":849},[825,3464,3465],{"class":827,"line":906},[825,3466,3467],{"class":1923},"        # Find the secret by name\n",[825,3469,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490],{"class":827,"line":1006},[825,3471,2895],{"class":842},[825,3473,947],{"class":849},[825,3475,1363],{"class":929},[825,3477,1350],{"class":842},[825,3479,953],{"class":849},[825,3481,1370],{"class":956},[825,3483,1373],{"class":849},[825,3485,856],{"class":849},[825,3487,1727],{"class":835},[825,3489,856],{"class":849},[825,3491,1057],{"class":849},[825,3493,3494,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3532],{"class":827,"line":1027},[825,3495,3496],{"class":842},"        target ",[825,3498,947],{"class":849},[825,3500,2102],{"class":956},[825,3502,1373],{"class":849},[825,3504,2107],{"class":956},[825,3506,2110],{"class":929},[825,3508,2113],{"class":956},[825,3510,2116],{"class":929},[825,3512,2119],{"class":956},[825,3514,2122],{"class":929},[825,3516,2125],{"class":956},[825,3518,1910],{"class":849},[825,3520,856],{"class":849},[825,3522,1744],{"class":835},[825,3524,856],{"class":849},[825,3526,2136],{"class":849},[825,3528,2139],{"class":849},[825,3530,3531],{"class":956}," secret_name",[825,3533,1057],{"class":849},[825,3535,3536],{"class":827,"line":1048},[825,3537,939],{"emptyLinePlaceholder":938},[825,3539,3540],{"class":827,"line":1054},[825,3541,3542],{"class":1923},"        # Patch only the changed field\n",[825,3544,3545,3548,3550,3552,3554,3556,3558,3560,3562,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583],{"class":827,"line":1060},[825,3546,3547],{"class":929},"        await",[825,3549,1350],{"class":842},[825,3551,953],{"class":849},[825,3553,2562],{"class":956},[825,3555,1373],{"class":849},[825,3557,2366],{"class":2365},[825,3559,2369],{"class":835},[825,3561,2373],{"class":2372},[825,3563,3564],{"class":956},"target",[825,3566,1910],{"class":849},[825,3568,3166],{"class":849},[825,3570,1915],{"class":835},[825,3572,3166],{"class":849},[825,3574,2136],{"class":849},[825,3576,2379],{"class":2372},[825,3578,856],{"class":835},[825,3580,1732],{"class":849},[825,3582,1735],{"class":977},[825,3584,981],{"class":849},[825,3586,3587,3589,3591,3593,3595,3597,3599,3602,3604,3606,3608],{"class":827,"line":1636},[825,3588,1793],{"class":849},[825,3590,1539],{"class":835},[825,3592,856],{"class":849},[825,3594,994],{"class":849},[825,3596,2927],{"class":849},[825,3598,856],{"class":849},[825,3600,3601],{"class":835},"api_key",[825,3603,856],{"class":849},[825,3605,994],{"class":849},[825,3607,3434],{"class":956},[825,3609,3610],{"class":849},"},\n",[825,3612,3613],{"class":827,"line":1642},[825,3614,3615],{"class":849},"        })\n",[825,3617,3618,3621,3623,3625,3628,3630,3632,3634,3637],{"class":827,"line":1648},[825,3619,3620],{"class":956},"        print",[825,3622,1373],{"class":849},[825,3624,2366],{"class":2365},[825,3626,3627],{"class":835},"\"Rotated '",[825,3629,2373],{"class":2372},[825,3631,3424],{"class":956},[825,3633,2379],{"class":2372},[825,3635,3636],{"class":835},"' successfully\"",[825,3638,1057],{"class":849},[825,3640,3641],{"class":827,"line":1654},[825,3642,939],{"emptyLinePlaceholder":938},[825,3644,3645],{"class":827,"line":1660},[825,3646,939],{"emptyLinePlaceholder":938},[825,3648,3649],{"class":827,"line":3016},[825,3650,3651],{"class":1923},"# asyncio.run(rotate_api_key(\"benchling-credentials\", \"sk-new-key-...\"))\n",[2771,3653,3655],{"id":3654},"bootstrap-secrets-for-a-new-environment","Bootstrap secrets for a new environment",[756,3657,3658],{},"Create all required secrets for a fresh deployment in one script:",[812,3660,3661,3772],{},[815,3662,3664],{"className":817,"code":3663,"filename":819,"language":820,"meta":821,"style":821},"curl -X POST \\\n  \"http:\u002F\u002Funitelabs-api.\u003Ctenant-id>.svc\u002Fv1\u002Fsecrets\" \\\n  -H \"Authorization: Bearer \u003Ctoken>\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"warehouse-admin\",\n    \"type\": \"postgres\",\n    \"parameters\": {\n      \"host\": \"postgres.svc\",\n      \"port\": 5432,\n      \"database\": \"unitelabs\",\n      \"username\": \"warehouse_user\",\n      \"password\": \"secure-password\",\n      \"schema_name\": \"warehouse\"\n    }\n  }'\n",[807,3665,3666,3676,3686,3698,3710,3718,3723,3728,3732,3737,3742,3747,3752,3757,3762,3766],{"__ignoreMap":821},[825,3667,3668,3670,3672,3674],{"class":827,"line":828},[825,3669,832],{"class":831},[825,3671,836],{"class":835},[825,3673,839],{"class":835},[825,3675,843],{"class":842},[825,3677,3678,3680,3682,3684],{"class":827,"line":846},[825,3679,850],{"class":849},[825,3681,1564],{"class":835},[825,3683,856],{"class":849},[825,3685,843],{"class":842},[825,3687,3688,3690,3692,3694,3696],{"class":827,"line":861},[825,3689,864],{"class":835},[825,3691,867],{"class":849},[825,3693,1095],{"class":835},[825,3695,856],{"class":849},[825,3697,843],{"class":842},[825,3699,3700,3702,3704,3706,3708],{"class":827,"line":877},[825,3701,864],{"class":835},[825,3703,867],{"class":849},[825,3705,1589],{"class":835},[825,3707,856],{"class":849},[825,3709,843],{"class":842},[825,3711,3712,3714,3716],{"class":827,"line":892},[825,3713,880],{"class":835},[825,3715,1600],{"class":849},[825,3717,1603],{"class":835},[825,3719,3720],{"class":827,"line":906},[825,3721,3722],{"class":835},"    \"name\": \"warehouse-admin\",\n",[825,3724,3725],{"class":827,"line":1006},[825,3726,3727],{"class":835},"    \"type\": \"postgres\",\n",[825,3729,3730],{"class":827,"line":1027},[825,3731,1618],{"class":835},[825,3733,3734],{"class":827,"line":1048},[825,3735,3736],{"class":835},"      \"host\": \"postgres.svc\",\n",[825,3738,3739],{"class":827,"line":1054},[825,3740,3741],{"class":835},"      \"port\": 5432,\n",[825,3743,3744],{"class":827,"line":1060},[825,3745,3746],{"class":835},"      \"database\": \"unitelabs\",\n",[825,3748,3749],{"class":827,"line":1636},[825,3750,3751],{"class":835},"      \"username\": \"warehouse_user\",\n",[825,3753,3754],{"class":827,"line":1642},[825,3755,3756],{"class":835},"      \"password\": \"secure-password\",\n",[825,3758,3759],{"class":827,"line":1648},[825,3760,3761],{"class":835},"      \"schema_name\": \"warehouse\"\n",[825,3763,3764],{"class":827,"line":1654},[825,3765,1657],{"class":835},[825,3767,3768,3770],{"class":827,"line":1660},[825,3769,1663],{"class":835},[825,3771,1666],{"class":849},[815,3773,3775],{"className":919,"code":3774,"filename":1306,"language":922,"meta":821,"style":821},"from unitelabs.sdk import AsyncApiClient\n\nSECRETS = [\n    {\n        \"name\": \"datalake-admin\",\n        \"type\": \"aws-s3\",\n        \"parameters\": {\n            \"minio_root_user\": \"access-key\",\n            \"minio_root_password\": \"secret-key\",\n            \"aws_client_parameters\": {\n                \"endpoint_url\": \"http:\u002F\u002Fminio.svc:9000\",\n                \"bucket_name\": \"lab-data\",\n            },\n        },\n    },\n    {\n        \"name\": \"warehouse-admin\",\n        \"type\": \"postgres\",\n        \"parameters\": {\n            \"host\": \"postgres.svc\",\n            \"port\": 5432,\n            \"database\": \"unitelabs\",\n            \"username\": \"warehouse_user\",\n            \"password\": \"secure-password\",\n            \"schema_name\": \"warehouse\",\n        },\n    },\n]\n\n\nasync def bootstrap_secrets() -> None:\n    async with AsyncApiClient() as client:\n        existing = await client.get(\"\u002Fsecrets\")\n        existing_names = {s[\"name\"] for s in existing}\n\n        for secret in SECRETS:\n            if secret[\"name\"] in existing_names:\n                print(f\"Skipping '{secret['name']}' — already exists\")\n                continue\n            await client.post(\"\u002Fsecrets\", json=secret)\n            print(f\"Created '{secret['name']}'\")\n",[807,3776,3777,3791,3795,3805,3810,3828,3846,3858,3877,3896,3908,3926,3944,3948,3952,3956,3960,3978,3996,4008,4027,4042,4061,4080,4099,4119,4123,4127,4132,4137,4142,4158,4175,4201,4234,4239,4255,4281,4315,4321,4351],{"__ignoreMap":821},[825,3778,3779,3781,3783,3785,3787,3789],{"class":827,"line":828},[825,3780,1313],{"class":929},[825,3782,1316],{"class":842},[825,3784,953],{"class":849},[825,3786,1321],{"class":842},[825,3788,930],{"class":929},[825,3790,1326],{"class":842},[825,3792,3793],{"class":827,"line":846},[825,3794,939],{"emptyLinePlaceholder":938},[825,3796,3797,3800,3802],{"class":827,"line":861},[825,3798,3799],{"class":842},"SECRETS ",[825,3801,947],{"class":849},[825,3803,3804],{"class":849}," [\n",[825,3806,3807],{"class":827,"line":877},[825,3808,3809],{"class":849},"    {\n",[825,3811,3812,3814,3816,3818,3820,3822,3824,3826],{"class":827,"line":892},[825,3813,986],{"class":849},[825,3815,1744],{"class":835},[825,3817,856],{"class":849},[825,3819,994],{"class":849},[825,3821,867],{"class":849},[825,3823,1753],{"class":835},[825,3825,856],{"class":849},[825,3827,972],{"class":849},[825,3829,3830,3832,3834,3836,3838,3840,3842,3844],{"class":827,"line":906},[825,3831,986],{"class":849},[825,3833,1532],{"class":835},[825,3835,856],{"class":849},[825,3837,994],{"class":849},[825,3839,867],{"class":849},[825,3841,1259],{"class":835},[825,3843,856],{"class":849},[825,3845,972],{"class":849},[825,3847,3848,3850,3852,3854,3856],{"class":827,"line":1006},[825,3849,986],{"class":849},[825,3851,1539],{"class":835},[825,3853,856],{"class":849},[825,3855,994],{"class":849},[825,3857,1788],{"class":849},[825,3859,3860,3862,3864,3866,3868,3870,3873,3875],{"class":827,"line":1027},[825,3861,1793],{"class":849},[825,3863,1796],{"class":835},[825,3865,856],{"class":849},[825,3867,994],{"class":849},[825,3869,867],{"class":849},[825,3871,3872],{"class":835},"access-key",[825,3874,856],{"class":849},[825,3876,972],{"class":849},[825,3878,3879,3881,3883,3885,3887,3889,3892,3894],{"class":827,"line":1048},[825,3880,1793],{"class":849},[825,3882,1816],{"class":835},[825,3884,856],{"class":849},[825,3886,994],{"class":849},[825,3888,867],{"class":849},[825,3890,3891],{"class":835},"secret-key",[825,3893,856],{"class":849},[825,3895,972],{"class":849},[825,3897,3898,3900,3902,3904,3906],{"class":827,"line":1054},[825,3899,1793],{"class":849},[825,3901,1836],{"class":835},[825,3903,856],{"class":849},[825,3905,994],{"class":849},[825,3907,1788],{"class":849},[825,3909,3910,3912,3914,3916,3918,3920,3922,3924],{"class":827,"line":1060},[825,3911,1847],{"class":849},[825,3913,1850],{"class":835},[825,3915,856],{"class":849},[825,3917,994],{"class":849},[825,3919,867],{"class":849},[825,3921,1859],{"class":835},[825,3923,856],{"class":849},[825,3925,972],{"class":849},[825,3927,3928,3930,3932,3934,3936,3938,3940,3942],{"class":827,"line":1636},[825,3929,1847],{"class":849},[825,3931,1870],{"class":835},[825,3933,856],{"class":849},[825,3935,994],{"class":849},[825,3937,867],{"class":849},[825,3939,1879],{"class":835},[825,3941,856],{"class":849},[825,3943,972],{"class":849},[825,3945,3946],{"class":827,"line":1642},[825,3947,1888],{"class":849},[825,3949,3950],{"class":827,"line":1648},[825,3951,1893],{"class":849},[825,3953,3954],{"class":827,"line":1654},[825,3955,1051],{"class":849},[825,3957,3958],{"class":827,"line":1660},[825,3959,3809],{"class":849},[825,3961,3962,3964,3966,3968,3970,3972,3974,3976],{"class":827,"line":3016},[825,3963,986],{"class":849},[825,3965,1744],{"class":835},[825,3967,856],{"class":849},[825,3969,994],{"class":849},[825,3971,867],{"class":849},[825,3973,3132],{"class":835},[825,3975,856],{"class":849},[825,3977,972],{"class":849},[825,3979,3980,3982,3984,3986,3988,3990,3992,3994],{"class":827,"line":3037},[825,3981,986],{"class":849},[825,3983,1532],{"class":835},[825,3985,856],{"class":849},[825,3987,994],{"class":849},[825,3989,867],{"class":849},[825,3991,1262],{"class":835},[825,3993,856],{"class":849},[825,3995,972],{"class":849},[825,3997,3998,4000,4002,4004,4006],{"class":827,"line":3058},[825,3999,986],{"class":849},[825,4001,1539],{"class":835},[825,4003,856],{"class":849},[825,4005,994],{"class":849},[825,4007,1788],{"class":849},[825,4009,4010,4012,4014,4016,4018,4020,4023,4025],{"class":827,"line":3078},[825,4011,1793],{"class":849},[825,4013,3215],{"class":835},[825,4015,856],{"class":849},[825,4017,994],{"class":849},[825,4019,867],{"class":849},[825,4021,4022],{"class":835},"postgres.svc",[825,4024,856],{"class":849},[825,4026,972],{"class":849},[825,4028,4029,4031,4033,4035,4037,4040],{"class":827,"line":3107},[825,4030,1793],{"class":849},[825,4032,3234],{"class":835},[825,4034,856],{"class":849},[825,4036,994],{"class":849},[825,4038,4039],{"class":2372}," 5432",[825,4041,972],{"class":849},[825,4043,4044,4046,4048,4050,4052,4054,4057,4059],{"class":827,"line":3112},[825,4045,1793],{"class":849},[825,4047,3254],{"class":835},[825,4049,856],{"class":849},[825,4051,994],{"class":849},[825,4053,867],{"class":849},[825,4055,4056],{"class":835},"unitelabs",[825,4058,856],{"class":849},[825,4060,972],{"class":849},[825,4062,4063,4065,4067,4069,4071,4073,4076,4078],{"class":827,"line":3118},[825,4064,1793],{"class":849},[825,4066,3169],{"class":835},[825,4068,856],{"class":849},[825,4070,994],{"class":849},[825,4072,867],{"class":849},[825,4074,4075],{"class":835},"warehouse_user",[825,4077,856],{"class":849},[825,4079,972],{"class":849},[825,4081,4082,4084,4086,4088,4090,4092,4095,4097],{"class":827,"line":3139},[825,4083,1793],{"class":849},[825,4085,3188],{"class":835},[825,4087,856],{"class":849},[825,4089,994],{"class":849},[825,4091,867],{"class":849},[825,4093,4094],{"class":835},"secure-password",[825,4096,856],{"class":849},[825,4098,972],{"class":849},[825,4100,4101,4103,4106,4108,4110,4112,4115,4117],{"class":827,"line":3150},[825,4102,1793],{"class":849},[825,4104,4105],{"class":835},"schema_name",[825,4107,856],{"class":849},[825,4109,994],{"class":849},[825,4111,867],{"class":849},[825,4113,4114],{"class":835},"warehouse",[825,4116,856],{"class":849},[825,4118,972],{"class":849},[825,4120,4121],{"class":827,"line":3199},[825,4122,1893],{"class":849},[825,4124,4125],{"class":827,"line":3265},[825,4126,1051],{"class":849},[825,4128,4130],{"class":827,"line":4129},28,[825,4131,1086],{"class":849},[825,4133,4135],{"class":827,"line":4134},29,[825,4136,939],{"emptyLinePlaceholder":938},[825,4138,4140],{"class":827,"line":4139},30,[825,4141,939],{"emptyLinePlaceholder":938},[825,4143,4145,4147,4149,4152,4154,4156],{"class":827,"line":4144},31,[825,4146,1335],{"class":2365},[825,4148,2849],{"class":2365},[825,4150,4151],{"class":956}," bootstrap_secrets",[825,4153,1344],{"class":849},[825,4155,2857],{"class":849},[825,4157,3446],{"class":849},[825,4159,4161,4163,4165,4167,4169,4171,4173],{"class":827,"line":4160},32,[825,4162,2878],{"class":929},[825,4164,1338],{"class":929},[825,4166,1341],{"class":956},[825,4168,1344],{"class":849},[825,4170,1347],{"class":929},[825,4172,1350],{"class":842},[825,4174,1353],{"class":849},[825,4176,4178,4181,4183,4185,4187,4189,4191,4193,4195,4197,4199],{"class":827,"line":4177},33,[825,4179,4180],{"class":842},"        existing ",[825,4182,947],{"class":849},[825,4184,1363],{"class":929},[825,4186,1350],{"class":842},[825,4188,953],{"class":849},[825,4190,1370],{"class":956},[825,4192,1373],{"class":849},[825,4194,856],{"class":849},[825,4196,1727],{"class":835},[825,4198,856],{"class":849},[825,4200,1057],{"class":849},[825,4202,4204,4207,4209,4211,4213,4215,4217,4219,4221,4223,4225,4227,4229,4232],{"class":827,"line":4203},34,[825,4205,4206],{"class":842},"        existing_names ",[825,4208,947],{"class":849},[825,4210,2927],{"class":849},[825,4212,2930],{"class":842},[825,4214,1910],{"class":849},[825,4216,856],{"class":849},[825,4218,1744],{"class":835},[825,4220,856],{"class":849},[825,4222,2136],{"class":849},[825,4224,2956],{"class":929},[825,4226,2113],{"class":842},[825,4228,2116],{"class":929},[825,4230,4231],{"class":842}," existing",[825,4233,1964],{"class":849},[825,4235,4237],{"class":827,"line":4236},35,[825,4238,939],{"emptyLinePlaceholder":938},[825,4240,4242,4245,4248,4250,4253],{"class":827,"line":4241},36,[825,4243,4244],{"class":929},"        for",[825,4246,4247],{"class":842}," secret ",[825,4249,2116],{"class":929},[825,4251,4252],{"class":842}," SECRETS",[825,4254,1353],{"class":849},[825,4256,4258,4261,4263,4265,4267,4269,4271,4273,4276,4279],{"class":827,"line":4257},37,[825,4259,4260],{"class":929},"            if",[825,4262,2393],{"class":842},[825,4264,1910],{"class":849},[825,4266,856],{"class":849},[825,4268,1744],{"class":835},[825,4270,856],{"class":849},[825,4272,2136],{"class":849},[825,4274,4275],{"class":849}," in",[825,4277,4278],{"class":842}," existing_names",[825,4280,1353],{"class":849},[825,4282,4284,4287,4289,4291,4294,4296,4298,4300,4302,4304,4306,4308,4310,4313],{"class":827,"line":4283},38,[825,4285,4286],{"class":956},"                print",[825,4288,1373],{"class":849},[825,4290,2366],{"class":2365},[825,4292,4293],{"class":835},"\"Skipping '",[825,4295,2373],{"class":2372},[825,4297,1907],{"class":956},[825,4299,1910],{"class":849},[825,4301,3166],{"class":849},[825,4303,1744],{"class":835},[825,4305,3166],{"class":849},[825,4307,2136],{"class":849},[825,4309,2379],{"class":2372},[825,4311,4312],{"class":835},"' — already exists\"",[825,4314,1057],{"class":849},[825,4316,4318],{"class":827,"line":4317},39,[825,4319,4320],{"class":929},"                continue\n",[825,4322,4324,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349],{"class":827,"line":4323},40,[825,4325,4326],{"class":929},"            await",[825,4328,1350],{"class":842},[825,4330,953],{"class":849},[825,4332,957],{"class":956},[825,4334,1373],{"class":849},[825,4336,856],{"class":849},[825,4338,1727],{"class":835},[825,4340,856],{"class":849},[825,4342,1732],{"class":849},[825,4344,1735],{"class":977},[825,4346,947],{"class":849},[825,4348,1907],{"class":956},[825,4350,1057],{"class":849},[825,4352,4354,4357,4359,4361,4364,4366,4368,4370,4372,4374,4376,4378,4380,4383],{"class":827,"line":4353},41,[825,4355,4356],{"class":956},"            print",[825,4358,1373],{"class":849},[825,4360,2366],{"class":2365},[825,4362,4363],{"class":835},"\"Created '",[825,4365,2373],{"class":2372},[825,4367,1907],{"class":956},[825,4369,1910],{"class":849},[825,4371,3166],{"class":849},[825,4373,1744],{"class":835},[825,4375,3166],{"class":849},[825,4377,2136],{"class":849},[825,4379,2379],{"class":2372},[825,4381,4382],{"class":835},"'\"",[825,4384,1057],{"class":849},[796,4386],{},[799,4388,4390],{"id":4389},"next-steps","Next steps",[777,4392,4393,4403,4412],{},[780,4394,4395,4399,4400,4402],{},[4396,4397,544],"a",{"href":4398},"\u002Fobserve\u002Fconcepts\u002Fstorage\u002F"," — uses the ",[807,4401,1753],{}," secret for MinIO access",[780,4404,4405,4399,4409,4411],{},[4396,4406,4408],{"href":4407},"\u002Fobserve\u002Fconcepts\u002Fdata-sources\u002F","Data Sources",[807,4410,3132],{}," secret for PostgreSQL",[780,4413,4414,4417],{},[4396,4415,564],{"href":4416},"\u002Fobserve\u002Fguides\u002Fbuilding-an-etl\u002F"," — loads both secrets at flow startup",[4419,4420,4421],"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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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}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}",{"title":821,"searchDepth":828,"depth":846,"links":4423},[4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4438],{"id":801,"depth":846,"text":802},{"id":1112,"depth":846,"text":1113},{"id":1246,"depth":846,"text":1247},{"id":1399,"depth":846,"text":1400},{"id":1525,"depth":846,"text":1526},{"id":1969,"depth":846,"text":1970},{"id":2248,"depth":846,"text":1199},{"id":2408,"depth":846,"text":2409},{"id":2633,"depth":846,"text":1241},{"id":2768,"depth":846,"text":2769,"children":4434},[4435,4436,4437],{"id":2773,"depth":861,"text":2774},{"id":3271,"depth":861,"text":3272},{"id":3654,"depth":861,"text":3655},{"id":4389,"depth":846,"text":4390},"Secure and manage credentials like API keys, tokens, and passwords for safe and reusable access in workflows.","md",null,{},{"title":548,"description":4439},"9TgjFpePwqLfMhgukzbJLtqIeRJbktJY5Msx6DtBEPQ",[4446,4448],{"title":544,"path":545,"stem":546,"description":4447},"Store and retrieve files using UniteLabs S3-compatible object storage.",{"title":552,"path":553,"stem":554,"description":4449},"Connect to and manage data sources in the UniteLabs Platform.",1783607791734]