REST API
OrganiZymeDB exposes a read-only JSON API, with no authentication required.
All endpoints return application/json.
The base URL is the root of this site (https://organizymedb.org).
Endpoint Overview
| Method | Endpoint | Description |
|---|---|---|
GET | /api/proteins | List / search all proteins |
GET | /api/protein/<id> | Full record for one protein + mutations |
GET | /api/measurements | List / filter all measurements |
GET | /api/measurements/<id> | Single measurement record |
GET | /api/solvents | List all solvents |
GET | /api/solvent/<id> | Single solvent record |
GET | /api/compounds | List / search all compounds |
GET | /api/compound/<id> | Single compound record |
GET | /api/compound/by-name/<name> | Compound lookup by exact name |
GET | /api/stats | Database statistics |
Proteins
GETReturns a paginated list of all proteins. Supports optional filtering.
| Parameter | Type | Description |
|---|---|---|
q | string | Free-text search on enzyme name or species (case-insensitive) |
ec | string | Filter by EC number prefix (e.g. 3.1 matches EC 3.1.x.x) |
species | string | Filter by species name substring |
page | integer | Page number (default: 1) |
per_page | integer | Results per page (default: 50, max: 200) |
GET /api/proteins?q=lipase&page=1&per_page=10
{
"data": [
{
"protein_id": 17,
"enzyme_name": "Lipase A (gene lipA) from Bacillus subtilis",
"enzyme_species": "Bacillus subtilis",
"ec_number": "3.1.1.3"
},
{
"protein_id": 46,
"enzyme_name": "Lipase from Pseudomonas cepacia",
"enzyme_species": "Pseudomonas cepacia",
"ec_number": "3.1.1.3"
},
...
],
"pagination": {
"page": 1,
"per_page": 10,
"total": 126,
"total_pages": 13
}
}
GETFull record for a single protein, including its production source, extremophile annotation, and all known mutations.
GET /api/protein/2
{
"protein": {
"protein_id": 2,
"enzyme_name": "Ene-reductase DrER from Deinococcus radiodurans",
"enzyme_species": "Deinococcus radiodurans",
"ec_number": "1.6.99.1",
"is_extremophile": true,
"extremophile_annotation": "polyextremophilic organism",
"source": "Recombinant, host bacterium Escherichia coli BL21 (DE3)"
},
"mutations": []
}
Measurements
GETPaginated, filterable list of all experimental measurements. This is the primary endpoint for programmatic data access.
| Parameter | Type | Description |
|---|---|---|
protein_id | integer | Return only measurements for this protein |
solvent | string | Filter by exact solvent name (case-insensitive) |
property | string | Filter by assay/property type substring (e.g. activity) |
wt_only | 0 / 1 | Set to 1 to return only wild-type measurements |
page | integer | Page number (default: 1) |
per_page | integer | Results per page (default: 50, max: 200) |
GET /api/measurements?solvent=dimethyl+sulfoxide&wt_only=1&per_page=20
{
"data": [
{
"measurement_id": 3410,
"protein_id": 59,
"is_extremophile": "No",
"mutation": "WT",
"property": "Stability - Incubation",
"solvent_name": "Dimethyl Sulfoxide",
"solvent_volume": "10",
"aqueous_control": "100",
"wt_control": "NaN",
"measured_value": "50",
"units": "%",
"assay_solution": "Incubation: 50 mM Tris-HCl, 10 mM CaCl2, 450 microM CHAPS, Assay: 50 mM Tris-HCl, 10 mM CaCl2, 450 microM CHAPS",
"ph": "Incubation: 9, Assay: 9",
"temperature": "Incubation: 37\u00b0C, Assay: 40\u00b0C",
"cofactor": "NaN",
"comments": "Non-incubated control (in %), assay in aqueous phase"
},
...
],
"pagination": {
"page": 1,
"per_page": 20,
"total": 134,
"total_pages": 7
}
}
GETFull record for a single measurement.
GET /api/measurements/3410
{
"measurement_id": 3410,
"protein_id": 59,
"is_extremophile": "No",
"mutation": "WT",
"property": "Stability - Incubation",
"solvent_name": "Dimethyl Sulfoxide",
"solvent_volume": "10",
"aqueous_control": "100",
"wt_control": "NaN",
"measured_value": "50",
"units": "%",
"assay_solution": "Incubation: 50 mM Tris-HCl, 10 mM CaCl2, 450 microM CHAPS, Assay: 50 mM Tris-HCl, 10 mM CaCl2, 450 microM CHAPS",
"ph": "Incubation: 9, Assay: 9",
"temperature": "Incubation: 37\u00b0C, Assay: 40\u00b0C",
"cofactor": "NaN",
"comments": "Non-incubated control (in %), assay in aqueous phase"
}
Solvents
GETReturns the list of all organic solvents referenced in the database, with CAS number, log P, and CHEM21 greenness scores where available.
GET /api/solvents
GETFull record for a single solvent.
GET /api/solvent/1
{
"solvent_id": 1,
"solvent_name": "Dimethyl Sulfoxide",
"cas_number": "67-68-5",
"pubchem_id": "679",
"smiles": "CS(=O)C",
"log_p": "-1.3500",
"chem21_safety": "1",
"chem21_health": "1",
"chem21_environment": "5",
"chem21_ranking_default": "Recommended",
"chem21_ranking_discussion": "Problematic"
}
Compounds
GETReturns a paginated list of all compounds (substrates and products). Supports optional search by name or CAS number.
| Parameter | Type | Description |
|---|---|---|
q | string | Search by name or CAS number substring (case-insensitive) |
page | integer | Page number (default: 1) |
per_page | integer | Results per page (default: 50, max: 200) |
GET /api/compounds?q=p-nitrophenyl&per_page=10
{
"data": [
{
"substrate_product_id": 233,
"name": "p-Nitrophenyl alpha-D-galactopyranoside",
"cas_number": "7493-95-0",
"pubchem_id": "82000",
"smiles": "C1=CC(=CC=C1[N+](=O)[O-])O[C@@H]2[C@@H]([C@H]([C@H]([C@H](O2)CO)O)O)O"
},
{
"substrate_product_id": 9,
"name": "p-Nitrophenyl beta-D-glucopyranoside",
"cas_number": "2492-87-7",
"pubchem_id": "92930",
"smiles": "C1=CC(=CC=C1[N+](=O)[O-])O[C@H]2[C@@H]([C@H]([C@@H]([C@H](O2)CO)O)O)O"
},
...
],
"pagination": {
"page": 1,
"per_page": 10,
"total": 21,
"total_pages": 3
}
}
GETReturns a single compound record by its internal ID, including CAS number, PubChem ID, and SMILES string.
GET /api/compound/1
{
"substrate_product_id": 1,
"name": "Cyclohex-2-enone",
"cas_number": "930-68-7",
"pubchem_id": "13594",
"smiles": "C1CC=CC(=O)C1"
}
GETLooks up a compound by its exact name (URL-encoded). Note that CAS number,
PubChem ID, and SMILES may be null
for compounds where this information was not available during curation.
GET /api/compound/by-name/Benzaldehyde
{
"substrate_product_id": 57,
"name": "Benzaldehyde",
"cas_number": "100-52-7",
"pubchem_id": "240",
"smiles": "C1=CC=C(C=C1)C=O"
}
Statistics
GETHigh-level counts for the whole database.
GET /api/stats
{
"proteins": 705,
"measurements": 28173,
"articles": 646,
"mutations": 3346,
"solvents": 137,
"compounds": 696
}
Usage Examples
import requests, csv
BASE = "https://organizymedb.org"
# 1. Find all lipase proteins
proteins = requests.get(f"{BASE}/api/proteins", params={"q": "lipase"}).json()
results = []
for prot_summary in proteins["data"]:
pid = prot_summary["protein_id"]
# 2. Fetch full protein-level details once per protein, not once per
# measurement (enzyme_name, enzyme_species, ec_numbers, source)
protein = requests.get(f"{BASE}/api/protein/{pid}").json()["protein"]
# 3. Fetch this protein's measurements in ethanol, paginating if needed
page = 1
while True:
r = requests.get(f"{BASE}/api/measurements",
params={"protein_id": pid, "solvent": "ethanol",
"page": page, "per_page": 200}).json()
for m in r["data"]:
results.append({
# Protein-level fields
"enzyme_name": protein["enzyme_name"],
"enzyme_species": protein["enzyme_species"],
"ec_number": protein["ec_number"],
"source": protein["source"],
# Measurement-level fields
"measurement_id": m["measurement_id"],
"is_extremophile": m["is_extremophile"],
"mutation": m["mutation"],
"property": m["property"],
"solvent_name": m["solvent_name"],
"solvent_volume": m["solvent_volume"],
"aqueous_control": m["aqueous_control"],
"wt_control": m["wt_control"],
"measured_value": m["measured_value"],
"units": m["units"],
"assay_solution": m["assay_solution"],
"ph": m["ph"],
"temperature": m["temperature"],
"cofactor": m["cofactor"],
"comments": m["comments"],
})
if page >= r["pagination"]["total_pages"]:
break
page += 1
fieldnames = list(results[0].keys()) if results else []
with open("lipase_ethanol_measurements.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(results)
print(f"Saved {len(results)} measurements ({len(fieldnames)} columns) to lipase_ethanol_measurements.csv")
import requests, pandas as pd
BASE = "https://organizymedb.org"
rows, page = [], 1
while True:
r = requests.get(f"{BASE}/api/measurements",
params={"page": page, "per_page": 200}).json()
rows.extend(r["data"])
if page >= r["pagination"]["total_pages"]:
break
page += 1
df = pd.DataFrame(rows)
print(df.shape)
# All measurements for protein 2, wild-type only curl "https://organizymedb.org/api/measurements?protein_id=2&wt_only=1" # Search compounds by name curl "https://organizymedb.org/api/compounds?q=nitrophenyl" # All solvents curl "https://organizymedb.org/api/solvents" # Database statistics curl "https://organizymedb.org/api/stats"
Notes
- All endpoints are read-only β no POST, PUT, or DELETE operations are exposed.
- Pagination metadata (
page,per_page,total,total_pages) is included in every list response. - Some text fields (e.g.
ph,assay_solution) may contain the literal value"?". This indicates the corresponding information was not reported in the original publication, and is distinct fromnull(which is used when the field is not applicable rather than simply unreported). - Data are released under CC BY-NC 4.0. For commercial use, contact Romain.Debruyne@ulb.be and Fabrizio.Pucci@ulb.be.
- For bulk downloads, the Download page provides pre-built CSV files that may be more convenient than paginating through the API.