materials-project.md
136 lines · skills/database-lookup/references/materials-project.md at 5f2bc03
Materials Project API
Raw lines 1 to 2Authentication
Requires a free API key. Register at https://materialsproject.org (free account).
| Env Variable | Header |
|---|---|
MP_API_KEY | X-API-KEY: your_key_here |
Data endpoint requests must include the API key header. The client's GET /heartbeat service check is unauthenticated.
API Version
Use the current API at api.materialsproject.org with the mp-api client. The legacy API used /rest/v2/; that path is not the version label for the current API. The authoritative endpoint schema is https://api.materialsproject.org/openapi.json.
Key Endpoints
Raw lines 24 to 25Search materials by formula or elements
GET /materials/summary/?formula=Fe2O3&_fields=material_id,formula_pretty,band_gap,formation_energy_per_atomGET /materials/summary/?elements=Si,O&_fields=material_id,formula_pretty,band_gapQuery parameters:
formula— exact chemical formula (e.g.,Fe2O3,SiO2)chemsys— chemical system, dash-separated (e.g.,Fe-O,Li-Fe-P-O)elements— comma-separated elements that must be presentband_gap_min/band_gap_max— filter by band gap (eV)is_stable—trueto return only thermodynamically stable phases_fields— comma-separated list of fields to return_limit— max results (default 100, max 1000)_skip— offset for pagination_page/_per_page— alternative page-based pagination, which takes precedence over_limit/_skip;_per_pagedefaults to 100 and is capped at 1000. Use one pagination style consistently.
Get material by ID
GET /materials/summary/?material_ids=mp-149&_fields=material_id,formula_pretty,band_gap,formation_energy_per_atom,symmetryLegacy material IDs such as mp-149 remain accepted. The current schema also supports padded alphabetic AlphaIDs and id_format=legacy|alpha; preserve returned identifiers rather than validating only digits.
Available fields (summary)
material_id, formula_pretty, formula_anonymous, chemsys, volume, density, density_atomic, symmetry, band_gap, cbm, vbm, is_gap_direct, is_metal, is_magnetic, ordering, total_magnetization, formation_energy_per_atom, energy_above_hull, is_stable, equilibrium_reaction_energy_per_atom, nsites, elements, nelements, composition, structure
Crystal structure
GET /materials/summary/?material_ids=mp-149&_fields=structureReturns the structure as a pymatgen-compatible JSON dict with lattice parameters and atomic sites.
Raw lines 61 to 68Elastic properties
GET /materials/elasticity/?material_ids=mp-149&_fields=material_id,bulk_modulus,shear_modulus,elastic_tensorRaw lines 69 to 74Electronic structure (band structure / DOS)
The current schema has collection routes /materials/electronic_structure/, /materials/electronic_structure/bandstructure/ and /materials/electronic_structure/dos/, not a material ID appended to those paths. Retrieve full band structures/DOS through MPRester.get_bandstructure_by_material_id() or MPRester.get_dos_by_material_id() with the current mp-api client. Version 0.46.5 resolves metadata and retrieves electronic-structure data from Delta tables; do not reconstruct obsolete task/blob download URLs. These authenticated examples are illustrative.
Thermodynamic properties
GET /materials/thermo/?formula=Fe2O3&_fields=material_id,formation_energy_per_atom,energy_above_hullRaw lines 86 to 91Example: Find stable oxides with band gap > 2 eV
GET /materials/summary/?elements=O&band_gap_min=2&is_stable=true&_fields=material_id,formula_pretty,band_gap,formation_energy_per_atom&_limit=10Raw lines 92 to 97Response Format
{
"data": [
{
"material_id": "mp-149",
"formula_pretty": "Si",
"band_gap": 0.6105,
"formation_energy_per_atom": 0.0
}
],
"meta": {
"total_doc": 1
}
}Raw lines 98 to 115Rate Limits
- Official guidance describes limits starting at 25 requests/second, not a guaranteed account quota; honor HTTP 429 and returned retry guidance. See https://docs.materialsproject.org/downloading-data/using-the-api/tips-for-large-downloads.
- Batch requests preferred over many individual calls
- Use
_fieldsto reduce payload size and improve performance - The Python client
mp-apihandles pagination and retries automatically
Error Format
{
"detail": "Not authenticated"
}HTTP 401 indicates an authentication failure; HTTP 429 indicates rate limiting. A collection search with no matching materials can return HTTP 200 with data: []; do not require HTTP 404 to detect an empty result. The structure convenience helper can return None, while band-structure/DOS helpers raise MPRestError when required metadata or calculation data is absent. A 404 alone does not distinguish an unknown route from missing data.