← Back to tool index
HTTP API

API reference

Every tool on this site is a pair of endpoints: GET /api/<tool>/ returns the fields it accepts, and POST /api/<tool>/ queues a run. The web form at /tools/<tool>/ posts to exactly the same endpoint with the same field names, so anything the form can do, a client can.

These pages are generated from the tool definitions themselves, so they describe the running server rather than a snapshot of it.

Quick start

Submit a job, then poll it

RDKit needs no installation, so it is the easiest thing to try first.

  1. Post the inputs

    Send JSON or ordinary form data. No authentication, no CSRF token, no API key.

    curl -X POST https://www.athanortools.com/api/rdkit/ \
      -H 'Content-Type: application/json' \
      -d '{
      "operation": "descriptors",
      "smiles": "CC(=O)OC1=CC=CC=C1C(=O)O",
      "include_inchi": false
    }'
  2. Read the job back

    The response is 202 Accepted. Nothing has run yet: one job executes at a time across the whole site, and position counts how many are ahead of this one.

    {
      "ok": true,
      "job": {
        "id": "9f1c8a2be5f0417d",
        "tool": "rdkit",
        "status": "queued",
        "status_url": "/api/jobs/9f1c8a2be5f0417d/",
        "submitted_at": "2026-01-01T00:00:00+00:00",
        "started_at": null,
        "finished_at": null,
        "position": 0
      }
    }
  3. Poll status_url until it settles

    That is GET /api/jobs/%3Cjob_id%3E/, returned with the job so it never has to be assembled by hand. Poll every second or so. A finished job carries either result or error, and finished jobs are dropped once enough newer ones arrive, so collect the result rather than leaving it on the server.

    curl https://www.athanortools.com/api/jobs/9f1c8a2be5f0417d/
    {
      "ok": true,
      "job": {
        "id": "9f1c8a2be5f0417d",
        "tool": "rdkit",
        "status": "succeeded",
        "finished_at": "2026-01-01T00:00:02+00:00",
        "result": { "…": "whatever the tool returned" },
        "license": { "type": "…", "details": "…" }
      }
    }
Conventions

What holds for every tool

Job statuses

statusMeaning
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.

Error codes

Every error is {"ok": false, "error": {"code": …, "message": …}}, whether it comes back from the request itself or from a failed job's error.

codeMeaning
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 process 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.
Field types

How a field's kind is sent

Each tool's page lists its fields; this is what the kinds mean over HTTP.

KindSendNotes
text string A single line of text.
textarea string Free text. Line breaks are significant to the tools that read this as a file's contents.
number number A number, within the range given for the field.
checkbox boolean Either a JSON boolean, or one of the strings "1", "true", "yes", or "on" for true; anything else reads as false.
select string One of the field's option values.
file string The file's text, not a path and not a multipart upload. The web form reads the chosen file in the browser and posts its contents under this name; an API client sends the same text directly.
molecule_builder string (JSON array) A JSON array of molecule objects, serialized to a string -- the value is parsed as JSON after being read as text, so a bare array is rejected.

Molecule entries

A molecule_builder field holds one entry per chain, ligand, or ion. Chain letters (A, B, C, …) are assigned in the order the entries appear, so a request never carries one.

KeyMeaning
type Which of the field's molecule types this entry is.
sequence The residues, for a protein, dna, or rna entry.
ligand A SMILES string or a CCD_ code, for a ligand entry.
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": <1-indexed integer>, "residue": "<CCD code>"} objects.
Endpoints

Every tool

36 tools, one reference page each.

