When creating a template, you can specify a storage parameter to determine where the credentials will be stored. The possible values for this parameter are:

  • crossmint
  • delegated
  • decentralized

Crossmint Storage

With this option, credentials are stored on the Crossmint database. This is the most flexible solution and is compatible with all other features.

IMPORTANT: There is not access control on credential retrieval, credential data is public and can be retrieved by anyone, use encrypted credentials if you need to protect the data.

Decentralized Storage

This option will store the credential to a decentralized storage (IPFS), the retrievalId will be the IPFS hash, urn:ipfs:<cid>. The only retrieval endpoint available will be the one by retrievalID, that will retrieve the credential from IPFS.

Encryption is suggested to avoid the credential to be public.

IMPORTANT: In case of ipfs storage the credentialId and the retrievalId will be different.

NOTE: credential issuance will be slower than other storage options.

Delegated Storage

With delegated storage, the credential is not stored anywhere and no reference to the data is stored on Crossmint databases. The credential is returned to the issuer via the webhook and the issuer is responsible for storing it.

All Crossmint retrieval endpoints will consequently be disabled. A delegatedStorageEndpoint parameter must be added to the template creation request to specify the endpoint where the credential can be retrieved. (Can be set to a dummy value like “unknown” if not desired)

This endpoint will be saved in the contract metadata and can be used by users to retrieve the credential associated with their NFT.