BRENDA Enzyme Database
Overview
BRENDA (BRaunschweig ENzyme DAtabase) is the world's most comprehensive enzyme information system, containing 80,000+ enzyme entries covering all classified enzymes (EC numbers). It holds 7M+ experimentally measured kinetic parameters (Km, Vmax, kcat, Ki, inhibition constants), substrate specificity data, cofactor requirements, tissue expression, and organism-specific enzyme variants from 200,000+ literature references. Programmatic access is via a SOAP-based web service (Python zeep library) with free academic registration.
When to Use
- Retrieving kinetic parameters (Km, kcat, Vmax, Ki) for a specific enzyme and substrate combination
- Comparing kinetic parameters across organisms or mutant variants for an enzyme
- Finding natural substrates, inhibitors, and cofactors for an EC number
- Building kinetic models for metabolic simulations requiring Michaelis-Menten parameters
- Identifying enzyme-specific structural data (recommended pH, temperature optima)
- Cross-referencing EC numbers with UniProt accessions and organism taxonomy
- For metabolic network simulation use
cobrapy-metabolic-modeling; for metabolite structures usehmdb-database
Prerequisites
- Python packages:
zeep(SOAP client),pandas,requests - Data requirements: EC numbers (e.g.,
1.1.1.1), enzyme names, or organism names - Environment: internet connection; free academic registration at https://www.brenda-enzymes.org/register.php
- Rate limits: no explicit limit stated; avoid bulk automated queries; space requests with sleep
pip install zeep pandas requests
# Register at https://www.brenda-enzymes.org/register.php to obtain API credentials
Quick Start
from zeep import Client
WSDL = "https://www.brenda-enzymes.org/soap/brenda_zeep.wsdl"
client = Client(WSDL)
EMAIL = "your@email.com"
PASSWORD_SHA256 = "your_sha256_hashed_password" # Use hashlib.sha256
# Get Km values for lactate dehydrogenase (EC 1.1.1.27) and pyruvate
ec_number = "1.1.1.27"
params = (EMAIL, PASSWORD_SHA256,
f"ecNumber*{ec_number}", "substrate*pyruvate", "", "", "", "", "")
result = client.service.getKmValue(*params)
print(f"Km values for LDH with pyruvate: {len(result)} records")
for r in result[:3]:
print(f" Km={r.kmValue} {r.kmValueMaximum or ''} mM | org: {r.organism} | PMID: {r.literature}")
Core API
Query 1: Km Values for Enzyme-Substrate Pair
Retrieve Michaelis constant (Km) values for a specific enzyme and substrate.
from zeep import Client
import hashlib, pandas as pd
WSDL = "https://www.brenda-enzymes.org/soap/brenda_zeep.wsdl"
client = Client(WSDL)
EMAIL = "your@email.com"
PASSWORD = "your_password"
PASSWORD_SHA256 = hashlib.sha256(PASSWORD.encode()).hexdigest()
def get_km_values(ec_number, substrate=""):
"""Retrieve Km values for an EC number, optionally filtered by substrate."""
substrate_param = f"substrate*{substrate}" if substrate else ""
params = (EMAIL, PASSWORD_SHA256,
f"ecNumber*{ec_number}", substrate_param, "", "", "", "", "")
return client.service.getKmValue(*params)
# Km for glucokinase (EC 2.7.1.2) with glucose
results = get_km_values("2.7.1.2", substrate="glucose")
print(f"Km (glucose, glucokinase): {len(results)} measurements")
rows = []
for r in results[:10]:
rows.append({
"km_value": r.kmValue,
"km_max": r.kmValueMaximum,
"unit": "mM",
"organism": r.organism,
"commentary": r.commentary[:80] if r.commentary else "",
"pmid": r.literature,
})
df = pd.DataFrame(rows)
print(df.to_string(index=False))
# Get ALL Km values (all substrates) for an EC number
all_km = get_km_values("1.1.1.1") # Alcohol dehydrogenase
print(f"\nAlcohol dehydrogenase - total Km records: {len(all_km)}")
substrate_counts = {}
for r in all_km:
sub = r.substrate or "unknown"
substrate_counts[sub] = substrate_counts.get(sub, 0) + 1
top_substrates = sorted(substrate_counts.items(), key=lambda x: -x[1])[:5]
print("Top substrates by measurement count:")
for sub, cnt in top_substrates:
print(f" {sub}: {cnt} measurements")
Query 2: kcat (Turnover Number) Values
Retrieve catalytic rate constants (kcat) for an enzyme.
from zeep import Client
import hashlib, pandas as pd
WSDL = "https://www.brenda-enzymes.org/soap/brenda_zeep.wsdl"
client = Client(WSDL)
EMAIL = "your@email.com"
PASSWORD_SHA256 = hashlib.sha256("your_password".encode()).hexdigest()
def get_kcat_values(ec_number, substrate=""):
substrate_param = f"substrate*{substrate}" if substrate else ""
params = (EMAIL, PASSWORD_SHA256,
f"ecNumber*{ec_number}", substrate_param, "", "", "", "", "")
return client.service.getTurnoverNumber(*params)
results = get_kcat_values("1.1.1.27") # Lactate dehydrogenase
print(f"kcat records for LDH: {len(results)}")
rows = []
for r in results[:10]:
rows.append({
"kcat": r.turnoverNumber,
"unit": "1/s",
"substrate": r.substrate,
"organism": r.organism,
})
df = pd.DataFrame(rows)
print(df.head())
Query 3: Substrates and Products
Retrieve natural substrates and products for an enzyme.
from zeep import Client
import hashlib, pandas as pd
WSDL = "https://www.brenda-enzymes.org/soap/brenda_zeep.wsdl"
client = Client(WSDL)
EMAIL = "your@email.com"
PASSWORD_SHA256 = hashlib.sha256("your_password".encode()).hexdigest()
def get_substrates_products(ec_number):
params = (EMAIL, PASSWORD_SHA256,
f"ecNumber*{ec_number}", "", "", "", "", "", "")
return client.service.getSubstrates(*params)
results = get_substrates_products("4.2.1.1") # Carbonic anhydrase
print(f"Substrates for carbonic anhydrase (EC 4.2.1.1):")
substrates_seen = set()
for r in results[:10]:
if r.substrate not in substrates_seen:
print(f" {r.substrate} | organism: {r.organism}")
substrates_seen.add(r.substrate)
# Get inhibitors
def get_inhibitors(ec_number):
params = (EMAIL, PASSWORD_SHA256,
f"ecNumber*{ec_number}", "", "", "", "", "", "")
return client.service.getInhibitors(*params)
inhibitors = get_inhibitors("4.2.1.1")
print(f"\nInhibitors of carbonic anhydrase: {len(inhibitors)} records")
inhib_names = list(set(r.inhibitor for r in inhibitors if r.inhibitor))
print("Sample inhibitors:", inhib_names[:8])
Query 4: Organism-Specific Enzyme Data
Query kinetic parameters filtered by organism.
from zeep import Client
import hashlib
WSDL = "https://www.brenda-enzymes.org/soap/brenda_zeep.wsdl"
client = Client(WSDL)
EMAIL = "your@email.com"
PASSWORD_SHA256 = hashlib.sha256("your_password".encode()).hexdigest()
def get_km_by_organism(ec_number, organism):
params = (EMAIL, PASSWORD_SHA256,
f"ecNumber*{ec_number}", "", f"organism*{organism}", "", "", "", "")
return client.service.getKmValue(*params)
# Human GAPDH Km values
human_km = get_km_by_organism("1.2.1.12", "Homo sapiens")
print(f"Human GAPDH (EC 1.2.1.12) Km values: {len(human_km)} records")
for r in human_km[:5]:
print(f" Substrate: {r.substrate:30s} Km={r.kmValue} mM")
Query 5: pH and Temperature Optima
Retrieve optimal pH and temperature data for an enzyme.
from zeep import Client
import hashlib
WSDL = "https://www.brenda-enzymes.org/soap/brenda_zeep.wsdl"
client = Client(WSDL)
EMAIL = "your@email.com"
PASSWORD_SHA256 = hashlib.sha256("your_password".encode()).hexdigest()
def get_ph_optimum(ec_number):
params = (EMAIL, PASSWORD_SHA256,
f"ecNumber*{ec_number}", "", "", "", "", "", "")
return client.service.getPhOptimum(*params)
def get_temp_optimum(ec_number):
params = (EMAIL, PASSWORD_SHA256,
f"ecNumber*{ec_number}", "", "", "", "", "", "")
return client.service.getTemperatureOptimum(*params)
ec = "3.4.21.4" # Trypsin
ph_data = get_ph_optimum(ec)
temp_data =