Skip to main content

Custom Domain Configuration

You can host your status pages on a custom domain by configuring the APP_STATUS_PAGE_DOMAIN environment variable.

Setup Steps

You can only have slugs on this domain. If you want a status page without a slug you need to use a different domain
1

Configure Environment Variable

Add the following to your .env file:
Replace status.example.com with your desired status pages domain.
2

Configure DNS

Point your custom domain to your UptimeKit installation:
  • Add an A record pointing to your status-page server’s IP address
3

Restart Application

Restart your UptimeKit instance to apply the changes:
If you don’t configure a custom domain, status pages will be accessible via the default the domain reverse proxying the status page.

Slug-Based Routing

Each status page can have a unique slug that makes it accessible via a clean URL path.

How It Works

When you create or edit a status page, you can set a custom slug in the status page settings. The slug will be used in the URL:

Best Practices

  • Use lowercase letters, numbers, and hyphens
  • Keep slugs short and memorable
  • Use descriptive names (e.g., api, website, services)
  • Avoid special characters or spaces
Slugs must be unique across all status pages in your UptimeKit instance.

JSON Status Summary

Every public status page exposes a read-only JSON summary that can be fetched from the browser without an API key, for example to show a banner in your own app when an incident or maintenance is in progress.
The response includes the overall page status, the status of each component (monitor) on the page, and incidents and maintenances that are active, upcoming, or were resolved within the last 24 hours. Only data that is already visible on the status page is included.
Component IDs are monitor IDs, and componentIds on incidents and maintenances reference them. All timestamps are ISO 8601 in UTC. A page status of unknown means UptimeKit has no health data for it yet, so it should not be treated as operational. The endpoint sends Access-Control-Allow-Origin: * and is cached for 30 seconds. Password-protected status pages return 404.

Password Protection

You can make status pages private by enabling password protection. This is useful for internal status pages or pages with sensitive information.

Enabling Password Protection

1

Configure Secret Key (Optional)

Optionally add a dedicated secret for status page access tokens to your .env file:
This environment variable is optional. If not set, UptimeKit will use BETTER_AUTH_SECRET as a fallback. The secret is used to sign session tokens, not for the actual status page passwords (those are set per-page in the dashboard).
To generate a secure secret:
2

Enable Protection in Dashboard

  1. Navigate to your status page settings
  2. Toggle the “Make private” option
  3. Set a password for the status page
  4. Save your changes
3

Access Protected Page

When users visit your status page, they’ll be prompted to enter the password. After successful authentication, they’ll have access for 24 hours via a secure session token.

Security Features

Password-protected status pages include several security features:
Always use strong, unique passwords for protected status pages. Either STATUS_PAGE_ACCESS_SECRET or BETTER_AUTH_SECRET must be configured for password protection to work.

User Authentication Flow

  1. User visits the protected status page URL
  2. UptimeKit displays a password prompt
  3. User enters the status page password
  4. Password is verified against the Argon2id hash
  5. Upon success, a secure session token is issued for 24 hours
  6. User can access the status page without re-authentication during the session period

Example Configuration

Here’s a complete example of status page configuration in your .env file:
Remember to restart your UptimeKit instance after making changes to environment variables.