---
title: Alerts and uptime checks
description: Configure a tenant uptime check, read its coverage, and receive signed alert transitions through Events.
type: tutorial
product: alerts
summary: Check an HTTPS endpoint or a Hosting service and read durable uptime evidence.
updated: 2026-10-30
order: 0
---

An uptime check observes an HTTPS endpoint or a service in your environment.
Observability records each scheduled result and its coverage. Alert transitions
go through Events to a registered webhook endpoint.

You need an enabled Observability environment, an Access key with
`observability:write` to configure checks and `observability:read` to read them,
and a finite Access delegation authorizing Observability to execute the check.
Register your webhook with Events using `events:write` before using its URI as
a notification target.

## 1. Authorize execution

Set `ENV_RESOURCE` to your exact environment resource name, in the form
`orgs/{org}/projects/{project}/envs/{env}`. Read the setup resource:

```bash
curl "https://api.sylphx.com/v1/$ENV_RESOURCE/uptime_sources/manifest" \
  -H "Authorization: Bearer $SYLPHX_API_KEY"
```

`status.delegate_principal` identifies Observability's attested principal.
Create an Access delegation to that principal for this environment, with
`hosting:read` for the Hosting ownership and readiness reads. Use its returned
reference as `execution_delegation`. Every dispatch exchanges the delegation
afresh; an expired or revoked grant stops outbound execution.

## 2. Create a check

This example uses a public HTTPS endpoint. Replace the example URI and
delegation reference with your own. An idempotency key identifies one request;
keep it when retrying that request.

```bash
curl -X POST "https://api.sylphx.com/v1/$ENV_RESOURCE/uptime_checks?uptime_check_id=site" \
  -H "Authorization: Bearer $SYLPHX_API_KEY" \
  -H "Idempotency-Key: $REQUEST_ID" \
  -H "Content-Type: application/json" \
  -d '{"spec":{"public_uri":"https://app.example.com/healthz","method":"HEAD","interval":"60s","execution_delegation":"dlgt_your_reference"}}'
```

Public endpoints must use HTTPS on port 443, without credentials, query
parameters, fragments or redirects. Checks support GET and HEAD. Private
service checks use the same-environment Hosting service resource name; READY
reads readiness without waking the service.

To receive notifications, set `spec.notify` to
`["webhook:https://your-registered-receiver.example.com/events"]`, using the
exact URI of your Events webhook endpoint. Events owns signing, retries and
delivery readback. Verify its Standard Webhooks signature at your receiver.

## 3. Read results and coverage

```bash
curl "https://api.sylphx.com/v1/$ENV_RESOURCE/uptime_checks/site" \
  -H "Authorization: Bearer $SYLPHX_API_KEY"
```

The status includes the last result, sample freshness, target evidence and
24-hour, 7-day and 30-day coverage. Follow `next_target_page_token` through
`target_page_token` to read every target. Missing observations, unavailable
authority and unsupported evidence remain unknown. They do not count as
successful observations or resolve an active alert.

A revision check sets `bound_public_revisions` to `true`. Hosting supplies
every authorized public host and path and the selected Release's source SHA;
the public response supplies the observed revision. A known mismatch must
persist for more than 30 minutes before firing. Affirmative equality resolves
the same episode. An empty binding census remains unknown.

## Manifest setup

You can declare checks under `resources.telemetry.check` in your manifest.
To enable synchronization, update `uptime_sources/manifest` with a delegation
that also includes `observability:read` and `observability:write`. The source
subscription reconciles the complete declaration set through ordinary check
CRUD and retains ownership by check UID. A valid empty declaration set removes
only checks owned by that subscription.

- [Uptime checks API](/docs/api/uptime_checks)
- [Uptime sources API](/docs/api/uptime_sources)
- [Webhook endpoints API](/docs/api/webhook_endpoints)
