By ZooGamesID
Two-Factor Authentication
Concept
The player provides their ZooGamesID and 2FA token, and if the credentials are valid, the server grants access for the user to log in.
A user's session in the application has an expiration time of 120 minutes. After this period, the session will expire, and the user will need to log in again.
If the user wants to extend the session and prevent it from expiring, they can use the Keep-alive API. By making a request to the Keep-alive API within the session's duration, the session will be refreshed, and the expiration time will be extended.
To gain insights into how authentication works on Zoo.Games, you can explore our open-source Telegram AUTH web app. It will provide you with a clear understanding of the authentication process implemented on the Zoo.Games platform.
ZooGames AUTH webapp for TelegramTo authenticate and handle login and logout functionality, you need to follow these steps:
Login and Logout
by installing the SDK and utilizing the signData() function, you can generate the SignedSignatureFromPayload (HMAC signature) for authentication purposes in the ZooGames API requests
Login API - To Login user and return JWT token as a session token
POST
API_END_POINT_URL/API_KEY/session/login
SDK Preparation
You need to prepare for SignedSignatureFromPayload by
Installing zoo-game-sdk by npm install zoo-game-sdk
Import SDK by import * as ApiKey from 'zoo-game-sdk/src/auth/apikey/index'
Signing by SDK
let bodyMessage =JSON.stringify(payload);
let hmac = ApiKey.signData(bodyMessage, SEC_KEY);
*Use "hmac" as SignedSignatureFromPayload
Path Parameters
API_KEY*
String
API Key
Headers
authorization*
String
eg: Bearer SignedSignatureFromPayload
Request Body
username*
String
ZooGamesId
token*
String
6 digits of 2FA token
{
"success": true,
"data": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImNyeXB0b2Zlbm5lYyIsInByaW1hcnlBZGRyZXNzIjoiMHg2QWI0OTljOEUyZjNDQmM5Qzk5MDM0YjZlMjkxMjE0OTIxMmJFNzcwIiwibWlycm9yQWRkcmVzcyI6IjB4ZTQyNzQxZjI4ZTE1YzU4NzkxMjlGZTVGNzQ5Zjc4NjIzZWU3MTIzNiIsIm1pcnJvckJhbGFuY2UiOiI1NTUuMSIsImNoYWluSWQiOiI4ODgiLCJ2ZXJpZnkyRkFTdWNjZXNzVGltZXMiOjQsImlhdCI6MTY1NjMxMTc4MH0.4EzwI54lVs_9zx2Qy-UhDsVb5PocHIDjxK0cCIxEZko"
}
Logout API - To log out for already log in user
POST
API_END_POINT_URL/API_KEY/session/logout
SDK Preparation
You need to prepare for SignedSignatureFromPayload by
Installing zoo-game-sdk by npm install zoo-game-sdk
Import SDK by import * as ApiKey from 'zoo-game-sdk/src/auth/apikey/index'
Signing by SDK
let bodyMessage =JSON.stringify(payload);
let hmac = ApiKey.signData(bodyMessage, SEC_KEY);
*Use "hmac" as SignedSignatureFromPayload
Path Parameters
API_KEY*
String
API Key
Headers
authorization*
String
Bearer SignedSignatureFromPayload
Request Body
jwt*
String
JWT token you got from Login API
{
"success": true
}
Keep-alive
The Keep-Alive feature allows users to extend the expiration time of their session. By making a request to the Keep-Alive API endpoint within the session duration, users can refresh the session and prevent it from expiring.
Keep-alive API - To keep alive (Persistent Session) logged in user
POST
API_END_POINT_URL/API_KEY/session/keepAlive
SDK Preparation
You need to prepare for SignedSignatureFromPayload by
Installing zoo-game-sdk by npm install zoo-game-sdk
Import SDK by import * as ApiKey from 'zoo-game-sdk/src/auth/apikey/index'
Signing by SDK
let bodyMessage =JSON.stringify(payload);
let hmac = ApiKey.signData(bodyMessage, SEC_KEY);
*Use "hmac" as SignedSignatureFromPayload
Path Parameters
API_KEY*
String
API Key
Headers
authorization*
String
eg: Bearer SignedSignatureFromPayload
Request Body
username*
String
ZooGameId
jwt*
String
JWT token you get from Login API
{
"success": true,
"data": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImNyeXB0b2Zlbm5lYyIsInByaW1hcnlBZGRyZXNzIjoiMHg2QWI0OTljOEUyZjNDQmM5Qzk5MDM0YjZlMjkxMjE0OTIxMmJFNzcwIiwibWlycm9yQWRkcmVzcyI6IjB4ZTQyNzQxZjI4ZTE1YzU4NzkxMjlGZTVGNzQ5Zjc4NjIzZWU3MTIzNiIsIm1pcnJvckJhbGFuY2UiOiI1NTUuMSIsImNoYWluSWQiOiI4ODgiLCJ2ZXJpZnkyRkFTdWNjZXNzVGltZXMiOjQsImlhdCI6MTY1NjMxMTc4MH0.4EzwI54lVs_9zx2Qy-UhDsVb5PocHIDjxK0cCIxEZko"
}
Keep-Alive helps enhance user experience by reducing the need for repeated logins and provides convenience during extended usage periods.
Approve
Approve API enables the creation of in-game vZOO transactions. However, to ensure security and validate the transaction, players are required to re-enter their 2FA (Two-Factor Authentication) credentials.
If the 2FA validation fails or is not provided by the player, the transaction will not be approved and will result in a failure.
Approve API - To request vZOO spending from user mirror address
POST
API_END_POINT_URL/API_KEY/session/approve
SDK Preparation
You need to prepare for SignedSignatureFromPayload by
Installing zoo-game-sdk by npm install zoo-game-sdk
Import SDK by import * as ApiKey from 'zoo-game-sdk/src/auth/apikey/index'
Signing by SDK
let bodyMessage =JSON.stringify(payload);
let hmac = ApiKey.signData(bodyMessage, SEC_KEY);
*Use "hmac" as SignedSignatureFromPayload
Path Parameters
API_KEY*
String
API Key
Headers
authorization*
String
Bearer SignedSignatureFromPayload
Request Body
username*
String
ZooGamesId
jwt*
String
JWT token you got from Login API
approval*
Decimal
vZOO amount for approval (e.g. 0.1)
playSeconds*
Integer
approval expiry in (e.g. 3600)
gameAddress
Address
Address of Game/Project registered Primary Address
token*
String
6 digits of 2FA token
{
"success":true,
"data":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImNyeXB0b2Zlbm5lY3Rlc3QiLCJwcmltYXJ5QWRkcmVzcyI6IjB4NUQyQThCMzY4MzI5MjQ0MmZBQ2E1MmU5QjY1MzdGYWFhZDBBRTU3NiIsIm1pcnJvckFkZHJlc3MiOiIweDkxNGUwQ0U0RjQxMzJlQWM4OEMxNDViNkIyOTQ1MTIwNTZCYkZFMzkiLCJtaXJyb3JCYWxhbmNlIjoiNjAuMzUiLCJjaGFpbklkIjo5OTksInZlcmlmeTJGQVN1Y2Nlc3NUaW1lcyI6NCwiY3JlYXRlVGltZSI6MTY1NzA4ODk4MTc5NiwiYXZhdGFyIjoiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQVFBQUFRQUJBQUQvNGdJb1NVTkRYMUJTVDBaSlRFVUFBUUVBQUFJWUFBQUFBQVF3QUFCdGJuUnlVa2RDSUZoWldpQUFBQUFBQUFBQUFBQUFBQUJoWTNOd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUE5dFlBQVFBQUFBRFRMUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBbGtaWE5qQUFBQThBQUFBSFJ5V0ZsYUFBQUJaQUFBQUJSbldGbGFBQUFCZUFBQUFCUmlXRmxhQUFBQmpBQUFBQlJ5VkZKREFBQUJvQUFBQUNoblZGSkRBQUFCb0FBQUFDaGlWRkpEQUFBQm9BQUFBQ2gzZEhCMEFBQUJ5QUFBQUJSamNISjBBQUFCM0FBQUFEeHRiSFZqQUFBQUFBQUFBQUVBQUFBTVpXNVZVd0FBQUZnQUFBQWNBSE1BVWdCSEFFSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGaFpXaUFBQUFBQUFBQnZvZ0FBT1BVQUFBT1FXRmxhSUFBQUFBQUFBR0taQUFDM2hRQUFHTnBZV1ZvZ0FBQUFBQUFBSktBQUFBK0VBQUMyejNCaGNtRUFBQUFBQUFRQUFBQUNabVlBQVBLbkFBQU5XUUFBRTlBQUFBcGJBQUFBQUFBQUFBQllXVm9nQUFBQUFBQUE5dFlBQVFBQUFBRFRMVzFzZFdNQUFBQUFBQUFBQVFBQUFBeGxibFZUQUFBQUlBQUFBQndBUndCdkFHOEFad0JzQUdVQUlBQkpBRzRBWXdBdUFDQUFNZ0F3QURFQU52L2JBRU1BQ2djSENBY0dDZ2dJQ0FzS0Nnc09HQkFPRFEwT0hSVVdFUmdqSHlVa0loOGlJU1lyTnk4bUtUUXBJU0l3UVRFME9UcytQajRsTGtSSlF6eElOejArTy8vYkFFTUJDZ3NMRGcwT0hCQVFIRHNvSWlnN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPLy9BQUJFSUFIZ0FlQU1CSWdBQ0VRRURFUUgveEFBY0FBRUFBUVVCQVFBQUFBQUFBQUFBQUFBQUJRRURCQVlIQ0FML3hBQkFFQUFCQXdNQkJBWUZDUWNGQVFBQUFBQUJBQUlEQkFVUkJoSWhNVUVIRXlKUmNaRVVZWUdoc1JVak1qTkNVc0hSOEZOaWNwS2lzdUVXUTBSamdzTC94QUFiQVFBQkJRRUJBQUFBQUFBQUFBQUFBQUFBQVFNRUJRWUNCLy9FQURNUkFBRURBZ0lJQkFVRUF3QUFBQUFBQUFFQUFnTUVFU0V4QlJJeVFWRmhjYkVUd2RId0ZJR1JvZUVHRlROeUlsTHgvOW9BREFNQkFBSVJBeEVBUHdEZDlMNld0K2xyVEZTVWtMT3UyUjE4K3oyNVhjeVQzWjREa3B0RVFoRVJFSVJFUkNFUkVRaEVSZkplMXZGd0hpVWhjR2k1S0Y5SXJScUlXOFpBcXRuaWR3ZUV5S21BbXdlUHFFdGlyaUtpcW4waWlOU2FhdDJwN1ZMUlYwREhQTFQxTTJ6MjRuY2lENDh1YUtYUkNFUkVRaEVSV2FpcWdwWTNTVHl0alkwWkpjY0FMaDcyc0dzNDJDRmVWQ1FCa25BV2hYM3Bjc050TG9xRXV1RXczWWgrai9NZDNsbGFEZE9rblZWOGtNVkk0VU1idURJRzdVaEhqeDhzSmtTeVNZUk1KNW5BZXYyUVNHNHVLN1pjYjdhN1RGMWxkWFEwN2UrUjRibno0clVMajB3NmJwQ1cweG5ySERkODFHY2Vic0xtRUdrcnRjcGZTSzZSd2M3akpVdkxubjJjZk5UZExvYTN4QWRmTkxLZVliaGcvTlNXVUZUSnR2dDB3NzNLZ3lhUnAyWUEzV1hlT21lNDFMU3kwMjl0T1AyazUyajdBTUQ0cldKTDFyYStuTGF1NFN0ZCt4ekczK25BVzN3YWZ0VkZJeDhOR3piSDJua3VQdlV2RndBVlRXR09rbE1lcHJPRzg0OTFvZEgwWXJLZHRRWFdCdmgwTnZKYzEvMHBxeXE3Y3NVcFAvWlVqUHhWZmtqV2RsK2VoYlhSaHUvTlBNWGU1cFhVbUs4M2dvQjBsSmtXZ2pvcHp0R1JESWxhVHBmcGN1VnZxRzAxOUhwTlBuWmRNMXVKR2VzZ2JuZTRydEZEVzA5eG80NnFsa2JKRkswT2E1cHlDRHpYSTljNlpndU5zbHVOTkNHMXRPTnNsZzN5dEhFSHZJRy8ySzcwTWFsSWZOWUoza2dBeXdaUEFaN1RmTWcrMHFkVHpzMUJMSGcyOWlOdzVqaDJzcWlvZ2RDL1ZPUEJkZlJFVnVvcUlpSVF2aVE0aWNmVXZPTit1ZDQxUHFPb29wcXlTVmphbDdJWVM3WlkwQW5HN2h3SEhpdlIwMzFML0JlYjdRTWEwa3p4RlZML0FQU1lZeHI2c2F3eUErNUthbmVZNFhPRzY2bDdkb3FtaEFkV3pHVjMzSSt5M3o0bjNMWktXanBxTm14VFFNaUg3b3huMnJLcDZLb3FjZFZFU1B2SGNGbkdncGFKdTFXVGh6OFpFVFRnbjhWYVBxNmVCd1plN3VBeFB2cXMyMm5yYXhwa2RnM2ljRysrbDFIaGZZVkhPRDNsd1lHQThHdDRCWG1Ra1VjdFcvY3hqY04vZWR3Q215MURLZUx4Sk1CNThFeFMwa2xWT0lZc1NUN1BSWTczQXVBSEpYcGErbXMxcG11ZFZFWmd4d1l5TVl5NXg4VmlRckMxaEZQVTBOdHRsTkUrUjc5cWR6V2poeUhoeldKZTc0NnMxcE1BVGowQS9DOVZraC9iZEhpR0kzSXdITWsrdTVZY3ZTbk1YRVUxcHBnMGZla0orQUMycTExMVJjcmRGV1ZWRzJqa2xHZXFEczd1UjlXZTVhMXAvUmRQUk9aVVZ3YkpJM2UySWIydFBlZTgrNWJnRkVyM1Vvc3lCdVdaeFRkRkhVRC9BRG1PZTcxVnlLTVNTTlllQk8vd1hLZEJuWTZTcVJ0TjlYMTBvR3p3MmRseTMvVnQ2WnA3VGswMjFpcnFtbUtuYnpCSTN1OWczK1MxM29Zc1Q2cTgxRjRrYWVxcG1kVXdubTg4ZklmM0x1ampjS2FRL3dDMkE2bkR6VVRTRWdjOXJSdVhiVVZVV2tWU2lJaUVMNWtHWTNlQlhtbTU3VkJyRzV0YVMxOGRaSTVwQnh1MmorQlhwZHhBYVNUZ1kzcnp4MGlpMzFXdHAyMjBnN0xRS2x6T0JseWRyeFBBZUlVY09MYXRvQXZjSHVFandDdzNVdlVhNnU5NGxGUGJ3eWxhNDdJRVhhY2YvUi9CU3RCUitpUkV5U09sbmZ2bGxjU1M0K0o1S08wOVoyMjZtYkxJekU3MjhQdUR1OGU5VDBNVDU1V3hSakxuRlhOUFR3MHpMdEFieC82c3pYVnN0WEo0WUpJN2xaRkRTT3E1dG5lR04zdmQrQ3hMcGQyMWxWNkZTRUNsZzNFamc5MzVCVjFIZUliVFNpMVVzbUpYNEV6eHhHZVhpZmdvZWhhQXpQZVZVVmhOUkNhbCt6a3dkM0hxTXVBV3QvVDlNSUt0c0RjWEFGenoweWFPaEl2elVwRHdXY3h6bmtPY1NUakdUM0xCaTVMTmk1WkdRc3hJdHpJc21Kcm5rTmFDVDNCVXV0MW9OT1VmcE53a3pJUjgxQTNlNTU5WDU4RkdhajFOVldhbkRMZFFiQWVOOVRKMm10UGRqdjhBRmM0aWRMcVBVRElMbmMyMG5YT3crcHFTVHU3aHlIcTRCUzZiUit1enhwVFpuTEVuNlpkMW5LelNCYTh4TUdQTlpUL2xqcEQxTzJOZ3k1MjRBWjZ1bmp6K3ZFcnZlbkxEUzZkczBGdXBXOW1KdTl4NHVQTW4xa3JHMHBwbTFhY3RyWUxjME9MZ0MrVTczU0h2Si9RVThyV0Jva3RKYXpSc2p6Njl1cXBYRTN4elJFUlRWeWlJb3JVbCtwdE8yV2U0MUx1ekczYzBIZTQ4Z1BXU201SkJHMHVQdmtsQXV0WTZUTmJEVDl1OUFvWkI4b1ZRSVpqL0FHMjhDLzhBTDErQzVwcEt6R1YzeWpVZ3VhSFpadGZiZDk3d0h4VWZUaXQxbHFTYXRySGtoN3R1Vnc0TWJ5YVBnRnYwVWJJbzJ4eHREV01BRFdqZ0FwRkRBUmVSKzBmZGh5SDVWSHBXczFCNExNem43NXE0Rm1WMWRIcHEwbW9mcyttempFVFQ5bjFuMURtcTBiWUtXbmx1ZGE0TXBxY2JXVHpQNjk2NTdmYTZ2MVJYU1RORHcxNTJXc2EwdTJHY2h1OTZXZHhxcGZBYnN0MnVaM045VWFOcHhUeGZFdndjZG5rTjd2UllFZHdrdXQ5Ykk1N25NakxuNVBGeDd6NXJjNlViTEdqdUMxMno2WnJLZWNTR0dRQjJBWFBBYmdlQzIyR2lrSDBuTkhnbTY2Q29sWTFqVzN6UGtGcU5DVnRCVEdTV1dRRElEanZKd3p6c3N5RjFMVDI2b3JLd3VFY1phMEZtOGdrOTNOWkxHQXhzbGplMldGKzlrakRscnYxM0tEMVpPS0RUTlBBWGRxZVYwcDliV2ovSVdwMmZVdDFzUWhsa2pkSERVamFhMlZoNnFjWnhuL0lWSzNSM2lRNjE3UHVjRGxoaGJyY0ZUNXRMbHRTUTBhMGRobHozcnB1dzJSaFk5b2Mxd3dXdUdRVnFlb3RDMDgwTWxWYm5OaUxRWE9oZWV5UU9PRHlVN1p0UTJ5OTdMSVpCVFZSLzQ4cnZwZnd1NS9GU2xiV3cyVzIxTnpxeGhsTzNjMDdpNTNJZTA3bFdzZFUwc3VxTGc4T0treW1tcW90YzRqandYTmRHYTZ1V25hK25vNUtvUHRyM2hybXpra1F0SjNscEdTTWQzQmVnS1dvWlZVekpvM2g3WGdFT2J3SVBNTHoxbyt4eTZ6MWdYVkRBYWRzaHFLclpHRzd6a045cDNlR1Y2SWpqYkZHMk5nQWEwWUFDdjJ0QXFEcVlDMlBDNXkrZkhsWlp2Y3Z0RVJURWlvU0dnazhBdURkTEdwMzNpLzhBeVZDNCtqVUxzT0hKMG5QeTRlYTcwdU45TCtrSkk2Z2FocEdiVWJnR1ZMV2poeUQvQUlBK3hSSnNKV0Yyemo5ZDNtT3FVWkt6WXJXeTFXeU9FWU1qdTNLNGMzSDhBcE1LQjBmZEdYTzNOb2NBVmRLM0FZT01zWTVqMWpnZlllOWJSRGJheVhHekE0RHZkdVZ3eW9oYTI3bkFXNGxZNm9vcXJ4eU5VdUp4dUFUZFdaSkhUd3RnbE8zRTNCREhESUhzVldnTkdHZ0Fkd1VnTExJeHUzVVZFVUxlWkovUEN4SjdocGlneUtxOVJQY09MWTM3UjhtNVRRMG5Sc3dZYi8xQlA0VXh1aUsrU3hlTGYyUHNyNUMrbTd6Z2J5bytiWGVscWI2aWxxS2tqbnNZSDlSL0JSOVIwcU1qeUtPMVF4OXhra3o3Z1B4WFg3bklmNDRUOHlCNnFTelFvSDhrb0hRRStpc2EvcDVmUTZXWXRlQVdQajNnZ2JqdEQ0bnlXK2FPb3JUcXJvN29LV3JwbzVvMlJDSnpYRDZMbTdpZlVkMmNqdlhLYnhyTzU2ampiU1RSeHZZSDdiWTRZZCtmSGVlYTNUb2dkZDdiUFYwZFpicXFHaG0rY2prbGlMV3Rkd0kzOTR4L0txaXRjMTRhK1lBV09WK1BBNFlnbStIQlhFTVlqR28wa2l3eHRiSlJtcWVpbTQyamJxN0U5OVhUQTdYbzdqODR6K0UvYStQaXRPdU9vcnhjcUNLMVZrOGtyWUpPeXg0N2Uxd0FKNG5HL2l2VHBBSXdSa0tBdUdpckxjTDFUWGVTa1lLcW5lSGg0M2JSSERhNzhjUm51U3VFc2U3WEF5NGozOWVxZEhMQzZ3dWpyU3cwMXAyTnN6QUt5bytjblBjVDluMkRkNXJiVlFBQUFEZ0ZWUHd4K0cyeHp6UFgzOWtoUkVST3BFVm1ycFlhMmxrcHFpTnNrY2pTMXpYRElJUEVGWGtYTDJOZTB0ZGtVTHo1cS9SbDAwWmVCWDJ3VEdqYS9iaG5qeVRDZTUzNThDRmlPMW5yRzhucWFhb25jY1lMYVNIQlA4b3l2Umo0MlNERDJodzlhdHgwc0VYMWNMRytBVU13eVhBY0d1dGtUbjI4d25BOHRGZ2JMejVCb1RXdDdlSFQwdFFRZCszVnpZOXhPZmNwK2c2Rkx0S0FhMjZRUWQ3WW1GNTh6aGRwRzdncXAwUnk1Rjl1Z3QzdXVDUVZ6ZWk2RmJIQ1E2cnE2dXBQTWJZYVBjTSs5VDFGMGE2VG9nTm0weFNFYzVzeWYzRXJha1MvRHNPMFNmbWUyU0xyRXBiVlFVVFEybG80WVdqa3hnYjhGbEJyUndBSHNWVVhiSVkyYkxRUGtpNVJFUk9wRVJFUWhFUkVJVVJwclV0djFQYVlhNmltWVh1YU90aDJ1MUU3bTBqang1ODFMb2lFSWlJaENJaUlRaUlpRUlpSWhDSWlJUWlJaUVLTDFEcUczNmJ0VTFmWHpzWnNOSmpqTHUxSzdrMW81NVBseEtJaUVMLy8yUT09IiwiaWF0IjoxNjYxNzg5ODc5LCJhcHByb3ZhbCI6IjAuMSIsInBsYXlTZWNvbmRzIjoiMzYwMCIsInN0YXJ0VGltZSI6MTY2MTc5MDAxNSwiZW5kVGltZSI6MTY2MTc5MzYxNSwiZ2FtZUFkZHJlc3MiOiIweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifQ.TF0AqIniXLg7rEhVOurFnM7MrTTvosXCYpVn0oorgBc"
}
Status
The Status API returns the current JWT Payload and verifies whether their JWT is eligible for use in the Settlement API.
Status API - Returns current JWT Payload and verifies current JWT
POST
API_END_POINT_URL/API_KEY/session/status
SDK Preparation
You need to prepare for SignedSignatureFromPayload by
Installing zoo-game-sdk by npm install zoo-game-sdk
Import SDK by import * as ApiKey from 'zoo-game-sdk/src/auth/apikey/index'
Signing by SDK
let bodyMessage =JSON.stringify(payload);
let hmac = ApiKey.signData(bodyMessage, SEC_KEY);
*Use "hmac" as SignedSignatureFromPayload
Path Parameters
API_KEY*
String
API Key
Headers
authorization*
String
Bearer SignedSignatureFromPayload
Request Body
jwt*
String
JWT token you got from Login API
Query String
without_avatar
Boolean
true: To set "avatar" property as "null" to reduce the returning data
{
"success":true,
"data":
{
"username":"zoogametester",
"primaryAddress":"0x8D2A8B3683292442fACa52e9B6537Faaad0AE765",
"mirrorAddress":"0x524e0CE4F4132eAc88C145b6B294512056BbFE23",
"mirrorBalance":"55.55",
"chainId":999,
"verify2FASuccessTimes":3,
"createTime":1657088981796,
"avatar":"data:image/jpeg;base64,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",
"iat":1660836160,
"isPlayPass": false,
"allowance":0
}
}
Login and Approve
When users interact with the Login and Approve API, they are required to provide their login credentials, ZooGamesID and 2FA, to authenticate themselves and gain access to their account. Upon successful authentication, users can proceed to approve in-game transactions.
If the 2FA validation fails or is not provided by the player, the transaction will not be approved and will result in a failure.
Login and Approve API - to Login and Approve at once
POST
API_END_POINT_URL/API_KEY/session/loginAndApprove
SDK Preparation
You need to prepare for SignedSignatureFromPayload by
Installing zoo-game-sdk by npm install zoo-game-sdk
Import SDK by import * as ApiKey from 'zoo-game-sdk/src/auth/apikey/index'
Signing by SDK
let bodyMessage =JSON.stringify(payload);
let hmac = ApiKey.signData(bodyMessage, SEC_KEY);
*Use "hmac" as SignedSignatureFromPayload
Path Parameters
API_KEY*
String
API KEY
Headers
authorization*
String
Bearer SignedSignatureFromPayload
Request Body
username*
String
ZooGamesId
token*
String
6 digits of 2FA token
approval*
Decimal
vZOO amount for approval (e.g. 0.1)
playSeconds*
Integer
approval expiry in (e.g. 3600)
gameAddress*
Address
Address of Game/Project registered Primary Address
{
"success":true,
"data":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImNyeXB0b2Zlbm5lY3Rlc3QiLCJwcmltYXJ5QWRkcmVzcyI6IjB4NUQyQThCMzY4MzI5MjQ0MmZBQ2E1MmU5QjY1MzdGYWFhZDBBRTU3NiIsIm1pcnJvckFkZHJlc3MiOiIweDkxNGUwQ0U0RjQxMzJlQWM4OEMxNDViNkIyOTQ1MTIwNTZCYkZFMzkiLCJtaXJyb3JCYWxhbmNlIjoiNjAuMzUiLCJjaGFpbklkIjo5OTksInZlcmlmeTJGQVN1Y2Nlc3NUaW1lcyI6NCwiY3JlYXRlVGltZSI6MTY1NzA4ODk4MTc5NiwiYXZhdGFyIjoiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQVFBQUFRQUJBQUQvNGdJb1NVTkRYMUJTVDBaSlRFVUFBUUVBQUFJWUFBQUFBQVF3QUFCdGJuUnlVa2RDSUZoWldpQUFBQUFBQUFBQUFBQUFBQUJoWTNOd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUE5dFlBQVFBQUFBRFRMUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBbGtaWE5qQUFBQThBQUFBSFJ5V0ZsYUFBQUJaQUFBQUJSbldGbGFBQUFCZUFBQUFCUmlXRmxhQUFBQmpBQUFBQlJ5VkZKREFBQUJvQUFBQUNoblZGSkRBQUFCb0FBQUFDaGlWRkpEQUFBQm9BQUFBQ2gzZEhCMEFBQUJ5QUFBQUJSamNISjBBQUFCM0FBQUFEeHRiSFZqQUFBQUFBQUFBQUVBQUFBTVpXNVZVd0FBQUZnQUFBQWNBSE1BVWdCSEFFSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGaFpXaUFBQUFBQUFBQnZvZ0FBT1BVQUFBT1FXRmxhSUFBQUFBQUFBR0taQUFDM2hRQUFHTnBZV1ZvZ0FBQUFBQUFBSktBQUFBK0VBQUMyejNCaGNtRUFBQUFBQUFRQUFBQUNabVlBQVBLbkFBQU5XUUFBRTlBQUFBcGJBQUFBQUFBQUFBQllXVm9nQUFBQUFBQUE5dFlBQVFBQUFBRFRMVzFzZFdNQUFBQUFBQUFBQVFBQUFBeGxibFZUQUFBQUlBQUFBQndBUndCdkFHOEFad0JzQUdVQUlBQkpBRzRBWXdBdUFDQUFNZ0F3QURFQU52L2JBRU1BQ2djSENBY0dDZ2dJQ0FzS0Nnc09HQkFPRFEwT0hSVVdFUmdqSHlVa0loOGlJU1lyTnk4bUtUUXBJU0l3UVRFME9UcytQajRsTGtSSlF6eElOejArTy8vYkFFTUJDZ3NMRGcwT0hCQVFIRHNvSWlnN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPLy9BQUJFSUFIZ0FlQU1CSWdBQ0VRRURFUUgveEFBY0FBRUFBUVVCQVFBQUFBQUFBQUFBQUFBQUJRRURCQVlIQ0FML3hBQkFFQUFCQXdNQkJBWUZDUWNGQVFBQUFBQUJBQUlEQkFVUkJoSWhNVUVIRXlKUmNaRVVZWUdoc1JVak1qTkNVc0hSOEZOaWNwS2lzdUVXUTBSamdzTC94QUFiQVFBQkJRRUJBQUFBQUFBQUFBQUFBQUFBQVFNRUJRWUNCLy9FQURNUkFBRURBZ0lJQkFVRUF3QUFBQUFBQUFFQUFnTUVFU0V4QlJJeVFWRmhjYkVUd2RId0ZJR1JvZUVHRlROeUlsTHgvOW9BREFNQkFBSVJBeEVBUHdEZDlMNld0K2xyVEZTVWtMT3UyUjE4K3oyNVhjeVQzWjREa3B0RVFoRVJFSVJFUkNFUkVRaEVSZkplMXZGd0hpVWhjR2k1S0Y5SXJScUlXOFpBcXRuaWR3ZUV5S21BbXdlUHFFdGlyaUtpcW4waWlOU2FhdDJwN1ZMUlYwREhQTFQxTTJ6MjRuY2lENDh1YUtYUkNFUkVRaEVSV2FpcWdwWTNTVHl0alkwWkpjY0FMaDcyc0dzNDJDRmVWQ1FCa25BV2hYM3Bjc050TG9xRXV1RXczWWgrai9NZDNsbGFEZE9rblZWOGtNVkk0VU1idURJRzdVaEhqeDhzSmtTeVNZUk1KNW5BZXYyUVNHNHVLN1pjYjdhN1RGMWxkWFEwN2UrUjRibno0clVMajB3NmJwQ1cweG5ySERkODFHY2Vic0xtRUdrcnRjcGZTSzZSd2M3akpVdkxubjJjZk5UZExvYTN4QWRmTkxLZVliaGcvTlNXVUZUSnR2dDB3NzNLZ3lhUnAyWUEzV1hlT21lNDFMU3kwMjl0T1AyazUyajdBTUQ0cldKTDFyYStuTGF1NFN0ZCt4ekczK25BVzN3YWZ0VkZJeDhOR3piSDJua3VQdlV2RndBVlRXR09rbE1lcHJPRzg0OTFvZEgwWXJLZHRRWFdCdmgwTnZKYzEvMHBxeXE3Y3NVcFAvWlVqUHhWZmtqV2RsK2VoYlhSaHUvTlBNWGU1cFhVbUs4M2dvQjBsSmtXZ2pvcHp0R1JESWxhVHBmcGN1VnZxRzAxOUhwTlBuWmRNMXVKR2VzZ2JuZTRydEZEVzA5eG80NnFsa2JKRkswT2E1cHlDRHpYSTljNlpndU5zbHVOTkNHMXRPTnNsZzN5dEhFSHZJRy8ySzcwTWFsSWZOWUoza2dBeXdaUEFaN1RmTWcrMHFkVHpzMUJMSGcyOWlOdzVqaDJzcWlvZ2RDL1ZPUEJkZlJFVnVvcUlpSVF2aVE0aWNmVXZPTit1ZDQxUHFPb29wcXlTVmphbDdJWVM3WlkwQW5HN2h3SEhpdlIwMzFML0JlYjdRTWEwa3p4RlZML0FQU1lZeHI2c2F3eUErNUthbmVZNFhPRzY2bDdkb3FtaEFkV3pHVjMzSSt5M3o0bjNMWktXanBxTm14VFFNaUg3b3huMnJLcDZLb3FjZFZFU1B2SGNGbkdncGFKdTFXVGh6OFpFVFRnbjhWYVBxNmVCd1plN3VBeFB2cXMyMm5yYXhwa2RnM2ljRysrbDFIaGZZVkhPRDNsd1lHQThHdDRCWG1Ra1VjdFcvY3hqY04vZWR3Q215MURLZUx4Sk1CNThFeFMwa2xWT0lZc1NUN1BSWTczQXVBSEpYcGErbXMxcG11ZFZFWmd4d1l5TVl5NXg4VmlRckMxaEZQVTBOdHRsTkUrUjc5cWR6V2poeUhoeldKZTc0NnMxcE1BVGowQS9DOVZraC9iZEhpR0kzSXdITWsrdTVZY3ZTbk1YRVUxcHBnMGZla0orQUMycTExMVJjcmRGV1ZWRzJqa2xHZXFEczd1UjlXZTVhMXAvUmRQUk9aVVZ3YkpJM2UySWIydFBlZTgrNWJnRkVyM1Vvc3lCdVdaeFRkRkhVRC9BRG1PZTcxVnlLTVNTTlllQk8vd1hLZEJuWTZTcVJ0TjlYMTBvR3p3MmRseTMvVnQ2WnA3VGswMjFpcnFtbUtuYnpCSTN1OWczK1MxM29Zc1Q2cTgxRjRrYWVxcG1kVXdubTg4ZklmM0x1ampjS2FRL3dDMkE2bkR6VVRTRWdjOXJSdVhiVVZVV2tWU2lJaUVMNWtHWTNlQlhtbTU3VkJyRzV0YVMxOGRaSTVwQnh1MmorQlhwZHhBYVNUZ1kzcnp4MGlpMzFXdHAyMjBnN0xRS2x6T0JseWRyeFBBZUlVY09MYXRvQXZjSHVFandDdzNVdlVhNnU5NGxGUGJ3eWxhNDdJRVhhY2YvUi9CU3RCUitpUkV5U09sbmZ2bGxjU1M0K0o1S08wOVoyMjZtYkxJekU3MjhQdUR1OGU5VDBNVDU1V3hSakxuRlhOUFR3MHpMdEFieC82c3pYVnN0WEo0WUpJN2xaRkRTT3E1dG5lR04zdmQrQ3hMcGQyMWxWNkZTRUNsZzNFamc5MzVCVjFIZUliVFNpMVVzbUpYNEV6eHhHZVhpZmdvZWhhQXpQZVZVVmhOUkNhbCt6a3dkM0hxTXVBV3QvVDlNSUt0c0RjWEFGenoweWFPaEl2elVwRHdXY3h6bmtPY1NUakdUM0xCaTVMTmk1WkdRc3hJdHpJc21Kcm5rTmFDVDNCVXV0MW9OT1VmcE53a3pJUjgxQTNlNTU5WDU4RkdhajFOVldhbkRMZFFiQWVOOVRKMm10UGRqdjhBRmM0aWRMcVBVRElMbmMyMG5YT3crcHFTVHU3aHlIcTRCUzZiUit1enhwVFpuTEVuNlpkMW5LelNCYTh4TUdQTlpUL2xqcEQxTzJOZ3k1MjRBWjZ1bmp6K3ZFcnZlbkxEUzZkczBGdXBXOW1KdTl4NHVQTW4xa3JHMHBwbTFhY3RyWUxjME9MZ0MrVTczU0h2Si9RVThyV0Jva3RKYXpSc2p6Njl1cXBYRTN4elJFUlRWeWlJb3JVbCtwdE8yV2U0MUx1ekczYzBIZTQ4Z1BXU201SkJHMHVQdmtsQXV0WTZUTmJEVDl1OUFvWkI4b1ZRSVpqL0FHMjhDLzhBTDErQzVwcEt6R1YzeWpVZ3VhSFpadGZiZDk3d0h4VWZUaXQxbHFTYXRySGtoN3R1Vnc0TWJ5YVBnRnYwVWJJbzJ4eHREV01BRFdqZ0FwRkRBUmVSKzBmZGh5SDVWSHBXczFCNExNem43NXE0Rm1WMWRIcHEwbW9mcyttempFVFQ5bjFuMURtcTBiWUtXbmx1ZGE0TXBxY2JXVHpQNjk2NTdmYTZ2MVJYU1RORHcxNTJXc2EwdTJHY2h1OTZXZHhxcGZBYnN0MnVaM045VWFOcHhUeGZFdndjZG5rTjd2UllFZHdrdXQ5Ykk1N25NakxuNVBGeDd6NXJjNlViTEdqdUMxMno2WnJLZWNTR0dRQjJBWFBBYmdlQzIyR2lrSDBuTkhnbTY2Q29sWTFqVzN6UGtGcU5DVnRCVEdTV1dRRElEanZKd3p6c3N5RjFMVDI2b3JLd3VFY1phMEZtOGdrOTNOWkxHQXhzbGplMldGKzlrakRscnYxM0tEMVpPS0RUTlBBWGRxZVYwcDliV2ovSVdwMmZVdDFzUWhsa2pkSERVamFhMlZoNnFjWnhuL0lWSzNSM2lRNjE3UHVjRGxoaGJyY0ZUNXRMbHRTUTBhMGRobHozcnB1dzJSaFk5b2Mxd3dXdUdRVnFlb3RDMDgwTWxWYm5OaUxRWE9oZWV5UU9PRHlVN1p0UTJ5OTdMSVpCVFZSLzQ4cnZwZnd1NS9GU2xiV3cyVzIxTnpxeGhsTzNjMDdpNTNJZTA3bFdzZFUwc3VxTGc4T0treW1tcW90YzRqandYTmRHYTZ1V25hK25vNUtvUHRyM2hybXpra1F0SjNscEdTTWQzQmVnS1dvWlZVekpvM2g3WGdFT2J3SVBNTHoxbyt4eTZ6MWdYVkRBYWRzaHFLclpHRzd6a045cDNlR1Y2SWpqYkZHMk5nQWEwWUFDdjJ0QXFEcVlDMlBDNXkrZkhsWlp2Y3Z0RVJURWlvU0dnazhBdURkTEdwMzNpLzhBeVZDNCtqVUxzT0hKMG5QeTRlYTcwdU45TCtrSkk2Z2FocEdiVWJnR1ZMV2poeUQvQUlBK3hSSnNKV0Yyemo5ZDNtT3FVWkt6WXJXeTFXeU9FWU1qdTNLNGMzSDhBcE1LQjBmZEdYTzNOb2NBVmRLM0FZT01zWTVqMWpnZlllOWJSRGJheVhHekE0RHZkdVZ3eW9oYTI3bkFXNGxZNm9vcXJ4eU5VdUp4dUFUZFdaSkhUd3RnbE8zRTNCREhESUhzVldnTkdHZ0Fkd1VnTExJeHUzVVZFVUxlWkovUEN4SjdocGlneUtxOVJQY09MWTM3UjhtNVRRMG5Sc3dZYi8xQlA0VXh1aUsrU3hlTGYyUHNyNUMrbTd6Z2J5bytiWGVscWI2aWxxS2tqbnNZSDlSL0JSOVIwcU1qeUtPMVF4OXhra3o3Z1B4WFg3bklmNDRUOHlCNnFTelFvSDhrb0hRRStpc2EvcDVmUTZXWXRlQVdQajNnZ2JqdEQ0bnlXK2FPb3JUcXJvN29LV3JwbzVvMlJDSnpYRDZMbTdpZlVkMmNqdlhLYnhyTzU2ampiU1RSeHZZSDdiWTRZZCtmSGVlYTNUb2dkZDdiUFYwZFpicXFHaG0rY2prbGlMV3Rkd0kzOTR4L0txaXRjMTRhK1lBV09WK1BBNFlnbStIQlhFTVlqR28wa2l3eHRiSlJtcWVpbTQyamJxN0U5OVhUQTdYbzdqODR6K0UvYStQaXRPdU9vcnhjcUNLMVZrOGtyWUpPeXg0N2Uxd0FKNG5HL2l2VHBBSXdSa0tBdUdpckxjTDFUWGVTa1lLcW5lSGg0M2JSSERhNzhjUm51U3VFc2U3WEF5NGozOWVxZEhMQzZ3dWpyU3cwMXAyTnN6QUt5bytjblBjVDluMkRkNXJiVlFBQUFEZ0ZWUHd4K0cyeHp6UFgzOWtoUkVST3BFVm1ycFlhMmxrcHFpTnNrY2pTMXpYRElJUEVGWGtYTDJOZTB0ZGtVTHo1cS9SbDAwWmVCWDJ3VEdqYS9iaG5qeVRDZTUzNThDRmlPMW5yRzhucWFhb25jY1lMYVNIQlA4b3l2Umo0MlNERDJodzlhdHgwc0VYMWNMRytBVU13eVhBY0d1dGtUbjI4d25BOHRGZ2JMejVCb1RXdDdlSFQwdFFRZCszVnpZOXhPZmNwK2c2Rkx0S0FhMjZRUWQ3WW1GNTh6aGRwRzdncXAwUnk1Rjl1Z3QzdXVDUVZ6ZWk2RmJIQ1E2cnE2dXBQTWJZYVBjTSs5VDFGMGE2VG9nTm0weFNFYzVzeWYzRXJha1MvRHNPMFNmbWUyU0xyRXBiVlFVVFEybG80WVdqa3hnYjhGbEJyUndBSHNWVVhiSVkyYkxRUGtpNVJFUk9wRVJFUWhFUkVJVVJwclV0djFQYVlhNmltWVh1YU90aDJ1MUU3bTBqang1ODFMb2lFSWlJaENJaUlRaUlpRUlpSWhDSWlJUWlJaUVLTDFEcUczNmJ0VTFmWHpzWnNOSmpqTHUxSzdrMW81NVBseEtJaUVMLy8yUT09IiwiaWF0IjoxNjYxNzg5ODc5LCJhcHByb3ZhbCI6IjAuMSIsInBsYXlTZWNvbmRzIjoiMzYwMCIsInN0YXJ0VGltZSI6MTY2MTc5MDAxNSwiZW5kVGltZSI6MTY2MTc5MzYxNSwiZ2FtZUFkZHJlc3MiOiIweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifQ.TF0AqIniXLg7rEhVOurFnM7MrTTvosXCYpVn0oorgBc"
}
Last updated