Skip to main content

ReadingByDeviceDto

Totals for one device, most-read first.

deviceIdstringrequired
deviceNamestring | nullnullable

Friendly name where the client sent one, or the API key's label.

Example: Ash's iPhone
duration objectrequired

Reading time split by how it was arrived at.

Deliberately two numbers rather than one. Time from the compatibility surfaces is reconstructed from the gaps between their writes: it undercounts and cannot see reading done from a downloaded book at all. Presenting a combined figure is fine; hiding that part of it is an estimate is not.

inferredMsinteger<int64>required

Milliseconds reconstructed server-side. An underestimate.

Example: 900000
measuredMsinteger<int64>required

Milliseconds reported by a client that measured its own reading.

Example: 5400000
totalMsinteger<int64>required

Convenience sum of the two, so clients do not each reimplement it.

Example: 6300000
lastReadAtstring<date-time>required
pagesReadinteger<int64>required
sessionsinteger<int64>required
ReadingByDeviceDto
{
"deviceId": "string",
"deviceName": "Ash's iPhone",
"duration": {
"inferredMs": 900000,
"measuredMs": 5400000,
"totalMs": 6300000
},
"lastReadAt": "2024-07-29T15:51:28.071Z",
"pagesRead": 0,
"sessions": 0
}