# Billing — one predicate, one charge

> The product and type matrix with the monthly price of each monitor, the rule that each dataset is a separate charge, and how cancel prorates to the period end.

- **HTML:** https://offendersearch.app/docs/monitoring/billing
- **Base URL:** https://api.offendersearch.app
- **Authentication:** `X-API-Key` request header
- **OpenAPI:** https://offendersearch.app/openapi.json · https://offendersearch.app/openapi.yaml
- **Monitoring reference as markdown:** https://offendersearch.app/docs/monitoring.md

## The price matrix

A monitor is a flat monthly subscription. Price depends on the `type` — a person watch or a location watch — and every monitor watches exactly one `product`.

| Product | Type | Status | Price |
| --- | --- | --- | --- |
| Sex-offender | person | **Live** | $3 / month |
| Criminal | person | **Live** | $3 / month |
| Sex-offender | location | **Live** | $10 / month |
| Criminal | location | **Coming soon** | $10 / month |

> **Criminal location monitoring is coming soon** — it will arrive as location coverage across criminal records expands. A `POST` for it returns a `not_yet_available` acknowledgement and bills nothing (see [Location monitoring](https://offendersearch.app/docs/monitoring/location-monitoring.md)).

## One product, one predicate, one charge

This is the rule to build your billing model on: **each monitor is one product, one predicate, and one charge.** Criminal and sex-offender person-monitoring are **two separate monitors**, even for the same person. Watching one individual across **both** datasets means two monitors — one `product: "sex-offender"` and one `product: "criminal"` — and therefore **two charges**: $3 + $3 = **$6 / month**.

```json
// Watching Jordan Rivera across BOTH datasets = two monitors = $6/mo.

// Monitor 1 — $3/mo
{ "product": "sex-offender", "type": "person",
  "person": { "firstName": "Jordan", "lastName": "Rivera", "dob": "1988-04-12" },
  "channels": { "email": "alerts@example.com" } }

// Monitor 2 — $3/mo  (a separate POST, a separate mon_… id, a separate charge)
{ "product": "criminal", "type": "person",
  "person": { "firstName": "Jordan", "lastName": "Rivera", "dob": "1988-04-12" },
  "channels": { "email": "alerts@example.com" } }
```

There is no combined "watch everywhere" monitor. If you want one person covered across both datasets, create two monitors and expect two line items.

## Invoicing

Monitor charges appear on the **same monthly invoice** as the rest of your account’s usage — the per-call search and live-verification charges from the other products sit alongside your monitor subscriptions. Each `active` monitor is one recurring monthly line item at the price in the matrix above.

## Cancelling and proration

Cancel a monitor with `DELETE /v1/monitors/{id}`. Cancelling sets its `status` to `canceled` and **stops billing at the end of the current period** — the monitor keeps running until then and its charge is prorated, so you are billed only for the portion of the period it was active. A cancelled monitor stops being evaluated but stays readable, so its alert history is preserved.

```bash
curl -X DELETE "https://api.offendersearch.app/v1/monitors/mon_7f2a1c9e0b4d" \
  -H "X-API-Key: $OFFENDERSEARCH_KEY"
```

---

## Related

- Previous: [Delivery — email & webhooks](https://offendersearch.app/docs/monitoring/delivery.md)
- Next: [Endpoint & error reference](https://offendersearch.app/docs/monitoring/endpoints.md)
- Index: [Monitoring API reference](https://offendersearch.app/docs/monitoring.md)
