Bolt for Gasless NFT Minting Bolt is LightLink's gasless NFT minting plugin.
It leverages LightLink’s Enterprise Mode for gasless transactions, providing instant, gasless NFT minting for games, rewards, loyalty cards, and more projects wanting to store data on-chain.
Bolt operates by combining AWS Lambda and SQS for seamless serverless function processing, eliminating manual server management.
Simple API integration for developers:
Developers fill out a form to create a project account and receive an API key.
Bolt sets up an ERC721 contract for the project.
The project calls Bolt API and passes the NFT metadata.
Projects send data to the Bolt API, which maps this data and mints NFTs. Users can specify an address to mint to, or provide a userId
. If a userId
is provided rather then an Ethereum address, a unique LightLink account is created for the user.
Start Using Bolt
Fill out the form to set up an ERC721 contract for your application and obtain an API key.
Implement Bolt API calls to transmit data
Curl Python Java JavaScript
Copy curl --location 'https://bolt-dev.lightlink.io/{PROJECT_ID}/{USER_ID}/mint' \
--header 'x-api-key: {API_KEY}' \
--header 'Content-Type: application/json' \
--data '{
"name": "Epic Dragon",
"description": "A rare and powerful dragon NFT.",
"attributes": [
{
"trait_type": "Color",
"value": "Red"
},
{
"trait_type": "Rarity",
"value": "Legendary"
},
{
"trait_type": "Power",
"value": 9001
},
{
"trait_type": "Wingspan",
"value": "15 meters"
},
{
"trait_type": "Fire Breath",
"value": "Intense"
}
]
}'
Copy import requests
import json
url = "https://bolt-dev.lightlink.io/ {PROJECT_ID} / {USER_ID} /mint"
payload = json . dumps ({
"name" : "Epic Dragon" ,
"description" : "A rare and powerful dragon NFT." ,
"attributes" : [
{
"trait_type" : "Color" ,
"value" : "Red"
},
{
"trait_type" : "Rarity" ,
"value" : "Legendary"
},
{
"trait_type" : "Power" ,
"value" : 9001
},
{
"trait_type" : "Wingspan" ,
"value" : "15 meters"
},
{
"trait_type" : "Fire Breath" ,
"value" : "Intense"
}
]
})
headers = {
'x-api-key' : ' {API_KEY} ' ,
'Content-Type' : 'application/json'
}
response = requests . request ( "POST" , url, headers = headers, data = payload)
print (response.text)
Copy OkHttpClient client = new OkHttpClient() . newBuilder ()
. build ();
MediaType mediaType = MediaType . parse ( "application/json" );
RequestBody body = RequestBody.create(mediaType, "{\n \"name\": \"Epic Dragon\",\n \"description\": \"A rare and powerful dragon NFT.\",\n \"attributes\": [\n {\n \"trait_type\": \"Color\",\n \"value\": \"Red\"\n },\n {\n \"trait_type\": \"Rarity\",\n \"value\": \"Legendary\"\n },\n {\n \"trait_type\": \"Power\",\n \"value\": 9001\n },\n {\n \"trait_type\": \"Wingspan\",\n \"value\": \"15 meters\"\n },\n {\n \"trait_type\": \"Fire Breath\",\n \"value\": \"Intense\"\n }\n ]\n}");
Request request = new Request . Builder ()
. url ( "https://bolt-dev.lightlink.io/{PROJECT_ID}/{USER_ID}/mint" )
. method ( "POST" , body)
. addHeader ( "x-api-key" , "{API_KEY}" )
. addHeader ( "Content-Type" , "application/json" )
. build ();
Response response = client . newCall (request) . execute ();
Copy const axios = require ( 'axios' );
let data = JSON .stringify ({
"name" : "Epic Dragon" ,
"description" : "A rare and powerful dragon NFT." ,
"attributes" : [
{
"trait_type" : "Color" ,
"value" : "Red"
} ,
{
"trait_type" : "Rarity" ,
"value" : "Legendary"
} ,
{
"trait_type" : "Power" ,
"value" : 9001
} ,
{
"trait_type" : "Wingspan" ,
"value" : "15 meters"
} ,
{
"trait_type" : "Fire Breath" ,
"value" : "Intense"
}
]
});
let config = {
method : 'post' ,
maxBodyLength : Infinity ,
url : 'https://bolt-dev.lightlink.io/{PROJECT_ID}/{USER_ID}/mint' ,
headers : {
'x-api-key' : '{API_KEY}' ,
'Content-Type' : 'application/json'
} ,
data : data
};
axios .request (config)
.then ((response) => {
console .log ( JSON .stringify ( response .data));
})
.catch ((error) => {
console .log (error);
});
Default Models
Stats User Token Game
metadata
: Metadata information
walletAddress
: Wallet's address (Unique)
tokenId
: Token's unique string identifier
contractAddress
: Game's contract address
imageUrl
: Image URL for the game
mappingKey
: Mapping key for the game
Retrieve Data With Endpoints
Status User stats Game stats Users of a game Mint token Fetch token metadata
Response: { status: 'ok' }
URL: /users/:userId/stats
URL Parameters: userId
(required) - ID of the user
Response:
Success: { success: true, data: userStats }
Error: { error: error message, url: requested URL }
URL: /games/:gameId/stats
URL Parameters: gameId
(required) - ID of the game
Response:
Success: { success: true, data: gameStats }
Error: { error: error message, url: requested URL }
URL: /games/:gameId/users
URL Parameters: gameId
(required) - ID of the game
Response:
Success: { success: true, data: users }
Error: { error: error message, url: requested URL }
URL: /:gameId/:userId/mint/
URL Parameters:
gameId
(required) - ID of the game
userId
(required) - The users ID, or Ethereum wallet.
Body: JSON object with metadata payload
Response:
Success: { success: true, data: postedStats }
Error: { error: error message, url: requested URL, body: sent data }
URL: /metadata/:gameId/:tokenId/
URL Parameters:
gameId
(required) - ID of the game
gameId
(required) - Numeric ID of the token
Response:
Error: { error: error message, url: requested URL, body: sent data }
Last updated 2 months ago