Tool Endpoint Category Cost License Web form
RDKit /api/rdkit/ Cheminformatics Cheap (ms) Permissive Open ↗
OpenDDE /api/opendde/ Structure prediction · Protein Design Expensive (min or hours) Permissive Open ↗
Boltz-2 /api/boltz2/ Structure prediction · Protein Design · Property prediction Expensive (min or hours) Permissive Open ↗
Chai-1 /api/chai1/ Structure prediction · Protein Design Expensive (min or hours) Permissive Open ↗
Protenix-v2 /api/protenix/ Structure prediction Expensive (min or hours) Permissive Open ↗
ESMFold 2 /api/esmfold2/ Structure prediction · Protein Design Expensive (min or hours) Permissive Open ↗
ImmuneBuilder /api/immunebuilder/ Structure prediction · Antibody design Moderate (s) Permissive Open ↗
HighFold /api/highfold/ Structure prediction · Binder design Expensive (min or hours) Permissive Open ↗
BoltzGen /api/boltzgen/ Binder design · Protein Design · Antibody design Expensive (min or hours) Permissive Open ↗
BindCraft /api/bindcraft/ Binder design · Protein Design Expensive (min or hours) Non-commercial Open ↗
GROMACS /api/gromacs/ Molecular simulation Moderate (s) Copyleft Open ↗
IgBLAST /api/igblast/ Sequence analysis Moderate (s) Permissive Open ↗
BioPhi /api/biophi/ Antibody design · Sequence analysis Moderate (s) Permissive Open ↗
AntiFold /api/antifold/ Antibody design · Sequence prediction Moderate (s) Permissive Open ↗
AbMPNN /api/abmpnn/ Antibody design · Sequence prediction Moderate (s) Permissive Open ↗
ProteinMPNN /api/proteinmpnn/ Sequence prediction · Protein Design Moderate (s) Permissive Open ↗
LigandMPNN /api/ligandmpnn/ Sequence prediction · Protein Design Moderate (s) Permissive Open ↗
ProteinMPNN-ddG /api/proteinmpnn_ddg/ Property prediction Moderate (s) Permissive Open ↗
RFdiffusion /api/rfdiffusion/ Protein Design · Binder design Expensive (min or hours) Permissive Open ↗
RFantibody /api/rfantibody/ Antibody design · Protein Design Expensive (min or hours) Permissive Open ↗
Germinal /api/germinal/ Antibody design · Protein Design · Binder design Expensive (min or hours) Non-commercial Open ↗
mBER /api/mber/ Antibody design · Binder design · Protein Design Expensive (min or hours) Permissive Open ↗
IgDesign /api/igdesign/ Antibody design · Sequence prediction · Protein Design Expensive (min or hours) Non-commercial Open ↗
ThermoMPNN /api/thermompnn/ Property prediction · Protein Design Moderate (s) Permissive Open ↗
Boltz ADME /api/boltz_adme/ Property prediction · Cheminformatics Moderate (s) Proprietary Open ↗
Genie 3 /api/genie3/ Binder design · Protein Design Expensive (min or hours) Permissive Open ↗
DeepSP /api/deepsp/ Property prediction · Antibody design Moderate (s) Permissive Open ↗
DeepImmuno /api/deepimmuno/ Property prediction · Sequence analysis Moderate (s) Permissive Open ↗
TLimmuno2 /api/tlimmuno/ Property prediction · Sequence analysis Moderate (s) Permissive Open ↗
NetSolP /api/netsolp/ Property prediction · Sequence prediction Expensive (min or hours) Non-commercial Open ↗
DeepSTABp /api/deepstabp/ Property prediction Expensive (min or hours) Permissive Open ↗
AggreScan3D /api/aggrescan3d/ Property prediction Expensive (min or hours) Non-commercial Open ↗
DLKcat /api/dlkcat/ Property prediction · Cheminformatics Moderate (s) Permissive Open ↗
CatPred /api/catpred/ Property prediction · Cheminformatics Expensive (min or hours) Permissive Open ↗
Antibody Annotator /api/antibody_annotator/ Sequence analysis · Antibody design Moderate (s) Permissive Open ↗
PLACER /api/placer/ Structure prediction · Cheminformatics Moderate (s) Permissive Open ↗