NASA CMR STAC API

Extension to WFS3 Core to support STAC metadata model and search API

Operations 2

GET /{providerId}/search Search STAC items with simple filtering. #
POST /{providerId}/search Search STAC items with full-featured filtering. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/nasa-cmr-stac-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

nasa-cmr-stac-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: CMR Search Capabilities STAC API
  version: 1.0.0
  description: CMR Search API
servers:
- url: https://cmr.earthdata.nasa.gov/search
tags:
- name: STAC
  description: Extension to WFS3 Core to support STAC metadata model and search API
paths:
  /{providerId}/search:
    get:
      summary: Search STAC items with simple filtering.
      description: 'Retrieve Items matching filters. Intended as a shorthand API for simple queries.


        This method is optional, but you MUST implement `POST /stac/search` if you want to implement this method.'
      operationId: getSearchSTAC
      tags:
      - STAC
      parameters:
      - $ref: '#/components/parameters/providerId'
      - $ref: '#/components/parameters/bbox'
      - $ref: '#/components/parameters/datetime'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/ids'
      - $ref: '#/components/parameters/collections'
      responses:
        '200':
          description: A feature collection.
          content:
            application/geo+json:
              schema:
                $ref: '#/components/schemas/itemCollection'
            text/html:
              schema:
                type: string
        default:
          description: An error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
            text/html:
              schema:
                type: string
    post:
      summary: Search STAC items with full-featured filtering.
      description: 'retrieve items matching filters. Intended as the standard, full-featured query API.


        This method is mandatory to implement if `GET /stac/search` is implemented. If this endpoint is implemented on a server, it is required to add a link with `rel` set to `search` to the `links` array in `GET /stac` that refers to this endpoint.'
      operationId: postSearchSTAC
      tags:
      - STAC
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/searchBody'
      responses:
        '200':
          description: A feature collection.
          content:
            application/geo+json:
              schema:
                $ref: '#/components/schemas/itemCollection'
            text/html:
              schema:
                type: string
        default:
          description: An error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
            text/html:
              schema:
                type: string
