FIRMS KML Fire Footprints API

Returns KMZ files containing color-coded fire footprint polygons for predefined global regions and time spans (24, 48, 72 hours or 7 days). Sensor options include MODIS c6.1, LANDSAT 30m, and VIIRS 375m products from S-NPP, NOAA-20, and NOAA-21. Footprints are color-coded by detection age: 0-6h, 6-12h, 12-24h, and 24h+.

OpenAPI Specification

nasa-firms-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: NASA FIRMS API
  description: >
    NASA Fire Information for Resource Management System (FIRMS) REST API
    providing near-real-time satellite fire detections globally from MODIS
    (Terra/Aqua), VIIRS (S-NPP, NOAA-20, NOAA-21), and LANDSAT instruments.
    Data is available within 3 hours of satellite observation worldwide, with
    Ultra Real-Time detections available within 60 seconds for the US and
    Canada. Supports area-based bounding box queries, KML fire footprints by
    region, data availability checks, and missing data identification. A free
    MAP_KEY obtained via registration is required for most endpoints.
  version: '4.0'
  contact:
    name: NASA FIRMS Support
    url: https://firms.modaps.eosdis.nasa.gov/contact/
  termsOfService: https://www.earthdata.nasa.gov/engage/open-data-services-and-software/data-and-information-policy
  license:
    name: NASA Open Data
    url: https://www.earthdata.nasa.gov/engage/open-data-services-and-software/data-and-information-policy

servers:
  - url: https://firms.modaps.eosdis.nasa.gov
    description: NASA FIRMS production server

tags:
  - name: Area Fire Detections
    description: Active fire hotspot detections within a bounding box area
  - name: KML Fire Footprints
    description: KMZ files containing color-coded fire footprint polygons by region
  - name: Data Availability
    description: Check which dates have Standard Processing or Near Real-Time data
  - name: Missing Data
    description: Identify dates with absent satellite fire detection data

