Global Fishing Watch API
API v3

Bulk Download API

Asynchronous bulk access to large data slices, starting with fixed infrastructure detections from Sentinel-1 and Sentinel-2 imagery.

Bulk Download API Introduction

The Bulk Download API is designed to support workflows that require bulk access to data, including integration with platforms and tools used by data engineers and researchers. At the moment we are releasing with the API dataset of Fixed infrastructure detections derived from Sentinel-1 and Sentinel-2 satellite imagery.

Listing endpoints in this API are paginated. See Pagination for how limit, offset, and nextOffset work.

This API allows you to:

  • Create bulk reports based on specific filters and spatial parameters
  • Monitor report generation status
  • Download datasets in CSV or JSON format
  • Retrieve region geometry and metadata

Supported Bulk-download API Datasets

Fixed infrastructure detections from Sentinel-1 and Sentinel-2

The API dataset used in this API is: public-fixed-infrastructure-data:latest

Offshore fixed infrastructure is a global dataset detected and classified using Synthetic Aperture Radar (SAR) and Optical imagery from the Sentinel-1 and Sentinel-2 satellite constellations. The dataset is updated daily and includes detections from 2017 to approximately three months before the current date. This dataset supports use cases in maritime domain awareness, vessel monitoring, marine spatial planning, and environmental analysis. Refer to Paolo et al. 2024, Nature: View the paper. This API dataset returns the same data published in our Data Download Portal here.

Detection is performed using a Constant False Alarm Rate (CFAR) algorithm, modified to exclude non-stationary objects. Deep learning (based on the ConvNeXt architecture) is applied to classify detections into the categories: oil, wind, unknown, lake maracaibo, and noise. Post-processing includes clustering, temporal smoothing, and manual expert review. Each detection is assigned a confidence level (high, medium, or low) to support interpretation. For more details on Data Caveats, please visit, Fixed Infrastructure Data Caveats

Difference between this Bulk Download API and the Datasets API regarding fixed infrastructure

This Bulk Download API returns all fixed infrastructure data, including regions like Chile, Canada, and Norway, as well as some noisy data, while the Datasets API and our Map filter out noisy data.

Available Bulk Download API endpoints

  1. Create a new Bulk Report – Generate fixed infrastructure reports by specifying spatial filters, dataset, and date range. Supports CSV or JSON formats.
  2. Get Bulk Report status by ID – Check the current status of a report (e.g. pending, done, failed) and metadata including creation timestamp.
  3. Download report files – Retrieve signed URLs for downloading the data file (DATA), metadata (README), or region geometry (GEOM) used in the report.
  4. Query report results in JSON – Access the structured contents of the generated report with pagination and sorting capabilities. Ideal for filtered previews or integration with scripts.

Create a Bulk Report

Bulk Report - HTTP Request

POST https://gateway.api.globalfishingwatch.org/v3/bulk-reports

Bulk Report - Body only for POST request

ParameterDescriptionRequiredFormatParam Type
nameName of your reporttruestringbody
datasetSpecify the dataset used to generate the report (e.g., public-fixed-infrastructure-data:latest)truestringbody
geojsonGeoJSON object defining a custom region to filtertruestring (GeoJSON)body
formatOutput format of the report. Available options: CSV or JSONtrueEnum: [CSV, JSON]body
regionPredefined region object including dataset and id (e.g., EEZ, MPA, RFMO). See region datasetfalseobjectbody
filtersArray of filters to apply. For public-fixed-infrastructure-data:latest, available filters include:
label (oil, wind, unknown)
structure_start_date (date format YYYY-MM-DD)
structure_end_date (date format YYYY-MM-DD)
label_confidence (low, medium, high)
structure_id (integer or string)

Example:
["label = 'oil'", "structure_start_date between '2020-01-01' and '2025-01-01'"]
truearray of stringsbody

Bulk Report - Create a Bulk Report examples

