You can deliver items to three kinds of recipients when using Crossmint:

Digital Products

For digital items (NFTs, tokens, etc.), you can specify one of the following recipient types:

  • Email address: Crossmint automatically generates a secure MPC-backed custodial wallet for the user's email and delivers the item inside that new wallet. Email addresses are case-insensitive.
  • Wallet address: Directly specify a blockchain wallet address. Receipt will be delivered to the email address specified in payment.receiptEmail. This could be a user-owned wallet (e.g., MetaMask, Phantom, etc.) or a wallet you manage. The format depends on the blockchain: - Ethereum/EVM chains: 0x1234567890abcdef1234567890abcdef12345678 - Solana: 5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty - Other chains: Contact support for format requirements

Physical Products

For physical items, you must provide:

  • Email address: Required for receipt delivery (legal requirement)
  • Physical address: Required shipping information including name, address, city, state, postal code, and country

Specifying the Recipient

For Embedded Checkout, you specify the recipient by adding a recipient object to your checkout component. The recipient can be specified by email, wallet address, or physical address for physical products.

Recipient by Email

When specifying a recipient by email, Crossmint will automatically create a secure custodial wallet on the fly for that email address:

React
<CrossmintProvider apiKey="YOUR_API_KEY">
    <CrossmintEmbeddedCheckout
        recipient={{
            email: "user@example.com", // Email address of the recipient
        }}
        // other properties removed for brevity
    />
</CrossmintProvider>

The recipient will be able to access their purchased items by logging into their Crossmint wallet in staging or mainnet.

Recipient by Wallet Address

To deliver items directly to a specific blockchain wallet address:

React
<CrossmintProvider apiKey="YOUR_API_KEY">
    <CrossmintEmbeddedCheckout
        recipient={{
            walletAddress: "0x1234567890abcdef1234567890abcdef12345678", // For EVM chains
            // walletAddress: "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty" // For Solana
        }}
        // other properties removed for brevity
    />
</CrossmintProvider>

Physical Product Recipients

Physical Address Format

Extend the recipient object with the physicalAddress object. These are the properties (note the required vs optional fields):

{
  "recipient": {
    "email": "user@example.com",
    "physicalAddress": {
      "name": "John Doe", // required - Full name of the recipient
      "line1": "123 Main St", // required - Street address, P.O. box, company name, c/o
      "line2": "Apt 4B", // optional - Apartment, suite, unit, building, floor, etc.
      "city": "San Francisco", // required - City, district, suburb, town, or village
      "state": "CA", // required for US addresses - State, county, province, or region
      "postalCode": "94105", // required - ZIP or postal code
      "country": "US" // required - Two-letter country code (ISO 3166-1 alpha-2)
    }
  }
}

Note: You must include the email address of the recipient in the recipient object so an email receipt can be sent to the customer (this is a legal requirement for physical product deliveries).

Currently, only US addresses are supported for physical product deliveries.

When purchasing physical products, you can specify a physical address for delivery:

React
<CrossmintProvider apiKey="YOUR_API_KEY">
    <CrossmintEmbeddedCheckout
        recipient={{
            email: "user@example.com",
            physicalAddress: {
                name: "John Doe",
                line1: "123 Main St",
                line2: "Apt 4B", // optional
                city: "San Francisco",
                state: "CA",
                postalCode: "94105",
                country: "US",
            },
        }}
        // other properties removed for brevity
    />
</CrossmintProvider>