Feed API
O que um módulo do cliente envia e recebe. Toda chamada, menos a primeira, leva o token do pareamento:
Authorization: Bearer <token>Endereço base: http://127.0.0.1:8090/api/v1. A descrição para máquinas está em openapi.json.
POST/api/v1/pair
Ask for a pairing code Call it once, when the module has no token yet. Show the code and the link in the game.
Não precisa de token.
Corpo da requisição
| Campo | Tipo | Descrição |
|---|---|---|
characterobrigatório | string | The character the client playsaté 30 caracteres |
serverobrigatório | string | Server slug or name, for example orionaté 60 caracteres |
platform | string | Operating system, for example Windows 11até 40 caracteres |
module | string | Module name and versionaté 40 caracteres |
Resposta
| Campo | Tipo | Descrição |
|---|---|---|
codeobrigatório | string | Show it to the player. It is valid for 15 minutes |
urlobrigatório | string | Open it to start a guest dashboard, or to add the client to an account |
tokenobrigatório | string | The client's secret. Store it; it works once the code is used |
expiresAtobrigatório | integer |
POST/api/v1/status
Send the character's state Every 5 to 10 seconds while the client runs. The reply says when to send the next capture.
Corpo da requisição
| Campo | Tipo | Descrição |
|---|---|---|
schema | "vw.status/1" | Payload schema and version |
moduleobrigatório | string | Name and version of the sending module, for example voidwatch-feed/0.3.0até 40 caracteres |
onlineobrigatório | boolean | The character is logged in |
characterobrigatório | Character | |
character.nameobrigatório | string | Character nameaté 30 caracteres |
character.vocation | string | Vocation, for example Elite Knightaté 30 caracteres |
character.levelobrigatório | integer | ≥ 1, ≤ 5000 |
character.expobrigatório | integer | Total experience points≥ 0 |
posobrigatório | Position | |
pos.xobrigatório | integer | Map x≥ 0, ≤ 65535 |
pos.yobrigatório | integer | Map y≥ 0, ≤ 65535 |
pos.zobrigatório | integer | Floor, 0 to 15; 7 is ground level≥ 0, ≤ 15 |
cap | integer | Free capacity, in oz≥ 0 |
stamina | integer | Stamina, in minutes≥ 0, ≤ 2520 |
expPerHour | integer | Exp per hour as the client measures it≥ 0 |
route | string | The loaded cavebot routeaté 80 caracteres |
routeOn | boolean | The cavebot is running |
label | string | The route label the bot is ataté 40 caracteres |
routes | string[] | Every route the bot can loadaté 100 itens |
supplies | Counted[] | até 30 itens |
supplies[].nameobrigatório | string | Item or creature name, as the game writes itaté 60 caracteres |
supplies[].haveobrigatório | integer | How many the character has now≥ 0 |
supplies[].wantobrigatório | integer | How many the bot keeps in stock, or the task goal≥ 0 |
tasks | Counted[] | até 10 itens |
tasks[].nameobrigatório | string | Item or creature name, as the game writes itaté 60 caracteres |
tasks[].haveobrigatório | integer | How many the character has now≥ 0 |
tasks[].wantobrigatório | integer | How many the bot keeps in stock, or the task goal≥ 0 |
loot | LootItem[] | até 200 itens |
loot[].nameobrigatório | string | Item nameaté 60 caracteres |
loot[].countobrigatório | integer | Looted since the session started≥ 0 |
loot[].sell | integer | NPC price per item, if the module knows it. The server fills it in otherwise≥ 0 |
lootHours | number | Hours since the loot counter started≥ 0 |
skulls | Skull[] | Skulled players in viewaté 20 itens |
skulls[].nameobrigatório | string | Player nameaté 30 caracteres |
skulls[].skullobrigatório | "white" | "red" | "black" | "yellow" | "green" | "orange" | Skull colour |
blessed | boolean | Only on servers with blessings |
redemptionLeft | integer | Only on servers with redemption≥ 0 |
Resposta
| Campo | Tipo | Descrição |
|---|---|---|
okobrigatório | boolean | |
statusEveryobrigatório | integer | Seconds until the next status: 2 while someone watches the character, 30 otherwise |
captureEveryobrigatório | integer | Seconds until the next capture: short while someone watches or an alert fired |
commandsobrigatório | integer | Commands waiting; fetch them from /api/v1/commands |
settings | Settings | The player's module settings, for example minimap: true |
GET/api/v1/wait
Wait for a change A long poll: the answer comes the moment someone opens the character on the dashboard, an alert fires or a command is sent, or after `timeout` seconds (at most 25). Keep one open while the client runs, so it switches to the fast pace within a second and costs no requests while nothing happens.
Resposta
| Campo | Tipo | Descrição |
|---|---|---|
wakeobrigatório | boolean | True when something changed before the timeout |
statusEveryobrigatório | integer | |
captureEveryobrigatório | integer | |
commandsobrigatório | integer |
POST/api/v1/minimap
Send the minimap file The client's minimap<version>.otmm, as it is on disk, at most 40 MB. It becomes the player's own map for the server. Send it when the file changed and the reply's settings say minimap: true.
Corpo da requisição
application/octet-stream
Resposta
any
POST/api/v1/capture
Send a screenshot The game window as JPEG or PNG, at most 2 MB. Send one when /status says so.
Corpo da requisição
image/jpeg, image/png
Resposta
any
GET/api/v1/commands
Fetch waiting commands Commands the player sent from the dashboard, oldest first. Fetching marks them as sent.
Resposta
Command[]
POST/api/v1/commands/{cid}/result
Report how a command went
Corpo da requisição
| Campo | Tipo | Descrição |
|---|---|---|
okobrigatório | boolean | |
message | string | Shown in the command logaté 200 caracteres |
Resposta
any
Erros
Dados fora do esquema recebem status 422 com todos os problemas listados:
{
"error": "invalid payload",
"problems": [
{
"field": "pos.z",
"message": "Input should be less than or equal to 15"
}
],
"schema": "/developers/schema"
}Status 401 significa que o token é desconhecido ou que o jogador revogou o cliente. Pareie de novo para ter um novo.