---
title: "Create monitor"
method: POST
path: "/monitors"
tags: ["monitors"]
---

# Create monitor

`POST /monitors`

Create a new monitoring endpoint

## Request body

- CreateMonitorRequest
  - `name` string, required
  - `description` string
  - `type` 'http' | 'ping' | 'pagespeed' | 'hardware' | 'docker' | 'port' | 'game' | 'grpc' | 'websocket', required
  - `url` string, uri, required
  - `interval` integer — Check interval in seconds
  - `statusWindowSize` integer
  - `statusWindowThreshold` integer
  - `isActive` boolean
  - `ignoreTlsErrors` boolean
  - `useAdvancedMatching` boolean
  - `port` integer
  - `notifications` string[] — Array of notification IDs to associate with this monitor
  - `secret` string
  - `jsonPath` string
  - `expectedValue` string
  - `matchMethod` 'equal' | 'include' | 'regex' | ''
  - `cpuAlertThreshold` number
  - `memoryAlertThreshold` number
  - `diskAlertThreshold` number
  - `tempAlertThreshold` number
  - `gameId` string
  - `grpcServiceName` string
  - `selectedDisks` string[]
  - `group` string, nullable
  - `geoCheckEnabled` boolean
  - `geoCheckLocations` string[]
  - `geoCheckInterval` integer

## Response `201`

Monitor created successfully

- object
  - `success` boolean, required
  - `msg` string, required
  - `data` object — Response payload (varies by endpoint)
    - `_id` string
    - `userId` string
    - `teamId` string
    - `name` string
    - `description` string
    - `type` 'http' | 'ping' | 'pagespeed' | 'hardware' | 'docker' | 'port'
    - `url` string, uri
    - `interval` integer
    - `isActive` boolean
    - `status` boolean — Current monitor status (up/down)
    - `lastChecked` string, date-time — Timestamp of last check
    - `notifications` string[]
    - `httpOptions` object
      - `method` string
      - `headers` object
      - `body` string
      - `timeout` integer
    - `assertions` object[]
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `422` — Validation failed
- `500` — Internal server error

## Changes

- **2026-03-18** `cd5518087304` — 2 warning, 27 info
  - removed the request property `assertions`
  - removed the request property `httpOptions`
  - added the new optional request property `cpuAlertThreshold`
  - added the new optional request property `diskAlertThreshold`
  - …25 more
- **2025-08-11** `db719f9e3d34` — 5 breaking, 7 warning, 15 info
  - request body became required
  - the request property `interval` became required
  - the `name` request property's minLength was increased from `0` to `1`
  - the `url` request property format changed from no format to `uri`
  - …23 more
- **2025-04-20** `b97ec6888b3c` — 46 breaking, 39 warning, 9 info
  - added the new required request property `teamId`
  - added the new required request property `userId`
  - removed `subschema #1, subschema #2` from the `description` request property `anyOf` list
  - the request property `description` became required
  - …90 more

[Change history](https://skmtc.dev/bluewave-labs/apis/checkmate-api/changes/monitors/post.md)

---

[API](https://skmtc.dev/bluewave-labs/apis/checkmate-api.md) · [All operations](https://skmtc.dev/bluewave-labs/apis/checkmate-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/bluewave-labs/checkmate-api/revisions/8453661342e1/schema)
