---
title: Website & API Monitoring
description: Learn how to monitor websites, APIs, and other network services with Cronitor.
---

Cronitor's [uptime monitoring](/uptime-monitoring) provides real-time visibility into the availability and performance of your websites, APIs, and network services. Monitor from multiple global locations, get instant alerts when issues arise, and track performance trends over time. {% .lead %}

{% hero-image src="https://cdn.cronitor.io/static/img/docs/uptime-monitoring-hero.png" alt="Uptime monitoring dashboard overview" title="Monitor websites, APIs, and services from around the world." /%}

## Creating Your First Monitor

Getting started with uptime monitoring is simple. Choose from three check types based on what you're monitoring:

| Check Type | Best For | Key Features |
|------------|----------|--------------|
| **HTTP/HTTPS** | APIs, web services, REST endpoints | All HTTP methods, custom headers, authentication |
| **Browser-Based** | Single-page apps, JavaScript-heavy sites | Renders JavaScript, measures browser performance |
| **TCP** | Databases, mail servers, custom protocols | Direct port connectivity testing |

{% image-code-split imageSrc="https://cdn.cronitor.io/static/img/docs/uptime-create-monitor-interface.png" imageAlt="Create uptime monitor interface" imageTitle="Create Monitor Interface" codeTitle="Monitor API" %}

```bash
# Create HTTP monitor with custom headers
curl -X PUT "https://cronitor.io/api/monitors" \
  -u API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "key": "api-endpoint",
    "type": "check",
    "request": {
      "url": "https://api.example.com/v1/status",
      "method": "GET",
    },
    "schedule": "every 1 minute"
  }'
```

{% /image-code-split %}

## Assertions & Validation

Configure powerful validation rules to ensure your services behave as expected:

| Assertion Type | Example | Use Case |
|----------------|---------|----------|
| **Response Time** | `response.time < 2s` | Performance monitoring |
| **Status Code** | `response.code = 200` | Success validation |
| **Response Body** | `response.body contains "healthy"` | Content verification |
| **JSON Response** | `response.json data.status = "active"` | API response validation |
| **Headers** | `response.header Content-Type = "application/json"` | Header validation |
| **SSL Certificate** | `ssl_certificate.expires_in > 30 days` | Certificate monitoring |

{% image-code-split imageSrc="https://cdn.cronitor.io/static/img/docs/uptime-assertions-interface.png" imageAlt="Assertion configuration interface" imageTitle="Assertion Configuration" codeTitle="Monitor API" %}

```bash
# Create monitor with multiple assertions
curl -X PUT "https://cronitor.io/api/monitors" \
  -u API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "key": "api-health",
    "type": "check",
    "request": {
      "url": "https://api.example.com/health"
    },
    "assertions": [
      "response.time < 2s",
      "response.code = 200",
      "response.body contains healthy",
      "response.json data.status = active"
    ]
  }'
```

{% /image-code-split %}

## Authentication & Security

Support for various authentication methods and security features:

| Security Feature | Description |
|------------------|-------------|
| **Bearer Tokens** | API key authentication via Authorization header |
| **Basic Auth** | Username/password authentication |
| **Custom Headers** | Flexible authentication schemes and API keys |

{% image-code-split imageSrc="https://cdn.cronitor.io/static/img/docs/uptime-authentication-interface.png" imageAlt="Authentication configuration" imageTitle="Authentication & Security Settings" codeTitle="Monitor API" %}

```bash
# Monitor with authentication
curl -X PUT "https://cronitor.io/api/monitors" \
  -u API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "key": "secure-api",
    "type": "check",
    "request": {
      "url": "https://secure-api.example.com/health",
      "headers": {
        "Authorization": "Bearer your-api-token",
        "X-API-Key": "your-api-key"
      }
    }
  }'
```

{% /image-code-split %}

## SSL Certificate Monitoring

Cronitor automatically monitors SSL certificate expiration for your HTTPS endpoints. When the "Verify SSL Certificate" option is enabled, we'll send warning alerts before your certificates expire so you can renew them proactively.

| Configuration | Default Behavior | Customization |
|---------------|------------------|---------------|
| **SSL Verification** | Enabled by default for HTTPS URLs | Can be disabled in monitor settings |
| **Warning Threshold** | Alert sent 28 days before expiration | Configurable from 1-90 days |

{% image-code-split imageSrc="https://cdn.cronitor.io/static/img/docs/uptime-ssl-certificate-config.png" imageAlt="SSL certificate monitoring configuration" imageTitle="SSL Certificate Configuration" codeTitle="Monitor API" %}

```bash
# Configure SSL certificate monitoring
curl -X PUT "https://cronitor.io/api/monitors" \
  -u API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "key": "secure-api",
    "type": "check",
    "request": {
      "url": "https://secure-api.example.com/health",
      "verify_ssl": true
    },
    "assertions": [
      "ssl_certificate.expires_in > 30 days"
    ]
  }'
```

{% /image-code-split %}

### Configuring SSL Monitoring

{% image-code-split imageSrc="https://cdn.cronitor.io/static/img/docs/uptime-ssl-assertions-config.png" imageAlt="SSL assertions configuration interface" imageTitle="SSL Assertions Configuration" codeTitle="Custom SSL Assertions" %}

