# Formats & units

## Summary version
Read APIs return schema_version: 1. This describes the web summary, not the original archive format. It does not recalculate historical metrics. Stop parsing unknown versions and update the client.
## Field contract
| Field | Type | Meaning |
| --- | --- | --- |
| id | string | Activity UUID |
| title | string | Original title |
| day | string | Stored activity date, YYYY-MM-DD |
| started_ms | integer | UTC Unix milliseconds |
| sport | string | Sport identifier |
| distance_meters | integer or null | Stored distance in metres |
| total_seconds | integer | Stored total duration in seconds |
| source | string | Original activity source |

Missing distance stays null, never zero. An observed zero remains 0. Indoor activities may have no running distance. Display conversions never change exported values.
## Pagination and consistency
Results default to started_ms descending, then id descending. sort accepts date, distance or duration; order accepts asc or desc (defaults: date / desc). Ties use started_ms then id descending. Missing distances sort last in either direction; observed zero participates normally. limit is 1–100, default 25. next_offset is null at the end. Pages reflect current data rather than a frozen snapshot: sync and deletion can shift subsequent pages. Deduplicate by ID during long traversals.

Filters apply before pagination; total counts all matching activities. from / to are inclusive and q is a case-insensitive title substring. sport accepts running, walking, trail_running, hiking, cycling, stair_climber or unknown. source accepts guidance, recording, imported, csv or manual. Lists and exports accept the same filters and sorting; exports reject limit / offset.
## Original data
This API excludes GPS points, sensor events and photos. A summary cannot recreate the full activity track or sensor readings.
