---
title: "Batch Create AOI Monitors"
method: POST
path: "/earthcache/aoi-monitors/batch"
tags: ["aoiMonitors"]
---

# Batch Create AOI Monitors

`POST /earthcache/aoi-monitors/batch`

Creates multiple AOI monitors in a single request using a GeoJSON FeatureCollection for geometries and a shared metadata object applied to all monitors.

## Request body

- AOIMonitorBatchCreate — Request body for batch-creating AOI monitors from a GeoJSON FeatureCollection.
  - `geometries` AOIMonitorFeatureCollection, required — GeoJSON FeatureCollection containing one or more AOI features.
    - `type` 'FeatureCollection', required
    - `features` AOIMonitorFeature[], required — Array of GeoJSON Feature objects, each defining one AOI.
      - `type` 'Feature', required
      - `geometry` AOIMonitorLocation, required — GeoJSON Polygon representing the area of interest.
        - `type` 'Polygon', required — Must be "Polygon".
        - `coordinates` array[], required — Array of linear rings. The first ring is the exterior boundary.
          - array[]
            - number[] — [longitude, latitude] or [longitude, latitude, elevation]
        - `bbox` number[] — Optional bounding box [minLon, minLat, maxLon, maxLat].
      - `properties` object, required
        - `name` string, required — Display name for this monitor.
        - `description` string — Optional description.
  - `metadata` AOIMonitorBaseMetadata, required — Shared metadata applied to all monitors created in a batch request.
    - `run_mode` 'auto' | 'manual'
    - `start_date` string, date, required
    - `end_date` string, date, required
    - `max_cloud_cover` number
    - `min_aoi_coverage` number
    - `notify_users` string[]
    - `sources` string[]
    - `min_resolution` number
    - `max_resolution` number
    - `project_id` string
    - `sensor_type` string[]
    - `off_nadir_angle` number[]

## Response `201`

AOI monitors created successfully.

- BatchAOIMonitors
  - `data` AOIMonitor[], required — Array of all created AOI monitor objects.
    - `id` string, uuid, required — Unique monitor identifier.
    - `name` string, required — Display name for the monitor.
    - `description` string, nullable — Optional description.
    - `location` AOIMonitorLocation, required — GeoJSON Polygon representing the area of interest.
      - `type` 'Polygon', required — Must be "Polygon".
      - `coordinates` array[], required — Array of linear rings. The first ring is the exterior boundary.
        - array[]
          - number[] — [longitude, latitude] or [longitude, latitude, elevation]
      - `bbox` number[] — Optional bounding box [minLon, minLat, maxLon, maxLat].
    - `run_mode` 'auto' | 'manual', required — "auto" runs the monitor on a recurring schedule; "manual" requires explicit triggering.
    - `start_date` string, date, required — Start of the monitoring period (ISO 8601 date).
    - `end_date` string, date, required — End of the monitoring period (ISO 8601 date).
    - `last_run_time` string, date-time, nullable — Timestamp of the last monitor run.
    - `max_cloud_cover` number, nullable — Maximum acceptable cloud cover percentage (0–100).
    - `min_aoi_coverage` number, nullable — Minimum required AOI coverage percentage (0–100).
    - `notify_users` string[], nullable — User IDs to notify when new imagery is found. MUA accounts only.
    - `sources` string[], nullable — Satellite data sources to monitor.
    - `min_resolution` number, nullable — Minimum resolution filter in meters per pixel.
    - `max_resolution` number, nullable — Maximum resolution filter in meters per pixel.
    - `off_nadir_angle` number[], nullable — [min, max] off-nadir angle range in degrees. The first value must be less than the second.
    - `project_id` string, nullable — Associated project ID. MUA accounts only.
    - `org_id` string, nullable — Organization identifier.
    - `user_id` string, required — ID of the user who created the monitor.
    - `sensor_type` string[], nullable — Sensor type filter.
    - `origin` string, nullable — Origin identifier for the monitor.
    - `created_at` string, date-time, nullable — Creation timestamp (ISO 8601).
    - `updated_at` string, date-time, nullable — Last update timestamp (ISO 8601).

## Other responses

- `400` — Bad request – business logic validation failed.
- `401` — Unauthorized
- `422` — Unprocessable entity – schema validation failed.
- `500` — Internal server error.

---

[API](https://skmtc.net/skywatch/apis/api-specification.md) · [All operations](https://skmtc.net/skywatch/apis/api-specification/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/skywatch/api-specification/revisions/51f7c5a8d15d/schema)
