---
title: "List public competition Events"
method: GET
path: "/api/events"
tags: ["Events"]
---

# List public competition Events

`GET /api/events`

## Request

- Base URL: `https://longevityworldcup.com`
- URL: `https://longevityworldcup.com/api/events`
- Auth: none required

Returns the complete persisted website-visible Event history as a JSON array, newest `OccurredAt` first.
No authentication, pagination, query filters, or implicit result limit. An empty history returns `[]`.
Equal timestamps use Event-type priority; order within the same timestamp and type is unspecified.
IDs are opaque stable identifiers, not necessarily UUIDs. Records can be corrected or hidden later;
this is a current snapshot of public history, not an immutable append-only log.

**Visibility:** includes profile-only `TestResultAccepted` Events (13). Exclude those from shared
highlights; use them in the referenced athlete's profile history. Social-only and hidden Events
are excluded. Social delivery state, retries, and platform queues are not public fields.
`VisibleOnWebsite` is always true here and does not mean an Event belongs in shared highlights.
The homepage applies additional curation; this feed is not its selected highlights.

**Payloads:** `Text` is stored data, not rendered HTML. Most types use space-separated `key[value]`
tokens. Parse by key, not token position; tolerate unknown keys/types and absent or empty optional
values. Missing values are unavailable, not zero. `slug`, `prev`, and comma-separated `prevs`
refer to public athlete slugs from `/api/data/athletes`; `prev`/`prevs` identify replaced athletes.
Escape free text before rendering it in HTML. Numbers use a decimal point; ages and differences
are in years, `rank`/`place`/`prevPlace` are one-based, and `sats` is integer satoshis (100,000,000 per BTC).
`Relevance` is an editorial weight, not a competition score or sorting key for this feed.

**Artwork:** a CustomEvent can include an optional `Artwork` object with `ImageUrl`, `AltText`, and
`LinkUrl`. It is omitted when no artwork is configured. `ImageUrl` is the attached image;
`LinkUrl` is the announcement's original destination and can point outside Longevity World Cup.
Use `AltText` as the image description. Artwork is separate from the stored `Text` payload.

| Type | Name | Meaning and Text payload |
| --- | --- | --- |
| 0 | General | General announcement; free text. |
| 1 | Joined | Athlete joined; `slug`. |
| 2 | NewRank | Historical Ultimate League placement; `slug`, `rank`, optional `prev`. Not a current live rank. |
| 3 | DonationReceived | Bitcoin donation; `tx` (transaction ID), `sats` (amount). |
| 4 | AthleteCountMilestone | Participation milestone; `athletes` (count). |
| 5 | BadgeAward | Computed badge award; `slug`, `badge` (label), `cat` (league category), `val` (league value, may be empty), `place` (may be empty), optional `solo[1]`, `prev` or `prevs`. Best-improvement badges compare latest with first eligible result. |
| 6 | CustomEvent | Admin-created public announcement; title followed by a blank line and body. Optional markup includes `[bold](text)`, `[strong](text)`, `[label](https://...)`, and `[mention](athlete_slug)`. |
| 7 | SeasonFinalResult | Completed-season placement; `slug`, `season`, `place`, `clock`, `ageDiff` (biological minus chronological age; lower is better). |
| 8 | LongevitymaxxingChallengeResult | Original Challenge award; `challenge`, `pid` (public participant ID), `name`, `place`, `checkedIn` (days), `points`, `days` (duration), optional `slug` and `completed[1]`. Separate from current ongoing Challenge ranks. |
| 9 | BecamePro | Athlete qualified for Pro; `slug`. |
| 10 | BiologicalAgeImproved | Chronologically new personal-best biological age; `slug`, `clock` (`pheno` or `bortz`), `from`, `to` (biological ages). Older backfills create no improvement Event. |
| 11 | CrowdAgeTop10Change | Entry or upward move in the crowd age top 10; `slug`, `place`, `crowdAge`, `crowdCount`, optional `prevPlace` and `prev`. Historical published placement, not live rank. |
| 12 | AgeImprovementTop10Change | Pheno/Bortz improvement top-10 placement; `slug`, `clock`, `place`, `improvement` (latest eligible age minus worst eligible age), `ageReduction` (biological minus chronological age; lower is better), optional `prevPlace` and `prev`. |
| 13 | TestResultAccepted | Profile-only accepted test; `slug`, `date` (ISO laboratory date). Includes partial, non-improving, and backfilled results; one Event per athlete/test date across clocks. |

**Dates:** `OccurredAt` is an ISO 8601 UTC Event timestamp, not response generation time.
For type 13 it is first observed public announcement, while `date` is the laboratory measurement date.
Existing results were silently baselined when tracking began, so older publication dates remain unknown.
Type 10 uses the result date; type 7 uses season close; type 11 uses publication time after any cooldown.
Historical placements and badges do not assert the athlete's current standing.

## Response `200`

Complete website-visible Event history, newest first; includes profile-only accepted results. Property names are case-sensitive.

- PublicEventApiDocument[]
  - `Id` string, nullable, required: Stable opaque Event identifier. Do not assume a UUID format; some IDs are descriptive.
  - `Type` 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13, required: Numeric Event types: 0 = General; 1 = Joined; 2 = NewRank; 3 = DonationReceived; 4 = AthleteCountMilestone; 5 = BadgeAward; 6 = CustomEvent; 7 = SeasonFinalResult; 8 = LongevitymaxxingChallengeResult; 9 = BecamePro; 10 = BiologicalAgeImproved; 11 = CrowdAgeTop10Change; 12 = AgeImprovementTop10Change; 13 = TestResultAccepted. See listEvents for meanings and payload formats. Clients should tolerate future values.
  - `Text` string, nullable, required: Stored payload, not rendered HTML. Most types use key[value] tokens; General uses free text and CustomEvent uses a title, blank line, and body with optional custom markup. Token order is not a contract. Missing or empty tokens are unavailable, not zero. Escape text before displaying it as HTML.
  - `OccurredAt` string, date-time, required: ISO 8601 UTC Event timestamp, not response generation time. Its meaning depends on Type: accepted results use first observed publication; biological-age improvements use the result date; final season results use season close. Older untracked publication dates remain unknown.
  - `Relevance` number, double, required: Editorial highlight weight, not a rank or score. The feed is ordered by time, not this weight.
  - `VisibleOnWebsite` boolean, required: Always true in this public feed. Website-hidden and social-only Events are excluded. True does not imply inclusion in shared highlights: Type 13 belongs only in athlete profile highlights.
  - `Artwork` PublicEventArtworkDocument: Attached public artwork and its destination. All three fields are present when Artwork is included.
    - `ImageUrl` string, required: Absolute HTTPS URL of the attached image.
    - `AltText` string, required: Plain-text image description for accessible rendering.
    - `LinkUrl` string, required: Original HTTPS destination linked by the announcement, which may be outside Longevity World Cup.

## Changes

- **2026-10-12** `e23f1965fd83`: 1 info
  - added the optional property `items/Artwork` to the response with the `200` status
- **2026-09-28** `9e285caa0f39`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/longevityworldcup/apis/longevity-world-cup-public-api/changes/api/events/get.md)

---

[API](https://skmtc.dev/longevityworldcup/apis/longevity-world-cup-public-api.md) - [All operations](https://skmtc.dev/longevityworldcup/apis/longevity-world-cup-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/longevityworldcup/apis/longevity-world-cup-public-api/revisions/e23f1965fd83?raw)
