Authentication
An operator issues a key under Settings, Integrations. Send
it as
X-Quven-Key, or as Authorization: Bearer. Every route is a GET: a key changes nothing and cannot
issue another.
Read-only reporting for third-party software: what this installation is, which libraries it serves, what it holds, and what is playing right now.
The key is used by this page only, to call the address above. It is never sent to quven.tv.
An operator issues a key under Settings, Integrations. Send
it as
X-Quven-Key, or as Authorization: Bearer. Every route is a GET: a key changes nothing and cannot
issue another.
The API belongs to a Quven server, not to Quven Cloud.
Requests go to the address of the server that issued the
key; quven.tv serves this reference and no API
of its own.
Every read carries a weak ETag; send it back as
If-None-Match for a 304 with no body.
Sessions differ every time, since the answer carries the instant
it was taken. A key is allowed 120 requests a minute, counted per key.
GET /health/live answers 200 with no
key and is what a monitor should poll. Start time is in the reads:
startedUtc, and quven_server_start_time_seconds
in the metrics.
/api/integration/v1/server Return this installation's identity and version
| Field | Type |
|---|---|
apiVersion | int32 |
name | string |
serverId | uuid |
startedUtc | date-time |
version | string |
/api/integration/v1/libraries Return the libraries this installation serves
| Field | Type |
|---|---|
items | IntegrationLibraryDto[] |
/api/integration/v1/statistics Return catalogue counts and storage size
| Field | Type |
|---|---|
episodeCount | int64 |
fileCount | int64 |
movieCount | int64 |
showCount | int64 |
totalStorageBytes | int64 |
/api/integration/v1/sessions Return the playback sessions in progress
| Field | Type |
|---|---|
items | IntegrationSessionDto[] |
observedUtc | date-time |
refreshAfterSeconds | int32 |
/api/integration/v1/history Return finished playbacks, most recent first
| Name | Type |
|---|---|
limit | int32 · nullable |
offset | int32 · nullable |
| Field | Type |
|---|---|
items | IntegrationHistoryEntryDto[] |
limit | int32 |
offset | int32 |
totalCount | int32 |
/api/integration/v1/metrics text/plain Return the same counts in Prometheus exposition format
Answers text/plain rather than a JSON object.
| Field | Type |
|---|---|
endedUtc | date-time |
kind | string |
mediaId | uuid |
positionSeconds | int64 |
posterUrl | string · nullable |
startedUtc | date-time |
subtitle | string · nullable |
title | string |
watchedToEnd | boolean |
| Field | Type |
|---|---|
items | IntegrationHistoryEntryDto[] |
limit | int32 |
offset | int32 |
totalCount | int32 |
| Field | Type |
|---|---|
fileCount | int64 |
id | uuid |
kind | string |
lastScannedUtc | date-time · nullable |
name | string |
| Field | Type |
|---|---|
items | IntegrationLibraryDto[] |
| Field | Type |
|---|---|
apiVersion | int32 |
name | string |
serverId | uuid |
startedUtc | date-time |
version | string |
| Field | Type |
|---|---|
durationSeconds | int64 · nullable |
episodeNumber | int32 · nullable |
isTranscoding | boolean |
kind | string |
mediaId | uuid |
positionSeconds | int64 |
posterUrl | string · nullable |
seasonNumber | int32 · nullable |
seriesTitle | string · nullable |
title | string |
| Field | Type |
|---|---|
items | IntegrationSessionDto[] |
observedUtc | date-time |
refreshAfterSeconds | int32 |
| Field | Type |
|---|---|
episodeCount | int64 |
fileCount | int64 |
movieCount | int64 |
showCount | int64 |
totalStorageBytes | int64 |