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
}
}
}
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
}
}
}
PATCH /api/2022-06-09/orders/{orderId}
{
"recipient": {
"email": "user@example.com" // Email address of the recipient
}
}
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
}
}
}
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
}
}
}
PATCH /api/2022-06-09/orders/{orderId}
{
"recipient": {
"walletAddress": "0x1234567890abcdef1234567890abcdef12345678" // For EVM chains
// or
// "walletAddress": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty" // For Solana
}
}
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
}
}
}
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
}
}
}
PATCH /api/2022-06-09/orders/{orderId}
{
"recipient": {
"physicalAddress": {
"name": "John Doe",
"line1": "123 Main St",
"line2": "Apt 4B", // optional
"city": "San Francisco",
"state": "CA",
"postalCode": "94105",
"country": "US"
}
}
}
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.
Responses are generated using AI and may contain mistakes.