API, Terraform & MCP

API keys for the API, Terraform and MCP, and the Terraform provider that manages your organization as code.

API keys

API keys are under API Keys in the app's sidebar. A key belongs to the organization and is shown only once, when it is created. There are two key types:

  • Management (ue_live_…) - For the API, Terraform and MCP. Only organization admins can create or delete management keys
  • Log ingest (ue_ingest_…) - Can only send logs; it goes into your log agents (see Ingesting logs)

Terraform provider

The official Terraform provider lets you manage your organization as code — with Terraform or OpenTofu. Its resources are uptimeeye_monitor, uptimeeye_scheduled_task, uptimeeye_notification_channel, uptimeeye_notification_integration, uptimeeye_variable, uptimeeye_status_page, uptimeeye_status_page_domain and uptimeeye_report_schedule; the data sources uptimeeye_locations and uptimeeye_notification_channel read existing ones. It is published on the Terraform Registry and open source on GitHub.

Terraform quickstart

Create a management key (ue_live_…) under API Keys (see API keys), then copy this configuration into a main.tf in an empty directory. It defines a notification channel and a monitor that checks an HTTP endpoint every 5 minutes from Europe (Germany); the Locations table lists every location id.

main.tf
terraform {
  required_providers {
    uptimeeye = {
      source = "uptimeeye/uptimeeye"
    }
  }
}

variable "uptimeeye_api_key" {
  description = "Management API key (ue_live_…) from API Keys in the app"
  type        = string
  sensitive   = true
}

provider "uptimeeye" {
  # or remove this line and the variable block, and set UPTIMEEYE_API_KEY
  api_key = var.uptimeeye_api_key
}

resource "uptimeeye_notification_channel" "oncall" {
  name = "On-Call"
}

resource "uptimeeye_monitor" "api" {
  name                    = "API Healthcheck"
  notification_channel_id = uptimeeye_notification_channel.oncall.id
  locations               = ["eu-central-1"] # Europe (Germany)

  steps = [{
    type = "http"
    request = {
      url    = "https://api.example.com/health"
      method = "GET"
    }
    asserts = [{
      type     = "statusCode"
      operator = "is"
      expected = "2xx"
    }]
  }]

  options = {
    tick_every = 300 # seconds; 5 minutes is the shortest interval on Free
    timeout    = 30  # seconds
  }
}

Pass the key as a variable and apply:

shell
export TF_VAR_uptimeeye_api_key="ue_live_..."
terraform init
terraform apply

The notification channel has no receivers yet: add one with uptimeeye_notification_integration or in the app.

Importing an existing setup

Every resource supports terraform import using its ID (visible in the app URLs, e.g. mon_…). Nested resources use composite IDs such as <channel_id>/<integration_id> for notification integrations. The full resource reference lives in the registry documentation; a guided overview is on the Terraform integration page.