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

# Select Items

> Specify which items to purchase, and how to sell multiple items in a single order

Every order describes what the buyer is purchasing through the `lineItems` property — an array of items with a locator and `callData`.

<Snippet file="item-selection-common.mdx" />

## Select Items

> [tab] Embedded
>
> ```tsx collectionLocator theme={null}
> <CrossmintProvider apiKey="<your-client-api-key>">
>     <CrossmintEmbeddedCheckout
>         lineItems={{
>             collectionLocator: "crossmint:_YOUR_COLLECTION_ID_", // Crossmint managed collection
>             // collectionLocator: "crossmint:_YOUR_COLLECTION_ID_:_TEMPLATE_ID_", // With specific template
>             callData: {
>                 totalPrice: "5.00",
>                 quantity: 1, // matches your contract's parameter name
>             },
>         }}
>     />
> </CrossmintProvider>
> ```
>
> ```tsx tokenLocator - EVM theme={null}
> <CrossmintProvider apiKey="<your-client-api-key>">
>     <CrossmintEmbeddedCheckout
>         lineItems={{
>             tokenLocator: "base-sepolia:0x036CbD53842c5426634e7929541eC2318f3dCF7e", // USDC on Base Sepolia: <blockchain>:<contractAddress>
>             executionParameters: {
>                 mode: "exact-in",
>                 amount: "5", // USD amount the buyer spends
>             },
>         }}
>     />
> </CrossmintProvider>
> ```
>
> ```tsx tokenLocator - Solana theme={null}
> <CrossmintProvider apiKey="<your-client-api-key>">
>     <CrossmintEmbeddedCheckout
>         lineItems={{
>             tokenLocator: "solana:7EivYFyNfgGj8xbUymR7J4LuxUHLKRzpLaERHLvi7Dgu", // XMEME test token: solana:<mintAddress>
>             executionParameters: {
>                 mode: "exact-in",
>                 amount: "5", // USD amount the buyer spends
>             },
>         }}
>     />
> </CrossmintProvider>
> ```
>
> You can access the current order's item data from React with the `useCrossmintCheckout` hook (`order?.lineItems`), available inside components wrapped by `CrossmintProvider` and `CrossmintCheckoutProvider`.

> [tab] Hosted
>
> ```tsx collectionLocator theme={null}
> <CrossmintProvider apiKey="<your-client-api-key>">
>     <CrossmintHostedCheckout
>         lineItems={{
>             collectionLocator: "crossmint:_YOUR_COLLECTION_ID_", // Crossmint managed collection
>             callData: {
>                 totalPrice: "5.00",
>                 quantity: 1, // matches your contract's parameter name
>             },
>         }}
>     />
> </CrossmintProvider>
> ```
>
> ```tsx tokenLocator - EVM theme={null}
> <CrossmintProvider apiKey="<your-client-api-key>">
>     <CrossmintHostedCheckout
>         lineItems={{
>             tokenLocator: "base-sepolia:0x036CbD53842c5426634e7929541eC2318f3dCF7e", // USDC on Base Sepolia: <blockchain>:<contractAddress>
>             executionParameters: {
>                 mode: "exact-in",
>                 amount: "5", // USD amount the buyer spends
>             },
>         }}
>     />
> </CrossmintProvider>
> ```

> [tab] Headless
>
> ```json collectionLocator theme={null}
> {
>   "lineItems": [
>     {
>       "collectionLocator": "crossmint:_YOUR_COLLECTION_ID_", // Crossmint managed collection
>       // "collectionLocator": "crossmint:_YOUR_COLLECTION_ID_:_TEMPLATE_ID_", // With specific template
>       "callData": {
>         "totalPrice": "5.00",
>         "quantity": 1 // matches your contract's parameter name
>       }
>     }
>   ]
> }
> // To use exact-in mode, add executionParameters: { maxSlippageBps: "500" } to the lineItem object. For custom contract params, add executionParameters: { customParam: "value" }.
> ```
>
> ```json collectionLocator - imported contract theme={null}
> {
>   "lineItems": [
>     {
>       "collectionLocator": "ethereum:0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D", // External collection registered in Crossmint Console
>       "callData": {
>         "totalPrice": "5.00",
>         "quantity": 1 // matches your contract's parameter name
>         // For external contracts, you might need additional parameters such as:
>         // "_amount": 1, // if your mint function uses _amount instead of quantity
>         // "tokenId": "123", // if your contract requires a specific tokenId
>         // "metadata": "ipfs://...", // if your contract accepts metadata
>       }
>     }
>   ]
> }
> ```
>
> ```json tokenLocator - Solana theme={null}
> {
>   "lineItems": [
>     {
>       "tokenLocator": "solana:7EivYFyNfgGj8xbUymR7J4LuxUHLKRzpLaERHLvi7Dgu", // XMEME test token: solana:<mintAddress>
>       "executionParameters": {
>         "mode": "exact-in",
>         "amount": "5" // USD amount the buyer spends
>       }
>     }
>   ]
> }
> ```

<Snippet file="external-evm-contract-parameter-note.mdx" />

<Snippet file="solana-buyer-creator-royalty-snippet.mdx" />

<Snippet file="multiple-line-items-snippet.mdx" />

Multiple line items let a buyer purchase several items in a single transaction — for example, a marketplace cart or several tokens from an ERC-1155 contract. This is currently supported for NFTs only, with a maximum of 15 NFTs per order.

For secondary (marketplace) sales, each line item references a shared secondary-sales `collectionId` provisioned by your Crossmint Customer Success Engineer, with the specific `contractAddress` and `tokenId` in `callData`. See [Marketplaces & Launchpads](https://docs.crossmint.com/payments/advanced/marketplaces-and-launchpads.md).

```json theme={null}
"lineItems": [
  {
    "collectionLocator": "crossmint:_YOUR_SECONDARY_SALES_COLLECTION_ID_",
    "callData": {
      "contractAddress": "0x___CONTRACT_ADDRESS_OF_TOKEN",
      "tokenId": "234"
    }
  },
  {
    "collectionLocator": "crossmint:_YOUR_SECONDARY_SALES_COLLECTION_ID_",
    "callData": {
      "contractAddress": "0x___ANOTHER_TOKEN_CONTRACT",
      "tokenId": "567"
    }
  }
]
```

> [!NOTE]
>
> Delivery is tracked per line item: when the order completes, check each item's `delivery.status` individually. See
> [How Checkout Works](https://docs.crossmint.com/payments/concepts/how-checkout-works.md).

## Next Steps

> [card] [Specify Recipient](https://docs.crossmint.com/payments/guides/specify-recipient.md)
>
> Decide where purchased items are delivered

> [card] [Track Orders](https://docs.crossmint.com/payments/guides/track-orders.md)
>
> Follow the order through delivery
