CatPred API
Predict kcat, Km or Ki for an enzyme and its substrate, with an uncertainty estimate.
CatPred combines an ESM-2 sequence embedding of the enzyme with a message-passing representation of the substrate, and predicts a distribution rather than a point value: each prediction carries total, aleatoric and epistemic standard deviations, and the epistemic part grows as the query moves away from the training data. One run scores one CSV of reactions -- enzyme sequence, substrate or inhibitor SMILES, and a sequence ID -- against one of the three parameters, using the ten-model production ensemble the authors predict with themselves.
Input method
Set input_mode to choose how inputs are supplied. Only fields for the selected method are used.
parameters: Set parameters heretext: Enter CatPred CSVupload: Upload CatPred CSV
Example presets
Send {"preset": "glucokinase_kcat"} to load an example and its bundled inputs. Add other request fields to override its settings. The schema includes all presets under tool.presets.
| preset | Description |
|---|---|
glucokinase_kcat | CatPred's own /predict example: human glucokinase (GCK, UniProt P35557) turning over D-glucose with ATP, scored as one reaction. Source ↗ |
glucokinase_km | The same enzyme scored for the Michaelis constant of its primary substrate, which is what a Km prediction takes: one substrate, not the whole reaction. Source ↗ |
ldha_kcat | The second sample reaction in CatPred's web app: human L-lactate dehydrogenase A (UniProt P00338) with pyruvate and NADH. Source ↗ |
pal_ki | CatPred's Ki demo: phenylalanine ammonia-lyase (UniProt P11544) inhibited by 4-coumaric acid, from demo/batch_ki.csv. Source ↗ |
batch_kcat_csv | Both web-app sample reactions in one CatPred CSV, the format demo/batch_kcat.csv uses: one row per reaction, with a sequence ID per unique enzyme. Source ↗ |
Fields
The same names the web form posts. See the field type table for what each kind means over HTTP.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
job_name
|
string text | no | catpred-job |
Job name Names the output directory and the predictions CSV inside it. up to 80 characters. |
parameter
|
string select | no | kcat |
Kinetic parameter
One ensemble per parameter, each a separate model: a run predicts one of them. kcat is predicted for the reaction's whole substrate set, Km for a single substrate, and Ki for a single inhibitor.
One of:
kcat, km, ki.
|
sequence_molecules
|
string (JSON array) molecule_builder | yes | [{"type": "protein", "id": "GCK_HUMAN", "sequence": "MLDDRARMEAAKKEKVEQILAEFQLQEEDLKKVMRRM … |
Enzyme and substrates
One enzyme box and one box per substrate, which is one reaction. The enzyme's ID names its sequence in the results and is what CatPred caches its embedding under; a substrate's ID is an optional label. For kcat the substrates are joined with ".", as CatPred's own CSV writes a reaction; Km and Ki take a single ligand. Enter a CSV to score several reactions in one run.
One of:
protein, ligand.
A JSON array, sent as a string. See
molecule entries.
|
input_csv
|
string textarea | yes | SMILES,sequence,pdbpath,Substrate
C(C1C(C(C(C(O1)O)O)O)O)O.C1=NC(=C2C(=N1)N(C=N2)C3C(C(C(O … |
Reactions (CatPred CSV) CatPred's own input format: a header with SMILES, sequence and pdbpath, then one row per reaction (up to 200). pdbpath is an identifier, not a file, and must name exactly one sequence across the file; left blank, rows are numbered seq_001 onward. Any extra column, such as the demo files' Substrate, is carried through to the predictions. up to 2000000 characters. |
inputs_file
|
string file | no | — |
Reactions file Upload a CatPred CSV with SMILES, sequence and pdbpath columns. The file contents are sent to the compute node. file types .csv,.txt. |
device
|
string select | no | auto |
Device
Auto uses CUDA when available, otherwise CPU. An explicitly requested unavailable CUDA device fails clearly. Each row costs one ESM-2 embedding and ten model evaluations; CPU runs are slow but supported.
One of:
auto, cuda, cpu.
|
Molecule entry keys
| Key | Meaning |
|---|---|
type |
Which of the field's molecule types this entry is. |
id |
A chain/entity ID, or a list of IDs for identical copies. Tools with configurable IDs expose this inside each molecule box. CatPred, whose boxes are not chains of one structure, uses it for the enzyme's sequence ID (its pdbpath, which must name exactly one sequence) and for a substrate's optional label. |
count |
The number of identical copies. Used by tools whose native schema represents copy count separately from IDs. |
sequence |
The residues, for a protein, dna, or rna entry. |
ligand |
A SMILES string or a CCD_ code, for a ligand entry. CatPred resolves no CCD codes and takes SMILES only. |
ion |
An ion code, for an ion entry. |
cyclic |
Whether a polymer chain is cyclic. Tools that cannot model one reject it rather than ignoring it. |
modifications |
Substitutions, as {"position": <integer>, "residue": "<CCD code>"} objects. Position indexing follows the tool: ESMFold2 uses zero-based positions; the other molecule-builder tools use one-based positions. |
msa |
A tool-native MSA for supported protein/RNA entities. Boltz-2: an absolute .a3m/.csv path, or empty for single-sequence; omit it to generate one with the MSA server. ESMFold2: an absolute .a3m path, a serialized MSA, or a {"sequences": [...]} object. |
paired_msa_path |
An OpenDDE or Protenix protein paired-MSA path. |
unpaired_msa_path |
An OpenDDE or Protenix protein or RNA unpaired-MSA path. |
templates_path |
An OpenDDE or Protenix protein template-hits path. |
A request that runs
These are the defaults, exactly as the web form would post them.
curl -X POST https://athanortools.com/api/catpred/ \
-H 'Content-Type: application/json' \
-d '{
"input_mode": "parameters",
"job_name": "catpred-job",
"parameter": "kcat",
"sequence_molecules": "[{\"type\": \"protein\", \"id\": \"GCK_HUMAN\", \"sequence\": \"MLDDRARMEAAKKEKVEQILAEFQLQEEDLKKVMRRMQKEMDRGLRLETHEEASVKMLPTYVRSTPEGSEVGDFLSLDLGGTNFRVMLVKVGEGEEGQWSVKTKHQMYSIPEDAMTGTAEMLFDYISECISDFLDKHQMKHKKLPLGFTFSFPVRHEDIDKGILLNWTKGFKASGAEGNNVVGLLRDAIKRRGDFEMDVVAMVNDTVATMISCYYEDHQCEVGMIVGTGCNACYMEEMQNVELVEGDEGRMCVNTEWGAFGDSGELDEFLLEYDRLVDESSANPGQQLYEKLIGGKYMGELVRLVLLRLVDENLLFHGEASEQLRTRGAFETRFVSQVESDTGDRKQIYNILSTLGLRPSTTDCDIVRRACESVSTRAAHMCSAGLAGVINRMRESRSEDVMRITVGVDGSVYKLHPSFKERFHASVRRLTPSCEITFIESEEGSGRGAALVSAVACKKACMLGQ\"}, {\"type\": \"ligand\", \"id\": \"D-glucose\", \"ligand\": \"C(C1C(C(C(C(O1)O)O)O)O)O\"}, {\"type\": \"ligand\", \"id\": \"ATP\", \"ligand\": \"C1=NC(=C2C(=N1)N(C=N2)C3C(C(C(O3)COP(=O)(O)OP(=O)(O)OP(=O)(O)O)O)O)N\"}]",
"device": "auto"
}'
The reply is 202 with a queued job; poll its
status_url until status is
succeeded or failed. See
the quick start for the
whole exchange.
What comes back
| status | Meaning |
|---|---|
queued |
Accepted, waiting for the jobs ahead of it. `position` counts how many those are. |
running |
The tool is executing now. |
succeeded |
Finished; `result` holds the tool's output and `license` the terms it came under. |
failed |
Finished; `error` holds a code and a message. |
cancelled |
Abandoned at the submitter's request; there is no result. A job cancelled before its turn never ran at all. |
Errors
| code | Meaning |
|---|---|
invalid_input |
The client supplied invalid or incomplete input. |
tool_unavailable |
The requested third-party dependency is not available on this host. |
execution_failed |
A configured third-party tool exited unsuccessfully. |
internal_error |
An adapter failed in a way it does not describe. The detail is in the server log, not the response. |
not_found |
No job has that id. Finished jobs are dropped eventually. |