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 auserIdis 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 --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"
}
]
}'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)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();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
gameId: Game's IDuserId: User's IDpayload: Data payloadmetadata: Metadata informationtokenId: Token's ID
walletAddress: Wallet's address (Unique)walletId: Wallet's IDexternalId: External IDgameId: Game's ID
userId: User's IDgameId: Game's IDtokenId: Token's unique string identifier
name: Name of the gamecontractAddress: Game's contract addressimageUrl: Image URL for the gamemappingKey: Mapping key for the game
Retrieve Data With Endpoints
URL:
/statusMethod:
GETResponse:
{ status: 'ok' }
URL:
/users/:userId/statsMethod:
GETURL Parameters:
userId(required) - ID of the userResponse:
Success:
{ success: true, data: userStats }Error:
{ error: error message, url: requested URL }
URL:
/games/:gameId/statsMethod:
GETURL Parameters:
gameId(required) - ID of the gameResponse:
Success:
{ success: true, data: gameStats }Error:
{ error: error message, url: requested URL }
URL:
/games/:gameId/usersMethod:
GETURL Parameters:
gameId(required) - ID of the gameResponse:
Success:
{ success: true, data: users }Error:
{ error: error message, url: requested URL }
URL:
/:gameId/:userId/mint/Method:
POSTURL Parameters:
gameId(required) - ID of the gameuserId(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/Method:
GETURL Parameters:
gameId(required) - ID of the gamegameId(required) - Numeric ID of the token
Response:
Success:
{ NftMetadata }Error:
{ error: error message, url: requested URL, body: sent data }
Last updated

