Data API/Game Data: Difference between revisions
Publish from docs/data-api.md |
No edit summary |
||
| (One intermediate revision by the same user not shown) | |||
| Line 7: | Line 7: | ||
<pre>{ | <pre>{ | ||
schemaVersion: 1 | schemaVersion: 1 | ||
contentHash: string // SHA-256 of JSON.stringify( | contentHash: string // SHA-256 of JSON.stringify(all fields except contentHash) | ||
items: Array<ItemDefinition & { presentation: ItemPresentation }> // raster imageUrl | items: Array<ItemDefinition & { presentation: ItemPresentation }> // raster imageUrl | ||
specials?: SpecialDefinition[] // present on servers supporting Special references | |||
icons: Record<string, string> // emoji/token -> raster image URL | |||
values: Record<string, { | values: Record<string, { | ||
value: string | number | value: string | number | ||
| Line 20: | Line 22: | ||
<code><nowiki>ItemDefinition</nowiki></code> includes the <code><nowiki>misc/itemData</nowiki></code> fields below: identity, base worth (<code><nowiki>cost</nowiki></code>, BC), attributes/restrictions, recipe, reverse crafting uses, loot pools, and optional crop, food, weapon, cooldown and boost properties. All durations are milliseconds before display formatting. These are base definitions, not player inventory, player-adjusted outcomes, or market prices. | <code><nowiki>ItemDefinition</nowiki></code> includes the <code><nowiki>misc/itemData</nowiki></code> fields below: identity, base worth (<code><nowiki>cost</nowiki></code>, BC), attributes/restrictions, recipe, reverse crafting uses, loot pools, and optional crop, food, weapon, cooldown and boost properties. All durations are milliseconds before display formatting. These are base definitions, not player inventory, player-adjusted outcomes, or market prices. | ||
<code><nowiki>specials</nowiki></code> contains public type definitions from the same catalog and descriptions used by the Special modal. It never includes owned instances, player IDs or expiry dates. Types are stable keys; optional attributes describe variants rather than an individual player's copy. | |||
<pre>interface SpecialDefinition { | |||
type: string | |||
name: string | |||
emoji: string | |||
imageUrl: string // current game artwork, or Noto Emoji PNG | |||
description: string | |||
multiUse: boolean | |||
globalBoost: boolean | |||
selfOnlyDescription: string | null | |||
cooldown: number | null // milliseconds; null means no type-wide timed cooldown | |||
variants: Record<string, string[]> // supported action/species/skin/aura values | |||
storeOffers: Array<{ | |||
key: string | |||
spCost: number | |||
attributes: Record<string, string | boolean> | |||
}> | |||
}</pre> | |||
An empty <code><nowiki>specials</nowiki></code> collection explicitly means no current Specials. An omitted field denotes an older server version and must not be interpreted as a removal. Store offers describe the public catalog, not a particular profile's purchase eligibility. A null cooldown does not imply unrestricted use: active-effect caps, target eligibility and profile rules still apply. | |||
<code><nowiki>presentation</nowiki></code> adds the player-independent derived information used by the Item modal. Raw item fields remain available. The game computes tiers, probabilities, odds and usage thresholds with its shared gameplay/display helpers; consumers should format these values rather than reimplement the calculations. | <code><nowiki>presentation</nowiki></code> adds the player-independent derived information used by the Item modal. Raw item fields remain available. The game computes tiers, probabilities, odds and usage thresholds with its shared gameplay/display helpers; consumers should format these values rather than reimplement the calculations. | ||
| Line 30: | Line 54: | ||
label: string | label: string | ||
percent: number // 0..100, before display rounding | percent: number // 0..100, before display rounding | ||
emoji: string | null // action symbol; containers use their item artwork | |||
}> | }> | ||
loot: Array<{ | loot: Array<{ | ||
| Line 51: | Line 76: | ||
Boost tiers are distinct from pet-food tiers. Usage thresholds identify the minimum bay number, purchase count, upgrade tier or level; research has no numeric threshold. Loot probabilities describe a draw within that pool, not the chance that an action triggers a rare drop or the number of draws when a container opens. | Boost tiers are distinct from pet-food tiers. Usage thresholds identify the minimum bay number, purchase count, upgrade tier or level; research has no numeric threshold. Loot probabilities describe a draw within that pool, not the chance that an action triggers a rare drop or the number of draws when a container opens. | ||
<code><nowiki>icons</nowiki></code> resolves usage and loot-source symbols, plus supplementary infobox symbols, to image URLs. Standard emoji use pinned Noto Emoji PNGs at 128px; custom game emoji retain their game artwork. Consumers can mirror these assets rather than depending on system emoji fonts or calculating image URLs themselves. | |||
Value keys are qualified manual paths, with <code><nowiki>/</nowiki></code> replaced by <code><nowiki>.</nowiki></code>, plus the placeholder name; for example <code><nowiki>farm.cropsDieTime</nowiki></code> and <code><nowiki>items.market.unlockRequirement</nowiki></code>. Markdown values are generated by the game and must be escaped/converted before embedding into another markup language. Tables currently include <code><nowiki>crops</nowiki></code>, <code><nowiki>fertilizers</nowiki></code>, <code><nowiki>poker</nowiki></code>, <code><nowiki>shop</nowiki></code>, <code><nowiki>perks</nowiki></code> and <code><nowiki>ranks</nowiki></code>. | Value keys are qualified manual paths, with <code><nowiki>/</nowiki></code> replaced by <code><nowiki>.</nowiki></code>, plus the placeholder name; for example <code><nowiki>farm.cropsDieTime</nowiki></code> and <code><nowiki>items.market.unlockRequirement</nowiki></code>. Markdown values are generated by the game and must be escaped/converted before embedding into another markup language. Tables currently include <code><nowiki>crops</nowiki></code>, <code><nowiki>fertilizers</nowiki></code>, <code><nowiki>poker</nowiki></code>, <code><nowiki>shop</nowiki></code>, <code><nowiki>perks</nowiki></code> and <code><nowiki>ranks</nowiki></code>. | ||
Latest revision as of 22:56, 5 November 2026
GET /api/reference
[edit | edit source]Public, read-only reference definitions from the running server. This is a plain GET, independent of POST /api/data, with no API key or player context.
{
schemaVersion: 1
contentHash: string // SHA-256 of JSON.stringify(all fields except contentHash)
items: Array<ItemDefinition & { presentation: ItemPresentation }> // raster imageUrl
specials?: SpecialDefinition[] // present on servers supporting Special references
icons: Record<string, string> // emoji/token -> raster image URL
values: Record<string, {
value: string | number
format: "number" | "text" | "duration" | "markdown"
}>
tables: Record<string, {
columns: string[]
rows: Array<Array<string | number>>
}>
}
ItemDefinition includes the misc/itemData fields below: identity, base worth (cost, BC), attributes/restrictions, recipe, reverse crafting uses, loot pools, and optional crop, food, weapon, cooldown and boost properties. All durations are milliseconds before display formatting. These are base definitions, not player inventory, player-adjusted outcomes, or market prices.
specials contains public type definitions from the same catalog and descriptions used by the Special modal. It never includes owned instances, player IDs or expiry dates. Types are stable keys; optional attributes describe variants rather than an individual player's copy.
interface SpecialDefinition {
type: string
name: string
emoji: string
imageUrl: string // current game artwork, or Noto Emoji PNG
description: string
multiUse: boolean
globalBoost: boolean
selfOnlyDescription: string | null
cooldown: number | null // milliseconds; null means no type-wide timed cooldown
variants: Record<string, string[]> // supported action/species/skin/aura values
storeOffers: Array<{
key: string
spCost: number
attributes: Record<string, string | boolean>
}>
}
An empty specials collection explicitly means no current Specials. An omitted field denotes an older server version and must not be interpreted as a removal. Store offers describe the public catalog, not a particular profile's purchase eligibility. A null cooldown does not imply unrestricted use: active-effect caps, target eligibility and profile rules still apply.
presentation adds the player-independent derived information used by the Item modal. Raw item fields remain available. The game computes tiers, probabilities, odds and usage thresholds with its shared gameplay/display helpers; consumers should format these values rather than reimplement the calculations.
interface ItemPresentation {
boostTier: { tier: number; category: string | null } | null
lootSources: Array<{
source: string
itemId: number | null // source container, or Lunar Shard for rare loot
label: string
percent: number // 0..100, before display rounding
emoji: string | null // action symbol; containers use their item artwork
}>
loot: Array<{
itemId: number
probability: number // 0..1 per draw; empty list for non-containers
odds: string // e.g. "1 in 12"
}>
uses: {
upgrades: ItemUsage[]
purchases: ItemUsage[]
research: ItemUsage[]
}
}
interface ItemUsage {
label: string
category: "tools" | "farm" | "pets" | "relay"
emoji: string
threshold: number | null
thresholdKind: "bay" | "count" | "tier" | "level" | "none"
}
Boost tiers are distinct from pet-food tiers. Usage thresholds identify the minimum bay number, purchase count, upgrade tier or level; research has no numeric threshold. Loot probabilities describe a draw within that pool, not the chance that an action triggers a rare drop or the number of draws when a container opens.
icons resolves usage and loot-source symbols, plus supplementary infobox symbols, to image URLs. Standard emoji use pinned Noto Emoji PNGs at 128px; custom game emoji retain their game artwork. Consumers can mirror these assets rather than depending on system emoji fonts or calculating image URLs themselves.
Value keys are qualified manual paths, with / replaced by ., plus the placeholder name; for example farm.cropsDieTime and items.market.unlockRequirement. Markdown values are generated by the game and must be escaped/converted before embedding into another markup language. Tables currently include crops, fertilizers, poker, shop, perks and ranks.
The response supplies an ETag and Cache-Control: public, max-age=300. If-None-Match supports 304 Not Modified. The hash describes content, not a release number or publication time. Consumers must accept changed hashes in both directions, since a production rollback may restore an earlier snapshot.
misc/itemData
[edit | edit source]Returns static data for all game items.
Request
{ "type": "misc/itemData" }
Response
Array<{
id: number
imageUrl: string
recipe: Array<[idName: string, amount: number]>
// plus all other item fields (name, emoji, idName, etc.)
}>
misc/gameState
[edit | edit source]Returns the current live game state including active bosses, the ball pit, global action boosts, and giveaways. Giveaways are included only for Main profiles; profiles without direct-transfer access receive an empty activeGiveaways array.
Request
{ "type": "misc/gameState" }
Response
{
globalActionBoosts: Array<{
type: "baseGlobalActionBoost" | "flexibleGlobalActionBoost"
user: User
action: "fish" | "hunt" | "explore" | "mine" | "work"
multiplier: number
duration: number // ms
endTime: number // Unix ms
}>
lastGlobalActionCooldownResetTime: number // Unix ms
activeBossStatus: {
lastUpdated: number
data: {
bossId: string
startTime: number
initialHealth: number
weaknessItemIds: number[]
numAttackingUsers: number
damageDealt: number
nextWeakpointRevealAt: number | null
}
} | null
ballPitStatus: {
type: "black" | "purple" | "blue" | "orange" | "yellow" | "green"
balls: number
}
activeGiveaways: Array<{
id: number
ownerBcId: number
message: string
endDate: string // ISO 8601
numWinners: number
entrantBcIds: number[]
flatInventory: Inventory
}>
}
misc/userBallsOwned
[edit | edit source]Returns the number of balls the authenticated user (identified by the API key) currently has in the ball pit. No id parameter is accepted; the result is always for the key holder.
Request
{ "type": "misc/userBallsOwned" }
Response — number (non-negative integer)
stats/questSeasons
[edit | edit source]Returns archived quest seasons. The live ongoing season is excluded.
Request
{ "type": "stats/questSeasons" }
Response
interface QuestSeasonsResponse {
endedSeasons: Array<{
id: number
name: string
emoji: string
endedAt: number // Unix ms
}>
}
misc/bossFactionStats
[edit | edit source]Returns active faction combat contribution stats for the current boss fight. Returns null if no boss is active or the user is not in a faction.
Request
{ "type": "misc/bossFactionStats" }
Response
interface BossFactionStatsResponse {
factionPresenceMemberCount: number
factionMultiplier: number
} | null
Generated from the Bconomy source documentation. Edits made on the wiki are overwritten on the next publish; ask the developers to change the source.