Skip to content

Advanced data access

This page covers programmatic and low-level ways to get at your data: automated exports via the REST API, streaming JSONL, full database backups, and offline analysis with uproot.read. If you just want to download and analyze your data, start with Exporting data.

Export via the REST API

Use the Admin REST API for programmatic access. All endpoints require Bearer token authentication.

Downloading the briefcase

GET /admin/api/v1/sessions/{sname}/data/export/ returns the same ZIP briefcase as the admin interface's Download data page:

curl -OJ -H "Authorization: Bearer YOUR_TOKEN" \
  "https://your-server.com/admin/api/v1/sessions/mysession/data/export/"

(-OJ saves the file under the name suggested by the server, e.g. mysession_2026-07-04_1412.zip.)

Query parameters:

Parameter Values Default Description
filetype csv, jsonl csv File type used inside the briefcase
gvar field names (repeatable) Adds a grouped latest format (e.g., latest_by_round/)
filters true, false true Apply reasonable filters

For example, a JSONL briefcase with an extra format grouped by app and round:

curl -OJ -H "Authorization: Bearer YOUR_TOKEN" \
  "https://your-server.com/admin/api/v1/sessions/mysession/data/export/?filetype=jsonl&gvar=app&gvar=round"

Note

The uproot api CLI command prints responses as text, so it is not suited to binary downloads like the briefcase — use curl (or any HTTP client) for this endpoint.

Streaming JSONL

GET /admin/api/v1/sessions/{sname}/data/jsonl/ streams a single format as JSONL — no ZIP, no splitting by storage kind. This is useful for piping data directly into other tools, or when sessions are large:

# Raw event log (default)
uproot api sessions/mysession/data/jsonl > mysession.jsonl

# Latest state, with filters
curl -H "Authorization: Bearer YOUR_TOKEN" \
  "https://your-server.com/admin/api/v1/sessions/mysession/data/jsonl/?format=latest&filters=true"

Query parameters:

Parameter Values Default Description
format ultralong, sparse, latest ultralong Export format
gvar field names (repeatable) Group-by variables (for latest)
filters true, false false Apply reasonable filters

Database dumps

For a complete backup of all data, use the dump/restore commands:

# Dump the entire database to a file
uproot dump --file backup.bin

# Restore from a dump
uproot restore --file backup.bin

You can also download a dump from the admin interface at /admin/dump/.

Note

Database dumps contain all sessions and all data. Use the briefcase or JSONL endpoints for per-session exports.

Offline analysis with uproot.read

For analysis in Python (e.g., in a Jupyter notebook), you can open an uproot.sqlite3 database file directly and navigate it using the same Storage objects the server uses:

from uproot.read import read

db = read("uproot.sqlite3")

for session in db.sessions:
    for group in session.groups:
        for player in group.players:
            with player:
                print(player.name, player.label, player.payoff)

db.close()

The Database object supports context managers:

with read("uproot.sqlite3") as db:
    session = db.session("my_session")
    with session:
        for player in session.players:
            with player:
                print(player.choice)

Plain-row helpers

For analysis scripts that need regular dictionaries rather than live Storage objects, use the plain-row methods. Each returns a list of dictionaries with identifier columns plus any extra fields you request. Missing fields become None.

with read("uproot.sqlite3") as db:
    players = db.player_rows(["label", "role", "payoff"])
    memberships = db.membership_rows()
Method Identifier columns Extra fields
db.session_rows(fields) session Yes
db.group_rows(fields) session, group Yes
db.player_rows(fields) session, uname Yes
db.membership_rows() session, group, uname, position No

To grab all four tables at once, use snapshot:

with read("uproot.sqlite3") as db:
    snap = db.snapshot(
        session_fields=["sid"],
        group_fields=["round"],
        player_fields=["label", "role", "payoff"],
    )

print(snap.sessions)      # list of dicts
print(snap.groups)
print(snap.players)
print(snap.memberships)
print(snap.as_dict())      # single dict with all four tables

Database API

Method/Property Description
db.sessions All sessions in the database
db.session(sname) Get a session by name
db.group(sname, gname) Get a group by session and group name
db.player(sname, uname) Get a player by session and username
db.session_rows(fields) Plain dictionaries, one per session
db.group_rows(fields) Plain dictionaries, one per group
db.player_rows(fields) Plain dictionaries, one per player
db.membership_rows() Plain dictionaries, one per group membership
db.snapshot(...) All four plain-row tables as a Snapshot
db.close() Close the database

Note

uproot.read gives you the same Storage objects used at runtime—you can access player.group, player.session, group.players, and all virtual fields. Remember to use with player: (or with session:, etc.) before reading attributes. The plain-row helpers handle context management internally.

Summary

Method Use case
ZIP briefcase Per-session data for analysis (admin UI or API)
Streaming JSONL endpoint Piping one format into other tools
uproot.read Offline analysis in Python/Jupyter
uproot dump Full database backup