These examples are available:

  1. Example 1 (POST) - Generate SAR fixed infrastructure report for Argentina EEZ with filter by label = 'oil' and structure_start_date
  2. Example 2 (POST) - Generate report for Argentina EEZ with filter by label_confidence = 'high'
  3. Example 3 (POST) - Generate report for Argentina EEZ with filter by label_confidence = 'medium'
  4. Example 4 (POST) - Generate report for Argentina EEZ with filter by label_confidence = 'low'
  5. Example 5 (POST) - Generate report for Argentina EEZ with filter by structure_id = 313068
  6. Example 6 (POST) - Generate report for Argentina EEZ with filters by structure_start_date and structure_end_date
  7. Example 7 (POST) - Generate report using custom GeoJSON region with filters by label and date range

Bulk Report - Response

Since this is the same dataset Fixed infrastructure detections from Sentinel-1 and Sentinel-2 from our Data Download Portal, you can find the definitions of each field there.

Bulk Report Object Schema

NameTypeRequiredRestrictionsDescription
idstringtrueUUID formatUnique identifier of the report
datasetstringtruee.g. public-fixed-infrastructure-data:v1.1API dataset used to generate the report. The response may contain the resolved version of an alias such as latest.
namestringtrueName assigned to the report
filepathstringtruee.g. fixed_infrastructure_202407.csvFile name inside of the dataset
formatstringtrueEnum: CSV, JSONFormat of the report output
filtersarraytrueArray of stringsList of applied filters (e.g. date range, label, confidence)
geomobjecttrueGeography used for the report (region ID or custom GeoJSON)
statusstringtrueEnum: pending, processing, done, failedCurrent status of the report
ownerIdnumbertrueID of the user or application that generated the report
ownerTypestringtrueType of owner (e.g. user-application)
createdAtdatetimetrueISO 8601 formatTimestamp when the report was created
updatedAtdatetimetrueISO 8601 formatTimestamp when the report was last updated
fileSizenumberfalseSize of the final report file (if available)

Get Bulk Report by ID

This endpoint allows you to retrieve metadata and status of a previously created report using its unique report ID. Use this endpoint to check the current status of a bulk report. Depending on the complexity and size of your request (e.g. large region, long time range), generating the report can take several minutes to several hours. We recommend polling this endpoint periodically to monitor the report’s progress.

Get Bulk Report by ID - HTTP Request

GET https://gateway.api.globalfishingwatch.org/v3/bulk-reports/{id}

Get Bulk Report by ID - URL Parameters

ParameterRequiredTypeDescription
idYesstringid of the report

Get Bulk Report by ID - HTTP Response

Returns the same structure as the response from Create Bulk Report, including fields such as status, name, createdAt, filters, and more. See the Bulk Report - Response Schema for the complete structure.

EXAMPLE: Get bulk report by id

curl --location 'https://gateway.api.globalfishingwatch.org/v3/bulk-reports/adbb9b62-5c08-4142-82e0-b2b575f3e058' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer TOKEN'

EXAMPLE: RESPONSE - Get bulk report by id

{
    "id": "adbb9b62-5c08-4142-82e0-b2b575f3e058",
    "dataset": "public-fixed-infrastructure-data:v1.1",
    "name": "sar-vessel-detection-example-1",
    "filepath": "sar_fixed_infrastructure_202409.csv",
    "filters": [
        "label = 'oil'",
        "structure_start_date between '2020-01-01' and '2025-01-01' "
    ],
    "status": "done",
    "geom": {
        "id": 8466,
        "type": "dataset",
        "dataset": "public-eez-areas"
    },
    "createdAt": "2025-06-27T06:43:35.571Z",
    "updatedAt": "2025-06-27T06:43:35.571Z",
    "ownerId": 509,
    "ownerType": "user-application",
    "format": "CSV",
    "fileSize": 1207
}

Download bulk Report (URL File)

This endpoint allows to download the data once the report is “done”.

Download Bulk Report - HTTP Request

GET https://gateway.api.globalfishingwatch.org/v3/bulk-reports/{id}/download-file-url

