Working with Monitors

Get All Monitors

from betterstack.uptime import UptimeAPI
from betterstack.uptime.objects import Monitor

api = UptimeAPI("your-token")

for monitor in Monitor.get_all_instances(api):
    print(f"{monitor.url}: {monitor.status}")

Create a New Monitor

from betterstack.uptime import UptimeAPI
from betterstack.uptime.objects import Monitor

api = UptimeAPI("your-token")

monitor = Monitor.new(
    api,
    url="https://example.com",
    monitor_type="status",
    check_frequency=30,
    regions=["us", "eu"],
)

print(f"Created monitor with ID: {monitor.id}")

Update a Monitor

from betterstack.uptime import UptimeAPI
from betterstack.uptime.objects import Monitor

api = UptimeAPI("your-token")

# Get an existing monitor
for monitor in Monitor.get_all_instances(api):
    if monitor.url == "https://example.com":
        # Modify properties
        monitor.paused = True
        monitor.check_frequency = 60

        # Save changes (only modified fields are sent)
        monitor.save()
        break

Get or Create

from betterstack.uptime import UptimeAPI
from betterstack.uptime.objects import Monitor

api = UptimeAPI("your-token")

# Get existing or create new
created, monitor = Monitor.get_or_create(
    api,
    url="https://example.com",
)

if created:
    print("New monitor created")
else:
    print("Found existing monitor")

Get Monitor SLA Data

from betterstack.uptime import UptimeAPI
from betterstack.uptime.objects import Monitor

api = UptimeAPI("your-token")

for monitor in Monitor.get_all_instances(api):
    # Access SLA data (lazy-loaded)
    sla = monitor.sla

    print(f"{monitor.url}:")
    print(f"  Availability: {sla.availability}%")
    print(f"  Total downtime: {sla.downtime_duration}s")
    print(f"  Incidents: {sla.number_of_incidents}")

    # Change timeframe for SLA calculation
    sla.timeframe = ("2024-01-01", "2024-12-31")
    print(f"  Yearly availability: {sla.availability}%")

Working with Monitor Groups

from betterstack.uptime import UptimeAPI
from betterstack.uptime.objects import MonitorGroup

api = UptimeAPI("your-token")

for group in MonitorGroup.get_all_instances(api):
    print(f"Group: {group.name}")

    # Get monitors in this group (lazy-loaded)
    for monitor in group.monitors:
        print(f"  - {monitor.url}")