---
title: TCP Monitors
description: Create and manage TCP monitors. Check port connectivity and get connection history.
section:
  title: API Resources
  order: 7
order: 4
lastUpdated: 2026-09-05
---

TCP monitors verify that services are accepting connections on specific ports. Use them to monitor databases, mail servers, game servers, and any TCP-based service.

## List All TCP Monitors

Retrieve your team's TCP monitors, newest first.

This endpoint is paginated. See [Pagination](/docs/api/pagination) for how to page through the full list.

```
GET /api/v1/tcp-monitors
```

**Required scope:** `tcp-monitors:read`

### Errors

| Status | Type | Description |
| --- | --- | --- |
| 400 | `bad-request` | The request is malformed |
| 401 | `unauthorized` | The API key is missing or invalid |
| 403 | `forbidden` | The API key lacks the required scope |

### Response Schema

```json
{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"monitors": {
					"type": "array",
					"items": {
						"$ref": "#/$defs/TcpMonitor"
					}
				}
			},
			"required": [
				"monitors"
			]
		},
		"meta": {
			"type": "object",
			"properties": {
				"requestId": {
					"type": "string",
					"format": "uuid"
				},
				"timestamp": {
					"type": "string",
					"format": "date-time"
				},
				"pagination": {
					"$ref": "#/$defs/Pagination"
				}
			},
			"required": [
				"requestId",
				"timestamp",
				"pagination"
			]
		}
	},
	"required": [
		"data",
		"meta"
	],
	"$defs": {
		"TcpMonitor": {
			"type": "object",
			"properties": {
				"id": {
					"type": "string",
					"pattern": "^tcpm_[0-7][0-9a-hjkmnp-tv-z]{25}$"
				},
				"name": {
					"type": "string"
				},
				"host": {
					"type": "string"
				},
				"port": {
					"type": "integer"
				},
				"timeoutMs": {
					"type": "integer"
				},
				"intervalSeconds": {
					"type": "integer"
				},
				"isEnabled": {
					"type": "boolean"
				},
				"lastCheckedAt": {
					"type": [
						"integer",
						"null"
					],
					"description": "Epoch milliseconds"
				},
				"lastStatus": {
					"type": [
						"string",
						"null"
					],
					"enum": [
						"up",
						"down",
						"timeout",
						null
					]
				},
				"lastResponseTimeMs": {
					"type": [
						"integer",
						"null"
					]
				},
				"createdAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				},
				"updatedAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				}
			},
			"required": [
				"id",
				"name",
				"host",
				"port",
				"timeoutMs",
				"intervalSeconds",
				"isEnabled",
				"lastCheckedAt",
				"lastStatus",
				"lastResponseTimeMs",
				"createdAt",
				"updatedAt"
			]
		},
		"Pagination": {
			"type": "object",
			"properties": {
				"next": {
					"type": [
						"string",
						"null"
					],
					"description": "Cursor of the following page"
				},
				"prev": {
					"type": [
						"string",
						"null"
					],
					"description": "Cursor of the preceding page"
				},
				"perPage": {
					"type": "integer"
				},
				"total": {
					"type": "integer"
				}
			},
			"required": [
				"next",
				"prev",
				"perPage"
			]
		}
	}
}
```

### Query Parameters

| Parameter | Type    | Required | Description                               |
| --------- | ------- | -------- | ----------------------------------------- |
| `perPage` | integer | No       | Results per page, 1-200 (default: 50)     |
| `cursor`  | string  | No       | Page to fetch, taken from a `Link` header |

### cURL

```bash
curl -i "https://uptime.sergiodxa.com/api/v1/tcp-monitors?perPage=25" \
  -H "Authorization: Bearer uptime_your_api_key"
```

### Response

