Gateway Monitoring
Monitor Gateway health, performance, and detection metrics
Overview
Checkpoint's edge Gateway exposes health endpoints and dashboard monitoring. Use these to verify your integration is working, track performance, and troubleshoot issues.
If you're running Middleware instead of (or alongside) the Gateway, the health endpoints and status table below don't apply to it — see Monitoring a Middleware deployment for what's available there.
Gateway Health Endpoints
The Gateway exposes three health endpoints for monitoring and orchestration:
Health Check
GET /__gateway/healthReturns the Gateway's operational status:
{
"status": "healthy",
"version": "1.0.0",
"timestamp": "2026-02-01T12:00:00Z",
"region": "SFO",
"environment": "production"
}| Field | Description |
|---|---|
status | Always healthy when the endpoint responds 200 |
version | Gateway build version (static, from config) |
timestamp | Current UTC timestamp |
region | Cloudflare edge location serving the request |
environment | Deployment environment (e.g. production) |
/__gateway/health reports the edge worker's own liveness — it does not carry WASM detection
state. See WASM Detection Health below for the engine's own status.
Readiness Probe
GET /__gateway/readyKubernetes-style readiness probe. Returns 200 with { "ready": true } when the Gateway can reach its routing store, or 503 with { "ready": false, "error": "KV namespace unavailable" } otherwise. Use this for load balancer health checks.
Version Info
GET /__gateway/versionReturns version and environment information:
{
"version": "1.0.0",
"environment": "production"
}version is a static build value from the worker's configuration — it is not derived per-request,
so /__gateway/version returns neither region nor timestamp.
WASM Detection Health
GET /__detect/healthReports the detection engine's own initialization and fault status, separately from /__gateway/health's worker-liveness check:
{
"status": "healthy",
"wasmVersion": "1.0.0",
"wasmInitialized": true,
"environment": "production",
"timestamp": "2026-02-01T12:00:00Z"
}Returns 200 when the engine initialized and is not currently faulting. Returns 503 with status: "degraded" (initialized but faulting) or status: "unhealthy" (initialization failed) otherwise — the HTTP status always matches the body's health signal, so a load balancer can key off status code alone.
Health endpoints are always accessible, even when enforcement policies would otherwise block the
request. /__gateway/* is reserved for internal operations; /__detect/health is unauthenticated
for the same reason and intentionally omits internal error detail from its response body.
Dashboard Monitoring
Gateway Status
The Enforce settings page shows real-time status for each Gateway domain:
The status maps to the underlying provisioning state machine (pending → dns_pending → ssl_pending → active, plus inactive and error):
| Status | Indicator | Meaning |
|---|---|---|
| Pending | Yellow | Gateway created; DNS record not yet detected |
| DNS Pending | Yellow | DNS record detected, awaiting confirmation |
| SSL Pending | Yellow | SSL certificate being provisioned |
| Active | Green | Gateway operational, traffic flowing |
| Inactive | Gray | Enforcement disabled for this domain |
| Error | Red | Configuration error — check details |
Detection Metrics
View detection activity on the Activity and Analytics screens in the left rail (legacy tab names: Monitor and Analyze):
- Real-time feed — Live detection events as they happen
- Detection rate — Percentage of traffic classified as agents/bots
- Classification breakdown — Distribution across detection classes
- Confidence distribution — Histogram of confidence scores
- Top agents — Most frequently detected agent types
See Analytics & Reporting for detailed analytics.
Uptime Monitoring
For production deployments, configure external uptime monitoring against the health endpoints:
# Check Gateway health
curl -s https://shop.example.com/__gateway/health | jq .status
# Expected: "healthy"
# Check readiness
curl -s -o /dev/null -w "%{http_code}" https://shop.example.com/__gateway/ready
# Expected: 200Recommended Checks
| Check | Endpoint | Interval | Alert On |
|---|---|---|---|
| Health | /__gateway/health | 1 minute | HTTP status != 200 |
| Readiness | /__gateway/ready | 30 seconds | HTTP status != 200 |
| WASM status | /__detect/health | 5 minutes | wasmInitialized != true |
Monitoring a Middleware deployment
Middleware doesn't expose /__gateway/* or /__detect/health — there's no edge worker to probe. What's available instead depends on which entry point you're running:
- Response headers (
withCheckpoint, the in-process engine path). SetsX-Checkpoint-*headers (for exampleX-Checkpoint-Engine,X-Checkpoint-Ruleset-Hash) plus a__checkpoint_verdictcookie, byte-identical across Next.js and Express. InenforcementMode: 'observe', it additionally stampsX-Checkpoint-Would-Have-Beenso you can inspect what enforcement would have done. See Response Headers. - Response headers (
withCheckpointApi, the SaaS-gateway path, Next.js only). SetsKYA-Detected/KYA-Confidence/KYA-Agenton pass-through instead — this path proxies detection to the edge Gateway rather than running the engine in-process. - The storage adapter (Express only).
@kya-os/checkpoint-expressexportsMemoryStorageAdapter,RedisStorageAdapter, andcreateStorageAdapter; wire one up in youronResultcallback to record recent events/sessions in-process (storeEvent/getRecentEvents,storeSession/getActiveSessions). This is a local diagnostic surface, not a dashboard one — the in-memory adapter doesn't survive a restart. See Storage adapters. - Dashboard Activity. When a project API key is configured, both entry points asynchronously report each detection to the same ingestion path the Gateway uses, so Middleware-detected traffic appears alongside Gateway traffic on the Activity and Analytics screens (see Detection Metrics above). Reporting is fire-and-forget and fails silently by default — pass
debug: truein the SDK config to surface reporting failures viaconsole.warn.
Troubleshooting
Gateway Shows "Pending"
The DNS record hasn't been detected yet.
- Verify your DNS record points to
cname.checkpoint-gateway.ai - Check for typos in the record name or value
- Wait for DNS propagation (check with
digornslookup)
dig shop.example.com CNAME +shortGateway Shows "Error"
Common causes:
- DNS misconfiguration — Conflicting records for the same domain
- Origin unreachable — Your origin server is down or blocking Cloudflare IPs
- SSL issue — CAA records preventing certificate issuance
WASM Not Initialized
The WASM detection module failed to load.
- Check the
/__detect/healthendpoint —wasmInitialized: truemeans the engine is up; a503withstatus: "degraded"or"unhealthy"indicates a faulting or failed engine - This typically resolves on its own as Cloudflare retries initialization
- If persistent, contact support
High Latency
Detection latency should be under 5ms (p95) for the Gateway.
- Check if signature verification is adding latency (key fetch not cached)
- Review the Cloudflare region serving your traffic
- Ensure your origin server responds quickly (Gateway latency includes origin response time)
Detection Not Appearing in Dashboard
- Verify your project ID matches the Gateway configuration
- Check that the Gateway status is Active
- Look for errors on the Activity screen
- Confirm the request is going through the Gateway (not bypassing DNS)
Next Steps
- Gateway Enforcement — Setup and DNS configuration
- Policies — Configure enforcement rules
- Dashboard Analytics — Detailed detection analytics
