The Store API supports storing arbitrary key-value metadata on carts (orders) and line items. Metadata is useful for tracking custom information like gift messages, attribution data, or integration-specific fields.Documentation Index
Fetch the complete documentation index at: https://spreecommerce.org/docs/llms.txt
Use this file to discover all available pages before exploring further.
Metadata is different from metafields. Metadata is simple JSON storage (untyped, no schema), while metafields are structured, typed, and schema-defined. Use metadata for integration data and internal tracking. Use metafields for customer-facing custom attributes.
Cart Metadata
You can attach metadata when creating a cart:Cart Metadata (Update)
Update metadata on an existing cart:Item Metadata
Attach metadata to individual items when adding or updating them:When Adding an Item
When Updating an Item
Updating metadata merges with existing values rather than replacing them:Metadata values can be any JSON-serializable type: strings, numbers, booleans, arrays, or nested objects.
Metadata Structure
Metadata is stored as a flat JSON object. You can use any keys and values:Metadata vs Metafields
Spree has two permanent, complementary systems for custom data — metadata for machines, metafields for humans.| Metadata | Metafields | |
|---|---|---|
| Purpose | Developer escape hatch — integration IDs, sync state | Merchant-defined structured attributes |
| Schema | Schemaless JSON — no definition required | Defined via MetafieldDefinitions (typed, validated) |
| Validation | None | Type-specific validation |
| Visibility | Write-only in Store API, readable in Admin API | Configurable (admin-only or public) |
| Admin UI | JSON preview | Dedicated form fields |
| Best for | Integration data, tracking, attribution, write-and-forget | Product specs, custom attributes, customer-facing data |
| API access | Write via Store API, read via Admin API | Read/write via both APIs |