paths:

  /api/area/csv/{map_key}/{source}/{area_coordinates}/{day_range}:
    get:
      operationId: getAreaFireDetections
      summary: Get area fire detections (most recent)
      description: >
        Returns active fire detection hotspots within the specified bounding box
        for the most recent DAY_RANGE days (today back to today minus DAY_RANGE-1).
        Results are returned in CSV format.
      tags:
        - Area Fire Detections
      parameters:
        - $ref: '#/components/parameters/MapKey'
        - $ref: '#/components/parameters/Source'
        - $ref: '#/components/parameters/AreaCoordinates'
        - $ref: '#/components/parameters/DayRange'
      responses:
        '200':
          description: CSV fire detection data
          content:
            text/csv:
              schema:
                $ref: '#/components/schemas/FireDetectionCSV'
              example: |
                latitude,longitude,brightness,scan,track,acq_date,acq_time,satellite,confidence,version,bright_t31,frp,daynight
                -12.345,-67.890,325.6,1.0,1.0,2026-06-12,1345,Terra,h,6.1NRT,290.3,15.2,D
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimitExceeded'

  /api/area/csv/{map_key}/{source}/{area_coordinates}/{day_range}/{date}:
    get:
      operationId: getAreaFireDetectionsByDate
      summary: Get area fire detections starting from a specific date
      description: >
        Returns active fire detection hotspots within the specified bounding box
        starting from the given DATE and spanning DAY_RANGE days forward
        (DATE to DATE + DAY_RANGE - 1). Results are returned in CSV format.
      tags:
        - Area Fire Detections
      parameters:
        - $ref: '#/components/parameters/MapKey'
        - $ref: '#/components/parameters/Source'
        - $ref: '#/components/parameters/AreaCoordinates'
        - $ref: '#/components/parameters/DayRange'
        - name: date
          in: path
          required: true
          description: Start date for the query in YYYY-MM-DD format.
          schema:
            type: string
            format: date
            example: '2026-06-01'
      responses:
        '200':
          description: CSV fire detection data for the specified date range
          content:
            text/csv:
              schema:
                $ref: '#/components/schemas/FireDetectionCSV'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimitExceeded'

  /api/kml_fire_footprints/{region}/{date_span}/{sensor}/{filename}:
    get:
      operationId: getKmlFireFootprints
      summary: Get KML fire footprints by region
      description: >
        Returns a KMZ file containing color-coded fire footprint polygons for
        a predefined global region and time span. Footprints are color-coded
        by detection age: 0-6h, 6-12h, 12-24h, and 24h+.
      tags:
        - KML Fire Footprints
      parameters:
        - $ref: '#/components/parameters/Region'
        - $ref: '#/components/parameters/DateSpan'
        - $ref: '#/components/parameters/KmlSensor'
        - name: filename
          in: path
          required: true
          description: >
            KMZ filename in the pattern
            FirespotArea_{region}_{sensor}_{date_span}.kmz
          schema:
            type: string
            example: FirespotArea_canada_c6.1_24h.kmz
      responses:
        '200':
          description: KMZ file with fire footprint polygons
          content:
            application/vnd.google-earth.kmz:
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'

  /api/kml_fire_footprints/:
    get:
      operationId: getKmlFireFootprintsQuery
      summary: Get KML fire footprints via query parameters
      description: >
        Returns a KMZ file containing color-coded fire footprint polygons for
        a predefined global region and time span. This variant uses query
        parameters instead of path segments.
      tags:
        - KML Fire Footprints
      parameters:
        - name: region
          in: query
          required: true
          description: Predefined geographic region.
          schema:
            $ref: '#/components/schemas/RegionEnum'
        - name: date_span
          in: query
          required: true
          description: Time span of fire detections to include.
          schema:
            $ref: '#/components/schemas/DateSpanEnum'
        - name: sensor
          in: query
          required: true
          description: Satellite sensor source.
          schema:
            $ref: '#/components/schemas/KmlSensorEnum'
      responses:
        '200':
          description: KMZ file with fire footprint polygons
          content:
            application/vnd.google-earth.kmz:
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/BadRequest'

  /api/data_availability/csv/{map_key}/{sensor}:
    get:
      operationId: getDataAvailability
      summary: Get data availability by sensor
      description: >
        Returns CSV data indicating which dates have Standard Processing (SP)
        and Near Real-Time (NRT) data available for a specified sensor.
        Use ALL to retrieve availability for every sensor in a single call.
      tags:
        - Data Availability
      parameters:
        - $ref: '#/components/parameters/MapKey'
        - name: sensor
          in: path
          required: true
          description: >
            Sensor identifier. Use ALL to retrieve availability for all sensors.
          schema:
            $ref: '#/components/schemas/SensorWithAllEnum'
      responses:
        '200':
          description: CSV data availability by date and processing type
          content:
            text/csv:
              schema:
                $ref: '#/components/schemas/DataAvailabilityCSV'
              example: |
                sensor,date,sp,nrt
                MODIS_NRT,2026-06-12,false,true
                MODIS_SP,2026-06-10,true,false
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimitExceeded'

  /api/missing_data/{map_key}:
    get:
      operationId: getMissingData
      summary: Get dates with missing satellite data
      description: >
        Identifies dates for which satellite fire detection data is absent from
        the FIRMS database, organized by satellite and data type. Near
        Real-Time entries only appear for dates beyond the final standard
        processing date for each satellite.
      tags:
        - Missing Data
      parameters:
        - $ref: '#/components/parameters/MapKey'
      responses:
        '200':
          description: CSV list of missing data dates by sensor
          content:
            text/csv:
              schema:
                $ref: '#/components/schemas/MissingDataCSV'
              example: |
                satellite,data_type,date
                Terra,NRT,2026-05-15
                Aqua,SP,2026-04-22
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'

