Getting Started

Bring a protein sequence, score Om Accessible Space, and order selected molecules with Wallet Credits.

2-Step Setup

1

Get your API key

Open your dashboard and create an API key.

# Keep secrets out of git
export OMTX_API_KEY="omtx_..."
2

Make your first request

Verify the key works by listing Generated Data available to your account.

curl https://api.omtx.ai/v2/datasets/catalog \
  -H "x-api-key: YOUR_API_KEY"

First molecule workflow

Score Om Accessible Space and order hitsPython
from pathlib import Path
from uuid import uuid4

import polars as pl
from omtx import OmClient

JAK2_V617F_SEQUENCE = "YOUR_JAK2_V617F_PROTEIN_SEQUENCE"

with OmClient(api_key="YOUR_API_KEY") as client:
    job = client.lula2.score(
        protein_sequence=JAK2_V617F_SEQUENCE,
        source="om",
        tier=50,
        n=50_000,
        top_k=10_000,
        idempotency_key="jak2-v617f-lula2-r1",
    )

    artifact_paths = []
    result_dir = Path("outputs/jak2-v617f-lula2-r1")
    for job_id in job["job_ids"]:
        client.jobs.wait(job_id, poll_interval=5, timeout=3600)
        artifact_paths.extend(
            client.jobs.download_all_artifacts(
                job_id,
                output_dir=result_dir / job_id,
                overwrite=True,
            )
        )

    score_tables = [
        pl.read_parquet(path)
        for path in artifact_paths
        if path.name == "top_hits.parquet"
    ]
    score_rows = pl.concat(score_tables).sort("score", descending=True)
    selected_hits = score_rows.head(100).to_dicts()

    addresses = client.molecules.shipping_addresses()
    order = client.molecules.order(
        items=selected_hits,
        shipping_address_id=addresses["default_shipping_address_id"],
        idempotency_key=f"jak2-v617f-round-1-{uuid4()}",
    )

print("Selected hits:", len(selected_hits))
print("Molecule order:", order["order_number"])

Fund Wallet Credits before placing molecule orders. For Om Accessible Space, selected LULA score rows already include fixed Wallet Credit costs and order metadata, so you can order the rows directly without choosing a vendor or requesting a quote.

Use /v2/health for a public smoke check, and add idempotency keys on POST requests (see Idempotency) to safely retry without duplicate launches.