```json
{
	"data": {
		"monitors": [
			{
				"id": "tcpm_abc123",
				"name": "PostgreSQL Production",
				"host": "db.example.com",
				"port": 5432,
				"timeoutMs": 5000,
				"intervalSeconds": 60,
				"isEnabled": true,
				"lastCheckedAt": 1771070400000,
				"lastStatus": "up",
				"lastResponseTimeMs": 45,
				"createdAt": 1768473000000,
				"updatedAt": 1770733200000
			}
		]
	},
	"meta": {
		"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
		"timestamp": "2026-02-14T12:00:00.000Z",
		"pagination": {
			"next": "eyJkIjoiYWZ0ZXIi",
			"prev": null,
			"perPage": 25,
			"total": 34
		}
	}
}
```

## Create a TCP Monitor

Create a new TCP monitor to check port connectivity.

```
POST /api/v1/tcp-monitors
```

**Required scope:** `tcp-monitors:write`

### Errors

| Status | Type | Description |
| --- | --- | --- |
| 400 | `validation-error` | The request failed validation |
| 400 | `idempotency-key-invalid` | The Idempotency-Key header is not valid |
| 401 | `unauthorized` | The API key is missing or invalid |
| 403 | `forbidden` | The API key lacks the required scope |
| 409 | `idempotency-key-in-use` | A request with this idempotency key is still being processed |
| 422 | `idempotency-key-reused` | This idempotency key was already used for a different request |

### Request Body Schema

```json
{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"name": {
			"type": "string",
			"minLength": 1,
			"maxLength": 255
		},
		"host": {
			"type": "string",
			"minLength": 1,
			"maxLength": 255
		},
		"port": {
			"type": "number",
			"minimum": 1,
			"maximum": 65535
		},
		"timeoutMs": {
			"type": "number",
			"minimum": 100,
			"maximum": 60000,
			"default": 5000
		},
		"intervalSeconds": {
			"type": "number",
			"minimum": 60,
			"maximum": 86400,
			"default": 60
		},
		"isEnabled": {
			"type": "boolean",
			"default": true
		}
	},
	"required": [
		"name",
		"host",
		"port"
	]
}
```

### Response Schema

```json
{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"monitor": {
					"$ref": "#/$defs/TcpMonitor"
				}
			},
			"required": [
				"monitor"
			]
		},
		"meta": {
			"type": "object",
			"properties": {
				"requestId": {
					"type": "string",
					"format": "uuid"
				},
				"timestamp": {
					"type": "string",
					"format": "date-time"
				}
			},
			"required": [
				"requestId",
				"timestamp"
			]
		}
	},
	"required": [
		"data",
		"meta"
	],
	"$defs": {
		"TcpMonitor": {
			"type": "object",
			"properties": {
				"id": {
					"type": "string",
					"pattern": "^tcpm_[0-7][0-9a-hjkmnp-tv-z]{25}$"
				},
				"name": {
					"type": "string"
				},
				"host": {
					"type": "string"
				},
				"port": {
					"type": "integer"
				},
				"timeoutMs": {
					"type": "integer"
				},
				"intervalSeconds": {
					"type": "integer"
				},
				"isEnabled": {
					"type": "boolean"
				},
				"lastCheckedAt": {
					"type": [
						"integer",
						"null"
					],
					"description": "Epoch milliseconds"
				},
				"lastStatus": {
					"type": [
						"string",
						"null"
					],
					"enum": [
						"up",
						"down",
						"timeout",
						null
					]
				},
				"lastResponseTimeMs": {
					"type": [
						"integer",
						"null"
					]
				},
				"createdAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				},
				"updatedAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				}
			},
			"required": [
				"id",
				"name",
				"host",
				"port",
				"timeoutMs",
				"intervalSeconds",
				"isEnabled",
				"lastCheckedAt",
				"lastStatus",
				"lastResponseTimeMs",
				"createdAt",
				"updatedAt"
			]
		}
	}
}
```

### Request Body

| Field             | Type    | Required | Description                                                   |
| ----------------- | ------- | -------- | ------------------------------------------------------------- |
| `name`            | string  | Yes      | Monitor name (1-255 characters)                               |
| `host`            | string  | Yes      | Hostname or IP address (1-255 characters)                     |
| `port`            | integer | Yes      | TCP port number (1-65535)                                     |
| `timeoutMs`       | integer | No       | Connection timeout in milliseconds (100-60000, default: 5000) |
| `intervalSeconds` | integer | No       | Check interval in seconds (60-86400, default: 60)             |
| `isEnabled`       | boolean | No       | Whether the monitor is active (default: true)                 |

