{"slug":"lab-api-williamrobinson-dev-v1-lab-compile-513c40","title":"Compile a liquid-handling plan (Flex robot, pipettes, deck labware, liquids, tra","host":"lab.api.williamrobinson.dev","method":"POST","resource":"https://lab.api.williamrobinson.dev/v1/lab/compile","category":"code","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 simulati","price_listed":0.15,"price_asked":null,"state":"effects","state_label":"Not tested: has real-world effects","checks_7d":0,"answered_7d":0,"latency_ms_median":null,"reported_calls_30d":1,"reported_payers_30d":1,"networks":["eip155:8453"],"badge":"unverified","paid_checks_7d":0,"paid_ok_7d":0,"example_input":{"body":{"labware":[{"id":"plate","label":"PCR plate","slot":"A1","type":"opentrons_96_wellplate_200ul_pcr_full_skirt"},{"id":"tips50","label":"50 uL tips","slot":"A2","type":"opentrons_flex_96_tiprack_50ul"},{"id":"mmix_res","label":"Master mix reservoir","slot":"B1","type":"nest_12_reservoir_15ml"},{"id":"tubes","label":"Sample tubes","slot":"B2","type":"opentrons_24_tuberack_nest_1.5ml_snapcap"}],"liquids":[{"deadVolumeUl":300,"id":"mastermix","location":{"labware":"mmix_res","volumeUl":5000,"wells":"A1"},"name":"PCR master mix"},{"deadVolumeUl":20,"id":"samples","location":{"labware":"tubes","volumeUl":200,"wells":"A1:D2"},"name":"Patient samples"}],"name":"PCR setup with 8-sample column and column-12 dilution series","options":{"defaultNewTip":"once","forbidCrossLiquidTipReuse":true,"trashSlot":"A3"},"pipettes":[{"model":"flex_8channel_50","mount":"left"},{"model":"flex_1channel_50","mount":"right"}],"robot":"flex","steps":[{"dests":{"labware":"plate","wells":"A1:H12"},"kind":"distribute","newTip":"once","source":{"labware":"mmix_res","well":"A1"},"volumeUl":20},{"dest":{"labware":"plate","well":"A1"},"kind":"transfer","newTip":"always","source":{"labware":"tubes","well":"A1"},"volumeUl":5},{"dest":{"labware":"plate","well":"B1"},"kind":"transfer","newTip":"always","source":{"labware":"tubes","well":"A2"},"volumeUl":5},{"dest":{"labware":"plate","well":"C1"},"kind":"transfer","newTip":"always","source":{"labware":"tubes","well":"B1"},"volumeUl":5},{"dest":{"labware":"plate","well":"D1"},"kind":"transfer","newTip":"always","source":{"labware":"tubes","well":"B2"},"volumeUl":5},{"dest":{"labware":"plate","well":"E1"},"kind":"transfer","newTip":"always","source":{"labware":"tubes","well":"C1"},"volumeUl":5},{"dest":{"labware":"plate","well":"F1"},"kind":"transfer","newTip":"always","source":{"labware":"tubes","well":"C2"},"volumeUl":5},{"dest":{"labware":"plate","well":"G1"},"kind":"transfer","newTip":"always","source":{"labware":"tubes","well":"D1"},"volumeUl":5},{"dest":{"labware":"plate","well":"H1"},"kind":"transfer","newTip":"always","source":{"labware":"tubes","well":"D2"},"volumeUl":5},{"kind":"serial_dilute","labware":"plate","mixRepetitions":3,"mixUl":15,"newTip":"always","transferUl":10,"wells":"A12:H12"},{"kind":"delay","message":"Incubate before sealing","seconds":60}]},"bodyType":"json","method":"POST","type":"http"},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"additionalProperties":false,"properties":{"body":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"labware":{"items":{"additionalProperties":false,"properties":{"id":{"description":"Caller-assigned identifier, unique within its array.","pattern":"^[A-Za-z0-9_-]{1,32}$","type":"string"},"label":{"maxLength":128,"minLength":1,"type":"string"},"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"}},"required":["id","type","slot"],"type":"object"},"maxItems":12,"minItems":1,"type":"array"},"liquids":{"items":{"additionalProperties":false,"properties":{"deadVolumeUl":{"maximum":50000,"minimum":0,"type":"number"},"id":{"description":"Caller-assigned identifier, unique within its array.","pattern":"^[A-Za-z0-9_-]{1,32}$","type":"string"},"location":{"additionalProperties":false,"properties":{"labware":{"description":"Caller-assigned identifier, unique within its array.","pattern":"^[A-Za-z0-9_-]{1,32}$","type":"string"},"volumeUl":{"exclusiveMinimum":0,"maximum":300000,"type":"number"},"wells":{"description":"A well or well range: \"A1\", \"A1:H1\" (column), \"A1:A12\" (row), or \"A1:H12\" (rectangle), expanded row-major.","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])(?::[A-P](?:[1-9]|1[0-9]|2[0-4]))?$","type":"string"}},"required":["labware","wells","volumeUl"],"type":"object"},"name":{"maxLength":200,"minLength":1,"type":"string"}},"required":["id","name","location"],"type":"object"},"maxItems":32,"type":"array"},"name":{"maxLength":200,"minLength":1,"type":"string"},"options":{"additionalProperties":false,"properties":{"defaultNewTip":{"enum":["always","once","never"],"type":"string"},"forbidCrossLiquidTipReuse":{"type":"boolean"},"trashSlot":{"description":"Flex default is A3. Column 1 or 3 only (column 2 and the column-4 staging area are not valid trash locations).","enum":["A1","B1","C1","D1","A3","B3","C3","D3"],"type":"string"}},"required":["trashSlot","defaultNewTip","forbidCrossLiquidTipReuse"],"type":"object"},"pipettes":{"items":{"additionalProperties":false,"properties":{"model":{"enum":["flex_1channel_50","flex_1channel_1000","flex_8channel_50","flex_8channel_1000"],"type":"string"},"mount":{"enum":["left","right"],"type":"string"}},"required":["mount","model"],"type":"object"},"maxItems":2,"minItems":1,"type":"array"},"robot":{"const":"flex","description":"Opentrons Flex only; OT-2 is not supported (opentrons 9.x's simulator refuses OT-2 protocols)."},"steps":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"dest":{"additionalProperties":false,"properties":{"labware":{"description":"Caller-assigned identifier, unique within its array.","pattern":"^[A-Za-z0-9_-]{1,32}$","type":"string"},"well":{"description":"A single well, e.g. \"A1\" (rows A-P, columns 1-24).","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])$","type":"string"}},"required":["labware","well"],"type":"object"},"kind":{"const":"transfer"},"mixAfterRepetitions":{"maximum":20,"minimum":1,"type":"integer"},"mixAfterUl":{"description":"Microlitres.","exclusiveMinimum":0,"maximum":10000,"type":"number"},"newTip":{"enum":["always","once","never"],"type":"string"},"source":{"additionalProperties":false,"properties":{"labware":{"description":"Caller-assigned identifier, unique within its array.","pattern":"^[A-Za-z0-9_-]{1,32}$","type":"string"},"well":{"description":"A single well, e.g. \"A1\" (rows A-P, columns 1-24).","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])$","type":"string"}},"required":["labware","well"],"type":"object"},"volumeUl":{"description":"Microlitres.","exclusiveMinimum":0,"maximum":10000,"type":"number"}},"required":["kind","source","dest","volumeUl"],"type":"object"},{"additionalProperties":false,"properties":{"dests":{"additionalProperties":false,"properties":{"labware":{"description":"Caller-assigned identifier, unique within its array.","pattern":"^[A-Za-z0-9_-]{1,32}$","type":"string"},"wells":{"description":"A well or well range: \"A1\", \"A1:H1\" (column), \"A1:A12\" (row), or \"A1:H12\" (rectangle), expanded row-major.","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])(?::[A-P](?:[1-9]|1[0-9]|2[0-4]))?$","type":"string"}},"required":["labware","wells"],"type":"object"},"kind":{"const":"distribute"},"newTip":{"enum":["always","once","never"],"type":"string"},"source":{"additionalProperties":false,"properties":{"labware":{"description":"Caller-assigned identifier, unique within its array.","pattern":"^[A-Za-z0-9_-]{1,32}$","type":"string"},"well":{"description":"A single well, e.g. \"A1\" (rows A-P, columns 1-24).","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])$","type":"string"}},"required":["labware","well"],"type":"object"},"volumeUl":{"description":"Microlitres.","exclusiveMinimum":0,"maximum":10000,"type":"number"}},"required":["kind","source","dests","volumeUl"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"serial_dilute"},"labware":{"description":"Caller-assigned identifier, unique within its array.","pattern":"^[A-Za-z0-9_-]{1,32}$","type":"string"},"mixRepetitions":{"maximum":20,"minimum":1,"type":"integer"},"mixUl":{"description":"Microlitres.","exclusiveMinimum":0,"maximum":10000,"type":"number"},"newTip":{"enum":["always","once","never"],"type":"string"},"transferUl":{"description":"Microlitres.","exclusiveMinimum":0,"maximum":10000,"type":"number"},"wells":{"description":"A well or well range: \"A1\", \"A1:H1\" (column), \"A1:A12\" (row), or \"A1:H12\" (rectangle), expanded row-major.","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])(?::[A-P](?:[1-9]|1[0-9]|2[0-4]))?$","type":"string"}},"required":["kind","labware","wells","transferUl","mixUl","mixRepetitions"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"mix"},"newTip":{"enum":["always","once","never"],"type":"string"},"repetitions":{"maximum":20,"minimum":1,"type":"integer"},"target":{"additionalProperties":false,"properties":{"labware":{"description":"Caller-assigned identifier, unique within its array.","pattern":"^[A-Za-z0-9_-]{1,32}$","type":"string"},"wells":{"description":"A well or well range: \"A1\", \"A1:H1\" (column), \"A1:A12\" (row), or \"A1:H12\" (rectangle), expanded row-major.","pattern":"^[A-P](?:[1-9]|1[0-9]|2[0-4])(?::[A-P](?:[1-9]|1[0-9]|2[0-4]))?$","type":"string"}},"required":["labware","wells"],"type":"object"},"volumeUl":{"description":"Microlitres.","exclusiveMinimum":0,"maximum":10000,"type":"number"}},"required":["kind","target","volumeUl","repetitions"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"delay"},"message":{"maxLength":500,"minLength":1,"type":"string"},"seconds":{"maximum":3600,"minimum":1,"type":"integer"}},"required":["kind","seconds"],"type":"object"}]},"maxItems":200,"minItems":1,"type":"array"}},"required":["name","robot","pipettes","labware","liquids","steps","options"],"type":"object"},"bodyType":{"enum":["json","form-data","text"],"type":"string"},"method":{"enum":["POST"],"type":"string"},"type":{"const":"http","type":"string"}},"required":["type","method","bodyType","body"],"type":"object"},"output":{"properties":{"example":{"$defs":{"check":{"additionalProperties":false,"properties":{"code":{"type":"string"},"detail":{"type":"string"},"status":{"enum":["passed","failed","not_checked"],"type":"string"}},"required":["code","status","detail"],"type":"object"}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"artifacts":{"items":{"additionalProperties":false,"properties":{"href":{"format":"uri","type":"string"},"mediaType":{"maxLength":128,"minLength":1,"type":"string"},"name":{"enum":["protocol.py","platemap.csv","platemap.svg","reagents.csv","simulation-log.txt","report.json"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"sizeBytes":{"minimum":0,"type":"integer"}},"required":["name","mediaType","sizeBytes","sha256","href"],"type":"object"},"maxItems":6,"type":"array"},"checks":{"items":{"$ref":"#/properties/output/properties/example/$defs/check"},"type":"array"},"expiresAt":{"format":"date-time","type":"string"},"findings":{"items":{"additionalProperties":false,"properties":{"code":{"type":"string"},"detail":{"type":"string"},"severity":{"enum":["error","warning"],"type":"string"},"step":{"minimum":-1,"type":"integer"}},"required":["step","code","severity","detail"],"type":"object"},"maxItems":100,"type":"array"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":16,"type":"array"},"liquids":{"items":{"additionalProperties":false,"properties":{"availableUl":{"type":"number"},"consumedUl":{"type":"number"},"id":{"type":"string"},"name":{"type":"string"},"remainingUl":{"type":"number"},"shortfallUl":{"type":"number"}},"required":["id","name","availableUl","consumedUl","remainingUl","shortfallUl"],"type":"object"},"maxItems":32,"type":"array"},"robot":{"const":"flex"},"simulation":{"additionalProperties":false,"properties":{"commands":{"minimum":0,"type":"integer"},"error":{"type":["string","null"]},"ok":{"type":"boolean"},"ran":{"type":"boolean"}},"required":["ran","ok","commands","error"],"type":"object"},"status":{"enum":["passed","failed"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"estimatedMinutes":{"minimum":0,"type":"number"},"labware":{"maximum":12,"minimum":0,"type":"integer"},"liquids":{"maximum":32,"minimum":0,"type":"integer"},"steps":{"maximum":200,"minimum":0,"type":"integer"},"tipsUsed":{"additionalProperties":{"minimum":0,"type":"integer"},"type":"object"},"transfers":{"maximum":2000,"minimum":0,"type":"integer"}},"required":["steps","transfers","tipsUsed","estimatedMinutes","labware","liquids"],"type":"object"},"tools":{"additionalProperties":false,"properties":{"apiLevel":{"type":"string"},"opentrons":{"type":"string"}},"required":["opentrons","apiLevel"],"type":"object"},"truncated":{"type":"boolean"},"warnings":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"},"wells":{"items":{"additionalProperties":false,"properties":{"labware":{"type":"string"},"liquids":{"items":{"type":"string"},"type":"array"},"volumeUl":{"minimum":0,"type":"number"},"well":{"type":"string"}},"required":["labware","well","volumeUl","liquids"],"type":"object"},"maxItems":100,"type":"array"}},"required":["status","tools","robot","summary","liquids","wells","findings","simulation","checks","warnings","limitations","truncated","expiresAt","artifacts"],"type":"object"},"type":{"type":"string"}},"required":["type"],"type":"object"}},"required":["input"],"type":"object"},"history":[],"description_full":"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.","last_updated":"2026-09-11T20:07:56.989Z","schemes":["exact"]}