SahaSSBio · Developer resources

SSBio Research API

A shared API for SSBio Lab research software.

Checking research services…

CatShift API guide

Explore candidate variants with predicted changes in kcat, alongside KM and estimated catalytic efficiency, from a reference protein structure and substrate.

API base: https://api.sahassbio.com/catshift/v1

Interactive CatShift reference · All tools · CatShift website

Research preview — under development. A qualifying candidate is not guaranteed. For now, please cite CatRange when using these results.

Access · Submission · Progress and results · Limits · Retention · Errors · Citation

Access and authentication

Open Get API key and enter your email address. Your emailed key works with CatRange and CatShift. Existing active emailed keys keep the same value; no separate CatShift key is needed. Your key is delivered to that inbox, never displayed in the request page. If your email is already registered, the same key is sent again; your jobs and usage allowance are preserved. Check your spam folder if it does not arrive. If the operator revokes your key, use the same form to request a replacement. The old key stops working; your account, jobs, and quota usage stay intact. Suspended accounts must be restored by the operator before requesting a key. Wait at least a minute before requesting again; up to three key emails per address per UTC day are permitted. Delivery is subject to service limits.

Keep your key private and store it in a file with permissions 600, outside your project repository. Never embed it in a public notebook, browser JavaScript, or a GitHub issue. Keys do not currently expire automatically. Operator-issued keys may have narrower tool permissions. For replacement of an exposed key, changed quotas, or an older key not linked to your email, contact info@catrange.sahassbio.com.

Send Authorization: Bearer <your-key> on job requests. Documentation, readiness information, and aggregate activity counts are public. A key can only access jobs submitted under its own client identity through this gateway. Existing website job IDs continue working on the website; they are not automatically imported into the gateway. Treat Job IDs and emailed result links as private: the existing website still uses those links to grant access to retained results.

The CatShift interactive reference lets you inspect the fields and try requests. /catshift/v1/ready and /catshift/v1/capabilities return supported inputs and live availability. See server status for a visual view and the schema page for JSON contracts.

Retry-safe submissions

For either tool, send an Idempotency-Key header containing a unique identifier for this logical submission. Reuse that identifier and the same inputs when retrying the same submission. A new identifier means a new submission, even if the inputs are identical. Multipart boundaries do not affect retry matching. Use 8–128 ASCII letters, digits, dots, underscores, colons, or hyphens. Completed submission responses can be replayed for eight days. After that, the key returns 410; a compact record prevents it from creating another job.

Choose an input mode

All submissions are multipart form data, sent to POST /catshift/v1/jobs. Use your existing Authorization: Bearer <your-key> header and a saved Idempotency-Key, following the shared retry guidance above.

Multipart field Meaning
mode interactive for one reference; csv for up to five references; demo for a curated example
options_json A JSON object containing the reference and search options below; defaults to {}
structure_file Required for interactive with structure_source=upload; .pdb, .cif or .mmcif, at most 5 MiB
csv_file Required for csv; UTF-8 CSV, at most 64 KiB and five reference rows

Each reference needs substrate SMILES and a usable structure: an uploaded file, a PDB accession, or a UniProt accession with an available structure. A UniProt accession does not guarantee structure availability. Generating a structure from sequence alone is not supported. Obtain a suitable structure externally first; review the structure guidance and external-service caveats on the CatShift website.

The protein sequence is optional when it can be taken from the chosen structure. If supplied, it must match the reference and selected chain. Specify chain_id for a multichain structure rather than relying on an implicit selection. All residue positions below refer to the reference sequence, starting at 1; they can differ from deposited structure numbering.

options_json field Meaning / default
structure_source upload (default), pdb or uniprot
accession Required for pdb or uniprot
chain_id Structure chain identifier; optional for an unambiguous single chain
sequence Optional protein sequence, 9–1,022 amino acids when supplied
smiles Required substrate SMILES, 2–512 characters
sequence_id, substrate_id Optional output labels, at most 160 characters each
direction up (default), down or either, for predicted kcat changes
min_abs_kcat_bin_shift Minimum absolute bin difference; integer 1–7, default 3
max_candidates Candidate budget per reference; integer 19–190, default 38
radius_angstrom Search neighborhood radius in Å; 2–20, default 12
region_selection automatic (default) or custom
region_ids Optional list of positive region IDs for automatic selection; normally leave empty
custom_region_residues List of positive reference-sequence positions required for custom selection
catalytic_residues, binding_residues Optional lists of known functional positions
protect_functional_residues Keep supplied functional positions unchanged; true by default
email Optional completion notification address

The demo supplies its own reference. You may override direction, min_abs_kcat_bin_shift, max_candidates, radius_angstrom and protect_functional_residues. Its curated defaults use direction=either and max_candidates=19; other modes default to up and 38.

First request: a demo

This example submits one real search. Save the submission ID before sending; use the same ID and inputs if you need to retry.

from pathlib import Path
import json
import uuid
import httpx

base = "https://api.sahassbio.com/catshift/v1"
key = Path("~/.config/ssbio/research-api-key").expanduser().read_text().strip()
submission_id = str(uuid.uuid4())
print("Save this submission ID:", submission_id)

response = httpx.post(
    f"{base}/jobs",
    headers={"Authorization": f"Bearer {key}", "Idempotency-Key": submission_id},
    files={
        "mode": (None, "demo"),
        "options_json": (None, json.dumps({"direction": "either", "max_candidates": 19})),
    },
    timeout=60,
    follow_redirects=False,
)
response.raise_for_status()
job = response.json()
print("Job ID:", job["job_id"])

