curl --request PUT \
--url https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates/{templateId} \
--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/{templateId}"
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.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
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/{templateId}', 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/{templateId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
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/{templateId}"
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("PUT", 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.put("https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates/{templateId}")
.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/{templateId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.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."
}Create Template with ID
Create a token template with preconfigured metadata
API scope required: nfts.create
curl --request PUT \
--url https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates/{templateId} \
--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/{templateId}"
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.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
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/{templateId}', 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/{templateId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
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/{templateId}"
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("PUT", 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.put("https://staging.crossmint.com/api/2022-06-09/collections/{collectionId}/templates/{templateId}")
.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/{templateId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.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
This is the identifier for the collection related to the request. Every project has default collections: default-solana and default-polygon.
The create-collection API will result in collections with UUID formatted collectionId.
Example: 9c82ef99-617f-497d-9abb-fd355291681b
The create-collection-idempotent API allows you to specify an arbitrary identifier during the initial request.
Example: your-custom-identifier
The template ID
Body
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?