components:
  schemas:
    itemCollectionLinks:
      type: array
      description: An array of links. Can be used for pagination, e.g. by providing a link with the `next` relation type.
      items:
        $ref: '#/components/schemas/link'
      example:
      - rel: next
        href: http://api.cool-sat.com/stac/search?next=ANsXtp9mrqN0yrKWhf-y2PUpHRLQb1GT-mtxNcXou8TwkXhi1Jbk
    datetimeFilter:
      description: An object representing a date+time based filter.
      type: object
      properties:
        datetime:
          $ref: '#/components/schemas/datetime'
    exception:
      type: object
      description: 'Information about the exception: an error code plus an optional description.'
      properties:
        code:
          type: string
        description:
          type: string
      required:
      - code
    itemCollection:
      description: A GeoJSON FeatureCollection augmented with foreign members that contain values relevant to a STAC entity
      type: object
      required:
      - features
      - type
      properties:
        type:
          type: string
          enum:
          - FeatureCollection
        features:
          type: array
          items:
            $ref: '#/components/schemas/item'
        links:
          $ref: '#/components/schemas/itemCollectionLinks'
    link:
      type: object
      properties:
        href:
          type: string
          example: http://www.geoserver.example/stac/naip/child/catalog.json
          format: url
        rel:
          type: string
          example: child
        type:
          type: string
          example: application/json
        hreflang:
          type: string
          example: en
        title:
          type: string
          example: NAIP Child Catalog
        length:
          type: integer
      title: Link
      description: A generic link.
      required:
      - href
      - rel
    searchBody:
      description: The search criteria
      type: object
      allOf:
      - $ref: '#/components/schemas/bboxFilter'
      - $ref: '#/components/schemas/datetimeFilter'
      - $ref: '#/components/schemas/intersectsFilter'
      - type: object
        properties:
          limit:
            type: integer
            example: 10
    stac_extensions:
      title: STAC extensions
      type: array
      uniqueItems: true
      items:
        anyOf:
        - title: Reference to a JSON Schema
          type: string
          format: uri
        - title: Reference to a core extension
          type: string
    bboxFilter:
      type: object
      description: Only return items that intersect the provided bounding box.
      properties:
        bbox:
          $ref: '#/components/schemas/bbox'
    itemId:
      type: string
      example: path/to/example.tif
      description: Provider identifier, a unique ID, potentially a link to a file.
    item:
      description: A GeoJSON Feature augmented with foreign members that contain values relevant to a STAC entity
      type: object
      required:
      - stac_version
      - id
      - type
      - geometry
      - bbox
      - links
      - properties
      - assets
      properties:
        stac_version:
          $ref: '#/components/schemas/stac_version'
        stac_extensions:
          $ref: '#/components/schemas/stac_extensions'
        id:
          $ref: '#/components/schemas/itemId'
        bbox:
          $ref: '#/components/schemas/bbox'
        geometry:
          $schema: http://json-schema.org/draft-07/schema#
          $id: https://geojson.org/schema/Geometry.json
          title: GeoJSON Geometry
          oneOf:
          - title: GeoJSON Point
            type: object
            required:
            - type
            - coordinates
            properties:
              type:
                type: string
                enum:
                - Point
              coordinates:
                type: array
                minItems: 2
                items:
                  type: number
              bbox:
                type: array
                minItems: 4
                items:
                  type: number
          - title: GeoJSON LineString
            type: object
            required:
            - type
            - coordinates
            properties:
              type:
                type: string
                enum:
                - LineString
              coordinates:
                type: array
                minItems: 2
                items:
                  type: array
                  minItems: 2
                  items:
                    type: number
              bbox:
                type: array
                minItems: 4
                items:
                  type: number
          - title: GeoJSON Polygon
            type: object
            required:
            - type
            - coordinates
            properties:
              type:
                type: string
                enum:
                - Polygon
              coordinates:
                type: array
                items:
                  type: array
                  minItems: 4
                  items:
                    type: array
                    minItems: 2
                    items:
                      type: number
              bbox:
                type: array
                minItems: 4
                items:
                  type: number
          - title: GeoJSON MultiPoint
            type: object
            required:
            - type
            - coordinates
            properties:
              type:
                type: string
                enum:
                - MultiPoint
              coordinates:
                type: array
                items:
                  type: array
                  minItems: 2
                  items:
                    type: number
              bbox:
                type: array
                minItems: 4
                items:
                  type: number
          - title: GeoJSON MultiLineString
            type: object
            required:
            - type
            - coordinates
            properties:
              type:
                type: string
                enum:
                - MultiLineString
              coordinates:
                type: array
                items:
                  type: array
                  minItems: 2
                  items:
                    type: array
                    minItems: 2
                    items:
                      type: number
              bbox:
                type: array
                minItems: 4
                items:
                  type: number
          - title: GeoJSON MultiPolygon
            type: object
            required:
            - type
            - coordinates
            properties:
              type:
                type: string
                enum:
                - MultiPolygon
              coordinates:
                type: array
                items:
                  type: array
                  items:
                    type: array
                    minItems: 4
                    items:
                      type: array
                      minItems: 2
                      items:
                        type: number
              bbox:
                type: array
                minItems: 4
                items:
                  type: number
        type:
          $ref: '#/components/schemas/itemType'
        properties:
          $ref: '#/components/schemas/itemProperties'
        links:
          type: array
          items:
            $ref: '#/components/schemas/link'
        assets:
          $ref: '#/components/schemas/itemAssets'
      example:
        stac_version: 1.0.0
        type: Feature
        id: CS3-20160503_132130_04
        bbox:
        - -122.59750209
        - 37.48803556
        - -122.2880486
        - 37.613537207
        geometry:
          type: Polygon
          coordinates:
          - - - -122.308150179
              - 37.488035566
            - - -122.597502109
              - 37.538869539
            - - -122.576687533
              - 37.613537207
            - - -122.2880486
              - 37.562818007
            - - -122.308150179
              - 37.488035566
        properties:
          datetime: '2016-05-03T13:21:30.040Z'
        links:
        - rel: self
          href: http://cool-sat.com/catalog/collections/cs/items/CS3-20160503_132130_04.json
        assets:
          analytic:
            title: 4-Band Analytic
            href: http://cool-sat.com/catalog/collections/cs/items/CS3-20160503_132130_04/analytic.tif
          thumbnail:
            title: Thumbnail
            href: http://cool-sat.com/catalog/collections/cs/items/CS3-20160503_132130_04/thumb.png
            type: image/png
    datetime:
      type: string
      description: 'Either a date-time or an interval, open or closed. Date and time expressions

        adhere to RFC 3339. Open intervals are expressed using double-dots.


        Examples:


        * A date-time: "2018-02-12T23:20:50Z"

        * A closed interval: "2018-02-12T00:00:00Z/2018-03-18T12:31:12Z"

        * Open intervals: "2018-02-12T00:00:00Z/.." or "../2018-03-18T12:31:12Z"


        Only features that have a temporal property that intersects the value of

        `datetime` are selected.


        If a feature has multiple temporal properties, it is the decision of the

        server whether only a single temporal property is used to determine

        the extent or all relevant temporal properties.'
      example: 2018-02-12T00:00:00Z/2018-03-18T12:31:12Z
    itemAssets:
      type: object
      additionalProperties:
        type: object
        required:
        - href
        properties:
          href:
            type: string
            format: url
            description: Link to the asset object
            example: http://cool-sat.com/catalog/collections/cs/items/CS3-20160503_132130_04/thumb.png
          title:
            type: string
            description: Displayed title
            example: Thumbnail
          type:
            type: string
            description: Media type of the asset
            example: image/png
    itemType:
      type: string
      description: The GeoJSON type
      enum:
      - Feature
    stac_version:
      title: STAC version
      type: string
      example: 1.0.0
    intersectsFilter:
      type: object
      description: Only returns items that intersect with the provided polygon.
      properties:
        intersects:
          $ref: '#/components/schemas/item/properties/geometry'
    itemProperties:
      type: object
      required:
      - datetime
      description: provides the core metatdata fields plus extensions
      properties:
        datetime:
          $ref: '#/components/schemas/datetime'
      additionalProperties:
        description: Any additional properties added in via Item specification or extensions.
    bbox:
      description: "Only features that have a geometry that intersects the bounding box are\nselected. The bounding box is provided as four or six numbers,\ndepending on whether the coordinate reference system includes a\nvertical axis (elevation or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2  \n* Lower left corner, coordinate axis 3 (optional) \n* Upper right corner, coordinate axis 1 \n* Upper right corner, coordinate axis 2 \n* Upper right corner, coordinate axis 3 (optional)\n\nThe coordinate reference system of the values is WGS84\nlongitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless\na different coordinate reference system is specified in the parameter\n`bbox-crs`.\n\nFor WGS84 longitude/latitude the values are in most cases the sequence\nof minimum longitude, minimum latitude, maximum longitude and maximum\nlatitude. However, in cases where the box spans the antimeridian the\nfirst value (west-most box edge) is larger than the third value\n(east-most box edge).\n\n\nIf a feature has multiple spatial geometry properties, it is the\ndecision of the server whether only a single spatial geometry property\nis used to determine the extent or all relevant geometries.\n"
      type: array
      minItems: 4
      maxItems: 6
      items:
        type: number
      example:
      - -110
      - 39.5
      - -105
      - 40.5
  parameters:
    datetime:
      name: datetime
      in: query
      description: 'Either a date-time or an interval, open or closed. Date and time expressions

        adhere to RFC 3339. Open intervals are expressed using double-dots.


        Examples:


        * A date-time: "2018-02-12T23:20:50Z"

        * A closed interval: "2018-02-12T00:00:00Z/2018-03-18T12:31:12Z"

        * Open intervals: "2018-02-12T00:00:00Z/.." or "../2018-03-18T12:31:12Z"


        Only features that have a temporal property that intersects the value of

        `datetime` are selected.


        If a feature has multiple temporal properties, it is the decision of the

        server whether only a single temporal property is used to determine

        the extent or all relevant temporal properties.'
      required: false
      schema:
        type: string
      style: form
      explode: false
    collections:
      name: collections
      in: query
      description: 'The collections search parameter is a list of of collection IDs for Items to match.

        Only items that are included in one of these collections will be returned, otherwise

        all collections will be searched.

        '
      required: false
      schema:
        type: array
        minItems: 1
        items:
          type: string
      explode: false
    providerId:
      name: providerId
      in: path
      description: local identifier of a provider
      required: true
      schema:
        type: string
    bbox:
      name: bbox
      in: query
      description: 'Only features that have a geometry that intersects the bounding box are selected.

        The bounding box is provided as four or six numbers, depending on whether the

        coordinate reference system includes a vertical axis (elevation or depth):


        * Lower left corner, coordinate axis 1

        * Lower left corner, coordinate axis 2

        * Lower left corner, coordinate axis 3 (optional)

        * Upper right corner, coordinate axis 1

        * Upper right corner, coordinate axis 2

        * Upper right corner, coordinate axis 3 (optional)


        The coordinate reference system of the values is WGS 84 longitude/latitude

        (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate

        reference system is specified in the parameter `bbox-crs`.


        For WGS 84 longitude/latitude the values are in most cases the sequence of

        minimum longitude, minimum latitude, maximum longitude and maximum latitude.

        However, in cases where the box spans the antimeridian the first value

        (west-most box edge) is larger than the third value (east-most box edge).


        If a feature has multiple spatial geometry properties, it is the decision of the

        server whether only a single spatial geometry property is used to determine

        the extent or all relevant geometries.'
      required: false
      schema:
        type: array
        minItems: 4
        maxItems: 6
        items:
          type: number
      style: form
      explode: false
    page:
      name: page
      in: query
      description: 'The optional page parameter returns the specified page of results

        (with each page having size=limit).


        * Minimum = 1

        * Default = 1

        '
      required: false
      schema:
        type: integer
        minimum: 1
        default: 1
      style: form
      explode: false
    ids:
      name: ids
      in: query
      description: 'The optional ids parameter returns a FeatureCollection of all matching ids.

        If provided all other parameters that further restrict the number of search results (except `page` and `limit`) will be ignored.

        '
      required: false
      schema:
        type: array
        minItems: 1
        items:
          type: string
      explode: false
    limit:
      name: limit
      in: query
      description: 'The optional limit parameter limits the number of items that are presented in the response document.


        Only items are counted that are on the first level of the collection in the response document.

        Nested objects contained within the explicitly requested items shall not be counted.


        Minimum = 1. Maximum = 10000. Default = 10.'
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 10000
        default: 10
      style: form
      explode: false