Subscriptions
/api/app/v1/subscriptionsTokenThe library, as a delta or a full list.
Three kinds can be subscribed to, and the closed list is load-bearing: asset,
mod, collection. A server is not something you install; an article is not
something a device holds a copy of.
Syncing with a revision watermark
The response carries a monotonic revision, which the app sends back on its next poll. The server answers with everything changed since.
That is what lets a device poll every minute without transferring the whole library, and what makes a subscription created in the browser show up on the desktop within one poll.
A response can also declare itself full rather than a delta, which tells the app it may drop anything it holds that is not in the list.
A subscription can point at nothing installable
The file a subscription resolves to is nullable, because a subscription outlives the release it was made against: an item whose only release is later hidden still has a live subscription, and the app has to render it as “nothing to install yet” rather than fail to parse the whole list.
/api/app/v1/subscriptionsTokenSubscribe or unsubscribe.
/api/app/v1/subscriptions/prefsTokenPer-subscription preferences.
Subscribing to a collection creates item subscriptions on your behalf; those
remember which collection created them, so cleanup is correct. An item can opt
out of one-click installs entirely with subDisabled — see
Subscriptions.
Installs
/api/app/v1/installsTokenThe sandboxes on this account’s machines.
/api/app/v1/installs/itemsTokenAdd or remove items from an install.
An install is a game, a set of deployed items, and launch options.
Deploy strategy
How the app puts a sandbox’s files in front of the game:
| Strategy | |
|---|---|
direct |
Copies into the game folder, backing up whatever it displaced |
| Link strategies | Leave the game folder made of pointers |
usvfs |
Runtime API hooking — declared, not yet implemented |
The server stores this as a string and validates it against a list, but a value it does not recognise is not fatal to the app — it falls back to its own default. That is what lets a new strategy ship in the app before it ships here.
Environment
client, server or shared. Not decoration: it decides which mods are
offered for the sandbox and which of the game’s own options are shown. A
dedicated server and a player’s game are the same files arranged differently,
and a manager that cannot tell them apart offers everybody both halves of every
list.
shared accepts both, which is what a mod’s ALL environment means.
Launch options
Every field optional, every one with a “leave it alone” meaning. The overwhelmingly common install overrides nothing, and a launcher that silently forces 1920×1080 on somebody who never asked is worse than one with no settings at all.
What each key means for a given game is decided by that game’s launch plugin, not by this API.
Downloads
/api/app/v1/downloadsTokenWhat each of this user’s devices is downloading.
Somebody starts a 40 GB modpack on their desktop and then wants to know, from their phone, whether it has finished. There is no other way to answer that: the app is the only thing that knows, and it is not reachable from outside the machine it runs on. So it reports, and this holds the last thing it said.
This is a display snapshot, not a queue
It never drives a download. The queue lives on the device and is the authority for everything; this is overwritten on every report and safe to lose.
Note what a download row does not carry: no URL, no filesystem path, no device identifier beyond the user’s own label for the machine. A path would put somebody’s username and drive layout into a row.