NCEI Paleo Web Service
This page documents the URL formats and parameters used to get data from the NCEI Paleo web service.
All calls to the web service should be GET
requests. Successful requests return a JSON or XML object with two fields: contactInfo
which is the same for every request, and study
which contains a list of study objects. Requests that do not use the headersOnly
flag — i.e. those that return full studies — are limited to at most 10 results, but will include a page
node with links to the next and previous page of results.
Note that when searching via https://www.ncei.noaa.gov/access/paleo-search/, the api call used to retrieve the results is displayed. This can be used to generate examples relevant to your use case.
Sections on this page:
Examples
The base URL for the web service is located here:https://www.ncei.noaa.gov/access/paleo-search/study/search[.json|.xml]
The return type, JSON or XML, can be specified in the URL. The default is XML.
If you know the id of the study you want, you can provide it as a query parameter:.../search.json?xmlId=14323
.../search.json??NOAAStudyId=16617
If you don't know exactly which study you want, or you want a collection of studies, you can search the service with the available parameters:.../search.json?dataPublisher=NOAA&dataTypeId=18&locations=Continent>Africa>Eastern Africa>Kenya
.../search.json??dataPublisher=Neotoma&investigators=Wahl, Eugene Richard
Available parameters are documented below. A list of searchable values for several parameters (investigators, locations, keywords, and tree species) can be found here, with an optional dataTypeId
parameter:https://www.ncei.noaa.gov/access/paleo-search/study/params.json
https://www.ncei.noaa.gov/access/paleo-search/study/params.json?dataTypeId=18
Some parameters can only be used when searching specific data publishers, these are noted next to the parameter name. Arguments to all parameters exceptsearchText
must be complete values, e.g. partial names are not permitted. For investigators, locations, keywords, and tree species these values are listed in the params.json file, and multiple values can be searched by joining them with a ‘|’.
The following is example code that demonstrates the use of the WDS-Paleo API in a search, access, and analysis workflow in the R and Python programming languages.
#!/usr/bin/env python#### Demonstrate use of WDS-Paleo API in a programmatic search, access, and analysis workflow## Search via API for sites meeting criteria, extract site latitudes from returned metadata,## plot latitudes in histogram##import matplotlib.pyplot as pltimport numpy as npimport jsonimport requests ## Search via API for speleothem (dataTypeId=17) studies with magnesium/calcium data,## retrieving "pages" of 10 studies at a time (limit=10). Setting this limit is a best## practice to avoid overwhelming the API with large requests. Results are returned in## JSON format as a dictionary called "json_data." Note that when searching via the user## interface at: ncei.noaa.gov/access/paleo-search/, the API call used to retrieve## the results is displayed immediately above the search results and can be used to## generate search strings ("req_str") relevant to your use case. ## specify API requestapi_base = "https://www.ncei.noaa.gov/access/paleo-search/study/search.json?"req_params ="dataPublisher=NOAA&dataTypeId=17&cvWhats=chemical%20composition%3Eelement%20or%20compound%20ratio%3Emagnesium%2Fcalcium&limit=10"req_str = api_base + req_params lats = [] # initialize empty vector to store latitudes ## retrieve search results from APIwhile req_str: # loop through search results one page at a time speleos = requests.get(req_str) if not speleos.content: print("No results from search") break json_data = json.loads(speleos.text) # load JSON-formatted search results ## extract latitudes numstudies = len(json_data['study']) # count number of studies returned study_list = json_data['study'] # extract list of studies returned for i in range(numstudies): # loop through studies numsites = len(study_list[i]['site']) # count number of sites in the study for j in range(numsites): # loop through sites within the study # extract latitude, convert to float, and append to vector lat_value = json_data['study'][i]['site'][j]['geo']['geometry']['coordinates'][0] lats.append(float(lat_value)) req_str = json_data['page'][0]['next'] # specify API request for next page of studiesnp_lats = np.array(lats) # convert list to numpy array required for histogram ## plot histogram of study latitudesfig = plt.figure(figsize=(10,7))ax = fig.add_subplot(1, 1, 1, title="Distribution of datasets by latitude", xlabel="Latitude", ylabel="Frequency")ax.hist(np_lats,range=[-40,60])plt.show()

