# Events and challenges

> Read community events, challenges, their leaderboards, participants and progress over the public API.

Source: https://www.entropiacentral.com/documentation/api-reference/events-and-challenges
Last updated: 2026-07-30

---

Community events and challenges are public, including their live leaderboards, so a society site or a stream overlay can show standings without anybody signing in.

All paths are relative to `https://api.entropiacentral.com`. Managing an event is done through the site and is not covered here; see [running your event](https://www.entropiacentral.com/documentation/events/running-your-event).

## Listing events

```http
GET /events?status=Active&pageNumber=1&pageSize=20
```

| Parameter | Notes |
| --- | --- |
| `search` | Matches the event name |
| `type` | Event type |
| `status` | Event status, for example the active ones |
| `sortBy` | Defaults to `StartDate` |
| `sortOrder` | `asc` or `desc`, defaults to `desc` |
| `pageNumber`, `pageSize` | Default to 1 and 20 |

List items are deliberately light: name, slug, type, status, dates, organiser, participant and category counts, and the banner. Fetch the detail endpoint when you need more.

```http
GET /events/{slug}
```

## Event leaderboards

```http
GET /events/{slug}/leaderboard/{categoryId}?pageNumber=1&pageSize=50
```

Standings for one category of an event. An event can have several categories scored independently, which is why the category id is part of the path rather than optional; the ids come from the event detail response.

The response carries `items`, `totalCount`, `pageNumber`, `pageSize` and `totalPages`.

Standings update as globals are matched, so this endpoint is live during an event. If you are displaying it during a competition, use the [SignalR hubs](https://www.entropiacentral.com/documentation/api-reference/signalr-hubs) for push updates rather than polling this on a timer.

```http
GET /events/{slug}/globals?offset=0&pageSize=10&search=&sortBy=&sortDir=
```

The globals that scored for an event. Note this one takes an `offset` rather than a page number, unlike the leaderboard next to it.

```http
GET /events/{slug}/participants
GET /events/{slug}/teams
GET /events/{slug}/statistics
```

Participants and team rosters are public so entrants can confirm they are registered. Statistics cover the event as a whole, including its top creatures.

```http
GET /events/templates
```

The event templates available when creating one, which is useful mainly for describing what kinds of events exist.

## Challenges

```http
GET /challenges?status=&search=&pageNumber=1&pageSize=20
GET /challenges/{slug}
```

Challenges are tiered goals rather than a competition between entrants, so instead of a leaderboard they expose progress and completions.

```http
GET /challenges/{slug}/progress/{avatarName}
```

One avatar's progress through a challenge. Takes the **avatar name**, not a slug, and returns `404` when that avatar has no progress recorded rather than an empty result. Treat `404` as "has not started", not as an error.

```http
GET /challenges/{slug}/completions?pageNumber=1&pageSize=50
GET /challenges/{slug}/participants?pageNumber=1&pageSize=50
```

Who has finished it, and who is taking part.

```http
GET /challenges/avatar/{avatarName}?pageNumber=1&pageSize=20
```

Every challenge one avatar is progressing through, which is the endpoint to use for a personal progress panel rather than fetching each challenge separately.

```http
GET /challenges/{slug}/trophy
```

The trophy awarded for completing it.

## Notes

Slugs are stable, so an event or challenge URL you store keeps working.

Standings and progress are derived from globals as they are matched, and matching is not instantaneous. A global appears in the globals feeds before it is reflected in an event's standings. During a live event that lag is usually seconds; immediately after one closes it is worth waiting before treating the standings as final.
