This server
Every path below is relative to the address in your browser's bar. Use that same address in your scripts.
Upload a structure once, then work within its session: select atoms, substitute fragments, optimise, analyse and export. Each endpoint below expands to its exact request body, its response and a Try it out button that calls this server.
Every path below is relative to the address in your browser's bar. Use that same address in your scripts.
Anonymous uploads need no sign-in. Account operations use a short-lived token from sign-in as Authorization: Bearer …. There are no personal API keys - see API access & keys.
POST /sessions returns a session ID. Include it in subsequent request paths to access the structure and its edit history.
A response with queued: true carries a job ID. Poll /jobs/{job_id} until it reports done, failed or cancelled.
report.converged, max_force and any warnings. UFF chemistry preparation is automatic. Both structure.chemistry_preparation and report.chemistry_preparation expose its status, reuse eligibility and charge warnings, including in background-job results. provisional chemistry remains uncertain even when geometry converges. Read them before using the geometry - the request succeeding only means the calculation ran.
The full reference, with a console attached to each route, is below. This index is the same schema in plain HTML.
| Method | Path | What it does |
|---|---|---|
GET | /api | Service identification |
GET | /backends | Relaxation backends, with the licence of each |
GET | /cite | How to cite StructSub, in every format it can be downloaded in |
GET | /cite/{citation_format} | The citation in one format, as a file to import |
GET | /elements | The element colour table the interface draws with |
POST | /fragments/preview | Turn a fragment specification into 3D, without using it |
GET | /guests | The catalogued guest molecules, for a menu |
POST | /guests/preview | What a name, a SMILES string or a drawing turns into |
GET | /guests/search | Find a guest by name or formula: the catalogue first, then the constants database |
GET | /health | Liveness and current load |
GET | /ions/mobile | Every ion there are bond-valence parameters for, as element and charge; with ``session``, also the ions its structure holds, each with the charge it carries there, and whether it is a framework with organic linkers |
GET | /library | The built-in fragment catalogue |
GET | /monomers | Every residue and cap a written sequence can name |
GET | /residues | The twenty amino acids, as substitutable residues |
| Method | Path | What it does |
|---|---|---|
GET | /build/candidates | The structure types a composition could be built in |
GET | /build/molecules | Molecular identities for building, without thermodynamic calculations |
GET | /build/prototypes | Every structure type a composition can be matched to |
GET | /build/space-groups | Every space group a crystal can be built in, in its standard setting |
GET | /build/zeolites | Every zeolite framework type that can be generated from its topology |
GET | /build/zeolites/resolve | Find the zeolite a name refers to, with the exact specification that builds it |
POST | /sessions | Upload a structure and start an editing session |
POST | /sessions/build | Build a structure from a specification and start a session on it |
POST | /sessions/project | Open a user-owned project in temporary memory |
DELETE | /sessions/{session_id} | Discard a session and free the structures it holds |
GET | /sessions/{session_id} | The session's current structure and history |
GET | /sessions/{session_id}/download | Download the current structure |
GET | /sessions/{session_id}/export/formats | Every file format the current structure can be exported to |
POST | /sessions/{session_id}/redo | Step forward again after an undo |
POST | /sessions/{session_id}/undo | Step back one operation |
| Method | Path | What it does |
|---|---|---|
POST | /cloud/billing/checkout | Begin an upgrade, and say where to send the browser |
POST | /cloud/billing/portal | Where an existing customer manages their own plan, card and invoices |
POST | /cloud/billing/webhook | Stripe's account of what happened, which is the only one that counts |
| Method | Path | What it does |
|---|---|---|
GET | /cloud/config | What the browser needs before anybody has signed in |
POST | /cloud/feedback | Record a rating of the site, with or without an account |
GET | /cloud/feedback/summary | How the site is rated so far |
POST | /cloud/groups | Create |
GET | /cloud/groups/current | State |
POST | /cloud/groups/invitations | Invite |
POST | /cloud/groups/invitations/accept | Accept |
DELETE | /cloud/groups/invitations/{invitation_id} | Revoke |
DELETE | /cloud/groups/members/{member_id} | Remove |
PATCH | /cloud/groups/members/{member_id} | Role |
GET | /cloud/me | Who this is and what they may do |
POST | /cloud/onboarding/webhook | Verified Clerk signup events for founder onboarding emails. |
POST | /cloud/quote | What a calculation will cost, before it is run |
GET | /cloud/workspaces | Workspaces |
| Method | Path | What it does |
|---|---|---|
GET | /cloud/jobs | The caller's own background calculations, newest first, without results |
DELETE | /jobs/{job_id} | Request cancellation without waiting for the session lock |
GET | /jobs/{job_id} | A job's state, and its result once finished |
POST | /jobs/{job_id}/apply | Make a finished background optimisation an edit of its session |
POST | /jobs/{job_id}/open | Open the structure a background calculation ran on, as a new session |
DELETE | /jobs/{job_id}/result | Delete a finished job, its result and the structure it ran on |
| Method | Path | What it does |
|---|---|---|
POST | /frameworks/describe | Describe building units without matching anything |
POST | /frameworks/generate | Build a framework on a net and start a session on it |
POST | /frameworks/match | Which framework topologies these building units can form |
POST | /frameworks/named/{mof_id}/open | Open a named framework (MOF-5, UiO-66, ...) as a new session |
POST | /frameworks/open | Open a unit for workspace editing using the same reader as description |
POST | /frameworks/polymer | Join marked units in list order into a periodic chain without a named net |
GET | /frameworks/salt | Which library SBUs MOFs made from this metal salt contained |
GET | /frameworks/salts | What the library's search box completes: salts with formulas, motif names, framework names |
GET | /frameworks/sbu-search | Library SBUs for a motif name, a named framework or a metal salt |
GET | /frameworks/sbus | The metal SBU library, most common first |
GET | /sessions/{session_id}/building-unit | Return a finite unit specification carrying its edited bonds and geometry |
POST | /sessions/{session_id}/deconstruct/unit | One deconstructed unit as a building unit for the framework builder |
| Method | Path | What it does |
|---|---|---|
POST | /membrane/compare | A finished membrane result against measured membranes |
POST | /membrane/solve | The membrane equations on supplied isotherms and transport data |
POST | /sessions/{session_id}/analyse | Diffraction, topology, stacking, porosity and open metal sites |
GET | /sessions/{session_id}/analysis/export | The last characterisation as tables, in the same formats |
POST | /sessions/{session_id}/clashes | Find overlapping atoms: pairs far closer than any bond allows |
POST | /sessions/{session_id}/deconstruct | Break the framework into its distinct building units |
GET | /sessions/{session_id}/deconstruct/download | Download one building unit as a file |
POST | /sessions/{session_id}/guests/breakthrough | Breakthrough of a gas mixture through a packed column of this framework |
POST | /sessions/{session_id}/guests/diffusion | Diffusivity of guests in the rigid framework, by molecular dynamics |
POST | /sessions/{session_id}/guests/dock | Find where one guest binds most strongly |
POST | /sessions/{session_id}/guests/flexible | Breathing of a flexible framework: GCMC on each form, compared by OFAST |
POST | /sessions/{session_id}/guests/gcmc | Adsorption by grand canonical Monte Carlo, one simulation per pressure |
POST | /sessions/{session_id}/guests/isotherm | Henry's constant, the isosteric heat, and an adsorption isotherm |
POST | /sessions/{session_id}/guests/membrane | Gas permeation through a defect-free membrane of this framework |
POST | /sessions/{session_id}/guests/selectivity | How well this framework separates a mixture |
POST | /sessions/{session_id}/ions/diffusion | Tracer diffusivity at each temperature, the activation energy and the conductivity at 300 K, by molecular dynamics with the bond-valence force field or MACE-MP-0 |
POST | /sessions/{session_id}/ions/hop | The rate-limiting hop's barrier by climbing-image NEB, with the bond-valence force field or MACE-MP-0, started along the energy landscape's path |
POST | /sessions/{session_id}/ions/migration | The bond-valence site energy of a mobile ion, and its percolation barriers |
POST | /sessions/{session_id}/ions/voltage | The average voltage of an electrode against the ion's metal, with its theoretical capacity, energy density and volume change, from MACE-MP |
POST | /sessions/{session_id}/mechanics | Calculate elastic properties on a copy; keep the session unchanged |
GET | /sessions/{session_id}/mechanics/{result_id}/export | The same calculation as tables: CSV, TSV, Markdown, a spreadsheet or JSON |
POST | /sessions/{session_id}/pxrd/compare | Compare calculated patterns against the measured one |
DELETE | /sessions/{session_id}/pxrd/experimental | Detach one measured pattern, or every one when none is named |
GET | /sessions/{session_id}/pxrd/experimental | A measured pattern in this session: the active one unless ``dataset`` names another |
POST | /sessions/{session_id}/pxrd/experimental | Attach a measured powder pattern to the session |
POST | /sessions/{session_id}/pxrd/experimental/{dataset}/active | Make one loaded pattern the one comparisons use |
POST | /sessions/{session_id}/pxrd/refine-cell | The cell the measured pattern asks for, reached without changing the chemistry |
POST | /sessions/{session_id}/report | A result, or the whole session (``kind: "project"``), as a written report |
POST | /sessions/{session_id}/stack/fit | Rank AA, AB and slip stacks against the uploaded pXRD; leave the structure unchanged |
POST | /sessions/{session_id}/stack/fit/preview | Compare one fitted candidate with the measurement, without applying it |
POST | /sessions/{session_id}/strain | Soft points and strain distribution of a relaxed copy; the session is unchanged |
GET | /sessions/{session_id}/strain/{result_id}/export | The strain analysis as tables: a summary, every coordinate and every bond |
POST | /sessions/{session_id}/topology/net | The topological net over the real geometry, for drawing |
POST | /sessions/{session_id}/vibrations | Normal modes and an estimated infrared spectrum of a relaxed copy; the session is unchanged |
GET | /sessions/{session_id}/vibrations/{result_id}/export | The modes and spectrum as tables |
GET | /sessions/{session_id}/vibrations/{result_id}/modes/{index} | One normal mode's displacement of every atom, largest 1, in the input atom order |
| Method | Path | What it does |
|---|---|---|
GET | /names/compounds/{compound_id} | One compound: identity, derived fields, and whether structsub catalogues it |
GET | /names/lookup | What a typed name means, for when it is committed (not while typing) |
GET | /names/suggest | Completions for what is being typed: compounds and named frameworks |
| Method | Path | What it does |
|---|---|---|
POST | /sessions/{session_id}/atoms | Add one atom, at a position or onto an existing atom |
POST | /sessions/{session_id}/atoms/delete | Delete atoms, reporting the valences left open |
POST | /sessions/{session_id}/bond-orders | Perceive bond orders, coordination bonds included |
POST | /sessions/{session_id}/bonds | Add persistent connectivity used by rendering and force-field optimisation |
POST | /sessions/{session_id}/bonds/delete | Remove one bond, leaving every atom where it is |
POST | /sessions/{session_id}/bonds/delete-selected | Remove selected bonds as one edit; never delete their endpoint atoms |
POST | /sessions/{session_id}/bonds/order | Change one bond's order |
POST | /sessions/{session_id}/bonds/orders | Change selected bonds together, with one history entry and exact images |
POST | /sessions/{session_id}/curate | First-pass cleaning of a crystal that has overlapping or disordered atoms |
POST | /sessions/{session_id}/functionalise | Replace single-atom sites with a functional group |
POST | /sessions/{session_id}/geometry | Set a distance, angle or dihedral to a value |
POST | /sessions/{session_id}/guests | Drop unbound guest molecules - solvent, counterions - from a framework |
POST | /sessions/{session_id}/guests/load | Fill the pores with guest molecules, to a requested loading |
POST | /sessions/{session_id}/hydrogens | Add missing hydrogens |
POST | /sessions/{session_id}/mechanics/{result_id}/apply | Apply Mechanical Reference |
POST | /sessions/{session_id}/prepare-biomolecule | Prepare AMBER/CHARMM hydrogens and optionally add periodic water; undoable |
POST | /sessions/{session_id}/pxrd/refine-cell/apply | Make the last refined cell an edit, if nothing has changed since it was refined |
POST | /sessions/{session_id}/relax | Relax the current structure |
POST | /sessions/{session_id}/replace-atom | Change selected atoms to another element without adding a fragment |
POST | /sessions/{session_id}/select | Find sites, without changing anything |
POST | /sessions/{session_id}/stack | Turn the open layer into a bulk stack |
POST | /sessions/{session_id}/stack/fit/apply | Apply the selected fit as one undoable stack edit, preserving its fitted spacing |
POST | /sessions/{session_id}/strain/{result_id}/apply | Load the relaxed reference or the deformed structure as an undoable edit |
POST | /sessions/{session_id}/substitute | Replace selected sites with a fragment |
POST | /sessions/{session_id}/vibrations/{result_id}/apply | Load the relaxed structure the modes belong to, as an undoable edit |
| Method | Path | What it does |
|---|---|---|
POST | /sessions/{session_id}/ions/apply | Apply |
POST | /sessions/{session_id}/ions/configurations | Generate |
POST | /sessions/{session_id}/ions/preview | Preview |