---
title: "List sites"
method: GET
path: "/projects/{project_id}/sites"
tags: ["Uptime sites"]
---

# List sites

`GET /projects/{project_id}/sites`

## Request

- Base URL: `https://app.honeybadger.io/v3`
- URL: `https://app.honeybadger.io/v3/projects/{project_id}/sites`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/honeybadger/apis/honeybadger-api/docs/projects/:project_id/sites/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns a list of uptime monitoring sites for the project.

## Path parameters

- `project_id` string, required

## Query parameters

- `page` integer
- `per_page` integer

## Response `200`

Success

- object
  - `data` Site[], required
    - `id` string, uuid, required
    - `project_id` string, required: ID of the project this site belongs to
    - `name` string, required: Display name for the site
    - `url` string, required: URL to monitor. Includes the scheme.
    - `active` boolean, required: Whether monitoring is active. After 740 consecutive failed checks the server sets it to false.
    - `state` 'pending' | 'up' | 'down', required: Current state of the site
    - `last_checked_at` string, date-time, nullable, required: When the site was last checked
    - `match_type` 'success' | 'exact' | 'include' | 'exclude' | 'jmespath', required: How a response is judged. `success`: any 2xx; `match` must be left out. `exact`: the response status code equals `match`. `include` / `exclude`: the body does / doesn't contain `match`. `jmespath`: `match` is a JMESPath expression evaluated against the JSON body; numbers in it use backticks, not quotes.
    - `match` string, nullable, required: Value to match in the response
    - `request_method` 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', required
    - `frequency` 1 | 2 | 5 | 15, required: Minutes between checks. A value below the plan's floor is refused.
    - `locations` SiteLocation[], required: Locations checks run from. Unordered. [] means every location.
    - `validate_ssl` boolean, required: Whether to validate SSL certificates
    - `request_headers` object, required: Custom headers sent with check requests, as header name to value; {} when there are none
    - `request_body` string, password, nullable, required: Request body for POST/PUT checks
    - `outage_threshold` integer, nullable, required: Number of failed checks before declaring an outage
    - `timeout` integer, nullable, required: The stored request timeout in seconds; null means the default, 30. On a plan without custom timeouts the default applies whatever is stored.
    - `created_at` string, date-time, required: When the site was created
    - `links` WebLinks, required: Links into the Honeybadger web UI
      - `web` string, uri, required: The resource's page in the Honeybadger web UI, as an absolute URL. Resources without a page, such as outages and deploys, don't have `links`. For a project provisioned through Heroku, error, notice and comment links go through Heroku's single sign-on.
  - `pagination` Pagination: Offset-based pagination information
    - `page` integer, required: Current page number
    - `per_page` integer, required: Items per page
  - `links` OffsetLinks: Navigation links for a numbered-page collection. Each link is a root-relative path (`/v3/...`); resolve it against the API host.
    - `self` string, uri-reference, required: This page
    - `first` string, uri-reference: First page
    - `prev` string, nullable: Previous page, or null on the first page
    - `next` string, nullable: Next page, or null on the last page
  - `meta` ResponseMeta
    - `request_id` string: Unique identifier for the request, for correlating with support

## Other responses

- `401`: The credential is missing, invalid, expired or revoked (`unauthorized`), or was sent in a way v3 doesn't accept (see the examples).
- `403`: The credential isn't allowed to do this. `error.code` says why. An account or project the credential doesn't cover is 404 `not_found`, not 403.
- `404`: Resource not found
- `422`: No path names the account, so the API token has to. This is returned when the token covers more than one account and the account a request applies to cannot be determined. Use a token bound to a single account.

---

[API](https://skmtc.dev/honeybadger/apis/honeybadger-api.md) - [All operations](https://skmtc.dev/honeybadger/apis/honeybadger-api/llms.txt) - [OpenAPI document](https://skmtc.dev/honeybadger/apis/honeybadger-api/revisions/cbcff53f2c8a?raw)