### cURL

```bash
curl https://uptime.sergiodxa.com/api/v1/tcp-monitors \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "PostgreSQL Production",
    "host": "db.example.com",
    "port": 5432,
    "timeoutMs": 10000,
    "intervalSeconds": 60
  }'
```

### Response

```json
{
	"data": {
		"monitor": {
			"id": "tcpm_abc123",
			"name": "PostgreSQL Production",
			"host": "db.example.com",
			"port": 5432,
			"timeoutMs": 10000,
			"intervalSeconds": 60,
			"isEnabled": true,
			"lastCheckedAt": null,
			"lastStatus": null,
			"lastResponseTimeMs": null,
			"createdAt": 1771070400000,
			"updatedAt": 1771070400000
		}
	}
}
```

## Get a TCP Monitor

Retrieve a single TCP monitor by ID.

```
GET /api/v1/tcp-monitors/:id
```

**Required scope:** `tcp-monitors:read`

### Errors

| Status | Type | Description |
| --- | --- | --- |
| 400 | `validation-error` | The request failed validation |
| 401 | `unauthorized` | The API key is missing or invalid |
| 403 | `forbidden` | The API key lacks the required scope |
| 404 | `not-found` | The resource does not exist |

### Response Schema

```json
{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"monitor": {
					"$ref": "#/$defs/TcpMonitor"
				}
			},
			"required": [
				"monitor"
			]
		},
		"meta": {
			"type": "object",
			"properties": {
				"requestId": {
					"type": "string",
					"format": "uuid"
				},
				"timestamp": {
					"type": "string",
					"format": "date-time"
				}
			},
			"required": [
				"requestId",
				"timestamp"
			]
		}
	},
	"required": [
		"data",
		"meta"
	],
	"$defs": {
		"TcpMonitor": {
			"type": "object",
			"properties": {
				"id": {
					"type": "string",
					"pattern": "^tcpm_[0-7][0-9a-hjkmnp-tv-z]{25}$"
				},
				"name": {
					"type": "string"
				},
				"host": {
					"type": "string"
				},
				"port": {
					"type": "integer"
				},
				"timeoutMs": {
					"type": "integer"
				},
				"intervalSeconds": {
					"type": "integer"
				},
				"isEnabled": {
					"type": "boolean"
				},
				"lastCheckedAt": {
					"type": [
						"integer",
						"null"
					],
					"description": "Epoch milliseconds"
				},
				"lastStatus": {
					"type": [
						"string",
						"null"
					],
					"enum": [
						"up",
						"down",
						"timeout",
						null
					]
				},
				"lastResponseTimeMs": {
					"type": [
						"integer",
						"null"
					]
				},
				"createdAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				},
				"updatedAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				}
			},
			"required": [
				"id",
				"name",
				"host",
				"port",
				"timeoutMs",
				"intervalSeconds",
				"isEnabled",
				"lastCheckedAt",
				"lastStatus",
				"lastResponseTimeMs",
				"createdAt",
				"updatedAt"
			]
		}
	}
}
```

### cURL

```bash
curl https://uptime.sergiodxa.com/api/v1/tcp-monitors/tcpm_abc123 \
  -H "Authorization: Bearer uptime_your_api_key"
```

### Response

```json
{
	"data": {
		"monitor": {
			"id": "tcpm_abc123",
			"name": "PostgreSQL Production",
			"host": "db.example.com",
			"port": 5432,
			"timeoutMs": 5000,
			"intervalSeconds": 60,
			"isEnabled": true,
			"lastCheckedAt": 1771070400000,
			"lastStatus": "up",
			"lastResponseTimeMs": 45,
			"createdAt": 1768473000000,
			"updatedAt": 1770733200000
		}
	}
}
```

## Update a TCP Monitor

