How to run this route from Python with the Ouro SDK.
API access requires an API key. Create one in Settings → API Keys, then set OURO_API_KEY in your environment. Install the SDK with pip install ouro-py.
POST /materials-project/searchParameters and request body schema for this route.
Range: 1 to 100
Maximum number of results to return.
Chemical system such as Li-Fe-O or Si-O.
Reduced formula or wildcard formula pattern (e.g. SiO2, ABO3).
band_gapdensityenergy_above_hullformation_energy_per_atommaterial_idnsitesvolumeOptional client-side sort field.
Required elements that must be present.
Filter metallic vs non-metallic materials.
Filter by thermodynamic stability.
ascdescSort direction when sort_by is provided.
Filter theoretical-only entries.
Maximum band gap in eV.
Minimum band gap in eV.
Specific Materials Project IDs to look up (accepts bare numbers too).
Range: 1 to
Maximum number of sites in the structure.
Range: 1 to
Minimum number of sites in the structure.
Crystal system filter (triclinic, monoclinic, orthorhombic, tetragonal, trigonal, hexagonal, cubic).
Elements that must not be present.
Range: 1 to 230
Space group number.
Space group Hermann-Mauguin symbol, e.g. P4/mmm.
Maximum energy above hull in eV/atom.
execute returns an action: the record of this run, with its status, response, and any assets it created.
To avoid blocking on a slow run, start it without waiting and collect the result later.
By default a failed run comes back as an action with status error. Pass raise_on_error=True to raise an exception instead.
Every run is saved as an action. List yours, or read the logs of a single run. See the Python SDK reference for everything an action carries.
import os
from ouro import Ouro
ouro = Ouro(api_key=os.environ.get("OURO_API_KEY"))
# The ID also works, and stays the same if the route is renamed: "c32019e9-92d8-4c95-ac3a-2e3dd029eb40"
route = ouro.routes.retrieve("mmoderwell/search-materials-project-materials")
action = route.execute(
body={
"limit": 20,
"chemsys": "Li-Fe-O",
"formula": "SiO2",
"sort_by": "band_gap",
"elements": [
"Li",
"Fe",
"O",
],
"is_metal": False,
"is_stable": False,
"sort_order": "asc",
"theoretical": False,
"band_gap_max": 3,
"band_gap_min": 1,
"material_ids": [
"mp-149",
"149",
],
"num_sites_max": 40,
"num_sites_min": 1,
"crystal_system": "tetragonal",
"exclude_elements": [
"Pb",
],
"spacegroup_number": 123,
"spacegroup_symbol": "P4/mmm",
"energy_above_hull_max": 0.05,
},
)
print(action.status) # "success" or "error"
print(action.final_data)# Returns as soon as the run is accepted
action = route.execute(
body={
"limit": 20,
"chemsys": "Li-Fe-O",
"formula": "SiO2",
"sort_by": "band_gap",
"elements": [
"Li",
"Fe",
"O",
],
"is_metal": False,
"is_stable": False,
"sort_order": "asc",
"theoretical": False,
"band_gap_max": 3,
"band_gap_min": 1,
"material_ids": [
"mp-149",
"149",
],
"num_sites_max": 40,
"num_sites_min": 1,
"crystal_system": "tetragonal",
"exclude_elements": [
"Pb",
],
"spacegroup_number": 123,
"spacegroup_symbol": "P4/mmm",
"energy_above_hull_max": 0.05,
},
wait=False,
)
print(action.id, action.status)
# Later, even from another process
action = ouro.routes.poll_action(str(action.id), poll_interval=5, timeout=1800)
print(action.final_data)from ouro import ExternalServiceError, RouteExecutionError
try:
action = route.execute(
body={
"limit": 20,
"chemsys": "Li-Fe-O",
"formula": "SiO2",
"sort_by": "band_gap",
"elements": [
"Li",
"Fe",
"O",
],
"is_metal": False,
"is_stable": False,
"sort_order": "asc",
"theoretical": False,
"band_gap_max": 3,
"band_gap_min": 1,
"material_ids": [
"mp-149",
"149",
],
"num_sites_max": 40,
"num_sites_min": 1,
"crystal_system": "tetragonal",
"exclude_elements": [
"Pb",
],
"spacegroup_number": 123,
"spacegroup_symbol": "P4/mmm",
"energy_above_hull_max": 0.05,
},
raise_on_error=True,
)
except ExternalServiceError as exc:
# The API behind this route failed
print(exc.status_code, exc.retryable)
except RouteExecutionError as exc:
print(exc.action_id, exc.status, exc.response)
except TimeoutError as exc:
# Still running on Ouro; pick it up again later
action = ouro.routes.poll_action(exc.action_id, timeout=None)route = ouro.routes.retrieve("mmoderwell/search-materials-project-materials")
# Your runs of this route
actions = route.read_actions()
for action in actions:
print(action.id, action.status, action.created_at)
# One run and its logs
action = ouro.routes.retrieve_action("your-action-id")
for entry in action.read_logs(chronological=True):
print(entry.level, entry.message)Part of service
Materials Project API
Search Materials Project summaries using structured filters for formula, chemistry, symmetry, and basic properties.
Execution
Usage
177 callsView history