openapi: "3.1.0" info: title: "Zee Verse API" version: "2.0.0" description: "Zee Verse API Documentation" components: responses: Forbidden: description: "Access token is missing or invalid" Accepted: description: "The request was accepted" Created: description: "The resource has been created" NotFound: description: "The resource has been created" NotAcceptable: description: "The resource has been created" securitySchemes: jwtAuth: type: "http" scheme: "bearer" optionalJwtAuth: type: "http" scheme: "bearer" serviceAuth: type: "apiKey" name: "ServiceToken" in: "header" schemas: StatefulObject: properties: id: type: "string" state: type: "integer" description: "Current state of the object" finalState: type: "integer" description: "Final state of the object" type: "object" required: - "id" - "state" - "finalState" StoredNpc: properties: id: type: "string" enabled: type: "boolean" location: type: "string" type: "object" required: - "id" - "enabled" - "location" MintItem: properties: itemId: pattern: "^(2\\d{9}|100|400)$" type: "string" amount: maximum: 2147483647 type: "integer" minimum: 1 type: "object" required: - "itemId" - "amount" PrepareItemClaimRequest: properties: id: format: "uuid" type: "string" description: "Retry the same request with the same id to avoid deducting inventory twice." chainId: minimum: 1 type: "integer" wallet: type: "string" items: items: $ref: "#/components/schemas/MintItem" type: "array" uniqueItems: true maxItems: 50 description: "Items to move from inventory; empty to claim existing rewards." type: "object" required: - "id" - "chainId" - "wallet" - "items" Location: properties: x: type: "number" y: type: "number" z: type: "number" type: "object" required: - "x" - "y" - "z" NpcError: properties: name: type: "string" texts: items: {} type: "array" type: "object" required: - "name" - "texts" Npc: properties: id: type: "string" name: type: "string" enabled: type: "boolean" location: $ref: "#/components/schemas/Location" dialogues: items: {} type: "array" interactions: items: {} type: "array" errors: items: $ref: "#/components/schemas/NpcError" type: "array" type: "object" required: - "id" - "name" - "enabled" - "location" - "dialogues" - "interactions" - "errors" QuestObjectiveEvent: properties: name: type: "string" completed: type: "boolean" amount: type: "integer" type: "object" required: - "name" - "completed" QuestObjective: properties: id: type: "integer" events: items: $ref: "#/components/schemas/QuestObjectiveEvent" type: "array" startedAt: type: "string" finishedAt: type: "string" nullable: true type: "object" required: - "id" - "events" - "startedAt" - "finishedAt" Leaderboard: properties: id: type: "string" username: type: "string" avatar: type: "string" score: type: "number" time: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" type: "object" required: - "id" - "username" - "avatar" - "score" - "time" LeaderboardWithPosition: properties: list: items: $ref: "#/components/schemas/Leaderboard" type: "array" position: type: "number" score: type: "number" type: "object" required: - "list" - "position" - "score" LoginUserWallet: properties: id: type: "string" address: type: "string" chainId: type: "string" type: type: "string" primary: type: "boolean" type: "object" required: - "id" - "address" - "chainId" - "type" - "primary" LoginUserAccount: properties: id: type: "string" provider: type: "string" metadata: type: "object" expired: type: "boolean" type: "object" required: - "id" - "provider" - "metadata" - "expired" LoginUser: properties: id: type: "string" username: type: "string" email: type: "string" emailVerifiedAt: type: "string" canChangeUsername: type: "boolean" web: type: "string" avatar: type: "string" referralCode: type: "string" wallets: items: $ref: "#/components/schemas/LoginUserWallet" type: "array" accounts: items: $ref: "#/components/schemas/LoginUserAccount" type: "array" type: "object" required: - "id" - "username" - "wallets" - "accounts" LoginResponse: properties: accessToken: type: "string" refreshToken: type: "string" expiresAt: type: "string" user: $ref: "#/components/schemas/LoginUser" type: "object" token: type: "string" type: "object" required: - "accessToken" - "refreshToken" - "expiresAt" - "user" - "token" Profession: properties: id: format: "uuid" type: "string" userId: format: "uuid" type: "string" key: type: "string" level: type: "number" experience: type: "number" expGained: type: "number" levelUp: type: "boolean" type: "object" required: - "id" - "userId" - "key" - "level" - "experience" - "expGained" - "levelUp" ErrorResponse: properties: message: type: "string" code: type: "string" description: "Code of the error" example: "E_NOT_ENOUGH_TOKENS" type: "object" required: - "message" ChangeEmailRequest: properties: email: type: "string" type: "object" required: - "email" ChangePasswordRequest: properties: oldPassword: type: "string" password: type: "string" type: "object" required: - "oldPassword" - "password" ChangeUsername: properties: username: pattern: "^[A-Za-z0-9\\u4e00-\\u9fff ]+$" type: "string" maxLength: 20 minLength: 3 description: "The new username (3-20 characters)." type: "object" required: - "username" FacebookInstallReferrer: properties: source: type: "string" enum: - "facebook" - "instagram" - "apps.facebook.com" - "apps.instagram.com" description: "Referrer source reported by the Meta SDK." example: "facebook" data: pattern: "^[0-9a-fA-F]*$" type: "string" minLength: 34 maxLength: 16384 description: "Hex-encoded AES-256-GCM ciphertext with the 16-byte auth tag appended (utm_content.source.data)." nonce: pattern: "^[0-9a-fA-F]*$" type: "string" minLength: 24 maxLength: 24 description: "Hex-encoded 12-byte GCM nonce (utm_content.source.nonce)." rawReferrer: maxLength: 32768 type: "string" minLength: 1 description: "Raw Google Play Install Referrer string, forwarded to analytics for debugging." retrievalMethod: maxLength: 255 type: "string" description: "How the client obtained the referrer." example: "google_play_install_referrer" provider: maxLength: 255 type: "string" description: "Installer package that provided the referrer." example: "com.android.vending" installationId: maxLength: 255 type: "string" description: "Client-side installation id." isClickThrough: type: "boolean" description: "Whether the install came from an ad click (vs. view-through)." actualTimestampSeconds: minimum: 0 type: "integer" description: "Referrer click timestamp, unix seconds." installBeginTimestampSeconds: minimum: 0 type: "integer" description: "App install begin timestamp, unix seconds." collectedAtSeconds: minimum: 0 type: "integer" description: "When the client collected the referrer, unix seconds." type: "object" required: - "source" - "data" - "nonce" - "rawReferrer" GetLobbyAccountQuery: properties: room: type: "string" example: "lobby" description: "Name of the room" type: "object" AuthData: properties: id: type: "string" username: type: "string" wallet: type: "string" isOnChain: type: "boolean" type: "object" required: - "id" - "username" - "isOnChain" GetBattleAccountQuery: properties: dungeonIndex: type: "number" type: type: "string" example: "dungeon_1" description: "Dungeon type identificator" type: "object" CollectorRankBonus: properties: exp: minimum: 0 type: "number" spirit: minimum: 0 type: "number" type: "object" required: - "exp" - "spirit" ShamanRank: properties: id: type: "integer" name: type: "string" minPoints: minimum: 1 type: "integer" bonus: $ref: "#/components/schemas/CollectorRankBonus" type: "object" type: "object" required: - "id" - "name" - "minPoints" - "bonus" CollectorRank: properties: points: minimum: 0 type: "number" currentRankId: oneOf: - type: "integer" - type: "null" xpBonus: minimum: 0 type: "number" spiritBonus: minimum: 0 type: "number" type: "object" required: - "points" - "currentRankId" - "xpBonus" - "spiritBonus" Creature: properties: id: format: "uuid" type: "string" contract: type: "string" nullable: true tokenId: type: "string" nullable: true owner: type: "string" nullable: true image: type: "string" nullable: true visual: type: "string" nickname: type: "string" nullable: true description: "Player-given nickname" canSetNickname: type: "boolean" description: "Whether the nickname can still be set. The nickname is a one-time action — false once a nickname has been set." type: type: "string" experience: type: "integer" evolution: type: "integer" level: type: "integer" slot: type: "string" nullable: true hp: type: "number" nullable: true maxHp: type: "number" nullable: true attributes: items: $ref: "#/components/schemas/AttributeSchema" type: "array" metadata: $ref: "#/components/schemas/MetadataSchema" type: "object" nullable: true transferredAt: type: "number" nullable: true mintPending: type: "boolean" tokenStandard: type: "string" nullable: true type: "object" required: - "id" - "contract" - "tokenId" - "owner" - "image" - "visual" - "canSetNickname" - "type" - "experience" - "evolution" - "level" - "slot" - "hp" - "maxHp" - "attributes" - "metadata" - "transferredAt" - "mintPending" - "tokenStandard" AttributeSchema: properties: stat: type: "string" level: type: "number" visual: type: "string" type: "object" required: - "stat" - "level" - "visual" MetadataSchema: properties: dungeon: type: "boolean" type: "object" required: - "dungeon" LobbyAccountProfession: properties: key: type: "string" level: type: "number" experience: type: "number" type: "object" required: - "key" - "level" - "experience" LobbyAccountState: properties: scope: type: "string" payload: type: "object" type: "object" required: - "scope" - "payload" LobbyAccountRestriction: properties: type: type: "number" expiresAt: type: "string" reason: type: "string" type: "object" LobbyAccount: properties: id: type: "string" username: type: "string" avatar: type: "string" hasPassword: type: "boolean" haveMask: type: "boolean" rank: type: "number" type: type: "string" followingZee: type: "string" soulShardVerification: type: "string" userAvatar: type: "string" tribeTag: type: "string" walletLinked: type: "boolean" team: items: $ref: "#/components/schemas/Creature" type: "array" x: type: "number" y: type: "number" z: type: "number" mute: $ref: "#/components/schemas/LobbyAccountRestriction" type: "object" ban: $ref: "#/components/schemas/LobbyAccountRestriction" type: "object" settings: items: {} type: "array" inventory: items: {} type: "array" professions: items: $ref: "#/components/schemas/LobbyAccountProfession" type: "array" unlocked: items: {} type: "array" states: items: $ref: "#/components/schemas/LobbyAccountState" type: "array" type: "object" required: - "id" - "username" - "hasPassword" - "haveMask" - "rank" - "type" - "followingZee" - "soulShardVerification" - "userAvatar" - "tribeTag" - "walletLinked" - "team" - "mute" - "ban" - "settings" - "inventory" - "professions" - "unlocked" - "states" InventoryItem: properties: id: type: "string" contract: type: "string" nullable: true itemId: type: "string" tokenStandard: enum: - "erc721" - "erc1155" - "offchain" type: "string" amount: type: "number" owner: type: "string" nullable: true walletType: type: "string" nullable: true metadata: type: "object" slot: type: "string" nullable: true inInventory: type: "boolean" updatedAt: type: "string" nullable: true type: "object" required: - "id" - "contract" - "itemId" - "tokenStandard" - "amount" - "owner" - "walletType" - "metadata" - "slot" - "inInventory" - "updatedAt" UserAvatar: properties: avatar: type: "string" nullable: true mask: type: "string" nullable: true shirt: type: "string" nullable: true pants: type: "string" nullable: true rightHandItem: type: "string" nullable: true leftHandItem: type: "string" nullable: true winEmote: type: "string" nullable: true neckless: type: "string" nullable: true ring: type: "string" nullable: true type: "object" required: - "avatar" - "mask" - "shirt" - "pants" - "rightHandItem" - "leftHandItem" - "winEmote" - "neckless" - "ring" BattleAccount: properties: collectorRank: $ref: "#/components/schemas/CollectorRank" type: "object" id: type: "string" username: type: "string" avatar: type: "string" nullable: true haveMask: type: "boolean" type: type: "string" stakedMasks: type: "number" soulBoundVerified: type: "boolean" rank: type: "number" unlocked: items: type: "string" type: "array" team: items: $ref: "#/components/schemas/Creature" type: "array" dungeonIsCompleted: type: "boolean" settings: items: type: "object" properties: key: type: "string" value: type: "string" required: - "key" - "value" type: "array" description: "User-specific settings" userAvatar: $ref: "#/components/schemas/UserAvatar" type: "object" professions: items: $ref: "#/components/schemas/LobbyAccountProfession" type: "array" inventory: items: $ref: "#/components/schemas/InventoryItem" type: "array" type: "object" required: - "collectorRank" - "id" - "username" - "avatar" - "haveMask" - "type" - "stakedMasks" - "soulBoundVerified" - "rank" - "unlocked" - "team" - "dungeonIsCompleted" - "settings" - "userAvatar" - "professions" - "inventory" IosInstallReferrer: properties: ref: maxLength: 32768 type: "string" minLength: 1 description: "Raw, unformatted attribution string the iOS client received. Stored as-is, nothing is parsed out of it." example: "zeeverse://attribution-test?utm_source=meta&utm_campaign=development" type: "object" required: - "ref" LoginRequest: properties: email: type: "string" password: type: "string" tgId: type: "string" type: "object" required: - "email" - "password" RefreshTokenRequest: properties: refreshToken: type: "string" type: "object" required: - "refreshToken" TokenResponse: properties: accessToken: type: "string" refreshToken: type: "string" expiresAt: type: "string" type: "object" required: - "accessToken" - "refreshToken" - "expiresAt" AccountDetails: properties: id: type: "string" username: type: "string" email: type: "string" nullable: true wallet: type: "string" nullable: true description: "Primary wallet address, or the oldest linked wallet when none is primary." type: "object" required: - "id" - "username" SetEmailAndPasswordRequest: properties: email: format: "email" type: "string" description: "The new email, if the user already doesn't have one. Will be ignored if one already is set" nullable: true password: type: "string" type: "object" required: - "password" VerificationResponse: properties: id: type: "string" email: type: "string" expireAt: type: "string" resendAt: type: "string" type: "object" required: - "id" - "email" - "expireAt" - "resendAt" SetEmailAndPasswordResponse: properties: verification: $ref: "#/components/schemas/VerificationResponse" nullable: true type: "object" TokenBalance: properties: tokenId: type: "string" amount: type: "number" userId: type: "string" type: "object" required: - "tokenId" - "amount" - "userId" ReceivePostback: properties: jws-string: maxLength: 32768 type: "string" minLength: 1 description: "Compact JWS signed by Apple. All other postback fields are retained as received." type: "object" required: - "jws-string" ApplyAmbassadorCodeRequest: properties: code: type: "string" type: "object" required: - "code" CreateClaimSignatureRequest: properties: wallet: type: "string" token: type: "string" chainId: type: "number" type: "object" required: - "wallet" - "token" - "chainId" AmbassadorClaimResponse: properties: claimId: type: "number" claimer: type: "string" amount: type: "string" expiresAt: type: "number" token: type: "string" signature: type: "string" chainId: type: "number" type: "object" required: - "claimId" - "claimer" - "amount" - "expiresAt" - "token" - "signature" - "chainId" CreateStakeSignatureRequest: properties: wallet: type: "string" level: type: "number" amount: type: "number" chainId: type: "number" type: "object" required: - "wallet" - "level" - "amount" - "chainId" AmbassadorStakeResponse: properties: requestId: type: "number" staker: type: "string" level: type: "number" amount: type: "string" expiresAt: type: "number" token: type: "string" signature: type: "string" type: "object" required: - "requestId" - "staker" - "level" - "amount" - "expiresAt" - "token" - "signature" AmbassadorCodeResponse: properties: uses: type: "number" code: type: "string" type: "object" required: - "uses" - "code" AmbassadorEarningRate: properties: ambassadorLevel: type: "number" totalStaked: type: "string" dailyEarnings: type: "string" monthlyEarnings: type: "string" yearlyEarnings: type: "string" activeUsers: type: "number" apy: type: "number" type: "object" required: - "ambassadorLevel" - "totalStaked" - "dailyEarnings" - "monthlyEarnings" - "yearlyEarnings" - "activeUsers" - "apy" LeaderboardItemResponse: properties: username: type: "number" activeLevel: type: "number" directReferrals: type: "number" totalStaked: type: "string" wallet: type: "string" type: "object" required: - "username" - "activeLevel" - "directReferrals" - "totalStaked" - "wallet" ReferralResponse: properties: ambassadorLevel: type: "number" level: type: "number" userId: type: "string" invitedUserId: type: "string" username: type: "string" soulshardActive: type: "boolean" level1Referrals: type: "number" totalStaked: type: "string" networkStaked: type: "string" type: "object" required: - "ambassadorLevel" - "level" - "userId" - "invitedUserId" - "username" - "soulshardActive" - "level1Referrals" - "totalStaked" - "networkStaked" AmbassadorLevelItem: properties: level: type: "number" requirements: format: "json" type: "string" earnings: items: {} type: "array" stakedAmount: type: "number" completed: type: "boolean" apy: type: "number" stakes: items: {} type: "array" type: "object" required: - "level" - "requirements" - "earnings" - "stakedAmount" - "completed" - "apy" - "stakes" AmbassadorItem: properties: id: format: "uuid" type: "string" userId: format: "uuid" type: "string" level: type: "number" isActive: type: "boolean" skipOnboarding: type: "boolean" activeLevel: type: "number" type: "object" required: - "id" - "userId" - "level" - "isActive" - "skipOnboarding" - "activeLevel" AmbassadorProgressResponse: properties: ambassadorLevels: items: $ref: "#/components/schemas/AmbassadorLevelItem" type: "array" referrals: type: "number" soulshardVerifications: type: "number" activeSubscription: type: "boolean" ambassador: $ref: "#/components/schemas/AmbassadorItem" type: "object" type: "object" required: - "ambassadorLevels" - "referrals" - "soulshardVerifications" - "activeSubscription" - "ambassador" AmbassadorRewardResponse: properties: token: type: "string" amount: type: "string" isClaimed: type: "boolean" unlocksAt: type: "number" rewardType: type: "string" chainId: type: "number" type: "object" required: - "token" - "amount" - "isClaimed" - "unlocksAt" - "rewardType" - "chainId" AmbassadorPotentialRewardsResponse: properties: amount: type: "number" latestTransaction: type: "number" latestTransactionTime: type: "number" type: "object" required: - "amount" - "latestTransaction" - "latestTransactionTime" AmbassadorVestedRewardsResponse: properties: totalAmountWithPenalty: type: "number" totalAmount: type: "number" unlocksAt: type: "number" isClaimed: type: "boolean" penalty: type: "number" transactionId: type: "number" type: "object" required: - "totalAmountWithPenalty" - "totalAmount" - "unlocksAt" - "isClaimed" - "penalty" - "transactionId" ProcessTransactionRequest: properties: wallet: type: "string" transactionId: type: "string" chainId: type: "number" type: "object" required: - "wallet" - "transactionId" - "chainId" RewardSlotSchema: properties: itemId: minLength: 1 type: "string" amount: maximum: 1000000000 type: "integer" minimum: 1 type: "object" required: - "itemId" - "amount" PlayerAnnouncementResponse: properties: id: type: "string" title: type: "string" message: type: "string" rewards: items: $ref: "#/components/schemas/RewardSlotSchema" type: "array" isSeen: type: "boolean" isHidden: type: "boolean" isClaimed: type: "boolean" seenAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" claimedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" expiresAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" createdAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" type: "object" required: - "id" - "title" - "message" - "rewards" - "isSeen" - "isHidden" - "isClaimed" - "createdAt" BulkAnnouncementsRequest: properties: ids: items: format: "uuid" type: "string" type: "array" maxItems: 100 minItems: 1 description: "Ids of the selected announcements, 1 to 100 UUIDs. Unknown ids are ignored. Cannot be combined with `all`." example: - "3fa85f64-5717-4562-b3fc-2c963f66afa6" all: type: "boolean" enum: - true description: "Set to `true` to target every announcement (\"Mark all as read\", \"Delete all\"). Only `true` is accepted. Cannot be combined with `ids`." example: true type: "object" description: "Selects which announcements a bulk action applies to. Send exactly one of `ids` or `all: true`; an empty body or both properties together is rejected with 422." AnnouncementResponse: properties: id: type: "string" title: type: "string" message: type: "string" rewards: items: $ref: "#/components/schemas/RewardSlotSchema" type: "array" hideFromNewUsers: type: "boolean" seenBy: type: "integer" claimedBy: type: "integer" expiresAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" createdAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" updatedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" type: "object" required: - "id" - "title" - "message" - "rewards" - "hideFromNewUsers" - "seenBy" - "claimedBy" - "createdAt" - "updatedAt" CreateAnnouncementRequest: properties: title: maxLength: 255 type: "string" minLength: 1 message: maxLength: 99999 type: "string" minLength: 1 expiresAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" rewards: items: $ref: "#/components/schemas/RewardSlotSchema" type: "array" hideFromNewUsers: type: "boolean" type: "object" required: - "title" - "message" ListAnnouncementsQuery: properties: page: minimum: 1 type: "integer" limit: maximum: 50 type: "integer" minimum: 1 order_by: type: "string" enum: - "created_at" - "updated_at" - "expires_at" - "title" order_direction: type: "string" enum: - "asc" - "desc" type: "object" UpdateAnnouncementRequest: properties: title: maxLength: 255 type: "string" minLength: 1 message: maxLength: 99999 type: "string" minLength: 1 expiresAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" rewards: items: $ref: "#/components/schemas/RewardSlotSchema" type: "array" hideFromNewUsers: type: "boolean" type: "object" UserAvatarResponse: properties: avatar: type: "string" mask: type: "string" shirt: type: "string" pants: type: "string" rightHandItem: type: "string" leftHandItem: type: "string" winEmote: type: "string" neckless: type: "string" ring: type: "string" type: "object" SetLobbyAvatarRequest: properties: userId: type: "string" description: "The ID of the user whose lobby avatar is set." avatar: type: "string" description: "Lobby avatar ID, e.g. `default_3_male`. Must be one of the known avatars." type: "object" required: - "userId" - "avatar" SimpleItem: properties: itemId: type: "integer" description: "Item ID as defined in items/items.json" amount: type: "integer" maxAmount: type: "integer" description: "When set, removes at most this many of the item, but never more than the player owns (no error when fewer)." metadata: {} source: type: "string" sourceId: type: "string" slot: type: "string" type: "object" required: - "itemId" - "amount" StripShamanAvatarRequest: properties: userId: type: "string" description: "The ID of the user to strip the shaman avatar from." type: "object" required: - "userId" UseInventoryItemRequest: properties: id: type: "string" battleId: type: "string" type: "object" required: - "id" - "battleId" GetContractHistoryRequest: properties: contracts: items: type: "string" type: "string" minItems: 1 description: "Comma-separated contract addresses to fetch history for" example: "0x0000000000000000000000000000000000000000,0x1111111111111111111111111111111111111111" event: type: "string" description: "Event name to filter by" example: "Swap" page: minimum: 1 type: "integer" example: 1 default: 1 limit: maximum: 500 type: "integer" minimum: 1 description: "Items per page" example: 50 default: 50 type: "object" required: - "contracts" - "event" ContractHistoryPaginationMeta: properties: total: type: "number" example: 1234 perPage: type: "number" example: 50 currentPage: type: "number" example: 1 lastPage: type: "number" example: 25 firstPage: type: "number" example: 1 firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" previousPageUrl: type: "string" type: "object" required: - "total" - "perPage" - "currentPage" - "lastPage" - "firstPage" ContractHistoryResponse: properties: data: items: type: "string" example: "1717000000:0:20.00:1:0xabc1234567890" type: "array" description: "Colon-delimited event strings, one per row. Format: `timestamp:operationType:price:quantity:transactionId`. `operationType` is 0 (buy) or 1 (sell)." type: "object" required: - "data" HandleCookingRequest: properties: id: type: "string" successful: type: "boolean" type: "object" required: - "id" - "successful" HandleCraftRequest: properties: recipeId: type: "number" itemIds: items: {} type: "array" type: "object" required: - "recipeId" - "itemIds" EvolveOffChainCreatureRequest: properties: crystalItemId: type: "integer" nullable: true description: "The crystal item ID required when evolving a fox" sacrificeCreatureIds: items: format: "uuid" type: "string" type: "array" uniqueItems: true maxItems: 2 minItems: 0 nullable: true description: "Zees to sacrifice" type: "object" CreatureDepositCollection: properties: chainId: type: "integer" contract: type: "string" depositContract: type: "string" kind: type: "string" enum: - "zee" - "llama" name: type: "string" type: "object" required: - "chainId" - "contract" - "depositContract" - "kind" - "name" DepositableCreature: properties: chainId: oneOf: - type: "integer" - type: "null" id: format: "uuid" type: "string" contract: oneOf: - type: "string" - type: "null" tokenId: oneOf: - type: "string" - type: "null" owner: oneOf: - type: "string" - type: "null" image: oneOf: - type: "string" - type: "null" visual: type: "string" tokenStandard: type: "string" mintPending: type: "boolean" type: "object" required: - "chainId" - "id" - "contract" - "tokenId" - "owner" - "image" - "visual" - "tokenStandard" - "mintPending" CreatureDepositReceipt: properties: chainId: type: "integer" contract: type: "string" tokenId: type: "string" type: "object" required: - "chainId" - "contract" - "tokenId" CreatureDeposits: properties: deposits: items: $ref: "#/components/schemas/CreatureDepositReceipt" type: "array" collections: items: $ref: "#/components/schemas/CreatureDepositCollection" type: "array" creatures: items: $ref: "#/components/schemas/DepositableCreature" type: "array" type: "object" required: - "deposits" - "collections" - "creatures" BaseStats: properties: hp: type: "number" description: "Base HP before any modifiers" example: 100 maxHp: type: "number" description: "Base max HP before any modifiers" example: 100 damage: type: "number" description: "Base damage before any modifiers" example: 50 defense: type: "number" description: "Base defense before any modifiers" example: 25 speed: type: "number" description: "Base speed before any modifiers" example: 20 critical: type: "number" description: "Base critical hit chance before any modifiers (0.0 to 1.0)" example: 0.1 type: "object" required: - "hp" - "maxHp" - "damage" - "defense" - "speed" - "critical" CreatureStats: properties: id: type: "string" description: "Creature unique identifier" example: "f466c4ab-c26a-43e4-b8b5-f51fd0f47f83" hp: type: "number" description: "Current creature HP after all modifiers" example: 150 maxHp: type: "number" description: "Maximum creature HP after all modifiers" example: 150 damage: type: "number" description: "Creature damage after all modifiers" example: 75 defense: type: "number" description: "Creature defense after all modifiers" example: 40 speed: type: "number" description: "Creature speed after all modifiers" example: 30 critical: type: "number" description: "Creature critical hit chance after all modifiers (0.0 to 1.0)" example: 0.15 base: $ref: "#/components/schemas/BaseStats" type: "object" description: "Base creature stats before any modifiers" type: "object" required: - "id" - "hp" - "maxHp" - "damage" - "defense" - "speed" - "critical" - "base" MintableZee: properties: id: format: "uuid" type: "string" visual: type: "string" image: oneOf: - type: "string" - type: "null" nickname: oneOf: - type: "string" - type: "null" level: type: "integer" type: "object" required: - "id" - "visual" - "image" - "nickname" - "level" ZeeMintStatus: properties: id: format: "uuid" type: "string" creatureId: format: "uuid" type: "string" status: enum: - "awaiting_approval" - "pending" - "submitted" - "minted" - "cancelled" type: "string" transactionId: oneOf: - type: "string" - type: "null" type: "object" required: - "id" - "creatureId" - "status" - "transactionId" ZeeMintOptions: properties: enabled: type: "boolean" price: type: "number" balance: type: "number" wallet: oneOf: - type: "string" - type: "null" chainId: type: "integer" availableAt: type: "number" cooldownSeconds: type: "number" requiresApproval: type: "boolean" creatures: items: $ref: "#/components/schemas/MintableZee" type: "array" requests: items: $ref: "#/components/schemas/ZeeMintStatus" type: "array" type: "object" required: - "enabled" - "price" - "balance" - "wallet" - "chainId" - "availableAt" - "cooldownSeconds" - "requiresApproval" - "creatures" - "requests" MintZeeRequest: properties: zeeId: format: "uuid" type: "string" wallet: type: "string" price: minimum: 0 type: "number" type: "object" required: - "zeeId" - "wallet" - "price" ChangeOwnerRequest: properties: tokenId: type: "string" description: "Creature onchain id" newOwner: type: "string" nullable: true description: "Address of the new owner" type: "object" required: - "tokenId" - "newOwner" UpdateCreatureRequest: properties: userId: type: "string" description: "The user id" experience: type: "number" nullable: true description: "The experience of the creature" evolution: type: "number" nullable: true description: "The evolution of the creature" level: type: "number" nullable: true description: "The level of the creature" hp: type: "number" description: "Pass null to set hp to the creature's max hp or pass to set remaining hp" setAsFollower: type: "boolean" nullable: true description: "Pass true to set the creature as follower" source: enum: - "classic_chapter_1" - "classic_chapter_2" - "classic_chapter_3" - "weekly" - "mega" - "infinite" - "dungeon_1" - "dungeon_2" - "dungeon_3" - "dungeon_4" - "dungeon_5" - "dungeon_6" - "dungeon_7" - "wild_zee" - "pvp" - "simple_battle" - "tournament" - "treasure_pot" - "quick_battle" type: "string" description: "Where the experience was earned from" example: "classic_chapter_1" nullable: true dungeonId: type: "string" nullable: true description: "The dungeon id when the experience originated from a dungeon" type: "object" required: - "userId" UpdateCreatureNicknameRequest: properties: nickname: pattern: "^[A-Za-z0-9\\u4e00-\\u9fff ]+$" type: "string" maxLength: 20 minLength: 3 description: "The new nickname for the creature (3-20 characters)." example: "Sparky" type: "object" required: - "nickname" UpdateCreatureSlotRequest: properties: slot: type: "string" nullable: true description: "Pass 'null' to remove the creature from the team" ignoreNotification: type: "boolean" nullable: true description: "Whether to ignore sending a notification to the user about the slot change" swapSlot: type: "boolean" nullable: true description: "Whether to swap creatures between slots, instead of unslotting the creature in the target slot" type: "object" RewardItem: properties: itemId: type: "number" amount: type: "number" type: "object" required: - "itemId" - "amount" DayStatus: properties: day: type: "number" rewards: items: $ref: "#/components/schemas/RewardItem" type: "array" status: type: "string" type: "object" required: - "day" - "rewards" - "status" DailyLoginStatusResponse: properties: currentDay: type: "number" canClaim: type: "boolean" nextAvailableAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" totalClaims: type: "number" days: items: $ref: "#/components/schemas/DayStatus" type: "array" type: "object" required: - "currentDay" - "canClaim" - "totalClaims" - "days" DailyLoginAdminStatusResponse: properties: currentDay: type: "number" totalClaims: type: "number" days: items: $ref: "#/components/schemas/DayStatus" type: "array" availableNotificationCount: type: "number" lastClaimedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" createdAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" type: "object" required: - "currentDay" - "totalClaims" - "days" - "availableNotificationCount" - "createdAt" DailyQuestRewardView: properties: type: type: "string" description: "Reward type: TOKEN | ITEM | XP | ZEE (PROFESSION_EXP supported for legacy content)." example: "TOKEN" targetId: type: "string" description: "Polymorphic reward target id, interpreted by type: token id for TOKEN (Spirit = \"700\"), item id for ITEM, profession key for PROFESSION_EXP, zee id for ZEE." example: "700" skill: type: "string" description: "Skill receiving experience for XP rewards." example: "taming" amount: type: "integer" example: 250 type: "object" required: - "type" - "amount" DailyQuestView: properties: questId: type: "integer" description: "Config quest id (1..N)." example: 7 title: type: "string" description: "Localization key for the title." example: "daily_quest_7_title" description: type: "string" description: "Localization key for the description." example: "daily_quest_7_description" target: type: "string" description: "Optional target discriminator." nullable: true example: "spirit_tree" required: type: "integer" example: 10 progress: type: "integer" example: 4 status: type: "string" description: "IN_PROGRESS | COMPLETED | CLAIMED | FAILED" example: "IN_PROGRESS" reward: $ref: "#/components/schemas/DailyQuestRewardView" description: "First reward for legacy clients. Use rewards for the complete list." nullable: true deprecated: true rewards: items: $ref: "#/components/schemas/DailyQuestRewardView" type: "array" description: "All rewards granted together on claim, including Spirit and skill experience." type: "object" required: - "questId" - "title" - "description" - "required" - "progress" - "status" - "rewards" DailyQuestsResponse: properties: resetAt: type: "string" description: "ISO timestamp of the next daily reset." example: "2026-07-03T00:00:00.000Z" quests: items: $ref: "#/components/schemas/DailyQuestView" type: "array" type: "object" required: - "resetAt" - "quests" ProgressDailyQuestRequest: properties: amount: minimum: 1 type: "integer" description: "Progress increment to apply. Defaults to 1." example: 1 type: "object" ClaimDailyVeeRequest: properties: wallet: type: "string" chainId: type: "number" type: "object" required: - "wallet" - "chainId" RotateDailyQuestsDevRequest: properties: at: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" description: "Optional \"pretend now\" ISO timestamp for time-travel rotation. Omit to force an immediate rotation." example: "2026-07-08T00:00:01.000Z" type: "object" SetDailyQuestStatusDevRequest: properties: status: enum: - "IN_PROGRESS" - "COMPLETED" - "CLAIMED" - "FAILED" type: "string" description: "Status to force onto the quest row." example: "COMPLETED" progress: minimum: 0 type: "integer" description: "Optional explicit progress override, clamped to `required`. Defaults to `required` for COMPLETED/CLAIMED, otherwise unchanged." example: 10 type: "object" required: - "status" SetDailyQuestsDayDevRequest: properties: orderedDaysServed: minimum: 0 type: "integer" description: "New orderedDaysServed counter. The next rotation serves ordered day counter+1, or the random phase once past the configured ordered sets." example: 3 type: "object" required: - "orderedDaysServed" SimulateDailyQuestEventDevRequest: properties: event: minLength: 1 type: "string" description: "Gameplay event name to simulate." example: "zee:fed" data: type: "object" description: "Event payload matched against each quest's configured events[] filters. `amount` sets the progress increment (default 1). userId is merged in automatically." example: amount: 2 foodType: "fruit" type: "object" required: - "event" ExecuteRequest: properties: service: type: "string" method: type: "string" data: items: {} type: "array" type: "object" required: - "service" - "method" - "data" TestnetContractOpensea: properties: url: type: "string" image: type: "string" type: "object" required: - "url" - "image" TestnetContract: properties: name: type: "string" address: type: "string" nodeAddress: type: "string" chainId: type: "string" opensea: type: "object" type: "object" required: - "name" - "address" - "nodeAddress" - "chainId" - "opensea" MintNftRequest: properties: contract: type: "string" wallet: type: "string" tokenId: type: "string" amount: type: "number" metadata: type: "object" type: "object" required: - "contract" - "wallet" - "amount" DungeonRewardsStage: properties: stage: type: "number" itemIds: items: type: "number" type: "array" type: "object" required: - "stage" - "itemIds" DungeonRewardsResponse: properties: dungeonId: type: "string" stages: items: $ref: "#/components/schemas/DungeonRewardsStage" type: "array" type: "object" required: - "dungeonId" - "stages" DungeonResponse: properties: id: format: "uuid" type: "string" userId: format: "uuid" type: "string" dungeonIndex: type: "number" completed: type: "boolean" type: type: "string" state: type: "object" eventId: type: "string" completedAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" type: "object" required: - "id" - "userId" - "dungeonIndex" - "completed" - "type" InfiniteDungeon: properties: id: format: "uuid" type: "string" userId: format: "uuid" type: "string" waves: type: "number" rewards: items: $ref: "#/components/schemas/SimpleItem" type: "array" claimed: type: "boolean" claimedAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" type: "object" required: - "id" - "userId" - "waves" - "rewards" - "claimed" DungeonLeaderboardItem: properties: id: format: "uuid" type: "string" username: type: "string" soulBoundVerified: type: "boolean" soulBoundType: type: "string" avatar: type: "string" completed: type: "number" completedAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" type: "object" required: - "id" - "username" - "soulBoundVerified" - "avatar" - "completed" - "completedAt" DungeonLeaderboardSelf: properties: position: type: "number" completedAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" type: "object" required: - "position" - "completedAt" DungeonLeaderboardResponse: properties: list: items: $ref: "#/components/schemas/DungeonLeaderboardItem" type: "array" self: $ref: "#/components/schemas/DungeonLeaderboardSelf" type: "object" type: "object" required: - "list" - "self" GetLeaderboardRequest: properties: cutoffDate: type: "string" nullable: true description: "The cutoff date for the leaderboard" type: "object" MegaDungeonPresetSlot: properties: id: type: "number" itemId: type: "number" modifiers: items: type: "number" type: "array" type: "object" required: - "id" - "itemId" ActiveMegaDungeonEventDataDungeon: properties: latest: type: "number" started: type: "number" type: "object" required: - "latest" - "started" ActiveMegaDungeonEventPreset: properties: id: type: "string" name: type: "string" slots: items: $ref: "#/components/schemas/MegaDungeonPresetSlot" type: "array" type: "object" required: - "id" - "name" - "slots" ActiveMegaDungeonEventData: properties: preset: $ref: "#/components/schemas/ActiveMegaDungeonEventPreset" dungeon: $ref: "#/components/schemas/ActiveMegaDungeonEventDataDungeon" type: "object" required: - "dungeon" ActiveMegaDungeonEventResponse: properties: id: format: "uuid" type: "string" startAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" endsAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" gracePeriodEndsAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" data: $ref: "#/components/schemas/ActiveMegaDungeonEventData" type: "object" required: - "id" - "startAt" - "endsAt" UpdateDungeonRequest: properties: completed: type: "boolean" state: type: "object" type: "object" UpdateDungeonProgressRequest: properties: stages: type: "number" type: "object" required: - "stages" ActiveWeeklyDungeonEventDataDungeon: properties: latest: type: "number" started: type: "number" type: "object" required: - "latest" - "started" ActiveWeeklyDungeonEventData: properties: baseModifier: type: "string" negativeModifier: type: "string" positiveModifier: type: "string" dungeon: $ref: "#/components/schemas/ActiveWeeklyDungeonEventDataDungeon" type: "object" required: - "dungeon" ActiveWeeklyDungeonEventResponse: properties: id: format: "uuid" type: "string" startAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" endsAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" gracePeriodEndsAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" data: $ref: "#/components/schemas/ActiveWeeklyDungeonEventData" type: "object" type: "object" required: - "id" - "startAt" - "endsAt" - "gracePeriodEndsAt" CompostResult: properties: id: format: "uuid" type: "string" itemId: type: "string" description: "The item id of the compost result" example: "123456789" amount: type: "number" description: "The amount of the compost result" example: 1 slot: type: "string" description: "The inventory slot" example: "17" type: "object" required: - "id" - "itemId" - "amount" CompostBin: properties: id: format: "uuid" type: "string" userId: format: "uuid" type: "string" binKey: type: "string" deposited: type: "number" processId: format: "uuid" type: "string" ready: type: "boolean" result: $ref: "#/components/schemas/CompostResult" type: "object" required: - "id" - "userId" - "binKey" - "deposited" - "ready" DepositCompostBinRequest: properties: itemId: minLength: 1 type: "string" format: "uuid" description: "Unique inventory ID of the compost item" example: "123e4567-e89b-12d3-a456-426614174000" compostbinId: minLength: 1 type: "string" format: "uuid" description: "Unique compost bin ID" example: "123e4567-e89b-12d3-a456-426614174000" amount: type: "number" description: "Amount of compost to deposit" example: 1 type: "object" required: - "itemId" - "compostbinId" - "amount" DepositCompostItemRequest: properties: id: format: "uuid" type: "string" description: "Unique inventory ID of the compostable item" example: "123e4567-e89b-12d3-a456-426614174000" amount: minimum: 1 type: "integer" description: "Amount of this inventory item to deposit" example: 1 type: "object" required: - "id" - "amount" DepositCompostItemsRequest: properties: items: items: $ref: "#/components/schemas/DepositCompostItemRequest" type: "array" uniqueItems: true minItems: 1 description: "Inventory items to deposit into the compost bin" type: "object" required: - "items" PlantProof: properties: signature: type: "string" format: "string" description: "The signature of the proof" example: "0x123456789abcdef" payload: type: "object" description: "The payload of the proof" type: "object" required: - "signature" - "payload" PlantResult: properties: itemId: type: "number" format: "number" description: "The item ID of the result when harvested" example: 123456789 amount: type: "number" format: "number" description: "The amount of the item when harvested" example: 1 type: "object" required: - "itemId" - "amount" Plant: properties: id: format: "uuid" type: "string" itemId: type: "string" stage: enum: - "Seedling" - "Sapling" - "Maturing" - "Fruiting" - "Ripe" - 0 - 1 - 2 - 3 - 4 type: "string" isSick: type: "boolean" hasCompost: type: "boolean" processId: format: "uuid" type: "string" result: $ref: "#/components/schemas/PlantResult" proof: $ref: "#/components/schemas/PlantProof" type: "object" required: - "id" - "itemId" - "stage" - "isSick" - "hasCompost" FarmPlot: properties: id: format: "uuid" type: "string" plotId: type: "string" type: enum: - "herb" - "quest" - "static" type: "string" clearedAt: type: "string" format: "date-time" clearedFor: type: "number" plant: $ref: "#/components/schemas/Plant" processId: format: "uuid" type: "string" type: "object" required: - "id" - "plotId" - "type" - "clearedAt" - "clearedFor" SowSeedRequest: properties: itemId: minLength: 1 type: "string" format: "uuid" description: "Unique inventory ID of the seed item" example: "123e4567-e89b-12d3-a456-426614174000" setProcess: type: "boolean" type: "object" required: - "itemId" PaginationRequest: properties: page: type: "number" description: "Page number" limit: type: "number" description: "Number of items per page" orderBy: type: "string" description: "Field to order by" orderDirection: enum: - "asc" - "desc" type: "string" description: "Order direction" type: "object" FarmingPaginationRequest: properties: userId: type: "string" description: "User ID" username: type: "string" description: "Username" page: type: "number" description: "Page number" limit: type: "number" description: "Number of items per page" orderBy: type: "string" description: "Field to order by" orderDirection: enum: - "asc" - "desc" type: "string" description: "Order direction" type: "object" UpdateCompostRequest: properties: ready: type: "boolean" description: "Ready status" deposit: type: "number" description: "Deposited status" setProcess: type: "boolean" description: "Set process status" type: "object" UpdatePlantRequest: properties: stage: enum: - "Seedling" - "Sapling" - "Maturing" - "Fruiting" - "Ripe" - 0 - 1 - 2 - 3 - 4 type: "string" description: "Stage" isSick: type: "boolean" description: "Is sick" hasCompost: type: "boolean" description: "Has compost" setProcess: type: "boolean" description: "Set process" type: "object" HandleFireMakingRequest: properties: id: type: "string" type: "object" required: - "id" HandleFishingRequest: properties: itemId: type: "string" baitId: type: "string" type: "object" required: - "itemId" - "baitId" SeedsResponse: properties: id: type: "string" contractId: type: "string" transactionId: type: "string" amount: type: "number" duration: type: "string" receiver: type: "string" wallet: type: "string" depositAmount: type: "string" type: "object" required: - "id" - "contractId" - "transactionId" - "amount" - "duration" - "receiver" - "wallet" - "depositAmount" SeedsLeaderboardResponse: properties: wallet: type: "string" seeds: type: "number" type: "object" required: - "wallet" - "seeds" Signature: properties: claimer: type: "string" signature: type: "string" amount: type: "string" claimId: type: "string" availableAt: type: "number" type: "object" required: - "claimer" - "signature" - "amount" - "claimId" - "availableAt" ClaimsResponse: properties: id: type: "number" wallets: items: type: "string" type: "array" amount: type: "number" source: type: "string" unlocksAt: type: "number" claimedBlockNumber: type: "integer" claimedBy: type: "string" signatures: items: $ref: "#/components/schemas/Signature" type: "array" type: "object" required: - "id" - "wallets" - "amount" - "source" - "unlocksAt" - "claimedBlockNumber" - "claimedBy" - "signatures" SubmitTransactionRequest: properties: transactionId: type: "string" description: "The transaction id" type: "object" required: - "transactionId" CreateGexRouteRequest: properties: tokenInId: type: "string" tokenOutId: type: "string" amount: type: "string" isExactOut: type: "boolean" type: "object" required: - "tokenInId" - "tokenOutId" - "amount" - "isExactOut" GexCreateRouteResponse: properties: amountIn: type: "string" amountOut: type: "string" tokenIn: type: "string" tokenOut: type: "string" path: items: type: "string" type: "array" type: "object" required: - "amountIn" - "amountOut" - "tokenIn" - "tokenOut" - "path" SwapArgsRequest: properties: tokenInId: type: "string" tokenOutId: type: "string" amountIn: type: "string" amountOut: type: "string" path: items: type: "string" type: "array" isExactOut: type: "boolean" nftsIn: items: {} type: "array" nftsOut: items: {} type: "array" slippage: type: "number" toAddress: type: "string" chainId: type: "number" fromWallet: type: "string" type: "object" required: - "tokenInId" - "tokenOutId" - "amountIn" - "amountOut" - "path" - "isExactOut" - "nftsIn" - "nftsOut" - "slippage" - "toAddress" - "chainId" - "fromWallet" SwapArgsResponse: properties: address: type: "string" functionName: type: "string" args: items: type: "string" type: "array" value: type: "string" type: "object" required: - "address" - "functionName" - "args" - "value" ItemStatsVolumeResponse: properties: buy: type: "string" description: "VEE volume of buy trades over last 24 hours (in wei)" example: "1000000000000000000" sell: type: "string" description: "VEE volume of sell trades over last 24 hours (in wei)" example: "1000000000000000000" type: "object" required: - "buy" - "sell" ItemStatsResponse: properties: priceChange1h: type: "number" description: "Price change over last 1 hour (percentage)" example: -0.01 priceChange24h: type: "number" description: "Price change over last 24 hours (percentage)" example: -0.01 priceChange7d: type: "number" description: "Price change over last 7 days (percentage)" example: -0.01 volume: $ref: "#/components/schemas/ItemStatsVolumeResponse" description: "VEE volume traded over last 24 hours split by trade direction (in wei)" type: "object" required: - "priceChange1h" - "priceChange24h" - "priceChange7d" - "volume" GexPoolResponse: properties: id: format: "uuid" type: "string" chainId: type: "number" pairAddress: type: "string" vaultAddress: type: "string" token0: type: "object" token1: type: "object" totalFee: type: "number" totalSupply: type: "string" reserve0: type: "string" reserve1: type: "string" routerAddress: type: "string" token0Address: type: "string" token1Address: type: "string" token0Symbol: type: "string" token1Symbol: type: "string" veeIndex: type: "number" price: type: "number" poolType: type: "string" stats: $ref: "#/components/schemas/ItemStatsResponse" description: "Onchain trading stats derived from Swap events: 1h/24h/7d price change and 24h volume" type: "object" required: - "id" - "chainId" - "pairAddress" - "vaultAddress" - "token0" - "token1" - "totalFee" - "totalSupply" - "reserve0" - "reserve1" - "routerAddress" - "token0Address" - "token1Address" - "token0Symbol" - "token1Symbol" - "veeIndex" - "price" - "poolType" HatchMetadata: properties: itemId: type: "string" onChain: type: "boolean" type: type: "string" type: "object" required: - "itemId" - "onChain" Hatching: properties: id: format: "uuid" type: "string" finishAt: type: "string" format: "date-time" metadata: $ref: "#/components/schemas/HatchMetadata" creature: $ref: "#/components/schemas/Creature" nullable: true hatcheryId: type: "string" type: "object" required: - "id" - "finishAt" - "metadata" - "creature" - "hatcheryId" StartHatchingRequest: properties: id: type: "string" format: "uuid" description: "Unique ID of the egg that will be used for hatching" type: "object" required: - "id" Herbalism: properties: playerId: format: "uuid" type: "string" itemId: type: "string" example: 1234567890 description: "ID of the sunflare item" amount: type: "number" example: 1 description: "Amount of the item" type: enum: - "potion" - "potion_mix" - "crushed_ingredient" - "ingredient" - "vial_of_water" type: "string" slot: type: "string" type: "object" required: - "playerId" - "itemId" - "amount" - "type" - "slot" HerbalismIngredient: properties: slot: minLength: 1 type: "string" description: "Slot of the ingredient" example: "12" amount: minLength: 1 type: "number" description: "Amount of the ingredient" example: 1 type: "object" required: - "slot" - "amount" CraftItemRequest: properties: ingredients: items: $ref: "#/components/schemas/HerbalismIngredient" type: "array" description: "Ingredients to craft the item" example: - slot: "12" amount: 1 - slot: "13" amount: 1 amount: minLength: 1 type: "number" description: "Amount of items to craft" example: 1 type: "object" required: - "ingredients" - "amount" ValidateReceiptRequest: properties: store: enum: - "apple" - "google" type: "string" productId: type: "string" receipt: type: "string" localizedPrice: type: "number" isoCurrencyCode: type: "string" jwsRepresentation: type: "string" type: "object" required: - "productId" - "receipt" ValidateReceiptResponse: properties: type: enum: - "currency" - "soulshard" type: "string" id: type: "string" amount: type: "number" type: "object" required: - "type" - "id" - "amount" ItemClaimEntry: properties: requestId: type: "integer" tokenId: type: "string" amount: type: "integer" signature: type: "string" type: "object" required: - "requestId" - "tokenId" - "amount" - "signature" ItemClaim: properties: id: format: "uuid" type: "string" chainId: type: "integer" wallet: type: "string" contract: type: "string" claimed: type: "boolean" entries: items: $ref: "#/components/schemas/ItemClaimEntry" type: "array" type: "object" required: - "id" - "chainId" - "wallet" - "contract" - "claimed" - "entries" ClaimableItemReward: properties: tokenId: type: "string" amount: type: "integer" type: "object" required: - "tokenId" - "amount" ItemClaims: properties: pending: items: $ref: "#/components/schemas/ItemClaim" type: "array" rewards: items: $ref: "#/components/schemas/ClaimableItemReward" type: "array" legacyPendingCount: type: "integer" type: "object" required: - "pending" - "rewards" - "legacyPendingCount" Item: properties: id: format: "uuid" type: "string" contract: type: "string" itemId: type: "string" example: "101710030" tokenStandard: enum: - "erc721" - "erc1155" - "offchain" type: "string" amount: type: "integer" owner: type: "string" walletType: type: "string" storedIn: enum: - "stash" - "inventory" type: "string" slot: type: "string" metadata: type: "object" type: "object" required: - "id" - "itemId" - "tokenStandard" - "amount" - "storedIn" TransferableItem: properties: id: type: "integer" description: "On-chain item id." name: type: "string" type: "object" required: - "id" - "name" ItemTransferWhitelists: properties: mint: items: $ref: "#/components/schemas/TransferableItem" type: "array" description: "Items that can be minted from the game inventory to a wallet." deposit: items: $ref: "#/components/schemas/TransferableItem" type: "array" description: "Items that can be deposited from a wallet into the game." type: "object" required: - "mint" - "deposit" ModifyItemRequest: properties: userId: format: "uuid" type: "string" amount: type: "integer" source: type: "string" slot: type: "string" metadata: type: "object" type: "object" required: - "userId" - "amount" ModifyItemsRequest: properties: userId: format: "uuid" type: "string" items: items: $ref: "#/components/schemas/SimpleItem" type: "array" storage: enum: - "stash" - "inventory" type: "string" source: type: "string" sourceId: type: "string" metadata: type: "object" fallbackToStash: type: "boolean" type: "object" required: - "userId" - "items" LevelsResponse: properties: id: type: "string" level: type: "number" progress: type: "number" claimed: type: "boolean" rewards: items: $ref: "#/components/schemas/RewardItem" type: "array" type: "object" required: - "id" - "level" - "progress" - "claimed" - "rewards" InvitedFriendsResponse: properties: activeSoulshards: type: "number" invitedPlayers: type: "number" type: "object" required: - "activeSoulshards" - "invitedPlayers" LandKeyResponse: properties: id: type: "string" owner: type: "string" supply: type: "string" totalSupply: type: "string" currentPrice: type: "string" created: type: "boolean" unclaimedFees: type: "string" metadata: format: "json" type: "string" type: "object" required: - "id" - "owner" - "supply" - "totalSupply" - "currentPrice" - "created" - "unclaimedFees" - "metadata" LandKeyFeeClaimSignatureResponse: properties: landOwner: type: "string" landKeyId: type: "string" validUntil: type: "number" signature: type: "string" type: "object" required: - "landOwner" - "landKeyId" - "validUntil" - "signature" LandKeyCreateSignatureResponse: properties: sender: type: "string" landKeyId: type: "string" supplyFactor: type: "number" curveFactor: type: "number" initialPriceFactor: type: "number" signature: type: "string" type: "object" required: - "sender" - "landKeyId" - "supplyFactor" - "curveFactor" - "initialPriceFactor" - "signature" CreateLandRequest: properties: prompt: maxLength: 250 type: "string" minLength: 5 biome: type: "string" rarity: enum: - "rare" type: "string" type: "object" required: - "prompt" - "biome" LandRequestResponse: properties: id: type: "string" userId: type: "string" prompt: type: "string" status: enum: - "pending" - "processing" - "completed" - "failed" type: "string" biome: type: "string" rarity: enum: - "rare" type: "string" socket: type: "string" url: type: "string" reasoning: type: "string" shape: type: "string" shapeUrl: type: "string" createdAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" updatedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" finishedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" type: "object" required: - "id" - "userId" - "prompt" - "status" - "biome" - "rarity" - "createdAt" - "updatedAt" LandRequestBiomeOption: properties: value: type: "string" label: type: "string" enabled: type: "boolean" type: "object" required: - "value" - "label" - "enabled" LandRequestConfigResponse: properties: biomes: items: $ref: "#/components/schemas/LandRequestBiomeOption" type: "array" type: "object" required: - "biomes" LandRequestUsageResponse: properties: limit: type: "number" usedToday: type: "number" remaining: type: "number" resetAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" type: "object" required: - "usedToday" - "resetAt" ListLandRequestsQuery: properties: page: minimum: 1 type: "integer" limit: maximum: 100 type: "integer" minimum: 1 rarity: enum: - "rare" type: "string" type: "object" GetCollectorsLeaderboardRequest: properties: limit: maximum: 100 type: "integer" minimum: 1 default: 50 type: "object" required: - "limit" CollectorLeaderboardEntry: properties: rank: minimum: 1 type: "integer" username: type: "string" avatar: type: "string" points: minimum: 0 type: "integer" totemsUnlocked: minimum: 0 type: "integer" type: "object" required: - "rank" - "username" - "points" - "totemsUnlocked" ProfessionLeaderboardItem: properties: id: type: "string" description: "User id" example: "b3f1c2d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d" username: type: "string" description: "Username" example: "zee_master" soulBoundVerified: type: "boolean" description: "Whether the user holds a valid soul-bound verification" example: true soulBoundType: type: "string" description: "Type of the valid soul-bound verification, null when none" nullable: true example: "genesis" avatar: type: "string" description: "Resolved avatar URL, null when the user has no avatar" nullable: true level: type: "number" description: "The user's level for this leaderboard (summed level for the overall board)" example: 42 type: "object" required: - "id" - "username" - "soulBoundVerified" - "level" ProfessionLeaderboardSelf: properties: position: type: "number" description: "The requesting user's rank, -1 when the user has no entry" example: 137 level: type: "number" description: "The requesting user's level, null when the user has no entry" nullable: true example: 18 type: "object" required: - "position" ProfessionLeaderboard: properties: items: items: $ref: "#/components/schemas/ProfessionLeaderboardItem" type: "array" description: "The top players for the leaderboard, ordered by level then experience" self: $ref: "#/components/schemas/ProfessionLeaderboardSelf" description: "The requesting user's own position and level in the leaderboard" type: "object" required: - "items" - "self" BuyOrdersItemsList: properties: orderId: type: "number" takeCount: type: "number" type: "object" required: - "orderId" - "takeCount" BuyOrdersRequest: properties: wallet: type: "string" chain: type: "string" items: items: $ref: "#/components/schemas/BuyOrdersItemsList" type: "array" type: "object" required: - "wallet" - "chain" - "items" BuyStep: properties: action: type: "string" type: "object" required: - "action" BuyOperations: properties: data: items: $ref: "#/components/schemas/BuyStep" type: "array" type: "object" required: - "data" CompleteListingRequest: properties: post: type: "string" signature: type: "string" type: "object" required: - "post" - "signature" CompleteListing: properties: data: type: "object" type: "object" required: - "data" CreateListingItem: properties: collectionAddress: type: "string" tokenId: type: "string" price: type: "string" currencyAddress: type: "string" count: type: "number" validTime: type: "number" platform: type: "string" type: "object" required: - "collectionAddress" - "tokenId" - "price" - "currencyAddress" - "count" - "validTime" - "platform" CreateListingRequest: properties: walletAddress: type: "string" chain: type: "string" items: items: $ref: "#/components/schemas/CreateListingItem" type: "array" type: "object" required: - "walletAddress" - "chain" - "items" ListingRequirements: properties: post: type: "string" signatureData: type: "string" type: "object" required: - "post" - "signatureData" MarketplaceCollection: properties: chain: type: "string" contract: type: "string" name: type: "string" description: type: "string" bannerImage: type: "string" thumbImage: type: "string" volume: type: "number" totalItems: type: "number" type: "object" required: - "chain" - "contract" - "name" - "description" - "bannerImage" - "thumbImage" - "volume" - "totalItems" Order: properties: amount: type: "number" chain: type: "string" collectionAddress: type: "string" currencyAddress: type: "string" from: type: "string" to: type: "string" platform: type: "string" price: type: "number" tokenId: type: "string" txHash: type: "string" timestamp: type: "number" image: type: "string" type: "object" required: - "amount" - "chain" - "collectionAddress" - "currencyAddress" - "from" - "to" - "platform" - "price" - "tokenId" - "txHash" - "timestamp" Listing: properties: id: type: "number" chain: type: "string" contract: type: "string" status: type: "string" price: type: "string" currency: type: "string" tokenId: type: "string" maker: type: "string" name: type: "string" availableAmount: type: "string" createTime: type: "number" image: type: "string" stats: $ref: "#/components/schemas/ItemStatsResponse" description: "Onchain trading stats (1h/24h/7d price change + 24h volume) for this token" type: "object" required: - "id" - "chain" - "contract" - "status" - "price" - "currency" - "tokenId" - "maker" - "name" - "availableAmount" - "createTime" TokenPrice: properties: name: type: "string" value: type: "number" type: "object" required: - "name" - "value" Token: properties: id: type: "string" symbol: type: "string" name: type: "string" imageThumb: type: "string" imageSmall: type: "string" imageLarge: type: "string" prices: items: $ref: "#/components/schemas/TokenPrice" type: "array" type: "object" required: - "id" - "symbol" - "name" - "imageThumb" - "imageSmall" - "imageLarge" - "prices" HandleMiningRequest: properties: itemId: type: "string" type: "object" required: - "itemId" NewsArticleResponse: properties: id: type: "string" title: type: "string" slug: type: "string" status: enum: - "draft" - "published" type: "string" content: type: "string" raw_content: type: "string" external_link: type: "string" highlight_spot: type: "string" order: type: "integer" cover_image: type: "string" tags: items: type: "string" type: "array" created_at: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" updated_at: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" published_at: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" type: "object" required: - "id" - "title" - "slug" - "status" - "content" - "raw_content" - "order" - "tags" - "created_at" - "updated_at" UpdateArticleHighlightRequest: properties: smallArticleId: type: "string" largeArticleId: type: "string" type: "object" ArticleOrderItem: properties: id: type: "string" order: type: "number" type: "object" required: - "id" - "order" UpdateArticlesOrderRequest: properties: articles: items: $ref: "#/components/schemas/ArticleOrderItem" type: "array" type: "object" required: - "articles" DialogueAction: properties: type: enum: - "START_QUEST" - "COMPLETE_QUEST" - "GET_ITEM" - "GET_ITEMS" - "GET_CURRENCY" - "GIVE_CURRENCY" - "GIVE_ITEM" - "GIVE_ITEMS" - "END_DIALOGUE" - "START_DIALOGUE" - "START_MINIGAME" - "UNLOCK" - "LOCK" - "UPDATE_NPC" - "ENVIRONMENT_INTERACT" - "UPDATE_STATE" - "FIND_ITEM" - "FORCE_REMOVE_ITEM" - "MOVE_ROOM" - "ADJUST_ENVIRONMENT" - "SCOPE_WILDZEE_REGION" - "UNSCOPE_WILDZEE_REGIONS" type: "string" type: "object" required: - "type" DialogueLine: properties: id: type: "integer" text: type: "string" actions: items: $ref: "#/components/schemas/DialogueAction" type: "array" npcId: type: "string" type: "object" required: - "id" - "text" - "actions" Dialogue: properties: id: type: "string" priority: type: "integer" lines: items: $ref: "#/components/schemas/DialogueLine" type: "array" type: "object" required: - "id" - "priority" - "lines" UniqueItem: properties: id: format: "uuid" type: "string" description: "The unique item ID" amount: type: "integer" type: "object" required: - "id" SellingResult: properties: items: items: $ref: "#/components/schemas/UniqueItem" type: "array" totalPrice: type: "integer" spiritBonusAmount: type: "integer" spiritBonusMultiplier: type: "number" maskBonusAmount: type: "integer" description: "Legacy alias of spiritBonusAmount." deprecated: true maskBonusMultiplier: type: "number" description: "Legacy alias of spiritBonusMultiplier." deprecated: true type: "object" required: - "items" - "totalPrice" - "spiritBonusAmount" - "spiritBonusMultiplier" - "maskBonusAmount" - "maskBonusMultiplier" SellItemsRequest: properties: items: items: $ref: "#/components/schemas/UniqueItem" type: "array" type: "object" required: - "items" UpdateNpcRequest: properties: userId: format: "uuid" type: "string" enabled: type: "boolean" location: type: "string" emit: type: "boolean" type: "object" required: - "userId" RequestVerificationCodeByUser: properties: type: enum: - "verify_registration" - "verify_email" - "verify_email_change" - "reset_password" - "change_password" type: "string" type: "object" required: - "type" VerificationCode: properties: email: type: "string" description: "Email address where the verification code was sent" id: format: "uuid" type: "string" expireAt: type: "string" format: "date-time" description: "Timestamp when the verification code expires" resendAt: type: "string" format: "date-time" description: "Timestamp when the verification code can be resent" type: "object" required: - "email" - "id" - "expireAt" - "resendAt" AddLiquidityRequest: properties: itemId: type: "string" description: "The unique identifier of the item to provide liquidity for" example: "100" itemAmount: type: "string" description: "Amount of items to add to the pool (in wei, must be whole number). Example: \"10000000000000000000\" for 10 items" example: "10000000000000000000" pattern: "^\\d+$" maxVeeAmount: type: "string" description: "Maximum amount of VEE willing to provide (in wei). Acts as slippage protection" example: "200000000000000000000" pattern: "^\\d+$" type: "object" required: - "itemId" - "itemAmount" - "maxVeeAmount" AddLiquidityResponse: properties: veeAmount: type: "string" description: "Actual amount of VEE added to the pool (in wei)" example: "200000000000000000000" itemAmount: type: "string" description: "Amount of items added to the pool (in wei, whole number)" example: "10000000000000000000" lpTokens: type: "string" description: "Amount of LP tokens minted and given to you (in wei). Represents your share of the pool" example: "44721359549995793928" newVeeReserve: type: "string" description: "New total VEE reserve in the pool after your liquidity addition (in wei)" example: "300000000000000000000" newItemReserve: type: "string" description: "New total item reserve in the pool after your liquidity addition (in wei, whole number)" example: "15000000000000000000" totalLpSupply: type: "string" description: "Total supply of LP tokens in the pool after your addition (in wei)" example: "67082039324993690892" shareOfPool: type: "number" description: "Your percentage ownership of the pool (0-100). Higher means you own more of the pool" example: 66.67 minimum: 0 maximum: 100 type: "object" required: - "veeAmount" - "itemAmount" - "lpTokens" - "newVeeReserve" - "newItemReserve" - "totalLpSupply" - "shareOfPool" GetAddLiquidityQuoteRequest: properties: itemId: type: "string" description: "The unique identifier of the item to check liquidity quote for" example: "100" itemAmount: type: "string" description: "Amount of items you want to add (in wei, must be whole number). Quote will calculate required VEE" example: "10000000000000000000" pattern: "^\\d+$" type: "object" required: - "itemId" - "itemAmount" AddLiquidityQuoteResponse: properties: itemAmount: type: "string" description: "Amount of items you specified to add (in wei, whole number)" example: "10000000000000000000" requiredVeeAmount: type: "string" description: "Amount of VEE required to maintain pool ratio (in wei). This is calculated based on current pool reserves" example: "200000000000000000000" lpTokensToReceive: type: "string" description: "Amount of LP tokens you will receive (in wei). Represents your share of the pool" example: "44721359549995793928" shareOfPool: type: "number" description: "Your percentage of total pool ownership after adding liquidity (0-100)" example: 33.33 minimum: 0 maximum: 100 canAfford: type: "boolean" description: "Whether you have sufficient VEE and items in your balance to complete this transaction" example: true type: "object" required: - "itemAmount" - "requiredVeeAmount" - "lpTokensToReceive" - "shareOfPool" - "canAfford" GetCandlesRequest: properties: interval: type: "string" enum: - "1m" - "5m" - "15m" - "1h" - "4h" - "1d" description: "Time interval for each candle. Determines the granularity of price data" example: "1h" limit: maximum: 1000 type: "integer" minimum: 1 description: "Maximum number of candles to return. Use lower values for faster response" example: 100 default: 100 startTime: description: "Start time for candle data (ISO 8601 format). Only candles after this time are returned" example: "2025-11-07T00:00:00.000Z" type: "string" format: "date-time" endTime: description: "End time for candle data (ISO 8601 format). Only candles before this time are returned" example: "2025-11-08T00:00:00.000Z" type: "string" format: "date-time" type: "object" required: - "interval" CandleData: properties: timestamp: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" description: "Timestamp for the start of this candle period" example: "2025-11-07T14:00:00.000Z" open: type: "string" description: "Opening price for this period (VEE per item in wei). First trade price in the period" example: "20000000000000000000" high: type: "string" description: "Highest price reached during this period (VEE per item in wei)" example: "22000000000000000000" low: type: "string" description: "Lowest price reached during this period (VEE per item in wei)" example: "19000000000000000000" close: type: "string" description: "Closing price for this period (VEE per item in wei). Last trade price in the period" example: "21000000000000000000" volumeVee: type: "string" description: "Total VEE volume traded during this period (in wei)" example: "500000000000000000000" volumeItems: type: "string" description: "Total items volume traded during this period (in wei, always whole numbers)" example: "25000000000000000000" tradesCount: type: "number" description: "Number of trades executed during this period" example: 15 minimum: 0 interval: type: "string" description: "Time interval of this candle" example: "1h" enum: - "1m" - "5m" - "15m" - "1h" - "4h" - "1d" type: "object" required: - "timestamp" - "open" - "high" - "low" - "close" - "volumeVee" - "volumeItems" - "tradesCount" - "interval" PoolResponse: properties: id: type: "string" description: "Unique identifier of the pool" example: "d42d3bbd-f5aa-4383-87c0-bc8924148722" token0: type: "string" description: "First token in the trading pair. Usually the VEE currency" example: "1" token1: type: "string" description: "Second token in the trading pair. The item being traded (boots, armor, etc.)" example: "100" reserve0: type: "string" description: "Reserve of token0 in the pool (in wei). Available liquidity for trading" example: "100000000000000000000" reserve1: type: "string" description: "Reserve of token1 in the pool (in wei, whole number for items). Available liquidity for trading" example: "5000000000000000000" protocolFee: type: "number" description: "Protocol fee percentage (0-1). This fee is burned/destroyed on each trade. Example: 0.01 = 1%" example: 0.01 minimum: 0 maximum: 1 liquidityProviderFee: type: "number" description: "Liquidity provider fee percentage (0-1). This fee stays in the pool as rewards for LPs. Example: 0.01 = 1%" example: 0.01 minimum: 0 maximum: 1 totalLpSupply: type: "string" description: "Total supply of LP tokens in the pool (in wei)" example: "22360679774997896964" stats: $ref: "#/components/schemas/ItemStatsResponse" description: "Price change (1h/24h/7d) and 24h trading volume for the item traded in this pool" type: "object" required: - "id" - "token0" - "token1" - "reserve0" - "reserve1" - "protocolFee" - "liquidityProviderFee" - "totalLpSupply" GetRecentTradesRequest: properties: page: minimum: 1 type: "integer" example: 7 default: 1 limit: maximum: 250 type: "integer" minimum: 1 description: "Maximum number of recent trades to return. Latest trades are returned first" example: 50 default: 250 type: "object" TradeData: properties: type: type: "string" enum: - "buy" - "sell" description: "Type of trade: \"buy\" (VEE for items) or \"sell\" (items for VEE)" example: "buy" veeAmount: type: "string" description: "Amount of VEE involved in this trade (in wei)" example: "20000000000000000000" itemAmount: type: "string" description: "Amount of items involved in this trade (in wei, whole number)" example: "1000000000000000000" price: type: "string" description: "Execution price of this trade (VEE per item in wei)" example: "20000000000000000000" timestamp: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" description: "When this trade was executed" example: "2025-11-07T14:32:15.123Z" type: "object" required: - "type" - "veeAmount" - "itemAmount" - "price" - "timestamp" GetRemoveLiquidityQuoteRequest: properties: itemId: type: "string" description: "The unique identifier of the item pool" example: "100" lpTokens: type: "string" description: "Amount of LP tokens you want to burn (in wei). Quote will show how much VEE and items you will receive" example: "44721359549995793928" pattern: "^\\d+$" type: "object" required: - "itemId" - "lpTokens" RemoveLiquidityQuoteResponse: properties: lpTokens: type: "string" description: "Amount of LP tokens you specified to burn (in wei)" example: "22360679774997896964" veeToReceive: type: "string" description: "Amount of VEE you will receive (in wei). Calculated from your LP token share" example: "100000000000000000000" itemsToReceive: type: "string" description: "Amount of items you will receive (in wei, whole number). Calculated from your LP token share" example: "5000000000000000000" shareOfPool: type: "number" description: "Percentage of the pool these LP tokens represent (0-100)" example: 50 minimum: 0 maximum: 100 canAfford: type: "boolean" description: "Whether you have sufficient LP tokens to complete this removal" example: true type: "object" required: - "lpTokens" - "veeToReceive" - "itemsToReceive" - "shareOfPool" - "canAfford" GetTraderLeaderboardRequest: properties: period: type: "string" enum: - "24h" - "7d" - "30d" - "all" default: "7d" metric: type: "string" enum: - "pnl" - "volume" default: "pnl" limit: maximum: 100 type: "integer" minimum: 1 default: 50 type: "object" required: - "period" - "metric" - "limit" TraderLeaderboardEntry: properties: rank: minimum: 1 type: "integer" username: type: "string" avatar: type: "string" pnlVee: type: "number" description: "Realized market-only P&L in display VEE, using average purchase cost. Earlier buys establish cost basis. Unmatched sell quantities and non-market inventory movements are excluded; recorded amounts already include fees." volumeVee: minimum: 0 type: "number" description: "Total fee-adjusted VEE paid or received in the requested period, in display units." trades: minimum: 0 type: "integer" type: "object" required: - "rank" - "username" - "pnlVee" - "volumeVee" - "trades" LiquidityPositionsByPoolId: properties: lpTokens: type: "string" description: "Your LP token balance for this pool (in wei). Can be burned to retrieve VEE and items" example: "44721359549995793928" veeValue: type: "string" description: "Current VEE value of your LP tokens (in wei). This is your share of the pool's VEE reserves" example: "100000000000000000000" itemValue: type: "string" description: "Current item value of your LP tokens (in wei, whole number). This is your share of the pool's item reserves" example: "5000000000000000000" shareOfPool: type: "number" description: "Your percentage ownership of this pool (0-100). Higher percentage means larger share of trading fees" example: 33.33 minimum: 0 maximum: 100 type: "object" required: - "lpTokens" - "veeValue" - "itemValue" - "shareOfPool" LiquidityPosition: properties: poolId: type: "string" description: "Unique identifier of the pool where you provided liquidity" example: "d42d3bbd-f5aa-4383-87c0-bc8924148722" itemId: type: "string" description: "Item identifier in this pool" example: "100" lpTokens: type: "string" description: "Your LP token balance for this pool (in wei). Can be burned to retrieve VEE and items" example: "44721359549995793928" veeValue: type: "string" description: "Current VEE value of your LP tokens (in wei). This is your share of the pool's VEE reserves" example: "100000000000000000000" itemValue: type: "string" description: "Current item value of your LP tokens (in wei, whole number). This is your share of the pool's item reserves" example: "5000000000000000000" shareOfPool: type: "number" description: "Your percentage ownership of this pool (0-100). Higher percentage means larger share of trading fees" example: 33.33 minimum: 0 maximum: 100 type: "object" required: - "poolId" - "itemId" - "lpTokens" - "veeValue" - "itemValue" - "shareOfPool" RemoveLiquidityRequest: properties: itemId: type: "string" description: "The unique identifier of the item pool to remove liquidity from" example: "100" lpTokens: type: "string" description: "Amount of LP tokens to burn (in wei). You will receive proportional VEE and items" example: "44721359549995793928" pattern: "^\\d+$" minVeeAmount: type: "string" description: "Minimum VEE amount to receive (in wei). Transaction fails if actual amount is less. Slippage protection" example: "90000000000000000000" pattern: "^\\d+$" minItemAmount: type: "string" description: "Minimum item amount to receive (in wei, whole number). Transaction fails if actual amount is less. Slippage protection" example: "9000000000000000000" pattern: "^\\d+$" type: "object" required: - "itemId" - "lpTokens" - "minVeeAmount" - "minItemAmount" RemoveLiquidityResponse: properties: veeAmount: type: "string" description: "Amount of VEE returned to you (in wei)" example: "100000000000000000000" itemAmount: type: "string" description: "Amount of items returned to you (in wei, whole number)" example: "5000000000000000000" lpTokensBurned: type: "string" description: "Amount of LP tokens burned from your balance (in wei)" example: "22360679774997896964" newVeeReserve: type: "string" description: "New total VEE reserve in the pool after liquidity removal (in wei)" example: "200000000000000000000" newItemReserve: type: "string" description: "New total item reserve in the pool after liquidity removal (in wei, whole number)" example: "10000000000000000000" totalLpSupply: type: "string" description: "Total supply of LP tokens remaining in the pool (in wei)" example: "44721359549995793928" type: "object" required: - "veeAmount" - "itemAmount" - "lpTokensBurned" - "newVeeReserve" - "newItemReserve" - "totalLpSupply" AdjustLiquidityRequest: properties: itemId: type: "string" description: "The unique identifier of the item to provide liquidity for" example: "100" itemAmount: type: "string" description: "Amount of items to add to the pool (in wei, must be whole number). Example: \"10000000000000000000\" for 10 items" example: "10000000000000000000" pattern: "^\\d+$" veeAmount: type: "string" description: "Amount of VEE to add to the pool (in wei, must be whole number). Example: \"200000000000000000000\" for 20 VEE" example: "200000000000000000000" pattern: "^\\d+$" type: "object" required: - "itemId" - "itemAmount" - "veeAmount" CreatePoolRequest: properties: token0: type: "string" description: "First token in the trading pair. Usually the VEE currency" example: "1" token1: type: "string" description: "Second token in the trading pair. The item being traded (boots, armor, etc.)" example: "100" reserve0: type: "string" description: "Reserve of token0 in the pool (in wei). Available liquidity for trading" example: "100000000000000000000" reserve1: type: "string" description: "Reserve of token1 in the pool (in wei, whole number for items). Available liquidity for trading" example: "5000000000000000000" protocolFee: type: "string" description: "Protocol fee percentage (0-1). This fee is burned/destroyed on each trade. Example: 0.01 = 1%" example: "0.01" minimum: 0 maximum: 1 liquidityProviderFee: type: "string" description: "Liquidity provider fee percentage (0-1). This fee stays in the pool as rewards for LPs. Example: 0.01 = 1%" example: "0.01" minimum: 0 maximum: 1 enabled: type: "boolean" description: "Whether or not the pool is enabled" example: true type: "object" required: - "token0" - "token1" - "reserve0" - "reserve1" - "protocolFee" - "liquidityProviderFee" - "enabled" TradesStats: properties: total: type: "number" description: "Total trades" example: 100 last24h: type: "number" description: "Total trades in last 24h" example: 10 prev24h: type: "number" description: "Total trades in previous 24h" example: 10 totalProtocolFee: type: "string" description: "Total protocol fees" example: "10" totalLpFee: type: "string" description: "Total LP fees" example: "10" type: "object" required: - "total" - "last24h" - "prev24h" - "totalProtocolFee" - "totalLpFee" LiquidityPositionsStats: properties: total: type: "number" description: "Total liquidity positions" example: 100 last24h: type: "number" description: "Total liquidity positions in last 24h" example: 10 prev24h: type: "number" description: "Total liquidity positions in previous 24h" example: 10 type: "object" required: - "total" - "last24h" - "prev24h" ServicePoolResponse: properties: id: type: "string" description: "Unique identifier of the pool" example: "d42d3bbd-f5aa-4383-87c0-bc8924148722" token0: type: "string" description: "First token in the trading pair. Usually the VEE currency" example: "1" token1: type: "string" description: "Second token in the trading pair. The item being traded (boots, armor, etc.)" example: "100" reserve0: type: "string" description: "Reserve of token0 in the pool (in wei). Available liquidity for trading" example: "100000000000000000000" reserve1: type: "string" description: "Reserve of token1 in the pool (in wei, whole number for items). Available liquidity for trading" example: "5000000000000000000" protocolFee: type: "number" description: "Protocol fee percentage (0-1). This fee is burned/destroyed on each trade. Example: 0.01 = 1%" example: 0.01 minimum: 0 maximum: 1 liquidityProviderFee: type: "number" description: "Liquidity provider fee percentage (0-1). This fee stays in the pool as rewards for LPs. Example: 0.01 = 1%" example: 0.01 minimum: 0 maximum: 1 totalLpSupply: type: "string" description: "Total supply of LP tokens in the pool (in wei)" example: "22360679774997896964" enabled: type: "boolean" description: "Whether or not the pool is enabled" example: true updatedAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" description: "The last time the pool was updated" example: "2025-11-07T14:00:00.000Z" createdAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" description: "The last time the pool was updated" example: "2025-11-07T14:00:00.000Z" trades: $ref: "#/components/schemas/TradesStats" type: "object" description: "Trades stats" example: total: 100 last24h: 10 prev24h: 10 liquidityPositions: $ref: "#/components/schemas/LiquidityPositionsStats" type: "object" description: "Liquidity positions stats" example: total: 100 last24h: 10 prev24h: 10 type: "object" required: - "id" - "token0" - "token1" - "reserve0" - "reserve1" - "protocolFee" - "liquidityProviderFee" - "totalLpSupply" - "enabled" - "updatedAt" - "createdAt" - "trades" - "liquidityPositions" SwapItemsForVeeRequest: properties: itemId: pattern: "^\\d+$" type: "string" description: "The unique identifier of the item you want to sell" example: "100" itemAmount: pattern: "^\\d+$" type: "string" description: "Amount of items to sell (in wei, must be whole number). Example: \"1000000000000000000\" for 1 item" example: "1000000000000000000" minVeeAmount: pattern: "^\\d+$" type: "string" description: "Minimum VEE amount you are willing to receive (in wei). Transaction fails if actual amount is less. Protects against slippage" example: "19000000000000000000" type: "object" required: - "itemId" - "itemAmount" - "minVeeAmount" SwapOutcomeResponse: properties: newVeeReserve: type: "string" description: "New VEE reserve in the pool after your swap (in wei). Shows updated pool liquidity" example: "125510204081632653062" newItemReserve: type: "string" description: "New item reserve in the pool after your swap (in wei, whole number). Shows updated pool liquidity" example: "4000000000000000000" type: "object" required: - "newVeeReserve" - "newItemReserve" SwapVeeForItemsRequest: properties: itemId: pattern: "^\\d+$" type: "string" description: "The unique identifier of the item you want to buy" example: "100" itemAmount: pattern: "^\\d+$" type: "string" description: "Amount of items you want to buy (in wei, must be whole number). Example: \"1000000000000000000\" for 1 item" example: "1000000000000000000" maxVeeAmount: pattern: "^\\d+$" type: "string" description: "Maximum VEE amount you are willing to spend (in wei). Transaction fails if actual cost is more. Protects against slippage" example: "25000000000000000000" type: "object" required: - "itemId" - "itemAmount" - "maxVeeAmount" CreateOffchainListingRequest: properties: type: enum: - "zee" - "items" type: "string" description: "The type of listing" example: "zee" itemId: type: "string" description: "Token ID of the item or unique ID of the zee" example: "2000000001" amount: minimum: 1 type: "number" description: "The amount of items to list" example: 5 price: type: "string" description: "The listing price in offchain VEE (wei)" example: "1000000000000000000" pattern: "^\\d+$" type: "object" required: - "type" - "itemId" - "amount" - "price" OffchainMarketplaceListingUser: properties: id: type: "string" description: "ID of the user" example: "550e8400-e29b-41d4-a716-446655440001" username: type: "string" description: "Username of the user" example: "John Doe" avatar: type: "string" description: "Avatar URL of the user" example: "https://example.com/avatar.jpg" type: "object" OffchainMarketplaceListingMetadata: properties: id: format: "uuid" type: "string" description: "Unique identifier of the item" example: "550e8400-e29b-41d4-a716-446655440000" itemId: type: "string" description: "Item token ID. Present only for \"items\" listings." example: "2100420103" name: type: "string" description: "Name of the item" example: "My Awesome Item" type: type: "string" description: "Type of the item" example: "fire" visual: type: "string" description: "Visual of the item" example: "Zoomba" image: type: "string" description: "Image URL of the item" example: 1 type: "object" required: - "name" - "image" OffchainMarketplaceBaseListingResponse: properties: id: type: "string" description: "Unique identifier of the listing" example: "550e8400-e29b-41d4-a716-446655440000" type: enum: - "zee" - "items" type: "string" description: "Type of listing: \"zee\" or \"items\"" example: "zee" metadata: $ref: "#/components/schemas/OffchainMarketplaceListingMetadata" description: "Metadata of the listed item" amount: type: "number" description: "Amount of items listed" example: 1 price: type: "string" description: "Listing price in OFFCHAIN_VEE" example: "1000000000000000000" createdAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" description: "When the listing was created" example: "2025-11-07T14:00:00.000Z" stats: $ref: "#/components/schemas/ItemStatsResponse" description: "Trading stats (1h/24h/7d price change and 24h volume) for the item referenced by this listing" type: "object" required: - "id" - "type" - "amount" - "price" - "createdAt" SearchListingsRequest: properties: type: items: enum: - "zee" - "items" type: "string" type: "array" description: "Filter by one or more listing types" example: - "zee" - "items" evolution: items: minimum: 1 type: "number" type: "array" description: "Filter by one or more evolution levels" example: - 1 - 2 minimum: 1 zeeType: items: type: "string" type: "array" description: "Filter by one or more ZEE types" example: - "fire" - "water" visual: items: type: "string" type: "array" description: "Filter ZEE listings by one or more visuals" example: - "Zoomba" - "Taka" itemId: items: type: "string" type: "array" description: "Filter item listings by one or more item token ids" example: - "1" - "42" level: items: minimum: 1 type: "number" type: "array" description: "Filter by one or more levels" example: - 1 - 10 minimum: 1 trait1: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the first creature trait slot" example: - "damage" - "speed" trait2: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the second creature trait slot" example: - "defense" trait3: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the third creature trait slot" example: - "critical" trait4: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the fourth creature trait slot" example: - "hitpoints" minPrice: type: "string" description: "Minimum price in offchain VEE (wei)" example: "1000000000000000000" pattern: "^\\d+$" maxPrice: type: "string" description: "Maximum price in offchain VEE (wei)" example: "10000000000000000000" pattern: "^\\d+$" query: type: "string" description: "Search keyword to find listings by name or attributes" example: "Metal Axe, Axe" excludeOwnListings: type: "boolean" description: "Exclude listings created by the authenticated user" example: true default: false sortBy: enum: - "price_asc" - "price_desc" - "created_desc" type: "string" description: "Sort order for results" example: "price_asc" page: minimum: 1 type: "number" description: "Page number for pagination" example: 1 perPage: maximum: 100 type: "number" minimum: 1 description: "Number of items per page" example: 20 showAll: type: "boolean" description: "Return every active item listing without deduping by token id (default returns only the cheapest per item). Pass `?showAll` (no value) or `?showAll=true` to enable." example: true default: false type: "object" HistoryListingsRequest: properties: type: enum: - "zee" - "items" type: "string" description: "Filter by listing type" example: "zee" evolution: type: "number" description: "Filter by evolution level" example: 1 minimum: 1 level: type: "number" description: "Filter by level" example: 1 minimum: 1 visual: items: type: "string" type: "array" description: "Filter ZEE listings by one or more visuals" example: - "Zoomba" - "Taka" itemId: items: type: "string" type: "array" description: "Filter item listings by one or more item token ids" example: - "1" - "42" query: type: "string" description: "Search keyword to find listings by name or attributes" example: "Metal Axe, Axe" trait1: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the first creature trait slot" example: - "damage" - "speed" trait2: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the second creature trait slot" example: - "defense" trait3: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the third creature trait slot" example: - "critical" trait4: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the fourth creature trait slot" example: - "hitpoints" excludeOwnListings: type: "boolean" description: "Exclude listings created by the authenticated user" example: true default: false page: minimum: 1 type: "number" description: "Page number for pagination" example: 1 perPage: maximum: 100 type: "number" minimum: 1 description: "Number of items per page" example: 20 type: "object" ListingResponse: properties: seller: $ref: "#/components/schemas/OffchainMarketplaceListingUser" description: "Details of the seller" id: type: "string" description: "Unique identifier of the listing" example: "550e8400-e29b-41d4-a716-446655440000" type: enum: - "zee" - "items" type: "string" description: "Type of listing: \"zee\" or \"items\"" example: "zee" metadata: $ref: "#/components/schemas/OffchainMarketplaceListingMetadata" description: "Metadata of the listed item" amount: type: "number" description: "Amount of items listed" example: 1 price: type: "string" description: "Listing price in OFFCHAIN_VEE" example: "1000000000000000000" createdAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" description: "When the listing was created" example: "2025-11-07T14:00:00.000Z" stats: $ref: "#/components/schemas/ItemStatsResponse" description: "Trading stats (1h/24h/7d price change and 24h volume) for the item referenced by this listing" type: "object" required: - "seller" - "id" - "type" - "amount" - "price" - "createdAt" ListingWithBuyerResponse: properties: buyer: $ref: "#/components/schemas/OffchainMarketplaceListingUser" description: "Details of the buyer" id: type: "string" description: "Unique identifier of the listing" example: "550e8400-e29b-41d4-a716-446655440000" type: enum: - "zee" - "items" type: "string" description: "Type of listing: \"zee\" or \"items\"" example: "zee" metadata: $ref: "#/components/schemas/OffchainMarketplaceListingMetadata" description: "Metadata of the listed item" amount: type: "number" description: "Amount of items listed" example: 1 price: type: "string" description: "Listing price in OFFCHAIN_VEE" example: "1000000000000000000" createdAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" description: "When the listing was created" example: "2025-11-07T14:00:00.000Z" stats: $ref: "#/components/schemas/ItemStatsResponse" description: "Trading stats (1h/24h/7d price change and 24h volume) for the item referenced by this listing" seller: $ref: "#/components/schemas/OffchainMarketplaceListingUser" description: "Details of the seller" type: "object" required: - "buyer" - "id" - "type" - "amount" - "price" - "createdAt" - "seller" PurchaseListingRequest: properties: amount: minimum: 1 type: "integer" description: "Optional amount to purchase from an item listing. If omitted, the full remaining listing amount is purchased." example: 1 type: "object" ClaimDailyRewardRequest: properties: address: type: "string" signature: type: "string" type: "object" required: - "address" - "signature" ClaimDailyRewardResponse: properties: pointsEarned: type: "number" currentStreak: type: "number" isWeeklyBonus: type: "boolean" type: "object" required: - "pointsEarned" - "currentStreak" - "isWeeklyBonus" ClaimTaskRequest: properties: taskId: type: "string" type: "object" required: - "taskId" ClaimedTaskResponse: properties: points: type: "number" type: "object" required: - "points" GetDailyRewardSignatureRequest: properties: address: type: "string" type: type: "string" chainId: type: "string" type: "object" required: - "address" - "type" - "chainId" GetDailyRewardSignatureResponse: properties: phrase: type: "string" type: "object" required: - "phrase" UserMultiplierListItem: properties: id: type: "string" collection: type: "string" multiplier: type: "number" perItem: type: "number" amount: type: "number" active: type: "boolean" type: "object" required: - "id" - "collection" - "multiplier" - "perItem" - "amount" - "active" UserTask: properties: id: type: "string" points: type: "number" title: type: "string" description: type: "string" metadata: type: "object" completed: type: "boolean" claimed: type: "boolean" pointsRewarded: type: "number" expires: type: "string" source: type: "string" type: "object" required: - "id" - "points" - "title" - "description" - "completed" - "claimed" - "pointsRewarded" P2ATasks: properties: ambassador: items: $ref: "#/components/schemas/UserTask" type: "array" quests: items: $ref: "#/components/schemas/UserTask" type: "array" social: items: $ref: "#/components/schemas/UserTask" type: "array" mini: items: $ref: "#/components/schemas/UserTask" type: "array" type: "object" required: - "ambassador" - "quests" - "social" - "mini" AmbassadorNetwork: properties: points: type: "number" ambassadorLevel: type: "number" level: type: "number" modifier: type: "number" type: "object" required: - "points" - "ambassadorLevel" - "level" - "modifier" P2APoints: properties: total: type: "number" user: type: "number" ambassador: type: "number" type: "object" required: - "total" - "user" - "ambassador" P2AAmbassador: properties: level: type: "number" network: items: $ref: "#/components/schemas/AmbassadorNetwork" type: "array" type: "object" required: - "level" - "network" P2ADailyReward: properties: canClaim: type: "boolean" currentStreak: type: "number" totalPoints: type: "number" type: "object" required: - "canClaim" - "currentStreak" - "totalPoints" UserP2ADataResponse: properties: points: $ref: "#/components/schemas/P2APoints" type: "object" ambassador: $ref: "#/components/schemas/P2AAmbassador" type: "object" tasks: $ref: "#/components/schemas/P2ATasks" type: "object" multipliers: items: $ref: "#/components/schemas/UserMultiplierListItem" type: "array" daily: $ref: "#/components/schemas/P2ADailyReward" type: "object" type: "object" required: - "points" - "ambassador" - "tasks" - "multipliers" PartyLobbyEventBoxResponse: properties: id: type: "string" boxId: type: "string" partyLobbyEventId: type: "string" droppedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" claimedBy: type: "string" claimedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" slots: items: {} type: "array" createdAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" updatedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" chainId: type: "number" type: "object" required: - "id" - "boxId" - "partyLobbyEventId" - "slots" - "createdAt" - "updatedAt" PartyLobbyEventResponse: properties: id: type: "string" partyLobbyId: type: "string" startAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" endsAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" totalWaves: type: "number" dropEmptyBoxes: type: "boolean" emptyBoxesRatio: type: "number" eventStartLock: type: "boolean" waveLength: type: "number" announcementTimer: type: "number" boxDropBuffer: type: "number" rewardsAirdropped: type: "boolean" createdAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" updatedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" boxes: items: $ref: "#/components/schemas/PartyLobbyEventBoxResponse" type: "array" type: "object" required: - "id" - "partyLobbyId" - "startAt" - "endsAt" - "totalWaves" - "dropEmptyBoxes" - "emptyBoxesRatio" - "eventStartLock" - "waveLength" - "announcementTimer" - "boxDropBuffer" - "rewardsAirdropped" - "createdAt" - "updatedAt" - "boxes" ListPartyLobbyEventsQuery: properties: page: minimum: 1 type: "integer" limit: maximum: 100 type: "integer" minimum: 1 type: "object" Process: properties: id: format: "uuid" type: "string" key: type: "string" createdAt: type: "string" format: "date-time" endAt: type: "string" format: "date-time" type: "object" required: - "id" - "key" - "createdAt" - "endAt" UserProfession: properties: key: type: "string" description: "Profession key" example: "fishing" level: type: "number" description: "The user's current level in the profession" example: 12 experience: type: "number" description: "The user's accumulated experience in the profession" example: 3400 maxLevel: type: "number" description: "The maximum level achievable for the profession" example: 99 maxExperience: type: "number" description: "Experience cap for the current level (threshold required to reach the next level)" example: 1200 type: "object" required: - "key" - "level" - "experience" - "maxLevel" - "maxExperience" UserProfessionList: properties: items: items: $ref: "#/components/schemas/UserProfession" type: "array" type: "object" required: - "items" TrackProfessionRequest: properties: trigger: type: "string" experience: type: "number" description: "Base experience used by percentage-based triggers (e.g. taming pve/pvp). Ignored by flat triggers." emit: type: "boolean" description: "Determines if the updated profession data should be emitted to the client, default - true" skipSaving: type: "boolean" description: "Determines if the updated profession data should be saved, default - false" type: "object" required: - "trigger" UpdateProfessionLevelRequest: properties: level: minimum: 1 type: "integer" description: "New level to assign to the user profession (clamped to the profession max)" example: 10 experience: minimum: 0 type: "integer" description: "Optional experience value to set for the profession" example: 3400 type: "object" required: - "level" QaItem: properties: itemId: type: "integer" description: "Item ID as defined in items/items.json" amount: type: "integer" storage: enum: - "stash" - "inventory" type: "string" description: "Where to place the item. Defaults to inventory." type: "object" required: - "itemId" - "amount" QaCreature: properties: visual: type: "string" description: "Creature visual key (e.g. \"taka\")." level: type: "integer" evolution: type: "integer" type: "object" required: - "visual" QaProfession: properties: key: type: "string" description: "Profession key (e.g. \"fishing\")." level: type: "integer" experience: type: "number" type: "object" required: - "key" - "level" GenerateQaAccountRequest: properties: email: type: "string" username: minLength: 3 type: "string" description: "Account nickname / username." password: minLength: 1 type: "string" completedQuestIds: items: type: "string" type: "array" description: "Quest ids to force-complete for the new user." items: items: $ref: "#/components/schemas/QaItem" type: "array" creatures: items: $ref: "#/components/schemas/QaCreature" type: "array" professions: items: $ref: "#/components/schemas/QaProfession" type: "array" energy: type: "integer" description: "Starting energy amount (raises max energy if higher)." soulShard: type: "boolean" description: "Activate soulshard (flag + verification record)." tutorialCompleted: type: "boolean" description: "Mark the tutorial as completed." type: "object" required: - "email" - "username" - "password" GenerateQaAccountResponse: properties: userId: type: "string" email: type: "string" username: type: "string" warnings: items: type: "string" type: "array" type: "object" required: - "userId" - "email" - "username" - "warnings" Quest: properties: id: type: "string" description: "The quest ID as defined in logic files." objectiveId: type: "integer" description: "The current objective ID. Will be null if the quest is not active." nullable: true objectives: items: $ref: "#/components/schemas/QuestObjective" type: "array" description: "List of objectives for the quest. Depending on the context, can be null" nullable: true status: enum: - "available" - "active" - "completed" type: "string" description: "The current status of the quest." createdAt: type: "string" description: "The timestamp when the quest was started. Will be null if the quest is not active." nullable: true finishedAt: type: "string" description: "The timestamp when the quest was completed. Will be null if the quest is not completed." nullable: true type: "object" required: - "id" - "objectiveId" - "status" - "createdAt" - "finishedAt" CompleteQuestRequest: properties: userId: format: "uuid" type: "string" questId: type: "string" type: "object" required: - "userId" - "questId" CorruptedQuest: properties: id: type: "string" description: "The quest ID as defined in logic files." objectiveId: type: "integer" description: "The current objective ID. Will be null if the quest is not active." nullable: true userId: format: "uuid" type: "string" records: items: {} type: "array" type: "object" required: - "id" - "objectiveId" - "userId" - "records" QuestObjectiveState: properties: status: type: "string" records: items: {} type: "array" type: "object" required: - "status" - "records" StartQuestRequest: properties: id: type: "string" userId: format: "uuid" type: "string" type: "object" required: - "id" - "userId" StartUserQuestRequest: properties: questId: type: "string" description: "Logic quest id, e.g. \"intro/fyf_waking_up\"." example: "intro/fyf_waking_up" type: "object" required: - "questId" ReferralCodeCheck: properties: referral: type: "string" type: "object" required: - "referral" User: properties: id: type: "string" format: "uuid" email: type: "string" username: type: "string" avatar: type: "string" type: "object" required: - "id" - "email" - "username" - "avatar" Stakes: properties: transactionId: type: "string" amount: type: "string" createdAt: type: "string" updatedAt: type: "string" level: type: "number" token: type: "string" chainId: type: "number" address: type: "string" type: "object" required: - "transactionId" - "amount" - "createdAt" - "updatedAt" - "level" - "token" - "chainId" - "address" Referrals: properties: id: type: "string" userId: type: "string" type: "object" required: - "id" - "userId" AmbassadorResponse: properties: id: type: "string" userId: type: "string" level: type: "string" isActive: type: "boolean" skipOnboarding: type: "boolean" activeLevel: type: "number" createdAt: type: "string" user: $ref: "#/components/schemas/User" type: "object" stakes: $ref: "#/components/schemas/Stakes" items: {} type: "array" referrals: $ref: "#/components/schemas/Referrals" items: {} type: "array" type: "object" required: - "id" - "userId" - "level" - "isActive" - "skipOnboarding" - "activeLevel" - "createdAt" - "user" - "stakes" - "referrals" TransactionResponse: properties: id: type: "string" userId: type: "string" amount: type: "string" createdAt: type: "string" updatedAt: type: "string" token: type: "string" sourceType: type: "string" sourceId: type: "string" tokenId: type: "string" user: $ref: "#/components/schemas/User" type: "object" status: type: "string" transactionHash: type: "string" errorMessage: type: "string" type: "object" required: - "id" - "userId" - "amount" - "createdAt" - "updatedAt" - "token" - "sourceType" - "sourceId" - "tokenId" - "user" - "status" - "transactionHash" - "errorMessage" PreStakeRequest: properties: userId: type: "string" level: type: "number" type: "object" required: - "userId" - "level" CollectorSocialAccount: properties: provider: type: "string" value: type: "string" name: type: "string" url: type: "string" type: "object" required: - "provider" CollectorsItemContract: properties: address: type: "string" collection: type: "string" name: type: "string" description: type: "string" imageUrl: type: "string" type: "object" required: - "address" CollectorsCollection: properties: contract: $ref: "#/components/schemas/CollectorsItemContract" type: "object" itemId: type: "string" tokenStandard: type: "string" amount: type: "number" owner: type: "string" metadata: type: "object" type: "object" required: - "contract" - "itemId" - "tokenStandard" - "amount" - "owner" CollectorsTotemItemQualifierUserCollectionDataItem: properties: itemId: type: "string" contract: type: "string" type: "object" required: - "itemId" - "contract" CollectorsTotemItemQualifierUserCollectionData: properties: items: items: $ref: "#/components/schemas/CollectorsTotemItemQualifierUserCollectionDataItem" type: "array" points: type: "number" type: "object" required: - "items" - "points" CollectorsTotemItemQualifier: properties: id: type: "string" description: type: "string" points: type: "number" type: type: "string" userCollectionData: $ref: "#/components/schemas/CollectorsTotemItemQualifierUserCollectionData" type: "object" type: "object" required: - "id" - "description" - "points" - "type" - "userCollectionData" CollectorsTotemItem: properties: id: type: "string" i18nKey: type: "string" title: type: "string" qualifiers: items: $ref: "#/components/schemas/CollectorsTotemItemQualifier" type: "array" type: "object" required: - "id" - "i18nKey" - "title" - "qualifiers" CollectorsTotems: properties: masks: items: $ref: "#/components/schemas/CollectorsTotemItem" type: "array" lands: items: $ref: "#/components/schemas/CollectorsTotemItem" type: "array" combo: items: $ref: "#/components/schemas/CollectorsTotemItem" type: "array" misc: items: $ref: "#/components/schemas/CollectorsTotemItem" type: "array" type: "object" required: - "masks" - "lands" - "combo" - "misc" CollectorProfile: properties: collectorRank: $ref: "#/components/schemas/CollectorRank" type: "object" shamanRanks: items: $ref: "#/components/schemas/ShamanRank" type: "array" username: type: "string" avatar: type: "string" registeredAt: type: "string" format: "date-time" nullable: false social: items: $ref: "#/components/schemas/CollectorSocialAccount" type: "array" collections: items: $ref: "#/components/schemas/CollectorsCollection" type: "array" totems: $ref: "#/components/schemas/CollectorsTotems" type: "object" type: "object" required: - "collectorRank" - "shamanRanks" - "username" - "registeredAt" - "social" - "collections" - "totems" CollectorsProfileMinimal: properties: collections: items: $ref: "#/components/schemas/CollectorsCollection" type: "array" totems: $ref: "#/components/schemas/CollectorsTotems" type: "object" type: "object" required: - "collections" - "totems" GetFeatureFlagResponse: properties: flagName: type: "string" enabled: type: "boolean" type: "object" required: - "flagName" - "enabled" GetAllFeatureFlagsResponse: properties: flags: items: $ref: "#/components/schemas/GetFeatureFlagResponse" type: "array" type: "object" required: - "flags" ToggleFeatureFlagRequest: properties: enable: type: "boolean" type: "object" required: - "enable" FullGameSetting: properties: id: type: "number" key: type: "string" value: not: type: "null" platform: type: "string" visibility: type: "string" type: "object" required: - "id" - "key" - "value" - "platform" - "visibility" UpdateGameSetting: properties: value: type: "string" platform: type: "string" type: "object" required: - "value" GetItemsLimitData: properties: itemIds: type: "string" type: "object" required: - "itemIds" ItemLimitState: properties: itemId: type: "string" limitReached: type: "boolean" type: "object" required: - "itemId" - "limitReached" UpdateLandRequest: properties: url: maxLength: 2048 type: "string" socket: maxLength: 255 type: "string" finishedAt: pattern: "\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?" type: "string" status: enum: - "pending" - "processing" - "completed" - "failed" type: "string" reasoning: maxLength: 5000 type: "string" shape: maxLength: 255 type: "string" shapeUrl: maxLength: 2048 type: "string" type: "object" TopEarner: properties: id: format: "uuid" type: "string" username: type: "string" avatar: type: "string" nullable: true earnings: type: "number" soulBoundVerified: type: "boolean" registrationCompleted: type: "boolean" type: "object" required: - "id" - "username" - "avatar" - "earnings" - "soulBoundVerified" - "registrationCompleted" MetadataStatsCache: properties: exists: type: "boolean" ttl: type: "number" type: "object" required: - "exists" MetadataStatsResizedImage: properties: url: type: "string" date: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" meta: type: "object" type: "object" required: - "url" - "meta" MetadataWithStatsStats: properties: cacheKey: type: "string" cache: $ref: "#/components/schemas/MetadataStatsCache" type: "object" resizedImages: items: $ref: "#/components/schemas/MetadataStatsResizedImage" type: "array" type: "object" required: - "cacheKey" - "cache" - "resizedImages" MetadataWithStats: properties: metadata: type: "object" stats: $ref: "#/components/schemas/MetadataWithStatsStats" type: "object" type: "object" required: - "metadata" - "stats" CurveLootboxRevealRequest: properties: userId: format: "uuid" type: "string" description: "User ID whose lootbox should be revealed" id: type: "string" format: "uuid" description: "Unique ID of the lootbox inventory item" itemId: type: "number" description: "Lootbox item ID as defined in items/items.json" example: 203 type: "object" required: - "userId" - "id" - "itemId" CurveLootboxRevealItem: properties: id: type: "integer" description: "Revealed item ID as defined in items/items.json" example: 205 rarity: type: "string" example: "rare" amount: type: "integer" type: "object" required: - "id" - "rarity" CurveLootboxRevealResponse: properties: items: items: $ref: "#/components/schemas/CurveLootboxRevealItem" type: "array" type: "object" required: - "items" GetHoldingsByContractRequest: properties: userId: format: "uuid" type: "string" type: "object" NFTServiceItemContract: properties: address: type: "string" name: type: "string" slug: type: "string" isStaking: type: "boolean" type: "object" required: - "address" - "name" - "slug" - "isStaking" NFTServiceItemLocal: properties: owner: type: "string" exists: type: "boolean" type: "object" required: - "exists" NFTServiceItem: properties: contract: $ref: "#/components/schemas/NFTServiceItemContract" local: $ref: "#/components/schemas/NFTServiceItemLocal" metadata: type: "object" tokenId: type: "string" owner: type: "string" type: "object" required: - "contract" - "local" - "tokenId" - "owner" UpdateTokenRequest: properties: owner: type: "string" type: "object" required: - "owner" CreateSubscriptionCodeRequest: properties: subscriptionId: type: "string" code: type: "string" limit: type: "number" expiresAt: type: "string" enabled: type: "boolean" type: "object" required: - "subscriptionId" - "code" SubscriptionCodeResponse: properties: id: type: "string" subscriptionId: type: "string" code: type: "string" limit: type: "number" uses: type: "number" expiresAt: type: "string" format: "date-time" nullable: true enabled: type: "boolean" createdAt: type: "string" format: "date-time" nullable: true updatedAt: type: "string" format: "date-time" nullable: true type: "object" required: - "id" - "subscriptionId" - "code" - "uses" - "enabled" UpdateSubscriptionCodeRequest: properties: limit: type: "number" expiresAt: type: "string" enabled: type: "boolean" type: "object" ListTournamentsRequest: properties: page: minimum: 1 type: "number" perPage: maximum: 100 type: "number" minimum: 1 stage: type: "string" description: "Comma separated list of stages to filter by" scheduled: type: "boolean" orderBy: type: "string" direction: type: "string" enum: - "asc" - "desc" type: "object" Tournament: properties: id: format: "uuid" type: "string" creatorId: format: "uuid" type: "string" creator: $ref: "#/components/schemas/User" type: enum: - "single-elimination" type: "string" category: enum: - "private" - "official" - "partner" type: "string" name: type: "string" description: type: "string" stage: enum: - "pending" - "active" - "ended" - "cancelled" type: "string" entryFee: type: "number" prizePool: type: "number" bonus: type: "number" creatorFee: type: "number" participantAmount: type: "number" tokenRequired: type: "string" nullable: true hasPassword: type: "boolean" hasFinals: type: "boolean" allowEquipment: type: "boolean" allowConsumables: type: "boolean" allowEvolvedZee: type: "boolean" allowDuplicateZee: type: "boolean" allEvolvedZee: type: "boolean" zeeLevel: type: "number" nullable: true equipmentRarity: type: "string" nullable: true createdAt: type: "string" format: "date-time" startAt: type: "string" format: "date-time" nullable: true startedAt: type: "string" format: "date-time" nullable: true endedAt: type: "string" format: "date-time" nullable: true userCount: type: "number" place: type: "string" nullable: true type: "object" required: - "id" - "creatorId" - "creator" - "type" - "category" - "name" - "description" - "stage" - "entryFee" - "prizePool" - "bonus" - "creatorFee" - "participantAmount" - "tokenRequired" - "hasPassword" - "hasFinals" - "allowEquipment" - "allowConsumables" - "allowEvolvedZee" - "allowDuplicateZee" - "allEvolvedZee" - "zeeLevel" - "equipmentRarity" - "createdAt" - "startAt" - "startedAt" - "endedAt" - "userCount" - "place" RevertHeistTokensResponse: properties: usersProcessed: type: "number" coinsUnstaked: type: "number" goldTokensReturned: type: "number" type: "object" required: - "usersProcessed" - "coinsUnstaked" - "goldTokensReturned" TribeUserRank: properties: id: format: "uuid" type: "string" rank: type: "number" type: "object" required: - "id" - "rank" TribeAnalytics: properties: tribeId: format: "uuid" type: "string" ownerId: format: "uuid" type: "string" nullable: true landId: type: "string" nullable: true name: type: "string" eloRank: type: "number" shortName: type: "string" isPublic: type: "boolean" userLimit: type: "number" userCount: type: "number" users: items: $ref: "#/components/schemas/TribeUserRank" type: "array" type: "object" required: - "tribeId" - "ownerId" - "landId" - "name" - "eloRank" - "shortName" - "isPublic" - "userLimit" - "userCount" - "users" BulkUpdateBanStatusRequest: properties: userIds: items: format: "uuid" type: "string" type: "array" minItems: 1 description: "Unique user IDs" example: - "123e4567-e89b-12d3-a456-426614174000" type: enum: - "Temporary" - "Permanent" - 1 - 2 type: "string" description: "Ban type: 1 = temporary, 2 = permanent, null = unban" example: 1 reason: maxLength: 500 type: "string" description: "Reason for banning the user" example: "Inappropriate language in chat" expiresAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" type: "string" minLength: 1 description: "Ban expiration date (ISO 8601 format). Required for temporary bans." example: "2024-12-31T23:59:59.000Z" type: "object" required: - "userIds" RefreshTokenResponse: properties: token: type: "string" expiresAt: type: "string" type: "object" required: - "token" - "expiresAt" AccessTokenResponse: properties: accessToken: type: "string" refreshToken: $ref: "#/components/schemas/RefreshTokenResponse" type: "object" type: "object" required: - "accessToken" - "refreshToken" ImpersonationPasswordResponse: properties: password: type: "string" description: "One-time temporary password. Valid for 1 hour, single use. Send it as the password on the login endpoint." expiresAt: type: "string" description: "ISO timestamp when the temporary password expires." type: "object" required: - "password" - "expiresAt" SuspiciousUser: properties: id: type: "string" username: type: "string" email: type: "string" ipAddress: type: "string" registeredAt: type: "string" score: type: "number" metadata: items: $ref: "#/components/schemas/SuspiciousScoreMetadata" type: "array" type: "object" required: - "id" - "username" - "email" - "score" - "metadata" SuspiciousScoreDetails: properties: reason: type: "string" match: {} patterns: {} type: "object" required: - "reason" SuspiciousScoreMetadata: properties: indicator: enum: - "IP_REGION_RISK" - "MULTIPLE_REGISTRATIONS" - "EMAIL_FORMAT" - "REPEATED_EMAIL_PATTERN" - "USER_AGENT_ANOMALY" - "SUSPICIOUS_EMAIL_PATTERN" - "SUSPICIOUS_USERNAME_PATTERN" type: "string" score: type: "number" details: $ref: "#/components/schemas/SuspiciousScoreDetails" type: "object" required: - "indicator" - "score" PaginateSuspiciousUsersRequest: properties: page: maximum: 9999999 type: "number" minimum: 1 limit: maximum: 1000 type: "number" minimum: 1 reload: type: "boolean" type: "object" SearchUser: properties: id: format: "uuid" type: "string" username: type: "string" avatar: type: "string" nullable: true email: type: "string" banType: type: "number" nullable: true banExpiresAt: type: "string" format: "date-time" nullable: true banReason: type: "string" nullable: true muteType: type: "number" nullable: true muteExpiresAt: type: "string" format: "date-time" nullable: true muteReason: type: "string" nullable: true type: type: "string" createdAt: type: "string" format: "date-time" updatedAt: type: "string" format: "date-time" wallets: items: $ref: "#/components/schemas/SearchUserWallet" type: "array" type: "object" required: - "id" - "username" - "avatar" - "email" - "banType" - "banExpiresAt" - "banReason" - "muteType" - "muteExpiresAt" - "muteReason" - "type" - "createdAt" - "updatedAt" - "wallets" SearchUserWallet: properties: address: type: "string" type: type: "string" primary: type: "boolean" type: "object" required: - "address" - "type" - "primary" SetUserPasswordRequest: properties: password: type: "string" description: "New password to set directly for the user. No verification email is sent." example: "newPassword123" type: "object" required: - "password" UpdateUserSettings: properties: value: type: "string" type: "object" required: - "value" UpdateRoomPosition: properties: room: type: "string" x: type: "number" y: type: "number" z: type: "number" broadcastRelocate: type: "boolean" type: "object" required: - "room" - "x" - "y" - "z" UpdateUserBanStatusRequest: properties: type: enum: - "Temporary" - "Permanent" - 1 - 2 type: "string" description: "Ban type: 1 = temporary, 2 = permanent, null = unban" example: 1 reason: maxLength: 500 type: "string" description: "Reason for banning the user" example: "Inappropriate language in chat" expiresAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" type: "string" minLength: 1 description: "Ban expiration date (ISO 8601 format). Required for temporary bans." example: "2024-12-31T23:59:59.000Z" type: "object" UpdateUserMuteStatusRequest: properties: type: enum: - "Temporary" - "Permanent" - 1 - 2 type: "string" description: "Mute type: 1 = temporary, 2 = permanent, null = unmute" example: 1 reason: maxLength: 500 type: "string" description: "Reason for muting the user" example: "Inappropriate language in chat" expiresAt: oneOf: - format: "date" type: "string" - format: "date-time" type: "string" type: "string" description: "Mute expiration date (ISO 8601 format). Required for temporary mutes." example: "2024-12-31T23:59:59.000Z" type: "object" UpdateUserRoleRequest: properties: role: enum: - "user" - "moderator" - "administrator" type: "string" description: "New role to assign to the user" example: "moderator" type: "object" required: - "role" EditWalletByIdRequest: properties: primary: type: "boolean" unlocked: items: {} type: "array" type: "object" required: - "primary" - "unlocked" LesserTransformationSpellCast: properties: items: items: type: "string" type: "array" room: type: "string" type: "object" required: - "items" LesserTransformationSpellCastResponse: properties: vee: type: "number" gainedXp: type: "number" type: "object" required: - "vee" - "gainedXp" SpellCastResponse: properties: gainedXp: type: "number" type: "object" required: - "gainedXp" ShamanismSpellCast: properties: spell: type: "string" room: type: "string" type: "object" required: - "spell" UnlockSpellRequest: properties: id: format: "uuid" type: "string" type: "object" required: - "id" UnlockSpellResponse: properties: spellKey: type: "string" type: "object" required: - "spellKey" AppleLoginRequest: properties: id: format: "uuid" type: "string" description: "The ID that was provided when the flow was initiated. Should only be used on WebGL/Standalone platforms, and left empty elsewhere" idToken: type: "string" description: "ID token of the authorized user. Should only be used on mobile platforms, and left empty elsewhere" type: "object" SocialAccount: properties: providerId: type: "string" providerType: enum: - "google" - "apple" - "device" type: "string" type: "object" required: - "providerId" - "providerType" DeviceLoginRequest: properties: id: type: "string" description: "The unique ID of the device: https://docs.unity3d.com/6000.3/Documentation/ScriptReference/Device.SystemInfo-deviceUniqueIdentifier.html" model: type: "string" description: "The device model: https://docs.unity3d.com/6000.3/Documentation/ScriptReference/SystemInfo-deviceModel.html" nullable: true platform: type: "string" description: "The device platform: https://docs.unity3d.com/6000.3/Documentation/ScriptReference/Device.Application.html" nullable: true os: type: "string" description: "The device operating system: https://docs.unity3d.com/6000.3/Documentation/ScriptReference/Device.SystemInfo-operatingSystem.html" nullable: true ram: type: "integer" description: "Memory size of the device: https://docs.unity3d.com/6000.3/Documentation/ScriptReference/Device.SystemInfo-systemMemorySize.html" nullable: true type: "object" required: - "id" GoogleLoginRequest: properties: id: format: "uuid" type: "string" description: "The ID that was provided when the flow was initiated" type: "object" required: - "id" HandleSoulcraftingRequest: properties: emptySoulId: type: "string" emptySoulIds: items: type: "string" type: "array" wellId: type: "string" type: "object" required: - "wellId" SoulcraftingOutcome: properties: itemId: type: "string" amount: type: "number" type: "object" required: - "itemId" - "amount" OverviewItem: properties: totalAmount: type: "number" count: type: "number" type: "object" required: - "totalAmount" - "count" StakingOverviewResponse: properties: totalDistributedRewards: type: "object" totalClaimedRewards: type: "object" type: "object" required: - "totalDistributedRewards" - "totalClaimedRewards" InteractRequest: properties: userId: format: "uuid" type: "string" type: "object" required: - "userId" UpdateObjectStateRequest: properties: userId: format: "uuid" type: "string" state: type: "number" type: "object" required: - "userId" - "state" SubscriptionOption: properties: id: type: "number" description: "Subscription type" duration: type: "number" description: "Duration of the subscription in days" nativePrice: type: "number" description: "Native price of the subscription" veePrice: type: "number" description: "Vee price of the subscription" type: "object" required: - "id" - "duration" - "nativePrice" - "veePrice" SubscriptionPurchase: properties: itemType: type: "number" description: "Subscription type" token: type: "string" price: type: "string" signature: type: "string" requestId: type: "string" type: "object" required: - "itemType" - "token" - "price" - "signature" - "requestId" SubscriptionSignaturesRequest: properties: wallet: type: "string" chainId: type: "number" type: "object" required: - "wallet" UserSubscriptionStatus: properties: isActive: type: "boolean" description: "Is subscription active" expiresAt: type: "number" description: "Expires at timestamp in milliseconds" type: type: "string" type: "object" required: - "isActive" - "expiresAt" SubscriptionStatus: properties: wallet: type: "string" description: "Wallet address" isActive: type: "boolean" description: "Is subscription active" expiresAt: type: "number" description: "Expires at timestamp in milliseconds" isLinked: type: "boolean" description: "Is wallet linked to a user" username: type: "string" type: "object" required: - "wallet" - "isActive" - "expiresAt" - "isLinked" - "username" SubscriptionPurchasedRequest: properties: transactionId: type: "string" contractId: type: "string" soulShardType: type: "string" buyer: type: "string" chainId: type: "number" type: "object" required: - "transactionId" - "contractId" - "soulShardType" - "buyer" UseSubscriptionCodeRequest: properties: code: type: "string" type: "object" required: - "code" UseSubscriptionCodeResponse: properties: subscriptionId: type: "string" type: "object" required: - "subscriptionId" ThirdwebPayloadResponse: properties: domain: type: "string" uri: type: "string" statement: type: "string" address: type: "string" version: type: "string" chain_id: type: "string" nonce: type: "string" issued_at: type: "string" expiration_time: type: "string" invalid_before: type: "string" resources: items: type: "string" type: "array" type: "object" required: - "domain" - "uri" - "statement" - "address" - "version" - "chain_id" - "nonce" - "issued_at" - "expiration_time" - "invalid_before" - "resources" SessionResponse: properties: address: type: "string" type: "object" required: - "address" Payload: properties: domain: type: "string" uri: type: "string" statement: type: "string" address: type: "string" version: type: "string" chain_id: type: "string" nonce: type: "string" issued_at: type: "string" expiration_time: type: "string" invalid_before: type: "string" resources: items: type: "string" type: "array" type: "object" required: - "domain" - "uri" - "statement" - "address" - "version" - "nonce" - "issued_at" - "expiration_time" - "invalid_before" AdminAccount: properties: payload: $ref: "#/components/schemas/Payload" signature: type: "string" type: "object" required: - "payload" - "signature" ThirdwebLoginRequest: properties: payload: $ref: "#/components/schemas/Payload" signature: type: "string" adminAccount: $ref: "#/components/schemas/AdminAccount" authTokenDurationSec: type: "number" type: "object" required: - "payload" - "signature" WriteTransactionRequest: properties: chainId: type: "number" address: type: "string" functionName: type: "string" args: items: {} type: "array" value: type: "string" simulateTransaction: type: "boolean" uniqueActionId: type: "string" jwt: type: "string" type: "object" required: - "address" - "functionName" - "args" WriteTransactionResponse: properties: queueId: type: "string" type: "object" required: - "queueId" ExchangeVeeTokensRequest: properties: amount: type: "number" type: "object" required: - "amount" TokenTransaction: properties: id: type: "number" userId: format: "uuid" type: "string" tokenId: type: "string" amount: type: "number" sourceType: type: "string" sourceId: type: "string" type: "object" required: - "id" - "userId" - "tokenId" - "amount" - "sourceType" - "sourceId" UserTokenTransaction: properties: id: type: "number" userId: format: "uuid" type: "string" tokenId: type: "string" amount: type: "number" sourceType: type: "string" sourceId: type: "string" createdAt: type: "string" format: "date-time" updatedAt: type: "string" format: "date-time" type: "object" required: - "id" - "userId" - "tokenId" - "amount" - "sourceType" - "sourceId" - "createdAt" - "updatedAt" RegisterTokenTransactionRequest: properties: userId: format: "uuid" type: "string" tokenId: type: "string" amount: type: "number" sourceType: type: "string" sourceId: type: "string" type: "object" required: - "userId" - "tokenId" - "amount" - "sourceType" - "sourceId" AddTokenRequest: properties: userId: format: "uuid" type: "string" tokenId: type: "string" itemId: type: "string" amount: type: "integer" sourceId: type: "string" sourceType: type: "string" sourceSubType: type: "string" type: "object" required: - "userId" - "amount" - "sourceId" - "sourceType" AddTokenResponse: properties: tokenId: type: "string" amount: type: "number" balance: type: "number" type: "object" required: - "tokenId" - "amount" - "balance" GetTokenBalanceRequest: properties: userId: format: "uuid" type: "string" itemId: type: "string" type: "object" required: - "userId" - "itemId" TranslateTextRequest: properties: text: minLength: 1 maxLength: 5000 type: "string" targetLanguageCode: type: "string" enum: - "af" - "sq" - "am" - "ar" - "hy" - "az" - "bn" - "bs" - "bg" - "ca" - "zh" - "zh-TW" - "hr" - "cs" - "da" - "fa-AF" - "nl" - "en" - "et" - "fa" - "tl" - "fi" - "fr" - "fr-CA" - "ka" - "de" - "el" - "gu" - "ht" - "ha" - "he" - "hi" - "hu" - "is" - "id" - "ga" - "it" - "ja" - "kn" - "kk" - "ko" - "lv" - "lt" - "mk" - "ms" - "ml" - "mt" - "mr" - "mn" - "no" - "ps" - "pl" - "pt" - "pt-PT" - "pa" - "ro" - "ru" - "sr" - "si" - "sk" - "sl" - "so" - "es" - "es-MX" - "sw" - "sv" - "ta" - "te" - "th" - "tr" - "uk" - "ur" - "uz" - "vi" - "cy" type: "object" required: - "text" TranslateTextResponse: properties: translatedText: type: "string" sourceLanguageCode: type: "string" type: "object" required: - "translatedText" - "sourceLanguageCode" CreateCreatureRequest: properties: index: type: "integer" visual: type: "string" slot: type: "string" type: "object" required: - "index" TutorialStep: properties: step: type: "string" version: type: "integer" createdAt: type: "string" type: "object" required: - "step" - "version" - "createdAt" RegisterStepRequest: properties: step: type: "string" metadata: type: "object" type: "object" required: - "step" UserState: properties: scope: type: "string" state: type: "object" type: "object" required: - "scope" - "state" StateOperation: properties: op: enum: - "set" - "unset" type: "string" path: type: "string" value: not: type: "null" type: - "string" - "number" - "boolean" - "object" type: "object" required: - "op" - "path" PatchStateRequest: properties: operations: items: $ref: "#/components/schemas/StateOperation" type: "array" type: "object" required: - "operations" UpdateStateRequest: properties: state: type: "object" minProperties: 1 type: "object" required: - "state" TableProgressResponse: properties: processed: type: "number" total: type: "number" type: "object" required: - "processed" - "total" EmailChangeResponse: properties: old: type: "string" new: type: "string" type: "object" UsernameChangeResponse: properties: old: type: "string" new: type: "string" type: "object" required: - "old" - "new" WalletChangeResponse: properties: old: type: "string" new: type: "string" type: "object" required: - "old" - "new" TokenChangeResponse: properties: old: type: "string" new: type: "string" type: type: "string" type: "object" required: - "old" - "new" - "type" TransferChangesResponse: properties: newUserId: type: "string" originalUserId: type: "string" email: $ref: "#/components/schemas/EmailChangeResponse" type: "object" username: $ref: "#/components/schemas/UsernameChangeResponse" type: "object" referralCodeNew: type: "string" wallets: items: $ref: "#/components/schemas/WalletChangeResponse" type: "array" creatureTokens: items: $ref: "#/components/schemas/TokenChangeResponse" type: "array" droppedRows: type: "object" type: "object" required: - "newUserId" - "originalUserId" - "email" - "wallets" - "creatureTokens" - "droppedRows" TransferStatusResponse: properties: jobId: type: "string" type: type: "string" state: type: "string" phase: type: "string" overall: $ref: "#/components/schemas/TableProgressResponse" type: "object" tables: type: "object" changes: $ref: "#/components/schemas/TransferChangesResponse" type: "object" resultKey: type: "string" error: type: "string" updatedAt: type: "string" type: "object" required: - "jobId" - "type" - "state" - "tables" ActiveTransferJobResponse: properties: status: $ref: "#/components/schemas/TransferStatusResponse" type: "object" type: "object" TransferJobResponse: properties: jobId: type: "string" type: "object" required: - "jobId" ImportUserDataRequest: properties: key: type: "string" type: "object" required: - "key" UserLand: properties: id: type: "string" name: type: "string" image: type: "string" owner: type: "string" revealed: type: "boolean" rarity: enum: - "Rare" - "Epic" - "Legendary" type: "string" biome: enum: - "Grasslands" - "Deserts" - "Forests" - "Mountains" - "Oceans" - "Swamps" - "Tundra" type: "string" type: "object" required: - "id" - "name" - "image" - "owner" - "revealed" - "rarity" - "biome" UnlockableState: properties: unlocked: type: "boolean" type: "object" required: - "unlocked" UserGexTradesSummary: properties: total: type: "integer" buys: type: "integer" sells: type: "integer" veeNet: type: "string" veeBought: type: "string" veeSold: type: "string" feePaid: type: "string" type: "object" required: - "total" - "buys" - "sells" - "veeNet" - "veeBought" - "veeSold" - "feePaid" UserGexTradesChartPoint: properties: date: type: "string" buys: type: "integer" sells: type: "integer" cumulativeVeeNet: type: "string" type: "object" required: - "date" - "buys" - "sells" - "cumulativeVeeNet" UserGexTradesByType: properties: buys: type: "integer" sells: type: "integer" type: "object" required: - "buys" - "sells" UserGexTradesTopItem: properties: itemId: type: "string" count: type: "integer" type: "object" required: - "itemId" - "count" UserGexTradeItem: properties: id: type: "string" poolId: type: "string" itemId: type: "string" type: type: "string" veeAmount: type: "string" itemAmount: type: "string" price: type: "string" priceImpact: type: "number" fee: type: "string" protocolFee: type: "string" lpFee: type: "string" createdAt: type: "string" type: "object" required: - "id" - "poolId" - "itemId" - "type" - "veeAmount" - "itemAmount" - "price" - "priceImpact" - "fee" - "protocolFee" - "lpFee" - "createdAt" UserGexTradesMeta: properties: total: type: "integer" page: type: "integer" perPage: type: "integer" lastPage: type: "integer" type: "object" required: - "total" - "page" - "perPage" - "lastPage" UserGexTradesPage: properties: data: items: $ref: "#/components/schemas/UserGexTradeItem" type: "array" meta: $ref: "#/components/schemas/UserGexTradesMeta" type: "object" required: - "data" - "meta" UserGexTradesPriceImpactDistribution: properties: lt_01: type: "integer" p01_1: type: "integer" p1_5: type: "integer" p5_10: type: "integer" gt_10: type: "integer" type: "object" required: - "lt_01" - "p01_1" - "p1_5" - "p5_10" - "gt_10" UserGexTradesTopPool: properties: poolId: type: "string" token0: type: "string" token1: type: "string" count: type: "integer" veeVolume: type: "string" type: "object" required: - "poolId" - "count" - "veeVolume" UserGexTradesTradeSizeDistribution: properties: lt_10: type: "integer" r10_100: type: "integer" r100_1k: type: "integer" r1k_10k: type: "integer" gt_10k: type: "integer" type: "object" required: - "lt_10" - "r10_100" - "r100_1k" - "r1k_10k" - "gt_10k" UserGexTrades: properties: summary: $ref: "#/components/schemas/UserGexTradesSummary" chart: items: $ref: "#/components/schemas/UserGexTradesChartPoint" type: "array" byType: $ref: "#/components/schemas/UserGexTradesByType" topItems: items: $ref: "#/components/schemas/UserGexTradesTopItem" type: "array" priceImpactDistribution: $ref: "#/components/schemas/UserGexTradesPriceImpactDistribution" topPools: items: $ref: "#/components/schemas/UserGexTradesTopPool" type: "array" tradeSizeDistribution: $ref: "#/components/schemas/UserGexTradesTradeSizeDistribution" trades: $ref: "#/components/schemas/UserGexTradesPage" _unused: {} type: "object" required: - "summary" - "chart" - "byType" - "topItems" - "priceImpactDistribution" - "topPools" - "tradeSizeDistribution" - "trades" UserMarketplaceListingsSummary: properties: total: type: "integer" active: type: "integer" sold: type: "integer" cancelled: type: "integer" veeEarned: type: "string" type: "object" required: - "total" - "active" - "sold" - "cancelled" - "veeEarned" UserMarketplaceListingsChartPoint: properties: date: type: "string" created: type: "integer" sold: type: "integer" cumulativeVee: type: "string" type: "object" required: - "date" - "created" - "sold" - "cumulativeVee" UserMarketplaceListingsByType: properties: zee: type: "integer" items: type: "integer" type: "object" required: - "zee" - "items" UserMarketplaceListingsTimeToSell: properties: d0_1: type: "integer" d1_3: type: "integer" d3_7: type: "integer" d7_30: type: "integer" d30_plus: type: "integer" type: "object" required: - "d0_1" - "d1_3" - "d3_7" - "d7_30" - "d30_plus" UserMarketplaceListingBuyer: properties: id: type: "string" username: type: "string" avatar: type: "string" type: "object" required: - "id" UserMarketplaceListingItem: properties: id: type: "string" type: type: "string" status: type: "string" tokenId: type: "string" amount: type: "integer" price: type: "string" fee: type: "string" metadata: {} creatureId: type: "string" offchainDataId: type: "string" buyer: $ref: "#/components/schemas/UserMarketplaceListingBuyer" createdAt: type: "string" soldAt: type: "string" cancelledAt: type: "string" expireAt: type: "string" type: "object" required: - "id" - "type" - "status" - "tokenId" - "amount" - "price" - "fee" - "createdAt" UserMarketplaceListingsMeta: properties: total: type: "integer" page: type: "integer" perPage: type: "integer" lastPage: type: "integer" type: "object" required: - "total" - "page" - "perPage" - "lastPage" UserMarketplaceListingsPage: properties: data: items: $ref: "#/components/schemas/UserMarketplaceListingItem" type: "array" meta: $ref: "#/components/schemas/UserMarketplaceListingsMeta" type: "object" required: - "data" - "meta" UserMarketplaceListingsTopBuyer: properties: userId: type: "string" username: type: "string" count: type: "integer" veeVolume: type: "string" type: "object" required: - "userId" - "count" - "veeVolume" UserMarketplaceListingsPriceDistribution: properties: under100: type: "integer" r100_1k: type: "integer" r1k_10k: type: "integer" r10k_100k: type: "integer" over100k: type: "integer" type: "object" required: - "under100" - "r100_1k" - "r1k_10k" - "r10k_100k" - "over100k" UserMarketplaceListingsCancelRatePoint: properties: date: type: "string" created: type: "integer" cancelled: type: "integer" ratePct: type: "integer" type: "object" required: - "date" - "created" - "cancelled" - "ratePct" UserMarketplaceListings: properties: summary: $ref: "#/components/schemas/UserMarketplaceListingsSummary" chart: items: $ref: "#/components/schemas/UserMarketplaceListingsChartPoint" type: "array" byType: $ref: "#/components/schemas/UserMarketplaceListingsByType" timeToSell: $ref: "#/components/schemas/UserMarketplaceListingsTimeToSell" topBuyers: items: $ref: "#/components/schemas/UserMarketplaceListingsTopBuyer" type: "array" priceDistribution: $ref: "#/components/schemas/UserMarketplaceListingsPriceDistribution" cancelRate: items: $ref: "#/components/schemas/UserMarketplaceListingsCancelRatePoint" type: "array" listings: $ref: "#/components/schemas/UserMarketplaceListingsPage" type: "object" required: - "summary" - "chart" - "byType" - "timeToSell" - "topBuyers" - "priceDistribution" - "cancelRate" - "listings" UserOverviewBan: properties: type: type: "integer" expiresAt: type: "string" reason: type: "string" type: "object" UserOverviewMute: properties: type: type: "integer" expiresAt: type: "string" reason: type: "string" type: "object" UserOverviewReferral: properties: code: type: "string" referrerUserId: type: "string" type: "object" UserOverviewTribe: properties: id: type: "string" name: type: "string" shortName: type: "string" type: "object" required: - "id" - "name" - "shortName" UserOverviewProfile: properties: id: type: "string" username: type: "string" email: type: "string" avatar: type: "string" emailVerifiedAt: type: "string" earnings: type: "number" tutorialCompleted: type: "boolean" type: type: "string" stakedMasks: type: "integer" zeeWithdrawalLimit: type: "number" zeeItemsWithdrawalLimit: type: "number" rank: type: "integer" registerIp: type: "string" loginIp: type: "string" ban: $ref: "#/components/schemas/UserOverviewBan" mute: $ref: "#/components/schemas/UserOverviewMute" referral: $ref: "#/components/schemas/UserOverviewReferral" tribe: $ref: "#/components/schemas/UserOverviewTribe" type: "object" required: - "id" - "username" - "earnings" - "tutorialCompleted" - "type" - "stakedMasks" - "zeeWithdrawalLimit" - "zeeItemsWithdrawalLimit" - "rank" - "ban" - "mute" - "referral" CreatureGroupCount: properties: key: type: "string" count: type: "integer" type: "object" required: - "key" - "count" UserOverviewCreatures: properties: total: type: "integer" byUserId: type: "integer" byOwnerWallets: type: "integer" byVisual: items: $ref: "#/components/schemas/CreatureGroupCount" type: "array" byType: items: $ref: "#/components/schemas/CreatureGroupCount" type: "array" type: "object" required: - "total" - "byUserId" - "byOwnerWallets" - "byVisual" - "byType" DungeonTypeCount: properties: type: type: "string" count: type: "integer" type: "object" required: - "type" - "count" UserOverviewHatches: properties: active: type: "integer" completedUnclaimed: type: "integer" type: "object" required: - "active" - "completedUnclaimed" GexTradeStats: properties: buys: type: "integer" sells: type: "integer" veeTotal: type: "string" type: "object" required: - "buys" - "sells" - "veeTotal" MarketplaceListingStats: properties: active: type: "integer" sold: type: "integer" cancelled: type: "integer" type: "object" required: - "active" - "sold" - "cancelled" TokenBalanceItem: properties: tokenId: type: "string" amount: type: "string" type: "object" required: - "tokenId" - "amount" WalletTypeCount: properties: type: type: "string" count: type: "integer" type: "object" required: - "type" - "count" UserOverviewAnalytics: properties: lastLogin: type: "string" registrationDate: type: "string" locationRegister: type: "string" locationRecent: type: "string" platformRegister: type: "string" platformRecent: type: "string" type: "object" UserOverview: properties: profile: $ref: "#/components/schemas/UserOverviewProfile" creatures: $ref: "#/components/schemas/UserOverviewCreatures" completedDungeons: items: $ref: "#/components/schemas/DungeonTypeCount" type: "array" hatches: $ref: "#/components/schemas/UserOverviewHatches" iapPurchasedItems: type: "integer" nftItemsTotal: type: "integer" offchainItemsTotal: type: "integer" gexTrades: $ref: "#/components/schemas/GexTradeStats" marketplaceListings: $ref: "#/components/schemas/MarketplaceListingStats" finishedQuests: type: "integer" socialAccounts: type: "integer" tokenBalances: items: $ref: "#/components/schemas/TokenBalanceItem" type: "array" wallets: items: $ref: "#/components/schemas/WalletTypeCount" type: "array" analytics: $ref: "#/components/schemas/UserOverviewAnalytics" type: "object" required: - "profile" - "creatures" - "completedDungeons" - "hatches" - "iapPurchasedItems" - "nftItemsTotal" - "offchainItemsTotal" - "gexTrades" - "marketplaceListings" - "finishedQuests" - "socialAccounts" - "tokenBalances" - "wallets" UserSocialAccountDevice: properties: id: type: "string" model: type: "string" platform: type: "string" os: type: "string" ram: type: "integer" createdAt: type: "string" updatedAt: type: "string" type: "object" required: - "id" UserSocialAccount: properties: id: type: "string" providerType: enum: - "google" - "apple" - "device" type: "string" providerId: type: "string" email: type: "string" username: type: "string" createdAt: type: "string" updatedAt: type: "string" device: $ref: "#/components/schemas/UserSocialAccountDevice" type: "object" required: - "id" - "providerType" - "providerId" UnlockRequest: properties: unlockId: type: "string" type: "object" required: - "unlockId" CheckEmailRequest: properties: email: type: "string" type: "object" required: - "email" ValidateUsernameRequest: properties: username: pattern: "^[A-Za-z0-9\\u4e00-\\u9fff ]+$" type: "string" maxLength: 20 minLength: 3 description: "The username to validate (3-20 characters)." type: "object" required: - "username" CompleteVeeWithdrawalResponse: properties: withdrawalId: type: "number" queueId: type: "string" type: "object" required: - "withdrawalId" - "queueId" DepositVeeRequest: properties: wallet: type: "string" amount: type: "number" chainId: type: "number" type: "object" required: - "wallet" - "amount" - "chainId" DepositVeeResponse: properties: queueId: type: "string" type: "object" required: - "queueId" VeeWithdrawalBalanceResponse: properties: chainId: type: "number" balance: type: "string" type: "object" required: - "chainId" - "balance" CreateVeeWithdrawalResponse: properties: wallet: type: "string" amount: type: "string" chainId: type: "number" numericalUserId: type: "string" withdrawalId: type: "string" signature: type: "string" type: "object" required: - "wallet" - "amount" - "chainId" - "numericalUserId" - "withdrawalId" - "signature" CreateVeeWithdrawalRequest: properties: wallet: type: "string" amount: type: "number" chainId: type: "number" receiver: type: "string" type: "object" required: - "wallet" - "amount" - "chainId" ResendVerificationRequest: properties: id: type: "string" type: "object" required: - "id" OpenseaListingPrice: properties: currency: type: "string" decimals: type: "integer" value: type: "string" type: "object" required: - "currency" - "decimals" - "value" CollectionListing: properties: tokenId: type: "string" price: $ref: "#/components/schemas/OpenseaListingPrice" contractAddress: type: "string" metadata: type: "object" type: "object" required: - "tokenId" - "price" - "contractAddress" - "metadata" WebHistoryItem: properties: amount: type: "integer" description: "The amount in the specific day" date: type: "string" description: "The date of entry" format: "date" type: "object" required: - "amount" - "date" WebStats: properties: total: type: "integer" history: items: $ref: "#/components/schemas/WebHistoryItem" type: "array" type: "object" required: - "total" - "history" CallContractMethodRequest: properties: contractAddress: type: "string" method: type: "string" chainId: type: "number" abi: items: {} type: "array" parameters: items: {} type: "array" type: "object" required: - "contractAddress" - "method" - "chainId" - "abi" - "parameters" ItemList: properties: tokenId: type: "string" amount: type: "number" type: "object" required: - "tokenId" - "amount" DepositItemsRequest: properties: wallet: type: "string" chainId: type: "string" items: items: $ref: "#/components/schemas/ItemList" type: "array" type: "object" required: - "wallet" - "chainId" - "items" PriceItem: properties: timestamp: type: "string" price: type: "string" description: "Price in USD" type: "object" required: - "timestamp" - "price" VeePrice: properties: yAxisScalingFactor: type: "number" quotes: items: $ref: "#/components/schemas/PriceItem" type: "array" type: "object" required: - "yAxisScalingFactor" - "quotes" VeePriceWithHistoricDataResponse: properties: hour: $ref: "#/components/schemas/VeePrice" type: "object" day: $ref: "#/components/schemas/VeePrice" type: "object" week: $ref: "#/components/schemas/VeePrice" type: "object" month: $ref: "#/components/schemas/VeePrice" type: "object" year: $ref: "#/components/schemas/VeePrice" type: "object" all: $ref: "#/components/schemas/VeePrice" type: "object" latestPrice: $ref: "#/components/schemas/PriceItem" type: "object" type: "object" required: - "hour" - "day" - "week" - "month" - "year" - "all" - "latestPrice" HandleWoodRequest: properties: userId: format: "uuid" type: "string" itemId: type: "string" type: "object" required: - "userId" - "itemId" paths: /v2/appattribution/report-attribution: post: summary: "Receive Apple AdAttributionKit postback copies" description: "Public receiver. Verifies the Apple JWS and emits an adattributionkit_postback structured log for Grafana. No database writes. Repeated deliveries share a verified postbackIdentifier for deduplication in reporting." parameters: [] responses: 200: description: "Postback logged, including repeated deliveries and invalid signatures" 201: description: "Created" content: application/json: {} 422: description: "Missing, empty, or oversized jws-string" 500: description: "Temporary receipt or processing failure; the device may retry" security: [] tags: - "AdAttributionKit" operationId: "receiveAdAttributionKitPostback" requestBody: content: application/json: schema: $ref: "#/components/schemas/ReceivePostback" /v2/iap/products/{productId}: get: summary: "Product availability" description: "Validate if a product is available for purchase" parameters: - in: "path" name: "productId" schema: type: "string" required: true tags: - "IAP" responses: 204: description: "Product available for purchase" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 409: description: "Product cannot be purchased due to conflicting requirements" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - jwtAuth: - "access" operationId: "productAvailability" /v2/iap/validate: post: summary: "Validate iap receipt" description: "" parameters: [] tags: - "IAP" responses: 200: description: "Validated receipt" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/ValidateReceiptResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "validateReceipt" requestBody: content: application/json: schema: $ref: "#/components/schemas/ValidateReceiptRequest" /v2/web/market/availability: get: summary: "Get web market availability" description: "" parameters: [] responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/GetFeatureFlagResponse" security: [] tags: - "Web" operationId: "getWebMarketAvailability" /v2/web/stats/users: get: summary: "Get user stats" description: "" parameters: [] tags: - "WEB" responses: 200: description: "Result" content: application/json: schema: $ref: "#/components/schemas/WebStats" security: [] operationId: "getUserStats" /v2/web/stats/nft: get: summary: "Get NFT stats" description: "" parameters: [] tags: - "WEB" responses: 200: description: "Result" content: application/json: schema: $ref: "#/components/schemas/WebStats" security: [] operationId: "getNftStats" /v2/web/stats/transactions: get: summary: "Get Transactions stats" description: "" parameters: [] tags: - "WEB" responses: 200: description: "Result" content: application/json: schema: $ref: "#/components/schemas/WebStats" security: [] operationId: "getTransactionsStats" /v2/web/listings/lands: get: summary: "Get listed lands" description: "" parameters: [] tags: - "WEB" responses: 200: description: "Listed Lands" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/CollectionListing" security: [] operationId: "getListedLands" /v2/web/referral: get: summary: "Check if the referral code is valid" description: "" parameters: - name: "referral" in: "query" required: true schema: type: "string" tags: - "WEB" responses: 200: description: "OK" content: application/json: {} 204: description: "" security: [] operationId: "checkReferralCode" /v2/translate/text: post: summary: "Translate text" description: "Translates the provided text into the target language using AWS Translate. Source language is auto-detected." parameters: [] tags: - "TRANSLATE" responses: 200: description: "Translated text" content: application/json: schema: $ref: "#/components/schemas/TranslateTextResponse" 400: description: "Invalid request or unsupported language pair" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "translateText" requestBody: content: application/json: schema: $ref: "#/components/schemas/TranslateTextRequest" /v2/verification/resend: post: summary: "Resend verification code" description: "Resends verification code to the user's email" parameters: [] tags: - "VERIFICATION" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/VerificationResponse" 201: description: "Created" content: application/json: {} security: [] operationId: "resendVerificationCode" requestBody: content: application/json: schema: $ref: "#/components/schemas/ResendVerificationRequest" /v2/land-requests/config: get: summary: "Get land request biome configuration" description: "" parameters: [] responses: 200: description: "Land request biome configuration" content: application/json: schema: $ref: "#/components/schemas/LandRequestConfigResponse" security: [] operationId: "getLandRequestConfig" tags: - "LAND-REQUESTS" /v2/land-requests: post: summary: "Create new land request" description: "" parameters: [] responses: 201: description: "Land request created successfully" content: application/json: schema: $ref: "#/components/schemas/LandRequestResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "createLandRequest" tags: - "LAND-REQUESTS" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateLandRequest" get: summary: "List land requests for current user" description: "" parameters: - name: "page" in: "query" schema: minimum: 1 type: "integer" - name: "limit" in: "query" schema: maximum: 100 type: "integer" minimum: 1 - name: "rarity" in: "query" schema: enum: - "rare" type: "string" responses: 200: description: "" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true countsByRarity: type: "object" additionalProperties: type: "number" inProgressCount: type: "number" nullable: true data: type: "array" items: $ref: "#/components/schemas/LandRequestResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "listLandRequests" tags: - "LAND-REQUESTS" /v2/land-requests/usage: get: summary: "Get current user land request usage for the UTC day" description: "" parameters: [] responses: 200: description: "Land request usage information" content: application/json: schema: $ref: "#/components/schemas/LandRequestUsageResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getLandRequestUsage" tags: - "LAND-REQUESTS" /v2/land-requests/{landRequestId}/retry: post: summary: "Retry failed land request" description: "" parameters: - in: "path" name: "landRequestId" schema: type: "string" required: true responses: 200: description: "Land request retry queued successfully" content: application/json: schema: $ref: "#/components/schemas/LandRequestResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "retryLandRequest" tags: - "LAND-REQUESTS" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateLandRequest" /v2/land-requests/{landRequestId}: get: summary: "Get land request by id for current user" description: "" parameters: - in: "path" name: "landRequestId" schema: type: "string" required: true responses: 200: description: "Land request details" content: application/json: schema: $ref: "#/components/schemas/LandRequestResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getLandRequest" tags: - "LAND-REQUESTS" /v2/tournaments/{tournamentId}: get: summary: "Returns a single tournament instance" description: "" parameters: - in: "path" name: "tournamentId" schema: type: "string" required: true tags: - "TOURNAMENTS" responses: 200: description: "The tournament instance" content: application/json: schema: $ref: "#/components/schemas/Tournament" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getById" /v2/wallets/{walletId}: put: summary: "Update wallet that has active TDK session" description: "" parameters: - in: "path" name: "walletId" schema: type: "string" required: true tags: - "WALLETS" responses: 200: description: "Active wallet updated" content: application/json: schema: type: "null" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "update" /v2/daily_vee/claim: post: summary: "Claim daily Vee" description: "" parameters: [] tags: - "DAILY_VEE" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "claimDailyVee" requestBody: content: application/json: schema: $ref: "#/components/schemas/ClaimDailyVeeRequest" /v2/daily-login-rewards: get: summary: "Get daily login reward status" description: "" parameters: [] responses: 200: description: "Daily login reward status" content: application/json: schema: $ref: "#/components/schemas/DailyLoginStatusResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "DailyLoginReward" operationId: "getDailyLoginReward" post: summary: "Claim daily login reward" description: "" parameters: [] responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} tags: - "DailyLoginReward" operationId: "claimDailyLoginReward" /v2/announcements: get: summary: "List announcements with the current player state (seen / hidden / claimed)" description: "" parameters: [] responses: 200: description: "Announcements" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/PlayerAnnouncementResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "Announcements" operationId: "getAnnouncements" /v2/announcements/seen: put: summary: "Mark selected announcements (or all of them) as seen by the current player" description: "Bulk version of `PUT /v2/announcements/{announcementId}/seen`, backing \"Mark all as read\" and the read action of multi-select in the System Messages screen.\n\nSend either `ids` (the selected announcements, 1-100 UUIDs) or `all: true` (every announcement). Sending both, neither, an empty list or a non-UUID id returns 422.\n\n- Idempotent: announcements already seen are left untouched, unknown ids are ignored, calling twice is safe.\n- Only the seen flag changes. Hidden state, rewards and `isClaimed` are not affected.\n- Concurrent calls for the same player are serialised server-side, so a double tap cannot create duplicate state." parameters: [] responses: 204: description: "Seen flags applied. No body." 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 422: description: "Validation failed: exactly one of `ids` (1-100 UUIDs) or `all: true` is required" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - jwtAuth: - "access" tags: - "Announcements" operationId: "markAnnouncementsSeen" requestBody: description: "Which announcements to affect: exactly one of `ids` or `all: true`." content: application/json: schema: $ref: "#/components/schemas/BulkAnnouncementsRequest" examples: selected: summary: "Selected announcements" description: "Multi-select in the System Messages screen: only the listed announcements are affected." value: ids: - "3fa85f64-5717-4562-b3fc-2c963f66afa6" - "9b2d1c3e-7f4a-4b8c-9d0e-1f2a3b4c5d6e" all: summary: "Every announcement" description: "\"Mark all as read\" / \"Delete all\": every announcement the player can see is affected." value: all: true /v2/announcements/hide: put: summary: "Hide selected announcements (or all of them) for the current player" description: "Bulk version of `PUT /v2/announcements/{announcementId}/hide`, backing \"Delete\" for the selected announcements (or all of them) in the System Messages screen. Hiding is the player-side delete: the announcement stays in `GET /v2/announcements` with `isHidden: true`, and its claim state is preserved.\n\nSend either `ids` (the selected announcements, 1-100 UUIDs) or `all: true` (every announcement). Sending both, neither, an empty list or a non-UUID id returns 422.\n\n- Idempotent: announcements already hidden are left untouched, unknown ids are ignored, calling twice is safe.\n- Unclaimed rewards are **not** forfeited; they stay claimable through `PUT /v2/announcements/{announcementId}/claim`. The \"some selected messages contain unclaimed loot\" confirmation is a client decision: check `rewards.length > 0 && !isClaimed` in the list response before calling.\n- Concurrent calls for the same player are serialised server-side, so a double tap cannot create duplicate state." parameters: [] responses: 204: description: "Hidden flags applied. No body." 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 422: description: "Validation failed: exactly one of `ids` (1-100 UUIDs) or `all: true` is required" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - jwtAuth: - "access" tags: - "Announcements" operationId: "hideAnnouncements" requestBody: description: "Which announcements to affect: exactly one of `ids` or `all: true`." content: application/json: schema: $ref: "#/components/schemas/BulkAnnouncementsRequest" examples: selected: summary: "Selected announcements" description: "Multi-select in the System Messages screen: only the listed announcements are affected." value: ids: - "3fa85f64-5717-4562-b3fc-2c963f66afa6" - "9b2d1c3e-7f4a-4b8c-9d0e-1f2a3b4c5d6e" all: summary: "Every announcement" description: "\"Mark all as read\" / \"Delete all\": every announcement the player can see is affected." value: all: true /v2/announcements/{announcementId}: get: summary: "Get an announcement with the current player state" description: "" parameters: - in: "path" name: "announcementId" schema: type: "string" required: true - name: "announcementId" in: "path" required: true schema: type: "string" responses: 200: description: "Announcement" content: application/json: schema: $ref: "#/components/schemas/PlayerAnnouncementResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "Announcement not found" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - jwtAuth: - "access" tags: - "Announcements" operationId: "getPlayerAnnouncement" /v2/announcements/{announcementId}/seen: put: summary: "Mark an announcement as seen by the current player" description: "Sets the seen flag for one announcement. Idempotent. To mark several or all announcements at once use `PUT /v2/announcements/seen`." parameters: - in: "path" name: "announcementId" schema: type: "string" required: true - name: "announcementId" in: "path" required: true schema: type: "string" responses: 204: description: "Seen flag applied. No body." 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "Announcement not found" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - jwtAuth: - "access" requestBody: content: application/json: {} tags: - "Announcements" operationId: "markAnnouncementSeen" /v2/announcements/{announcementId}/hide: put: summary: "Hide an announcement for the current player" description: "Player-side delete: the announcement stays in `GET /v2/announcements` with `isHidden: true` and its claim state is preserved; unclaimed rewards stay claimable. Idempotent. To hide several or all announcements at once use `PUT /v2/announcements/hide`." parameters: - in: "path" name: "announcementId" schema: type: "string" required: true - name: "announcementId" in: "path" required: true schema: type: "string" responses: 204: description: "Hidden flag applied. No body." 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "Announcement not found" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - jwtAuth: - "access" requestBody: content: application/json: {} tags: - "Announcements" operationId: "hideAnnouncement" /v2/announcements/{announcementId}/claim: put: summary: "Claim the gifts attached to an announcement (once per player)" description: "Grants every reward slot offchain inside one transaction. 400 when there is nothing to claim or the announcement expired, 409 when already claimed." parameters: - in: "path" name: "announcementId" schema: type: "string" required: true - name: "announcementId" in: "path" required: true schema: type: "string" responses: 200: description: "Announcement after claiming" content: application/json: schema: $ref: "#/components/schemas/PlayerAnnouncementResponse" 400: description: "No rewards or announcement expired" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "Announcement not found" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" 409: description: "Already claimed" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - jwtAuth: - "access" requestBody: content: application/json: {} tags: - "Announcements" operationId: "claimAnnouncementRewards" /v2/daily-quests: get: summary: "Get the player's 4 active daily quests (lazily rotates first)" description: "" parameters: [] responses: 200: description: "Active daily quests with progress and reset time" content: application/json: schema: $ref: "#/components/schemas/DailyQuestsResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "DailyQuests" operationId: "getDailyQuests" /v2/daily-quests/{questId}/claim: post: summary: "Claim the Spirit reward for a completed daily quest" description: "" parameters: - in: "path" name: "questId" schema: type: "string" required: true - name: "questId" in: "path" required: true schema: type: "integer" responses: 200: description: "Updated daily quests after claiming" content: application/json: schema: $ref: "#/components/schemas/DailyQuestsResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} tags: - "DailyQuests" operationId: "claimDailyQuest" /v2/ambassador: get: summary: "Get ambassador progress" description: "" parameters: [] tags: - "AMBASSADOR" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/AmbassadorProgressResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAmbassadorProgress" /v2/ambassador/stakes: post: summary: "Sign staking transaction" description: "" parameters: [] tags: - "AMBASSADOR" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/AmbassadorStakeResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "signStakingTransaction" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateStakeSignatureRequest" /v2/ambassador/network: get: summary: "Get ambassador network" description: "" parameters: [] tags: - "AMBASSADOR" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/ReferralResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAmbassadorNetwork" /v2/ambassador/rewards: get: summary: "Get ambassador rewards" description: "" parameters: [] tags: - "AMBASSADOR" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/AmbassadorRewardResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAmbassadorRewards" /v2/ambassador/vested: get: summary: "Get vested amounts" description: "" parameters: [] tags: - "AMBASSADOR" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/AmbassadorVestedRewardsResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getVestedAmounts" /v2/ambassador/potential: get: summary: "Get potential rewards" description: "" parameters: [] tags: - "AMBASSADOR" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/AmbassadorPotentialRewardsResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getPotentialRewards" /v2/ambassador/claims: post: summary: "Create claim signature" description: "" parameters: [] tags: - "AMBASSADOR" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/AmbassadorClaimResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "createClaimSignature" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateClaimSignatureRequest" /v2/ambassador/transactions/stakes: post: summary: "Process staking transaction" description: "" parameters: [] tags: - "AMBASSADOR" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "processStakingTransaction" requestBody: content: application/json: schema: $ref: "#/components/schemas/ProcessTransactionRequest" /v2/ambassador/transactions/claims: post: summary: "Process claim transaction" description: "" parameters: [] tags: - "AMBASSADOR" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "processClaimTransaction" requestBody: content: application/json: schema: $ref: "#/components/schemas/ProcessTransactionRequest" /v2/ambassador/earning_rates: get: summary: "Get ambassador earning rates" description: "" parameters: [] tags: - "AMBASSADOR" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/AmbassadorEarningRate" security: [] operationId: "getAmbassadorEarningRates" /v2/ambassador/leaderboard: get: summary: "Get ambassador leaderboard" description: "" parameters: [] tags: - "AMBASSADOR" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/LeaderboardItemResponse" security: [] operationId: "getAmbassadorLeaderboard" /v2/staking/{contract}: get: summary: "Return staking contract overview" description: "Get staking contract overview" parameters: - in: "path" name: "contract" schema: type: "string" required: true - name: "contract" description: "contract address" in: "path" required: true schema: type: "string" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/StakingOverviewResponse" security: [] tags: - "STAKING" operationId: "getStakingContractOverview" /v2/leaderboards/collectors: get: summary: "Get collector leaderboard" description: "Ranks non-bot collectors with earned totem points. Ties use user ID. Scores are refreshed in background batches, oldest first." parameters: - name: "limit" in: "query" required: true schema: maximum: 100 type: "integer" minimum: 1 default: 50 responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/CollectorLeaderboardEntry" security: [] tags: - "Leaderboard" operationId: "getCollectorsLeaderboard" /v2/leaderboards/ambassador: get: summary: "route" description: "" parameters: [] tags: - "LEADERBOARDS" responses: 200: description: "OK" content: application/json: {} security: [] /v2/invite_friend: get: summary: "Get invite friend progress" description: "" parameters: [] tags: - "INVITE_FRIEND" responses: 200: description: "Levels" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/LevelsResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getInviteFriendProgress" /v2/invite_friend/stats: get: summary: "Get invited friends" description: "" parameters: [] tags: - "INVITE_FRIEND" responses: 200: description: "Invited friends overview" content: application/json: schema: $ref: "#/components/schemas/InvitedFriendsResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getInvitedFriends" /v2/invite_friend/{levelId}/claim: post: summary: "Claim onboarding rewards" description: "" parameters: - in: "path" name: "levelId" schema: type: "string" required: true tags: - "INVITE_FRIEND" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "claimOnboardingRewards" /v2/subscriptions/status: get: summary: "Return wallet subscription status based on logged in user" description: "" parameters: [] tags: - "SUBSCRIPTIONS" responses: 200: description: "Subscription status" content: application/json: schema: $ref: "#/components/schemas/UserSubscriptionStatus" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getSubscriptionsStatusByUser" /v2/subscriptions/claim: post: summary: "Gives a user free subscription based on the code" description: "" parameters: [] tags: - "SUBSCRIPTIONS" responses: 200: description: "Subscription code used" content: application/json: schema: $ref: "#/components/schemas/UseSubscriptionCodeResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "useSubscriptionCode" requestBody: content: application/json: schema: $ref: "#/components/schemas/UseSubscriptionCodeRequest" /v2/subscriptions: get: summary: "Return list of available subscription options" description: "" parameters: [] tags: - "SUBSCRIPTIONS" responses: 200: description: "Subscription items" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/SubscriptionOption" security: [] operationId: "getSubscriptionOptions" post: summary: "Handle purchase transaction from subscription contract" description: "" parameters: [] tags: - "SUBSCRIPTIONS" responses: 200: description: "Transaction handled" content: application/json: schema: type: "null" 201: description: "Created" content: application/json: {} security: [] operationId: "subscriptionPurchased" requestBody: content: application/json: schema: $ref: "#/components/schemas/SubscriptionPurchasedRequest" /v2/subscriptions/purchase/{subscriptionId}: post: summary: "Return purchase signatures for a subscription" description: "" parameters: - in: "path" name: "subscriptionId" schema: type: "string" required: true tags: - "SUBSCRIPTIONS" responses: 200: description: "Subscription purchase signatures" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/SubscriptionPurchase" 201: description: "Created" content: application/json: {} security: [] operationId: "getSubscriptionSignature" requestBody: content: application/json: schema: $ref: "#/components/schemas/SubscriptionSignaturesRequest" /v2/subscriptions/status/{wallet}: get: summary: "Return wallet subscription status" description: "" parameters: - in: "path" name: "wallet" schema: type: "string" required: true tags: - "SUBSCRIPTIONS" responses: 200: description: "Subscription status" content: application/json: schema: $ref: "#/components/schemas/SubscriptionStatus" security: [] operationId: "getSubscriptionsStatusByWallet" /v2/gex/pools: get: summary: "route" description: "" parameters: [] tags: - "GEX" responses: 200: description: "OK" content: application/json: {} security: [] /v2/gex/pools/{poolId}: get: summary: "route" description: "" parameters: - in: "path" name: "poolId" schema: type: "string" required: true tags: - "GEX" responses: 200: description: "OK" content: application/json: {} security: [] /v2/gex/route: post: summary: "route" description: "" parameters: [] tags: - "GEX" responses: 201: description: "Created" content: application/json: {} security: [] requestBody: content: application/json: {} /v2/gex/swap/args: post: summary: "route" description: "" parameters: [] tags: - "GEX" responses: 201: description: "Created" content: application/json: {} security: [] requestBody: content: application/json: {} /v2/thirdweb/login/payload: get: summary: "Create payload" description: "" parameters: [] tags: - "THIRDWEB" responses: 200: description: "Thirdweb payload" content: application/json: schema: $ref: "#/components/schemas/ThirdwebPayloadResponse" security: [] operationId: "createPayload" /v2/thirdweb/login: post: summary: "Login" description: "" parameters: [] tags: - "THIRDWEB" responses: 200: description: "Login response" content: application/json: schema: $ref: "#/components/schemas/LoginResponse" 201: description: "Created" content: application/json: {} security: [] operationId: "login" requestBody: content: application/json: schema: $ref: "#/components/schemas/ThirdwebLoginRequest" /v2/thirdweb/transactions/{queueId}: get: summary: "Get transaction by queue id" description: "" parameters: - in: "path" name: "queueId" schema: type: "string" required: true tags: - "THIRDWEB" responses: 200: description: "Thirdweb payload" content: application/json: schema: $ref: "#/components/schemas/TransactionResponse" security: [] operationId: "getTransactionByQueueId" /v2/thirdweb/transactions: post: summary: "Write transaction" description: "" parameters: [] tags: - "THIRDWEB" responses: 200: description: "Write transaction response" content: application/json: schema: $ref: "#/components/schemas/WriteTransactionResponse" 201: description: "Created" content: application/json: {} security: [] operationId: "writeTransaction" requestBody: content: application/json: schema: $ref: "#/components/schemas/WriteTransactionRequest" /v2/thirdweb/users/me: get: summary: "Get session" description: "" parameters: [] tags: - "THIRDWEB" responses: 200: description: "Session response" content: application/json: schema: $ref: "#/components/schemas/SessionResponse" security: [] operationId: "getSession" /v2/vee-withdrawals: get: summary: "Get withdrawal balances on all chains" description: "" parameters: [] tags: - "VEE-WITHDRAWALS" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/VeeWithdrawalBalanceResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getWithdrawalBalances" post: summary: "Withdraw VEE from in-game to wallet" description: "" parameters: [] tags: - "VEE-WITHDRAWALS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/CreateVeeWithdrawalResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateVeeWithdrawalRequest" operationId: "withdrawVee" /v2/vee-withdrawals/deposit: post: summary: "Deposit VEE" description: "" parameters: [] tags: - "VEE-WITHDRAWALS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/DepositVeeResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/DepositVeeRequest" operationId: "depositVee" /v2/vee-withdrawals/{withdrawalId}/complete: post: summary: "Complete a VEE withdrawal" description: "" parameters: - in: "path" name: "withdrawalId" schema: type: "string" required: true tags: - "VEE-WITHDRAWALS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/CompleteVeeWithdrawalResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "completeVeeWithdrawal" /v2/item-claims: get: summary: "Get pending item claims and available rewards" description: "" parameters: [] tags: - "ITEM-CLAIMS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ItemClaims" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getItemClaims" post: summary: "Prepare a recoverable item claim without submitting a transaction" description: "" parameters: [] tags: - "ITEM-CLAIMS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ItemClaim" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/PrepareItemClaimRequest" operationId: "prepareItemClaim" /v2/inventory: get: summary: "Returns a list of all items in the users inventory" description: "" parameters: [] tags: - "INVENTORY" responses: 200: description: "List of items" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Item" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getItems" /v2/inventory/transfer-whitelists: get: summary: "Items that can be minted to a wallet or deposited into the game" description: "" parameters: [] tags: - "INVENTORY" responses: 200: description: "Mint and deposit whitelists" content: application/json: schema: $ref: "#/components/schemas/ItemTransferWhitelists" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getTransferWhitelists" /v2/inventory/{id}: delete: summary: "Destroys/burns item from an users inventory" description: "" parameters: - in: "path" name: "id" schema: type: "string" required: true tags: - "INVENTORY" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "burnItem" /v2/inventory/offchain/potions/exchange: post: summary: "Exchange offchain potions (removed)" description: "Removed: exchanging items for energy potions is no longer supported." parameters: [] tags: - "INVENTORY" responses: 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 410: description: "" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "exchangeOffchainPotions" deprecated: true /v2/top/professions/overall: get: summary: "Returns the overall leaderboard, ranking players by the sum of all their skill levels" description: "" parameters: [] responses: 200: description: "The overall profession leaderboard" content: application/json: schema: $ref: "#/components/schemas/ProfessionLeaderboard" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "LEADERBOARD" operationId: "getOverallProfessionLeaderboard" /v2/top/professions/{professionKey}: get: summary: "Returns the leaderboard for the provided profession" description: "" parameters: - in: "path" name: "professionKey" schema: type: "string" required: true responses: 200: description: "The profession leaderboard" content: application/json: schema: $ref: "#/components/schemas/ProfessionLeaderboard" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "LEADERBOARD" operationId: "getProfessionLeaderboard" /v2/services/items/inventory: post: summary: "Adds multiple items to the users inventory" description: "" parameters: [] responses: 200: description: "List of added items" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Item" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "INVENTORY" operationId: "addItems" requestBody: content: application/json: schema: $ref: "#/components/schemas/ModifyItemsRequest" delete: summary: "Removes multiple items from the users inventory" description: "" parameters: [] responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "INVENTORY" operationId: "removeItems" requestBody: content: application/json: schema: $ref: "#/components/schemas/ModifyItemsRequest" /v2/services/items/inventory/{itemId}: post: summary: "Adds item to the users inventory" description: "" parameters: - in: "path" name: "itemId" schema: type: "string" required: true responses: 200: description: "The added item" content: application/json: schema: $ref: "#/components/schemas/Item" 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "INVENTORY" operationId: "addItem" requestBody: content: application/json: schema: $ref: "#/components/schemas/ModifyItemRequest" delete: summary: "Removes item from the users inventory" description: "" parameters: - in: "path" name: "itemId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "INVENTORY" operationId: "removeItem" requestBody: content: application/json: schema: $ref: "#/components/schemas/ModifyItemRequest" /v2/services/items/items-limits: get: summary: "Get items limits data" description: "Get items limits data" parameters: - name: "itemIds" in: "query" required: true schema: type: "string" tags: - "SERVICES" responses: 200: description: "Ambassadors" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/ItemLimitState" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getItemsLimitsData" /v2/services/qa-accounts/generate: post: summary: "Generate a fully-populated QA test account" description: "" parameters: [] responses: 200: description: "The generated QA account" content: application/json: schema: $ref: "#/components/schemas/GenerateQaAccountResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "QA" operationId: "generateQaAccount" requestBody: content: application/json: schema: $ref: "#/components/schemas/GenerateQaAccountRequest" /v2/services/tokens: get: summary: "Get token balance for a user" description: "" parameters: - name: "userId" in: "query" required: true schema: format: "uuid" type: "string" - name: "itemId" in: "query" required: true schema: type: "string" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/TokenBalance" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "TOKENS" operationId: "getTokenBalance" post: summary: "Add token to the user" description: "" parameters: [] responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/AddTokenResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "TOKENS" operationId: "addToken" requestBody: content: application/json: schema: $ref: "#/components/schemas/AddTokenRequest" delete: summary: "Remove token from the user" description: "" parameters: [] responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "TOKENS" operationId: "removeToken" requestBody: content: application/json: schema: $ref: "#/components/schemas/AddTokenRequest" /v2/services/land-requests/{landRequestId}: patch: summary: "Update land request" description: "" parameters: - in: "path" name: "landRequestId" schema: type: "string" required: true responses: 204: description: "Land request updated" content: application/json: schema: {} 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateLandRequest" tags: - "LAND-REQUESTS" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateLandRequest" /v2/services/user-transfer/{userId}/export: post: summary: "Trigger a per-user data export. Returns a jobId to poll for progress." description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - name: "userId" in: "path" required: true schema: type: "string" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/TransferJobResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} tags: - "USER_TRANSFER" operationId: "triggerUserExport" /v2/services/user-transfer/import: post: summary: "Trigger a user data import from an uploaded bundle. Returns a jobId to poll for progress." description: "" parameters: [] responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/TransferJobResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USER_TRANSFER" operationId: "triggerUserImport" requestBody: content: application/json: schema: $ref: "#/components/schemas/ImportUserDataRequest" /v2/services/user-transfer/jobs/{jobId}: get: summary: "Get the status (progress + result) of a transfer job." description: "" parameters: - in: "path" name: "jobId" schema: type: "string" required: true - name: "jobId" in: "path" required: true schema: type: "string" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/TransferStatusResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USER_TRANSFER" operationId: "getUserTransferJobStatus" /v2/services/user-transfer/users/{userId}/active: get: summary: "Get the currently-running export job for a user (for resuming progress after a refresh)." description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - name: "userId" in: "path" required: true schema: type: "string" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ActiveTransferJobResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USER_TRANSFER" operationId: "getActiveUserTransferJob" /v2/services/party_lobbies/dashboard/{partyLobbyId}/events: get: summary: "Get paginated party lobby events" description: "" parameters: - in: "path" name: "partyLobbyId" schema: type: "string" required: true - name: "page" in: "query" schema: minimum: 1 type: "integer" - name: "limit" in: "query" schema: maximum: 100 type: "integer" minimum: 1 responses: 200: description: "" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/PartyLobbyEventResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getPaginatedPartyLobbyEvents" tags: - "PARTY-LOBBIES" /v2/web3/deposit: post: summary: "Deposit items from wallet to in-game" description: "" parameters: [] tags: - "WEB3" responses: 200: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/DepositItemsRequest" operationId: "depositItems" /v2/web3/estimate_deposit: post: summary: "Estimate how much gas the deposit transaction would cost" description: "" parameters: [] tags: - "WEB3" responses: 200: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/DepositItemsRequest" operationId: "estimateDepositItems" /v2/web3/chain/{chainId}/gas_price: get: summary: "Get current gas price for specific chain" description: "" parameters: - in: "path" name: "chainId" schema: type: "string" required: true tags: - "WEB3" responses: 200: description: "" content: application/json: {} security: [] operationId: "gasPrice" /v2/web3/vee_price: get: summary: "Get vee price with historic data" description: "" parameters: [] tags: - "WEB3" responses: 200: description: "Login response" content: application/json: schema: $ref: "#/components/schemas/VeePriceWithHistoricDataResponse" security: [] operationId: "veePrice" /v2/land-keys: get: summary: "Get created land keys" description: "" parameters: [] tags: - "LAND-KEYS" responses: 200: description: "Array of land key objects" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/LandKeyResponse" security: [] operationId: "getAvailableLandKeys" /v2/land-keys/available: get: summary: "Get available land keys for key creation" description: "" parameters: [] tags: - "LAND-KEYS" responses: 200: description: "Array of land objects" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/LandKeyResponse" security: [] operationId: "getAvailableLandKeysForCreating" /v2/land-keys/{landKeyId}/create_signature: get: summary: "Get signature for land key creation" description: "" parameters: - in: "path" name: "landKeyId" schema: type: "string" required: true tags: - "LAND-KEYS" responses: 200: description: "Land key creation signature data" content: application/json: schema: $ref: "#/components/schemas/LandKeyCreateSignatureResponse" security: [] operationId: "landKeyCreateSignature" /v2/land-keys/{landKeyId}/claim_signature: get: summary: "Get signature for land key fee claiming" description: "" parameters: - in: "path" name: "landKeyId" schema: type: "string" required: true tags: - "LAND-KEYS" responses: 200: description: "Land key fee claim signature data" content: application/json: schema: $ref: "#/components/schemas/LandKeyFeeClaimSignatureResponse" security: [] operationId: "landKeyFeeClaimSignature" /v2/land-keys/{landKeyId}: put: summary: "Notify backend about land key updates" description: "" parameters: - in: "path" name: "landKeyId" schema: type: "string" required: true tags: - "LAND-KEYS" responses: 200: description: "" 204: description: "No Content" content: application/json: {} security: [] requestBody: content: application/json: {} operationId: "landChanged" get: summary: "Get land key" description: "" parameters: - in: "path" name: "landKeyId" schema: type: "string" required: true tags: - "LAND-KEYS" responses: 200: description: "Land object" content: application/json: schema: $ref: "#/components/schemas/LandKeyResponse" security: [] operationId: "getLandKey" /v2/land-keys/{landKeyId}/wallets/{wallet}: put: summary: "Notify backend about land key transfers" description: "" parameters: - in: "path" name: "landKeyId" schema: type: "string" required: true - in: "path" name: "wallet" schema: type: "string" required: true tags: - "LAND-KEYS" responses: 200: description: "" 204: description: "No Content" content: application/json: {} security: [] requestBody: content: application/json: {} operationId: "landKeyTransferred" /v2/events/wickerman/participate: post: summary: "Participate in the Wickerman Event" description: "Participate in the Wickerman Event and gain experience in the fire-making skill" parameters: [] tags: - "EVENTS" responses: 204: description: "Successfully registered participation in the event" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "participateWickermanEvent" /v2/farm-plots: get: summary: "Get Farm Plots by User ID" description: "Get all farm plots for a given user" parameters: [] tags: - "FARM-PLOTS" responses: 200: description: "Farm plots found" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/FarmPlot" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" /v2/farm-plots/{farmPlotId}: put: summary: "Clear a farm plot" description: "Clear a farm plot for given user" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true tags: - "FARM-PLOTS" responses: 200: description: "Farm plot cleared successfully" content: application/json: schema: $ref: "#/components/schemas/FarmPlot" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} /v2/farm-plots/{farmPlotId}/plants: post: summary: "Sow a seed" description: "Plant a seed in a farm plot. The seed will be removed and burned from inventory." parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true tags: - "FARM-PLOTS" responses: 200: description: "Seed sown" content: application/json: schema: $ref: "#/components/schemas/Plant" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/SowSeedRequest" /v2/farm-plots/{farmPlotId}/plants/{plantId}/compost: post: summary: "Add compost to a plant" description: "Add compost to a plant" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true - in: "path" name: "plantId" schema: type: "string" required: true tags: - "FARM-PLOTS" responses: 200: description: "Compost added to plant" content: application/json: schema: $ref: "#/components/schemas/Plant" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} /v2/farm-plots/{farmPlotId}/plants/{plantId}/water: post: summary: "Add water to a plant" description: "Add water to a plant" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true - in: "path" name: "plantId" schema: type: "string" required: true tags: - "FARM-PLOTS" responses: 200: description: "Water added to plant" content: application/json: schema: $ref: "#/components/schemas/Plant" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} /v2/farm-plots/{farmPlotId}/plants/{plantId}/cure: post: summary: "Cure a plant" description: "Cure a plant" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true - in: "path" name: "plantId" schema: type: "string" required: true tags: - "FARM-PLOTS" responses: 200: description: "Plant cured" content: application/json: schema: $ref: "#/components/schemas/Plant" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} /v2/farm-plots/{farmPlotId}/plants/{plantId}/collect: post: summary: "Collect a plant" description: "Collect a plant from a farm plot" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true - in: "path" name: "plantId" schema: type: "string" required: true tags: - "FARM-PLOTS" responses: 200: description: "Plant collected" content: application/json: schema: $ref: "#/components/schemas/Plant" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} /v2/farm-plots/{farmPlotId}/plants/{plantId}: delete: summary: "Destroy a plant" description: "Destroy a plant" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true - in: "path" name: "plantId" schema: type: "string" required: true tags: - "FARM-PLOTS" responses: 204: description: "Plant deleted successfully" content: application/json: schema: {} 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" /v2/compost: get: summary: "Get compost bins" description: "Get all compost bins for a user" parameters: [] tags: - "COMPOST" responses: 200: description: "Compost bins retrieved" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/CompostBin" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" /v2/compost/{compostBinId}: put: summary: "Deposit compost" description: "Deposit compost into a compost bin" parameters: - in: "path" name: "compostBinId" schema: type: "string" required: true tags: - "COMPOST" responses: 200: description: "Compost deposited" content: application/json: schema: $ref: "#/components/schemas/CompostBin" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/DepositCompostBinRequest" /v2/compost/{compostBinId}/items/batch: put: summary: "Deposit multiple compost items" description: "Deposit multiple inventory items into a compost bin by their unique inventory IDs" parameters: - in: "path" name: "compostBinId" schema: type: "string" required: true responses: 200: description: "Compost items deposited" content: application/json: schema: $ref: "#/components/schemas/CompostBin" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "FARMING" operationId: "depositCompostItems" requestBody: content: application/json: schema: $ref: "#/components/schemas/DepositCompostItemsRequest" /v2/compost/{compostBinId}/items: post: summary: "Collect compost" description: "Collect compost from a compost bin" parameters: - in: "path" name: "compostBinId" schema: type: "string" required: true tags: - "COMPOST" responses: 200: description: "Compost collected" content: application/json: schema: $ref: "#/components/schemas/CompostBin" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} /v2/herbalism/craft: post: summary: "Craft an item" description: "Craft an item" parameters: [] tags: - "HERBALISM" responses: 200: description: "Item crafted" content: application/json: schema: $ref: "#/components/schemas/Herbalism" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/CraftItemRequest" /v2/okx/contracts: get: summary: "Return all registered and enabled marketplace collections" description: "Get all active collections" parameters: [] tags: - "OKX" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/MarketplaceCollection" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" /v2/okx/contracts/{contract}/listings: get: summary: "Return all active listings of the collection" description: "Get collection listings" parameters: - in: "path" name: "contract" schema: type: "string" required: true - name: "page" description: "page of items to return, default is 1" in: "query" schema: type: "string" - name: "limit" description: "amount of items to return" in: "query" schema: type: "string" tags: - "OKX" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/Listing" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" /v2/okx/contracts/{contract}/orders: get: summary: "Return historical orders based on specified timeframe" description: "Get collection order history" parameters: - in: "path" name: "contract" schema: type: "string" required: true - name: "startTime" description: "start timestamp" in: "query" schema: type: "string" - name: "endTime" description: "end timestamp" in: "query" schema: type: "string" - name: "page" description: "page of items to return, default is 1" in: "query" schema: type: "string" - name: "limit" description: "amount of items to return" in: "query" schema: type: "string" tags: - "OKX" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Order" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" /v2/okx/listings: post: summary: "route" description: "Initiate listing creation in OKX marketplace" parameters: [] tags: - "OKX" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ListingRequirements" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateListingRequest" put: summary: "route" description: "Complete listing by submitting generated signature" parameters: [] tags: - "OKX" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/CompleteListing" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/CompleteListingRequest" /v2/okx/buy: post: summary: "Buy items from marketplace" description: "Buy items from marketplace" parameters: [] tags: - "OKX" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/BuyOperations" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/BuyOrdersRequest" /v2/okx/tokens/{slug}: get: summary: "Returns information about a single token" description: "" parameters: - in: "path" name: "slug" schema: type: "string" required: true tags: - "OKX" responses: 200: description: "Token information" content: application/json: schema: $ref: "#/components/schemas/Token" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" /v2/hatching: get: summary: "Get user hatchings" description: "Get a list of hatchings for a given user" parameters: [] tags: - "HATCHING" responses: 200: description: "Array of hatching processes" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Hatching" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "list" post: summary: "Start the hatching process for a given egg item" description: "" parameters: - name: "finish" description: "true/false, if true, the hatching will be finished immediately" in: "query" schema: type: "string" tags: - "HATCHING" responses: 200: description: "The started hatching process" content: application/json: schema: $ref: "#/components/schemas/Hatching" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "start" requestBody: content: application/json: schema: $ref: "#/components/schemas/StartHatchingRequest" /v2/hatching/{hatchingId}: put: summary: "Finish the hatching process" description: "" parameters: - in: "path" name: "hatchingId" schema: type: "string" required: true tags: - "HATCHING" responses: 200: description: "The finished hatching process with the hatched zee" content: application/json: schema: $ref: "#/components/schemas/Hatching" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "finish" /v2/otp/request/user: post: summary: "Generate by user" description: "Request verification code and send it to the user's email address" parameters: [] tags: - "OTP" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/VerificationCode" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "generateByUser" requestBody: content: application/json: schema: $ref: "#/components/schemas/RequestVerificationCodeByUser" /v2/otp/{id}: post: summary: "Regenerate" description: "Invalidate OTP and creates a new one" parameters: - in: "path" name: "id" schema: type: "string" required: true tags: - "OTP" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/VerificationCode" 201: description: "Created" content: application/json: {} security: [] requestBody: content: application/json: {} operationId: "regenerateById" /v2/account/login: post: summary: "Login user" description: "Login user" parameters: [] tags: - "ACCOUNT" responses: 201: description: "Login response" content: application/json: schema: $ref: "#/components/schemas/LoginResponse" security: [] operationId: "userLogin" requestBody: content: application/json: schema: $ref: "#/components/schemas/LoginRequest" /v2/account/guest: post: summary: "Login as guest" description: "Login as guest user" parameters: [] tags: - "ACCOUNT" responses: 201: description: "Login response" content: application/json: schema: $ref: "#/components/schemas/LoginResponse" security: [] requestBody: content: application/json: {} operationId: "guestLogin" /v2/account/refresh: post: summary: "Refresh user token" description: "Refresh user's access token, using the long-lived refresh token" parameters: [] tags: - "ACCOUNT" responses: 201: description: "New access token" content: application/json: schema: $ref: "#/components/schemas/TokenResponse" security: [] operationId: "refreshToken" requestBody: content: application/json: schema: $ref: "#/components/schemas/RefreshTokenRequest" /v2/account: patch: summary: "Set email and password" description: "Sets email and password for the user. If the user has an email, it won't be changed." parameters: [] tags: - "ACCOUNT" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/SetEmailAndPasswordResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "setEmailAndPassword" requestBody: content: application/json: schema: $ref: "#/components/schemas/SetEmailAndPasswordRequest" delete: summary: "Delete account" description: "Delete account and all associated data" parameters: [] tags: - "ACCOUNT" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "deleteAccount" /v2/account/decode: get: summary: "Get auth user data" description: "Get auth user data" parameters: - name: "room" in: "query" schema: type: "string" example: "lobby" description: "Name of the room" tags: - "ACCOUNT" responses: 200: description: "Account" content: application/json: schema: $ref: "#/components/schemas/AuthData" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAuthUserData" /v2/account/session: get: summary: "Session user" description: "Session user" parameters: [] tags: - "ACCOUNT" responses: 200: description: "Session data response" content: application/json: schema: $ref: "#/components/schemas/LoginUser" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "session" /v2/account/lobby: get: summary: "Get lobby account" description: "Get user's account specifically for lobby rooms" parameters: - name: "room" in: "query" schema: type: "string" example: "lobby" description: "Name of the room" tags: - "ACCOUNT" responses: 200: description: "Account" content: application/json: schema: $ref: "#/components/schemas/LobbyAccount" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getLobbyAccount" /v2/account/battle: get: summary: "Get battle account" description: "Get user's account specifically for battle" parameters: - name: "dungeonIndex" in: "query" schema: type: "number" - name: "type" in: "query" schema: type: "string" example: "dungeon_1" description: "Dungeon type identificator" tags: - "ACCOUNT" responses: 200: description: "Extended user account data for battle" content: application/json: schema: $ref: "#/components/schemas/BattleAccount" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getBattleAccount" /v2/account/password: post: summary: "Change password" description: "Change password" parameters: [] tags: - "ACCOUNT" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "changePassword" requestBody: content: application/json: schema: $ref: "#/components/schemas/ChangePasswordRequest" /v2/account/email: post: summary: "Change email" description: "Change email" parameters: [] tags: - "ACCOUNT" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "changeEmail" requestBody: content: application/json: schema: $ref: "#/components/schemas/ChangeEmailRequest" /v2/account/username: post: summary: "Change Username" description: "Changes the username of the user." parameters: [] tags: - "ACCOUNT" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "changeUsername" requestBody: content: application/json: schema: $ref: "#/components/schemas/ChangeUsername" /v2/account/integrated_accounts/{id}: delete: summary: "Unlink social account" description: "Unlink social account" parameters: - in: "path" name: "id" schema: type: "string" required: true tags: - "ACCOUNT" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "unlinkSocialAccount" /v2/account/tokens/balances: get: summary: "Get token balances" description: "Returns a list with all token balances for the user" parameters: [] tags: - "ACCOUNT" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/TokenBalance" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "tokenBalances" /v2/account/install-referrer/facebook: post: summary: "Track Facebook install referrer" description: "Decrypts the Meta (Facebook/Instagram) install-referrer payload from the Google Play Install Referrer API, stores the submission in the analytics DB and records the ad attribution in PostHog for the authenticated user. Send every field the install-referrer SDK provides; unknown fields are stored verbatim." parameters: [] tags: - "ACCOUNT" responses: 204: description: "" 400: description: "Payload could not be decrypted or its metadata is invalid" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 503: description: "Decryption key is not configured" security: - jwtAuth: - "access" operationId: "trackFacebookInstallReferrer" requestBody: content: application/json: schema: $ref: "#/components/schemas/FacebookInstallReferrer" /v2/account/install-referrer/ios: post: summary: "Track iOS install referrer" description: "Accepts the raw attribution string the iOS client receives (e.g. `zeeverse://attribution-test?utm_source=meta&utm_campaign=development`) and logs it for the authenticated user. Nothing is decrypted, stored or forwarded yet - this exists so we can see whether any data arrives in production. The string is echoed back unchanged." parameters: [] tags: - "ACCOUNT" responses: 200: description: "Echoes back the referrer string as it was received" content: application/json: schema: type: "object" properties: ref: type: "string" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 422: description: "Payload is missing `ref` or it is not a non-empty string" security: - jwtAuth: - "access" operationId: "trackIosInstallReferrer" requestBody: content: application/json: schema: $ref: "#/components/schemas/IosInstallReferrer" /v2/social: get: summary: "Get linked accounts" description: "Returns all linked social accounts for the current user." parameters: [] tags: - "SOCIAL" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/SocialAccount" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getLinkedAccounts" /v2/social/apple: get: summary: "Initiate the Apple authorization flow" description: "Returns the flow ID and the URL where the user should be redirected to, to initiate the Apple auth flow" parameters: [] tags: - "SOCIAL" responses: 200: description: "" content: application/json: schema: type: "object" properties: id: type: "string" format: "uuid" description: "Unique identifier for the login flow, will be used to verify the login flow" url: type: "string" format: "url" description: "URL where the user should be redirected to, to initiate the Apple auth flow" security: [] operationId: "appleAuth" /v2/social/apple/callback: post: summary: "Apple Callback" description: "Return URL for Apple's OAuth2 flow." parameters: [] tags: - "SOCIAL" responses: 201: description: "Created" content: application/json: {} 204: description: "" security: [] requestBody: content: application/json: {} operationId: "appleCallback" /v2/social/apple/login: post: summary: "Login with Apple" description: "Login or create a new user using Apple's 'Sign in with Apple' service." parameters: [] tags: - "SOCIAL" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/LoginResponse" 201: description: "Created" content: application/json: {} security: [] operationId: "appleLogin" requestBody: content: application/json: schema: $ref: "#/components/schemas/AppleLoginRequest" /v2/social/apple/link: post: summary: "Link with Apple" description: "Link a user's Apple account to their Zee account" parameters: [] tags: - "SOCIAL" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/SocialAccount" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "appleLink" requestBody: content: application/json: schema: $ref: "#/components/schemas/AppleLoginRequest" /v2/social/apple/unlink: post: summary: "Unlink from Apple" description: "Unlink the user's Apple account from their Zee account" parameters: [] tags: - "SOCIAL" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "appleUnlink" /v2/social/google: get: summary: "Initiate the Google authorization flow" description: "Returns the flow ID and the URL where the user should be redirected to, to initiate the Google auth flow" parameters: [] tags: - "SOCIAL" responses: 200: description: "" content: application/json: schema: type: "object" properties: id: type: "string" format: "uuid" description: "Unique identifier for the login flow, will be used to verify the login flow" url: type: "string" format: "url" description: "URL where the user should be redirected to, to initiate the Google auth flow" security: [] operationId: "googleAuth" /v2/social/google/callback: get: summary: "Google Callback" description: "Return URL for Google's OAuth2 flow." parameters: [] tags: - "SOCIAL" responses: 200: description: "OK" content: application/json: {} 204: description: "" security: [] operationId: "googleCallback" /v2/social/google/login: post: summary: "Login with Google" description: "Login or create a new user using Google's 'Sign in with Google' service." parameters: [] tags: - "SOCIAL" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/LoginResponse" 201: description: "Created" content: application/json: {} security: [] operationId: "googleLogin" requestBody: content: application/json: schema: $ref: "#/components/schemas/GoogleLoginRequest" /v2/social/google/link: post: summary: "Link with google" description: "Link a user's Google account to their Zee account" parameters: [] tags: - "SOCIAL" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/SocialAccount" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "googleLink" requestBody: content: application/json: schema: $ref: "#/components/schemas/GoogleLoginRequest" /v2/social/google/unlink: post: summary: "Unlink from Google" description: "Unlink the user's Google account from their Zee account" parameters: [] tags: - "SOCIAL" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "googleUnlink" /v2/social/device/login: post: summary: "Login with Device" description: "Login or create a new user using the unique device ID." parameters: [] tags: - "SOCIAL" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/LoginResponse" 201: description: "Created" content: application/json: {} security: [] operationId: "deviceLogin" requestBody: content: application/json: schema: $ref: "#/components/schemas/DeviceLoginRequest" /v2/social/device/link: post: summary: "Link with device" description: "Link a user's unique device ID to their Zee account" parameters: [] tags: - "SOCIAL" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/SocialAccount" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "deviceLink" requestBody: content: application/json: schema: $ref: "#/components/schemas/DeviceLoginRequest" /v2/social/device/unlink: post: summary: "Unlink from Device" description: "Unlink the user's unique device ID from their Zee account" parameters: [] tags: - "SOCIAL" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "deviceUnlink" /v2/social/device/force-unlink: post: summary: "(DEV) Force unlink from Device" description: "Forcefully unlink the user's unique device ID from their Zee account" parameters: [] tags: - "SOCIAL" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "forceDeviceUnlink" /v2/creatures: get: summary: "Get creature team" description: "Get creature team that are currently assigned to a user" parameters: [] tags: - "CREATURES" responses: 200: description: "The creature team was retrieved" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Creature" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getCreatureTeam" /v2/creatures/deposits: get: summary: "Get configured Zee deposit collections and account creatures" description: "" parameters: [] responses: 200: description: "Deposit collections and owned creatures" content: application/json: schema: $ref: "#/components/schemas/CreatureDeposits" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "Creatures" operationId: "getCreatureDeposits" /v2/creatures/mint: get: summary: "Get Zee mint eligibility and request status" description: "" parameters: [] responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ZeeMintOptions" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "Creatures" operationId: "getZeeMintOptions" post: summary: "Request a Zee NFT mint to the primary wallet" description: "" parameters: [] responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ZeeMintOptions" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: schema: $ref: "#/components/schemas/MintZeeRequest" tags: - "Creatures" operationId: "mintZee" /v2/creatures/{creatureId}/metadata: get: summary: "Get creature metadata by id" description: "Get creature metadata by id" parameters: - in: "path" name: "creatureId" schema: type: "string" required: true tags: - "CREATURES" responses: 200: description: "The creature metadata was retrieved successfully" content: application/json: schema: $ref: "#/components/schemas/Creature" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getCreatureMetadataById" /v2/creatures/{creatureId}: get: summary: "Get creature by id" description: "Get creature by id" parameters: - in: "path" name: "creatureId" schema: type: "string" required: true tags: - "CREATURES" responses: 200: description: "The creature was retrieved successfully" content: application/json: schema: $ref: "#/components/schemas/Creature" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getCreatureById" put: summary: "Update creature slot" description: "Updates creature slot by assigning it to a selected slot, or unassigning it." parameters: - in: "path" name: "creatureId" schema: type: "string" required: true tags: - "CREATURES" responses: 200: description: "The creature slot was updated" content: application/json: schema: $ref: "#/components/schemas/Creature" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "updateCreatureSlot" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateCreatureSlotRequest" /v2/creatures/{creatureId}/stats: get: summary: "Get creature stats" description: "Get calculated stats (HP, damage, defense, speed, critical) for a specific creature including all modifiers" parameters: - in: "path" name: "creatureId" schema: type: "string" required: true tags: - "CREATURES" responses: 200: description: "The creature stats were retrieved successfully" content: application/json: schema: $ref: "#/components/schemas/CreatureStats" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getCreatureStats" /v2/creatures/{creatureId}/nickname: put: summary: "Update creature nickname" description: "Sets a player-given nickname for the creature" parameters: - in: "path" name: "creatureId" schema: type: "string" required: true tags: - "CREATURES" responses: 200: description: "The creature nickname was updated" content: application/json: schema: $ref: "#/components/schemas/Creature" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "updateCreatureNickname" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateCreatureNicknameRequest" /v2/creatures/{creatureId}/evolve: post: summary: "Evolve an off-chain creature" description: "" parameters: - in: "path" name: "creatureId" schema: type: "string" required: true responses: 200: description: "The evolved creature" content: application/json: schema: $ref: "#/components/schemas/Creature" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "CREATURES" operationId: "evolveOffChainCreature" requestBody: content: application/json: schema: $ref: "#/components/schemas/EvolveOffChainCreatureRequest" /v2/tokens/exchange/vee: post: summary: "Exchange Vee tokens" description: "" parameters: [] tags: - "TOKENS" responses: 200: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "exchangeVeeTokens" requestBody: content: application/json: schema: $ref: "#/components/schemas/ExchangeVeeTokensRequest" /v2/tokens/exchange/withdrawal: post: summary: "Exchange In-game currency for VEE withdrawal request" description: "" parameters: [] tags: - "TOKENS" responses: 200: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "exchangeForWithdrawal" requestBody: content: application/json: schema: $ref: "#/components/schemas/ExchangeVeeTokensRequest" /v2/account/{id}: get: summary: "Get battle account by id" description: "Returns battle data for a user by id. Requires a service token; excludes email and wallets." parameters: - in: "path" name: "id" schema: type: "string" required: true tags: - "ACCOUNT" responses: 200: description: "Extended user account data for battle" content: application/json: schema: $ref: "#/components/schemas/BattleAccount" 401: description: "Service token required" 403: description: "Returns **403** (Forbidden)" 404: description: "User not found" security: - serviceAuth: - "access" operationId: "getBattleAccountById" /v2/services/creatures/{creatureId}: get: summary: "Get creature" description: "Get creature by id" parameters: - in: "path" name: "creatureId" schema: type: "string" required: true responses: 200: description: "The creature was updated" content: application/json: schema: $ref: "#/components/schemas/Creature" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "CREATURES" operationId: "getCreature" put: summary: "Update creature" description: "Updates creature by updating its experience, evolution, level, hp, and slot." parameters: - in: "path" name: "creatureId" schema: type: "string" required: true responses: 200: description: "The creature was updated" content: application/json: schema: $ref: "#/components/schemas/Creature" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "CREATURES" operationId: "updateCreature" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateCreatureRequest" /v2/services/creatures/owner/change: put: summary: "Change creature owner" description: "Changes creature owner by changing its owner wallet address" parameters: [] responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "CREATURES" operationId: "changeCreatureOwner" requestBody: content: application/json: schema: $ref: "#/components/schemas/ChangeOwnerRequest" /v2/services/avatar/strip: post: summary: "Remove all shaman off-chain items" description: "Removes all off-chain shaman items from the user, effectively stripping the shaman avatar and its associated items." parameters: [] responses: 201: description: "The shaman avatar stripped out items" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/SimpleItem" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "AVATAR" operationId: "stripShamanAvatar" requestBody: content: application/json: schema: $ref: "#/components/schemas/StripShamanAvatarRequest" /v2/services/avatar/lobby: post: summary: "Set lobby avatar for a user" description: "Sets the base lobby avatar of the given user. Same behaviour as the user-scoped `POST /account/game/lobby_avatar`." parameters: [] responses: 200: description: "The updated user avatar" content: application/json: schema: $ref: "#/components/schemas/UserAvatarResponse" 400: description: "Unknown avatar ID" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "AVATAR" operationId: "setLobbyAvatar" requestBody: content: application/json: schema: $ref: "#/components/schemas/SetLobbyAvatarRequest" /v2/services/farming/farm-plots: get: summary: "Lists all farm plots with pagination" description: "" parameters: - name: "userId" in: "query" schema: type: "string" description: "User ID" - name: "username" in: "query" schema: type: "string" description: "Username" - name: "page" in: "query" schema: type: "number" description: "Page number" - name: "limit" in: "query" schema: type: "number" description: "Number of items per page" - name: "orderBy" in: "query" schema: type: "string" description: "Field to order by" - name: "orderDirection" in: "query" schema: enum: - "asc" - "desc" type: "string" description: "Order direction" responses: 200: description: "Farm plots retrieved successfully" content: application/json: schema: $ref: "#/components/schemas/FarmPlot" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FARMING" operationId: "listFarmPlots" /v2/services/farming/farm-plots/{farmPlotId}: get: summary: "Gets a farm plot by ID" description: "" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true responses: 200: description: "Farm plot retrieved successfully" content: application/json: schema: $ref: "#/components/schemas/FarmPlot" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FARMING" operationId: "getFarmPlotById" /v2/services/farming/farm-plots/{farmPlotId}/clear: post: summary: "Clears a farm plot" description: "Clears a farm plot by removing the plant and clearing the process" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true responses: 204: description: "Farm plot cleared successfully" content: application/json: schema: {} 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} tags: - "FARMING" operationId: "clearFarmPlot" /v2/services/farming/farm-plots/{farmPlotId}/plants: post: summary: "Sows a seed in a farm plot" description: "" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true responses: 200: description: "Plant created successfully" content: application/json: schema: $ref: "#/components/schemas/Plant" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FARMING" operationId: "sowSeed" requestBody: content: application/json: schema: $ref: "#/components/schemas/SowSeedRequest" /v2/services/farming/farm-plots/{farmPlotId}/plants/{plantId}: post: summary: "Updates a plant's properties" description: "" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true - in: "path" name: "plantId" schema: type: "string" required: true responses: 200: description: "Plant updated successfully" content: application/json: schema: $ref: "#/components/schemas/Plant" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FARMING" operationId: "updatePlant" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdatePlantRequest" delete: summary: "Destroys a plant by farm plot ID and plant ID" description: "" parameters: - in: "path" name: "farmPlotId" schema: type: "string" required: true - in: "path" name: "plantId" schema: type: "string" required: true responses: 204: description: "Plant destroyed successfully" content: application/json: schema: {} 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FARMING" operationId: "destroyPlant" /v2/services/farming/composts: get: summary: "Lists all compost bins with pagination" description: "" parameters: - name: "userId" in: "query" schema: type: "string" description: "User ID" - name: "username" in: "query" schema: type: "string" description: "Username" - name: "page" in: "query" schema: type: "number" description: "Page number" - name: "limit" in: "query" schema: type: "number" description: "Number of items per page" - name: "orderBy" in: "query" schema: type: "string" description: "Field to order by" - name: "orderDirection" in: "query" schema: enum: - "asc" - "desc" type: "string" description: "Order direction" responses: 200: description: "Compost bins retrieved successfully" content: application/json: schema: $ref: "#/components/schemas/CompostBin" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FARMING" operationId: "listComposts" /v2/services/farming/composts/{binId}: get: summary: "Gets a compost bin by ID" description: "" parameters: - in: "path" name: "binId" schema: type: "string" required: true responses: 200: description: "Compost bin retrieved successfully" content: application/json: schema: $ref: "#/components/schemas/CompostBin" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FARMING" operationId: "getCompostById" post: summary: "Updates a compost bin's properties" description: "" parameters: - in: "path" name: "binId" schema: type: "string" required: true responses: 200: description: "Compost bin updated successfully" content: application/json: schema: $ref: "#/components/schemas/CompostBin" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FARMING" operationId: "updateCompostById" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateCompostRequest" /v2/dungeons/mega: get: summary: "Get active mega dungeon event" description: "Returns the active mega dungeon event" parameters: [] tags: - "DUNGEONS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ActiveMegaDungeonEventResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "Event not found" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - jwtAuth: - "access" operationId: "getActiveMegaDungeonEvent" /v2/dungeons/weekly: get: summary: "Get active weekly dungeon event" description: "Returns the active weekly dungeon event" parameters: [] tags: - "DUNGEONS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ActiveWeeklyDungeonEventResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "Event not found" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - jwtAuth: - "access" operationId: "getActiveWeeklyDungeonEvent" /v2/dungeons/weekly/leaderboard: get: summary: "Get weekly dungeon event leaderboard" description: "Get weekly dungeon event leaderboard" parameters: [] tags: - "DUNGEONS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/DungeonLeaderboardResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getWeeklyDungeonLeaderboard" /v2/dungeons/classic/{dungeonType}/unlock: post: summary: "Unlock classic dungeon chapter" description: "Unlocks the classic dungeon chapter for the user by using unlock items from their inventory.\n\t\tThe user must have the required amount of unlock items in their inventory to unlock the dungeon:\n\t\t\n* Item ID 305 - Unlocks 2nd chapter\n\t\t\n* Item ID 306 - Unlocks 3rd chapter" parameters: - in: "path" name: "dungeonType" schema: type: "string" required: true tags: - "DUNGEONS" responses: 204: description: "Dungeon unlocked successfully" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "unlockClassicDungeonChapter" /v2/dungeons/infinite: get: summary: "Returns the list of infinite dungeons for the user" description: "" parameters: - name: "page" description: "page of items to return, default is 1" in: "query" schema: type: "string" - name: "completed" description: "only return either completed or uncompleted dungeons, default is both" in: "query" schema: type: "string" tags: - "DUNGEONS" responses: 200: description: "" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/InfiniteDungeon" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "listInfiniteDungeons" /v2/dungeons/infinite/leaderboard: get: summary: "Get infinite dungeon leaderboard" description: "Get infinite dungeon leaderboard" parameters: - name: "cutoffDate" in: "query" schema: type: "string" nullable: true description: "The cutoff date for the leaderboard" tags: - "DUNGEONS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/DungeonLeaderboardResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getInfiniteDungeonLeaderboard" /v2/dungeons/infinite/{dungeonId}: post: summary: "Claim infinite dungeon rewards and mark it as done" description: "" parameters: - in: "path" name: "dungeonId" schema: type: "string" required: true tags: - "DUNGEONS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/InfiniteDungeon" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "claimInfiniteDungeonRewards" /v2/dungeons/rewards/*: get: summary: "Get available dungeon rewards" description: "Returns available reward item ids per stage for a given dungeon. Unique rewards already claimed by the user are excluded." parameters: - name: "*" description: "Dungeon id path, e.g. `caves/dungeon-1`, `classic/chapter-3`, `infinite`" in: "path" schema: type: "string" required: true tags: - "DUNGEONS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/DungeonRewardsResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getDungeonRewards" /v2/services/tutorial-steps/{userId}/{step}: get: summary: "Get a single registered tutorial step for the user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "step" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "The tutorial step" content: application/json: schema: $ref: "#/components/schemas/TutorialStep" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getTutorialStep" /v2/services/tutorial-steps/{userId}: post: summary: "Register a new tutorial step for the user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "The tutorial step" content: application/json: schema: $ref: "#/components/schemas/TutorialStep" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "registerTutorialStep" requestBody: content: application/json: schema: $ref: "#/components/schemas/RegisterStepRequest" /v2/tutorial-steps: get: summary: "Lists all registered tutorial steps for the user" description: "" parameters: [] tags: - "TUTORIAL-STEPS" responses: 200: description: "The tutorial steps" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/TutorialStep" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "listSteps" post: summary: "Register a new tutorial step for the user" description: "" parameters: [] tags: - "TUTORIAL-STEPS" responses: 200: description: "The tutorial step" content: application/json: schema: $ref: "#/components/schemas/TutorialStep" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "registerStep" requestBody: content: application/json: schema: $ref: "#/components/schemas/RegisterStepRequest" /v2/tutorial-steps/{step}: get: summary: "Get a single registered tutorial step for the user" description: "" parameters: - in: "path" name: "step" schema: type: "string" required: true tags: - "TUTORIAL-STEPS" responses: 200: description: "The tutorial step" content: application/json: schema: $ref: "#/components/schemas/TutorialStep" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getStep" /v2/tutorial-creatures: post: summary: "Creates a new creature, specific to the tutorial" description: "" parameters: [] tags: - "TUTORIAL-CREATURES" responses: 200: description: "The created creature" content: application/json: schema: $ref: "#/components/schemas/Creature" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "createCreature" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateCreatureRequest" /v2/creatures/{creatureId}/sacrifice: post: summary: "Destroys a specific zee and gives a reward" description: "" parameters: - in: "path" name: "creatureId" schema: type: "string" required: true tags: - "CREATURES" responses: 200: description: "The resulted item" content: application/json: schema: $ref: "#/components/schemas/SimpleItem" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "sacrificeCreature" /v2/processes: get: summary: "Get all user processes" description: "" parameters: [] tags: - "PROCESSES" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Process" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAllProcesses" /v2/processes/{processId}: delete: summary: "(DEV) Cancel a specific user processes" description: "" parameters: - in: "path" name: "processId" schema: type: "string" required: true tags: - "PROCESSES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "devCancelProcess" post: summary: "(DEV) Force finish a specific user processes" description: "" parameters: - in: "path" name: "processId" schema: type: "string" required: true tags: - "PROCESSES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "devFinishProcess" /v2/environment-objects: get: summary: "Get all user environment objects" description: "" parameters: [] tags: - "ENVIRONMENT-OBJECTS" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/StatefulObject" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAllObjectsDeprecated" deprecated: true /v2/environment-objects/{objectId}/interact: post: summary: "Trigger object interaction to move to the next state" description: "" parameters: - in: "path" name: "objectId" schema: type: "string" required: true tags: - "ENVIRONMENT-OBJECTS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/StatefulObject" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "interactWithObjectDeprecated" deprecated: true /v2/stateful-objects: get: summary: "Get all user stateful objects (alias to environment)" description: "" parameters: [] tags: - "STATEFUL-OBJECTS" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/StatefulObject" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAllObjects" /v2/stateful-objects/{objectId}/interact: post: summary: "Trigger object interaction to move to the next state (alias to environment)" description: "" parameters: - in: "path" name: "objectId" schema: type: "string" required: true tags: - "STATEFUL-OBJECTS" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/StatefulObject" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "interactWithObject" /v2/quests: get: summary: "Get a list of quests for the user" description: "" parameters: [] tags: - "QUESTS" responses: 200: description: "List of user's quests" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Quest" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getUserQuests" post: summary: "(DEV) Force complete all quests for the user" description: "" parameters: [] tags: - "QUESTS" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "devForceCompleteAllForUser" delete: summary: "(DEV) Delete all active/completed quests for the user" description: "" parameters: [] tags: - "QUESTS" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "devDeleteAllForUser" /v2/quests/{questId}: get: summary: "Get a specific quest for the user" description: "" parameters: - in: "path" name: "questId" schema: type: "string" required: true tags: - "QUESTS" responses: 200: description: "The user's quest" content: application/json: schema: $ref: "#/components/schemas/Quest" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getUserQuest" post: summary: "(DEV) Force complete a specific quest for the user" description: "" parameters: - name: "questId" in: "path" required: true schema: type: "string" format: "*" tags: - "QUESTS" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "devForceCompleteQuest" delete: summary: "(DEV) Delete a specific quest for the user" description: "" parameters: - name: "questId" in: "path" required: true schema: type: "string" format: "*" tags: - "QUESTS" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "devDeleteQuest" /v2/quests/start: post: summary: "Start a quest for the authenticated user" description: "" parameters: [] tags: - "QUESTS" responses: 200: description: "The newly started quest" content: application/json: schema: $ref: "#/components/schemas/Quest" 400: description: "The quest is already started, already completed, or its conditions are not met" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "No such quest" security: - jwtAuth: - "access" operationId: "startUserQuest" requestBody: content: application/json: schema: $ref: "#/components/schemas/StartUserQuestRequest" /v2/npc: get: summary: "Get all NPCs and their state" description: "" parameters: [] tags: - "NPC" responses: 200: description: "List of NPCs" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Npc" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAllNpcs" /v2/npc/{npcId}: get: summary: "Get a specific NPC by ID" description: "" parameters: - in: "path" name: "npcId" schema: type: "string" required: true tags: - "NPC" responses: 200: description: "The NPC" content: application/json: schema: $ref: "#/components/schemas/Npc" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getNpcById" /v2/npc/{npcId}/dialogues: get: summary: "Returns a list of available dialogues for the npc, based on the user state" description: "" parameters: - in: "path" name: "npcId" schema: type: "string" required: true tags: - "NPC" responses: 200: description: "List of available dialogues" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Dialogue" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAvailableDialogues" /v2/npc/{npcId}/dialogues/{dialogueId}: get: summary: "Returns a specific dialogue for the npc, if it's available, based on the user state" description: "" parameters: - in: "path" name: "npcId" schema: type: "string" required: true - in: "path" name: "dialogueId" schema: type: "string" required: true - name: "dialogueId" in: "path" required: true schema: type: "string" tags: - "NPC" responses: 200: description: "The specific dialogue" content: application/json: schema: $ref: "#/components/schemas/Dialogue" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getDialogue" /v2/npc/{npcId}/shops/{shopId}/sell: post: summary: "Sell items to a merchant type NPC" description: "Items will be removed from the inventory and currency will be added to the user" parameters: - in: "path" name: "npcId" schema: type: "string" required: true - in: "path" name: "shopId" schema: type: "string" required: true tags: - "NPC" responses: 200: description: "Result" content: application/json: schema: $ref: "#/components/schemas/SellingResult" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "sellItems" requestBody: content: application/json: schema: $ref: "#/components/schemas/SellItemsRequest" /v2/npc/{npcId}/inventory/{tradeId}: post: summary: "Trade items with a merchant type NPC" description: "Items will be removed from the inventory with the currency and a new item will be added to inventory" parameters: - in: "path" name: "npcId" schema: type: "string" required: true - in: "path" name: "tradeId" schema: type: "string" required: true tags: - "NPC" responses: 200: description: "Result" content: application/json: schema: $ref: "#/components/schemas/Item" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" requestBody: content: application/json: {} operationId: "tradeItems" /v2/states/{scope}: get: summary: "Returns a specific user state by the scope" description: "" parameters: - name: "scope" in: "path" required: true schema: type: "string" format: "*" tags: - "STATES" responses: 200: description: "The specific state" content: application/json: schema: $ref: "#/components/schemas/UserState" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getScopedState" put: summary: "Updates a user state by the scope" description: "" parameters: - name: "scope" in: "path" required: true schema: type: "string" format: "*" tags: - "STATES" responses: 200: description: "The specific state" content: application/json: schema: $ref: "#/components/schemas/UserState" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "updateScopedState" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateStateRequest" /v2/services/quests: post: summary: "Start a new quest for the user." description: "" parameters: [] responses: 200: description: "The newly started quest" content: application/json: schema: $ref: "#/components/schemas/Quest" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "startQuest" tags: - "QUESTS" requestBody: content: application/json: schema: $ref: "#/components/schemas/StartQuestRequest" delete: summary: "Delete all quests for all users." description: "" parameters: [] responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "deleteAll" tags: - "QUESTS" /v2/services/quests/complete: post: summary: "Complete a quest for the user." description: "" parameters: [] responses: 200: description: "The completed quest" content: application/json: schema: $ref: "#/components/schemas/Quest" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "completeQuest" tags: - "QUESTS" requestBody: content: application/json: schema: $ref: "#/components/schemas/CompleteQuestRequest" /v2/services/stateful-objects/{objectId}/interact: post: summary: "Trigger object interaction to move to the next state (alias to environment)" description: "" parameters: - in: "path" name: "objectId" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/StatefulObject" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "interactWithObjectForUser" requestBody: content: application/json: schema: $ref: "#/components/schemas/InteractRequest" /v2/services/stateful-objects/{objectId}: put: summary: "Update object state (alias to environment)" description: "Updates specific object state for a user" parameters: - in: "path" name: "objectId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateStatefulObjectState" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateObjectStateRequest" /v2/services/npcs/{npcId}: put: summary: "Updates a specific NPC" description: "" parameters: - in: "path" name: "npcId" schema: type: "string" required: true responses: 200: description: "The updated NPC" content: application/json: schema: $ref: "#/components/schemas/Npc" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "NPC" operationId: "updateNpc" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateNpcRequest" /v2/services/nft/curve/lootbox/reveal: post: summary: "Reveal a Curve lootbox" description: "" parameters: [] tags: - "SERVICES" responses: 200: description: "The revealed lootbox items" content: application/json: schema: $ref: "#/components/schemas/CurveLootboxRevealResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "revealCurveLootbox" requestBody: content: application/json: schema: $ref: "#/components/schemas/CurveLootboxRevealRequest" /v2/services/nft/collection/{collectionSlug}: get: summary: "Returns NFT data for a given user and collection" description: "Returns NFT data for all linked wallets for a given user" parameters: - in: "path" name: "collectionSlug" schema: type: "string" required: true - name: "userId" in: "query" schema: format: "uuid" type: "string" tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/NFTServiceItem" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getUserNftHoldingsByCollectionSlug" /v2/services/nft/collection/{collectionSlug}/{tokenId}: put: summary: "Update token by collection" description: "Update token by collection" parameters: - in: "path" name: "collectionSlug" schema: type: "string" required: true - in: "path" name: "tokenId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateCollectionToken" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateTokenRequest" /v2/services/processes: delete: summary: "Force finish all processes for all users" description: "" parameters: [] responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "finishAllProcesses" tags: - "PROCESSES" /v2/services/news: get: summary: "Get all news articles" description: "" parameters: - name: "page" in: "query" description: "Page number" required: false schema: type: "integer" default: 1 - name: "limit" in: "query" description: "Amount per page (all articles when omitted)" required: false schema: type: "integer" responses: 200: description: "List of news articles ordered by order and creation date" content: application/json: schema: type: "object" properties: data: type: "array" items: $ref: "#/components/schemas/NewsArticleResponse" security: - serviceAuth: - "access" operationId: "getAllArticles" tags: - "NEWS" post: summary: "Create news article" description: "" parameters: [] responses: 200: description: "Created news article" content: application/json: schema: $ref: "#/components/schemas/NewsArticleResponse" 201: description: "Created" content: application/json: {} security: - serviceAuth: - "access" operationId: "createArticle" tags: - "NEWS" requestBody: content: multipart/form-data: schema: type: "object" required: - "title" - "content" - "rawContent" - "status" - "tags" properties: title: type: "string" description: "Article title, also used to generate the slug" content: type: "string" description: "Formatted (HTML) article body shown on the article page" rawContent: type: "string" description: "Plain-text version of the body, used for article previews" status: type: "string" enum: - "draft" - "published" description: "Publishing \"published\" sets the publish date and sends a push notification" tags: type: "string" description: "JSON-encoded array of tag strings, e.g. [\"Release Notes\"]" externalLink: type: "string" nullable: true description: "Optional external URL the article links to" coverImage: type: "string" format: "binary" description: "Cover image file (jpg/jpeg/png, max 10mb)" /v2/services/news/highlight: put: summary: "Update highlighted articles" description: "Sets the articles shown in the small and large highlight spots" parameters: [] responses: 200: description: "Highlights updated" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateArticleHighlight" tags: - "NEWS" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateArticleHighlightRequest" /v2/services/news/order: put: summary: "Update articles order" description: "" parameters: [] responses: 200: description: "" content: application/json: schema: type: "object" properties: success: type: "boolean" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateArticlesOrder" tags: - "NEWS" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateArticlesOrderRequest" /v2/services/news/image: post: summary: "Upload news article image" description: "" parameters: [] responses: 200: description: "Public URL of the uploaded image" content: application/json: schema: type: "string" 201: description: "Created" content: application/json: {} security: - serviceAuth: - "access" operationId: "uploadArticleImage" tags: - "NEWS" requestBody: content: multipart/form-data: schema: type: "object" required: - "image" properties: image: type: "string" format: "binary" description: "Image file (jpg/jpeg/png, max 10mb)" /v2/services/news/{articleId}: delete: summary: "Delete news article" description: "" parameters: - in: "path" name: "articleId" schema: type: "string" required: true - name: "articleId" in: "path" required: true schema: type: "string" responses: 200: description: "Number of deleted rows" content: application/json: schema: type: "number" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "deleteArticle" tags: - "NEWS" get: summary: "Get news article by id" description: "" parameters: - in: "path" name: "articleId" schema: type: "string" required: true - name: "articleId" in: "path" required: true schema: type: "string" responses: 200: description: "News article (empty body when not found)" content: application/json: schema: $ref: "#/components/schemas/NewsArticleResponse" security: - serviceAuth: - "access" operationId: "getArticleById" tags: - "NEWS" put: summary: "Edit news article" description: "" parameters: - in: "path" name: "articleId" schema: type: "string" required: true - name: "articleId" in: "path" required: true schema: type: "string" responses: 200: description: "Updated news article" content: application/json: schema: $ref: "#/components/schemas/NewsArticleResponse" 204: description: "No Content" content: application/json: {} security: - serviceAuth: - "access" operationId: "editArticle" tags: - "NEWS" requestBody: content: multipart/form-data: schema: type: "object" required: - "title" - "content" - "rawContent" - "status" - "tags" properties: title: type: "string" description: "Article title, also used to regenerate the slug" content: type: "string" description: "Formatted (HTML) article body shown on the article page" rawContent: type: "string" description: "Plain-text version of the body, used for article previews" status: type: "string" enum: - "draft" - "published" description: "Publishing \"published\" for the first time sets the publish date and sends a push notification" tags: type: "string" description: "JSON-encoded array of tag strings, e.g. [\"Release Notes\"]" externalLink: type: "string" nullable: true description: "Optional external URL the article links to" coverImage: type: "string" format: "binary" description: "New cover image file (jpg/jpeg/png, max 10mb); existing image kept when omitted" /v2/services/announcements: get: summary: "List announcements (paginated)" description: "" parameters: - name: "page" in: "query" schema: minimum: 1 type: "integer" - name: "limit" in: "query" schema: maximum: 50 type: "integer" minimum: 1 - name: "order_by" in: "query" schema: type: "string" enum: - "created_at" - "updated_at" - "expires_at" - "title" - name: "order_direction" in: "query" schema: type: "string" enum: - "asc" - "desc" responses: 200: description: "Paginated announcements" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/AnnouncementResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "Announcements" operationId: "listAnnouncements" post: summary: "Create an announcement, optionally with claimable gifts" description: "" parameters: [] responses: 200: description: "Created announcement" content: application/json: schema: $ref: "#/components/schemas/AnnouncementResponse" 400: description: "Unknown reward item" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "Announcements" operationId: "createAnnouncement" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateAnnouncementRequest" /v2/services/announcements/{announcementId}: get: summary: "Get an announcement by id" description: "" parameters: - in: "path" name: "announcementId" schema: type: "string" required: true - name: "announcementId" in: "path" required: true schema: type: "string" responses: 200: description: "Announcement" content: application/json: schema: $ref: "#/components/schemas/AnnouncementResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "Announcement not found" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - serviceAuth: - "access" tags: - "Announcements" operationId: "getAnnouncement" put: summary: "Update an announcement" description: "Rewards can only be changed while no player has claimed them." parameters: - in: "path" name: "announcementId" schema: type: "string" required: true - name: "announcementId" in: "path" required: true schema: type: "string" responses: 200: description: "Updated announcement" content: application/json: schema: $ref: "#/components/schemas/AnnouncementResponse" 400: description: "Unknown reward item or rewards locked" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "Announcement not found" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - serviceAuth: - "access" tags: - "Announcements" operationId: "updateAnnouncement" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateAnnouncementRequest" delete: summary: "Delete an announcement" description: "" parameters: - in: "path" name: "announcementId" schema: type: "string" required: true - name: "announcementId" in: "path" required: true schema: type: "string" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" 404: description: "Announcement not found" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - serviceAuth: - "access" tags: - "Announcements" operationId: "deleteAnnouncement" /v2/services/game_settings/full: get: summary: "Get full game settings" description: "" parameters: [] tags: - "SERVICES" responses: 200: description: "Game settings" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/FullGameSetting" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getFullGameSettings" /v2/services/game_settings/{key}: put: summary: "Update game setting by key" description: "Update game setting by key" parameters: - in: "path" name: "key" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateGameSettingByKey" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateGameSetting" get: summary: "Get game setting by key" description: "Get game setting by key" parameters: - in: "path" name: "key" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getGameSettingByKey" /v2/users/validate-email: get: summary: "Validate email" description: "Validate email address. Check if email exists in database." parameters: - name: "email" in: "query" required: true schema: type: "string" tags: - "USERS" responses: 200: description: "OK" content: application/json: {} 204: description: "" security: [] operationId: "validateEmail" /v2/users/validate-username: get: summary: "Validate username" description: "Validate username. Check if username exists in database." parameters: - name: "username" in: "query" required: true schema: pattern: "^[A-Za-z0-9\\u4e00-\\u9fff ]+$" type: "string" maxLength: 20 minLength: 3 description: "The username to validate (3-20 characters)." tags: - "USERS" responses: 200: description: "OK" content: application/json: {} 204: description: "Username is valid" security: [] operationId: "validateUsername" deprecated: true post: summary: "Validate username" description: "Validate username. Check if username exists in database." parameters: [] tags: - "USERS" responses: 201: description: "Created" content: application/json: {} 204: description: "Username is valid" security: [] operationId: "validateNewUsername" requestBody: content: application/json: schema: $ref: "#/components/schemas/ValidateUsernameRequest" /v2/users/lands: get: summary: "List all user lands" description: "Returns a list of user lands." parameters: [] tags: - "USERS" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/UserLand" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getLands" /v2/collectors/{username}: get: summary: "Get collector profile by username" description: "Get collector profile by username" parameters: - in: "path" name: "username" schema: type: "string" required: true tags: - "COLLECTORS" responses: 200: description: "Collector profile" content: application/json: schema: $ref: "#/components/schemas/CollectorProfile" security: [] operationId: "getCollectorProfileByUsername" /v2/services/users: get: summary: "Search users" description: "" parameters: - name: "searchParam" description: "Parameter to search by" in: "query" schema: type: "string" - name: "page" description: "Current page" in: "query" schema: type: "string" - name: "limit" description: "Limit per page" in: "query" schema: type: "string" - name: "sortBy" description: "Sort by field" in: "query" schema: type: "string" - name: "sortOrder" description: "Sort order (asc or desc)" in: "query" schema: type: "string" - name: "roleFilter" description: "Filter by user role (comma-separated: user, moderator, administrator)" in: "query" schema: type: "string" - name: "banFilter" description: "Filter by ban status (comma-separated: not_banned, temporary, permanent)" in: "query" schema: type: "string" - name: "muteFilter" description: "Filter by mute status (comma-separated: not_muted, temporary, permanent)" in: "query" schema: type: "string" tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/SearchUser" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "searchUsers" /v2/services/users/{userId}/professions: get: summary: "List all professions of the user with their level, experience and max level" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "The user professions" content: application/json: schema: $ref: "#/components/schemas/UserProfessionList" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "PROFESSIONS" operationId: "listUserProfessions" /v2/services/users/{userId}/professions/{professionKey}: put: summary: "Updates the level (and optionally experience) of a user profession" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "professionKey" schema: type: "string" required: true responses: 200: description: "The updated profession" content: application/json: schema: $ref: "#/components/schemas/Profession" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "PROFESSIONS" operationId: "updateUserProfessionLevel" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateProfessionLevelRequest" /v2/services/users/{userId}/professions/fishing: post: summary: "Handle fishing outcome" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FISHING" operationId: "fishingOutcome" requestBody: content: application/json: schema: $ref: "#/components/schemas/HandleFishingRequest" /v2/services/users/{userId}/professions/cooking: post: summary: "Handle cooking outcome" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "COOKING" operationId: "cookingOutcome" requestBody: content: application/json: schema: $ref: "#/components/schemas/HandleCookingRequest" /v2/services/users/{userId}/professions/firemaking: post: summary: "Handle fire making outcome" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FIREMAKING" operationId: "fireMakingOutcome" requestBody: content: application/json: schema: $ref: "#/components/schemas/HandleFireMakingRequest" /v2/services/users/{userId}/professions/soulcrafting: post: summary: "Handle soulcrafting outcome" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "Outcome item" content: application/json: schema: $ref: "#/components/schemas/SoulcraftingOutcome" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "soulCraftingOutcome" requestBody: content: application/json: schema: $ref: "#/components/schemas/HandleSoulcraftingRequest" /v2/services/users/{userId}/professions/crafting: post: summary: "Handle crafting outcome" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "CRAFTING" operationId: "craftingOutcome" requestBody: content: application/json: schema: $ref: "#/components/schemas/HandleCraftRequest" /v2/services/users/{userId}/professions/mining: post: summary: "Handle mining outcome" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "MINING" operationId: "miningOutcome" requestBody: content: application/json: schema: $ref: "#/components/schemas/HandleMiningRequest" /v2/services/users/{userId}/professions/shamanism/lesser_transformation: post: summary: "Handle lesser transformation spell casting" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/LesserTransformationSpellCastResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "castLesserTransformationSpell" requestBody: content: application/json: schema: $ref: "#/components/schemas/LesserTransformationSpellCast" /v2/services/users/{userId}/professions/shamanism/unlock_spell: post: summary: "Unlock a shamanism spell using a scroll" description: "Consumes a scroll item from inventory to permanently unlock a spell." parameters: - in: "path" name: "userId" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "Spell unlocked successfully" content: application/json: schema: $ref: "#/components/schemas/UnlockSpellResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "unlockSpell" requestBody: content: application/json: schema: $ref: "#/components/schemas/UnlockSpellRequest" /v2/services/users/{userId}/professions/shamanism: post: summary: "Handle shamanism spell casting" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/SpellCastResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "castShamanismSpell" requestBody: content: application/json: schema: $ref: "#/components/schemas/ShamanismSpellCast" /v2/services/users/{userId}/professions/{professionKey}/track: post: summary: "Increases experience of the user profession by the provided trigger" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "professionKey" schema: type: "string" required: true responses: 200: description: "The updated profession" content: application/json: schema: $ref: "#/components/schemas/Profession" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "PROFESSIONS" operationId: "track" requestBody: content: application/json: schema: $ref: "#/components/schemas/TrackProfessionRequest" /v2/services/users/{userId}/generate_access_token: post: summary: "Generate access token" description: "Generate access token and refresh token for user" parameters: - in: "path" name: "userId" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/AccessTokenResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} operationId: "generateAccessTokenByUserId" /v2/services/users/{userId}/dungeons/{dungeonType}/stage/{dungeonIndex}: put: summary: "Update the user's dungeon data" description: "Update the user's dungeon data" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "dungeonType" schema: type: "string" required: true - in: "path" name: "dungeonIndex" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/DungeonResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateUserDungeon" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateDungeonRequest" get: summary: "Retrieve the user's dungeon data" description: "Retrieve the user's dungeon data by specifying the type and index" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "dungeonType" schema: type: "string" required: true - in: "path" name: "dungeonIndex" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/DungeonResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getUserDungeon" /v2/services/users/{userId}/dungeons/{dungeonType}: put: summary: "Update the user's dungeons progress" description: "Update the user's dungeons progress" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "dungeonType" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateUserDungeonProgress" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateDungeonProgressRequest" /v2/services/users/{userId}/settings/{key}: delete: summary: "Deletes a user setting by key" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "key" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "deleteUserSettings" put: summary: "Update a user setting by key" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "key" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateUserSettings" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateUserSettings" /v2/services/users/{userId}/battle/inventory: post: summary: "Use inventory item in battle" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "On-chain mode is disabled" content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" security: - serviceAuth: - "access" tags: - "BATTLE" operationId: "useItem" requestBody: content: application/json: schema: $ref: "#/components/schemas/UseInventoryItemRequest" /v2/services/users/{userId}/room-position: put: summary: "Update room position" description: "Updates latest position in the room" parameters: - in: "path" name: "userId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateRoomPosition" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateRoomPosition" /v2/services/users/{userId}/ban: patch: summary: "Ban or unban a user" description: "Change the ban status of a user" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "User banned/unbanned successfully" content: application/json: schema: $ref: "#/components/schemas/User" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "updateBanStatus" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateUserBanStatusRequest" /v2/services/users/{userId}/mute: patch: summary: "Mute or unmute a user" description: "Change the mute status of a user" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "User muted/unmuted successfully" content: application/json: schema: $ref: "#/components/schemas/User" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "updateMuteStatus" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateUserMuteStatusRequest" /v2/services/users/{userId}/role: patch: summary: "Update user role" description: "Update a user's role." parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "User role updated successfully" content: application/json: schema: $ref: "#/components/schemas/User" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "updateUserRole" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateUserRoleRequest" /v2/services/users/{userId}/impersonation-password: post: summary: "Generate impersonation password" description: "Generate a one-time temporary password to log in as the user. Valid for 1 hour, single use." parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 201: description: "Temporary password generated" content: application/json: schema: $ref: "#/components/schemas/ImpersonationPasswordResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} tags: - "USERS" operationId: "generateImpersonationPassword" /v2/services/users/{userId}/overview: get: summary: "Get aggregated overview of a user (profile, inventory counts, dungeons, trades, analytics)" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "User overview" content: application/json: schema: $ref: "#/components/schemas/UserOverview" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "getUserOverview" /v2/services/users/{userId}/account: get: summary: "Get account details by user id" description: "Returns account identity and the selected wallet for trusted services. Requires a service token." parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "Account identity and selected wallet" content: application/json: schema: $ref: "#/components/schemas/AccountDetails" 401: description: "Service token required" 403: description: "Returns **403** (Forbidden)" 404: description: "User not found" security: - serviceAuth: - "access" tags: - "ACCOUNT" operationId: "getAccountDetailsById" /v2/services/users/{userId}/social-accounts: get: summary: "Get all social accounts linked to a user" description: "Returns every social account (google, apple, device) linked to the given user, with device hardware details attached to device logins." parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "Linked social accounts" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/UserSocialAccount" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "getUserSocialAccounts" /v2/services/users/{userId}/marketplace-listings: get: summary: "Get a user's marketplace listings with summary stats and 30-day activity chart" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "User marketplace listings" content: application/json: schema: $ref: "#/components/schemas/UserMarketplaceListings" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "getUserMarketplaceListings" /v2/services/users/{userId}/gex-trades: get: summary: "Get a user's GEX trade history with summary stats and 30-day activity chart" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "User GEX trades" content: application/json: schema: $ref: "#/components/schemas/UserGexTrades" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "getUserGexTrades" /v2/services/users/{userId}/inventory-events: get: summary: "Get a user's recent inventory acquisition events (sourced from analytics service)" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "User inventory events" content: application/json: schema: {} 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "getUserInventoryEvents" /v2/services/users/{userId}/unlockables: post: summary: "Unlock content for user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "unlock" requestBody: content: application/json: schema: $ref: "#/components/schemas/UnlockRequest" /v2/services/users/{userId}/unlockables/{unlockId}: get: summary: "Check if user has unlocked content" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "unlockId" schema: type: "string" required: true responses: 200: description: "Unlockable state" content: application/json: schema: $ref: "#/components/schemas/UnlockableState" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "isUnlocked" delete: summary: "Lock content for user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "unlockId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "lock" /v2/services/users/{userId}/processes: get: summary: "Get all user processes" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Process" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getAllUserProcesses" tags: - "PROCESSES" /v2/services/users/{userId}/processes/{processId}: post: summary: "Force finish a specific user processes" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "processId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} operationId: "finishProcess" tags: - "PROCESSES" /v2/services/users/{userId}/daily-login-rewards: get: summary: "Get daily login reward status for any user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "Daily login reward status" content: application/json: schema: $ref: "#/components/schemas/DailyLoginAdminStatusResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "DailyLoginReward" operationId: "getUserDailyLoginReward" delete: summary: "Reset a user daily login reward state" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "DailyLoginReward" operationId: "resetUserDailyLoginReward" /v2/services/users/{userId}/daily-login-rewards/clear-cooldown: post: summary: "Clear daily login reward cooldown for a user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} tags: - "DailyLoginReward" operationId: "clearDailyLoginCooldown" /v2/services/users/{userId}/daily-login-rewards/advance-day: post: summary: "Advance the current daily login reward day for a user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} tags: - "DailyLoginReward" operationId: "advanceDailyLoginDay" /v2/services/users/{userId}/quests: get: summary: "Get a list of quests for the user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "List of user's quests" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/Quest" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getQuestsByUserId" tags: - "QUESTS" /v2/services/users/{userId}/quests/{questId}: put: summary: "Force complete a specific quest for the user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "questId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} operationId: "forceCompleteQuest" tags: - "QUESTS" delete: summary: "Delete a specific quest for the user" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "questId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "deleteQuest" tags: - "QUESTS" /v2/services/users/{userId}/quests/{questId}/objectives/{objectiveId}: put: summary: "Complete a quest objective for the user." description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "questId" schema: type: "string" required: true - in: "path" name: "objectiveId" schema: type: "string" required: true responses: 200: description: "The completed quest" content: application/json: schema: $ref: "#/components/schemas/Quest" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} operationId: "forceCompleteObjective" tags: - "QUESTS" delete: summary: "Deletes a quest objective for the user and marks the previous one as active." description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "questId" schema: type: "string" required: true - in: "path" name: "objectiveId" schema: type: "string" required: true responses: 200: description: "The quest" content: application/json: schema: $ref: "#/components/schemas/Quest" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "deleteObjective" tags: - "QUESTS" /v2/services/users/{userId}/quests/{questId}/objectives/{objectiveId}/state: get: summary: "Returns the objective state, if its valid or not." description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "questId" schema: type: "string" required: true - in: "path" name: "objectiveId" schema: type: "string" required: true responses: 200: description: "The result" content: application/json: schema: $ref: "#/components/schemas/QuestObjectiveState" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getObjectiveState" tags: - "QUESTS" put: summary: "Tries to fix the objective state, if its invalid." description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "questId" schema: type: "string" required: true - in: "path" name: "objectiveId" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} operationId: "fixObjectiveState" tags: - "QUESTS" /v2/services/users/{userId}/states/{scope}: patch: summary: "Patches a user state by the scope using operations" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - name: "scope" in: "path" required: true schema: type: "string" format: "*" responses: 200: description: "The specific state" content: application/json: schema: $ref: "#/components/schemas/UserState" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "STATES" operationId: "patchScopedState" requestBody: content: application/json: schema: $ref: "#/components/schemas/PatchStateRequest" /v2/services/users/{userId}/inventory/{itemId}: get: summary: "Get item from the users inventory" description: "" parameters: - in: "path" name: "userId" schema: type: "string" required: true - in: "path" name: "itemId" schema: type: "string" required: true responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/Item" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "INVENTORY" operationId: "getUserInventoryItem" /v2/services/users/bulk-ban: patch: summary: "Bulk update user ban status" description: "Bulk update user ban status" parameters: [] responses: 200: description: "Users updated" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/User" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "bulkUpdateUserBanStatus" requestBody: content: application/json: schema: $ref: "#/components/schemas/BulkUpdateBanStatusRequest" /v2/services/quests/{questId}/corrupted: get: summary: "Returns a list of corrupted quests." description: "" parameters: - in: "path" name: "questId" schema: type: "string" required: true responses: 200: description: "The result" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/CorruptedQuest" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getCorruptedQuests" tags: - "QUESTS" /v2/services/trees/{treeKey}/items: post: summary: "Handle woodcutting outcome" description: "" parameters: - in: "path" name: "treeKey" schema: type: "string" required: true responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "TREES" operationId: "woodCuttingOutcome" requestBody: content: application/json: schema: $ref: "#/components/schemas/HandleWoodRequest" /v2/services/tokens/transactions: post: summary: "Register token transaction" description: "" parameters: [] tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/TokenTransaction" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "registerTokenTransaction" requestBody: content: application/json: schema: $ref: "#/components/schemas/RegisterTokenTransactionRequest" get: summary: "Check if token transaction exists" description: "Check if token transaction exists by given source type and source id" parameters: - name: "userId" description: "User ID" schema: type: "string" format: "uuid" in: "query" - name: "sourceType" description: "Source type" schema: type: "string" in: "query" - name: "sourceId" description: "Source ID" schema: type: "string" in: "query" tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/TokenTransaction" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "tokenTransactionExists" /v2/services/tokens/transactions/{userId}: get: summary: "List all token transactions for a user" description: "Returns every token transaction belonging to the given user. Used by analytics to reconcile its local transaction copy." parameters: - in: "path" name: "userId" schema: type: "string" required: true responses: 200: description: "" content: application/json: schema: type: "object" properties: items: type: "array" items: $ref: "#/components/schemas/UserTokenTransaction" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "TOKENS" operationId: "getUserTokenTransactions" /v2/services/suspicious-users: get: summary: "Get all suspicous user scores" description: "Get a paginated list of suspicious scores for all users, that is cached for 1 hour." parameters: - name: "page" in: "query" schema: maximum: 9999999 type: "number" minimum: 1 - name: "limit" in: "query" schema: maximum: 1000 type: "number" minimum: 1 - name: "reload" in: "query" schema: type: "boolean" responses: 200: description: "" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/SuspiciousUser" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "USERS" operationId: "getAllSuspiciousUserScores" /v2/services/tribes/all: get: summary: "Get all tribes with their members" description: "Returns every tribe together with its owner, land, elo rank and member ranks. Used by analytics to sync tribe state." parameters: [] responses: 200: description: "" content: application/json: schema: type: "object" properties: data: type: "array" items: $ref: "#/components/schemas/TribeAnalytics" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "TRIBES" operationId: "getAllTribeData" /v2/services/tournaments: get: summary: "List tournaments" description: "Returns a paginated list of tournaments, optionally filtered by stage or limited to scheduled ones." parameters: - name: "page" in: "query" schema: minimum: 1 type: "number" - name: "perPage" in: "query" schema: maximum: 100 type: "number" minimum: 1 - name: "stage" in: "query" schema: type: "string" description: "Comma separated list of stages to filter by" - name: "scheduled" in: "query" schema: type: "boolean" - name: "orderBy" in: "query" schema: type: "string" - name: "direction" in: "query" schema: type: "string" enum: - "asc" - "desc" responses: 200: description: "" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/Tournament" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "TOURNAMENTS" operationId: "listTournaments" /v2/services/top/earners: get: summary: "Get the top earning users" description: "Returns the top 100 users by earnings. Unlike the player-facing route this one carries no user context, so no leaderboard position is returned." parameters: [] responses: 200: description: "" content: application/json: schema: type: "object" properties: list: type: "array" items: $ref: "#/components/schemas/TopEarner" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "LEADERBOARD" operationId: "getTopEarners" /v2/services/subscription_codes: get: summary: "Get all subscription codes" description: "Get all subscription codes" parameters: [] tags: - "SERVICES" responses: 200: description: "Subscription Code" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/SubscriptionCodeResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getAllSubscriptionCodes" post: summary: "Create subscription code" description: "Create subscription code" parameters: [] tags: - "SERVICES" responses: 200: description: "Subscription Code" content: application/json: schema: $ref: "#/components/schemas/SubscriptionCodeResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "createSubscriptionCode" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateSubscriptionCodeRequest" /v2/services/subscription_codes/{codeId}: put: summary: "Update subscription code" description: "Update subscription code" parameters: - in: "path" name: "codeId" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "Subscription Code" content: application/json: schema: $ref: "#/components/schemas/SubscriptionCodeResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateSubscriptionCode" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateSubscriptionCodeRequest" delete: summary: "Delete subscription code" description: "Delete subscription code" parameters: - in: "path" name: "codeId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "deleteSubscriptionCode" /v2/services/ambassadors: get: summary: "Get ambassadors" description: "Get ambassadors" parameters: - name: "searchParam" description: "Parameter to search by" in: "query" schema: type: "string" - name: "page" description: "Current page" in: "query" schema: type: "string" - name: "limit" description: "Limit per page" in: "query" schema: type: "string" - name: "query" description: "Query array to search by" in: "query" schema: type: "string" tags: - "SERVICES" responses: 200: description: "Ambassadors" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/AmbassadorResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getAmbassadors" /v2/services/ambassadors/potential_rewards: get: summary: "Get potential earnings" description: "Get potential earnings" parameters: - name: "searchParam" description: "Parameter to search by" in: "query" schema: type: "string" - name: "page" description: "Current page" in: "query" schema: type: "string" - name: "limit" description: "Limit per page" in: "query" schema: type: "string" - name: "query" description: "Query array to search by" in: "query" schema: type: "string" tags: - "SERVICES" responses: 200: description: "Transactions" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/TransactionResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getPotentialEarnings" /v2/services/ambassadors/vested_rewards: get: summary: "Get vested earnings" description: "Get vested earnings" parameters: - name: "searchParam" description: "Parameter to search by" in: "query" schema: type: "string" - name: "page" description: "Current page" in: "query" schema: type: "string" - name: "limit" description: "Limit per page" in: "query" schema: type: "string" - name: "query" description: "Query array to search by" in: "query" schema: type: "string" tags: - "SERVICES" responses: 200: description: "Transactions" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/TransactionResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getVestedEarnings" /v2/services/ambassadors/pre_stake: post: summary: "Pre-stake" description: "Pre-stake" parameters: - name: "searchParam" description: "Parameter to search by" in: "query" schema: type: "string" - name: "page" description: "Current page" in: "query" schema: type: "string" - name: "limit" description: "Limit per page" in: "query" schema: type: "string" - name: "query" description: "Query array to search by" in: "query" schema: type: "string" tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "preStake" requestBody: content: application/json: schema: $ref: "#/components/schemas/PreStakeRequest" /v2/services/wallets/{walletId}: put: summary: "Update wallet" description: "Update wallet by id" parameters: - in: "path" name: "walletId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "updateWalletById" requestBody: content: application/json: schema: $ref: "#/components/schemas/EditWalletByIdRequest" /v2/services/feature-flags: get: summary: "Get all feature flags" description: "Get all feature flags." parameters: [] responses: 200: description: "All feature flags" content: application/json: schema: $ref: "#/components/schemas/GetAllFeatureFlagsResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FEATURE FLAGS" operationId: "getAllFeatureFlags" /v2/services/feature-flags/{flagName}: get: summary: "Get a specific feature flag" description: "Get a specific feature flag." parameters: - in: "path" name: "flagName" schema: type: "string" required: true responses: 200: description: "The specific feature flag" content: application/json: schema: $ref: "#/components/schemas/GetFeatureFlagResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FEATURE FLAGS" operationId: "getFeatureFlag" /v2/services/feature-flags/{flagName}/toggle: post: summary: "Toggle feature flag" description: "Toggles feature flag for specified flag name." parameters: - in: "path" name: "flagName" schema: type: "string" required: true responses: 204: description: "The feature flag was toggled" content: application/json: schema: {} 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" tags: - "FEATURE FLAGS" operationId: "toggleFeatureFlag" requestBody: content: application/json: schema: $ref: "#/components/schemas/ToggleFeatureFlagRequest" /v2/services/treasure-pot/revert: post: summary: "Reverts all Heist tokens for all users" description: "Reverts all Heist tokens for all users. This is a one-time operation intended for disabling the Heist feature." parameters: [] responses: 200: description: "All Heist tokens reverted successfully" content: application/json: schema: $ref: "#/components/schemas/RevertHeistTokensResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} tags: - "TreasurePot" operationId: "revertAllHeistTokens" /v2/services/p2a: get: summary: "Retrieves user data for P2A" description: "" parameters: [] tags: - "SERVICES" responses: 200: description: "User data" content: application/json: schema: $ref: "#/components/schemas/UserP2ADataResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getServiceP2AUserData" /v2/services/collectors/{wallet}: get: summary: "Get collector profile by wallet" description: "Get collector profile by wallet" parameters: - in: "path" name: "wallet" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "Collector profile" content: application/json: schema: $ref: "#/components/schemas/CollectorsProfileMinimal" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getCollectorProfileByWallet" /v2/p2a: get: summary: "Retrieves user data for P2A" description: "" parameters: [] responses: 200: description: "User data" content: application/json: schema: $ref: "#/components/schemas/UserP2ADataResponse" security: [] tags: - "P2A" operationId: "getUserData" /v2/p2a/claim: post: summary: "Claim completed task rewards" description: "" parameters: [] responses: 200: description: "Claimed P2A task" content: application/json: schema: $ref: "#/components/schemas/ClaimedTaskResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "P2A" operationId: "claimTaskRewards" requestBody: content: application/json: schema: $ref: "#/components/schemas/ClaimTaskRequest" /v2/p2a/social/completed: post: summary: "Mark social task as completed" description: "" parameters: [] responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "P2A" operationId: "markSocialTaskAsCompleted" requestBody: content: application/json: schema: $ref: "#/components/schemas/ClaimTaskRequest" /v2/p2a/daily/signature: post: summary: "Returns a user's daily reward signature" description: "" parameters: [] responses: 200: description: "P2A daily reward signature" content: application/json: schema: $ref: "#/components/schemas/GetDailyRewardSignatureResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "P2A" operationId: "getDailyRewardSignature" requestBody: content: application/json: schema: $ref: "#/components/schemas/GetDailyRewardSignatureRequest" /v2/p2a/daily/claim: post: summary: "Claim a user's daily reward" description: "" parameters: [] responses: 200: description: "Claimed P2A daily reward" content: application/json: schema: $ref: "#/components/schemas/ClaimDailyRewardResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "P2A" operationId: "claimDailyReward" requestBody: content: application/json: schema: $ref: "#/components/schemas/ClaimDailyRewardRequest" /v2/forest-tokens/{wallet}/seeds: get: summary: "Retrieve the user's forest token seeds" description: "Retrieve the user's forest token seeds" parameters: - in: "path" name: "wallet" schema: type: "string" required: true tags: - "FOREST-TOKENS" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/SeedsResponse" security: [] operationId: "getSeeds" /v2/forest-tokens/{wallet}/claims: get: summary: "Retrieve the wallet's forest token claims" description: "Retrieve the wallet's forest token claims" parameters: - in: "path" name: "wallet" schema: type: "string" required: true tags: - "FOREST-TOKENS" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/ClaimsResponse" security: [] operationId: "getWalletClaims" /v2/forest-tokens/seeds/leaderboard: get: summary: "Retrieve leaderboard of top wallets with seeds" description: "Retrieve leaderboard of top wallets with seeds" parameters: [] tags: - "FOREST-TOKENS" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/SeedsLeaderboardResponse" security: [] operationId: "getSeedsLeaderboard" /v2/services/metadata/{contract}/{tokenId}/stats: get: summary: "Get metadata with stats by contract and token ID" description: "Get metadata with stats by contract and token ID" parameters: - in: "path" name: "contract" schema: type: "string" required: true - in: "path" name: "tokenId" schema: type: "string" required: true tags: - "SERVICES" responses: 200: description: "NFT metadata stats" content: application/json: schema: $ref: "#/components/schemas/MetadataWithStats" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getMetadataWithStats" /v2/services/metadata/{contract}/{tokenId}/cache: delete: summary: "Clear cache by contract and token ID" description: "Clear cache by contract and token ID" parameters: - in: "path" name: "contract" schema: type: "string" required: true - in: "path" name: "tokenId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "clearTokenNftMetadataCache" /v2/services/metadata/{contract}/{tokenId}/resized-images: delete: summary: "Delete all resized images by contract and token ID" description: "Delete all resized images and token ID" parameters: - in: "path" name: "contract" schema: type: "string" required: true - in: "path" name: "tokenId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "deleteAllResizedMetadataImages" /v2/services/metadata/{contract}/cache: delete: summary: "Clear cache by contract" description: "Clear cache by contract" parameters: - in: "path" name: "contract" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "clearContractNftMetadataCache" /v2/services/metadata/cache: delete: summary: "Clear all metadata cache" description: "Clear all metadata cache" parameters: [] tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "clearAllNftMetadataCache" /v2/services/metadata/item-images/{itemId}/cache: delete: summary: "Invalidate CDN cache for an item image" description: "Invalidate the CloudFront cache for items/images/{itemId} after a new icon upload" parameters: - in: "path" name: "itemId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "invalidateItemImageCdn" /v2/offchain-gex/items/{itemId}/candles: get: summary: "Get candlestick chart data for an item" description: "Returns OHLCV (Open, High, Low, Close, Volume) data for displaying price charts" parameters: - in: "path" name: "itemId" schema: type: "string" required: true - name: "interval" in: "query" required: true schema: type: "string" enum: - "1m" - "5m" - "15m" - "1h" - "4h" - "1d" description: "Time interval for each candle. Determines the granularity of price data" example: "1h" - name: "limit" in: "query" required: false schema: maximum: 1000 type: "integer" minimum: 1 description: "Maximum number of candles to return. Use lower values for faster response" example: 100 default: 100 - name: "startTime" in: "query" required: false schema: description: "Start time for candle data (ISO 8601 format). Only candles after this time are returned" example: "2025-11-07T00:00:00.000Z" type: "string" format: "date-time" - name: "endTime" in: "query" required: false schema: description: "End time for candle data (ISO 8601 format). Only candles before this time are returned" example: "2025-11-08T00:00:00.000Z" type: "string" format: "date-time" tags: - "OFFCHAIN-GEX" responses: 200: description: "Candle data for chart" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/CandleData" security: [] operationId: "getCandles" /v2/offchain-gex/items/{itemId}/trades: get: summary: "Get trade history for an item" description: "Returns list of trades ordered by time (most recent first)" parameters: - in: "path" name: "itemId" schema: type: "string" required: true - name: "page" in: "query" schema: minimum: 1 type: "integer" example: 7 default: 1 - name: "limit" in: "query" schema: maximum: 250 type: "integer" minimum: 1 description: "Maximum number of recent trades to return. Latest trades are returned first" example: 50 default: 250 tags: - "OFFCHAIN-GEX" responses: 200: description: "Trades" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/TradeData" security: [] operationId: "getTrades" /v2/offchain-gex/items/{itemId}/trades/history: get: summary: "Get trade history as colon-delimited strings" description: "Returns paginated trades formatted as colon-delimited strings matching the contract_history shape: `timestamp:operationType:veeAmount:itemAmount:transactionId:unitPrice`. `operationType` is 0 (buy) or 1 (sell). `unitPrice` is VEE per item." parameters: - in: "path" name: "itemId" schema: type: "string" required: true - name: "page" in: "query" schema: minimum: 1 type: "integer" example: 7 default: 1 - name: "limit" in: "query" schema: maximum: 250 type: "integer" minimum: 1 description: "Maximum number of recent trades to return. Latest trades are returned first" example: 50 default: 250 tags: - "OFFCHAIN-GEX" responses: 200: description: "Trade history events" content: application/json: schema: $ref: "#/components/schemas/ContractHistoryResponse" security: [] operationId: "getTradesHistory" /v2/offchain-gex/items/{itemId}/recent_trades: get: summary: "Get recent trade history for an item" description: "Returns list of recent trades ordered by time (most recent first)" parameters: - in: "path" name: "itemId" schema: type: "string" required: true - name: "page" in: "query" schema: minimum: 1 type: "integer" example: 7 default: 1 - name: "limit" in: "query" schema: maximum: 250 type: "integer" minimum: 1 description: "Maximum number of recent trades to return. Latest trades are returned first" example: 50 default: 250 tags: - "OFFCHAIN-GEX" responses: 200: description: "Recent trades" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/TradeData" security: [] operationId: "getRecentTrades" /v2/offchain-gex/leaderboard: get: summary: "Get trader leaderboard" description: "Ranks non-bot traders by realized average-cost P&L or executed VEE volume. Ties use user ID. Results may be cached for one minute." parameters: - name: "period" in: "query" required: true schema: type: "string" enum: - "24h" - "7d" - "30d" - "all" default: "7d" - name: "metric" in: "query" required: true schema: type: "string" enum: - "pnl" - "volume" default: "pnl" - name: "limit" in: "query" required: true schema: maximum: 100 type: "integer" minimum: 1 default: 50 responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/TraderLeaderboardEntry" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" tags: - "OffchainGex" operationId: "getTraderLeaderboard" /v2/offchain-gex/swap/vee-for-items: post: summary: "Swap VEE for items in an off-chain pool" description: "" parameters: [] tags: - "OFFCHAIN-GEX" responses: 200: description: "Swap outcome" content: application/json: schema: $ref: "#/components/schemas/SwapOutcomeResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "swapVeeForItems" requestBody: content: application/json: schema: $ref: "#/components/schemas/SwapVeeForItemsRequest" /v2/offchain-gex/swap/items-for-vee: post: summary: "Swap items for VEE in an off-chain pool" description: "" parameters: [] tags: - "OFFCHAIN-GEX" responses: 200: description: "Swap outcome" content: application/json: schema: $ref: "#/components/schemas/SwapOutcomeResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "swapItemsFroVee" requestBody: content: application/json: schema: $ref: "#/components/schemas/SwapItemsForVeeRequest" /v2/offchain-gex/pools: get: summary: "Return all enabled pools" description: "" parameters: [] tags: - "OFFCHAIN-GEX" responses: 200: description: "GEX pools" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/PoolResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getPools" /v2/offchain-gex/liquidity/add: post: summary: "Add liquidity to an off-chain pool and receive LP tokens" description: "" parameters: [] tags: - "OFFCHAIN-GEX" responses: 200: description: "Liquidity addition outcome" content: application/json: schema: $ref: "#/components/schemas/AddLiquidityResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "addLiquidity" requestBody: content: application/json: schema: $ref: "#/components/schemas/AddLiquidityRequest" /v2/offchain-gex/liquidity/remove: post: summary: "Remove liquidity from an off-chain pool by burning LP tokens" description: "" parameters: [] tags: - "OFFCHAIN-GEX" responses: 200: description: "Liquidity removal outcome" content: application/json: schema: $ref: "#/components/schemas/RemoveLiquidityResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "removeLiquidity" requestBody: content: application/json: schema: $ref: "#/components/schemas/RemoveLiquidityRequest" /v2/offchain-gex/liquidity/positions: get: summary: "Get all liquidity positions for authenticated user" description: "" parameters: [] tags: - "OFFCHAIN-GEX" responses: 200: description: "User liquidity positions" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/LiquidityPosition" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAllUserLiquidityPositions" /v2/offchain-gex/liquidity/positions/{poolId}: get: summary: "Get all liquidity positions for authenticated user" description: "" parameters: - in: "path" name: "poolId" schema: type: "string" required: true tags: - "OFFCHAIN-GEX" responses: 200: description: "User liquidity positions by pool id" content: application/json: schema: $ref: "#/components/schemas/LiquidityPositionsByPoolId" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getUserLiquidityPositions" /v2/offchain-gex/liquidity/quote/add: post: summary: "Get quote for adding liquidity to a pool" description: "" parameters: [] tags: - "OFFCHAIN-GEX" responses: 200: description: "Add liquidity quote" content: application/json: schema: $ref: "#/components/schemas/AddLiquidityQuoteResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAddLiquidityQuote" requestBody: content: application/json: schema: $ref: "#/components/schemas/GetAddLiquidityQuoteRequest" /v2/offchain-gex/liquidity/quote/remove: post: summary: "Get quote for removing liquidity from a pool" description: "" parameters: [] tags: - "OFFCHAIN-GEX" responses: 200: description: "Remove liquidity quote" content: application/json: schema: $ref: "#/components/schemas/RemoveLiquidityQuoteResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getRemoveLiquidityQuote" requestBody: content: application/json: schema: $ref: "#/components/schemas/GetRemoveLiquidityQuoteRequest" /v2/services/offchain-gex/pools: get: summary: "Get all offchain gex pools" description: "" parameters: [] tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/ServicePoolResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "getAllOffchainGexPools" post: summary: "Create a new pool" description: "" parameters: [] tags: - "SERVICES" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ServicePoolResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "createPool" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreatePoolRequest" /v2/services/offchain-gex/pools/{poolId}/enable: put: summary: "Enable a pool by id" description: "" parameters: - in: "path" name: "poolId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} operationId: "enablePool" /v2/services/offchain-gex/pools/{poolId}/disable: put: summary: "Enable a pool by id" description: "" parameters: - in: "path" name: "poolId" schema: type: "string" required: true tags: - "SERVICES" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" requestBody: content: application/json: {} operationId: "disablePool" /v2/services/offchain-gex/liquidity/add: post: summary: "Add liquidity to an off-chain pool and receive LP tokens" description: "" parameters: [] tags: - "SERVICES" responses: 200: description: "Liquidity addition outcome" content: application/json: schema: $ref: "#/components/schemas/AddLiquidityResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "addOffchainLiquidity" requestBody: content: application/json: schema: $ref: "#/components/schemas/AdjustLiquidityRequest" /v2/services/offchain-gex/liquidity/remove: post: summary: "Remove liquidity from an off-chain pool by burning LP tokens" description: "" parameters: [] tags: - "SERVICES" responses: 200: description: "Liquidity removal outcome" content: application/json: schema: $ref: "#/components/schemas/RemoveLiquidityResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - serviceAuth: - "access" operationId: "removeOffchainLiquidity" requestBody: content: application/json: schema: $ref: "#/components/schemas/AdjustLiquidityRequest" /v2/contact-us: post: summary: "Send contact us message" description: "Sends a contact us message to the ZeeVerse team" parameters: [] tags: - "CONTACT-US" responses: 201: description: "Created" content: application/json: {} 204: description: "" security: [] requestBody: content: application/json: {} operationId: "sendContractUsMessage" /v2/contract_history: get: summary: "Get paginated contract event history" description: "Returns paginated contract events ordered by block number (most recent first). Filter by one or more contract addresses (comma-separated) and an event name. Each row is a colon-delimited string: `timestamp:operationType:veeAmount:itemAmount:transactionId:unitPrice`. `unitPrice` is VEE per item, derived from the swap amounts." parameters: - name: "contracts" in: "query" required: true schema: items: type: "string" type: "string" minItems: 1 description: "Comma-separated contract addresses to fetch history for" example: "0x0000000000000000000000000000000000000000,0x1111111111111111111111111111111111111111" - name: "event" in: "query" required: true schema: type: "string" description: "Event name to filter by" example: "Swap" - name: "page" in: "query" required: false schema: minimum: 1 type: "integer" example: 1 default: 1 - name: "limit" in: "query" required: false schema: maximum: 500 type: "integer" minimum: 1 description: "Items per page" example: 50 default: 50 tags: - "CONTRACT_HISTORY" responses: 200: description: "Contract history events" content: application/json: schema: $ref: "#/components/schemas/ContractHistoryResponse" security: [] operationId: "getContractHistory" /v2/offchain-marketplace: get: summary: "Search and browse marketplace listings" description: "Searches active marketplace listings with support for filtering by type (Zee/Items), price range. Results can be sorted by price or creation date. Returns paginated results with seller information and item metadata. The `volume` field contains lifetime sold volume (in wei) grouped by listing type." parameters: - name: "type" in: "query" schema: items: enum: - "zee" - "items" type: "string" type: "array" description: "Filter by one or more listing types" example: - "zee" - "items" - name: "evolution" in: "query" schema: items: minimum: 1 type: "number" type: "array" description: "Filter by one or more evolution levels" example: - 1 - 2 minimum: 1 - name: "zeeType" in: "query" schema: items: type: "string" type: "array" description: "Filter by one or more ZEE types" example: - "fire" - "water" - name: "visual" in: "query" schema: items: type: "string" type: "array" description: "Filter ZEE listings by one or more visuals" example: - "Zoomba" - "Taka" - name: "itemId" in: "query" schema: items: type: "string" type: "array" description: "Filter item listings by one or more item token ids" example: - "1" - "42" - name: "level" in: "query" schema: items: minimum: 1 type: "number" type: "array" description: "Filter by one or more levels" example: - 1 - 10 minimum: 1 - name: "trait1" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the first creature trait slot" example: - "damage" - "speed" - name: "trait2" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the second creature trait slot" example: - "defense" - name: "trait3" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the third creature trait slot" example: - "critical" - name: "trait4" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the fourth creature trait slot" example: - "hitpoints" - name: "minPrice" in: "query" schema: type: "string" description: "Minimum price in offchain VEE (wei)" example: "1000000000000000000" pattern: "^\\d+$" - name: "maxPrice" in: "query" schema: type: "string" description: "Maximum price in offchain VEE (wei)" example: "10000000000000000000" pattern: "^\\d+$" - name: "query" in: "query" schema: type: "string" description: "Search keyword to find listings by name or attributes" example: "Metal Axe, Axe" - name: "excludeOwnListings" in: "query" schema: type: "boolean" description: "Exclude listings created by the authenticated user" example: true default: false - name: "sortBy" in: "query" schema: enum: - "price_asc" - "price_desc" - "created_desc" type: "string" description: "Sort order for results" example: "price_asc" - name: "page" in: "query" schema: minimum: 1 type: "number" description: "Page number for pagination" example: 1 - name: "perPage" in: "query" schema: maximum: 100 type: "number" minimum: 1 description: "Number of items per page" example: 20 - name: "showAll" in: "query" schema: type: "boolean" description: "Return every active item listing without deduping by token id (default returns only the cheapest per item). Pass `?showAll` (no value) or `?showAll=true` to enable." example: true default: false tags: - "OFFCHAIN-MARKETPLACE" responses: 200: description: "" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true volume: type: "object" description: "Lifetime sold volume per listing type (in wei)." properties: zee: type: "string" example: "3000000000000000000" items: type: "string" example: "500000000000000000" data: type: "array" items: $ref: "#/components/schemas/ListingResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "searchListings" /v2/offchain-marketplace/history: get: summary: "Get global marketplace sales history" description: "Retrieves the complete sales history of the marketplace, showing all successfully completed transactions." parameters: - name: "type" in: "query" schema: enum: - "zee" - "items" type: "string" description: "Filter by listing type" example: "zee" - name: "evolution" in: "query" schema: type: "number" description: "Filter by evolution level" example: 1 minimum: 1 - name: "level" in: "query" schema: type: "number" description: "Filter by level" example: 1 minimum: 1 - name: "visual" in: "query" schema: items: type: "string" type: "array" description: "Filter ZEE listings by one or more visuals" example: - "Zoomba" - "Taka" - name: "itemId" in: "query" schema: items: type: "string" type: "array" description: "Filter item listings by one or more item token ids" example: - "1" - "42" - name: "query" in: "query" schema: type: "string" description: "Search keyword to find listings by name or attributes" example: "Metal Axe, Axe" - name: "trait1" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the first creature trait slot" example: - "damage" - "speed" - name: "trait2" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the second creature trait slot" example: - "defense" - name: "trait3" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the third creature trait slot" example: - "critical" - name: "trait4" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the fourth creature trait slot" example: - "hitpoints" - name: "excludeOwnListings" in: "query" schema: type: "boolean" description: "Exclude listings created by the authenticated user" example: true default: false - name: "page" in: "query" schema: minimum: 1 type: "number" description: "Page number for pagination" example: 1 - name: "perPage" in: "query" schema: maximum: 100 type: "number" minimum: 1 description: "Number of items per page" example: 20 tags: - "OFFCHAIN-MARKETPLACE" responses: 200: description: "" content: application/json: schema: type: "object" properties: meta: type: "object" properties: total: type: "number" perPage: type: "number" currentPage: type: "number" lastPage: type: "number" firstPage: type: "number" firstPageUrl: type: "string" lastPageUrl: type: "string" nextPageUrl: type: "string" nullable: true previousPageUrl: type: "string" nullable: true data: type: "array" items: $ref: "#/components/schemas/ListingWithBuyerResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getAllSoldListings" /v2/offchain-marketplace/my-listings: get: summary: "Get my active listings" description: "Retrieves all active listings created by the authenticated user." parameters: [] tags: - "OFFCHAIN-MARKETPLACE" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/OffchainMarketplaceBaseListingResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getUserActiveListings" /v2/offchain-marketplace/my-sales: get: summary: "Get my sales history" description: "Retrieves the sales history of the authenticated user, showing all listings that have been successfully sold." parameters: - name: "type" in: "query" schema: enum: - "zee" - "items" type: "string" description: "Filter by listing type" example: "zee" - name: "evolution" in: "query" schema: type: "number" description: "Filter by evolution level" example: 1 minimum: 1 - name: "level" in: "query" schema: type: "number" description: "Filter by level" example: 1 minimum: 1 - name: "visual" in: "query" schema: items: type: "string" type: "array" description: "Filter ZEE listings by one or more visuals" example: - "Zoomba" - "Taka" - name: "itemId" in: "query" schema: items: type: "string" type: "array" description: "Filter item listings by one or more item token ids" example: - "1" - "42" - name: "query" in: "query" schema: type: "string" description: "Search keyword to find listings by name or attributes" example: "Metal Axe, Axe" - name: "trait1" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the first creature trait slot" example: - "damage" - "speed" - name: "trait2" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the second creature trait slot" example: - "defense" - name: "trait3" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the third creature trait slot" example: - "critical" - name: "trait4" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the fourth creature trait slot" example: - "hitpoints" - name: "excludeOwnListings" in: "query" schema: type: "boolean" description: "Exclude listings created by the authenticated user" example: true default: false - name: "page" in: "query" schema: minimum: 1 type: "number" description: "Page number for pagination" example: 1 - name: "perPage" in: "query" schema: maximum: 100 type: "number" minimum: 1 description: "Number of items per page" example: 20 tags: - "OFFCHAIN-MARKETPLACE" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/OffchainMarketplaceBaseListingResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getUserSales" /v2/offchain-marketplace/my-purchases: get: summary: "Get my purchase history" description: "Retrieves the purchase history of the authenticated user, showing all items bought from the marketplace." parameters: - name: "type" in: "query" schema: enum: - "zee" - "items" type: "string" description: "Filter by listing type" example: "zee" - name: "evolution" in: "query" schema: type: "number" description: "Filter by evolution level" example: 1 minimum: 1 - name: "level" in: "query" schema: type: "number" description: "Filter by level" example: 1 minimum: 1 - name: "visual" in: "query" schema: items: type: "string" type: "array" description: "Filter ZEE listings by one or more visuals" example: - "Zoomba" - "Taka" - name: "itemId" in: "query" schema: items: type: "string" type: "array" description: "Filter item listings by one or more item token ids" example: - "1" - "42" - name: "query" in: "query" schema: type: "string" description: "Search keyword to find listings by name or attributes" example: "Metal Axe, Axe" - name: "trait1" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the first creature trait slot" example: - "damage" - "speed" - name: "trait2" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the second creature trait slot" example: - "defense" - name: "trait3" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the third creature trait slot" example: - "critical" - name: "trait4" in: "query" schema: items: enum: - "defense" - "damage" - "critical" - "hitpoints" - "speed" type: "string" type: "array" description: "Filter by one or more values for the fourth creature trait slot" example: - "hitpoints" - name: "excludeOwnListings" in: "query" schema: type: "boolean" description: "Exclude listings created by the authenticated user" example: true default: false - name: "page" in: "query" schema: minimum: 1 type: "number" description: "Page number for pagination" example: 1 - name: "perPage" in: "query" schema: maximum: 100 type: "number" minimum: 1 description: "Number of items per page" example: 20 tags: - "OFFCHAIN-MARKETPLACE" responses: 200: description: "" content: application/json: schema: type: "array" items: $ref: "#/components/schemas/OffchainMarketplaceBaseListingResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getUserPurchases" /v2/offchain-marketplace/{listingId}: get: summary: "Get listing details by ID" description: "Retrieves detailed information about a specific marketplace listing including seller and buyer information (if sold), item metadata, price, and listing status. Works for both active and completed listings." parameters: - in: "path" name: "listingId" schema: type: "string" required: true tags: - "OFFCHAIN-MARKETPLACE" responses: 200: description: "" content: application/json: schema: $ref: "#/components/schemas/ListingWithBuyerResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "getListingData" delete: summary: "Cancel a marketplace listing" description: "Cancels an active listing owned by the authenticated user. For Zee listings, the creature is unlocked and returned to the user. For item listings, the items are returned to the user stash. Only the listing owner can cancel their own listings." parameters: - in: "path" name: "listingId" schema: type: "string" required: true tags: - "OFFCHAIN-MARKETPLACE" responses: 204: description: "" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "cancelListing" /v2/offchain-marketplace/list: post: summary: "Create a new marketplace listing" description: "Creates a new listing to sell a Zee or items on the offchain marketplace. For Zee listings, an active Soulshard is required and the creature will be locked until sold or cancelled." parameters: [] tags: - "OFFCHAIN-MARKETPLACE" responses: 200: description: "Created listing details" content: application/json: schema: $ref: "#/components/schemas/OffchainMarketplaceBaseListingResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "createListing" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateOffchainListingRequest" /v2/offchain-marketplace/{listingId}/buy: post: summary: "Purchase a marketplace listing" description: "Purchases an active listing from the offchain marketplace using off-chain vee. Item listings can be purchased partially by providing an amount, while Zee listings must always be bought as a single unit. The marketplace charges per purchased unit, burns the configured fee, and transfers the remainder to the seller." parameters: - in: "path" name: "listingId" schema: type: "string" required: true tags: - "OFFCHAIN-MARKETPLACE" responses: 200: description: "Created listing details" content: application/json: schema: $ref: "#/components/schemas/OffchainMarketplaceBaseListingResponse" 401: description: "Returns **401** (Unauthorized)" 403: description: "Returns **403** (Forbidden)" security: - jwtAuth: - "access" operationId: "purchaseListing" requestBody: content: application/json: schema: $ref: "#/components/schemas/PurchaseListingRequest" tags: - name: "AdAttributionKit" description: "Everything related to AdAttributionKit" - name: "IAP" description: "Everything related to IAP" - name: "Web" description: "Everything related to Web" - name: "WEB" description: "Everything related to WEB" - name: "TRANSLATE" description: "Everything related to TRANSLATE" - name: "VERIFICATION" description: "Everything related to VERIFICATION" - name: "LAND-REQUESTS" description: "Everything related to LAND-REQUESTS" - name: "TOURNAMENTS" description: "Everything related to TOURNAMENTS" - name: "WALLETS" description: "Everything related to WALLETS" - name: "DAILY_VEE" description: "Everything related to DAILY_VEE" - name: "DailyLoginReward" description: "Everything related to DailyLoginReward" - name: "Announcements" description: "Everything related to Announcements" - name: "DailyQuests" description: "Everything related to DailyQuests" - name: "AMBASSADOR" description: "Everything related to AMBASSADOR" - name: "STAKING" description: "Everything related to STAKING" - name: "Leaderboard" description: "Everything related to Leaderboard" - name: "LEADERBOARDS" description: "Everything related to LEADERBOARDS" - name: "INVITE_FRIEND" description: "Everything related to INVITE_FRIEND" - name: "SUBSCRIPTIONS" description: "Everything related to SUBSCRIPTIONS" - name: "GEX" description: "Everything related to GEX" - name: "THIRDWEB" description: "Everything related to THIRDWEB" - name: "VEE-WITHDRAWALS" description: "Everything related to VEE-WITHDRAWALS" - name: "ITEM-CLAIMS" description: "Everything related to ITEM-CLAIMS" - name: "INVENTORY" description: "Everything related to INVENTORY" - name: "LEADERBOARD" description: "Everything related to LEADERBOARD" - name: "SERVICES" description: "Everything related to SERVICES" - name: "QA" description: "Everything related to QA" - name: "TOKENS" description: "Everything related to TOKENS" - name: "USER_TRANSFER" description: "Everything related to USER_TRANSFER" - name: "PARTY-LOBBIES" description: "Everything related to PARTY-LOBBIES" - name: "WEB3" description: "Everything related to WEB3" - name: "LAND-KEYS" description: "Everything related to LAND-KEYS" - name: "EVENTS" description: "Everything related to EVENTS" - name: "FARM-PLOTS" description: "Everything related to FARM-PLOTS" - name: "COMPOST" description: "Everything related to COMPOST" - name: "FARMING" description: "Everything related to FARMING" - name: "HERBALISM" description: "Everything related to HERBALISM" - name: "OKX" description: "Everything related to OKX" - name: "HATCHING" description: "Everything related to HATCHING" - name: "OTP" description: "Everything related to OTP" - name: "ACCOUNT" description: "Everything related to ACCOUNT" - name: "SOCIAL" description: "Everything related to SOCIAL" - name: "CREATURES" description: "Everything related to CREATURES" - name: "Creatures" description: "Everything related to Creatures" - name: "AVATAR" description: "Everything related to AVATAR" - name: "DUNGEONS" description: "Everything related to DUNGEONS" - name: "TUTORIAL-STEPS" description: "Everything related to TUTORIAL-STEPS" - name: "TUTORIAL-CREATURES" description: "Everything related to TUTORIAL-CREATURES" - name: "PROCESSES" description: "Everything related to PROCESSES" - name: "ENVIRONMENT-OBJECTS" description: "Everything related to ENVIRONMENT-OBJECTS" - name: "STATEFUL-OBJECTS" description: "Everything related to STATEFUL-OBJECTS" - name: "QUESTS" description: "Everything related to QUESTS" - name: "NPC" description: "Everything related to NPC" - name: "STATES" description: "Everything related to STATES" - name: "NEWS" description: "Everything related to NEWS" - name: "USERS" description: "Everything related to USERS" - name: "COLLECTORS" description: "Everything related to COLLECTORS" - name: "PROFESSIONS" description: "Everything related to PROFESSIONS" - name: "FISHING" description: "Everything related to FISHING" - name: "COOKING" description: "Everything related to COOKING" - name: "FIREMAKING" description: "Everything related to FIREMAKING" - name: "CRAFTING" description: "Everything related to CRAFTING" - name: "MINING" description: "Everything related to MINING" - name: "BATTLE" description: "Everything related to BATTLE" - name: "TREES" description: "Everything related to TREES" - name: "TRIBES" description: "Everything related to TRIBES" - name: "FEATURE FLAGS" description: "Everything related to FEATURE FLAGS" - name: "TreasurePot" description: "Everything related to TreasurePot" - name: "P2A" description: "Everything related to P2A" - name: "FOREST-TOKENS" description: "Everything related to FOREST-TOKENS" - name: "OFFCHAIN-GEX" description: "Everything related to OFFCHAIN-GEX" - name: "OffchainGex" description: "Everything related to OffchainGex" - name: "CONTACT-US" description: "Everything related to CONTACT-US" - name: "CONTRACT_HISTORY" description: "Everything related to CONTRACT_HISTORY" - name: "OFFCHAIN-MARKETPLACE" description: "Everything related to OFFCHAIN-MARKETPLACE" - name: "Non-Production" description: "Endpoints only registered outside production (dev/staging). They are absent from the production API and must not be relied on by clients." x-tagGroups: - name: "Player" tags: - "USERS" - "AVATAR" - "USER_TRANSFER" - "PARTY-LOBBIES" - "LEADERBOARD" - "TRIBES" - name: "Competitive" tags: - "TOURNAMENTS" - name: "Skills & Gameplay" tags: - "PROFESSIONS" - "FARMING" - "FISHING" - "MINING" - "COOKING" - "FIREMAKING" - "CRAFTING" - "BATTLE" - "CREATURES" - "NPC" - "TREES" - name: "Quests & Rewards" tags: - "QUESTS" - "DailyQuests" - "DailyLoginReward" - "TreasurePot" - name: "Economy & Assets" tags: - "TOKENS" - "INVENTORY" - "P2A" - "STAKING" - "PROCESSES" - "LAND-REQUESTS" - "STATES" - name: "Content" tags: - "NEWS" - "Announcements" - name: "Dev & Internal" tags: - "Non-Production" - "FEATURE FLAGS" - "QA" - name: "Other" tags: - "AdAttributionKit" - "IAP" - "Web" - "WEB" - "TRANSLATE" - "VERIFICATION" - "WALLETS" - "DAILY_VEE" - "AMBASSADOR" - "Leaderboard" - "LEADERBOARDS" - "INVITE_FRIEND" - "SUBSCRIPTIONS" - "GEX" - "THIRDWEB" - "VEE-WITHDRAWALS" - "ITEM-CLAIMS" - "SERVICES" - "WEB3" - "LAND-KEYS" - "EVENTS" - "FARM-PLOTS" - "COMPOST" - "HERBALISM" - "OKX" - "HATCHING" - "OTP" - "ACCOUNT" - "SOCIAL" - "Creatures" - "DUNGEONS" - "TUTORIAL-STEPS" - "TUTORIAL-CREATURES" - "ENVIRONMENT-OBJECTS" - "STATEFUL-OBJECTS" - "COLLECTORS" - "FOREST-TOKENS" - "OFFCHAIN-GEX" - "OffchainGex" - "CONTACT-US" - "CONTRACT_HISTORY" - "OFFCHAIN-MARKETPLACE"