The response will return a link to our Google Cloud Platform infrastructure where the data can be downloaded.

Download Bulk Report - URL Parameters for GET Requests

ParameterDescriptionRequiredFormatParam Type
idID of the bulk report, returned in the response when creating the report.truestringpath
fileType of file to download. Options include:
DATA – the dataset file (CSV or JSON)
README – metadata documentation file
GEOM – the region geometry in GeoJSON format
truestringquery

Download Bulk Report – HTTP Response

Once the report is ready (status: done), this endpoint returns a signed URL to download the requested file (DATA, README, or GEOM). The response is a JSON object containing a single url field that points to a downloadable file hosted on Global Fishing Watch's cloud infrastructure.

Download Bulk Report - Examples

These examples are available: In these examples, we use the report generated in the endpoint from the Create bulk endpoint which has as report id: adbb9b62-5c08-4142-82e0-b2b575f3e058.

  1. Example 1 (GET) - Get url of the data file to download it - README
  2. Example 2 (GET) - Get url of the data file to download it - DATA
  3. Example 3 (GET) - Get url of the data file to download it - GEOM

Get Data in JSON Format

The query endpoint allows us to get the data in JSON format

Get Data in JSON Format - HTTP Request

GET https://gateway.api.globalfishingwatch.org/v3/bulk-reports/:id/query

Get Data in JSON Format - URL Parameters

ParameterDescriptionRequiredFormatParam Type
idID of the bulk reporttruestringpath
limitMaximum number of records to returnfalseintegerquery
offsetNumber of records to skip before starting to return resultsfalseintegerquery
sortField(s) to sort the results by. Use - prefix for descending order. Supported fields include:
structure_start_date – date of first detection of the structure
structure_end_date – date of last detection
detection_date – date of specific satellite detection
label – predicted structure type (oil, wind, unknown)
label_confidence – label quality (low, medium, high)
falsestringquery
fieldsComma-separated list of fields to include in the responsefalsestring arrayquery

This is a GET request and does not require a body.

Get Data in JSON Format - HTTP Response

Since this is the same dataset Fixed infrastructure detections from Sentinel-1 and Sentinel-2 from our Data Download Portal, you can find the definitions of each field there

Returns a paginated list of detections from the Fixed Infrastructure dataset.

NameTypeRequiredRestrictionsDescription
detection_idstringfalse-Unique ID of the satellite detection
detection_datestringfalsedate (YYYY-MM-DD)Date of the detection
structure_idstringtrue-Unique ID that groups all detections of the same structure
lonnumbertruefloatLongitude of the detection
latnumbertruefloatLatitude of the detection
structure_start_datestringfalsedate (YYYY-MM-DD)First detection date of the structure
structure_end_datestringfalsedate (YYYY-MM-DD) or nullLast detection date of the structure
labelstringfalseoil, wind, unknownPredicted type of offshore structure
label_confidencestringfalselow, medium, highClassification confidence of the label

Get Data in JSON Format Examples

These examples are available:

  1. Example 1 (GET) - Get data as json sort by structure start date DESC
  2. Example 2 (GET) - Get data as json sort by detection date ASC
  3. Example 3 (GET) - Get data as json sort by label
  4. Example 4 (GET) - Get data as json sort by label confidence
  5. Example 5 (GET) - Get data as json sort by structure start date DESC and only structure id field
  6. Example 6 (GET) - Get data as json sort by structure end date ASC and only 3 fields

Get All Bulk Reports by User

Use this endpoint to retrieve all bulk reports created by your user or application. It supports pagination, sorting, and optional filtering by status or API dataset (see list of datasets available here). You can filter by the API dataset alias, such as public-fixed-infrastructure-data:latest, or by the resolved versioned value returned in the report response, such as public-fixed-infrastructure-data:v1.1.

Bulk Reports GET - HTTP Request

GET https://gateway.api.globalfishingwatch.org/v3/bulk-reports

Bulk Reports GET - URL Parameters

