Skip to main content

Clients and Sites

Clients & Sites

Overview

Probr organizes monitoring in a two-level hierarchy:

Client → Sites → Probes
  • A Client represents a company or project
  • A Site represents a specific web property belonging to a client
  • Each site has its own ingest key, probe configurations, and tracking infrastructure settings

Clients

Data Model

Field Type Description
id UUID Auto-generated unique identifier
name string Client name (required)
email string Contact email — used for email alert notifications
slack_webhook string Client-specific Slack webhook URL — receives alerts for this client
is_active bool Whether the client is active (default: true)
created_at datetime Creation timestamp

API Endpoints

GET /api/clients

List all clients.

Parameter Type Default Description
active_only bool false Only return active clients

GET /api/clients/{client_id}

Get a single client by ID.

POST /api/clients

Create a new client.

{
  "name": "Acme Corp",
  "email": "ops@acme.com",
  "slack_webhook": "https://hooks.slack.com/services/T.../B.../xxx"
}

PATCH /api/clients/{client_id}

Update a client. Only include the fields you want to change.

{
  "email": "new-ops@acme.com"
}

DELETE /api/clients/{client_id}

Delete a client and all associated sites, probes, and alerts (cascade).

Sites

Data Model

Field Type Required Description
id UUID auto Unique identifier
client_id UUID yes Parent client
name string yes Site name (e.g., "acme.com - Production")
url string yes Main URL of the website
ingest_key string auto Auto-generated key for GTM Listener authentication
is_active bool auto Default: true

Tracking Infrastructure Fields

These optional fields configure which probes can run and what they monitor:

Field Type Used By Description
sgtm_url string http_health, sgtm_infra URL of the sGTM endpoint
gtm_web_container_id string gtm_version Web GTM container ID (e.g., GTM-XXXXX)
gtm_server_container_id string gtm_version Server GTM container ID
ga4_property_id string GA4 property ID (e.g., 123456789)
ga4_measurement_id string GA4 measurement ID (e.g., G-XXXXXXXX)
bigquery_project string bq_events GCP project ID for BigQuery
bigquery_dataset string bq_events BigQuery dataset name
stape_container_id string sgtm_infra Stape container identifier
addingwell_container_id string sgtm_infra Addingwell container identifier
cmp_provider string cmp_check CMP provider name (axeptio, didomi, cookiebot, etc.)

API Endpoints

GET /api/sites

List all sites.

Parameter Type Default Description
client_id UUID optional Filter by client
active_only bool false Only return active sites

GET /api/sites/{site_id}

Get a single site by ID. Returns the full site object including the ingest_key.

POST /api/sites

Create a new site. The ingest_key is auto-generated.

{
  "client_id": "uuid",
  "name": "acme.com - Production",
  "url": "https://acme.com",
  "sgtm_url": "https://sgtm.acme.com",
  "gtm_server_container_id": "GTM-XXXXXX"
}

PATCH /api/sites/{site_id}

Update a site. Only include the fields you want to change.

{
  "sgtm_url": "https://new-sgtm.acme.com",
  "stape_container_id": "abc-123"
}

DELETE /api/sites/{site_id}

Delete a site and all associated probes, alerts, and monitoring data (cascade).

Ingest Keys

Each site receives an auto-generated ingest key upon creation. This key is used by the GTM Listener tag to authenticate requests to the POST /api/ingest endpoint.

  • Keys are 32-byte URL-safe tokens
  • Keys are unique across all sites
  • To rotate a key, delete and recreate the site (or update via API when rotation is implemented)

The ingest key is returned in the SiteRead response and must be configured in the GTM Listener tag's "Probr Ingest Key" field.