Crossmint provides an API to facilitate collection registration and verification. This functionality is for launchpads that want to use Crossmint’s checkout and allow their users to go through the KYC and collection verification flow.

Before you get started:

Contact your Crossmint customer success engineer to request the collections.write scope be added to an existing API key. You will need to provide the projectId associated with the API key you will be using.

Your contract also needs to meet certain requirements. Please refer to the Bring your Own Collection documentation page for further information.

Please do not share your API key secret with the Crossmint team or anyone else.

Collection Registration and Verification process

Once a user has created a collection on your launchpad, you can optionally choose to register the collection with Crossmint to enable Credit Card payments. This API abstracts away much of the complexity involved from the user when they perform KYC and the collection verification process.

As the launchpad, you will pass information about the collection as parameters to the API. Crossmint will then return a URL where the user can complete the KYC and collection verification. This API call’s structure is as follows:

Sample code for the collection registration and verification API. Click on “Response” to see what a successful response will look like.

   // Define the API URL
   const apiUrl = "";

   // Set up the request body with actual data instead of placeholders
   const requestBody = {
      chain: "ethereum", // replace with actual chain name
      contractType: "erc-721", // choose between "erc-721" or "erc-1155" or "thirdweb-drop" or "candy-machine"
      args: {
          contractAddress: "0x123...", // replace with actual contract address
          mintFunctionName: "mintUSDC(address,uint256)", // specify the mint function
          abi: [], // provide the actual contract ABI array
          toParamName: "toAddress", // specify the 'to' parameter name in the mint function
          supportUSDC: true, // specify if minting is supported in USDC, if not then set it to `false`
      metadata: {
          title: "<collection_title>", // replace '<collection_title>' with the actual collection name
          description: "<description>", // replace `<description>` with the actual collection's description
          imageUrl: "<image_url>", // replace '<image_url>' with actual URL to an image
      ownership: "external", // optional - if you are regestering the collection on behalf of a creator or yourself, choose "external". Else, choose "self".
      category: "Art", // specify the verification category - this expedites the collection review
      scopes: ["payments:credit-card"], // required scopes- "payments:cross-chain" or "payments:credit-card", must specify at least one
  // Set up the request options
  const requestOptions = {
      method: "POST",
      headers: {
          'Content-Type': 'application/json',
          'X-API-KEY': '<api-key>', // replace '<api-key>' with the API Key that has the scope `collections.write`
      body: JSON.stringify(requestBody), // Convert the JavaScript object to a JSON string
  // Make the fetch request
  fetch(apiUrl, requestOptions)
  .then((response) => response.json()) // Parsing the JSON response
  .then((data) => console.log("Success:", data))
  .catch((error) => console.error("Error:", error));

The returned URL must be the URL that your user needs to be directed to. The user can complete the verification with that URL.

Get Collection status

You can check the status of your user’s verification with the get collection status endpoint. Upon a successful request, the verification status for the seller and collection may have either of the following values:

  • verified - The user has successfully completed the verification.
  • failed - The verification failed.
  • crossmint-review - It is being reviewed by the Crossmint team.
  • unverified - The user has not initiated or completed the verification process.
   // Replace '<collectionId>' with the collectionId returned in the successful POST response
   const collectionId = 'your_collection_id'; // Replace 'your_collection_id' with the actual ID
   const apiUrl = `${collectionId}`;
   // Set up the request options
   const requestOptions = {
      method: 'GET',
      headers: {
          'X-API-KEY': '<api-key>', /// replace '<api-key>' with your API Key
          'Content-Type': 'application/json',
  // Make the fetch request
  fetch(apiUrl, requestOptions)
  .then(response => {
      if (!response.ok) {
          throw new Error('Network response was not ok: ' + response.statusText);
      return response.json(); // Parse the JSON from the response
  .then(data => console.log('Success:', data)) // Handle the parsed data
  .catch(error => console.error('Error:', error)); // Handle any errors