To adjust SSL certificate monitoring settings:

1. **Enable/Disable SSL Verification**: Toggle the "Verify SSL Certificate" checkbox in your monitor configuration
2. **Custom Warning Period**: Add a custom assertion like `ssl_certificate.expires_in > 45 days` to receive alerts 45 days before expiration
3. **Disable SSL Alerts**: Uncheck SSL verification or remove SSL assertions to stop certificate monitoring

**Note**: SSL certificate notifications are sent as a "Warning" rather than an "Alert", helping you distinguish between actual downtime and proactive maintenance reminders.


{% /image-code-split %}


## Check Regions & IP Addresses

Configure monitoring frequency and global coverage based on your requirements. Cronitor operates monitoring nodes in the following locations:

{% two-column %}

| Location | Region |
|----------|------|
| **US East 1 (N. Virginia)** | us-east-1 |
| **US East 2 (Ohio)** | us-east-2 |
| **US West 1 (N. California)** | us-west-1 |
| **EU West 1 (Ireland)** | eu-west-1 |
| **EU Central 1 (Frankfurt)** | eu-central-1 |
| **EU North 1 (Stockholm)** | eu-north-1 |
| **AP South 1 (Mumbai)** | ap-south-1 |
| **AP Northeast 1 (Tokyo)** | ap-northeast-1 |
| **AP Southeast 1 (Singapore)** | ap-southeast-1 |
| **AP Southeast 2 (Sydney)** | ap-southeast-2 |
| **SA East 1 (São Paulo)** | sa-east-1 |

```bash
# Configure specific regions and frequency
curl -X PUT "https://cronitor.io/api/monitors" \
  -u API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "key": "global-api",
    "type": "check",
    "request": {
      "url": "https://api.example.com/health"
    },
    "schedule": "every 30 seconds",
    "regions": ["us-east-1", "eu-west-1", "ap-southeast-1"]
  }'
```

{% /two-column %}
#### Fixed IP Addresses

For enhanced security, Cronitor offers both dynamic and fixed IP address pools:

- **Dynamic IPs**: Standard monitoring from our global network
- **Fixed IP Pool**: Static IP addresses for firewall whitelisting and enhanced security

Static IP addresses are available in US West, US East, EU West, and EU Central regions. Enable them in your [account settings](https://cronitor.io/settings/account), and access the [list of Static IPs](https://cronitor.io/ips.txt).

## Alert Configuration

When your websites and APIs go down, you need to know immediately. Cronitor can send alerts to your team through email, Slack, Microsoft Teams, SMS, PagerDuty, webhooks, and more. Setting this up takes just a few steps:

1. **Create integrations** for your preferred services (Slack, Teams, PagerDuty, etc.) in [Settings > Integrations](https://cronitor.io/app/settings/integrations)
2. **Create a Notification List** with one or more integrations in [Settings > Alerts](https://cronitor.io/app/settings/alerts)
3. **Attach your Notification List** when creating or updating your uptime monitor

### Issues & Alert Tracking

When your websites or APIs have problems, Cronitor automatically opens an **Issue** for team coordination and sends alerts to all the configured recipients. Issues give you a persistent record of a failure/outage and can be published to [status pages](/docs/status-pages) or kept private for internal outage communication. Issues show all sent alerts and timing for complete incident visibility.

{% image-code-split imageSrc="https://cdn.cronitor.io/static/img/docs/job-alert-settings.png" imageAlt="Alert configuration settings" imageTitle="Alert & Notification Settings" codeTitle="Monitor API" %}

```bash
# Configure alerts using notification lists (recommended)
curl -X PUT "https://cronitor.io/api/monitors" \
  -u API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "key": "api-endpoint",
    "type": "check",
    "request": {
      "url": "https://api.example.com/v1/status"
    },
    "notify": ["on-call-team", "dev-alerts"]
  }'
```

*You can also configure alerts directly using formats like `email:team@company.com`, `slack:#alerts`, or `pagerduty:service-key`.*

{% /image-code-split %}

### Available Integrations

- **Direct Notifications**: Email & SMS notifications
- **Chat Platforms**: [Slack](/docs/using-slack-with-cronitor), [Microsoft Teams](/docs/using-microsoft-teams-with-cronitor), [Discord](/docs/using-discord-with-cronitor)
- **Incident Management**: [PagerDuty](/docs/using-pagerduty-with-cronitor), [OpsGenie](/docs/using-opsgenie-with-cronitor), [Splunk On-Call](/docs/using-splunk-with-cronitor)
- **Custom Integration**: [Webhooks](/docs/using-webhooks) for any HTTP endpoint

For comprehensive configuration including escalation policies, maintenance windows, and testing your alert setup, see our [Alert Documentation](/docs/alerts).

## Environment Support

While it's common to want separate monitoring for your development, staging, and production infrastructure, uptime monitors in Cronitor operate differently than you might expect. All uptime checks run within your account's default environment (typically "production"), regardless of what you're monitoring.

To monitor different environments of your infrastructure, simply create separate monitors for each endpoint:

- `https://staging.mywebsite.com` → One uptime monitor
- `https://production.mywebsite.com` → Another uptime monitor

This approach gives you clear visibility into each environment's health while keeping your monitoring setup simple and straightforward.
