{"api":"v1","generated_at":"2026-09-15T20:44:36.097Z","licence":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/","attribution":"TOLL, with a link to the page cited"},"page":"https://tollindex.com/e/lab-api-williamrobinson-dev-v1-lab-compile-902e51","pinned_page":"https://tollindex.com/e/lab-api-williamrobinson-dev-v1-lab-compile-902e51/at/2026-09-15T16-57Z","pinned":false,"method":"https://tollindex.com/ledger/method","snapshot_at":"2026-09-15T16:57:44.360Z","snapshot_stamp":"2026-09-15T16-57Z","endpoint":{"slug":"lab-api-williamrobinson-dev-v1-lab-compile-902e51","canonical_url":"https://lab.api.williamrobinson.dev/v1/lab/compile","resource":"https://lab.api.williamrobinson.dev/v1/lab/compile","http_method":"POST","type":"http","x402_version":2,"registries":["cdp"],"primary_registry":"cdp","curated_by_coinbase":false,"description":"Compile a liquid-handling plan (Flex robot, pipettes, deck labware, liquids, transfer/distribute/serial-dilute/mix/delay steps) into a self-contained Python protocol, run a static volume tracker and a real opentrons simulation, and return a pass/fail report with platemap, reagent-usage, and simulation-log artifacts. This proves the protocol runs, never that the experiment is scientifically valid.","service_name":"Laboratory-Protocol Compiler","declared_category":null,"declared_tags":["lab","opentrons","liquid-handling","protocol","life-science"],"route_template":null,"registry_updated":"2026-09-11T20:07:56.989Z"},"derived":{"note":"fields no registry supplies; TOLL derives them and marks them derived on the page","title":"lab compile","category":"compute","first_observed_by_toll":"2026-09-11T20:57:00.628Z","last_observed_by_toll":"2026-09-15T16:57:44.360Z","observation_began":"2026-09-10"},"presence":{"listed_now":true,"first_absent_at":null,"delisting_confirmed_at":null,"events":[{"registry":"cdp","at":"2026-09-11T20:57:00.628Z","event":"listed"}]},"accepts":[{"registry":"cdp","ordinal":0,"network":"eip155:8453","asset":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","asset_name":"USD Coin","symbol":"USDC","decimals":6,"amount_display":"0.15 USDC","amount_units":0.15,"decimals_known":true,"pay_to":"0x26026370fe8b2bb17af9092a17691c76519366da","scheme":"exact"}],"counters":{"observed_at":"2026-09-15T16:57:44.360Z","calls_30d":1,"unique_payers_30d":1,"last_called_at":"2026-09-11T20:07:56.411Z"},"validation":{"latest":{"observed_at":"2026-09-15T05:51:12.338Z","state":"pass","failed_checks":[],"endpoint_http_status":402,"run_id":"daily-2026-09-15"},"uptime":[{"days":7,"observed":5,"passed":5,"ratio":1},{"days":30,"observed":5,"passed":5,"ratio":1},{"days":90,"observed":5,"passed":5,"ratio":1}],"history_90d":[{"observed_at":"2026-09-15T05:51:12.338Z","state":"pass","failed_checks":[],"run_id":"daily-2026-09-15","state_changed":false},{"observed_at":"2026-09-14T05:23:28.925Z","state":"pass","failed_checks":[],"run_id":"daily-2026-09-14","state_changed":false},{"observed_at":"2026-09-13T05:18:48.621Z","state":"pass","failed_checks":[],"run_id":"daily-2026-09-13","state_changed":false},{"observed_at":"2026-09-12T07:35:09.018Z","state":"pass","failed_checks":[],"run_id":"daily-2026-09-12","state_changed":false},{"observed_at":"2026-09-11T23:29:14.992Z","state":"pass","failed_checks":[],"run_id":"new-2026-09-11T23-29-05-284Z","state_changed":true}]},"seller":{"wallet":"0x26026370fe8b2bb17af9092a17691c76519366da","page":"https://tollindex.com/seller/0x26026370fe8b2bb17af9092a17691c76519366da","endpoints":12,"hosts":12},"reports":0,"registry_record":{"cdp":[{"tags":["lab","opentrons","liquid-handling","protocol","life-science"],"type":"http","accepts":[{"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"name":"USD Coin","version":"2"},"payTo":"0x26026370fe8b2bb17af9092a17691c76519366da","amount":"150000","scheme":"exact","network":"eip155:8453","maxTimeoutSeconds":300}],"quality":{"lastCalledAt":"2026-09-11T20:07:56.411Z","l30DaysTotalCalls":1,"l30DaysUniquePayers":1},"resource":"https://lab.api.williamrobinson.dev/v1/lab/compile","extensions":{"bazaar":{"info":{"input":{"body":{"name":"PCR setup with 8-sample column and column-12 dilution series","robot":"flex","steps":[{"kind":"distribute","dests":{"wells":"A1:H12","labware":"plate"},"newTip":"once","source":{"well":"A1","labware":"mmix_res"},"volumeUl":20},{"dest":{"well":"A1","labware":"plate"},"kind":"transfer","newTip":"always","source":{"well":"A1","labware":"tubes"},"volumeUl":5},{"dest":{"well":"B1","labware":"plate"},"kind":"transfer","newTip":"always","source":{"well":"A2","labware":"tubes"},"volumeUl":5},{"dest":{"well":"C1","labware":"plate"},"kind":"transfer","newTip":"always","source":{"well":"B1","labware":"tubes"},"volumeUl":5},{"dest":{"well":"D1","labware":"plate"},"kind":"transfer","newTip":"always","source":{"well":"B2","labware":"tubes"},"volumeUl":5},{"dest":{"well":"E1","labware":"plate"},"kind":"transfer","newTip":"always","source":{"well":"C1","labware":"tubes"},"volumeUl":5},{"dest":{"well":"F1","labware":"plate"},"kind":"transfer","newTip":"always","source":{"well":"C2","labware":"tubes"},"volumeUl":5},{"dest":{"well":"G1","labware":"plate"},"kind":"transfer","newTip":"always","source":{"well":"D1","labware":"tubes"},"volumeUl":5},{"dest":{"well":"H1","labware":"plate"},"kind":"transfer","newTip":"always","source":{"well":"D2","labware":"tubes"},"volumeUl":5},{"kind":"serial_dilute","mixUl":15,"wells":"A12:H12","newTip":"always","labware":"plate","transferUl":10,"mixRepetitions":3},{"kind":"delay","message":"Incubate before sealing","seconds":60}],"labware":[{"id":"plate","slot":"A1","type":"opentrons_96_wellplate_200ul_pcr_full_skirt","label":"PCR plate"},{"id":"tips50","slot":"A2","type":"opentrons_flex_96_tiprack_50ul","label":"50 uL tips"},{"id":"mmix_res","slot":"B1","type":"nest_12_reservoir_15ml","label":"Master mix reservoir"},{"id":"tubes","slot":"B2","type":"opentrons_24_tuberack_nest_1.5ml_snapcap","label":"Sample tubes"}],"liquids":[{"id":"mastermix","name":"PCR master mix","location":{"wells":"A1","labware":"mmix_res","volumeUl":5000},"deadVolumeUl":300},{"id":"samples","name":"Patient samples","location":{"wells":"A1:D2","labware":"tubes","volumeUl":200},"deadVolumeUl":20}],"options":{"trashSlot":"A3","defaultNewTip":"once","forbidCrossLiquidTipReuse":true},"pipettes":[{"model":"flex_8channel_50","mount":"left"},{"model":"flex_1channel_50","mount":"right"}]},"type":"http","method":"POST","bodyType":"json"},"output":{"type":"json","example":{"robot":"flex","tools":{"apiLevel":"2.20","opentrons":"9.1.2"},"wells":[{"well":"A1","labware":"mmix_res","liquids":["mastermix"],"volumeUl":3080},{"well":"A1","labware":"plate","liquids":["mastermix","samples"],"volumeUl":25},{"well":"A2","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A3","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A4","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A5","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A6","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A7","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A8","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A9","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A10","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A11","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"A12","labware":"plate","liquids":["mastermix"],"volumeUl":10},{"well":"B1","labware":"plate","liquids":["mastermix","samples"],"volumeUl":25},{"well":"B2","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B3","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B4","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B5","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B6","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B7","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B8","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B9","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B10","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B11","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"B12","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C1","labware":"plate","liquids":["mastermix","samples"],"volumeUl":25},{"well":"C2","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C3","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C4","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C5","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C6","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C7","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C8","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C9","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C10","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C11","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"C12","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D1","labware":"plate","liquids":["mastermix","samples"],"volumeUl":25},{"well":"D2","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D3","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D4","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D5","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D6","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D7","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D8","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D9","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D10","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D11","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"D12","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E1","labware":"plate","liquids":["mastermix","samples"],"volumeUl":25},{"well":"E2","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E3","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E4","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E5","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E6","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E7","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E8","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E9","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E10","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E11","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"E12","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F1","labware":"plate","liquids":["mastermix","samples"],"volumeUl":25},{"well":"F2","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F3","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F4","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F5","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F6","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F7","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F8","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F9","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F10","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F11","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"F12","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G1","labware":"plate","liquids":["mastermix","samples"],"volumeUl":25},{"well":"G2","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G3","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G4","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G5","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G6","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G7","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G8","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G9","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G10","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G11","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"G12","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H1","labware":"plate","liquids":["mastermix","samples"],"volumeUl":25},{"well":"H2","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H3","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H4","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H5","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H6","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H7","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H8","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H9","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H10","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H11","labware":"plate","liquids":["mastermix"],"volumeUl":20},{"well":"H12","labware":"plate","liquids":["mastermix"],"volumeUl":30},{"well":"A1","labware":"tubes","liquids":["samples"],"volumeUl":195},{"well":"A2","labware":"tubes","liquids":["samples"],"volumeUl":195},{"well":"B1","labware":"tubes","liquids":["samples"],"volumeUl":195}],"checks":[{"code":"plan_valid","detail":"111 elementary transfer(s) across 4 labware and 2 pipette(s) resolved cleanly","status":"passed"},{"code":"labware_compatible","detail":"every pipette has a compatible tip rack and every multi-channel step is column-aligned","status":"passed"},{"code":"volumes_within_capacity","detail":"no well exceeds its fill limit","status":"passed"},{"code":"liquids_sufficient","detail":"every source liquid has enough usable volume","status":"passed"},{"code":"pipette_ranges_respected","detail":"every transfer volume is within its pipette's range","status":"passed"},{"code":"tips_sufficient","detail":"loaded tip racks cover every pickup","status":"passed"},{"code":"tip_reuse_safe","detail":"no tip touched two different liquids without a fresh pickup","status":"passed"},{"code":"simulation_passed","detail":"147 simulated command(s)","status":"passed"}],"status":"passed","liquids":[{"id":"mastermix","name":"PCR master mix","consumedUl":1920,"availableUl":5000,"remainingUl":3080,"shortfallUl":0},{"id":"samples","name":"Patient samples","consumedUl":40,"availableUl":1600,"remainingUl":1560,"shortfallUl":0}],"summary":{"steps":11,"labware":4,"liquids":2,"tipsUsed":{"left":8,"right":15},"transfers":111,"estimatedMinutes":13.63},"findings":[],"warnings":[],"artifacts":[{"href":"https://lab.api.williamrobinson.dev/v1/lab/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/protocol.py","name":"protocol.py","sha256":"02d424abe63b8fd8b2717803b5f3690504e09d695142ece16d8b0f03f7174dba","mediaType":"text/x-python; charset=utf-8","sizeBytes":6561},{"href":"https://lab.api.williamrobinson.dev/v1/lab/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/platemap.csv","name":"platemap.csv","sha256":"9dc370d60f4ac51c9036bc6d33d90c5af5d24a74ed2adae0a1b7ade1fd76d9f9","mediaType":"text/csv; charset=utf-8","sizeBytes":2425},{"href":"https://lab.api.williamrobinson.dev/v1/lab/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/platemap.svg","name":"platemap.svg","sha256":"c2dc914c4c34cb6d879352e0ed8d66e3f285904e82e3f61ba27b659ba03fc70d","mediaType":"image/svg+xml","sizeBytes":23733},{"href":"https://lab.api.williamrobinson.dev/v1/lab/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/reagents.csv","name":"reagents.csv","sha256":"3dabbe14d42a323cf294de9b0219d8d66f2cc5867ab4ea86c4925aca057cf7ce","mediaType":"text/csv; charset=utf-8","sizeBytes":196},{"href":"https://lab.api.williamrobinson.dev/v1/lab/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/simulation-log.txt","name":"simulation-log.txt","sha256":"11946c6bdbe0ad5d64ecdc45d36fca4422bde6327a0cd9be02e8ebfa2a60d1bb","mediaType":"text/plain; charset=utf-8","sizeBytes":12799},{"href":"https://lab.api.williamrobinson.dev/v1/lab/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/report.json","name":"report.json","sha256":"bccaa49a8943c4008b6ea10c0126367ec6bc64489151a08de291d9ad834ba173","mediaType":"application/json","sizeBytes":10756}],"expiresAt":"2026-09-12T08:10:35.369Z","truncated":true,"simulation":{"ok":true,"ran":true,"error":null,"commands":147},"limitations":["Simulation proves the protocol is executable by Opentrons robot software; it is not proof that the underlying experiment is scientifically valid.","No liquid-class or viscosity modelling is performed; every transfer is assumed ideal (no air gaps, splashing, or evaporation effects).","The static volume tracker assumes declared dead volumes are accurate; it cannot detect physically inaccessible liquid the caller did not declare.","OT-2 robots are not supported in v1; every generated protocol targets Opentrons Flex only.","The simulator does not check well overfill; the well_overflow finding above is this compiler's own static check."]}}},"schema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input"],"properties":{"input":{"type":"object","required":["type","method","bodyType","body"],"properties":{"body":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["name","robot","pipettes","labware","liquids","steps","options"],"properties":{"name":{"type":"string","maxLength":200,"minLength":1},"robot":{"const":"flex","description":"Opentrons Flex only; OT-2 is not supported (opentrons 9.x's simulator refuses OT-2 protocols)."},"steps":{"type":"array","items":{"oneOf":[{"type":"object","required":["kind","source","dest","volumeUl"],"properties":{"dest":{"type":"object","required":["labware","well"],"properties":{"well":{"type":"string","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])$","description":"A single well, e.g. \"A1\" (rows A-P, columns 1-24)."},"labware":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$","description":"Caller-assigned identifier, unique within its array."}},"additionalProperties":false},"kind":{"const":"transfer"},"newTip":{"enum":["always","once","never"],"type":"string"},"source":{"type":"object","required":["labware","well"],"properties":{"well":{"type":"string","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])$","description":"A single well, e.g. \"A1\" (rows A-P, columns 1-24)."},"labware":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$","description":"Caller-assigned identifier, unique within its array."}},"additionalProperties":false},"volumeUl":{"type":"number","maximum":10000,"description":"Microlitres.","exclusiveMinimum":0},"mixAfterUl":{"type":"number","maximum":10000,"description":"Microlitres.","exclusiveMinimum":0},"mixAfterRepetitions":{"type":"integer","maximum":20,"minimum":1}},"additionalProperties":false},{"type":"object","required":["kind","source","dests","volumeUl"],"properties":{"kind":{"const":"distribute"},"dests":{"type":"object","required":["labware","wells"],"properties":{"wells":{"type":"string","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])(?::[A-P](?:[1-9]|1[0-9]|2[0-4]))?$","description":"A well or well range: \"A1\", \"A1:H1\" (column), \"A1:A12\" (row), or \"A1:H12\" (rectangle), expanded row-major."},"labware":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$","description":"Caller-assigned identifier, unique within its array."}},"additionalProperties":false},"newTip":{"enum":["always","once","never"],"type":"string"},"source":{"type":"object","required":["labware","well"],"properties":{"well":{"type":"string","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])$","description":"A single well, e.g. \"A1\" (rows A-P, columns 1-24)."},"labware":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$","description":"Caller-assigned identifier, unique within its array."}},"additionalProperties":false},"volumeUl":{"type":"number","maximum":10000,"description":"Microlitres.","exclusiveMinimum":0}},"additionalProperties":false},{"type":"object","required":["kind","labware","wells","transferUl","mixUl","mixRepetitions"],"properties":{"kind":{"const":"serial_dilute"},"mixUl":{"type":"number","maximum":10000,"description":"Microlitres.","exclusiveMinimum":0},"wells":{"type":"string","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])(?::[A-P](?:[1-9]|1[0-9]|2[0-4]))?$","description":"A well or well range: \"A1\", \"A1:H1\" (column), \"A1:A12\" (row), or \"A1:H12\" (rectangle), expanded row-major."},"newTip":{"enum":["always","once","never"],"type":"string"},"labware":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$","description":"Caller-assigned identifier, unique within its array."},"transferUl":{"type":"number","maximum":10000,"description":"Microlitres.","exclusiveMinimum":0},"mixRepetitions":{"type":"integer","maximum":20,"minimum":1}},"additionalProperties":false},{"type":"object","required":["kind","target","volumeUl","repetitions"],"properties":{"kind":{"const":"mix"},"newTip":{"enum":["always","once","never"],"type":"string"},"target":{"type":"object","required":["labware","wells"],"properties":{"wells":{"type":"string","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])(?::[A-P](?:[1-9]|1[0-9]|2[0-4]))?$","description":"A well or well range: \"A1\", \"A1:H1\" (column), \"A1:A12\" (row), or \"A1:H12\" (rectangle), expanded row-major."},"labware":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$","description":"Caller-assigned identifier, unique within its array."}},"additionalProperties":false},"volumeUl":{"type":"number","maximum":10000,"description":"Microlitres.","exclusiveMinimum":0},"repetitions":{"type":"integer","maximum":20,"minimum":1}},"additionalProperties":false},{"type":"object","required":["kind","seconds"],"properties":{"kind":{"const":"delay"},"message":{"type":"string","maxLength":500,"minLength":1},"seconds":{"type":"integer","maximum":3600,"minimum":1}},"additionalProperties":false}]},"maxItems":200,"minItems":1},"labware":{"type":"array","items":{"type":"object","required":["id","type","slot"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$","description":"Caller-assigned identifier, unique within its array."},"slot":{"enum":["A1","A2","A3","B1","B2","B3","C1","C2","C3","D1","D2","D3"],"type":"string"},"type":{"enum":["opentrons_96_wellplate_200ul_pcr_full_skirt","corning_96_wellplate_360ul_flat","nest_96_wellplate_2ml_deep","corning_384_wellplate_112ul_flat","nest_12_reservoir_15ml","nest_1_reservoir_195ml","opentrons_24_tuberack_nest_1.5ml_snapcap","opentrons_flex_96_tiprack_50ul","opentrons_flex_96_tiprack_200ul","opentrons_flex_96_tiprack_1000ul"],"type":"string"},"label":{"type":"string","maxLength":128,"minLength":1}},"additionalProperties":false},"maxItems":12,"minItems":1},"liquids":{"type":"array","items":{"type":"object","required":["id","name","location"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$","description":"Caller-assigned identifier, unique within its array."},"name":{"type":"string","maxLength":200,"minLength":1},"location":{"type":"object","required":["labware","wells","volumeUl"],"properties":{"wells":{"type":"string","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])(?::[A-P](?:[1-9]|1[0-9]|2[0-4]))?$","description":"A well or well range: \"A1\", \"A1:H1\" (column), \"A1:A12\" (row), or \"A1:H12\" (rectangle), expanded row-major."},"labware":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,32}$","description":"Caller-assigned identifier, unique within its array."},"volumeUl":{"type":"number","maximum":300000,"exclusiveMinimum":0}},"additionalProperties":false},"deadVolumeUl":{"type":"number","maximum":50000,"minimum":0}},"additionalProperties":false},"maxItems":32},"options":{"type":"object","required":["trashSlot","defaultNewTip","forbidCrossLiquidTipReuse"],"properties":{"trashSlot":{"enum":["A1","B1","C1","D1","A3","B3","C3","D3"],"type":"string","description":"Flex default is A3. Column 1 or 3 only (column 2 and the column-4 staging area are not valid trash locations)."},"defaultNewTip":{"enum":["always","once","never"],"type":"string"},"forbidCrossLiquidTipReuse":{"type":"boolean"}},"additionalProperties":false},"pipettes":{"type":"array","items":{"type":"object","required":["mount","model"],"properties":{"model":{"enum":["flex_1channel_50","flex_1channel_1000","flex_8channel_50","flex_8channel_1000"],"type":"string"},"mount":{"enum":["left","right"],"type":"string"}},"additionalProperties":false},"maxItems":2,"minItems":1}},"additionalProperties":false},"type":{"type":"string","const":"http"},"method":{"enum":["POST"],"type":"string"},"bodyType":{"enum":["json","form-data","text"],"type":"string"}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","$defs":{"check":{"type":"object","required":["code","status","detail"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"status":{"enum":["passed","failed","not_checked"],"type":"string"}},"additionalProperties":false}},"$schema":"https://json-schema.org/draft/2020-12/schema","required":["status","tools","robot","summary","liquids","wells","findings","simulation","checks","warnings","limitations","truncated","expiresAt","artifacts"],"properties":{"robot":{"const":"flex"},"tools":{"type":"object","required":["opentrons","apiLevel"],"properties":{"apiLevel":{"type":"string"},"opentrons":{"type":"string"}},"additionalProperties":false},"wells":{"type":"array","items":{"type":"object","required":["labware","well","volumeUl","liquids"],"properties":{"well":{"type":"string"},"labware":{"type":"string"},"liquids":{"type":"array","items":{"type":"string"}},"volumeUl":{"type":"number","minimum":0}},"additionalProperties":false},"maxItems":100},"checks":{"type":"array","items":{"$ref":"#/properties/output/properties/example/$defs/check"}},"status":{"enum":["passed","failed"],"type":"string"},"liquids":{"type":"array","items":{"type":"object","required":["id","name","availableUl","consumedUl","remainingUl","shortfallUl"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"consumedUl":{"type":"number"},"availableUl":{"type":"number"},"remainingUl":{"type":"number"},"shortfallUl":{"type":"number"}},"additionalProperties":false},"maxItems":32},"summary":{"type":"object","required":["steps","transfers","tipsUsed","estimatedMinutes","labware","liquids"],"properties":{"steps":{"type":"integer","maximum":200,"minimum":0},"labware":{"type":"integer","maximum":12,"minimum":0},"liquids":{"type":"integer","maximum":32,"minimum":0},"tipsUsed":{"type":"object","additionalProperties":{"type":"integer","minimum":0}},"transfers":{"type":"integer","maximum":2000,"minimum":0},"estimatedMinutes":{"type":"number","minimum":0}},"additionalProperties":false},"findings":{"type":"array","items":{"type":"object","required":["step","code","severity","detail"],"properties":{"code":{"type":"string"},"step":{"type":"integer","minimum":-1},"detail":{"type":"string"},"severity":{"enum":["error","warning"],"type":"string"}},"additionalProperties":false},"maxItems":100},"warnings":{"type":"array","items":{"type":"string","maxLength":4096},"maxItems":100},"artifacts":{"type":"array","items":{"type":"object","required":["name","mediaType","sizeBytes","sha256","href"],"properties":{"href":{"type":"string","format":"uri"},"name":{"enum":["protocol.py","platemap.csv","platemap.svg","reagents.csv","simulation-log.txt","report.json"],"type":"string"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"mediaType":{"type":"string","maxLength":128,"minLength":1},"sizeBytes":{"type":"integer","minimum":0}},"additionalProperties":false},"maxItems":6},"expiresAt":{"type":"string","format":"date-time"},"truncated":{"type":"boolean"},"simulation":{"type":"object","required":["ran","ok","commands","error"],"properties":{"ok":{"type":"boolean"},"ran":{"type":"boolean"},"error":{"type":["string","null"]},"commands":{"type":"integer","minimum":0}},"additionalProperties":false},"limitations":{"type":"array","items":{"type":"string","maxLength":4096},"maxItems":16}},"additionalProperties":false}}}}}},"builder-code":{"info":{"s":["cdp_sdk_server"]},"schema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"a":{"type":"string","pattern":"^[a-z0-9_]{1,32}$","description":"App builder code"},"s":{"type":"array","items":{"type":"string","pattern":"^[a-z0-9_]{1,32}$"},"maxItems":11,"description":"Service builder codes"},"w":{"type":"string","pattern":"^[a-z0-9_]{1,32}$","description":"Wallet builder code"}},"additionalProperties":false}},"payment-identifier":{"info":{"required":true},"schema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["required"],"properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]+$","maxLength":128,"minLength":16},"required":{"type":"boolean"}}}},"eip2612GasSponsoring":{},"erc20ApprovalGasSponsoring":{}},"description":"Compile a liquid-handling plan (Flex robot, pipettes, deck labware, liquids, transfer/distribute/serial-dilute/mix/delay steps) into a self-contained Python protocol, run a static volume tracker and a real opentrons simulation, and return a pass/fail report with platemap, reagent-usage, and simulation-log artifacts. This proves the protocol runs, never that the experiment is scientifically valid.","lastUpdated":"2026-09-11T20:07:56.989Z","serviceName":"Laboratory-Protocol Compiler","x402Version":2}]}}