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 Headless Checkout, you specify the recipient when creating or updating an order.

Recipient by Email

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

POST /api/2022-06-09/orders
{
  "recipient": {
    "email": "user@example.com" // Email address of the recipient
  },
  "locale": "en-US",
  "payment": {
    "method": "ethereum-sepolia",
    "currency": "eth",
    "payerAddress": "0x1234abcd...",
    "receiptEmail": "user@example.com"
  },
  "lineItems": {
    "collectionLocator": "crossmint:cosdahdasda",
    "callData": {
      "totalPrice": "0.0001",
      "quantity": 1
    }
  }
}

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:

POST /api/2022-06-09/orders
{
  "recipient": {
    "walletAddress": "0x1234567890abcdef1234567890abcdef12345678" // For EVM chains
    // or
    // "walletAddress": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty" // For Solana
  },
  "locale": "en-US",
  "payment": {
    "method": "ethereum-sepolia",
    "currency": "eth",
    "payerAddress": "0x1234abcd...",
    "receiptEmail": "user@example.com" // Required when using wallet address
  },
  "lineItems": {
    "collectionLocator": "crossmint:cosdahdasda",
    "callData": {
      "totalPrice": "0.0001",
      "quantity": 1
    }
  }
}

If specifying a recipient by wallet address, ensure the address is valid for the chain your collection is on, which may differ from the chain the payment is performed on.

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, providing a physical address is required. If you don’t provide it in the initial order, you can update the order it later:

POST /api/2022-06-09/orders
{
  "recipient": {
    "email": "buyer@example.com", // Email address of the recipient
    "physicalAddress": {
      "name": "John Doe",
      "line1": "123 Main St",
      "line2": "Apt 4B", // optional
      "city": "San Francisco",
      "state": "CA",
      "postalCode": "94105",
      "country": "US"
    }
  },
  "locale": "en-US",
  "payment": {
    "method": "ethereum-sepolia",
    "currency": "eth",
    "payerAddress": "0x1234abcd...",
    "receiptEmail": "buyer@example.com" // Required for physical products
  },
  "lineItems": {
    "collectionLocator": "crossmint:cosdahdasda",
    "callData": {
      "totalPrice": "0.0001",
      "quantity": 1
    }
  }
}

If you create an order with a physical product without specifying a physicalAddress, the order’s quote status will become requires-physical-address. After providing the physical address, the order status will update and include the necessary payment.preparation parameters to proceed with payment. Learn more about payment preparation in the payment phase documentation.