Authenticate, select a tenant, and integrate with Probara's monitoring, alerting, incident, and administration APIs.
38 min read
On this page
Base URL and conventions
The control-plane API is rooted at {API_ORIGIN}/api/v1. The API serves /healthz, /readyz, and /metrics on HTTP_PORT (8080 in the bundled deployments); its declared METRICS_PORT does not have a separate listener. Public rendered status pages are served by the separate status-page service.
Send application/json for JSON request bodies; import endpoints also accept supported file content
Identifiers
Resources use UUID-shaped IDs unless the endpoint uses a public slug or capability token
Times
Use RFC 3339 timestamps for filters and scheduled fields
Tenant scope
Resolved from an admin membership selection or permanently from the API key
Deletion
Many operational resources are soft-deleted first and cleaned asynchronously
Errors
Most application handlers return JSON error information, but a few low-level validation paths can return plain HTTP error text
Authentication
Administrator session
Login establishes an HTTP-only access cookie and a rotating refresh session. It is the credential used by the web application and can switch among allowed tenants.
API key
Send Authorization: Bearer pk_<secret>. The key has read or write scope and is bound to its creation tenant.
Push token
Used only in /api/v1/push/{token}. No cookie or bearer key is required because possession of the URL token authorizes a heartbeat.
Revoke the current refresh session and clear cookies
GET /api/v1/auth/me
Read the current session user when present
GET /api/v1/auth/oidc/status
Report OIDC availability
GET /api/v1/auth/oidc/start
Begin authorization-code + PKCE login
GET /api/v1/auth/oidc/callback
Complete the provider callback
GET /api/v1/users/bootstrap/status
Check whether first-user bootstrap remains available
POST /api/v1/users/bootstrap/first
Create the one-time first superadministrator
Tenant selection and permissions
For an administrator cookie, send X-Tenant-ID: <tenant-id> to select an allowed membership. A supported tenant_id query fallback can select context where middleware permits it. API keys ignore caller-selected tenant values and remain pinned to one tenant.
Normal operational writes; not tenant-admin-only governance
Tenant admin
Tenant data and audit
All tenant writes, API-key management, and tenant settings
Platform superadmin
Any selected tenant plus platform users
Platform user administration and tenant operations
Compute-only POST exceptions include /monitors/test, /monitors/import/preview, /monitors/dependency-suggestions, /mesh/probe, and /ai-settings/test. They do not persist monitor/result/graph state. Channel test sends a real outbound notification and therefore is not read-only.
Pagination and common filters
Collection APIs generally accept 1-based page and page_size. The common maximum is 100; locations allow up to 200, and dashboard recent-item limits are capped at 50. Use returned total/page metadata where provided rather than inferring completion from a short page.
Resource
Important filters
Monitors
tag (repeatable where supported), enabled, page, page_size (default 20, max 100)
Compute advisory AI suggestions without saving edges
POST /api/v1/monitors/bulk/alerting
Update notification routing for selected monitors
POST /api/v1/monitors/bulk/delete
Soft-delete selected monitors
GET /api/v1/monitors/export
Export a versioned YAML configuration bundle
POST /api/v1/monitors/import/preview
Parse, map, and validate without creating resources
POST /api/v1/monitors/import
Execute import and return per-row outcomes
Dependency creation rejects self-reference and transitive cycles with HTTP 409. Export/import is not a universal secret-preserving round trip: masked fields and newer monitor types require explicit preview and remediation. Import preview reports a schema for recognized sources (portable_monitor_export, uptime_kuma_export), per-row warnings, and skipped_rows naming source records it declined to translate.
Curated tag-group service summary and ungrouped monitors
GET /api/v1/dashboard/problem-monitors
Monitors needing attention
GET /api/v1/dashboard/recent-failures
Bounded recent failing results
GET /api/v1/dashboard/recent-alerts
Bounded recent alert records
GET /api/v1/dashboard/group-sparkline
Deferred time series for one dashboard group
Overview ranges are 1h, 24h, 7d, 30d, 90d, and 365d, defaulting to 24h. Dashboard group rows are tag-derived presentation, not group-monitor resources.
Alert and notification endpoints
Method and path
Purpose
GET /api/v1/alerts
Paginated/filterable alert list (status, monitor_id, since, suppressed=true|false); items carry suppression_reason and impacted_count when dependency suppression applies
GET /api/v1/alerts/recent
Recent alerts with bounded limit
GET /api/v1/alerts/stream
Authenticated server-sent event stream
GET /api/v1/alerts/{id}
Alert detail
POST /api/v1/alerts/{id}/acknowledge
Mark an open condition acknowledged
POST /api/v1/alerts/{id}/resolve
Manually close an alert lifecycle
GET /api/v1/alert-channels
List configured channels
POST /api/v1/alert-channels
Create a plugin-backed channel
GET /api/v1/alert-channels/{id}
Read channel with protected config masked
PATCH /api/v1/alert-channels/{id}
Update config or active state
DELETE /api/v1/alert-channels/{id}
Delete a channel
POST /api/v1/alert-channels/{id}/test
Send a real test notification
GET /api/v1/alert-channel-plugins
List channel plugin form manifests
GET /api/v1/alert-channel-plugins/{type}
Get one plugin manifest
GET /api/v1/notification-settings
Read tenant defaults, reminders, anomaly and auto-incident settings
PUT /api/v1/notification-settings
Replace tenant notification settings
Incident endpoints
Method and path
Purpose
GET /api/v1/incidents
List incidents
POST /api/v1/incidents
Create an incident
GET /api/v1/incidents/{id}
Get full incident context
PATCH /api/v1/incidents/{id}
Update metadata
POST /api/v1/incidents/{id}/state
Transition lifecycle state
POST /api/v1/incidents/{id}/timeline
Add an internal note, public update, or supported timeline event
GET /api/v1/status-pages/{id}/template/versions/{version}/source
Read archived version source
PUT /api/v1/status-pages/{id}/template/draft
Validate and save the one draft
DELETE /api/v1/status-pages/{id}/template/draft
Discard draft
POST /api/v1/status-pages/{id}/template/publish
Publish draft and archive current source
POST /api/v1/status-pages/{id}/template/revert
Republish archived source as a new version
Template-library route
Purpose
GET /api/v1/status-page-templates
List tenant template metadata
POST /api/v1/status-page-templates
Create a validated library entry
GET /api/v1/status-page-templates/{templateId}
Get entry metadata
GET /api/v1/status-page-templates/{templateId}/source
Retrieve source
PATCH /api/v1/status-page-templates/{templateId}
Rename/update source
DELETE /api/v1/status-page-templates/{templateId}
Delete library entry
The separate status-page service exposes unauthenticated GET /public/status/{slug}, /data, and /stream, plus draft preview. Do not use those public routes to mutate configuration.
Agent and push endpoints
Method and path
Authorization and purpose
POST /api/v1/otlp/v1/metrics
Tenant write API key (Bearer) plus X-Probara-Agent-Id; OTLP/HTTP metric ingest for collector agents
POST /api/v1/agent/metrics
Deprecated legacy-agent ingest (Sunset: 18 Nov 2026, then 410); tenant write API key
GET /api/v1/monitors/{id}/agent/install
Authenticated; generated install command/information incl. collector_config and collector_version
GET /api/v1/monitors/{id}/agent/config.yaml
Authenticated; raw collector YAML for one platform (linux/darwin/windows)
GET /api/v1/monitors/{id}/agent/install/script.sh
Authenticated Unix installer
GET /api/v1/monitors/{id}/agent/install/script.ps1
Authenticated Windows installer
GET /api/v1/monitors/{id}/agent/uninstall/script.sh
Authenticated Unix uninstaller
GET /api/v1/monitors/{id}/agent/uninstall/script.ps1
Authenticated Windows uninstaller
GET /api/v1/monitors/{id}/metrics/series
Authenticated; discover stored metric series for an agent monitor
POST /api/v1/monitors/{id}/metrics/query
Authenticated (read-only despite POST, viewer-accessible); batch range queries — ≤12 queries, ≤50 series and ≤2,000 points per series per response, automatic raw-vs-rollup selection for ranges over 48 h or steps ≥1 h
GET /api/v1/monitors/{id}/push/info
Authenticated generated push URL/config information
GET /api/v1/push/{token}
Public capability token; success heartbeat plus query metrics
POST /api/v1/push/{token}
Public capability token; status/error plus arbitrary metric values
Administration endpoints
Method and path
Required role and purpose
GET /api/v1/auth-context
Authenticated; effective credential, tenant, role, and scope
GET /api/v1/tenants
Admin session; list membership-filtered tenants or all for superadmin
GET /api/v1/tenant-settings
Authenticated; read retention and dashboard tags
PATCH /api/v1/tenant-settings
Tenant admin; update retention/dashboard tags
GET /api/v1/api-keys
Authenticated tenant context; list safe key metadata
Superadmin; delete subject to last-admin/self safeguards
GET /api/v1/oidc-group-mappings
Superadmin; list OIDC group→role mappings, groups seen at past SSO logins, and groups-claim config facts
POST /api/v1/oidc-group-mappings
Superadmin; map an IdP group to a tenant role or platform superadmin
PATCH /api/v1/oidc-group-mappings/{id}
Superadmin; change a mapping's role and/or display label
DELETE /api/v1/oidc-group-mappings/{id}
Superadmin; remove a mapping
Server-sent events
GET /api/v1/alerts/stream is an authenticated tenant alert stream. The public status-page service exposes a different slug-scoped stream at /public/status/{slug}/stream. Use a native EventSource-compatible client where cookie authentication is required, or a streaming HTTP client that can attach the bearer key.
Reconnect with backoff after network or proxy interruption.
Treat events as refresh/invalidation signals and refetch durable resource state.
Keep proxy buffering disabled for the streaming route.
Do not assume the stream is a replayable audit log.
Build a safe client
Set explicit HTTP timeouts and retry only operations whose idempotency you understand.
Retry GET requests with bounded exponential backoff; do not blindly retry create, run-now, import execution, notification tests, or incident timeline writes.
Use import preview before import execution and monitor test before saving complex check configuration.
Respect 401, 403, 404, 409, 410, 422, and rate/transport failures as distinct conditions.
Send ***, or leave the field out, to keep a masked designated secret field; send an empty string when you deliberately want to clear it.
Page collections and retain returned coverage metadata for analytics.
Store full API keys only in a secret manager; the API returns them once.
Log resource IDs and status codes without logging bearer keys, push tokens, installer output, WebSocket headers, connection strings, or webhook secrets.