NASA APIntrs.nasa.gov ↗
Search and retrieve NASA technical reports, preprints, and conference papers via the NTRS API. Access titles, abstracts, authors, keywords, and funding data.
What is the NASA API?
The NASA NTRS API gives developers access to NASA's Technical Reports Server through 2 endpoints, covering decades of technical reports, preprints, conference papers, and other scientific publications. The search_citations endpoint accepts keyword queries with filters for NASA center and date range, returning paginated results with titles, abstracts, authors, and keywords. The get_citation endpoint returns complete metadata for a single record by submission ID.
curl -X GET 'https://api.parse.bot/scraper/b52eae0a-bc7f-413a-9031-f8f00bcff8da/search_citations?page=1&query=mars&page_size=5' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace ntrs-nasa-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: NTRS SDK — search NASA technical reports, drill into details."""
from parse_apis.nasa_technical_reports_server__ntrs__api import NTRS, StiType, CitationNotFound
client = NTRS()
# Search for Mars-related reports from JPL, capped at 5 results.
for citation in client.citations.search(query="mars rover", center="JPL", limit=5):
print(citation.title, citation.stiType, citation.center.name)
# Drill into one result for full detail.
first = client.citations.search(query="climate change", limit=1).first()
if first:
print(first.title, first.abstract[:100])
for author in first.authors[:3]:
print(author.name, author.organization)
# Point-lookup by ID with typed error handling.
try:
detail = client.citations.get(id="20140013470")
print(detail.title, detail.distributionDate, detail.downloadsAvailable)
for kw in detail.keywords:
print(kw)
except CitationNotFound as exc:
print(f"Citation not found: {exc.citation_id}")
print("exercised: citations.search / citations.get / CitationNotFound")
Full-text search over NASA technical reports. `query` matches title, abstract, and keywords; results can be narrowed by NASA center code and publication year range. Returns paginated results. Each Citation carries enough metadata for triage (title, abstract snippet, authors, STI type, center); use get_citation for full detail including meetings, funding, and download status.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based). |
| query | string | Search query text (e.g., 'mars rover', 'climate change'). Empty string returns all results. |
| center | string | Filter by NASA center code (e.g., 'JPL', 'GSFC', 'KSC', 'ARC', 'LaRC'). Empty string means no filter. |
| year_end | string | Filter by end year in YYYY format (e.g., '2024'). Empty string means no upper bound. |
| page_size | integer | Results per page, between 1 and 100. |
| year_start | string | Filter by start year in YYYY format (e.g., '2020'). Empty string means no lower bound. |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"total": "integer, total number of matching results",
"results": "array of citation objects with id, title, abstract, authors, stiType, keywords, center, publications, meetings, fundingNumbers, downloadsAvailable, and more",
"page_size": "integer, results per page"
},
"sample": {
"data": {
"page": 1,
"total": 2824,
"results": [
{
"id": 20070034695,
"title": "Cassini-Huygens Mars Exploration Rover",
"center": {
"id": "efbc9c123a0f47caafa95d99b7d2e1a1",
"code": "JPL",
"name": "Jet Propulsion Laboratory"
},
"status": "CURATED",
"authors": [
{
"name": "Liepack, Otfrid G.",
"location": "Pasadena, CA, United States",
"organization": "Jet Propulsion Lab., California Inst. of Tech."
}
],
"created": "2013-08-24T00:07:00.0000000+00:00",
"stiType": "PREPRINT",
"abstract": "A viewgraph presentation on the Cassini-Huygens Mars Exploration Rover is shown.",
"keywords": [
"Cassini",
"Mars Exploration Rover (MER)"
],
"meetings": [
{
"name": "Rottery Club, Mallorca",
"country": "Spain",
"endDate": "2006-10-10T00:00:00.0000000+00:00",
"location": "Mallorca",
"startDate": "2006-10-09T00:00:00.0000000+00:00"
}
],
"modified": "2025-08-31T18:39:21.7150190+00:00",
"distribution": "PUBLIC",
"publications": [
{
"publisher": null,
"publicationDate": "2006-10-09T00:00:00.0000000+00:00",
"publicationName": null
}
],
"fundingNumbers": [],
"stiTypeDetails": "Preprint (Draft being sent to journal)",
"distributionDate": "2019-07-12T00:00:00.0000000+00:00",
"subjectCategories": [
"Lunar And Planetary Science And Exploration"
],
"downloadsAvailable": false
}
],
"page_size": 5
},
"status": "success"
}
}About the NASA API
Searching NASA Technical Publications
The search_citations endpoint accepts a query string along with optional filters: center (NASA center code such as JPL, GSFC, KSC, ARC, or LaRC), year_start and year_end for date-bounded searches, and page/page_size for pagination (up to 100 results per page). Passing an empty query string returns all records, useful for bulk traversal by center or date range. Each result in the results array includes the submission id, title, abstract, authors, stiType (e.g., PREPRINT, ABSTRACT, OTHER), keywords, center, publications, meetings, and fundingNumbers.
Full Citation Detail
The get_citation endpoint takes a numeric citation_id (for example, 20140013470) and returns the complete record for that submission. The response includes the center object with code, name, and id; an authors array with each contributor's name, organization, and location; a meetings array with event name, location, country, startDate, and endDate; and a status field indicating curation state. The created timestamp and stiType classification are also returned, along with the full abstract and keywords array.
Coverage and Data Shape
Records span NASA centers and date ranges from early aerospace research through recent missions, with coverage depth varying by center and document type. The stiType field distinguishes between preprints, abstracts, conference papers, and other document classes. Funding traceability is available through the fundingNumbers field on each citation.
The NASA API is a managed, monitored endpoint for ntrs.nasa.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ntrs.nasa.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official ntrs.nasa.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Building a full-text search interface over NASA technical reports filtered by center and year range
- Aggregating author publication histories using the
authorsarray across multiple citation records - Mapping conference paper outputs by meeting location and date using the
meetingsfield - Tracking research funding lineage by extracting
fundingNumbersfrom relevant citations - Compiling keyword co-occurrence networks from the
keywordsarrays across large result sets - Monitoring new document additions from a specific NASA center by querying with a
centerfilter and recentyear_start
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does NASA provide an official developer API for the Technical Reports Server?+
What does the `center` filter in `search_citations` accept, and how specific can I get?+
center parameter accepts NASA center codes such as JPL (Jet Propulsion Laboratory), GSFC (Goddard Space Flight Center), KSC (Kennedy Space Center), ARC (Ames Research Center), and LaRC (Langley Research Center). Passing an empty string removes the center filter entirely and returns results across all centers.Can I retrieve the actual PDF or document file through this API?+
get_citation endpoint returns metadata and a download availability indicator, but it does not return binary file content or direct download URLs for document files. The API covers citation metadata. You can fork it on Parse and revise it to add an endpoint that resolves and proxies document download links.Does the API expose citation-level metrics like view counts or download statistics?+
How does pagination work in `search_citations`?+
page parameter. The page_size can be set between 1 and 100. The response includes a total field with the full result count, so you can compute the number of pages needed to traverse a complete result set for a given query or filter combination.