Query parameters
xmlId=([0-9]+|)[0-9]+
.../study/search.json?xmlId=1840
The id of the original xml document containing the study.
NOAAStudyId=([0-9]+|)[0-9]+
.../study/search.json?NOAAStudyId=13156
The unique NOAA study id number.
searchText=[a-zA-Z0-9%_-;~]+
.../study/search.json?searchText=younger dryas
.../study/search.json?searchText=loess AND stratigraphy
.../study/search.json?searchText=stratigra%25
.../study/search.json?searchText=f_re
.../study/search.json?searchText=noaa%5C-tree%5C-19260
Any text contained in the contents of the study.
This field supports Oracle Text parameters, such as AND, OR, and wildcards (% for multiple characters, _ for single character). Note that some characters (e.g. -, ;, ~) have special meaning in this context. This field cannot contain HTML reserved characters (e.g. <, >, &). Special characters can be searched literally by escaping them with a backslash, as discussed in the Oracle Special Characters documentation.
dataPublisher=[NOAA|NEOTOMA|PANGAEA]
.../study/search.json?dataPublisher=NOAA&dataTypeId=4
The original provider of the study data.
dataTypeId=([0-9]{(1, 2)}|)*[0-9]{(1, 2)}
.../study/search.json?dataPublisher=NOAA&dataTypeId=4
Limit the search to only studies of a certain data type, or which contain variables of that data type. Multiple data types can be selected at once like
dataTypeId=18|5
.Available data type id's are as follows:
- 1: BOREHOLE
- 2: CLIMATE FORCING
- 3: CLIMATE RECONSTRUCTIONS
- 4: CORALS AND SCLEROSPONGES
- 6: HISTORICAL
- 7: ICE CORES
- 8: INSECT
- 9: LAKE LEVELS
- 10: LOESS
- 11: PALEOCLIMATIC MODELING
- 12: FIRE HISTORY
- 13: PALEOLIMNOLOGY
- 14: PALEOCEANOGRAPHY
- 15: PLANT MACROFOSSILS
- 16: POLLEN
- 17: SPELEOTHEMS
- 18: TREE RING
- 19: OTHER COLLECTIONS
- 20: INSTRUMENTAL
- 59: SOFTWARE
- 60: REPOSITORY
minLat=-?[0-9]{(1, 2)}
maxLat=-?[0-9]{(1, 2)}
.../study/search.json?minLat=68&maxLat=69
Valid latitude values are in the range -90 to 90.
minLat
and maxLat
can be used individually or together.minLon=-?[0-9]{(1, 3)}
maxLon=-?[0-9]{(1, 3)}
.../study/search.json?minLon=68&maxLon=69
Valid longitude values are in the range -180 to 180.
minLon
and maxLon
can be used individually or together.minElev=-?[0-9]+
maxElev=-?[0-9]+
.../study/search.json?minElev=100&maxElev=110
Elevation bounds in meters. Elevation can be less than 0.
minElev
and maxElev
can be used individually or together.earliestYear=-?[0-9]+
latestYear=-?[0-9]+
.../study/search.json?earliestYear=1500&latestYear=0&timeFormat=BP&timeMethod=overEntire&dataTypeId=13
Apply a time bound to the search. These fields should be used in conjunction with
timeFormat
and timeMethod
.earliestYear
and latestYear
can be used individually or together.timeFormat=[CE|BP]
.../study/search.json?earliestYear=1500&latestYear=0&timeFormat=BP&timeMethod=overEntire&dataTypeId=13
Specify the time unit format, either years CE or years BP, to use when searching. Choice of time format will not affect search results (when using properly converted dates) and is provided for convenience only.
timeMethod=[overAny|entireOver|overEntire]
.../study/search.json?earliestYear=1500&latestYear=0&timeFormat=BP&timeMethod=overEntire&dataTypeId=13
Specify the way in which to apply the time bounds defined by
earliestYear
and latestYear
.- overAny: Matches studies where any part of the time coverage lies between the specified min and max
- entireOver: Matches studies with time coverages that completely bound the specified min and max
- overEntire: Matches studies with time coverages that are completely bounded by the specified min and max
investigators=([a-zA-Z]+|)*[a-zA-Z]+
.../study/search.json?investigators=Wahl, E.R.
Search for studies containing one or more investigators. The available investigators, grouped by data publisher and data type, can be found in the params.json file.
investigatorsAndOr=[and|or]
.../study/search.json?investigators=Wahl, E.R.|Vose, R.S.&investigatorsAndOr=or
When searching for multiple investigators, specifies whether to find studies containing any of those investigators or all of them. If this field is not supplied the default value is
or
.locations=([a-zA-Z>]+|)*[a-zA-Z>]+
.../study/search.json?locations=Continent>Africa>Eastern Africa>Zambia
Search for studies containing one or more locations. The available locations, grouped by data publisher and data type, can be found in the params.json file.
locationsAndOr=[and|or]
.../study/search.json?locations=Continent>Africa>Eastern Africa>Zambia|Continent>Africa>Eastern Africa>Zimbabwe&locationsAndOr=or
When searching for multiple locations, specifies whether to find studies containing any of those locations or all of them. If this field is not supplied the default value is
or
.keywords=([a-zA-Z>]+|)*[a-zA-Z>]+
.../study/search.json?keywords=earth science>paleoclimate>paleocean>biomarkers
Search for studies containing one or more keywords. The available keywords, grouped by data publisher and data type, can be found in the params.json file.
keywordsAndOr=[and|or]
.../study/search.json?keywords=earth science>paleoclimate>paleocean>biomarkers|earth science>paleoclimate>paleocean>lithology&keywordsAndOr=or
When searching for multiple keywords, specifies whether to find studies containing any of those keywords or all of them. If this field is not supplied the default value is
or
.species=([a-zA-Z]4|)*[a-zA-Z]4
.../study/search.json?species=ABAL
Search for studies containing one or more tree species. Species should be indicated by their four letter code. The available species codes, grouped by data publisher and data type, can be found in the params.json file.
speciesAndOr=[and|or]
.../study/search.json?species=ABAL|AGRO&speciesAndOr=or
When searching for multiple species, specifies whether to find studies containing any of those species or all of them. If this field is not supplied the default value is
or
.cvWhats=([a-zA-Z>]+|)*[a-zA-Z>]+
.../study/search.json?cvWhats=chemical composition>compound>inorganic compound>carbon dioxide
Search for studies containing one or more terms from the PaST Thesaurus describing the quantity measured ("What"). The available "What" terms, grouped by data publisher and data type, can also be found in the params.json file.
cvWhatsAndOr=[and|or]
.../study/search.json?cvWhats=chemical composition>compound>inorganic compound>carbon dioxide|chemical composition>compound>organic compound>hydrocarbon>alkane>n-alkane>methane&cvWhatsAndOr=or
When searching for multiple "What" terms from the PaST Thesaurus, specifies whether to find studies containing any of those terms or all of them. If this field is not supplied the default value is
or
.cvMaterials=([a-zA-Z>]+|)*[a-zA-Z>]+
.../study/search.json?cvMaterials=geological material>identified mineral>carbonate>calcium carbonate>aragonite
Search for studies containing one or more terms from the PaST Thesaurus describing the material on which a measurement was made ("Material"). The available "Material" terms, grouped by data publisher and data type, can also be found in the params.json file.
cvMaterialsAndOr=[and|or]
.../study/search.json?cvMaterials=geological material>identified mineral>carbonate>calcium carbonate>aragonite|biological material>bulk biological material>peat&cvMaterialsAndOr=or
When searching for multiple "Material" terms from the PaST Thesaurus, specifies whether to find studies containing any of those terms or all of them. If this field is not supplied the default value is
or
.cvSeasonalities=([a-zA-Z>]+|)*[a-zA-Z>]+
.../study/search.json?cvSeasonalities=annual
Search for studies containing one or more terms from the PaST Thesaurus describing the season being explicitly reconstructed ("Seasonality"). The available "Seasonality" terms, grouped by data publisher and data type, can also be found in the params.json file.
cvSeasonalitiessAndOr=[and|or]
.../study/search.json?cvSeasonalities=annual|3-month>Aug-Oct&cvSeasonalitiessAndOr=or
When searching for multiple "Seasonality" terms from the PaST Thesaurus, specifies whether to find studies containing any of those terms or all of them. If this field is not supplied the default value is
or
.reconstructionsOnly=[Y|N]
.../study/search.json?headersOnly=true&dataPublisher=NOAA&dataTypeId=4&reconstructionsOnly=Y
Specify whether to return only studies which are, or are not, climate reconstructions. By default both are returned.
headersOnly=true
.../study/search.json?species=ABAL&headersOnly=true
Returns only minimal information for each study found , but is much quicker than a full query. If you are performing a search that returns a large number of studies and intend to choose only one from that list to examine in detail,
headersOnly
may give you enough information to find the xmlId or NOAAStudyId for the study that you actually want.skip=[0-9]+
limit=[0-9]+
.../study/search.json? dataPublisher=NOAA&investigators=Abbott,%20M.B.&limit=10
.../study/search.json? dataPublisher=NOAA&investigators=Abbott,%20M.B.&skip=3
.../study/search.json? dataPublisher=NOAA&investigators=Abbott,%20M.B.&limit=10&skip=3
Retrieves only a specific number of results from a search, and chooses where that number should begin. When doing a broad search that takes too long or returns too much data at once, these options can be used to get the same data in smaller pieces. The default, and maximum, limit is 10 studies. Links are provided in the response JSON to the next and previous page of results.
recent=true
.../study/search.json?headersOnly=true&recent=true
.../study/search.json?headersOnly=true&recent=true&limit=50
Changes the order of search results so that recently contributed studies are first. Only studies contributed in the past two years can be found with this option. Because this parameter is designed to be used with very broad searches, by default only the 25 most recent studies are returned. This can be changed with the
limit
parameter.PaST Thesaurus Terms
termName=([a-zA-Z>]+|)*[a-zA-Z>]+
.../cvterm.json?termName=unit%3Etemperature%20unit%3Edegree%20Celsius
https://www.ncei.noaa.gov/access/paleo-search/skos/past-thesaurus.rdf
Data Downloading
.../data/search.json?[search params]
.../data/search.json?xmlId=1840
The data search endpoint accepts the same parameters as the study search endpoint, with the exception of
headersOnly
, skip/limit
, and recent
. Data file packaging operates asynchronously; in response to a /data/search
call you will receive a JSON token with confirmation of your request, the parameters being searched, and a job id.{jobId: ”2043180573_2017-05-15”, message: ”request received”, searchParams: [”xmlId: 1000099”]}
.../data/status.json?[job id]
.../data/status.json?jobId=2043180573_2017-05-15
Check the status of your data job by polling the
/data/status
endpoint. The JSON token returned will always have a status field, and will contain other fields depending on the state of the job. If your job is finished, the response will include a link to the data download.{status: ”working”, message: ”packaging data”, percent: ”28”}
{status: ”complete”, archive: ”https://www.ncei.noaa.gov/access/paleo-data/1099765442_2017-05-15.zip”}
.../data/cancel.json?[job id]
.../data/cancel.json?jobId=2043180573_2017-05-15
If you want to cancel a job you can do so with the
/data/cancel
endpoint.{status: ”canceled”, message: ”job canceled”}
Several parameters apply only to data download requests:
preview=true
.../data/search.json?preview=true&dataPublisher=NOAA&investigators=Ababneh,%20L.
Returns the list of files that will be included in a download request for the given parameters. Be sure to note the 'download' field as some studies may be excluded from downloading due to issues such as third-party distribution constraints.
matchLevel=[study|file]
.../data/search.json?preview=true&matchLevel=file&dataPublisher=NOAA&investigators=Ababneh,%20L.&keywords=earth%20science>paleoclimate>tree-ring>width>more%20info
.../data/search.json?preview=true&matchLevel=study&dataPublisher=NOAA&investigators=Ababneh,%20L.&keywords=earth%20science>paleoclimate>tree-ring>width>more%20info
Specifies how other parameters should be applied when searching for files to download:
- File Match: Only data files which match your search parameters will be included, regardless of matches on other data files in the same study. This is the narrower search option.
- Study Match: All data files will be included from each selected study where any data file matches your search parameters. This is the broader search option.
metadataOnly=true
.../data/search.json?metadataOnly=true&dataPublisher=NOAA&investigators=Ababneh,%20L.
Downloads only the metadata files for the matching studies. No data files are included.
Page parameters
The main search page accepts
dataTypeId
to specify the default data type to search. The various shuttle boxes will be populated with only values applicable to that data type. This is the same as selecting that data type from the shuttle box on the page. If no dataTypeId
is specified, the default is 'all'.The study page (https://www.ncei.noaa.gov/access/paleo-search/study/[NOAAStudyId]) takes the NOAA Study Id for a single study as a URL parameter. If the study contains more than one site, a specific site can be highlighted by providing a
siteId
.All reports pages can accept one or more
dataTypeId
parameters. These pages can also be called with a search
param which tells the page to search for the supplied data types as soon as it loads.The CV Terms thesaurus page can take a term name or id, to link directly to a specific term.