---
title: "List a source's events"
method: GET
path: "/alert-sources/{source}/events"
tags: ["Alert sources"]
---

# List a source's events

`GET /alert-sources/{source}/events`

## Request

- Base URL: `https://api.spectate.net/v1`
- URL: `https://api.spectate.net/v1/alert-sources/{source}/events`
- Auth: HTTP bearer

Returns the requests the source received in the last 7 days, newest first, with what each
did. Use it to check that a tool reaches Spectate.

## Path parameters

- `source` string, uuid, required

## Query parameters

- `page` integer
- `per_page` integer

## Response `200`

Paginated set of `AlertSourceEvent`

- object
  - `current_page` integer, required
  - `data` AlertSourceEvent[], required
    - `id` string, uuid, required: Event ID
    - `received_at` string, date-time, required: When the request arrived
    - `outcome` 'fired' | 'resolved' | 'updated' | 'test' | 'ignored' | 'rejected', required: What became of a request an alert source received. | | |---| | `fired` <br/> It fired at least one new alert. | | `resolved` <br/> It resolved at least one alert. | | `updated` <br/> It repeated alerts that were already firing. | | `test` <br/> A test request from the tool's own "test" button; no alert. | | `ignored` <br/> Valid, but nothing to do (for example a resolve of an alert that isn't firing). | | `rejected` <br/> Refused: bad signature, unreadable payload or a disabled source; see `error`. |
    - `summary` string, nullable, required: What happened, in words
    - `error` string, nullable, required: Why it was rejected, with `outcome` `rejected`
    - `alerts` AlertSourceEventAlert[], required: What it did per alert
      - `action` 'fired' | 'updated' | 'resolved' | 'ignored', required: What a request did to one alert. | | |---| | `fired` <br/> A new alert fired. | | `updated` <br/> The alert was already firing; it was updated. | | `resolved` <br/> The alert resolved. | | `ignored` <br/> A resolve for an alert that wasn't firing. |
      - `title` string, required: The alert's title
      - `dedupe_key` string, required: The key the tool groups repeats by; requests with the same key update one alert
      - `alert_id` string, uuid, nullable, required: The alert; `null` when none was touched
    - `payload` object, nullable, required: The request body as received: the tool's JSON, or `{body, truncated}` for mail and non-JSON bodies. Its shape is the tool's
  - `first_page_url` string, nullable, required
  - `from` integer, nullable, required
  - `last_page_url` string, nullable, required
  - `last_page` integer, required
  - `links` object[], required: Generated paginator links.
    - `url` string, nullable, required
    - `label` string, required
    - `active` boolean, required
  - `next_page_url` string, nullable, required
  - `path` string, nullable, required: Base path for paginator generated URLs.
  - `per_page` integer, required: Number of items shown per page.
  - `prev_page_url` string, nullable, required
  - `to` integer, nullable, required: Number of the last item in the slice.
  - `total` integer, required: Total number of items being paginated.

## Other responses

- `401`: `UNAUTHENTICATED`: no token was sent. `INVALID_TOKEN`: the token is unknown or revoked. `TOKEN_EXPIRED`: the token has expired.
- `403`: `FORBIDDEN`: the token lacks an ability this endpoint requires (listed in `details.required_abilities`). `TEAM_PENDING_DELETION`: the team is scheduled for deletion. `TEAM_SUSPENDED`: Spectate suspended the team.
- `404`: `RESOURCE_NOT_FOUND`: there is no such resource in this team.
- `429`: `RATE_LIMITED`: too many requests for this token. Wait for the number of seconds in `Retry-After`.

---

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