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

# Bring Your Own Collection

> Start accepting payments into your contract

Crossmint has a pre-audited library of [smart contracts](/minting/nfts/integrate/create-collections) that serve most use cases. However, if you have custom needs, you can also bring your own.

<Tip>
  The Checkout has been battle-tested at scale with Crossmint's collections, and may result in a more reliable
  experience than using an untested contract, or at least require less trouble-shooting.
</Tip>

<Accordion title="When does it make sense to bring my own contract?">
  * When you require very custom functionality not supported by Crossmint's contracts.
  * If you're developing a marketplace.
  * If you have an accesslist.
</Accordion>

<Card title="Register Collection Guide" icon="bolt" color="#E6DB63" href="/payments/guides/register-collection">
  Check out the step by step guide for registering a collection
</Card>

## Contracts Supported

<Tabs>
  <Tab title="EVM">
    ### Pre-requisites

    * Your contract must be ERC-721, ERC-721A, or ERC-1155 compliant.
    * The minting function must allow minting directly to an address that is different from the one that invoked the contract. And it must contain at least one parameter that specifies that recipient address.
    * A single address must be able to call the mint function unlimited times but does not need to be able to hold unlimited NFTs.

    <Note>
      For Xion blockchain contracts, please refer to our [Xion Contract Requirements](/minting/advanced/xion-contracts) documentation.
    </Note>

    ### Contract Registration

    You may register contracts manually from the console or via <Tooltip tip="Enterprise feature">API</Tooltip>.

    To register a contract manually, simply go to the console, click on `Token collections` and follow the steps on the wizard.

    <AccordionGroup>
      <Accordion title="My ABI wasn't automatically imported">
        When you compile your smart contract there will be a corresponding abi file with an `.abi` or `.json` extension.

        Inside this file, you'll see JSON property named abi, which describes the functions in your smart contract. Here's an example of a very simple abi file. Yours will likely have more function descriptions.

        ```json theme={null}
        // Example generated abi file for smart contract
        {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "mintTo",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ]
        }
        ```

        Copy the JSON array object that comes after the string `abi` and paste it into the `Contract ABI` text box in the developer console. The content you paste in should begin with `[` and end with `]`.
      </Accordion>

      <Accordion title="Specifying the remaining parameters">
        Whether your ABI was retrieved automatically or you pasted it in manually you need to specify the:

        * Mint function
        * Recipient address parameter name
        * \[Optional] Quantity of NFTs to mint parameter name

        Crossmint will attempt to automatically select these values for you, but it's important to ensure they are set correctly. Especially if you're setting up a USDC mint function as the list of options will be longer.
      </Accordion>

      <Accordion title="Using proxy contracts">
        Proxy contracts are an advanced feature. You should use this only if you are certain that your contracts adhere to this pattern. This is crucial because Crossmint requires the actual NFT contract address when you register a mint/buy/purchase/claim function in a sales contract or revenue splitter.

        If you don't specify the NFT contract address, our system won't be able to extract token URI information or facilitate transfers. Set this up only if it isn't a transparent proxy, which is common for upgradeable contracts.
      </Accordion>
    </AccordionGroup>
  </Tab>

  <Tab title="Solana">
    Instant support for:

    * **Primaries**: Candy Machine v3, Metaplex Instant Sales, Magic Eden's Launchpad
    * **Secondaries**: Auction House, Tensor, Magic Eden API, Hyperspace

    <Note>Only the integrations listed above are available at the moment. No custom integrations supported temporarily except for large enterprise use cases.</Note>
  </Tab>
</Tabs>
