---
title: "Getting started"
description: "Install the Uptimeify provider, authenticate with an API token and create your first website monitor with OpenTofu or Terraform."
---

## 1. Create an API token

Open **Settings > API** in the dashboard and create a token, see [Generate an API token](/api/introduction/generate-api-token). An organization token manages everything in the organization; a [customer token](/terraform/customer-tokens) only its customers.

```sh
export UPTIMEIFY_API_TOKEN=wsm_...
```

## 2. Write the configuration

```terraform
terraform {
  required_version = ">= 1.11"
  required_providers {
    uptimeify = {
      source  = "uptimeify/uptimeify"
      version = "~> 0.2"
    }
  }
}

provider "uptimeify" {} # reads UPTIMEIFY_API_TOKEN

data "uptimeify_customer" "shop" {
  name = "Example Shop GmbH"
}

resource "uptimeify_website" "shop" {
  customer_id    = tonumber(data.uptimeify_customer.shop.id)
  name           = "Shop homepage"
  url            = "https://shop.example.com/"
  check_interval = 5

  check_expected_response_enabled = true
  expected_response_match_type    = "contains"
  expected_response_value         = "Add to cart"
}

resource "uptimeify_tag" "production" {
  name  = "production"
  color = "red"
}

resource "uptimeify_monitor_tag" "shop_production" {
  monitor_type = "website"
  monitor_id   = tonumber(uptimeify_website.shop.id)
  tag_id       = tonumber(uptimeify_tag.production.id)
}
```

## 3. Apply

```sh
tofu init
tofu plan
tofu apply
```

With Terraform, use `terraform` instead of `tofu`, the commands are the same. The monitor appears in the dashboard right after `apply` and starts checking within its interval.

## 4. Change and review

Edit the configuration, run `tofu plan` and review the diff like any other code change. A change somebody made in the dashboard shows up in the next `plan` as drift and is reset on `apply`.

## Next steps

- [Customer tokens](/terraform/customer-tokens): one configuration per client.
- [Import existing setup](/terraform/import): bring monitors you created in the dashboard under code.
- [Secrets and updates](/terraform/secrets-and-updates): headers, passwords and how the provider sends updates.
- [`uptimeify_website`](/terraform/resources/website): every attribute of the website monitor.
