Skip to main content
Docs

Search guides and API endpoints, for example “Idempotency-Key” or “submit job”.

    Tools · Cheminformatics & Structure

    Stereoisomer Enumerator

    Expand unassigned stereocenters and double bonds into explicit stereoisomers, keeping every assignment already in your input.

    Updated October 1, 2026

    On this page

    Prices, workflows, and method papersOpen in the app

    Many molecules arrive with stereochemistry unspecified: a SMILES with an undefined stereocenter stands for several real molecules. The Stereoisomer Enumerator expands each one into explicit stereoisomers, so docking, ADMET prediction, and conformer generation work on every isomer instead of silently picking one. Stereocenters already assigned in your input are kept as they are. It runs on CPU with RDKit.

    How it works

    • It enumerates unassigned tetrahedral centers, double bonds (E/Z), and non-absolute enhanced-stereo groups.
    • Equivalent results (including meso forms) collapse to one isomer.
    • A molecule with n open stereo elements has up to 2ⁿ isomers. If that is within max_isomers_per_molecule (default 32, up to 1,024), all are listed; otherwise a fixed, repeatable sample of that many is taken and the rows are marked truncated.
    • Each isomer gets CIP labels for what was enumerated (for example C3:R;C5:S;C6=C7:E) and a stable id derived from its parent.
    • try_embedding drops isomers RDKit can't build in 3D, such as strained or impossible ones.

    A molecule with nothing to enumerate passes through unchanged.

    Inputs

    Up to 10,000 molecules as SMILES, SDF or MOL blocks, or InChI. Standardize tautomers and charges first with Molecule Standardizer if that matters for your set.

    Outputs

    • isomers.smi: every stereoisomer with its id.
    • audit.csv: one row per isomer with the parent, the isomer's SMILES and InChIKey, how many stereo elements were open, the assignments, and whether the parent was truncated. Molecules that can't be parsed get an error row; the job carries on.

    Not covered

    Tautomers and protonation states (Molecule Standardizer), atropisomers, and 3D coordinates (Conformer Ensemble Generator).

    Run it from the API

    Submit with Submit a job and the job_type below. Price it first with Estimate job reservation cost: submitting reserves that amount from your wallet, and the charge settles at the actual runtime.

    Stereoisomer Enumerator stereoisomer-enumerate

    Job type
    stereoisomer-enumerate
    Hardware
    cpu (default)
    Typical runtime
    5 min on CPU

    Payload

    Payload fields
    FieldTypeDescription
    input_data[]required(string | object)[]

    Limits: min items 1, max items 10000

    input_formatrequiredstring

    One of: "smiles", "sdf", "molblock", "inchi"

    max_isomers_per_moleculeinteger

    Default: 32Limits: ≥ 1, ≤ 1024

    try_embeddingboolean

    Default: false

    Example

    from cognichem_client import CogniChem
    
    client = CogniChem.from_env()  # reads COGNICHEM_API_KEY
    payload = {
        "input_data": ["OC(=O)C(O)C(O)C(=O)O", "C[C@H](O)C(F)CC=CC", "CCO"],
        "input_format": "smiles",
        "max_isomers_per_molecule": 32,
        "try_embedding": False,
    }
    
    estimate = client.jobs.estimate(job_type="stereoisomer-enumerate", payload=payload, resource="cpu")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-stereoisomer-enumerate-run",
        job_type="stereoisomer-enumerate",
        payload=payload,
        resource="cpu",
    )
    status = client.jobs.wait(job.process_id)
    if status.status == "completed":
        client.jobs.result(job.process_id, save_path=".")

    Sample data from the job catalog; long values are shortened here. Each job_name must be unique among your jobs.

    Workflow inputs

    • Molecules (list)SMILES, SDF, MOLBLOCK, INCHI

    Workflow outputs

    • ArchiveZIP
    • TableCSV
    • MoleculesSMILES