The Monitor object
One object per watch — its predicate, its channels, its status — and how to read every field.
Base URL https://api.offendersearch.appOne object per watch
A monitor is the durable record of a standing watch. The same object is returned by POST /v1/monitors, by GET /v1/monitors (in a list), and by GET /v1/monitors/{id} (with its recent alerts attached). Every top-level key is always present — test the value, never for key existence.
{
"id": "mon_7f2a1c9e0b4d",
"product": "sex-offender",
"type": "person",
"person": { "firstName": "Jordan", "lastName": "Rivera", "dob": "1988-04-12" },
"location": null,
"minConfidence": "dob_match",
"label": "Jordan Rivera — SO watch",
"status": "active",
"channels": { "email": "alerts@example.com", "webhookUrl": null },
"createdAt": "2026-09-05T14:02:11+00:00"
}Fields
| Field | Type | Notes |
|---|---|---|
| id | string | The monitor identifier, mon_ + 12 hex. Use it on every /v1/monitors/{id} call. |
| product | string | sex-offender or criminal — the dataset this monitor watches. One product per monitor. |
| type | string | person (watch a name + DOB) or location (watch a radius around an address). |
| person | object | null | Present on a person monitor: firstName, lastName, dob. null on a location monitor. |
| location | object | null | Present on a location monitor: address (or lat/lng) and radiusMiles. null on a person monitor. |
| minConfidence | string | The confidence floor an alert must clear: dob_match or year_match. Defaults to dob_match. |
| label | string | Your own label for the monitor, echoed back on the object and the dashboard. Optional. |
| status | string | active (evaluated daily, billing) or canceled (stopped; billing ends at the period end). |
| channels | object | Where alerts are delivered: email and/or webhookUrl. At least one is required at creation. |
| createdAt | string | ISO-8601 timestamp of when the monitor was created. |
person and location are mutually exclusive
A monitor carries exactly one predicate. On a type: "person" monitor, person is populated and location is null; on a type: "location" monitor it is the reverse. Read type to know which to expect, then read the matching object. See Person monitoring and Location monitoring.
status and the monitor lifecycle
| status | Meaning |
|---|---|
active | The monitor is evaluated once per day and is billed on your monthly invoice. |
canceled | You cancelled it. It is no longer evaluated; billing stops at the end of the current period (prorated). It stays readable so its alert history is not lost. |
GET /v1/monitors/{id} still returns it and its alerts. Cancelling is how you stop a watch; there is no separate delete. See Billing.GET /v1/monitors/{id}
Retrieve one monitor together with its recent alerts. A monitor is visible only to the account that created it — another account’s id returns 404.
curl "https://api.offendersearch.app/v1/monitors/mon_7f2a1c9e0b4d" \
-H "X-API-Key: $OFFENDERSEARCH_KEY"{
"id": "mon_7f2a1c9e0b4d",
"product": "sex-offender",
"type": "person",
"person": { "firstName": "Jordan", "lastName": "Rivera", "dob": "1988-04-12" },
"minConfidence": "dob_match",
"label": "Jordan Rivera — SO watch",
"status": "active",
"channels": { "email": "alerts@example.com", "webhookUrl": null },
"createdAt": "2026-09-05T14:02:11+00:00",
"recentAlerts": [
{ "id": "alrt_a1b2c3d4e5f6", "eventType": "new", "matchLabel": "dob_match",
"occurredAt": "2026-09-06T05:12:00+00:00" }
]
}