Skip to main content
PUT
/
2022-06-09
/
collections
/
{collectionId}
/
templates
/
{templateId}
Create Template with ID
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

X-API-KEY
string
header
required

Obtained in the Crossmint developer console

Path Parameters

collectionId
string
required

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

templateId
string
required

The template ID

Body

application/json
metadata
object
onChain
object

Onchain details

supply
object

Supply details

reuploadLinkedFiles
boolean

Any URLs in the metadata object will be resolved and reuploaded to IPFS [Default: true]

Response

Success

templateId
string<uuid>
Example:

"20ed0963-0185-49af-b4a0-2de3169bb367"

metadata
object
onChain
EVM · object
supply
object