ParameterDescriptionRequiredFormatParam Type
limitNumber of results to return. Example: 10truenumberquery
offsetOffset into the results, used for pagination. Starts at 0. Example: 5truenumberquery
sortSort by column. Prefix with + (ASC) or - (DESC). Example: -createdAtfalsestringquery
statusFilter by report status: pending, processing, done, failedfalsestringquery
datasetFilter reports by API dataset alias or resolved version. Examples: public-fixed-infrastructure-data:latest, public-fixed-infrastructure-data:v1.1falsestringquery

EXAMPLE (GET) – Retrieve list of bulk reports sorted by creation date

# Make sure to replace [TOKEN] with your API Access Token.
curl --location 'https://gateway.api.globalfishingwatch.org/v3/bulk-reports?limit=10&offset=5&sort=-createdAt&dataset=public-fixed-infrastructure-data:latest' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer [TOKEN]'

EXAMPLE: RESPONSE (GET) – Retrieve list of bulk reports sorted by creation date

   {
  "metadata": {},
  "limit": 10,
  "offset": 5,
  "nextOffset": null,
  "total": 10,
  "entries": [
    {
      "id": "d16d2d2a-b415-4f47-a525-54d60c0db2cd",
      "dataset": "public-fixed-infrastructure-data:v1.1",
      "name": "sar-vessel-detection-example-1",
      "filepath": "sar_fixed_infrastructure_202409.csv",
      "filters": [
        "label = 'oil'",
        "structure_start_date between '2020-01-01' and '2025-01-01'"
      ],
      "status": "done",
      "geom": {
        "id": 8466,
        "type": "dataset",
        "dataset": "public-eez-areas"
      },
      "createdAt": "2025-06-24T14:21:27.517Z",
      "updatedAt": "2025-06-24T14:21:27.517Z",
      "ownerId": 385,
      "ownerType": "user-application",
      "format": "CSV",
      "fileSize": 1207
    }
  ]
}

Bulk Reports GET - HTTP Response

NameTypeRequiredRestrictionsDescription
metadataobjectfalseContains metadata related to the query, such as dataset or filters used.
limitnumbertrue≥ 1Number of items returned in this response.
offsetnumbertrue≥ 0Offset position of the first item in the response.
nextOffsetnumberfalse≥ 0Offset for the next page of results, if available.
totalnumbertrue≥ 0Total number of matching reports available for the user.
entriesarraytrueList of bulk reports matching the request. Each entry contains the fields below.
idstringtrueUUIDUnique identifier of the bulk report.
datasetstringtruee.g. public-fixed-infrastructure-data:v1.1API dataset used to generate the bulk report. The response may contain the resolved version of an alias such as latest.
namestringtrueHuman-readable name of the bulk report.
filepathstringtruefilenameName of the output file generated by the report.
filtersarrayfalseArray of string filters used when generating the report.
statusstringtrueEnum: pending, processing, done, failedCurrent status of the report generation process.
geom.idnumbertrueID of the geometry used to define the report region.
geom.typestringtrueEnum: dataset, geojsonType of geometry input.
geom.datasetstringtruee.g., public-eez-areasDataset associated with the region if using reference geometry.
createdAtstringtrueISO 8601Timestamp when the report was created.
updatedAtstringtrueISO 8601Timestamp when the report was last updated.
ownerIdnumbertrueID of the user or application that created the report.
ownerTypestringtrueEnum: user-applicationType of entity that created the report.
formatstringtrueEnum: CSV, JSONFormat of the generated report file.
fileSizenumberfalse≥ 0 (in bytes)Size of the output file in bytes.

Bulk Reports GET - Status Responses

StatusMeaningDescriptionSchema
200OKSuccessfully retrieved the list of bulk reports.Bulk Report Response properties
401UnauthorizedYour request did not include a valid API token.Error Codes
403ForbiddenYou do not have permission to access these reports.Error Codes
422Unprocessable EntityYour query parameters are invalid or malformed.Error Codes
500Internal Server ErrorA server-side issue occurred. Please contact us at [email protected]Error Codes

On this page