Download catshift.py and save it as catshift.py. This example saves the job record, polls for completion, and downloads the result CSV:

python -m pip install httpx
python catshift.py --demo --output catshift-results.csv \
  --api-key-file ~/.config/ssbio/research-api-key

For an interactive upload, save your public options to options.json:

{
  "structure_source": "upload",
  "chain_id": "A",
  "smiles": "[H]C(=O)[C@H](O)COP(=O)(O)O",
  "sequence_id": "My reference",
  "substrate_id": "D-glyceraldehyde 3-phosphate",
  "direction": "either",
  "min_abs_kcat_bin_shift": 3,
  "max_candidates": 38
}

Use a matching protein structure and your actual substrate:

python catshift.py --options options.json --structure reference.pdb \
  --output catshift-results.csv --api-key-file ~/.config/ssbio/research-api-key

For an accession, set structure_source to pdb or uniprot, add accession to your options, and omit --structure.

Bulk searches

Use mode=csv, a csv_file and optional shared options_json. Each CSV row starts a reference search. Bulk rows use accessions; uploaded structure files are supported only in interactive mode.

Supported columns are sequence, smiles (or Isomeric SMILES), sequence_id, substrate_id, structure_source, accession and chain_id. Row values replace matching shared options. Do not include both SMILES column names.

structure_source,accession,chain_id,smiles,sequence_id,substrate_id
pdb,1TIM,A,[H]C(=O)[C@H](O)COP(=O)(O)O,Reference A,D-glyceraldehyde 3-phosphate
python catshift.py --csv references.csv --output catshift-results.csv \
  --api-key-file ~/.config/ssbio/research-api-key

A five-row bulk search still counts as one submission attempt, but each reference may evaluate up to its candidate budget. Begin with a smaller search and inspect the results before increasing the workload.

Progress, results and activity

Method and path, relative to the CatShift API base Purpose
GET /ready or GET /capabilities Public readiness, supported inputs and current limits
GET /stats Public aggregate search activity, including demo searches
POST /jobs Submit a reference search or bulk search
GET /jobs/{job_id} Status, queue/compute timing and result links
GET /jobs/{job_id}/results Structured JSON with reference cases and candidate predictions
GET /jobs/{job_id}/download CSV containing references and candidate outcomes
POST /jobs/{job_id}/notification-email Add an address using JSON {"email":"you@example.org"}

Poll approximately every 10 seconds. After status=done, inspect each cases[] entry: a bulk search may finish with some references marked failed. Within a successful case, reference contains the baseline and candidates contains the evaluated variants. Use eligible=true for qualifying candidates; read skip_reason and prediction_status for other outcomes. Candidate ranks, kcat and KM ranges, bin differences, and available efficiency estimates are included in the public results. Keep the CSV so excluded candidates and their reasons remain available for review.

A completed search with no qualifying candidates is a valid outcome. Check the reference prediction and structure/chain/substrate match first. If those are usable, consider a larger candidate budget within the stated limits, another scientifically justified region, the either direction, or a lower bin threshold for a separate exploratory search. A missing reference prediction or failed reference needs input review before a broader search. None of these changes guarantees a hit; no hits do not establish that improvement is impossible.

Activity counts describe service use and predicted candidate availability, not experimentally validated success. Read the endpoint’s collection timestamp and availability fields; do not substitute zeros for unavailable statistics. There is no CatShift /rerun endpoint in this preview. To try different inputs or settings, create a new submission with a new idempotency key.

Resources and shared limits

Clients do not need local models, a GPU or cluster credentials. CatRange and CatShift share the same hosted queue with the websites. The current service permits up to five running workers and five unfinished jobs total. Read the live readiness endpoint before submitting; capacity can change.

Default emailed keys permit 120 authenticated requests per minute and 10 new submission attempts per UTC day, shared across both tools. Operators may assign different limits. Retrying with the same idempotency key and the same inputs does not count as a new submission attempt.

CatShift currently uses CPU workers; there is no GPU request option. Each bulk job can contain at most five reference pairs, each with a candidate budget of 19–190. Budgets are upper limits, not a guarantee that all candidates receive predictions. Start with one reference or the demo before increasing the workload.

Searches currently run fresh. There is no prediction-cache control or /rerun endpoint for CatShift in this preview. For a new search or changed settings, submit a new request with a new idempotency key. Use the original key only when retrying the same request.

Result retention

Retained result files are normally cleaned up seven days after completion. Availability within that period is best effort and is not guaranteed. Download and keep your own copy promptly; the service is not an archive and cannot guarantee recovery of lost data. Gateway ownership and retry records are separate metadata; they do not extend result retention.

Errors and retries

If a submission times out after the backend may have accepted it, the gateway keeps the attempt reserved to avoid duplicate compute. Ask the operator to reconcile it; a new idempotency key would risk creating another job. Read-only polling can be retried with backoff. Automatic multi-provider failover is not enabled.

Interpretation and citation

CatShift is under development. Candidate ranks and predicted shifts are research hypotheses; they do not establish improved activity, folding, stability or catalytic efficiency. A limited search with no qualifying candidates does not show that improvement is impossible.

Bin differences are ordinal: a three-bin shift does not necessarily mean a 1,000-fold change. Efficiency comparisons use predicted range midpoints, not measured catalytic efficiency, and may be unavailable for some ranges. Review input quality and the reported limitations before choosing experiments.

For now, please cite the CatRange paper when using CatShift results. A separate CatShift citation is not yet available. The shared API is operated by SSBio Lab.