> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kallima.bio/llms.txt
> Use this file to discover all available pages before exploring further.

# Stability analysis

> Predict ΔΔG, solubility, thermostability, and get stabilizing mutation suggestions.

Stability analysis runs a suite of sequence- and structure-based predictors against your variant. Results include a per-residue ΔΔG matrix, solubility and aggregation scores, a predicted melting temperature, and a ranked list of stabilizing mutations. The job takes 1–3 minutes and costs 3 credits.

## Submit a job

```python theme={null}
from kallima import KallimaClient

client = KallimaClient(api_key)

job = client.stability_analyses.submit(variant_id=variant_id)
job.wait(timeout=300)
```

## Read the result

```python theme={null}
result = job.results

print(result["solubility_score"])       # float 0–1, higher = more soluble
print(result["aggregation_score"])      # float 0–1, lower = less aggregation-prone
print(result["thermostability_score"])  # float 0–1
print(result["melting_temp_predicted"]) # predicted Tm in °C, e.g. 72.4
print(result["developability_score"])   # composite 0–1
```

All score fields can be `null` if a sub-predictor fails — check before comparing.

### ΔΔG matrix

`ddg_matrix` maps each residue position (chain + index) to a predicted ΔΔG in kcal/mol. Positive values destabilize; negative values stabilize.

```python theme={null}
ddg = result["ddg_matrix"] or {}
for position, ddg_value in ddg.items():
    if ddg_value < -1.0:
        print(f"{position}: stabilizing ({ddg_value:.2f} kcal/mol)")
```

### Stabilizing mutations

```python theme={null}
for mut in result["stabilizing_mutations"] or []:
    print(mut["position"], mut["wild_type"], mut["mutation"], mut["ddg"])
```

Each entry gives the original residue, proposed substitution, position label, and predicted ΔΔG change. The list is sorted by stabilization magnitude.

## List prior analyses for a variant

```python theme={null}
for job in client.stability_analyses.list(variant_id=variant_id):
    print(job.id, job.status, job["created_at"])
```

## Cancel a pending job

```python theme={null}
client.stability_analyses.cancel(job.id)
```
