> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crossmint.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Collection Registration and Verification API

> Launchpads now use Crossmint's API to register and verify a collection.

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 [Register External Collection](/payments/guides/register-collection) documentation page for further information.

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

## 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:

<Tab title="Hosted Checkout">
  Sample code for the collection registration and verification API. Click on "Response" to see what a successful response will look like.

  <CodeGroup>
    ```jsx JavaScript theme={null}
       // Define the API URL
       const apiUrl = "https://staging.crossmint.com/api/v1-alpha1/collections";

       // 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
              erc20MintCurrency: "usdc", // the ERC20 currency to be used for minting
          },
          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));
    ```

    ```json Response (Successful) theme={null}
       {
          "collectionId": "<your-collection-id-string>"
       }
    ```
  </CodeGroup>
</Tab>

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.

<CodeGroup>
  ```jsx JavaScript theme={null}
     // 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 = `https://staging.crossmint.com/api/v1-alpha1/collections/${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
  ```

  ```json Response (Successful) theme={null}
      {
         "verificationStatus": {
             "seller": {
                 "status": "verified"
             },
             "collection": {
                 "status": "verified"
             }
         }
     }
  ```
</CodeGroup>

***

## FAQs

<AccordionGroup>
  <Accordion title="What are the possible inputs for the category parameter?">
    You can find all the possible inputs below:

    ```json VerificationCategory inputs theme={null}
       VerificationCategory {
        LOYALTY: "loyalty",
        ART: "art",
        MUSIC: "music",
        GAMING: "gaming",
        TICKETING: "ticketing",
        CHARITY: "charity",
        OTHER: "other",
       }
    ```
  </Accordion>

  <Accordion title="Does every collection require seller's KYC and collection verification?">
    The verification requirement varies by the payment type selected for the collection.

    * Credit card: Seller and collection status must be “verified”.
    * Crypto: Only collection status must be “verified”.
  </Accordion>
</AccordionGroup>
