Skip to main content
Docs

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

    Tools · Cheminformatics & Structure

    Reaction Enumeration

    Enumerate product libraries from reaction SMARTS or RXN files and reactant SMILES lists
    On this page

    Prices, workflows, and method papersOpen in the app

    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.

    Reaction Enumeration reaction-enumerate

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

    Payload

    Payload fields
    FieldTypeDescription
    reactants_1[]requiredreactant_list

    Limits: min items 1, max items 10000

    reactants_2[]reactant_list

    Limits: min items 1, max items 10000

    reactants_3[]reactant_list

    Limits: min items 1, max items 10000

    reactants_4[]reactant_list

    Limits: min items 1, max items 10000

    reaction_smartsstring

    Limits: min length 1

    rxn_filefile_object
    rxn_file.namestring

    Limits: min length 1

    rxn_file.filenamestring

    Limits: min length 1

    rxn_file.content_b64string

    Limits: min length 1

    rxn_file.pathstring

    Limits: min length 1

    rxn_file.$artifactobject
    rxn_file.$artifact.idrequiredstring

    Limits: min length 1

    rxn_file.$artifact.portrequiredstring

    Limits: min length 1

    rxn_file.$artifact.records[]string[]
    input_formatrequiredstring

    One of: "smiles"

    collapse_duplicatesboolean

    Default: true

    write_sdfboolean

    Default: false

    File fields take {"name": "x.pdb", "content_b64": "…"} or a stored artifact, {"$artifact": {"id": "art-…", "port": "…"}}. Files are up to 25 MiB each.

    Example

    from cognichem_client import CogniChem
    
    client = CogniChem.from_env()  # reads COGNICHEM_API_KEY
    payload = {
        "reactants_1": ["CC(=O)O", "CCC(=O)O"],
        "reactants_2": ["NCC", "CN"],
        "reaction_smarts": "[C:1](=[O:2])O.[N:3]>>[C:1](=[O:2])[N:3]",
        "input_format": "smiles",
        "collapse_duplicates": True,
        "write_sdf": False,
    }
    
    estimate = client.jobs.estimate(job_type="reaction-enumerate", payload=payload, resource="cpu")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-reaction-enumerate-run",
        job_type="reaction-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
    • Molecules (list) · optionalSMILES
    • Molecules (list) · optionalSMILES
    • Molecules (list) · optionalSMILES

    Workflow outputs

    • ArchiveZIP
    • MoleculesSMILES
    • TableCSV