Create an API Key for your Organization

You need to be an Owner of your Organization. Go to the org Page and create an API Key:

https://auth.wejam.ai/org/api_keys/

image.png

API Documentation - data-export Endpoint

Swagger: https://api.wejam.ai/docs#/data-export

Redoc: https://redocly.github.io/redoc/?url=https://api.wejam.ai/docs-json#tag/data-export/operation/DataExportController_findUsers_v1

Example Use: Get the most Active User by Sessions

Create file most_active_user.py

# /// script
# dependencies = [
#   "requests<3",
#   "pandas",
# ]
# ///

from typing import Any

import pandas as pd
import requests

API_KEY: str = "YOUR_JAM_API_KEY"
BASE_URL: str = "<https://api.wejam.ai/api/v1/data-exports>"
HEADERS: dict[str, str] = {"accept": "application/json", "X-API-KEY": API_KEY}

def fetch_paginated(endpoint: str) -> list[dict[str, Any]]:
    page: int = 1
    results: list[dict[str, Any]] = []

    while True:
        url: str = f"{BASE_URL}/{endpoint}?page={page}&limit=100"
        response: requests.Response = requests.get(url, headers=HEADERS, timeout=10)
        response.raise_for_status()
        data: dict[str, Any] = response.json()

        results.extend(data["data"])
        if not data["meta"].get("hasNext"):
            break
        page += 1

    return results

def main() -> None:
    users_data: list[dict[str, Any]] = fetch_paginated("users")
    sessions_data: list[dict[str, Any]] = fetch_paginated("sessions")

    # Convert to DataFrames
    df_sessions: pd.DataFrame = pd.DataFrame(sessions_data)
    df_users: pd.DataFrame = pd.DataFrame(users_data)

    # Count sessions per user
    session_counts: pd.DataFrame = (
        df_sessions["learnerUserId"].value_counts().rename_axis("userId").reset_index(name="sessionCount")
    )

    # Join with users
    df_users["userId"] = df_users["id"]
    df_merged: pd.DataFrame = session_counts.merge(df_users, on="userId", how="left")

    # Get most active user
    most_active_user: pd.Series = df_merged.sort_values(by="sessionCount", ascending=False).iloc[0]

    print("Most Active User:")
    print(f"Name:     {most_active_user['firstName']} {most_active_user['lastName']}")
    print(f"Email:    {most_active_user['email']}")
    print(f"Sessions: {most_active_user['sessionCount']}")

if __name__ == "__main__":
    main()

Execute using uv (https://docs.astral.sh/uv/)

uv run most_active_user.py

image.png