---
title: "Player activity by band"
method: GET
path: "/{region}/players/activity"
tags: ["Players"]
---

# Player activity by band

`GET /{region}/players/activity`

## Request

- Base URL: `https://unicum.gg/api`
- URL: `https://unicum.gg/api/{region}/players/activity`
- Auth: none required

Whether each band of the region's players is still playing, as a daily series. The histograms on `/players/distribution` count how many accounts reached a level; this counts how many of them turned up, which is the only way to tell a thriving band from a large dormant one. Rates should be read against `observed` (accounts actually read inside the window) rather than against `players`, since an account nobody read is not known to be idle. Recorded hourly and keyed by UTC day, so the newest day is still refining. The series cannot be backfilled: every counter is measured relative to the instant it was read. 404 until the first run. Dates are ISO 8601 strings.

## Path parameters

- `region` 'eu' | 'na' | 'asia', required: Game server region.

## Query parameters

- `window` '24h' | '7d' | '30d': How far back an account counts as active.

## Response `200`

Successful response

- PlayerActivity: Whether each band of a region's players is still playing, and how much.
  - `region` 'eu' | 'na' | 'asia', required: Game server region.
  - `window` '24h' | '7d' | '30d', required: The window every count in the payload was measured over.
  - `minBattles` number, required: Battles an account needs before it counts, the same floor the distribution histograms use so the two describe one population.
  - `metrics` object, required: One series per rating metric, ascending by band, so a reader's chosen metric is served rather than one being picked for them. A band nobody in the region falls into is absent rather than present and empty.
    - `wn7` ActivityBand[], required
      - `band` 'veryBad' | 'bad' | 'belowAvg' | 'average' | 'good' | 'veryGood' | 'super' | 'excellent' | 'top', required: The rating band, as the site colours it.
      - `from` number, nullable, required: The band's lower edge as it stood when the rows were written, null at the scale's open end. Carried rather than recomputed, so a threshold that moves later cannot relabel rows it never measured.
      - `to` number, nullable, required: The band's upper edge, excluded. Null at the open end.
      - `latest` ActivityPoint, required: One day of one band's series.
        - `day` string, required: The UTC day the counters were read on, `YYYY-MM-DD`. Not a day the battles fell in: every window looks backwards from the read.
        - `players` number, required: Accounts in the band, whatever is known about them.
        - `observed` number, required: Accounts read inside the window, and the denominator any activity rate should use. An account nobody read inside the window is not known to be idle, so scoring against every account in the band would measure our refresh cadence rather than the players.
        - `active` number, required: Observed accounts whose last battle falls inside the window.
        - `measured` number, required: Active accounts whose battle count for the window is known, which is 96 to 99 of every hundred. The window's battles are a diff between two stored snapshots, so an account can be known to have played while no pair exists to measure it with.
        - `battles` number, required: Battles the measured accounts played inside the window.
      - `series` ActivityPoint[], required: Ascending by day, oldest first, at most one year. The series starts when recording started and cannot be backfilled: both counters are measured relative to the instant they were read, so a day nobody recorded is a day no later run can fill.
        - `day` string, required: The UTC day the counters were read on, `YYYY-MM-DD`. Not a day the battles fell in: every window looks backwards from the read.
        - `players` number, required: Accounts in the band, whatever is known about them.
        - `observed` number, required: Accounts read inside the window, and the denominator any activity rate should use. An account nobody read inside the window is not known to be idle, so scoring against every account in the band would measure our refresh cadence rather than the players.
        - `active` number, required: Observed accounts whose last battle falls inside the window.
        - `measured` number, required: Active accounts whose battle count for the window is known, which is 96 to 99 of every hundred. The window's battles are a diff between two stored snapshots, so an account can be known to have played while no pair exists to measure it with.
        - `battles` number, required: Battles the measured accounts played inside the window.
    - `wn8` ActivityBand[], required
      - `band` 'veryBad' | 'bad' | 'belowAvg' | 'average' | 'good' | 'veryGood' | 'super' | 'excellent' | 'top', required: The rating band, as the site colours it.
      - `from` number, nullable, required: The band's lower edge as it stood when the rows were written, null at the scale's open end. Carried rather than recomputed, so a threshold that moves later cannot relabel rows it never measured.
      - `to` number, nullable, required: The band's upper edge, excluded. Null at the open end.
      - `latest` ActivityPoint, required: One day of one band's series.
        - `day` string, required: The UTC day the counters were read on, `YYYY-MM-DD`. Not a day the battles fell in: every window looks backwards from the read.
        - `players` number, required: Accounts in the band, whatever is known about them.
        - `observed` number, required: Accounts read inside the window, and the denominator any activity rate should use. An account nobody read inside the window is not known to be idle, so scoring against every account in the band would measure our refresh cadence rather than the players.
        - `active` number, required: Observed accounts whose last battle falls inside the window.
        - `measured` number, required: Active accounts whose battle count for the window is known, which is 96 to 99 of every hundred. The window's battles are a diff between two stored snapshots, so an account can be known to have played while no pair exists to measure it with.
        - `battles` number, required: Battles the measured accounts played inside the window.
      - `series` ActivityPoint[], required: Ascending by day, oldest first, at most one year. The series starts when recording started and cannot be backfilled: both counters are measured relative to the instant they were read, so a day nobody recorded is a day no later run can fill.
        - `day` string, required: The UTC day the counters were read on, `YYYY-MM-DD`. Not a day the battles fell in: every window looks backwards from the read.
        - `players` number, required: Accounts in the band, whatever is known about them.
        - `observed` number, required: Accounts read inside the window, and the denominator any activity rate should use. An account nobody read inside the window is not known to be idle, so scoring against every account in the band would measure our refresh cadence rather than the players.
        - `active` number, required: Observed accounts whose last battle falls inside the window.
        - `measured` number, required: Active accounts whose battle count for the window is known, which is 96 to 99 of every hundred. The window's battles are a diff between two stored snapshots, so an account can be known to have played while no pair exists to measure it with.
        - `battles` number, required: Battles the measured accounts played inside the window.
    - `wnx` ActivityBand[], required
      - `band` 'veryBad' | 'bad' | 'belowAvg' | 'average' | 'good' | 'veryGood' | 'super' | 'excellent' | 'top', required: The rating band, as the site colours it.
      - `from` number, nullable, required: The band's lower edge as it stood when the rows were written, null at the scale's open end. Carried rather than recomputed, so a threshold that moves later cannot relabel rows it never measured.
      - `to` number, nullable, required: The band's upper edge, excluded. Null at the open end.
      - `latest` ActivityPoint, required: One day of one band's series.
        - `day` string, required: The UTC day the counters were read on, `YYYY-MM-DD`. Not a day the battles fell in: every window looks backwards from the read.
        - `players` number, required: Accounts in the band, whatever is known about them.
        - `observed` number, required: Accounts read inside the window, and the denominator any activity rate should use. An account nobody read inside the window is not known to be idle, so scoring against every account in the band would measure our refresh cadence rather than the players.
        - `active` number, required: Observed accounts whose last battle falls inside the window.
        - `measured` number, required: Active accounts whose battle count for the window is known, which is 96 to 99 of every hundred. The window's battles are a diff between two stored snapshots, so an account can be known to have played while no pair exists to measure it with.
        - `battles` number, required: Battles the measured accounts played inside the window.
      - `series` ActivityPoint[], required: Ascending by day, oldest first, at most one year. The series starts when recording started and cannot be backfilled: both counters are measured relative to the instant they were read, so a day nobody recorded is a day no later run can fill.
        - `day` string, required: The UTC day the counters were read on, `YYYY-MM-DD`. Not a day the battles fell in: every window looks backwards from the read.
        - `players` number, required: Accounts in the band, whatever is known about them.
        - `observed` number, required: Accounts read inside the window, and the denominator any activity rate should use. An account nobody read inside the window is not known to be idle, so scoring against every account in the band would measure our refresh cadence rather than the players.
        - `active` number, required: Observed accounts whose last battle falls inside the window.
        - `measured` number, required: Active accounts whose battle count for the window is known, which is 96 to 99 of every hundred. The window's battles are a diff between two stored snapshots, so an account can be known to have played while no pair exists to measure it with.
        - `battles` number, required: Battles the measured accounts played inside the window.
  - `computedAt` string, date-time, nullable, required: When the newest row was written.

---

[API](https://skmtc.dev/unicum/apis/unicum-gg-api.md) · [All operations](https://skmtc.dev/unicum/apis/unicum-gg-api/llms.txt) · [OpenAPI document](https://skmtc.dev/unicum/apis/unicum-gg-api/revisions/7a7d79a26001?raw)
