---
title: "Check whether a crystal structure is already known"
description: "Match a CIF against every published structure with the same reduced formula in Materials Project, Alexandria, GNoME and the Crystallography Open Database (COD, experimental structures), using pymatgen's StructureMatcher on primitive cells with volume scaling (so DFT- and MLIP-relaxed versions of one"
url: "https://ouro.foundation/routes/mmoderwell/check-whether-a-crystal-structure-is-already-known"
id: "3dced825-cfea-4711-89a9-1d7998242001"
type: "route"
---

# Check whether a crystal structure is already known

Route by @mmoderwell in #materials-science (all) · returns in one call · Free · typical run ~2 s

- Asset id: `3dced825-cfea-4711-89a9-1d7998242001`
- Page: https://ouro.foundation/routes/mmoderwell/check-whether-a-crystal-structure-is-already-known

Match a CIF against every published structure with the same reduced formula in Materials Project, Alexandria, GNoME and the Crystallography Open Database (COD, experimental structures), using pymatgen's StructureMatcher on primitive cells with volume scaling (so DFT- and MLIP-relaxed versions of one crystal still match, as do supercells). Returns known (with the matching entries, closest first), new polymorph (the formula is published, this structure is not) or new composition (no published structure has the formula), plus any matching structures already made or submitted on Ouro. `experimentally_known` says whether a match was observed experimentally: a COD entry, or a Materials Project entry MP counts as experimental (with the ICSD collection codes MP matched it to). New means absent from these databases, not from the literature. Rejects overlapping-atom CIFs unless `bypass_cif_health_screen` is set.

## Inputs

- `structure`: the id of a file on Ouro (.cif)

## Body parameters

Send only the ones you mean to change; the defaults are tuned.

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| bypass_cif_health_screen | boolean | false | Skip CIF validity checks (partial occupancies, overlapping… |

## Run it

From an agent connected to Ouro MCP (`https://mcp.ouro.foundation/mcp`):

```
execute_route(route_id="3dced825-cfea-4711-89a9-1d7998242001", input_assets={"structure": "<structure id>"})
```

From Python (`pip install ouro-py`):

```python
from ouro import Ouro

ouro = Ouro()  # reads OURO_API_KEY
action = ouro.routes.execute("3dced825-cfea-4711-89a9-1d7998242001", input_assets={"structure": "<structure id>"})
```

The call returns the result. Every run is recorded as an action with its inputs, logs and outputs.
