---
title: "Get tournament activity feed"
method: GET
path: "/tournaments/{identifier}/activity-feed"
tags: ["Tournament: Lifecycle"]
---

# Get tournament activity feed

`GET /tournaments/{identifier}/activity-feed`

Returns the tournament's organizer audit log, newest first, resolved by slug. This is a single limit-capped window over the most recent entries and is NOT cursor-paginated - there is no way to page past the newest 100 in v1, so poll and diff on `id`. `action` is open-ended and grows with new organizer surfaces; treat an unrecognised value as informational. Requires tournaments.tournament_admin:read on the key AND that the caller manages the tournament - the host, a tournament ADMIN, or a tournament MODERATOR. Tournament API access is gated at api_pro on the tournament HOST OWNER's personal developer plan. An organization holding a consumer subscription does not satisfy this - the developer plan ladder has no organization arm.

## Path parameters

- `identifier` string, required — Tournament slug.

## Query parameters

- `limit` integer — Maximum entries to return, 1-100. Defaults to 50.

## Response `200`

The tournament activity feed.

- TournamentActivityFeedResponse — The tournament organizer activity feed.
  - `activities` TournamentActivityEntry[], required — Activity entries newest first. Not cursor-paginated: this is a single `limit`-capped window over the most recent rows, so there is no way to page past the newest 100.
    - `id` string, required — Activity log row ID.
    - `action` string, required — Action identifier, e.g. registration_opened, participant_approved, invite_revoked. Open-ended: treat unrecognised values as informational rather than an error.
    - `actor` TournamentActivityActor, required — The user who performed a logged tournament action. Platform Staff actions suppress username/name and set isPlatformStaff: true, keeping only the id.
      - `id` string, required — Actor's user ID.
      - `username` string — Username. Omitted when the action was taken by Platform Staff.
      - `name` string — Display name. Omitted when the action was taken by Platform Staff.
      - `isPlatformStaff` true — Present and true when a TeamBattles Platform Staff member took the action under audited elevation. username and name are suppressed in that case - only id is retained.
    - `targetType` string — Kind of row the action targeted, when the action names one.
    - `targetId` string — ID of the targeted row.
    - `metadata` object — Action-specific detail. Shape varies by `action`.
    - `createdAt` number, required — Log time (epoch milliseconds).
  - `count` integer, required — Number of entries returned.
  - `timestamp` string, required — Response generation time (ISO 8601).

## Other responses

- `400` — Bad request (invalid body, cursor, limit, or date).
- `401` — Missing or invalid API key.
- `403` — API key lacks the required permission.
- `404` — Resource not found.
- `429` — Rate limited.
- `500` — Internal server error.

---

[API](https://skmtc.net/teambattles/apis/teambattles-api.md) · [All operations](https://skmtc.net/teambattles/apis/teambattles-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/teambattles/teambattles-api/versions/2ffe8fb53b7d/schema)
