Create Template
curl --request POST \
--url https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"metadata": {
"name": "My template",
"image": "https://www.crossmint.com/assets/crossmint/logo.png",
"description": "A new collection with its own dedicated smart contract",
"symbol": "<string>"
},
"onChain": {
"tokenId": "1"
},
"supply": {
"limit": 10
},
"reuploadLinkedFiles": true
}
'import requests
url = "https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates"
payload = {
"metadata": {
"name": "My template",
"image": "https://www.crossmint.com/assets/crossmint/logo.png",
"description": "A new collection with its own dedicated smart contract",
"symbol": "<string>"
},
"onChain": { "tokenId": "1" },
"supply": { "limit": 10 },
"reuploadLinkedFiles": True
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
metadata: {
name: 'My template',
image: 'https://www.crossmint.com/assets/crossmint/logo.png',
description: 'A new collection with its own dedicated smart contract',
symbol: '<string>'
},
onChain: {tokenId: '1'},
supply: {limit: 10},
reuploadLinkedFiles: true
})
};
fetch('https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'metadata' => [
'name' => 'My template',
'image' => 'https://www.crossmint.com/assets/crossmint/logo.png',
'description' => 'A new collection with its own dedicated smart contract',
'symbol' => '<string>'
],
'onChain' => [
'tokenId' => '1'
],
'supply' => [
'limit' => 10
],
'reuploadLinkedFiles' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates"
payload := strings.NewReader("{\n \"metadata\": {\n \"name\": \"My template\",\n \"image\": \"https://www.crossmint.com/assets/crossmint/logo.png\",\n \"description\": \"A new collection with its own dedicated smart contract\",\n \"symbol\": \"<string>\"\n },\n \"onChain\": {\n \"tokenId\": \"1\"\n },\n \"supply\": {\n \"limit\": 10\n },\n \"reuploadLinkedFiles\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {\n \"name\": \"My template\",\n \"image\": \"https://www.crossmint.com/assets/crossmint/logo.png\",\n \"description\": \"A new collection with its own dedicated smart contract\",\n \"symbol\": \"<string>\"\n },\n \"onChain\": {\n \"tokenId\": \"1\"\n },\n \"supply\": {\n \"limit\": 10\n },\n \"reuploadLinkedFiles\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {\n \"name\": \"My template\",\n \"image\": \"https://www.crossmint.com/assets/crossmint/logo.png\",\n \"description\": \"A new collection with its own dedicated smart contract\",\n \"symbol\": \"<string>\"\n },\n \"onChain\": {\n \"tokenId\": \"1\"\n },\n \"supply\": {\n \"limit\": 10\n },\n \"reuploadLinkedFiles\": true\n}"
response = http.request(request)
puts response.read_body{
"templateId": "20ed0963-0185-49af-b4a0-2de3169bb367",
"metadata": {
"name": "My Token",
"image": "ipfs://QmaToZn4VEjF7q4CAudPaNka6AD484xuuEZSXmTLJPDLVE",
"description": "Sample Token Template",
"symbol": "A shorthand identifier for the token (Solana only)"
},
"onChain": {
"tokenId": 1
},
"supply": {
"limit": 1,
"minted": 0
}
}{
"error": true,
"message": "Invalid arguments or empty parameter <missing parameter>."
}{
"error": true,
"message": "Not found"
}{
"error": true,
"message": "Already exists"
}{
"error": true,
"message": "Couldn't fetch metadata from the URI defined on the template: <metadata url>. Ensure this URI is available and publicly accessible."
}{
"error": true,
"message": "Please try again in a few minutes. If the issue still persists, contact Crossmint support."
}NFT Templates
Create Template
Create a token template, that NFTs or SFTs may be minted from
API scope required: nfts.create
POST
/
2022-06-09
/
collections
/
{collectionId}
/
templates
Create Template
curl --request POST \
--url https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"metadata": {
"name": "My template",
"image": "https://www.crossmint.com/assets/crossmint/logo.png",
"description": "A new collection with its own dedicated smart contract",
"symbol": "<string>"
},
"onChain": {
"tokenId": "1"
},
"supply": {
"limit": 10
},
"reuploadLinkedFiles": true
}
'import requests
url = "https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates"
payload = {
"metadata": {
"name": "My template",
"image": "https://www.crossmint.com/assets/crossmint/logo.png",
"description": "A new collection with its own dedicated smart contract",
"symbol": "<string>"
},
"onChain": { "tokenId": "1" },
"supply": { "limit": 10 },
"reuploadLinkedFiles": True
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
metadata: {
name: 'My template',
image: 'https://www.crossmint.com/assets/crossmint/logo.png',
description: 'A new collection with its own dedicated smart contract',
symbol: '<string>'
},
onChain: {tokenId: '1'},
supply: {limit: 10},
reuploadLinkedFiles: true
})
};
fetch('https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'metadata' => [
'name' => 'My template',
'image' => 'https://www.crossmint.com/assets/crossmint/logo.png',
'description' => 'A new collection with its own dedicated smart contract',
'symbol' => '<string>'
],
'onChain' => [
'tokenId' => '1'
],
'supply' => [
'limit' => 10
],
'reuploadLinkedFiles' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates"
payload := strings.NewReader("{\n \"metadata\": {\n \"name\": \"My template\",\n \"image\": \"https://www.crossmint.com/assets/crossmint/logo.png\",\n \"description\": \"A new collection with its own dedicated smart contract\",\n \"symbol\": \"<string>\"\n },\n \"onChain\": {\n \"tokenId\": \"1\"\n },\n \"supply\": {\n \"limit\": 10\n },\n \"reuploadLinkedFiles\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {\n \"name\": \"My template\",\n \"image\": \"https://www.crossmint.com/assets/crossmint/logo.png\",\n \"description\": \"A new collection with its own dedicated smart contract\",\n \"symbol\": \"<string>\"\n },\n \"onChain\": {\n \"tokenId\": \"1\"\n },\n \"supply\": {\n \"limit\": 10\n },\n \"reuploadLinkedFiles\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {\n \"name\": \"My template\",\n \"image\": \"https://www.crossmint.com/assets/crossmint/logo.png\",\n \"description\": \"A new collection with its own dedicated smart contract\",\n \"symbol\": \"<string>\"\n },\n \"onChain\": {\n \"tokenId\": \"1\"\n },\n \"supply\": {\n \"limit\": 10\n },\n \"reuploadLinkedFiles\": true\n}"
response = http.request(request)
puts response.read_body{
"templateId": "20ed0963-0185-49af-b4a0-2de3169bb367",
"metadata": {
"name": "My Token",
"image": "ipfs://QmaToZn4VEjF7q4CAudPaNka6AD484xuuEZSXmTLJPDLVE",
"description": "Sample Token Template",
"symbol": "A shorthand identifier for the token (Solana only)"
},
"onChain": {
"tokenId": 1
},
"supply": {
"limit": 1,
"minted": 0
}
}{
"error": true,
"message": "Invalid arguments or empty parameter <missing parameter>."
}{
"error": true,
"message": "Not found"
}{
"error": true,
"message": "Already exists"
}{
"error": true,
"message": "Couldn't fetch metadata from the URI defined on the template: <metadata url>. Ensure this URI is available and publicly accessible."
}{
"error": true,
"message": "Please try again in a few minutes. If the issue still persists, contact Crossmint support."
}Authorizations
Obtained in the Crossmint developer console
Path Parameters
The ID of the named collection, used to create new tokens
Example:
"idempotent-collection-name"
Body
application/json
See https://docs.crossmint.com/docs/metadata for more info
Show child attributes
Show child attributes
Onchain details
Show child attributes
Show child attributes
Supply details
Show child attributes
Show child attributes
Any URLs in the metadata object will be resolved and reuploaded to IPFS [Default: true]
Was this page helpful?
⌘I

