---
title: "List JavaScript errors"
method: GET
path: "/v1/projects/{projectId}/errors"
tags: ["Errors"]
---

# List JavaScript errors

`GET /v1/projects/{projectId}/errors`

## Request

- Base URL: `https://hootlens-api-368877148687.us-east1.run.app`
- URL: `https://hootlens-api-368877148687.us-east1.run.app/v1/projects/{projectId}/errors`
- Auth: HTTP bearer

JavaScript errors the site's pages threw, grouped by fingerprint (error name, normalized message and top stack frame), most affected first. Each group counts page views and visits and lists the releases, page revisions, variants, page groups and device classes it appeared in, each counted on its own. A stack frame is shown as the original source file and line when a source map for that release was uploaded. Example recordings need the replay scope. Recording must be on for the site (the site setting errorCapture); until then the list is empty. Ranges are limited to 92 days and default to the last 30.

Required token scopes are listed in x-hootlens-scopes. A signed-in person needs the matching permission on the site instead (the viewer and editor roles are presets of the permissions).

## Path parameters

- `projectId` string, required: An identifier: 1 to 80 letters, digits, underscores or hyphens.

## Query parameters

- `from` integer
- `to` integer
- `group` string
- `release` string
- `deviceClass` 'desktop' | 'tablet' | 'mobile'
- `limit` integer

## Response `200`

The error groups.

- ErrorList
  - `from` integer, required: Epoch milliseconds.
  - `to` integer, required: Epoch milliseconds.
  - `recording` boolean, required: False when the site has not turned error recording on.
  - `errors` ErrorGroup[], required
    - `id` string, required: Fingerprint: 16 hex digits of the error name, normalized message and top stack frame.
    - `name` string, required
    - `message` string: Absent under the strict privacy preset.
    - `messageHash` string, required
    - `kind` 'error' | 'rejection', required
    - `opaque` boolean
    - `location` string
    - `topFrame` ErrorFrame
      - `url` string: Script URL: no credentials, no fragment, and no query unless the site keeps queries.
      - `line` integer
      - `col` integer
      - `fn` string: Function name.
      - `resolved` object: The original source position, when a source map for the release covers the frame.
        - `source` string, required: Original file path inside the project, never absolute.
        - `line` integer, required
        - `col` integer
        - `name` string
        - `context` object[]: Lines around the original line. Present only when the source map embeds the source.
          - `line` integer, required
          - `text` string, required
    - `count` integer, required: Page views the error happened in (an error counts once per page view).
    - `visits` integer, required: Distinct visits.
    - `firstSeenAt` integer, required: Epoch milliseconds.
    - `lastSeenAt` integer, required: Epoch milliseconds.
    - `releases` ErrorCount[], required
      - `key` string, required
      - `count` integer, required
    - `pageRevisions` ErrorCount[], required
      - `key` string, required
      - `count` integer, required
    - `variants` ErrorCount[], required
      - `key` string, required
      - `count` integer, required
    - `pageGroups` ErrorCount[], required
      - `key` string, required
      - `count` integer, required
    - `deviceClasses` ErrorCount[], required
      - `key` string, required
      - `count` integer, required
    - `followedClicks` object[], required: Elements whose click the error followed within two seconds.
      - `selector` string, required
      - `name` string: The name the team gave this element.
      - `count` integer, required
    - `examples` object[], required: Present only with the replay scope.
      - `recordingId` string
      - `at` integer, required: Epoch milliseconds.
      - `offsetMs` integer: Position to seek to in the recording.
  - `more` integer, required: Groups left out by limit.
  - `dropped` integer: Occurrences not kept because a day already held the most distinct errors it can.

## Other responses

- `400`: The request fields are invalid.
- `401`: The credential is missing, expired or revoked.
- `403`: The credential or the person's permissions on the site do not permit this action.
- `404`: The site, or the record inside it, does not exist or the caller is not a member (a non-member cannot tell the two apart).
- `429`: A rate limit or a per-site limit was reached.

---

[API](https://skmtc.dev/hootlens/apis/hoot-lens-api.md) · [All operations](https://skmtc.dev/hootlens/apis/hoot-lens-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hootlens/apis/hoot-lens-api/revisions/f64f8dc7b84e?raw)