components:

  parameters:
    MapKey:
      name: map_key
      in: path
      required: true
      description: >
        Free MAP_KEY obtained via registration at
        https://firms.modaps.eosdis.nasa.gov/api/map_key/. Rate limited to
        5000 transactions per 10-minute interval. Larger requests (e.g., 7-day
        queries) may count as multiple transactions.
      schema:
        type: string
        example: 'd2b4a9e1f3c75820b6da1e4f9c0b3721'

    Source:
      name: source
      in: path
      required: true
      description: Satellite sensor data source.
      schema:
        $ref: '#/components/schemas/SourceEnum'

    AreaCoordinates:
      name: area_coordinates
      in: path
      required: true
      description: >
        Bounding box in west,south,east,north format (decimal degrees), or the
        string "world" for global coverage [-180,-90,180,90].
      schema:
        type: string
        example: '-85,-57,-32,14'

    DayRange:
      name: day_range
      in: path
      required: true
      description: Number of days to include in the query (1 to 5).
      schema:
        type: integer
        minimum: 1
        maximum: 5
        example: 2

    Region:
      name: region
      in: path
      required: true
      description: Predefined geographic region.
      schema:
        $ref: '#/components/schemas/RegionEnum'

    DateSpan:
      name: date_span
      in: path
      required: true
      description: Time span of fire detections to include.
      schema:
        $ref: '#/components/schemas/DateSpanEnum'

    KmlSensor:
      name: sensor
      in: path
      required: true
      description: Satellite sensor source for KML footprints.
      schema:
        $ref: '#/components/schemas/KmlSensorEnum'

  schemas:

    SourceEnum:
      type: string
      description: Satellite sensor data source identifier.
      enum:
        - LANDSAT_NRT
        - MODIS_NRT
        - MODIS_SP
        - VIIRS_NOAA20_NRT
        - VIIRS_NOAA20_SP
        - VIIRS_NOAA21_NRT
        - VIIRS_SNPP_NRT
        - VIIRS_SNPP_SP
      example: VIIRS_SNPP_NRT

    SensorWithAllEnum:
      type: string
      description: Satellite sensor identifier, or ALL for all sensors.
      enum:
        - ALL
        - LANDSAT_NRT
        - MODIS_NRT
        - MODIS_SP
        - VIIRS_NOAA20_NRT
        - VIIRS_NOAA20_SP
        - VIIRS_NOAA21_NRT
        - VIIRS_SNPP_NRT
        - VIIRS_SNPP_SP
      example: ALL

    RegionEnum:
      type: string
      description: Predefined geographic region for KML fire footprints.
      enum:
        - canada
        - alaska
        - usa_contiguous_and_hawaii
        - central_america
        - south_america
        - europe
        - northern_and_central_africa
        - southern_africa
        - russia_asia
        - south_asia
        - southeast_asia
        - australia_newzealand
      example: south_america

    DateSpanEnum:
      type: string
      description: Time span for KML fire footprint queries.
      enum:
        - 24h
        - 48h
        - 72h
        - 7d
      example: 24h

    KmlSensorEnum:
      type: string
      description: Satellite sensor source for KML footprint data.
      enum:
        - c6.1
        - landsat
        - suomi-npp-viirs-c2
        - noaa-20-viirs-c2
        - noaa-21-viirs-c2
      example: c6.1

    FireDetectionCSV:
      type: string
      description: >
        CSV-formatted active fire detection data. Columns vary by sensor but
        typically include latitude, longitude, brightness temperature, scan
        size, track size, acquisition date/time, satellite name, confidence
        level, version, brightness T31, fire radiative power (FRP), and
        day/night flag.
      example: |
        latitude,longitude,brightness,scan,track,acq_date,acq_time,satellite,confidence,version,bright_t31,frp,daynight
        -12.345,-67.890,325.6,1.0,1.0,2026-06-12,1345,Terra,h,6.1NRT,290.3,15.2,D

    DataAvailabilityCSV:
      type: string
      description: >
        CSV-formatted data availability report indicating whether SP (Standard
        Processing) and NRT (Near Real-Time) data exist for each date per
        sensor.
      example: |
        sensor,date,sp,nrt
        MODIS_NRT,2026-06-12,false,true

    MissingDataCSV:
      type: string
      description: >
        CSV-formatted list of dates with missing satellite fire detection data,
        organized by satellite and data type. NRT entries only appear for dates
        beyond the last standard processing date.
      example: |
        satellite,data_type,date
        Terra,NRT,2026-05-15

  responses:
    BadRequest:
      description: Bad request — invalid or missing parameters.
      content:
        text/plain:
          schema:
            type: string

    Unauthorized:
      description: Unauthorized — MAP_KEY is missing, invalid, or quota exceeded.
      content:
        text/plain:
          schema:
            type: string

    NotFound:
      description: Not found — the requested resource does not exist.
      content:
        text/plain:
          schema:
            type: string

    RateLimitExceeded:
      description: >
        Rate limit exceeded — more than 5000 transactions in a 10-minute
        interval. Retry after the interval resets.
      content:
        text/plain:
          schema:
            type: string