Update an existing TCP monitor with a [JSON merge patch](/docs/api/overview#updating-resources). Only include fields you want to change.

```
PATCH /api/v1/tcp-monitors/:id
```

**Required scope:** `tcp-monitors:write`

### Errors

| Status | Type | Description |
| --- | --- | --- |
| 400 | `validation-error` | The request failed validation |
| 401 | `unauthorized` | The API key is missing or invalid |
| 403 | `forbidden` | The API key lacks the required scope |
| 404 | `not-found` | The resource does not exist |
| 415 | `unsupported-media-type` | The request body's media type is not accepted |

### Response Schema

```json
{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"monitor": {
					"$ref": "#/$defs/TcpMonitor"
				}
			},
			"required": [
				"monitor"
			]
		},
		"meta": {
			"type": "object",
			"properties": {
				"requestId": {
					"type": "string",
					"format": "uuid"
				},
				"timestamp": {
					"type": "string",
					"format": "date-time"
				}
			},
			"required": [
				"requestId",
				"timestamp"
			]
		}
	},
	"required": [
		"data",
		"meta"
	],
	"$defs": {
		"TcpMonitor": {
			"type": "object",
			"properties": {
				"id": {
					"type": "string",
					"pattern": "^tcpm_[0-7][0-9a-hjkmnp-tv-z]{25}$"
				},
				"name": {
					"type": "string"
				},
				"host": {
					"type": "string"
				},
				"port": {
					"type": "integer"
				},
				"timeoutMs": {
					"type": "integer"
				},
				"intervalSeconds": {
					"type": "integer"
				},
				"isEnabled": {
					"type": "boolean"
				},
				"lastCheckedAt": {
					"type": [
						"integer",
						"null"
					],
					"description": "Epoch milliseconds"
				},
				"lastStatus": {
					"type": [
						"string",
						"null"
					],
					"enum": [
						"up",
						"down",
						"timeout",
						null
					]
				},
				"lastResponseTimeMs": {
					"type": [
						"integer",
						"null"
					]
				},
				"createdAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				},
				"updatedAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				}
			},
			"required": [
				"id",
				"name",
				"host",
				"port",
				"timeoutMs",
				"intervalSeconds",
				"isEnabled",
				"lastCheckedAt",
				"lastStatus",
				"lastResponseTimeMs",
				"createdAt",
				"updatedAt"
			]
		}
	}
}
```

### Request Body

| Field             | Type    | Required | Description                                    |
| ----------------- | ------- | -------- | ---------------------------------------------- |
| `name`            | string  | No       | Monitor name (1-255 characters)                |
| `host`            | string  | No       | Hostname or IP address (1-255 characters)      |
| `port`            | integer | No       | TCP port number (1-65535)                      |
| `timeoutMs`       | integer | No       | Connection timeout in milliseconds (100-60000) |
| `intervalSeconds` | integer | No       | Check interval in seconds (60-86400)           |
| `isEnabled`       | boolean | No       | Whether the monitor is active                  |

The limits are the ones [Create a TCP Monitor](#create-a-tcp-monitor) applies. `null` resets `timeoutMs` to `5000`, `intervalSeconds` to `60` and `isEnabled` to `true`; `name`, `host` and `port` cannot be removed, so `null` on any of them is a `400` `validation-error`.

### cURL

```bash
curl https://uptime.sergiodxa.com/api/v1/tcp-monitors/tcpm_abc123 \
  -X PATCH \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/merge-patch+json" \
  -d '{
    "timeoutMs": 15000,
    "isEnabled": false
  }'
```

### Response

```json
{
	"data": {
		"monitor": {
			"id": "tcpm_abc123",
			"name": "PostgreSQL Production",
			"host": "db.example.com",
			"port": 5432,
			"timeoutMs": 15000,
			"intervalSeconds": 60,
			"isEnabled": false,
			"lastCheckedAt": 1771070400000,
			"lastStatus": "up",
			"lastResponseTimeMs": 45,
			"createdAt": 1768473000000,
			"updatedAt": 1771072200000
		}
	}
}
```

### Update With PUT

`PUT /api/v1/tcp-monitors/:id` takes the same fields, for integrations written before `PATCH` existed. A field you leave out keeps its value, `null` is refused, and sending `isEnabled` schedules the next check again on every request, even when the value is unchanged.

**Required scope:** `tcp-monitors:write`

### Errors

| Status | Type | Description |
| --- | --- | --- |
| 400 | `validation-error` | The request failed validation |
| 401 | `unauthorized` | The API key is missing or invalid |
| 403 | `forbidden` | The API key lacks the required scope |
| 404 | `not-found` | The resource does not exist |

### Request Body Schema

```json
{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"name": {
			"type": "string",
			"minLength": 1,
			"maxLength": 255
		},
		"host": {
			"type": "string",
			"minLength": 1,
			"maxLength": 255
		},
		"port": {
			"type": "number",
			"minimum": 1,
			"maximum": 65535
		},
		"timeoutMs": {
			"type": "number",
			"minimum": 100,
			"maximum": 60000
		},
		"intervalSeconds": {
			"type": "number",
			"minimum": 60,
			"maximum": 86400
		},
		"isEnabled": {
			"type": "boolean"
		}
	}
}
```

### Response Schema

```json
{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"monitor": {
					"$ref": "#/$defs/TcpMonitor"
				}
			},
			"required": [
				"monitor"
			]
		},
		"meta": {
			"type": "object",
			"properties": {
				"requestId": {
					"type": "string",
					"format": "uuid"
				},
				"timestamp": {
					"type": "string",
					"format": "date-time"
				}
			},
			"required": [
				"requestId",
				"timestamp"
			]
		}
	},
	"required": [
		"data",
		"meta"
	],
	"$defs": {
		"TcpMonitor": {
			"type": "object",
			"properties": {
				"id": {
					"type": "string",
					"pattern": "^tcpm_[0-7][0-9a-hjkmnp-tv-z]{25}$"
				},
				"name": {
					"type": "string"
				},
				"host": {
					"type": "string"
				},
				"port": {
					"type": "integer"
				},
				"timeoutMs": {
					"type": "integer"
				},
				"intervalSeconds": {
					"type": "integer"
				},
				"isEnabled": {
					"type": "boolean"
				},
				"lastCheckedAt": {
					"type": [
						"integer",
						"null"
					],
					"description": "Epoch milliseconds"
				},
				"lastStatus": {
					"type": [
						"string",
						"null"
					],
					"enum": [
						"up",
						"down",
						"timeout",
						null
					]
				},
				"lastResponseTimeMs": {
					"type": [
						"integer",
						"null"
					]
				},
				"createdAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				},
				"updatedAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				}
			},
			"required": [
				"id",
				"name",
				"host",
				"port",
				"timeoutMs",
				"intervalSeconds",
				"isEnabled",
				"lastCheckedAt",
				"lastStatus",
				"lastResponseTimeMs",
				"createdAt",
				"updatedAt"
			]
		}
	}
}
```

## Delete a TCP Monitor

Permanently delete a TCP monitor and all its check history.

```
DELETE /api/v1/tcp-monitors/:id
```

**Required scope:** `tcp-monitors:delete`

### Errors

| Status | Type | Description |
| --- | --- | --- |
| 400 | `validation-error` | The request failed validation |
| 401 | `unauthorized` | The API key is missing or invalid |
| 403 | `forbidden` | The API key lacks the required scope |
| 404 | `not-found` | The resource does not exist |

### Response Schema

```json
{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"deleted": {
					"type": "boolean",
					"const": true
				}
			},
			"required": [
				"deleted"
			]
		},
		"meta": {
			"type": "object",
			"properties": {
				"requestId": {
					"type": "string",
					"format": "uuid"
				},
				"timestamp": {
					"type": "string",
					"format": "date-time"
				}
			},
			"required": [
				"requestId",
				"timestamp"
			]
		}
	},
	"required": [
		"data",
		"meta"
	]
}
```

### cURL

```bash
curl https://uptime.sergiodxa.com/api/v1/tcp-monitors/tcpm_abc123 \
  -X DELETE \
  -H "Authorization: Bearer uptime_your_api_key"
```

### Response

```json
{ "data": { "deleted": true } }
```

## Get Check Results

Retrieve the connection check history for a TCP monitor.

Results arrive newest first, a page at a time. See [Pagination](/docs/api/pagination) for how to walk the whole history.

```
GET /api/v1/tcp-monitors/:id/results
```

**Required scope:** `tcp-monitors:read`

### Errors

| Status | Type | Description |
| --- | --- | --- |
| 400 | `bad-request` | The request is malformed |
| 400 | `validation-error` | The request failed validation |
| 401 | `unauthorized` | The API key is missing or invalid |
| 403 | `forbidden` | The API key lacks the required scope |
| 404 | `not-found` | The resource does not exist |

### Response Schema

```json
{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"results": {
					"type": "array",
					"items": {
						"$ref": "#/$defs/TcpMonitorResult"
					}
				}
			},
			"required": [
				"results"
			]
		},
		"meta": {
			"type": "object",
			"properties": {
				"requestId": {
					"type": "string",
					"format": "uuid"
				},
				"timestamp": {
					"type": "string",
					"format": "date-time"
				},
				"pagination": {
					"$ref": "#/$defs/Pagination"
				}
			},
			"required": [
				"requestId",
				"timestamp",
				"pagination"
			]
		}
	},
	"required": [
		"data",
		"meta"
	],
	"$defs": {
		"TcpMonitorResult": {
			"type": "object",
			"properties": {
				"id": {
					"type": "string",
					"pattern": "^tcpr_[0-7][0-9a-hjkmnp-tv-z]{25}$"
				},
				"status": {
					"type": "string",
					"enum": [
						"up",
						"down",
						"timeout"
					]
				},
				"responseTimeMs": {
					"type": [
						"integer",
						"null"
					]
				},
				"errorMessage": {
					"type": [
						"string",
						"null"
					]
				},
				"checkedAt": {
					"type": "integer",
					"description": "Epoch milliseconds"
				}
			},
			"required": [
				"id",
				"status",
				"responseTimeMs",
				"errorMessage",
				"checkedAt"
			]
		},
		"Pagination": {
			"type": "object",
			"properties": {
				"next": {
					"type": [
						"string",
						"null"
					],
					"description": "Cursor of the following page"
				},
				"prev": {
					"type": [
						"string",
						"null"
					],
					"description": "Cursor of the preceding page"
				},
				"perPage": {
					"type": "integer"
				},
				"total": {
					"type": "integer"
				}
			},
			"required": [
				"next",
				"prev",
				"perPage"
			]
		}
	}
}
```

### Query Parameters

| Parameter | Type    | Required | Description                               |
| --------- | ------- | -------- | ----------------------------------------- |
| `perPage` | integer | No       | Results per page, 1-200 (default: 50)     |
| `cursor`  | string  | No       | Page to fetch, taken from a `Link` header |

### cURL

```bash
curl -i "https://uptime.sergiodxa.com/api/v1/tcp-monitors/tcpm_abc123/results?perPage=10" \
  -H "Authorization: Bearer uptime_your_api_key"
```

### Response

```json
{
	"data": {
		"results": [
			{
				"id": "tcpr_xyz789",
				"status": "up",
				"responseTimeMs": 42,
				"errorMessage": null,
				"checkedAt": 1771070400000
			},
			{
				"id": "tcpr_xyz788",
				"status": "up",
				"responseTimeMs": 38,
				"errorMessage": null,
				"checkedAt": 1771070340000
			},
			{
				"id": "tcpr_xyz787",
				"status": "down",
				"responseTimeMs": null,
				"errorMessage": "Connection refused",
				"checkedAt": 1771070280000
			}
		]
	},
	"meta": {
		"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
		"timestamp": "2026-02-14T12:00:00.000Z",
		"pagination": {
			"next": "eyJkIjoiYWZ0ZXIi",
			"prev": null,
			"perPage": 10
		}
	}
}
```
