Skip to main content
Docs

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

    Tools · Fluids & Thermodynamics

    Hansen Solubility Parameters

    Hansen parameters for solutes and solvents, solute–solvent distances, RED and Flory–Huggins χ, and a ranked list of the best solvents.

    Updated October 1, 2026

    On this page

    Prices, workflows, and method papersOpen in the app

    Hansen Solubility Parameters helps you choose a solvent. It gives each molecule its three Hansen parameters (dispersion δD, polar δP, hydrogen-bonding δH) and ranks solvents by how close they are to your solute: like dissolves like, so a small distance means a likely good solvent.

    How it works

    For each molecule the parameters come from the first source that has them:

    1. Your values, given as solute_hsp.
    2. Published data from open databases (matched by InChIKey).
    3. The Stefanis–Panayiotou group-contribution method (2008), estimated from structure.

    hsp_source can force one source. Then, for every solute and solvent pair:

    • Ra, the Hansen distance: √(4ΔδD² + ΔδP² + ΔδH²), in MPa^0.5.
    • RED = Ra / R0, when you give an interaction radius R0 (per solute, or interaction_radius for all). RED below 1 predicts good solubility.
    • Flory–Huggins χ from the Lindvig (2002) relation, using each solvent's molar volume at temperature_k.

    Group-contribution estimates are less accurate than tabulated values, especially for δP and δH (typically 1 to 2 MPa^0.5 off for complex molecules); the source used is recorded for every molecule.

    Inputs

    Up to 1,000 solute SMILES and up to 200 solvent SMILES. Leave solvents out to rank against a built-in panel of 35 common solvents. top_k sets how many top solvents to pass on.

    Outputs

    FileContents
    hsp.csvδD, δP, δH, total δ, molar volume, and the source for every solute and solvent
    ranking.csvEvery solute–solvent pair with Ra, RED, χ, and its rank per solute
    top_solvents.smiThe best solvents across all solutes, for the next step

    Molecules that can't be parameterized stay in hsp.csv with an error.

    Check a chosen solvent mixture's phase behavior with VLE / Flash, or pure-solvent properties with CoolProp.

    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.

    Hansen Solubility Parameters hansen-hsp

    Job type
    hansen-hsp
    Hardware
    cpu (default)
    Typical runtime
    2 min on CPU

    Payload

    Payload fields
    FieldTypeDescription
    input_data[]requiredstring[]

    Limits: min items 1, max items 1000

    input_formatrequiredstring

    One of: "smiles"

    solvents[]string[] | null

    Limits: min items 1, max items 200

    solute_hsp[]object[] | null

    Limits: max items 1000

    solute_hsp.smilesrequiredstring

    Limits: min length 1

    solute_hsp.delta_drequireddelta

    Limits: ≥ 0, ≤ 60

    solute_hsp.delta_prequireddelta

    Limits: ≥ 0, ≤ 60

    solute_hsp.delta_hrequireddelta

    Limits: ≥ 0, ≤ 60

    solute_hsp.r0number | null

    Limits: > 0, ≤ 50

    interaction_radiusnumber | null

    Limits: > 0, ≤ 50

    hsp_sourcestring

    Default: "auto"One of: "auto", "database", "group_contribution"

    chi_alphanumber

    Default: 0.6Limits: > 0, ≤ 2

    temperature_knumber

    Default: 298.15Limits: ≥ 200, ≤ 600

    top_kinteger

    Default: 10Limits: ≥ 1, ≤ 200

    Example

    from cognichem_client import CogniChem
    
    client = CogniChem.from_env()  # reads COGNICHEM_API_KEY
    payload = {
        "input_data": ["CC(=O)Nc1ccc(O)cc1", "CC(C)(C)c1ccc(O)cc1"],
        "input_format": "smiles",
        "solvents": ["O", "CCO", "CC(C)=O", "Cc1ccccc1", "CCCCCC"],
        "interaction_radius": 8,
        "top_k": 3,
    }
    
    estimate = client.jobs.estimate(job_type="hansen-hsp", payload=payload, resource="cpu")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-hansen-hsp-run",
        job_type="hansen-hsp",
        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

    Workflow outputs

    • ArchiveZIP
    • TableCSV
    • TableCSV
    • MoleculesSMILES