Querying Data

An introduction on how to query for data with the Materials Project API client.
Materials Project data can be queried through a specific (list of) Materials Project ID(s), and/or through property filters (e.g. band gap less than 0.5 eV).
Most material property data is available as summary data for a specific material. To query summary data with Materials Project IDs the search method should be used:
with MPRester("your_api_key_here") as mpr:
docs = mpr.summary.search(material_ids=["mp-149", "mp-13", "mp-22526"])
The above returns a list of MPDataDoc objects with data accessible through their attributes. For example, the Material ID and formula can be obtained for a particular document with:
example_doc = docs[0]
mpid = example_doc.material_id
formula = example_doc.formula_pretty
A list of available property fields can be obtained by examining one of these objects, or from the MPRester with:
list_of_available_fields = mpr.summary.available_fields
To query summary data with property filters use the search function as well. Filters for each of the fields in available_fields can be passed to it. For example, below is a query to find materials containing Si and O that have a band gap greater than 0.5 eV but less then 1.0 eV.
with MPRester("your_api_key_here") as mpr:
docs = mpr.summary.search(elements=["Si", "O"],
band_gap=(0.5, 1.0))
Note that by default ALL available property data within MPDataDoc objects will be populated. If one is only interested in a few properties, limiting what data is returned will speed up data retrieval. Pass a list of the fields you are interested in to fields to accomplish this. For example, if we were only interested in material_id, band_gap, and volume for the materials from the above query, we could instead use:
with MPRester("your_api_key_here") as mpr:
docs = mpr.summary.search(elements=["Si", "O"],
band_gap=(0.5, 1.0),
fields=["material_id",
"band_gap",
"volume"])
Now, only the material_id, band_gap, and volume attributes of the returned MPDataDoc objects will be populated. A list of available fields that were not requested will be returned in the fields_not_requested parameter.
example_doc = docs[0]
mpid = example_doc.material_id # a Materials Project ID
formula = example_doc.formula_pretty # a formula
volume = example_doc.volume # a volume
example_doc.fields_not_requested # list of unrequested fields

Other Data

Not all Materials Project data for a given material can be obtained from the summary API endpoint. To access the remaining data, other endpoints must be used. For a complete list of endpoints see the main API page on the website.
For example, the initial_structures used in calculations producing data for a specific material can only be found in the materials endpoint. To obtain the initial_structures for mp-149, the same search function can be used:
with MPRester("your_api_key_here") as mpr:
docs = mpr.materials.search(material_ids=["mp-149"], fields=["initial_structures"])
example_doc = docs[0]
initial_structures = example_doc.initial_structures
Below is another example which uses property filters:
with MPRester("your_api_key_here") as mpr:
docs = mpr.materials.search(elements=["Si", "O"],
band_gap=(0.5, 1.0),
fields=["initial_structures"])
example_doc = docs[0]
initial_structures = example_doc.initial_structures
The same querying procedure shown above can be applied to most endpoints. See advanced usage and examples for more information.

Convenience Functions

In addition to search function, there are a small number of top level convenience functions for frequently made queries. These aim to provide a simpler interface, and make use of search under the hood. A couple examples of common queries include obtaining the structure or density of states of a particular material. These convenience functions are illustrated in the examples section.