Ranomics
Flow cytometry sorter in a wet lab, used for yeast display enrichment
Platform API · Private alpha

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.

Yeast displayMammalian displayDMSREST + webhooksOpenAPI
What you can submit

Three experiment types, one API surface

yeast_display

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

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 →
dms

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 →
Where this fits

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.

01 · Compute

RFdiffusion, MPNN, BindCraft, RFantibody, BoltzGen, or any custom pipeline produces 10^3 to 10^5 candidates.

02 · Ranomics (this API)

POST the pool. Yeast display library construction, sort, and NGS readout returns the top 100 to 500 enriched hits.

03 · Per-sequence biophysics

BLI / SPR on the ranked top hits. Adaptyv Foundry, Octet, or in-house biacore. Per-sequence kinetic constants.

04 · Lead optimization

Affinity maturation (DMS through this API, or a second design round) on the validated hits.

How it works

From shortlist to enriched hits, four calls

01

Get an API key

web flow

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.

02

POST your candidates

POST /api/v1/experiments

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.

03

We scope and quote

GET /quote, POST /confirm

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.

04

Poll or subscribe for results

GET /results, webhook

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 Bearer auth
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..."
      }
    }
  }'
Python requests, no SDK required
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"])
MCP Coming in phase 2

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.

Result format

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.

GET /api/v1/experiments/{id}/results JSON response (truncated)
{
  "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.

Built for agents

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.

Pricing model

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.

Calibrated 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

Custom 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.