Wet lab as an API for binder design agents
POST your shortlisted candidates from RFdiffusion, ProteinMPNN, BindCraft, RFantibody, or BoltzGen runs. We return enriched hits, NGS counts, and called binders. Programmatic from end to end.
Three experiment types, one API surface
Yeast surface display
High-throughput library screen on Saccharomyces cerevisiae. Pool 10^4 to 10^8 variants, sort via FACS or MACS, read out enrichment by NGS. The default for ranking thousands of de novo designs from a single submission.
Yeast display platform →Mammalian display
Eukaryotic processing with complex glycans, full-length IgG assembly, and PTM-dependent epitopes. Use for targets where yeast glycosylation or folding limits the screen, or when developability needs to be validated in-pipeline.
Mammalian display platform →Deep mutational scanning
Saturation single-point or combinatorial mutagenesis around a confirmed hit. Returns per-position fitness data for affinity maturation, epitope mapping, and developability liability identification.
DMS overview →Library-scale triage upstream of per-sequence biophysics
Per-sequence biophysics (BLI, SPR) is the right call for 1 to 100 candidates. Vendors like Adaptyv Bio sit in that tier. But 10,000 MPNN designs at $100 per sequence is $1M of kinetics, which is rarely the right next step from a raw computational pool.
Yeast display is the library-scale tier. Pool the candidates, sort by FACS, sequence by NGS, and walk away with the top 100 to 500 enriched hits. That ranked list is what you hand off to BLI or SPR for the per-sequence work, or back to your design loop for a second round.
Ranomics is built to be the funnel feeder, not the kinetics shop. Our API conventions mirror Adaptyv's so the same agent can chain Ranomics into Adaptyv (or any other biophysics provider) without rewriting tool-call schemas.
RFdiffusion, MPNN, BindCraft, RFantibody, BoltzGen, or any custom pipeline produces 10^3 to 10^5 candidates.
POST the pool. Yeast display library construction, sort, and NGS readout returns the top 100 to 500 enriched hits.
BLI / SPR on the ranked top hits. Adaptyv Foundry, Octet, or in-house biacore. Per-sequence kinetic constants.
Affinity maturation (DMS through this API, or a second design round) on the validated hits.
From shortlist to enriched hits, four calls
Get an API key
Request alpha access. Approved users issue Bearer tokens (rk_live_...) from the account page on tools.ranomics.com. Tokens are scoped to your org and role; revoke any time.
POST your candidates
Send the experiment spec as JSON: target (catalog or custom), library design (designed panel, combinatorial, NNK, site-saturation, error-prone), and a sequences dictionary keyed by your client-side IDs. Multi-chain support via the colon separator.
We scope and quote
Calibrated targets get an instant cost estimate from /cost-estimate and an auto-generated quote. Custom targets get a human quote from the Ranomics team within 24 hours (the wet-lab work is too cost-sensitive for full agent autonomy). Confirm the quote when ready.
Poll or subscribe for results
Poll GET /experiments/{id} for the cheap status field, or pass a webhook_url at submission and receive signed POSTs on every status transition. Pull the full result blob from /results once results_status is partial or all.
Submit a yeast display experiment
The minimum viable submission: a target (here, a custom antigen sequence) and a sequences dictionary keyed by your IDs. The library_design block tells the wet lab how to construct the pool from your candidates.
curl -X POST https://tools.ranomics.com/api/v1/experiments \
-H "Authorization: Bearer $RANOMICS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "her2-mpnn-pool-r1",
"webhook_url": "https://my-agent.example/hooks/ranomics",
"experiment_spec": {
"experiment_type": "yeast_display",
"target": {
"custom": {
"name": "HER2 ECD",
"antigen_sequence": "TQVCTGTDMKLR..."
}
},
"library_design": {
"mode": "designed_panel",
"diversity_estimate": 4800
},
"sequences": {
"des_0001": "MASRYLLN...",
"des_0002": "MQRPVMG..."
}
}
}' import os, requests
API = "https://tools.ranomics.com/api/v1"
TOKEN = os.environ["RANOMICS_API_KEY"]
candidates = {
f"des_{i:04d}": seq
for i, seq in enumerate(my_mpnn_designs)
}
r = requests.post(
f"{API}/experiments",
headers={"Authorization": f"Bearer {TOKEN}"},
json={
"name": "her2-mpnn-pool-r1",
"experiment_spec": {
"experiment_type": "yeast_display",
"target": {"custom": {
"name": "HER2 ECD",
"antigen_sequence": her2_ecd_aa,
}},
"library_design": {
"mode": "designed_panel",
"diversity_estimate": len(candidates),
},
"sequences": candidates,
},
},
)
exp = r.json()
print(exp["experiment_id"], exp["status"])
An MCP server wrapping the REST API ships in phase 2 (post-alpha). Tools: submit_experiment, request_quote, confirm_quote, get_experiment_status, get_experiment_results, list_targets. Use the REST surface until then; the MCP wrapper is strictly additive and will share the same Bearer tokens.
Enrichment tables, NGS counts, called hits
Yeast display result payloads diverge from biophysics-style outputs. Instead of per-sequence kinetic constants, you get per-sequence enrichment statistics from each sort round, a called-hit boolean, and signed download URLs for the raw NGS data. Designed for ingestion back into a design loop or a downstream kinetics submission.
{
"experiment_id": "exp_01HZ...",
"status": "Done",
"results_status": "all",
"rounds": [
{
"round_id": "r1",
"sort_gate": "FITC+ top 1%",
"input_diversity": 12340,
"output_diversity": 240
}
],
"sequences": [
{
"user_key": "des_0042",
"sequence": "MASRYLLNQ...",
"pre_count": 142,
"post_count": 8910,
"log2_enrichment": 5.97,
"percentile": 99.4,
"called_hit": true
},
{
"user_key": "des_0117",
"sequence": "MQRPVMGTL...",
"pre_count": 88,
"post_count": 4420,
"log2_enrichment": 5.65,
"percentile": 98.9,
"called_hit": true
}
],
"downloads": {
"enrichment_table_csv": "https://signed-url...",
"hits_fasta": "https://signed-url...",
"raw_reads_fastq": "https://signed-url..."
}
} log2_enrichment Log2 ratio of post-sort to pre-sort count, normalized to total reads. Primary affinity ranking signal.
called_hit Boolean. Set when enrichment exceeds the per-experiment FDR-controlled threshold computed from sort gate and library size.
downloads.raw_reads_fastq Signed URL to the raw NGS read files. Opt in at submission. Available for the full retention window per the data policy.
Designed assuming the caller is an LLM, not a human
Idempotent submissions
Pass an Idempotency-Key header on POSTs. Retries deduplicate to the same experiment_id within a 24 hour window. Safe to wrap in a tool-call retry loop.
Cheap status, expensive results
GET /experiments/{id} returns a small status + results_status blob (none, partial, all). Pull /results only when results_status changes. No need to fetch megabytes to check progress.
Signed webhooks, async delivery
Optional webhook_url at submission. Status-transition POSTs are signed with X-Ranomics-Signature (Stripe-style HMAC). Delivery is async with exponential backoff; a misbehaving subscriber never blocks the API.
Sequences as a dict, not an array
Your client-side identifiers are the keys. Round-trip through the API without ID rewriting. Multi-chain sequences use the colon separator (chain1:chain2), matching Adaptyv convention.
Quote before commit
POST /cost-estimate returns a non-binding ballpark from spec only. Then GET /quote (after scoping) returns the actual quote with line items and validity window. Quotes never auto-charge; agents commit only via explicit /confirm.
OpenAPI spec and llms.txt
Machine-readable spec live at tools.ranomics.com/api/v1/openapi.json and interactive docs at /api/v1/docs. Agents discover the surface from this page (linked in our llms.txt) and from the spec. No reverse-engineering required.
Per library, per sort, per NGS run
Yeast display does not price per sequence the way per-sequence biophysics does. Total cost scales with library size, number of sort rounds, and NGS read depth. We expose this in the API by separating instant-quote calibrated targets from human-scoped custom targets.
Instant cost estimate, auto-quote
For common antigens that we have pre-calibrated (the catalog grows as we see repeat targets), POST /cost-estimate returns a real dollar number. The auto-generated quote can be confirmed immediately, no human in the loop. Phase 1 ships with an empty catalog; we add targets as we see them.
target.target_id from /api/v1/targets
Human quote within 24 hours
For anything we have not pre-calibrated (the default at launch), a Ranomics scientist scopes the experiment and returns a quote with line items, timeline, and any feasibility flags. Agents poll for the quote and confirm when the budget owner approves. No auto-charge for wet-lab work.
target.custom in the experiment_spec
Per Ranomics policy, this page does not publish a fixed price list. Order-of-magnitude expectation: pilot-scale yeast display campaigns land in the low five figures USD; multi-round mammalian display campaigns and large pooled DMS campaigns scale from there. The quote response always shows line items.
Get started
Mint a Bearer token from the account page on tools.ranomics.com, work through the quickstart, and POST your first experiment. For custom targets or larger campaigns, talk to us first so we can scope and quote the wet-lab work.