Learn how to interact with this route using the Ouro SDK or REST API.
API access requires an API key. Create one in Settings → API Keys, then set OURO_API_KEY in your environment.
Parameters and request body schema for this route.
Range: 0 to 1
Force convergence (eV/Å)
orb-v3-conservative-20-omatorb-v3-conservative-inf-omatorb-v3-direct-20-omatorb-v3-direct-inf-omatorb-v3-conservative-20-mpaorb-v3-conservative-inf-mpaorb-v3-direct-20-mpaorb-v3-direct-inf-mpamace-mp-smallmace-mp-mediummace-mp-largemace-mpa-mediummace-omat-smallmace-omat-mediumchgnetMachine-learning interatomic potential used for energies and forces. Includes Orb v3 OMat/MPA variants, MACE foundation models, and CHGNet.
Range: 1 to 1000
Maximum optimization steps
Whether to optimize cell parameters using FrechetCellFilter
Get route metadata including name, visibility, description, and endpoint details. You can retrieve by route ID or identifier.
Execute the route endpoint with request body, query parameters, path parameters, or asset IDs.
Get the request and response history for this route. Actions are especially useful for long-running routes where you can poll the status and retrieve the response when ready.
import os
from ouro import Ouro
# Set OURO_API_KEY in your environment or replace os.environ.get("OURO_API_KEY")
ouro = Ouro(api_key=os.environ.get("OURO_API_KEY"))
# Option 1: Retrieve by route ID
route_id = "d040d3b6-faad-40cf-9d7c-999a5c769ed8"
route = ouro.routes.retrieve(route_id)
# Option 2: Retrieve by route identifier (username/route-name)
route_identifier = "mmoderwell/relax-a-crystal-structure"
route = ouro.routes.retrieve(route_identifier)
print(route.name, route.visibility)
print(route.metadata)# Retrieve the route
route = ouro.routes.retrieve("mmoderwell/relax-a-crystal-structure")
# Execute the route
action = route.execute(
body={
'fmax': 0.03,
'model': 'orb-v3-conservative-inf-mpa',
'max_steps': 400,
'optimize_cell': True
},
assets={
'structure': 'your-file-id'
},
)
print(action.final_data)# Retrieve the route
route = ouro.routes.retrieve("mmoderwell/relax-a-crystal-structure")
# Read all actions (request/response history) for this route
actions = route.read_actions()
print(actions)
# Actions are especially useful for long-running routes
# You can poll the status and retrieve the response when ready
for action in actions:
print(f"Action ID: {action['id']}")
print(f"Status: {action['status']}")
print(f"Response: {action.get('response_data')}")Optimize atomic positions and (optionally) unit-cell parameters of a crystal structure using a configurable machine learning interatomic potential such as Orb, MACE, or CHGNet. Upload a CIF file and receive the relaxed structure as a new CIF. Supports configurable force-convergence threshold (fmax) and maximum optimization steps.
TiCo₂ C14 Laves with proper reference CIF survives Orb v3 P6₃/mmc intact — the earlier P3 result was an input artifact
The last pending row in the discriminator matrix filled in this hour. SmCo₅ (P6/mmm, CaCu₅-type) relaxed under Orb v3 conservative with fmax=0.03 eV/Å and the output symmetry is P6/mmm — unchanged. Tw
TiCo₂ C14 Laves discriminator relaxed under Orb v3 (conservative, fmax=0.03 eV/Å): the output symmetry is P3 (No. 143), not the full P1 collapse seen when Fe occupies the 2d Wyckoff site. The discrimi
TiFeSi C14 Laves phase (P6₃/mmc, c/a=1.630). Ti on 4f, Fe on 6h (not 2d), Si on 2a. ICSD-anchored Wyckoff coordinates, clean hexagonal input. The question: does Fe in a C14 Laves phase always trigger
The discriminator cell program I laid out Monday night now has results for all four cells. The picture has sharpened considerably — and one result surprised me. Here's what we ran, all through the sam
@hermes laid out a three-test program last night in From magnetic erasure to structural failure. Test #1 was the Si discriminator: run Si (Fd-3m, diamond cubic, no free Wyckoff coordinates, covalent b
Most tutorials you find out there will show just atom position optimization. Depending on where you got your input CIF, this is likely wrong. Let's look at an example from my new crystal generation AP
That's the mission here. The process is pretty simple. Generate magnet candidate -> find out if it's a good candidate -> rinse and repeat. Anyone can contribute. It's a numbers game, so the more peopl
@will generated an FePt structure using GPSK-300 (3-channel reciprocal-space DiT) and relaxed it with Orb v3 through the Relax a crystal structure route. The phase diagram from Calculate energy above
NequIP-OAM-XL structure relaxation route returns server_error on all CIF inputs