Build and scale Web3 games, with ease
Everything you need for Web3 gaming growth and monetization. Multichain and real cross-console support with embedded user onboarding.
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f9a4f16ee98cccb409525b_gaming-hero-HD-2.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f99c717c03f444b8ff9262_nutshell-sdk.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f99c81ca1328002192c22b_nutshell-code-small.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f980b38019e376b2459221_intro-game-screenshot.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f99c907c03f444b8ffa3f7_nutshell-unity.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f99cf23d8c13f189ad3c31_nutshell-sword.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f99cb4fa61f29959476919_nutshell-code-lg.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f4208dbd69274c25d14fbc_intro-avatar.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f41e8949f925db99bb1647_intro-map.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f41e89456bd6590cbc7530_intro-inventory.webp)
![Connect a wallet badge.
Venly | The Web3 platform for developers, with secure APIs & SDKs](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65fa9f11fc80c3ad30b210c9_nutshell-create-wallet.webp)
![Mint an NFT badge.
Venly | The Web3 platform for developers, with secure APIs & SDKs](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65fa9f15046fc07020c29972_nutshell-mint-nft.webp)
![Connect to Beamable badge.
Venly | The Web3 platform for developers, with secure APIs & SDKs](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65fa9f119cd01394ec886045_nutshell-beamable.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65fa9f611a34b9fe3f9afc08_nutshell-mint-sword.webp)
Build, scale & engage with Venly
Access all gaming API functionalities directly within Unity and Unreal, the industry's leading game development engines. Our toolkit is a natural extension of your development environment.
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f470540256421dc0622af7_Transition%205.webp)
Integrate with Beamable, Playfab, or your custom backend to add LiveOps services to your project. Everything you need to operate and monetize your game.
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f997d029885c5f5383710e_connect-to-backend.webp)
With external smart contract support, you have the freedom to implement complex game mechanics and tokenomics. Our toolkit is compatible with popular token types like ERC20, ERC1155, and ERC72.
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f999b24620308540a09432_nutshell-smartcontracts.webp)
Expand your reach across platforms
![A diagram showing the process of the Venly Gaming SDK.](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f95e6eb4c6c5e94ff897b2_gaming-process-2.webp)
Venly's answer to industry challenges
With Venly's Web3 gaming toolkit, say goodbye to the complexities of blockchain game development. Our platform simplifies this process by blending into your existing infrastructure, ensuring a smooth transition and immediate impact.
Enhance player engagement and retention with innovative blockchain-based features, adding a new layer of excitement to your games.
Reduce the burden of technical complexities with our easy-to-integrate blockchain technology.
Effortlessly scale your games with our robust and flexible platform, designed to grow with your success.
With top-tier security measures, we ensure the safety of in-game transactions and player data, building trust within your gaming community.
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f4403ad16d4866214dfb15_gaming-cta-image.webp)
//**Request Parameters
VyCreateWalletRequest request = new()
{
Chain = eVyChain.Matic,
Description = "My first wallet",
Pincode = "123456",
WalletType = eVyWalletType.ApiWallet
};
//**Execute Request
//Option 1 (Promise-like)
VenlyAPI.Wallet.CreateWallet(request)
.OnSuccess(wallet =>
{
//Wallet Created!
})
.OnFail(exception =>
{
//Oops, something went wrong...
});
//Option 2 (async/await)
var wallet = await VenlyAPI.Wallet.CreateWallet(request).AwaitResult();
//**Header
#include "AutoGen\VyWalletAPI.h"
//**Request Parameters
FVyCreateWalletRequest Params{};
Params.Chain = EVyChain::MATIC;
Params.Description = FVyOptString(TEXT("My First Wallet"));
Params.Pincode = TEXT("123456");
//**OnComplete Handler
FVyOnCreateWalletComplete OnComplete;
OnComplete.BindLambda([](FVyCreateWalletResponse Response)
{
if(Response.Success) {/*Wallet Created!*/}
else {/*Oops, something went wrong...*/}
});
//**Execute Request
UVyWalletAPI::Get()->CreateWallet(Params, OnComplete);
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f96ed74ba97f7f75ccdc3d_BP_CreateWallet.webp)
//**Request Parameters (0.5 Matic to target address)
VyTransactionNativeTokenTransferRequest request = new()
{
Chain = eVyChain.Matic,
WalletId = "1f2924a2-22a8-47b8-a93f-80d7217ee6b0",
ToAddress = "0xec1955c7E899e7aef312B48e4559E5A321504253",
Value = 0.5
};
//**Execute Request (Pin Required)
//Option 1 (Promise-like)
VenlyAPI.Wallet.ExecuteNativeTokenTransfer(pincode:"123456", request)
.OnSuccess(txResult =>
{
//Transfer Executed!
})
.OnFail(exception =>
{
//Oops, something went wrong...
});
//Option 2 (async/await)
var txResult = await VenlyAPI.Wallet.ExecuteNativeTokenTransfer("123456", request).AwaitResult();
//**Header
#include "AutoGen\VyWalletAPI.h"
//**Request Parameters
FVyTransferNativeTokenRequest Params{};
Params.Pincode = TEXT("123456");
Params.TransactionRequest.Chain = EVyChain::MATIC;
Params.TransactionRequest.WalletId = TEXT("1f2924a2-22a8-47b8-a93f-80d7217ee6b0");
Params.TransactionRequest.ToAddress = TEXT("0xec1955c7E899e7aef312B48e4559E5A321504253");
Params.TransactionRequest.Value = FVyOptDouble(0.5);
//**OnComplete Handler
FVyOnTransferNativeTokenComplete OnComplete;
OnComplete.BindLambda([](FVyTransferNativeTokenResponse Response)
{
if(Response.Success) {/*Transfer Executed!*/}
else {/*Oops, something went wrong...*/}
});
//**Execute Request
UVyWalletAPI::Get()->TransferNativeToken(Params, OnComplete);
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f96f7dc7cd9ccc51681aa3_BP_TransferNativeToken.webp)
//**Request Parameters (Destinations & Amounts)
VyMintTokensRequest request = new()
{
Destinations = new VyTokenDestinationDto[]
{
new VyTokenDestinationDto
{
Address = "0xec1955c7E899e7aef312B48e4559E5A321504253",
Amount = 1
}
}
};
//**Execute Request (ContractId & TokenTypeId Required)
//Option 1 (Promise-like)
VenlyAPI.Nft.MintTokens(contractId:52415, typeId:5, request)
.OnSuccess(mintedTokens =>
{
//Mint Initiated!
})
.OnFail(exception =>
{
//Oops, something went wrong...
});
//Option 2 (async/await)
var mintedTokens = await VenlyAPI.Nft.MintTokens(52415, 5, request).AwaitResult();
//**Header
#include "AutoGen\VyNftAPI.h"
//**Request Parameters
FVyMintTokensRequest Params{};
Params.Destinations.Add(FVyTokenDestinationDto{});
Params.Destinations[0].Address = TEXT("0xec1955c7E899e7aef312B48e4559E5A321504253");
Params.Destinations[0].Amount = 1;
//**OnComplete Handler
FVyOnMintTokensComplete OnComplete;
OnComplete.BindLambda([](FVyMintTokensResponse Response)
{
if(Response.Success) {/*Mint Initiated!*/}
else {/*Oops, something went wrong...*/}
});
//**Execute Request
UVyNftAPI::Get()->MintTokens(52415, 5, Params, OnComplete);
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f9702d118f5b9a008a4ff0_BP_MintNFT.webp)
//**Request Parameters (Define Sale/Auction Offer)
//Ext > Handles entire flow (Creation/Signing/Custody)
//Offers from external wallets are also possible
VySaleOfferRequestExt request = new()
{
Pincode = "123456",
WalletId = "1f2924a2-22a8-47b8-a93f-80d7217ee6b0",
OfferRequest = new VySaleOfferRequest
{
SellerAddress = "0xec1955c7E899e7aef312B48e4559E5A321504253",
Visibility = eVyVisibilityType.Public,
Price = 0.5,
Nft = new VyNftDto
{
Chain = eVyChain.Matic,
Address = "0xdbd6fef0a23f64a2b17749bba4232256475dcfb9",
TokenId = "2"
}
//extra options...
}
};
//**Execute Request
//Option 1 (Promise-like)
VenlyAPI.Market.CreateOfferExt(request)
.OnSuccess(saleOffer =>
{
//Sale Offer Created!
})
.OnFail(exception =>
{
//Oops, something went wrong...
});
//Option 2 (async/await)
var saleOffer = await VenlyAPI.Market.CreateOfferExt(request).AwaitResult();
//**Header
#include "AutoGen\VyMarketAPI.h"
//**Request Parameters
FVySaleOfferRequest Params{};
Params.SellerAddress = TEXT("0xec1955c7E899e7aef312B48e4559E5A321504253");
Params.Visibility = FVyOptVisibilityType(EVyVisibilityType::PUBLIC);
Params.Price = FVyOptDouble(0.5);
Params.Nft.Chain = EVyChain::MATIC;
Params.Nft.Address = TEXT("0xdbd6fef0a23f64a2b17749bba4232256475dcfb9");
Params.Nft.TokenId = TEXT("2");
//extra options...
//**OnComplete Handler
FVyOnCreateSaleOfferComplete OnComplete{};
OnComplete.BindLambda([](FVyCreateSaleOfferResponse Response)
{
if(Response.Success) {/*Sale Offer Created!*/}
else {/*Oops, something went wrong...*/}
});
//**Execute Request
UVyMarketAPI::Get()->CreateSaleOffer(Params, OnComplete);
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f97104850bb8f5d5143f56_BP_CreateOffer.webp)
//**Retrieve a wallet linked to a logged-in user
//managed by an external Identity Service (Beamable/PlayFab/Custom)
//Option 1 (Promise-like)
VenlyAPI.ProviderExtensions.GetWalletForUser()
.OnSuccess(wallet =>
{
//Wallet Retrieved!
})
.OnFail(exception =>
{
//Oops, something went wrong...
});
//Option 2 (async/await)
var wallet = await VenlyAPI.ProviderExtensions.GetWalletForUser();
//**Header
#include "VyProviderExtensions.h"
//**Retrieve a wallet linked to a logged-in user
//managed by an external Identity Service (Beamable/PlayFab)
//**OnComplete Handler
FVyOnGetWalletForUserComplete OnComplete{};
OnComplete.BindLambda([](FVyGetWalletResponse Response)
{
if(Response.Success) {/*Wallet Retrieved!*/}
else {/*Oops, something went wrong...*/}
});
//**Execute Request
UVyProviderExtensions::Get()->CPP_GetWalletForUser(OnComplete);
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65f9712d4e4daf1e88f3b26a_BP_RetrieveUserWallet.webp)
![](https://cdn.prod.website-files.com/6347bd6199b204194ca76e2c/65cf42d39316b6741804618c_outro-bg.jpg)