# Add payment method Source: https://docs.marzipan.co/api-reference/account/add-payment-method /api-reference/openapi.json post /account/payments/addPaymentMethod Save a Stripe payment method to the authenticated customer's account after it has been collected client-side. # Buy again Source: https://docs.marzipan.co/api-reference/account/buy-again /api-reference/openapi.json post /account/orders/{orderId}/buy-again Add the reorderable items from a previous order back into the authenticated customer's cart. Subscription and balance-payment line items are excluded. # Change password Source: https://docs.marzipan.co/api-reference/account/change-password /api-reference/openapi.json post /account/reset-password Change the authenticated customer's password by confirming their current password. Used from the logged-in account area. # Create address Source: https://docs.marzipan.co/api-reference/account/create-address /api-reference/openapi.json post /account/addresses Add a new delivery address to the authenticated customer's account. Returns the full updated list of addresses. # Create PayFast setup identifier Source: https://docs.marzipan.co/api-reference/account/create-payfast-setup-identifier /api-reference/openapi.json post /account/payments/payfast/setup Generate a PayFast tokenization identifier so the authenticated customer can save a payment method, optionally linked to a subscription. # Create payment intent for order Source: https://docs.marzipan.co/api-reference/account/create-payment-intent-for-order /api-reference/openapi.json post /account/orders/{orderId}/createPaymentIntent Create a Stripe payment intent so the authenticated customer can pay an outstanding (unpaid) order. Returns the client secrets needed to confirm payment. # Create setup intent Source: https://docs.marzipan.co/api-reference/account/create-setup-intent /api-reference/openapi.json post /account/payments/createSetupIntent Create a Stripe setup intent so the authenticated customer can securely save a new card for future payments. # Delete address Source: https://docs.marzipan.co/api-reference/account/delete-address /api-reference/openapi.json delete /account/addresses/{address} Remove a saved address belonging to the authenticated customer. # Details Source: https://docs.marzipan.co/api-reference/account/details /api-reference/openapi.json get /account/details Retrieve the authenticated user's account details including personal information and marketing preferences. # Get address Source: https://docs.marzipan.co/api-reference/account/get-address /api-reference/openapi.json get /account/addresses/{address} Retrieve a single saved address by its ID for the authenticated customer. # Get order Source: https://docs.marzipan.co/api-reference/account/get-order /api-reference/openapi.json get /account/orders/{orderId} Retrieve the full detail of a single order belonging to the authenticated customer, including items, addresses, payment and tracking information. # List addresses Source: https://docs.marzipan.co/api-reference/account/list-addresses /api-reference/openapi.json get /account/addresses Retrieve all saved delivery addresses belonging to the authenticated customer, ordered by creation date. # List countries Source: https://docs.marzipan.co/api-reference/account/list-countries /api-reference/openapi.json get /account/countries Retrieve the list of countries as a map of ISO country code to country name. Optional query flags return grouped or full-detail variants. # List payment methods Source: https://docs.marzipan.co/api-reference/account/list-payment-methods /api-reference/openapi.json get /account/payments/methods Retrieve the saved (non-wallet) payment methods for the authenticated customer. # List pickup locations Source: https://docs.marzipan.co/api-reference/account/list-pickup-locations /api-reference/openapi.json get /account/pickup-locations Retrieve the active pickup shipping methods (collection points) available to the authenticated customer. # Login Source: https://docs.marzipan.co/api-reference/account/login /api-reference/openapi.json post /account/login Authenticate a user with their email address and receive an authentication token for API access. # Logout Source: https://docs.marzipan.co/api-reference/account/logout /api-reference/openapi.json post /account/logout Invalidate the current authentication token and log out the user from their session. # Orders Source: https://docs.marzipan.co/api-reference/account/orders /api-reference/openapi.json get /account/orders Retrieve a list of all orders associated with the authenticated user's account, including order status and payment information. # Password Reset Source: https://docs.marzipan.co/api-reference/account/password-reset /api-reference/openapi.json post /account/password Request a password reset link to be sent to the user's email address. The user can use the link to set a new password. # Register Source: https://docs.marzipan.co/api-reference/account/register /api-reference/openapi.json post /account/register Register a new user account with an email address. A verification email will be sent to complete the registration process. # Set new password from reset token Source: https://docs.marzipan.co/api-reference/account/set-new-password-from-reset-token /api-reference/openapi.json post /account/password/reset Set a new password using the token from a password reset email. This is a public endpoint used before the customer is logged in. # Subscriptions Source: https://docs.marzipan.co/api-reference/account/subscriptions /api-reference/openapi.json get /account/subscriptions Get all active and inactive subscriptions for the authenticated user, including subscription details and renewal dates. # Update address Source: https://docs.marzipan.co/api-reference/account/update-address /api-reference/openapi.json put /account/addresses/{address} Update an existing address belonging to the authenticated customer. Returns the full updated list of addresses. # Update details Source: https://docs.marzipan.co/api-reference/account/update-details /api-reference/openapi.json post /account/details Update the authenticated user's account information such as name and email address. # Verify email Source: https://docs.marzipan.co/api-reference/account/verify-email /api-reference/openapi.json post /account/verify-email Verify the authenticated customer's email address using the verification code sent to their inbox. # Record a visit Source: https://docs.marzipan.co/api-reference/analytics/record-a-visit /api-reference/openapi.json post /visits Record a storefront visit for attribution and analytics. At least one UTM parameter is required, and the endpoint is throttled. Returns the stored visit id and the session id used for touchpoint tracking. # Check PayFast Payment Status Source: https://docs.marzipan.co/api-reference/carts/check-payfast-payment-status /api-reference/openapi.json get /carts/{cartId}/payfast/status Poll the payment status for a cart after the PayFast modal closes. Returns `pending` while awaiting confirmation, `complete` once payment has succeeded (in which case the cart has been converted to an order), or `failed` with a message if the payment did not go through. # Create Express Checkout Intent Source: https://docs.marzipan.co/api-reference/carts/create-express-checkout-intent /api-reference/openapi.json post /carts/{cartId}/express-checkout-intent Create a Stripe payment intent for express checkout flows such as Apple Pay and Google Pay. Returns the client secret used to confirm the payment on the client. # Generate PayFast Checkout Identifier Source: https://docs.marzipan.co/api-reference/carts/generate-payfast-checkout-identifier /api-reference/openapi.json post /carts/{cartId}/payfast/identifier Generate a PayFast checkout for the cart. An onsite payment identifier (for the PayFast modal) is attempted first; if that is unavailable the response falls back to a redirect URL. The cart must have billing information (name and email) before calling this. # Get Free Shipping Upsell Source: https://docs.marzipan.co/api-reference/carts/get-free-shipping-upsell /api-reference/openapi.json get /carts/{cartId}/freeShippingUpsell Determine whether the cart is eligible for a free shipping upsell prompt and, if so, how much more the customer needs to spend (value-based) or how many more items are needed (volume-based) to qualify. When no upsell applies, or the amount needed exceeds the store's display threshold, `show` is `false`. # Get Related Products Source: https://docs.marzipan.co/api-reference/carts/get-related-products /api-reference/openapi.json get /carts/{cartId}/relatedProducts Retrieve active related products for the items currently in the cart. Products already in the cart are excluded and results are de-duplicated. The number returned defaults to the store's configured related-products count and can be overridden with the `limit` query parameter. # Redeem Reward Points Source: https://docs.marzipan.co/api-reference/carts/redeem-reward-points /api-reference/openapi.json post /carts/{cartId}/points Redeem a customer's reward points against the cart, applying a points-based discount. The cart must have a customer associated with it (via login or email). The number of points is validated against the customer's available balance and the store's reward tier rules. # Remove Reward Points Source: https://docs.marzipan.co/api-reference/carts/remove-reward-points /api-reference/openapi.json delete /carts/{cartId}/points Remove any redeemed reward points from the cart and recalculate its totals. # Switch Cart Market Source: https://docs.marzipan.co/api-reference/carts/switch-cart-market /api-reference/openapi.json post /carts/{cartId}/market Change the cart's market, updating its currency and exchange rate. Shipping is cleared and every line item is repriced in the new market's currency. Returns the recalculated cart. # Update Payment Intent Amount Source: https://docs.marzipan.co/api-reference/carts/update-payment-intent-amount /api-reference/openapi.json post /carts/{cartId}/updatePaymentIntent Synchronise an existing Stripe payment intent's amount with the cart's current grand total. Call this after the cart changes (items, shipping, discounts) so the payment intent reflects the latest amount due. # Collection Source: https://docs.marzipan.co/api-reference/cms/collection /api-reference/openapi.json get /cms/collections/{collectionName} Retrieve all items from a specific CMS collection by its name. # Get a blog post Source: https://docs.marzipan.co/api-reference/cms/get-a-blog-post /api-reference/openapi.json get /cms/posts/{slug} Returns the full detail of a single published blog post by its slug, including the rendered content body, SEO metadata and any collections the post belongs to. Responses are cached (fresh for 10 minutes, served stale for up to 1 hour). # List blog posts Source: https://docs.marzipan.co/api-reference/cms/list-blog-posts /api-reference/openapi.json get /cms/posts Returns all published blog posts, ordered by creation date (newest first), each with its author and featured image. This endpoint is not paginated and accepts no query parameters; the full published set is returned in a single `data` array. Responses are cached (fresh for 10 minutes, served stale for up to 1 hour). # Page Source: https://docs.marzipan.co/api-reference/cms/page /api-reference/openapi.json get /cms/pages/{pageSlug} Get the full content and details of a specific CMS page by its slug identifier. # Pages Source: https://docs.marzipan.co/api-reference/cms/pages /api-reference/openapi.json get /cms/pages Retrieve a list of all CMS pages including their metadata, status, and publication dates. # Purge a page's cache Source: https://docs.marzipan.co/api-reference/cms/purge-a-pages-cache /api-reference/openapi.json post /cms/pages/{page}/purge-cache Triggers a cache purge for the CMS page identified by `page` (its id). If a `url` is supplied in the body it is purged directly; otherwise the page's primary domain is used to derive the URL. The caller must have access to the page's tenant. # Check Event Availability Source: https://docs.marzipan.co/api-reference/events/check-event-availability /api-reference/openapi.json get /events/{event}/availability Check ticket availability for an event, optionally for a specific date. For recurring events, an invalid date returns `available: false` with a message. Includes waitlist status and count. # Check Event Dates Source: https://docs.marzipan.co/api-reference/events/check-event-dates /api-reference/openapi.json get /events/{event}/check-dates Check whether an event is available on a specific search date. For non-recurring events the search date is matched against the event's start date; for recurring events it is validated against the recurrence pattern. Returns the availability details along with the requested and scheduled dates. # Check Occurrence Availability Source: https://docs.marzipan.co/api-reference/events/check-occurrence-availability /api-reference/openapi.json get /events/occurrences/{occurrence}/availability Check ticket availability for a specific occurrence of a recurring event, including tickets sold and remaining, capacity, waitlist status, and the occurrence date. # Claim Promoted Waitlist Spot Source: https://docs.marzipan.co/api-reference/events/claim-promoted-waitlist-spot /api-reference/openapi.json post /events/{product}/waitlist/{entry}/claim Claim a promoted waitlist spot, reserving the tickets for checkout. The entry must be in a claimable (promoted, unexpired) state. If an email is supplied it must match the entry's email. Returns checkout data with a short reservation window. # Claim Waitlist Spot via Signed Link Source: https://docs.marzipan.co/api-reference/events/claim-waitlist-spot-via-signed-link /api-reference/openapi.json post /events/waitlist/claim Claim a promoted waitlist spot using a signed link, automatically adding the event to a cart. If no cart is supplied, a new cart is created. If the event has a deposit enabled, the deposit amount is used as the line price. Returns the resulting cart. # Get Event Statistics Source: https://docs.marzipan.co/api-reference/events/get-event-statistics /api-reference/openapi.json get /events/{event}/stats Retrieve aggregate statistics for an event, including tickets sold and available, revenue totals, check-in and attendance counts, waitlist size, and cancellations. Revenue values are returned in the store's major currency unit. # Get Recurring Event Dates Source: https://docs.marzipan.co/api-reference/events/get-recurring-event-dates /api-reference/openapi.json get /events/recurring/{product}/dates List the upcoming active occurrences for a recurring event product within an optional date range. If the product is not a recurring event, an empty list is returned with an explanatory message. # Get Ticket QR Code Source: https://docs.marzipan.co/api-reference/events/get-ticket-qr-code /api-reference/openapi.json get /events/tickets/{ticket}/qr-code Generate (if necessary) and return a scannable QR code for an event ticket. The QR code is returned as a base64-encoded SVG data URI suitable for direct display. # Get Waitlist Status Source: https://docs.marzipan.co/api-reference/events/get-waitlist-status /api-reference/openapi.json get /events/{product}/waitlist/status Look up a customer's waitlist status for an event by email. For pending entries, the response includes the position and the number of people ahead; for promoted entries, it includes the expiry time and whether the spot can be claimed. # Join Event Waitlist Source: https://docs.marzipan.co/api-reference/events/join-event-waitlist /api-reference/openapi.json post /events/{product}/waitlist Join the waitlist for a sold-out event. Requires the event to have its waitlist enabled and to be sold out, and the customer must not already be on the waitlist. Returns the assigned waitlist position. # Leave Event Waitlist Source: https://docs.marzipan.co/api-reference/events/leave-event-waitlist /api-reference/openapi.json delete /events/{product}/waitlist/{entry} Remove a waitlist entry, leaving the event's waitlist. Only pending or promoted entries can be removed. If an email is supplied it must match the entry's email. # List Event Occurrences Source: https://docs.marzipan.co/api-reference/events/list-event-occurrences /api-reference/openapi.json get /events/{event}/occurrences List the occurrences of a recurring event, optionally filtered by date range and status. When no start date or status filter is supplied, only upcoming occurrences are returned. If the event is not recurring, an empty list is returned with an explanatory message. # Update Event Occurrence Source: https://docs.marzipan.co/api-reference/events/update-event-occurrence /api-reference/openapi.json put /events/occurrences/{occurrence} Update a single occurrence of a recurring event. Capacity cannot be reduced below the number of tickets already sold. All fields are optional and only supplied fields are updated. # Validate Waitlist Claim Link Source: https://docs.marzipan.co/api-reference/events/validate-waitlist-claim-link /api-reference/openapi.json post /events/waitlist/validate Validate a signed waitlist claim link and return the entry details needed to complete a claim. The link is verified against its signature and expiry, and the entry must be in a claimable (promoted) state. # Get a form definition Source: https://docs.marzipan.co/api-reference/forms/get-a-form-definition /api-reference/openapi.json get /forms/{slug} Returns the definition of an active form by slug so a storefront can render it: the field list (with names, labels, types, options and whether each is required) plus display settings such as the success message. # Submit a form Source: https://docs.marzipan.co/api-reference/forms/submit-a-form /api-reference/openapi.json post /forms/{slug}/submit Submits an active form. The request body is a free-form object keyed by the form's field `name`s (as returned by `GET /forms/{slug}`); values are validated dynamically against each field's definition (required/nullable, email format, `in:` for select/radio, array for checkbox, date for date fields). Include the honeypot field `_hp_name` as an empty string — if it is filled the submission is rejected as spam. Depending on the form type the submission may also create a contact message, subscribe the customer to a marketing list, and trigger notifications. # Introduction Source: https://docs.marzipan.co/api-reference/introduction Welcome to the Marzipan API documentation. The Marzipan REST API enables you to interact with the Marzipan platform, retrieve data, and allow customers to manage their and accounts. You may wan to use our [web components](/web-components/introduction) instead of the API. The API is currently in beta and subject to change. ## Two APIs Marzipan has two separate APIs: * **Storefront API** (`/v1/…`) — the API this reference and the scopes below cover. It powers our [web components](/web-components/introduction) and headless storefronts. Requests authenticate with a tenant API token, plus a customer bearer token for actions taken on behalf of a logged-in account. * **Admin / mobile app API** (`/admin/v1/…`) — powers the Marzipan mobile companion app, covering orders, POS, customers, subscriptions, tasks, device push notifications, and Stripe Terminal / Tap to Pay. It uses a two-factor authentication login flow. The Admin / mobile app API is in **beta** and is used by the official Marzipan mobile app. ## Getting Started To get started with the Marzipan API, you will need to create an API key with the right permissions in your Marzipan [account settings](https://app.marzipan.co/settings/api). You will be able to choose the permissions you need for your API key. The current available permissions are: * `read` - read access to products, collections, events, subscriptions and CMS * `create` - create access to products, collections, events, subscriptions and CMS * `update` - update access to products, collections, events, subscriptions and CMS * `delete` - delete access to products, collections, events, subscriptions and CMS * `cart:create` - create access to carts * `cart:update` - update access to carts * `cart:read` - read access to carts * `cart:delete` - delete access to carts ## Authentication The Marizpan API uses Bearer authentication. Include your generated api key in the `Authorization` header of your HTTP requests. ```http theme={null} Authorization: Bearer YOUR_API_KEY ``` Keep your API key secure and never expose it in a public repository or share it with untrusted parties. If you believe your API key has been compromised, you can revoke it and generate a new one in your [account settings](https://app.marzipan.co/settings/api). # Send a message Source: https://docs.marzipan.co/api-reference/messaging/send-a-message /api-reference/openapi.json post /messages Submits a message to the store (for example from a contact form). A customer record is found or created from the email address, the message is logged, and admin users who opt in are notified. # Product Source: https://docs.marzipan.co/api-reference/products/product /api-reference/openapi.json get /products/{productId} Retrieve detailed information about a specific product by its unique identifier. # Products Source: https://docs.marzipan.co/api-reference/products/products /api-reference/openapi.json get /products Get a paginated list of all products with filtering and sorting options. Returns product details including pricing and availability. # Register for a back-in-stock notification Source: https://docs.marzipan.co/api-reference/products/register-for-a-back-in-stock-notification /api-reference/openapi.json post /products/{product}/back-in-stock Registers an email address to be notified when the given product is back in stock. Subscriptions are only accepted for products that are out of stock (unless the product allows overselling); requesting one for an in-stock product returns a 422. If a customer is authenticated the subscription is linked to their account. # Exclusive products Source: https://docs.marzipan.co/api-reference/rewards/exclusive-products /api-reference/openapi.json get /account/rewards/exclusive-products Get the products available exclusively to the authenticated customer based on their rewards tier. When the rewards programme is disabled for the tenant, only `enabled: false` is returned. # List tiers Source: https://docs.marzipan.co/api-reference/rewards/list-tiers /api-reference/openapi.json get /account/rewards/tiers Get all active rewards tiers and their thresholds, flagging which tier the authenticated customer is currently on and which they have achieved. When the rewards programme is disabled for the tenant, only `enabled: false` is returned. # Points history Source: https://docs.marzipan.co/api-reference/rewards/points-history /api-reference/openapi.json get /account/rewards/points-history Get the authenticated customer's paginated points transaction history, most recent first. When the rewards programme is disabled for the tenant, only `enabled: false` is returned. # Rewards status Source: https://docs.marzipan.co/api-reference/rewards/rewards-status /api-reference/openapi.json get /account/rewards/status Get the authenticated customer's current rewards status, including points balance, current and next tier, progress and redemption information. When the rewards programme is disabled for the tenant, only `enabled: false` is returned. Note: `/account/membership/*` is a deprecated alias of `/account/rewards/*` and maps to the same endpoints; use `/account/rewards/*` for new integrations. # Tier perks Source: https://docs.marzipan.co/api-reference/rewards/tier-perks /api-reference/openapi.json get /account/rewards/perks Get the perks available to the authenticated customer at their current tier. When the rewards programme is disabled for the tenant, only `enabled: false` is returned. # Search Source: https://docs.marzipan.co/api-reference/search/search /api-reference/openapi.json get /search Search across products, pages, and other content using a query string. Returns relevant results based on the search term. # Detect market Source: https://docs.marzipan.co/api-reference/settings/detect-market /api-reference/openapi.json get /market Detect the visitor's market and currency/region from their geolocation. Returns a null market and the detected country code when no market could be resolved. # Storefront settings Source: https://docs.marzipan.co/api-reference/settings/storefront-settings /api-reference/openapi.json get /settings Retrieve the storefront settings payload used to configure the web components and checkout, including the store name, logo, available markets and the market resolved for the current request. # Web component settings Source: https://docs.marzipan.co/api-reference/settings/web-component-settings /api-reference/openapi.json get /settings/components Retrieve the web-components display settings for the storefront, grouped into layout, labels, collection, product, checkout, cart, product display, account and tracking option groups. # Calculate a configured subscription price Source: https://docs.marzipan.co/api-reference/subscriptions/calculate-a-configured-subscription-price /api-reference/openapi.json post /subscription-packages/calculate-price Prices a configured pick & mix subscription for a given billing frequency and set of selected items. Item prices use the effective price (sale, subscriber or list price) and are converted to the active market's currency. Returns the raw and formatted subtotal plus currency information. # Cancel subscription Source: https://docs.marzipan.co/api-reference/subscriptions/cancel-subscription /api-reference/openapi.json post /account/subscriptions/{subscriptionId}/cancel Cancel the subscription at the customer's request. Sets the status to cancelled, clears the next billing date and records the cancellation. # Get a subscription Source: https://docs.marzipan.co/api-reference/subscriptions/get-a-subscription /api-reference/openapi.json get /account/subscriptions/{subscriptionId} Retrieve full detail for one of the authenticated customer's subscriptions, including pick & mix items, upcoming shipments, additional items, billing period, preferred shipping options, payment method and any failed-renewal information. # Get subscription configuration options Source: https://docs.marzipan.co/api-reference/subscriptions/get-subscription-configuration-options /api-reference/openapi.json get /subscription-packages/{productId}/configuration Returns the options for configuring a subscription package: its subscription and pricing types, billing frequencies, and — for pick & mix subscriptions — the list of available items with their quantity constraints and pricing. Responses are cached (fresh for 5 minutes, served stale for up to 30 minutes). # Get subscription upsell Source: https://docs.marzipan.co/api-reference/subscriptions/get-subscription-upsell /api-reference/openapi.json get /account/subscriptions/upsell Return the configured subscription upsell content shown to customers who have no subscriptions. Includes the promotional heading and message and the slug of the collection of products to promote, if enabled. # List billing frequencies Source: https://docs.marzipan.co/api-reference/subscriptions/list-billing-frequencies /api-reference/openapi.json get /account/subscriptions/frequencies Return the billing frequencies available for subscriptions, keyed by the number of months in the interval with a human-friendly label. # Package Source: https://docs.marzipan.co/api-reference/subscriptions/package /api-reference/openapi.json get /subscription-packages/{packageId} Get detailed information about a specific subscription package by its unique identifier (UUID) or slug. # Packages Source: https://docs.marzipan.co/api-reference/subscriptions/packages /api-reference/openapi.json get /subscription-packages List all available subscription packages including pricing and subscription type information. Supports filtering and sorting similar to products endpoint. # Set additional items Source: https://docs.marzipan.co/api-reference/subscriptions/set-additional-items /api-reference/openapi.json post /account/subscriptions/{subscriptionId}/additional-items Add or replace additional one-off items on the subscription's next shipment. Sending an empty items array removes the additional items (for the given shipment if a shipment_id is supplied). Additional items cannot be changed while the next shipment is being processed. # Set pick & mix items Source: https://docs.marzipan.co/api-reference/subscriptions/set-pick-&-mix-items /api-reference/openapi.json post /account/subscriptions/{subscriptionId}/pick-mix-items Replace the pick & mix items on a subscription. Enforces each item's minimum and maximum quantity and the package's minimum item count. Optionally updates the billing frequency at the same time. # Skip next shipment Source: https://docs.marzipan.co/api-reference/subscriptions/skip-next-shipment /api-reference/openapi.json post /account/subscriptions/{subscriptionId}/skip Skip the next shipment or renewal for the subscription. Advances the next billing date by one cycle and clears any additional items on the skipped shipment. An optional comment can be recorded. # Update billing frequency Source: https://docs.marzipan.co/api-reference/subscriptions/update-billing-frequency /api-reference/openapi.json patch /account/subscriptions/{subscriptionId}/frequency Update the billing frequency of a subscription. The frequency must be one of the supported intervals (1, 3, 6 or 12 months). # Update payment method Source: https://docs.marzipan.co/api-reference/subscriptions/update-payment-method /api-reference/openapi.json post /account/subscriptions/{subscriptionId}/updatePaymentMethod Set the default payment method for the subscription. The payment method is looked up from Stripe using the supplied payment method ID and stored against the customer. # Update shipping options Source: https://docs.marzipan.co/api-reference/subscriptions/update-shipping-options /api-reference/openapi.json post /account/subscriptions/{subscriptionId}/shipping Update the preferred shipping option for the subscription. Choose delivery (with a saved customer address) or pickup (with a shipping method / pickup location). # Overview Source: https://docs.marzipan.co/attributes/overview Create reusable properties to describe your products and collections Attributes are reusable properties you attach to products and collections, for example Region, Grape Variety, Vintage, or Tasting Notes. Define an attribute once and reuse it across your catalogue. To view your attributes: 1. Log in to your Marzipan account 2. Click on **Attributes** in the main navigation menu ## Attributes list Attributes list The list shows each attribute's **name**, **slug**, **type**, and when it was **last updated**. Click **Add attribute** to create a new one. ## Creating an attribute * **Name** — the attribute name, which auto-generates the slug * **API slug** — the identifier used in the API, editable * **Type** — how values are entered: * **Text** — a single line of text * **Textarea** — a longer block of text * **Select/Dropdown** — a choice from a fixed list of options * **Number** — a numeric value * **Required** — when on, the attribute must be given a value wherever it's used * **Private** — when on, the attribute is hidden from the storefront and the API * **Options** — for a Select attribute, the list of choices, each with a **name** and a **value** ## Deleting an attribute If an attribute is in use, deleting it warns you how many products use it and removes it from those products. ## Assigning values You add attribute values inline on a product or collection, sometimes called **quick attributes**. Add an attribute and set its value there and then — the input matches the attribute's type: a text box, a number field, a dropdown, or a textarea with an optional rich-text toggle. Private attributes still show to you here so you can set their values, but they never appear on the storefront or in the API. # Changelog Source: https://docs.marzipan.co/changelog/2025 Updates and improvements to Marzipan ## Tasks Introduced a task management system for tracking work across customers, orders, and subscriptions. Tasks can be created directly from customer, order, and subscription pages, automatically linking them to the relevant entity for full context. Features priority levels (low, medium, high, urgent) with visual indicators, configurable due dates with friendly date displays (Today, Tomorrow, specific dates), and user assignment capabilities. The dedicated tasks page includes filtering by status (complete/incomplete), priority levels, and due date ranges (today, tomorrow, next 7 days, no date), flexible sorting options (due date, priority, creation date), and pagination for large task lists. Tasks integrate seamlessly with the activity log system, recording creation, updates, and completions with full audit trails including old/new value tracking for changes. Dashboard integration displays today's incomplete tasks with overdue items prioritised, sorted by priority and due date for quick access to urgent work. The system includes comprehensive authorisation policies ensuring users can only manage their assigned tasks, automated activity logging when tasks are updated or completed. Task creation is available throughout the application via notes/activity interfaces on customer, order, and subscription detail pages, with an enhanced activity component supporting both traditional notes and task creation from a single interface. ## Insights Added a comprehensive insights and analytics section providing visibility into winery performance. The new Insights dashboard includes real-time metrics for revenue, orders, active subscriptions, and customer acquisition with sparkline visualizations. Features dedicated reporting pages for sales (revenue & geographic analysis), customer analytics with retention metrics and churn tracking, product performance tracking, event analytics, subscription metrics, and channel performance. Includes flexible date range comparison tools with multiple comparison periods (previous period, previous year, etc.). Dashboard reporting has been updated to show today's headline metrics with a trailing seven day overview. ## Mailchimp Integration Completely rebuilt the Mailchimp integration with OAuth 2.0 authentication support, eliminating the need for manual API key management (now depreceated). Added comprehensive webhook support for real-time bi-directional sync, including subscription status changes, email updates, profile changes, and email deliverability status. Implemented intelligent batch syncing with rate limit handling for efficient bulk customer synchronization. Added detailed sync logging and status tracking with comprehensive error reporting. Features automatic customer profile updates from Mailchimp changes, prevention of sync loops, and smart handling of compliance states. Supports separate audience management for default customers and active subscribers with configurable merge field mapping. ## Events #### Waitlist System Implemented a waitlist management system for sold-out events. Customers can join waitlists with their desired quantity through a new dedicated waitlist dialog component. Features automatic promotion notifications when tickets become available via email with secure time-limited claim links. Includes position tracking showing customers their place in line, configurable expiration handling for unclaimed promotions, and seamless integration with the deposit payment system. Automatic inventory release and re-promotion of next customers when spots expire. #### Deposit & Balance Payments Added split payment support, allowing customers to secure tickets with a deposit and pay the balance later. Features configurable deposit amounts per event, customizable balance due dates, automatic payment request notifications at configured intervals, comprehensive ticket status tracking throughout the payment lifecycle (deposit paid, balance pending, balance paid), and clear messaging in checkout showing deposit vs. full payment amounts. Integrated throughout the web components with clear UI indicators for deposit requirements. #### Recurring Occurrences Introduced support for recurring events with multiple occurrences, perfect for ongoing workshops, tastings, and regular events. Supports daily, weekly, and monthly recurrence patterns with configurable end dates. Each occurrence maintains its own ticket inventory, attendee management, and waitlist. Customers can select their preferred date from a dropdown of available occurrences. Individual occurrence tracking for capacity, tickets sold, and revenue. #### Management Enhanced event capabilities with a comprehensive suite of management tools. Features include a full attendee management interface with detailed attendee lists and tracking, ticket cancellation workflow with automated partial or full refunds, event categorization and types (wine tasting, workshop, dinner, tour), check-in functionality for day-of event management, configurable ticket limits per order, location coordinates for mapping integration, and rich email notifications throughout the event lifecycle (ticket confirmation, cancellation, balance payments, reminders). ## CMS Visual Editor & Preview System `BETA` Developed a visual page editor for the CMS system with real-time preview functionality. Added a complete preview environment (1,104 lines) supporting live rendering of CMS pages with functional web components and instant visual feedback. Enables content creators to see exactly how pages will appear before publishing, reducing errors and improving content quality. ## Customer Account Overview Redesigned the customer account interface with improved layout and better metric visualization. Added customer lifetime value tracking, order history with sparklines for trend visualization, subscription status overview, payment method management, and enhanced navigation between account sections. Implemented customer archiving functionality for better account lifecycle management, allowing soft deletion while preserving historical data. ## Improvements * `App` Redesigned dashboard with new stats boxes using sparklines * `App` Updated filter bar with improved layout and usability * `App` Enhanced admin notifications with user-level notification settings * `App` Added order refund ability * `App` Added comprehensive activity logging across all major entities with improved old/new value display in activity feeds * `App` Improved search functionality across all admin pages with better indexing and faster results * `App` Performance optimisations with strategic database indexes specifically for insights queries * `App` Improved menu navigation with better focus management and keyboard accessibility * `App` Enhanced London City Bond integration with better error handling and carrier selection * `App` Better handling of inventory holds with improved low stock calculations and hold expiration * `App` Enhanced event attendee sorting and filtering capabilities * `App` Added more automated tests for critical systems including events, subscriptions, and payments * `Web Components` Added comprehensive event deposit support throughout cart and checkout flows with clear messaging * `Web Components` Integrated event waitlist UI with new WaitlistDialog component for sold-out events * `Web Components` Enhanced Product component with support for recurring event occurrences, deposit displays, and waitlist triggers * `Web Components` Improved Cart component with better event item display including deposit information * `Web Components` Enhanced Checkout component with deposit payment handling and balance due tracking * `Web Components` Added Collection component improvements for better product grid layouts ## Bug Fixes * `App` Fixed handling of non-card payment methods (bank accounts, Klarna, etc.) when attaching to customer accounts in Stripe webhooks * `App` Fixed event deposit amount calculation when adding events to cart, ensuring correct pricing * `App` Fixed CMS editor preview rendering issues with nested components * `App` Fixed order status not updating to "completed" for event-only orders after ticket issuance * `App` Fixed event ticket cancellation notification delivery and timing * `App` Fixed activity log resource warning messages in newer Laravel versions * `App` Fixed attendee list sorting by various fields (name, date, status) * `App` Fixed menu focus states and overflow display issues on smaller screens * `App` Fixed customer tab navigation and display inconsistencies * `App` Fixed address update validation, geocoding triggers, and coordinate storage * `App` Fixed multiple frontend build compilation errors and TypeScript issues * `App` Fixed nullable refund amount fields in payments\_refunds table to support partial refunds * `App` Fixed sidebar menu focus state management for better keyboard navigation * `Web Components` Fixed PayPal integration issues in checkout flow * `Web Components` Fixed country name display in checkout address fields ## Low Stock Badges Added low stock badges to provide clear inventory visibility and encourage purchases. Badges can be configured globally across all products or customised on a per-product basis. Web components will honour the low stock settings and display a badge if the stock level is below the threshold and can be styled to match your brand. Stock level settings are also available through the API to support custom implementations. ## Media Management Added a new media management section where you can view all media uploaded to your account. We've added support for alt tags, made it easy to copy links to media. We've improved the media functionality in the editor to make it easier to add existing and new media to your content and to resize it. We've also laid the groundwork for future media management features including video support and image editing. ## Improvements * `App` Added support to discounts for excluding sale and subscriber pricing and to apply discounts to customers with specific tags to allow for more targeted promotions * `App` Enhanced inventory holds integration with better low stock system calculations * `App` Shipping rate calculations for London City Bond integration * `App` Enhanced media deletion confirmation and sorting functionality * `Web Components` Improved sale and subscription badge text display * `Web Components` Enhanced subscriber pricing visibility in account subscription details ## Bug Fixes * `App` Fixed inventory holds not updating correctly on quantity changes * `App` Resolved subscriber pricing issue during manual order creation * `App` Out of stock notices now take precedence over members-only notices * `Web Components` Corrected inventory holds calculations preventing cart overselling * `Web Components` Product image display in command palette search ## Pick & Mix Subscriptions Introduced flexible pick-and-mix subscriptions with dynamic pricing, allowing customers to create custom subscription boxes. ## Product Enhancements Added support for open graph images and bottle labels (front and back) on products for better social sharing and branding. ## Full Product Component Added comprehensive single product support to web components with full-page display options. ## Improvements * `App` Enhanced empty state buttons with better visual feedback * `App` Improved test and demo data generation for better development experience * `Web Components` Updated product component styling with better image dimensions and positioning * `App` Added EORI and AWRS number support for compliance requirements * `Web Components` Enhanced subscriber badge display and member pricing visibility * `Web Components` Subscription and sale pricing display improvements * `Web Components` Improved sale/subscription badge text display ## Bug Fixes * `App` Fixed notifications reshowing issue when polling for updates * `Web Components` Resolved product image sizing and positioning issues * `Web Components` Corrected product description HTML rendering * `Web Components` Fixed subscriber only notice taking precedence over out of stock notice * `Web Components` Fixed product image dimensions ## Cache Clearing for CMS Added flow for cache clearing operations in CMS for more responsive content management. ## Product Tag Autocomplete Implemented autocomplete functionality for product tags, streamlining the tagging process. ## Enhanced Customer Filtering Improved customer and subscription filters with multiple selection options for better data management. ## Member Pricing Display Added member pricing display improvements to web components for better pricing visibility. ## Bug Fixes * `App` Fixed dependency conflicts and trailing whitespace issues in API controllers * `App` Fixed effective pricing calculations in DiscountManager for subscriber customers * `Web Components` Fixed product title positioning issues ## Add to Cart Component Introduced a new reusable add-to-cart button component with redirect functionality, making it easier to integrate shopping features across different parts of your application. ## Improvements * `Web Components` Added subscription pricing frequency display options to web components. ## Bug Fixes * `App` Fixed product component to properly handle required product IDs * `App` Resolved missing fields in product editing component * `App` Fixed customer payment method update errors * `App` Corrected tags autocomplete styling issues * `Web Components` Fixed product loading div sizing and image display issues ## Bug Fixes * `App` Capitalise billing and shipping names when creating a new order * `App` Fixed UK postcode validation * `App` Fixed spacing bug on the notification page * `App` London City Bond Integration: Fixed LCB delivery update not updating order status # Changelog Source: https://docs.marzipan.co/changelog/2026 Updates and improvements to Marzipan ## Going Live Clears Test Data Turning off [test mode](/settings/test-mode) to go live now clears test-mode customers and their test artifacts, so you start selling with a clean slate. Going live is a one-way switch. ## All-Day Event Improvements All-day events now carry their all-day setting and recurrence days through to the storefront and API, so listings display correctly. ## All-Day & Multi-Day Events Events can now be marked as **all-day**, and weekly recurring events can span **multiple days**. Editing a recurring event propagates your changes across occurrences while **preserving any occurrence times you've customised**. See the [Events guide](/events/overview). ## Product Barcodes (GTIN) Physical and bundle products now have a **barcode / GTIN** field, accepting EAN-13, UPC-A, EAN-8 and ITF-14 with live format validation. See [Products](/products/overview). ## Web Component Labels Tab Storefront text labels are now consolidated into a single **Labels** tab in Settings > Web Components, including new **Sales Closed** and **Back in Stock** button labels. You can also choose how subscription frequencies read — worded ("quarterly") or interval ("every 3 months"). See the [Customisation guide](/web-components/customisation). ## Customisable Button Text Colour Set the text colour for primary buttons, including a separate hover colour, from the Web Components styling settings. ## Product Image Options New product-image settings let you position thumbnails to the side or bottom and enable a zoom overlay, with a separate corner radius for product images. ## Order Improvements * The order page now updates its **activity feed live**, so entries written by background jobs appear automatically. * Editing an order now shows **bundle constituent items** when you add a bundle. ## Markets Carts now follow the resolved [market](/settings/markets) precedence (customer choice, then saved market, then location) instead of forcing a single assigned market. ## Forms Form **auto-reply** emails are now sent from a customisable notification template, so you can tailor the subject and message per form. See [Forms](/forms/overview). ## Point of Sale — Walk-In Customers & Receipts [Point of Sale](/orders/pos) sales can now be taken for a shared **walk-in customer** and turned into a named customer later. Email a **POS receipt** after a sale — sending it links the walk-in order to that customer — or assign a walk-in order to a customer from the order's Actions menu. Tap to Pay payments now capture and display the card brand and last four digits. ## Event Attendees Export The event **Attendees** tab now has a **CSV export**, a price column, and clickable links back to each attendee's order. See [Events](/events/overview). ## Subscriptions — Cancelled/Expired Filter Filter the [subscriptions](/subscriptions/overview) list by when subscriptions were **cancelled or expired** using a date range. ## Order Shipping Dates The order shipping-date picker now blocks past dates, and changing the date on an order held for London City Bond dispatch reschedules and logs that hold. ## Customers Set a customer's **default payment method**, and archived customers are now hidden from the main list by default. ## Marzipan Mobile App (Beta) Introduced the Marzipan **mobile companion app** for managing your store on the go, backed by a new admin API. It covers orders, customers, subscriptions, tasks, and dashboard metrics, with a secure sign-in flow and **push notifications** to your device. See the [API introduction](/api-reference/introduction). ## Point of Sale & Tap to Pay (Beta) Added **in-person selling** through the mobile app: build a sale with **Quick Pay** and take card payments with **Tap to Pay on iPhone** via Stripe Terminal. In-person sales appear in the web app under the **POS** channel. See [Point of Sale](/orders/pos). ## Subscription Payment Safeguards Marzipan now detects blocked Stripe payments and halts renewal retries, with team notifications for blocked payments and renewal errors that members can opt into. ## Order Improvements * Added a **Free** payment-status filter and excluded free orders from the pending total. * Bulk shipment CSV import can now capture a comments column. ## Platform Upgraded the underlying platform to Laravel 12. ## Rewards & Loyalty Programme Introduced a complete loyalty programme with tiered rewards, point earning, and checkout redemption. Customers earn points on every order based on configurable earning rates. Points accumulate towards reward tiers — each tier can offer perks like percentage discounts, free shipping, early access to products, and event invitations. Customers can see their current tier, points balance, and progress to the next tier from their account page. Points can be redeemed at checkout for a discount, with configurable redemption rates and maximum discount caps per currency. Tier membership is managed automatically based on lifetime spending, with optional notifications for tier upgrades and downgrades. Added a dedicated rewards insights dashboard showing tier distribution, revenue breakdown by tier, and programme performance trends. Rewards data (tier name, points balance) syncs to Mailchimp as merge fields for targeted email campaigns. ## Multi-Currency & Markets Added support for selling in multiple currencies from a single store. Markets define regional pricing, currency, exchange rates, and payment provider availability. Products and subscription packages can have per-market pricing set manually, or prices can convert automatically using exchange rates. Shipping methods support per-market rates. Reports and insights can be filtered by market. The web components automatically display prices in the customer's local currency. ## Inventory Locations Expanded stock management to support multiple inventory locations with a complete audit trail. Each location tracks stock independently, and every movement is recorded with a reason (order, received, write-off, stock take, transfer, return) and optional notes. Added bulk stock adjustment for updating many products at once, low stock alert emails with configurable thresholds, and inventory rules that determine which location fulfils orders based on conditions like shipping country. London City Bond stock levels now sync automatically to a dedicated inventory location. ## Shipping Zones Shipping methods now support zone-based pricing for more accurate delivery charges. Built-in zones are available for the UK (Mainland, Highlands & Islands, Northern Ireland, Isle of Man, Channel Islands) and South Africa (Major Cities, Remote Areas). Rates are automatically determined based on the customer's postcode, with support for weight-based pricing bands. ## PayFast Payment Gateway Added PayFast as a payment gateway option, supporting credit cards, instant EFT, and local South African payment methods. Includes sandbox mode for testing, webhook-based payment confirmations, and integration with the global test mode system. ## ScrubBill Fulfilment Integration Added ScrubBill as a fulfilment provider for third-party logistics. Orders can be forwarded to ScrubBill automatically or manually from the order detail page. Webhook notifications automatically update order status when ScrubBill confirms dispatch. ## Order Attribution & UTM Tracking Track where your orders come from with automatic UTM parameter capture (source, medium, campaign, content, term) and configurable referral source questions at checkout. A new Attribution insights page shows orders and revenue by traffic source, campaign, referral channel, and landing page with period comparison. ## Website Analytics For Marzipan-hosted sites, web traffic stats are now available directly in the insights section. See pageviews, unique visitors, and traffic breakdowns by page, referrer, country, browser, device, and UTM parameters. ## Global Test Mode Added a global test mode toggle under a new Developer Settings page. When enabled, all payment gateways automatically use their test/sandbox credentials. Store both live and test API keys for each gateway and switch between them with a single toggle. Turning off test mode automatically restores all live credentials. ## Email Domain Management Added a new email settings section for registering and verifying custom sending domains. View required DNS records (MX, SPF, DKIM) and their verification status. Email delivery now uses dual providers for improved reliability, with automatic email suppression for bounces and complaints. ## Web Component Customisation Significantly expanded the Settings > Web Components page with new options for customising your storefront without code: * **25+ colour settings** covering buttons, text, backgrounds, borders, badges, status messages, and account accents * **Product display** options including quick attributes on cards, configurable accordion sections on product pages, and related products * **Collection** options for card style (minimal, bordered, elevated, filled), text alignment, and image corners * **Cart** options for background/border styling, free shipping notifications, and related product recommendations * **Checkout** options for split-panel background colours, logo positioning and size, phone requirement, and referral source questions * **Account** options for subscription upsell sections See the [Web Components Customisation guide](/web-components/customisation) for full details. ## Forms Create custom forms directly in the dashboard with configurable field types including text, email, phone, textarea, select, checkbox, radio, date, and hidden fields. Form submissions trigger notifications and auto-reply emails. A new `` web component renders forms dynamically by slug, replacing the old hardcoded `` component. Fields, validation, and layout are all driven by the API — no code changes needed when forms are updated. ## Bidirectional Messaging Two-way email conversations with customers via Lettermint inbound processing. Replies from customers are threaded into per-customer conversation threads in the messages inbox. An inbound email status banner and UX improvements make it easy to manage ongoing conversations. ## Customer Segments Segment customers by conditions such as type, created date, order count, lifetime revenue, subscription status, reward tier, market, and form submissions. Segment membership is evaluated and cached for performance. Segments sync to Mailchimp as tags for targeted campaigns. ## Back-in-Stock Notifications Customers can subscribe to out-of-stock products to receive email alerts when stock is replenished. Back-in-stock settings are configurable per market. ## Free Checkout Carts with a zero total value can now complete checkout without requiring a payment step. ## Roles & Permissions Granular access control for admin users. Assign roles with specific permissions to control who can view and manage different areas of the dashboard. ## Per-Market Product Visibility Control which products are visible in each market, allowing you to tailor your catalogue by region. ## LCB Blocked Items Added support for blocked items in the London City Bond integration, preventing specific products from being sent to LCB for fulfilment. ## Improvements * `App` Subscription packages now have per-market pricing tabs for setting prices in different currencies * `App` Admins can now edit the scheduled renewal date for a subscription * `App` Tasks now support @mentions linking to customers, orders, subscriptions, and events * `App` Tasks can be filtered by multiple assignees * `App` Task mentions appear as activity on linked records * `App` Pinned notes feature for important task notes * `App` Phone numbers are now automatically formatted to international E.164 standard * `App` Phone number can be required at checkout (configurable) * `App` Mailchimp integration now syncs customer address fields and reward data as merge fields * `App` Customer profiles in Mailchimp update automatically when addresses change in Marzipan * `App` New subscription orders within the LCB fulfilment cutoff window are no longer sent immediately * `App` LCB stock levels sync automatically to inventory locations * `App` Product attributes can now be marked as private (hidden from customers) * `App` Fulfilment actions are now restricted to the relevant shipping countries * `App` Free shipping display threshold is now applied server-side for accuracy * `App` Added tenant management to the admin panel * `Web Components` Cart displays free shipping progress notifications * `Web Components` Cart supports related product recommendations * `Web Components` Cart supports background colour and border customisation * `Web Components` Collection pages support background colour * `Web Components` Checkout supports split-panel background colours * `Web Components` Product cards show quick attributes * `Web Components` Product pages have configurable accordion sections * `Web Components` Referral source question available at checkout * `Web Components` what3words field support for events * `App` Emails tab on customer detail page * `App` RGBA/hex-alpha color support and button border styling options * `App` Per-market free shipping messages * `App` Email log timelines show queued\_at timestamps * `App` Domain change handling for store email with unverified domain warnings * `App` Cancellation email control * `App` Form submissions consolidated view * `Web Components` Dynamic form component with API-driven field rendering * `Web Components` Back-in-stock notification form on out-of-stock products * `Web Components` Themed button border CSS variables * `Web Components` Free checkout support * `Web Components` Bundle optimization with lazy loading and DOM-conditional loading * `Web Components` Market switcher (renamed from currency switcher) ## Bug Fixes * `App` Fixed customer archive referencing non-existent subscribed column * `App` Fixed duplicate route names breaking route caching * `App` Fixed market pricing on event deposits * `App` Fixed subscription auto-renewal when no linked plan * `App` Fixed discount errors on checkout * `App` Fixed Apple Pay pickup order issues * `App` Fixed handling of duplicate order constraint on payment retry * `App` Fixed pick & mix renewal pricing calculations for per-item subscriptions * `App` Fixed subscription renewal items in cart price recalculation * `App` Fixed cart currency for shipping method price formatting * `App` Fixed Mailchimp webhook field mapping for subscription and address data * `Web Components` Fixed cart display threshold currency inputs * `Web Components` Fixed checkout customer mismatch when switching accounts * `Web Components` Fixed shipping method validation for flat rate methods * `App` Fixed case-insensitive email uniqueness enforcement * `App` Fixed invalid UUID route parameters returning 500 instead of 404 * `App` Fixed Stripe charge using incorrect stripe\_id field * `App` Fixed message compose state, unassigned filter, and select all toggle * `App` Fixed loading button size shift during loading state * `App` Fixed Fathom API rate limiting * `App` Fixed tenant context in queued jobs * `Web Components` Fixed account modals overflowing viewport on smaller screens * `Web Components` Fixed billing details showing "same as shipping" for event-only carts * `Web Components` Fixed white background on AddToCart component * `Web Components` Fixed Rewards tab showing when rewards aren't enabled * `Web Components` Fixed back-in-stock form layout below out-of-stock button * `Web Components` Fixed cart member pricing, buy again button, and subscription date modals * `Web Components` Fixed MarketSwitcher dropdown showing empty # Collections Source: https://docs.marzipan.co/cms/collections Group pages and posts into ordered collections for navigation menus and listings. Collections are ordered groupings of [pages](/cms/pages) and [posts](/cms/posts). They're the way you build navigation menus and listings for your site, without hard-coding those links into a template. To find your collections, click on **CMS** in the main navigation menu, then open **Collections**. These are **CMS collections**, which group content. They are not the same as [product collections](/collections/overview), which group products in your catalogue. ## What a collection holds A collection is an ordered list of items. Each item in a collection can have its own: * **Title** * **Link** * **Description** Because the list is ordered, the sequence you set in the dashboard is the sequence your visitors see — so a collection works equally well as a navigation menu or as a curated listing. ## Using collections Collections are useful for: * **Navigation menus** — a header or footer menu, with each item pointing at a page * **Listings** — a blog index, a set of guides, or any other grouping of content you want to surface together Collections are also available over the headless CMS API at `/v1/cms/collections`, so a front end hosted elsewhere can pull the same navigation and listings. See the [API reference](/api-reference/introduction). # Overview Source: https://docs.marzipan.co/cms/overview Marzipan includes a lightweight CMS for building and managing content on Marzipan-hosted sites. Marzipan includes a lightweight CMS for managing the content on Marzipan-hosted sites. You can build pages, publish posts, group content into collections, and manage the templates and files that power your site, all from your dashboard. To open the CMS: 1. Log in to your Marzipan account 2. Find the **Content** section in the main navigation menu 3. Click **Pages**, **Posts**, **Collections** or **Media** to work on that part of your site ## How content is structured The CMS is built from four pieces that work together. | Area | What it holds | | ----------------------------------- | --------------------------------------------------------------------------- | | [**Pages**](/cms/pages) | Content pages built from templates, edited through sections and fields | | [**Posts**](/cms/posts) | Blog-style articles with an excerpt, content, author and images | | [**Collections**](/cms/collections) | Ordered groupings of pages and posts, used to build navigation and listings | | [**Website**](/cms/website) | The templates and shared files that your pages are built from | Pages and posts hold the content. Collections organise that content into menus and listings. The Website area holds the building blocks — the templates a page is built from, and the files shared across your site. ## Headless CMS API All of your content is also available over the **headless CMS API**, so you can pull pages, posts and collections into other front ends: * `/v1/cms/pages` * `/v1/cms/posts` * `/v1/cms/collections` See the [API reference](/api-reference/introduction) to get started. ## In this section Build and publish content pages Write blog-style articles Group content for navigation and listings Manage templates and shared files # Pages Source: https://docs.marzipan.co/cms/pages Build, edit and publish the content pages of your Marzipan-hosted site. Pages are the content pages of your site. Each page is built from a **template**, and you edit its content through **sections** and **fields**, so you're never editing raw code. To find your pages, click on **CMS** in the main navigation menu. The Pages list is the first thing you see. The CMS Pages list in the Marzipan dashboard ## Sections and fields A page's template defines the **sections** it contains, and each section contains **fields** that you fill in. Field types include: * **Simple text** * **Rich text** (WYSIWYG) * **HTML** * **Image** Because the layout comes from the template, editing a page is a matter of filling in its fields. To change the layout itself, edit the template in the [Website](/cms/website) area. ## Page settings Each page also has: * A **slug** for its URL * **SEO** meta title and description, plus a share image * A **publish status**, with the option to **schedule** publishing for a future date ## Duplicating a page You can **duplicate** a page to reuse its layout. The duplicate arrives with the same sections and fields already in place, ready for you to edit and give a new slug. Duplicating is the quickest way to build a set of pages that share a layout — landing pages, for example — without rebuilding each one from its template. ## Previewing a page Generate a **preview link** to review a page before it goes live. This lets you check your changes, and share them with the rest of your team, while the page is still unpublished or scheduled. # Posts Source: https://docs.marzipan.co/cms/posts Write and publish blog-style articles for your Marzipan-hosted site. Posts are blog-style articles. Where a [page](/cms/pages) is built from a template and assembled from sections, a post is a single piece of writing with a fixed set of fields. To find your posts, click on **CMS** in the main navigation menu, then open **Posts**. ## Post content Each post has: * A **title** and **slug** * An **excerpt** and **content** * An **author** * **Featured** and **social** images * **Meta** title and description * A **draft** or **published** status The **excerpt** is the short summary used in listings, while the **content** is the body of the article itself. ## Images A post carries two images: * The **featured** image, used on the post and in listings * The **social** image, used when the post is shared ## Publishing A post is either a **draft** or **published**. Drafts stay off your site until you're ready, so you can write in the dashboard and publish when the piece is finished. Group your posts into a [collection](/cms/collections) to build a blog index or a curated reading list. # Website Source: https://docs.marzipan.co/cms/website Manage the templates and shared files that your Marzipan-hosted site is built from. The **Website** area is where you manage the building blocks of your site. Where [pages](/cms/pages) and [posts](/cms/posts) hold your content, the Website area holds the templates that content is poured into, and the files shared across it. To open it, click on **CMS** in the main navigation menu, then open **Website**. ## Templates Templates define the layout a page is built from — the sections a page has, and therefore the fields you fill in when you edit it. Each template has its own **CSS** and **JS**, so a template carries the styling and behaviour it needs. You can **preview** and **validate** a template before using it, so you can check it renders as expected and catch problems before any page depends on it. Changing a template changes every page built from it. Preview and validate first, then check a page that uses the template. ## Files Files are the shared assets used across your site — the things more than one template or page needs to reference. Manage them here rather than uploading a copy for each page that uses them. # Overview Source: https://docs.marzipan.co/collections/overview Group products into collections to organise your catalogue Collections are manual groupings of products. Use them to organise your catalogue and to power the product listings on your storefront. Collections are always manual — you choose exactly which products they contain. There are no automatic or rule-based collections. To view your collections: 1. Log in to your Marzipan account 2. Click on **Collections** in the main navigation menu ## Collections list Collections list The list shows each collection's **name**, **slug**, **status**, **number of products**, and when it was **last updated**. Click **Add collection** to create a new one. ## Creating and editing a collection * **Name** — the collection name * **Description** — a description of the collection * **Published** — when on, the collection is live on your storefront * **Products** — add the products in the collection, and **drag to reorder** them. The order controls how products display on your storefront. You can also add subscription packages and events. * **Attributes** — set collection-level [attribute](/attributes/overview) values # Adding a Customer Source: https://docs.marzipan.co/customers/create Create a customer record manually in Marzipan Most customers create their own account when they order through your website. You can also add a customer record yourself — useful when you are setting up a wholesale account, taking a phone order, or bringing existing contacts into Marzipan. ## Adding a customer To open the new customer form: 1. Log in to your Marzipan account 2. Navigate to **Customers** in the main menu 3. Click the **Add customer** button in the top-right corner Add their **First name** and **Last name**. If they buy on behalf of a business, add the **Company** as well. Enter the customer's **Email** address and **Phone** number. Select either **Direct** or **Wholesale**. The customer type is set here, when the customer is created. It cannot be changed later from the profile. Enter the customer's default **address**. This is used as their billing and delivery address, and you can add more addresses later from their profile. Review the details and save. You will be taken to the customer's [profile](/customers/details). You can also create a customer without leaving the manual order form — see [Manual Orders](/orders/create). # Details Source: https://docs.marzipan.co/customers/details View and manage an individual customer Opening a customer from the [customers list](/customers/overview) takes you to their profile. This is the full picture of one customer: who they are, what they have bought, what you have sent them, and where they stand in your loyalty programme. Customer profile The profile is organised into tabs. ### Overview The Overview tab gives you an at-a-glance picture of the customer: * **Highlight cards** - total and average spend, how long they have been a customer for, and their number of orders, subscriptions and events * **Activity feed** - a running history of the customer, including any notes you add. It updates automatically * **Latest orders and subscriptions** - their most recent records ### Activity The full activity timeline for the customer, with the option to add a note. ### Orders, Subscriptions and Events Each of these tabs lists the customer's records of that type, so you can see everything they have ordered, subscribed to or attended. ### Emails A record of every email sent to the customer, each with a delivery status: * `Queued` * `Sent` * `Delivered` * `Bounced` * `Spam` * `Failed` Open any email to see its detail view. ### Rewards When rewards are enabled, this tab shows the customer's points and tier history. You can **Adjust** their points balance or set their tier directly from here. See [Rewards](/rewards/overview). ## Panels Alongside the tabs, the profile shows a set of panels you can manage. ### Details Name, email (with a verified/email-status indicator), phone, company, date of birth, registered date, market, source and tags. ### Addresses The customer's saved addresses, along with any delivery instructions. You can add, edit and remove addresses, and set which one is the default. ### Payment methods The customer's saved cards, including which is the default. You can manage these from here. ### Mailing-list consent Toggles for the customer's marketing consent, so you can keep their preferences up to date. ### Rewards When rewards are enabled, a block showing the customer's tier, points and progress towards the next tier. See [Rewards](/rewards/overview). ### Tags Tags are free-form labels you can add to a customer to help you group and filter them. When rewards are enabled, the customer's reward tier also appears as a tag. ## Actions From a customer's profile you can: * **Edit details** - update their name, contact details and other information * **Archive / Unarchive** - archive a customer you no longer deal with, or restore them. Archiving can also unsubscribe them from all mailing lists * **Verify email** - manually mark the customer's email address as verified * **Manage addresses and payment methods** * **Manage marketing consent** * **Manage tags** * **Adjust points or set tier** - when rewards are enabled, from the **Rewards** tab The customer's **type** (`Direct` or `Wholesale`) is set when the customer is [created](/customers/create) and cannot be changed from the profile. # Overview Source: https://docs.marzipan.co/customers/overview View, organise and manage the people who buy from you The Customers section is where you manage everyone who buys from you. From here you can browse your customer list, dig into an individual customer's history, and keep their details, addresses and marketing preferences up to date. To view your customers: 1. Log in to your Marzipan account 2. Click on **Customers** in the main navigation menu 3. By default the list displays all your customers, most recently registered first ### Customers list The main list shows key information for each customer. Customers list * **Name** - the customer's name * **Email** - their email address * **Orders** - how many orders they have placed * **Last order** - when they last ordered * **Registered** - when they created their account Click any customer to open their [profile](/customers/details). You can sort the list by **Registered**, **Last order**, **Name**, **Email** or **Orders**. ### Header actions The top-right corner of the list has a few actions: * **Customer Insights** - opens the customers report so you can review your customer base (see [Insights](/insights/overview)) * **Segments** - view and manage your customer [segments](/customers/segments) * **Export** - download the customers in the list as a CSV file * **Add customer** - open the [new customer form](/customers/create) ### Filtering You can narrow the list using the following filters: * **Customer type** - `Direct` or `Wholesale` * **Has subscription** - customers with an active subscription * **Mailing list** - customers subscribed to a given list * **Segment** - customers in a chosen segment * **Number of orders** * **RFM segment** - an automatic loyalty segment based on how recently, how often and how much a customer buys: `Champions`, `Loyal Customers`, `Potential Loyalists`, `Promising`, `New Customers`, `Need Attention`, `About to Sleep`, `At Risk`, `Cannot Lose`, `Hibernating` and `Lost` * **Tags** * **Total spent** * **Archived** - include archived customers * **Market** - only shown when your store has more than one market Customer filter options Apply filters *before* clicking the **Export** button to only export the customers you need. ## Next steps Create a customer record manually, including their type and default address. Explore a customer's orders, subscriptions, emails, rewards and activity. Group customers into dynamic segments based on their behaviour and attributes. # Segments Source: https://docs.marzipan.co/customers/segments Group your customers into dynamic segments based on their behaviour and attributes. A segment is a dynamic group of customers built from conditions you choose. Membership updates automatically as customers meet or stop meeting those conditions, so you never have to maintain a list by hand. You manage segments from the **Customers** page — click **Segments** in the top-right. Customer segments list ## Building a segment Each segment has: * **Name** — a label for the segment. * **Sync to Mailchimp** — an optional toggle to keep the segment in step with a Mailchimp tag (see [Mailchimp sync](#mailchimp-sync) below). * **Condition builder** — the rules that decide who belongs to the segment. The condition builder uses rows of **\[condition] \[modifier] \[value]**. Within a group, choose **Match all** to require every row (AND) or **Match any** to require just one (OR). If you add multiple groups, the groups always combine with AND. Segment condition builder ### Available conditions | Condition | Modifiers | | :-------------------------- | :------------------------------------ | | **Tag** | has / does not have | | **Customer type** | is / is not | | **Email status** | subscribed / unsubscribed / bounced | | **Archived status** | — | | **Market** | — | | **Created date** | before / after / on | | **Lifetime revenue** | greater than / less than | | **Order count** | greater than / less than / equal to | | **Subscription status** | active / expired / paused / cancelled | | **Has active subscription** | — | | **Submitted form** | has / has not submitted a given form | | **Reward tier** | is / is not | | **Reward points** | greater than / less than / equal to | ## Managing a segment Membership is evaluated and cached, so a segment's customers are ready to view at any time. From a segment you can: * **View its customers** — see everyone who currently matches. * **Sync now** — re-evaluate membership straight away. * **Export** — download the members as a CSV file. * Delete the segment. ## Mailchimp sync Connect Mailchimp under **Settings > Integrations**. When you turn on **Sync to Mailchimp** for a segment, Marzipan creates a tag named `Segment: {name}` on your default audience and syncs only the subscribed members, pushing their tag and membership. Customers who aren't subscribed are left out. Reward and address data reach Mailchimp as **merge fields** through the separate per-customer sync, not through segment syncing. # Overview Source: https://docs.marzipan.co/dashboard The dashboard is your landing page in Marzipan, with an at-a-glance view of how your store is performing. The dashboard is the first thing you see when you log in. It gives you a personalised summary of how your store is performing, highlights anything that needs your attention, and links straight through to the orders, subscriptions and tasks behind the numbers. Screenshot of the Marzipan dashboard Test-mode data is excluded from all dashboard stats, so the figures you see reflect real trading only. See [Test mode](/settings/test-mode) for more. ## Welcome header A personalised welcome header greets you at the top of the page, so you always know whose store you're looking at. ## Setup checklist New stores see a **Setup checklist** that walks owners and admins through the key steps to get up and running, such as disabling test mode and going live. Work through the steps at your own pace, then dismiss the checklist once you're done. It won't come back once dismissed. ## Performance stats and chart The performance section shows your headline numbers, **revenue**, **orders** and **subscriptions**, alongside a chart of the same figures over time. * Choose a **date range** to control the period the stats and chart cover. * If you sell across more than one market, use the **market selector** to focus on a single market or view them all together. Your choice is remembered for next time. ## Revenue protection Two tiles surface money that's at risk so you can act on it quickly: * **Failed payments** — jumps straight to the affected orders so you can chase or retry payment. * **Pending cancellations** — shows subscriptions that are due to cancel, so you can reach out before they lapse. ## Today's tasks The **Today's tasks** section lists tasks that are due or overdue, so nothing slips through the cracks. See [Tasks](/tasks/overview) for more on creating and managing them. ## Latest orders and subscriptions Two tables round out the dashboard: * **Latest orders** — your most recent orders, with a link through to the full [order details](/orders/details). * **Latest subscriptions** — your most recently created subscriptions. # Create a discount Source: https://docs.marzipan.co/discounts/create Set up a discount, with its type, validity, limits and conditions To create a discount: 1. Log in to your Marzipan account 2. Navigate to **Discounts** in the main menu 3. Click the **Add discount** button in the top-right corner Create discount form ## The basics * **Discount code** - the code customers enter at checkout. Use **Generate code** to create one automatically. * **Description** - a short description shown to the customer at checkout. * **Automatically apply** - when enabled, the discount applies on its own without the customer needing to enter a code. ### Type Choose how the discount reduces the price: * **Fixed amount** - takes a set amount off the order. * **Percentage** - takes a percentage off the order. * **Free shipping** - removes shipping costs. * **Free item** - adds a product to the order for free. Choose the product to add and set a label prefix (such as `FREE`). ### Market For multi-market stores, choose the market the discount applies to. A market is **required for fixed-amount** discounts; for all other types it's optional and the discount applies to all markets when left unset. A fixed amount is a sum of money, so it needs a market to tell it which currency to use. Percentage and free-shipping discounts work in any currency, so they don't. ### Validity Set **valid-from** and **valid-until** dates to control when the discount is active. Leave a date blank for no start limit or no expiry. ### Minimum spend Set a minimum spend the cart must reach for the discount to apply. This is measured **before discounts and shipping**. ### Limits * A **total usage limit** caps how many times the discount can be used across all customers. * A **one-use-per-customer** option limits each customer to a single use. ### Conditions Restrict when a discount applies: * The cart must contain a given item type (for example, a **Subscription**). * The customer must have an active subscription, or one of certain **tags**. * The discount applies only to specific products or product types (**Physical**, **Bundle**, **Subscription**, or **Event**). * The discount applies only to certain shipping methods. ### Pricing exclusions Optionally stop a discount from stacking on already-reduced prices: * Don't apply to sale pricing. * Don't apply to subscriber pricing. Use pricing exclusions when you run a broad promotion but don't want it compounding on items that are already discounted. # Overview Source: https://docs.marzipan.co/discounts/overview Create discount codes and automatic discounts to reduce order prices. Discounts reduce an order's price, either automatically or when a customer enters a code at checkout. Use them to run promotions, reward loyal customers, or offer free shipping and free items. To view your discounts: 1. Log in to your Marzipan account 2. Click on **Discounts** in the main navigation menu 3. The overview page will display all of your discounts ### Discounts Each discount in the list shows: * **Code** - the code customers enter at checkout, with its description underneath * **Status** - whether the discount is currently active, plus an `auto applied` badge when it applies without a code * **Usage** - how many times the discount has been used, against its usage limit where one is set * **Valid from** and **Valid until** - the dates the discount is active between Click on any discount to view and edit it. Use the **Add discount** button in the top-right corner to create a new one. ### Types Every discount has a **type**, which determines how it reduces the price: | Type | What it does | | ----------------- | ------------------------------------ | | **Fixed amount** | Takes a set amount off the order | | **Percentage** | Takes a percentage off the order | | **Free shipping** | Removes shipping costs | | **Free item** | Adds a product to the order for free | ### Codes and automatic discounts A discount reaches the customer in one of two ways: * **By code** - the customer enters the discount code at checkout * **Automatically** - with **Automatically apply** enabled, the discount applies on its own as soon as the cart meets its conditions, with no code needed Automatic discounts are ideal for site-wide promotions and subscriber perks. Codes are better when you want to control who can use the offer. ## In this section Set up a discount, with its type, validity, limits and conditions # Creating an event Source: https://docs.marzipan.co/events/create Create an event and set its tickets, capacity and deposits Create an event to sell tickets to a tasting, tour, workshop, class or course. An event can be a one-off or recurring. To create an event: 1. Log in to your Marzipan account 2. Navigate to **Events** in the main menu 3. Click the **+ Create event** button in the top-right corner Create event form ## Creating an event Enter the **Name** and **description** for the event. These are shown to customers. Select the **Event type** — Tasting, Tour, Workshop, Class, Course or Other. Set the **Recurrence** — None, Daily, Weekly or Monthly. Weekly lets you pick the weekdays to repeat on, and you can set a **recurrence end date**. Recurring events create **occurrences** — individual dated instances that customers book onto. See [Recurring events](/events/recurring). Use the **All-day** toggle, or set a start and end date and time. Multi-day events are supported. Enter the **Location** as a text address, plus an optional **what3words** address. **Email instructions** are included in the ticket emails sent to attendees. * **Max tickets per order** — the most tickets one customer can buy in a single order * **Price** — the ticket price, with optional sale, subscriber and wholesale prices * **Capacity** — the quantity of tickets available Optionally set up **Deposits**, **Check-in** and a **Waitlist**. See below. ## Deposits You can optionally take a **deposit** rather than the full price upfront: * **Deposit amount** — the amount taken upfront * **Balance due days** — the number of days after which the balance falls due * **Auto-charge** — charge the balance automatically when it falls due You can also set a **sales cut-off** to close ticket sales a set number of days before the event. Outstanding balances can be requested or processed from the event detail screen. See [Details](/events/details#deposits-and-balances). ## Check-in and waitlist * **Check-in** — enable QR check-in so attendees can be checked in at the door * **Waitlist** — enable a waitlist to capture demand once tickets sell out A waitlist requires a capacity. # Details Source: https://docs.marzipan.co/events/details Manage attendees, check-in, the waitlist and balances The event detail screen is where you manage an event once it is live — its attendees, check-in, waitlist and any outstanding balances. To open an event: 1. Log in to your Marzipan account 2. Click on **Events** in the main navigation menu 3. Click on any event in the list Event detail screen with tabs ## Tabs The event detail screen is organised into tabs: * **Overview** — tickets sold, revenue and waitlist figures * **Attendees** — a table of everyone booked on * **Activity** — the history of actions on the event * **Waitlist** — position, name, tickets and status ## Attendees The **Attendees** tab shows a table of everyone booked on to the event. Columns include: * **Customer** * **Tickets** * **Price** * **Deposit/balance** * **Order** * **Checked-in** * **Status** You can filter the table by **status**. ### Exporting attendees Click **CSV export** to download the attendees table as a CSV file. ### Bulk check-in Select attendees in the table to **bulk check-in** everyone at once. ### Attendee actions From an attendee's panel you can: * **Check in** the attendee * **Resend the ticket email** * **Request balance payment** — for deposit bookings with an outstanding balance * **Cancel or refund** the booking The ticket links back to its originating order. ## Tickets and QR check-in Ticket emails include a **QR code**. At the door, open the QR scanner in the Marzipan app and scan each attendee's code to check them in. You can also check attendees in from the attendees table, either individually or with **bulk check-in**. ## Deposits and balances For bookings taken on a deposit, you can request or process the outstanding **balance payment** directly from the event, using **Request balance payment** on the attendee's panel. Deposits are configured when you create the event. See [Create](/events/create#deposits). ## Waitlist The **Waitlist** tab shows everyone waiting for a ticket: * **Position** * **Name** * **Tickets** * **Status** You can **add** and **remove** entries. ## Event Insights For reporting on attendance, revenue and demand, use **Event Insights**. See [Insights](/insights/overview) for more. # Overview Source: https://docs.marzipan.co/events/overview Create and sell tickets for tastings, tours and events Events let you sell tickets to tastings, tours, workshops, classes and courses. An event can be a **one-off** or **recurring**. Recurring events create **occurrences** — individual dated instances that customers book onto. ### At a glance * **Tickets** — customers buy tickets to an event, and receive a ticket email * **Capacity** — the quantity of tickets available for an event * **Deposits** — take a deposit rather than the full price upfront, with the balance falling due later * **Waitlist** — capture demand once tickets sell out * **Check-in** — check attendees in at the door by scanning the QR code on their ticket ## Events To view your events: 1. Log in to your Marzipan account 2. Click on **Events** in the main navigation menu 3. The list displays your events, with one row per occurrence for recurring events Events list Each row shows: * A **recurring badge** for recurring events * The **next date** * **Tickets sold** out of the total * **Sold-out** or **waitlist** indicators Click on any event in the list to view its [event details](/events/details). ### Filtering and sorting You can filter and sort the list: * Filter by **Status** — Upcoming, Past or Cancelled * Filter by **Event type** * Filter by **Recurrence** * Filter by **Availability** * Sort by **date** or **tickets sold** ### Event Insights For reporting on attendance, revenue and demand, use **Event Insights**. See [Insights](/insights/overview) for more. ## Next steps Create an event and set its tickets, capacity and deposits Manage attendees, check-in, the waitlist and balances Manage occurrences of a recurring event Report on attendance, revenue and demand # Recurring events Source: https://docs.marzipan.co/events/recurring Manage the occurrences of a recurring event A recurring event creates **occurrences** — individual dated instances that customers book onto. Recurrence is set when you create the event, and can be Daily, Weekly or Monthly. See [Create](/events/create). Recurring events give you fine control over each occurrence. ## Editing one occurrence **Edit one occurrence** to change a single date without affecting the others. You can change its: * **Date** * **Time** * **Location override** * **Max tickets** Customised occurrence times are preserved. Editing one occurrence does not affect the rest of the series. ## Editing all occurrences **Edit all occurrences** to apply changes across the whole series. Occurrences you have already customised keep their times, so a series-wide edit will not overwrite the individual changes you have made. ## Generating more occurrences **Generate more occurrences** to extend the series with additional dates. ## Cancelling a single occurrence **Cancel a single occurrence** to call off one date while leaving the rest of the series in place. # Overview Source: https://docs.marzipan.co/flows/overview Flows let you automate work in your store, triggering actions when something happens. Flows is in **beta** and is enabled per store. Contact Marzipan to switch it on for your account. Flows let you automate work in your store. Each flow is built as a **graph**: a **trigger** starts the flow, **conditions** decide whether it continues, and **actions** do the work. ## Triggers A trigger is the event that starts a flow. There are currently two: * `order.paid` — an order is marked paid * `cms.page_updated` — a CMS page is updated ## Actions Actions are the steps a flow runs. You can: * Send a webhook * Send an email * Update an order's status Integrations can add their own actions too, for example **London City Bond** and **ScrubBill**. ## Conditions Conditions let a flow decide whether to continue. For example, you can check: * Order total * Order type * Order market * Order shipping country * Number of items * Case-only * Contains a product type * Customer type ## Versions and executions Every edit you make to a flow is **versioned**, so you always have a history of how it has changed. You can also view the **execution history** for a flow, including each run's status, result and timing. If an execution didn't complete as expected, you can **retry** it. # Create a form Source: https://docs.marzipan.co/forms/create Build a form, add the fields you want to collect, and embed it on your site Forms are built in your dashboard and embedded on your website, so you can change the fields without touching your site's code. To create a form: 1. Log in to your Marzipan account 2. Navigate to **Forms** in the main menu 3. Click the **Create form** button in the top-right corner ## Building a form Give the form a **Name** so you can find it in the forms list. The **Slug** identifies the form and is used in the embed code and the API URL. Keep it short and stable - changing it later means updating anywhere you have embedded the form. The **Type** determines the form's built-in behaviour: * **Contact** - notifies your staff and creates a thread in [Messages](/messages/overview) * **Newsletter** - subscribes the person to a marketing list * **Custom** - no built-in behaviour Add the fields you want to collect. Each field has: * **Label** - what the customer sees * **Name** - the field's identifier * **Type** - `text`, `email`, `phone`, `textarea`, `select`, `checkbox`, `radio`, `date` or `hidden` * **Placeholder** - example text shown in the field * **Required** - whether the field must be filled in * **Options** - the choices offered, for `select`, `radio` and `checkbox` fields Drag fields to reorder them. The **Success message** is shown to the person after they submit the form. Set the **Status** to active when you are ready for the form to accept submissions, then save. Decide who gets notified when someone submits the form, and whether to send a confirmation, on the [Notifications](/forms/notifications) page. ## Embedding a form Forms render on your site through the `` web component, using the form's slug: ```html theme={null} ``` See [Contact form](/web-components/contact-form) for the full embed options. # Notifications Source: https://docs.marzipan.co/forms/notifications Choose who is notified when a form is submitted, and send an auto-reply Each form controls what happens when someone submits it - who on your team hears about it, and whether the person who submitted gets a confirmation. You'll find these options on the form itself, under **Notifications**. ### Submission notification Choose who is told about a new submission: * **Specific team members** - pick the people who should be notified * **All opted-in admins** - notify every admin who has opted in to receive notifications ### External notification email Optionally add one extra email address to notify. This is useful when a submission needs to reach an address that isn't a Marzipan user - a shared inbox, or a colleague outside the team. ### Auto-reply Send an optional confirmation to the person who submitted the form. You customise both: * **Subject** - the subject line of the confirmation * **Body** - the message they receive The auto-reply is sent using an editable notification template, so it matches the styling of your other emails. An auto-reply reassures the customer that their message landed. Pair it with the **Success message** shown on the page after they submit - see [Create](/forms/create). For `Contact` forms, the submission also creates a thread in [Messages](/messages/overview), so you can reply properly once you've read it. # Overview Source: https://docs.marzipan.co/forms/overview Build custom forms and embed them on your site Forms let you build custom forms - contact forms, newsletter sign-ups and more - in your dashboard and embed them on your website. Submissions are collected in Marzipan, and depending on the form type they can notify your team, start a conversation in your inbox, or add someone to a marketing list. To view your forms: 1. Log in to your Marzipan account 2. Click on **Forms** in the main navigation menu 3. The overview page will display all of your forms ### Forms The list shows each form and how it is performing. Forms list * **Name** - the form's name, with its slug * **Status** - whether the form is active * **Submissions** - how many submissions the form has received * **Type** - `Contact`, `Newsletter` or `Custom` * **Created** - when the form was created Click on any form in the list to edit it, or to view the [submissions](/forms/submissions) it has received. ### Header actions The top-right corner of the forms list has two actions: * **Create form** - build a new form (see [Create](/forms/create)) * **All submissions** - view every submission across all of your forms ### Form types Every form has a **type**, which determines what happens after someone submits it: | Type | Built-in behaviour | | -------------- | -------------------------------------------------------------------------- | | **Contact** | Notifies your staff and creates a thread in [Messages](/messages/overview) | | **Newsletter** | Subscribes the person to a marketing list | | **Custom** | No built-in behaviour - the submission is simply recorded | Whatever the type, you can still notify your team and send an auto-reply. See [Notifications](/forms/notifications). ## In this section Build a form, add fields, and embed it on your site Choose who is notified and set up an auto-reply View and filter the submissions your forms receive Embed a form with the web component # Submissions Source: https://docs.marzipan.co/forms/submissions View and filter the submissions your forms receive Every submission is collected in Marzipan. You can view the submissions for a single form, or see them all together by clicking **All submissions** in the header of the forms list. ### Submissions Form submissions The list shows: * **Name** - the name of the person who submitted the form * **Email** - their email address * **Form** - which form was submitted * **Source** - where the submission came from * **Submitted** - when it was submitted You can filter the list by form to narrow it down to a single form's submissions. ### Submission details Click on any submission to open it. The detail view shows every field value that was submitted, along with the linked customer where one was matched. ### Contact forms and Messages Contact-form submissions create a thread in [Messages](/messages/overview), so you can reply and keep the whole conversation in one place. The submitted field values are shown inline in the conversation, so you have the full context before you reply. # Introduction Source: https://docs.marzipan.co/index Discover how to use Marzipan to power your DtC and wine club/subscriptions. Marzipan is a comprehensive commerce and subscription platform designed specifically for wineries. Our platform empowers wine businesses to manage their direct-to-consumer (DtC) sales, wine clubs, and subscription services with ease and efficiency. Our documentation is currently a work in progress. If you have any feedback or need help, please [get in touch](mailto:hello@marzipan.co). ## What Marzipan Offers * **Seamless commerce**: integrate powerful commerce capabilities into your existing website with our easy to use [web components](/web-components/introduction) or API. * **Wine club management**: effortlessly manage memberships, shipments, and billing for your wine club members * **Subscription flexibility**: design custom subscription programs with flexible frequency, product selection, and pricing options * **Inventory control**: track inventory across all sales channels in real-time * **Customer management**: build stronger relationships with your customers through personalised experiences ## Why Choose Marzipan Wineries face unique challenges in the e-commerce and subscription space. Marzipan was built from the ground up to address these specific needs, combining powerful functionality with an intuitive interface that doesn't require technical expertise to use effectively. Whether you're a boutique winery looking to launch your first wine club or an established producer seeking to optimize your direct sales channels, Marzipan provides the tools you need to grow your business and delight your customers. ## Getting Started This documentation will guide you through setting up and making the most of your Marzipan platform. From initial configuration to advanced features, you'll find comprehensive instructions and best practices to ensure your success. # Attribution Source: https://docs.marzipan.co/insights/attribution See where your orders come from, with UTM source, medium and campaign breakdowns. The Attribution report shows where your orders come from. It's fed by the checkout **"how did you hear about us?"** question and by **UTM tracking**, so it covers both what customers tell you and what the link they arrived on tells you. ## Metrics * Tracked visits * Attributed orders and revenue * Attribution rate * **UTM source, medium and campaign** breakdowns The **attribution rate** is the share of orders that carry attribution data. Not every order will — a customer can arrive without a UTM-tagged link and skip the checkout question — so read the attributed figures alongside the rate. ## UTM breakdowns Orders are broken down by **UTM source**, **medium** and **campaign**, which is how you tell one marketing campaign's contribution from another's. UTM tracking is handled by the Marzipan web components. See [Web components customisation](/web-components/customisation) for how it's set up. Attribution data also appears on individual orders, in the attribution panel on the [order details](/orders/details) screen. # Customers and rewards Source: https://docs.marzipan.co/insights/customers Reports covering your customer base, retention, lifetime value and loyalty programme. These two reports look at the people behind the orders — who your customers are, how well you retain them, and how your loyalty programme is performing. ## Customers A view of your customer base and how well you retain it. * Total, active and new customers * Repeat-purchase and retention rates * Average lifetime value It also includes an **RFM analysis** with customer segments, a customer lifetime value trend, and your top customers. ### RFM analysis RFM groups your customers into segments by how recently they bought, how frequently they buy, and how much they spend. The segments give you a way to read the base as groups rather than as one number — so you can tell a growing set of loyal customers from a growing set of lapsing ones. ### Lifetime value Alongside the average lifetime value figure, the report shows a **CLV trend** over the selected period, and lists your **top customers**. ## Rewards Track how your loyalty programme is performing. * Members * Points earned, redeemed and outstanding * Redemption rate * Member vs non-member average order value, and AOV lift * Tier distribution * Tier upgrades and downgrades **AOV lift** compares what members spend per order against non-members, so you can see what membership is worth. **Outstanding** points are those earned but not yet redeemed. # Insights Source: https://docs.marzipan.co/insights/overview Insights is Marzipan's reporting area, with detailed reports covering revenue, customers, subscriptions and more. **Insights** is Marzipan's reporting area. Each report gives you a focused view of a different part of your business, from revenue and customers through to subscriptions, rewards and web traffic. To open Insights, click on **Insights** in the main navigation menu, then choose a report from the report selector. The Insights area showing the report selector and a revenue report with headline metrics ## Shared controls Every report shares the same core controls: * **Date range** — set the period the report covers. * **Compared to** — compare the current period against a previous one to see how things are trending. * **Market filter** — narrow the report to a single market if you sell across more than one. Because the controls are the same everywhere, a date range and comparison you've settled on for one report means the same thing in the next. Test-mode orders are excluded from Insights, so every report reflects real trading only. ## Access Access to each report is controlled by your [Roles](/settings/roles-and-team) permissions, so you can decide which team members see which reports. A team member only sees the reports their role allows. ## The reports Revenue, channels, geographic, orders, products, cart recovery and events Your customer base, retention and rewards programme Recurring revenue, churn, status and billing Where your orders come from Visitor traffic on Marzipan-hosted sites # Sales reports Source: https://docs.marzipan.co/insights/sales Revenue, channels, geographic, orders, products, cart recovery and event reports. The sales reports cover your trading performance — what you sold, where it sold, and how well it converted. Each one shares the same [date range, comparison and market controls](/insights/overview) as every other report in Insights. ## Revenue Your top-line sales performance over the selected period. * Total sales * Average order value * Average daily revenue * Conversion rate You can add extra columns to break the numbers down further, including orders, units sold, new and returning customers, discounts, refunds, shipping, tax, subscriptions, events and products. Use **Compared to** on the Revenue report to see whether a period is up or down on the one before it, rather than reading the totals in isolation. ## Channels See how your sales channels compare. * Revenue, orders and average order value by sales channel * Your top channel ## Geographic * Sales broken down by location ## Orders The order side of the same trading, rather than the money. * Total orders * Orders per day * Average items per order * Fulfilment rate ## Products * Revenue, units sold and average price * Drill down into any individual product ## Cart recovery Understand how well you're recovering abandoned carts. * Conversion rate * Recovered vs lost revenue * Average recovery time * An abandonment funnel * Recovery by source ## Events * Event performance metrics # Subscriptions Source: https://docs.marzipan.co/insights/subscriptions Recurring revenue, churn and retention, plus status, billing and additional items sub-reports. The Subscriptions report covers your recurring revenue — what it's worth, and whether you're holding on to it. ## Headline metrics Key metrics for your recurring revenue. * Monthly recurring revenue (MRR) and annual recurring revenue (ARR) * Churn and retention rates * Average subscription value and duration ## Sub-reports Subscriptions also includes three sub-reports that break the headline numbers down. ### Status The distribution of your subscriptions across their statuses, and the transitions between them — so you can see movement, not just the standing total. ### Billing Billing focuses on **failed payments**, which is where recurring revenue is most often lost before a subscription formally churns. ### Additional items Covers the additional items attached to subscriptions. # Web analytics Source: https://docs.marzipan.co/insights/web-analytics See how visitors are using your Marzipan-hosted website. For Marzipan-hosted sites, **Web analytics** shows how visitors are using your website. Where the [sales reports](/insights/sales) tell you what people bought, this one tells you how they moved around the site. ## Live traffic The report shows live **visitors online now**, so you can see current activity as well as the selected period. ## Top pages and sources * Top pages, with pageviews, uniques and average duration * Top referrers and sources ## Breakdowns Traffic is broken down by: * **Page** * **Referrer** * **Country** * **Device** Until analytics is set up for your site, this report shows a **"not configured"** state. # Overview Source: https://docs.marzipan.co/media/overview Manage the images used across your store from one central library The Media library is your central store of images. Images you add here are reused across products, bottle labels, share images, CMS content, and the rich-text editor. To open your media library: 1. Log in to your Marzipan account 2. Click on **Media** in the main navigation menu ## Library Media library The library shows your images in a grid. Each image displays its **thumbnail**, **filename**, **alt text**, and **date**. You can sort the grid by date. ## Uploading images There are two ways to add images: * Click **Upload** to choose files from your device and add alt text * **Drag and drop** images straight onto the page Images can be PNG, JPG, or GIF, up to 10 MB each. After a drop, a bulk alt-text step lets you caption each image before it's saved. ## Managing images * Click an image to edit its **alt text** * **Delete** an image you no longer need * An image that's in use can be **unlinked** from a record Good alt text describes what's in the image. It improves accessibility for people using screen readers and helps your SEO. # Overview Source: https://docs.marzipan.co/messages/overview A two-way email inbox for your customer conversations. Messages is a two-way email inbox built into Marzipan. When a customer replies to one of your emails, their reply threads into a per-customer conversation, so you can keep every exchange in one place and respond without leaving the app. To open your inbox: 1. Log in to your Marzipan account 2. Click on **Messages** in the main navigation menu 3. Your conversations will be listed, with flagged and unread conversations at the top ### Layout The inbox has two panes. Messages inbox layout * **Conversation list (left)** - conversations grouped by customer, each showing unread and flagged indicators and a short preview. Flagged and unread conversations sort to the top. * **Thread (right)** - the conversation you've selected. ### Reading and replying Open a conversation to read the full thread, with incoming messages from the customer shown separately from your replies. * Reply from the box at the bottom of the thread. Press **Cmd/Ctrl+Enter** to send. * Use **Reply & close** to send your reply and close the conversation in one step. Opening an unread, unassigned conversation automatically assigns it to you and marks it as read. ### Assigning and organising Keep your inbox tidy and share the workload across your team: * **Assign** a conversation to a team member. * **Flag** a conversation to mark it for follow-up. * **Close** a conversation when it's resolved, and reopen it if you need to. ### Filtering and searching You can filter conversations by: * **Status** - `open` or `closed` * **Assignee** - including **Me**, to see just the conversations assigned to you You can also search by customer, or by subject and body. ### Compose To start a fresh conversation with a customer, click **New message**. ### Form submissions Submissions from your contact forms arrive in Messages as conversations, with the submitted field values shown inline so you have the full context before you reply. See [Submissions](/forms/submissions) for more on setting these up. Customer replies only reach your inbox once **inbound email** is set up. A banner appears in Messages until it is - see [Inbound setup](/messages/setup). ## In this section Set up MX records so customer replies arrive in your inbox # Receiving customer replies Source: https://docs.marzipan.co/messages/setup Set up inbound email so customer replies arrive in your inbox. Sending email from Marzipan works as soon as your domain is verified. Receiving replies takes one extra step: **inbound email**, which routes messages sent to your domain back into your [Messages](/messages/overview) inbox. ## Setting up inbound email For customer replies to arrive in Messages, you need to add **MX records** to your sending domain. Navigate to **Settings > Email**, where your sending domains are listed. Marzipan displays the DNS records for your domain, including the MX records that route inbound replies back to Marzipan. Add them with your domain registrar or DNS provider. Return to the email settings page to check the verification status. Each record shows as **Verified** or **Pending**, and the page auto-checks roughly every 60 seconds while records are pending. See [Settings > Email](/settings/email) for the full list of DNS records and how verification works. ## Use a subdomain Putting MX records on your **root domain** (e.g. `yourdomain.com`) captures **all** email for that domain, including mail sent to your normal mailboxes. To avoid this, use a dedicated subdomain such as `mail.yourdomain.com` for sending and inbound replies. ## The inbound email banner Messages shows a banner at the top of the inbox until inbound email is working. There are two versions, depending on where you've got to: | When | What it tells you | | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | Inbound email **isn't configured** | Customer replies will be delivered to your store email address instead of appearing in Messages | | Configured, but **MX records aren't verified** | Messages will still be sent to customers, but their replies won't appear in Messages until the DNS records have been verified | In both cases you can carry on sending messages and replying from Marzipan - it's only the customer's response that doesn't thread back into the inbox. # Navigation Source: https://docs.marzipan.co/navigation The main navigation menu is shown in the sidebar on every page. If you can't see the sdiebar you will need to click the menu button which will show a full screen menu. From here you can access all the important areas you may need on a day to day basis. The **Orders** menu item will show a dynamic count of processing orders. ### Search / Command Palette You can access the search/command palette by clicking on the seach icon at the top right of the sidebar (or top center on mobile). Search icon ### Account Details and settings Access to less frequently used items is available by clicking on you name at the bottom of the sidebar which will open a menu that allows you to access you account details, settings, support to log out. # Manual Orders Source: https://docs.marzipan.co/orders/create Learn how to create and process orders manually in Marzipan Manual orders allow you to create orders directly in the Marzipan without requiring customers to go through the standard checkout process. Manual orders are ideal for: * Taking orders over the phone * Processing in-person sales at events * Creating orders for customers with special requirements * Testing your order processing workflow * Creating orders with custom pricing or discounts ## Creating a manual order To access the manual order form, follow these steps: 1. Log in to your Marzipan account 2. Navigate to **Orders** in the main menu 3. Click the **+ Create order** button in the top-right corner POS (till) orders are created in the Marzipan mobile app, not this form. See [Point of Sale](/orders/pos) for in-person selling. You can either select an existing customer by typing their name or email address in the lookup box, or create a new customer by clicking the **create a customer** button. The create a customer button will open a panel to the right of the screen where you can create a new customer. Select the appropriate channel for the order from the dropdown menu. * **Cellar Door** - The order was placed at your cellar door * **Event** - The order was placed at an event * **Email** - The order was placed via email * **Manual** - The order was created manually by you or a member of your team * **Website** - The order should have been placed through your website * **Phone** - The order was placed over the phone * **Tasting** - The order was placed at a tasting Select the appropriate billing address for the customer from the dropdown menu. For multi-market stores, a **Market** is auto-detected from the billing address country and a note is shown to confirm which market applies. The market determines the pricing currency for the order. Select either **Delivery** or **Collection**. Select the appropriate shipping method for the order from the dropdown menu. If a delivery address has no phone number and the shipping method requires one, you'll see a warning prompting you to add a phone number. If the order is a gift, click the down arrow and complete the relevant fields. Use the product selector to add products to the order. You can enter the product name or SKU. Once you have selected a product, update the quantity. Some products have **options** (for example size) that you can choose per line. Product lines also show sale and subscriber price badges where they apply. Any relevant automatic discounts are applied live as you add items. If you need to add a manual discount to the order you can do this by clicking the add discount button. Review the order details and click the **Save** button at the bottom of the screen to save the order. After creating an order you will be taken to the [order details](/orders/details) page where the order will have a **processing** status and a **pending** payment status. # Details Source: https://docs.marzipan.co/orders/details View and manage order details The order details screen provides a comprehensive view of an order and lets you process it. The left column holds the order items and any logged order activity, while the right column holds the customer, shipping and billing details. Order detail screenshot ### Actions menu The **Actions** menu in the top-right corner gives you quick access to common tasks: * **Resend email confirmation** - send the order confirmation email to the customer again * **Cancel** - cancel the order * **Refund** - refund all or part of the order * **Duplicate order** - create a new draft order with the same items * **Assign customer** - only shown for POS walk-in orders, this links a walk-in sale to a real customer (see [Point of Sale](/orders/pos)) ### Order items The order items section lists everything in the order. Each line shows: * The product image, name and SKU * Any selected **options** (for example size) * The unit price, quantity and line total For bundles, the **constituent items** that make up the bundle are listed beneath the bundle line. Beneath the items, the footer shows the order totals: * Subtotal * Discounts * **Points redeemed** - shown when the customer has used rewards points * Shipping * Tax * Total ### Payments The payments section shows the payment status for the order and any payment activity that has been logged. * Each payment shows the provider and card brand with the last 4 digits of the card * **Tap to Pay / card-present** payments taken in person show a Tap to Pay indicator (see [Point of Sale](/orders/pos)) * Failed payments show the failure reason * Refunds appear as nested rows beneath the original payment, each with a reason If the order is unpaid, you can take payment or complete it from here — see [Draft, unpaid and hold order actions](#draft-unpaid-and-hold-order-actions) below. For more on payments and refunds, see [Payments](/orders/payments). ### Draft, unpaid and hold order actions When an order is not yet paid, or is on `hold`, extra actions are available: * **Process payment** - charge a saved card or record a manual payment (for example if the customer paid offline) * **Mark as free** - complete a zero-value order. This triggers the same automations as a paid order, so a warning is shown before you confirm * **Redeem points** - apply the customer's rewards points to the order, when rewards are enabled * **Edit items** - available on draft and pending orders only. Add or remove items and adjust quantities; at least one item must remain on the order * **Release order** - release an order that is on `hold` ### Order Fulfilment The fulfilment section shows the fulfilment status for the order and any fulfilment activity that has been logged. If the order still has a `processing` status you can fulfil it, which updates the order status to `Shipped`. See [Fulfilment](/orders/fulfilment) for details. ### Attribution When attribution data is available, an attribution panel shows where the order came from: * The referral source * UTM source, medium and campaign * The landing page the customer arrived on ### Tagging Orders You can add tags to an order to help you identify and manage orders. Tags are useful for filtering orders and can be used to group orders by customer, channel, or any other criteria. ### Shipping Details The shipping details section contains the shipping address for the order and the shipping method that has been applied. If the order still has a `processing` status you can edit these details. Orders that are for collection will not have a shipping address. ### Shipping Date You can optionally set a shipping date for the order. This is the date that the order is expected to be shipped. This can be useful when the customer has requested a specific delivery date or you are expecting the customer to collect the order on a specific date. The date picker blocks past dates. If the order is currently held for London City Bond dispatch, changing the shipping date reschedules that hold and logs the change to the order activity. The shipping date is not the same as the delivery date. The shipping date is the date that the order is expected to be shipped. ### Order Activity This is where you can view a history of actions taken on the order (either manually or by the app) and any notes that have been added. The activity feed updates automatically, polling every few seconds. Some activity is written by background jobs, so an entry may appear a moment after you take an action. # Fulfilment Source: https://docs.marzipan.co/orders/fulfilment Ship orders to your customers Fulfilling orders is the process of preparing and sending orders to customers. Marzipan provides a simple and easy way to mark orders as shipped. ### Manual Fulfilment It is easy to fulfil orders manually in Marzipan. To fulfil an order, click the **Fulfil** button in the fulfilment section of the order details page. Order detail screenshot Clicking **Fulfil** opens the **Ship order** modal, where you record how the order was sent. Ship order modal The modal supports: * **Partial shipment** - set a shipped quantity per item, so you can ship part of an order now and the rest later * **Courier** - choose from APC Overnight, DHL, DPD, FedEx, London City Bond, Parcelforce, Royal Mail, Delivered by hand, Collected, or Other * **Tracking reference** - the courier's tracking number * **Shipping cost** - the cost of the shipment * **Comments** - any notes about the shipment ### Updating a shipment Clicking an existing shipment opens the **Update shipment** modal, where you can edit its status and tracking details. ### Automatic Fulfilment If you are using the London City Bond integration and have set up a flow to automatically send orders to London City Bond then Marzipan will automatically create a shipment for the order with a status of `Processing`. Orders sent to London City Bond are checked daily and will update the order status to `Shipped` or `Delivered` as and when they are processed. Order detail screenshot ### Bulk shipment update If you need to update tracking and status for many orders at once, use **Bulk shipment update** from the [Orders](/orders/overview) page. Upload a CSV to set tracking and status across many orders in one go. A downloadable template is provided so your file is in the right format. # Overview Source: https://docs.marzipan.co/orders/overview Manage and track all customer orders in one place The Orders section provides a comprehensive view of all customer transactions in your Marzipan store. This dashboard allows you to monitor, manage, and process orders efficiently. To view your orders: 1. Log in to your Marzipan account 2. Click on **Orders** in the main navigation menu 3. By default the overview page will display all your orders by order date (newest first) ### Orders The main orders table displays key information for each order. Orders Table * **Ref** - the unique reference for each order * **Date** - when the order was placed * **Customer** - name of the customer * **Channel** - the channel the order was placed through, including `pos` for point-of-sale sales * **Market** - the market the order belongs to (only shown when your store has more than one market) * **Amount** - the total amount of the order * **Payment** - whether payment has been received (`paid`, `pending`, `failed`, `refunded`, `partially refunded`, or `free` for zero-total orders) * **Status** - the current order status (Processing, Shipped, Cancelled, etc.) Click on any order in the list to view all the [order details](/orders/details), including: * Customer details * Order items and quantities * Applied discounts * Shipping details * Payment information * Order notes and history ### Header actions The top-right corner of the orders table has a few actions: * **Order Insights** - opens the orders report so you can review sales performance * **Bulk shipment update** - upload a CSV to set tracking and status across many orders at once (see [Fulfilment](/orders/fulfilment)) * **Export** - download the orders in the table as a CSV file * **Create order** - open the manual [order form](/orders/create) ### Bulk Actions Perform actions on multiple orders simultaneously by selecting the orders you want to action, or selecting all orders on the page, using the checkbox in the first column of the table. * Add tags * Cancel orders * Export order data ### Filtering and Searching You can locate specific orders using the the search box `(⌘K)` which is the fastest way if you know the order number or customer name,or by filtering the orders table using the following options: * Order date * Channel - including **POS** for point-of-sale sales * Market - only shown when your store has more than one market * Payment Status * Status * Tags * Search term - searches the billing and shipping name Orders filter options ### Exporting Orders You can export orders to a CSV file by clicking the **Export** button in the top-right corner of the orders table. This will download a CSV file containing all the orders in the table. When you click the **Export** button, you will be shown a modal where you can select the fields you want to export. The app will remember your selection for the next time you export orders. Orders export options Apply filters *before* clicking the export button to only export the orders you need. # Payments Source: https://docs.marzipan.co/orders/payments Process and manage payments for orders Marzipan tracks the payment status of every order and lets you take payment, record offline payments, and issue refunds from the order details page. ### Payment status Each order has a payment status: * `pending` - payment has not yet been taken * `paid` - payment has been received in full * `failed` - a payment attempt was unsuccessful * `refunded` - the order has been refunded (fully or partially) * `free` - a zero-value order that has been completed ### Process payment On an unpaid order, click **Process payment** to take payment. You can either: * **Charge a saved card** - charge a payment method the customer has on file * **Record a manual payment** - log a payment taken offline, for example cash, bank transfer, phone, or other Use a manual payment when the customer has already paid you outside of Marzipan and you just need to record it against the order. ### Mark as free For zero-value orders, use **Mark as free** to complete the order without taking payment. Marking an order as free triggers the same automations as a paid order, so a warning is shown before you confirm. ### Refunds You can refund an order in full or in part. When you issue a refund you add a reason, and the refund is shown against the original payment as a nested row on the order. ### Redeem points When rewards are enabled, you can **Redeem points** at the order level to apply the customer's rewards points to the order total. ### Tap to Pay and card-present payments Card payments taken in person appear on the order with a Tap to Pay indicator, along with the card brand and the last 4 digits of the card. These are taken through the Marzipan mobile app — see [Point of Sale](/orders/pos). ## Related Documentation Process and ship orders to your customers # Point of Sale & Tap to Pay Source: https://docs.marzipan.co/orders/pos Sell in person with the Marzipan mobile app and take card payments with Tap to Pay Point of Sale lets you sell in person — at your cellar door, at events, or on the road — using the **Marzipan mobile companion app**. In-person sales appear in the web app under the **POS** channel, where you review and manage them alongside your other orders. POS setup and selling happen in the Marzipan mobile app. The web app is where POS orders are reviewed and managed. ### Permissions Selling through POS requires staff permissions, set via Roles: * `pos.charge` - required to take POS sales * `payments.collect` - required to take card payments ### Quick Pay Quick Pay is the fastest way to build a sale. Add products from your catalogue, or add **custom line items** by entering a free-text name, price and quantity for anything that isn't in your catalogue. Quick Pay screen in the Marzipan mobile app ### Walk-in customer Sales default to a shared "walk-in" placeholder customer, so you can sell quickly without stopping to capture customer details. ### Identify a customer at the till You can look a customer up by email to attach the sale to them. Identifying a customer surfaces **subscriber pricing** for members, which is useful when selling to members at events. ### Tap to Pay on iPhone Take card payments in person with Tap to Pay on iPhone, powered by Stripe Terminal on your Stripe Connect account. This requires the card-present capability on your Stripe account. **Terminal locations** can be created automatically from your business address, or added manually. Once a payment is approved, a card-present payment shows on the order in the web app with a Tap to Pay indicator, along with the card brand and the last 4 digits of the card. ### Receipts Once payment is approved, you can email a POS receipt to the customer. Capture the customer's email (and an optional name) to send it. Sending the receipt also **links the walk-in order to that customer**. You can **Skip** the email to link a customer to the order without sending a receipt. The receipt screen in the Marzipan mobile app after a payment is approved ### Assign a walk-in order later If a sale went through as a walk-in, you can assign it to a real customer afterwards. From the order's **Actions** menu in the web app, choose **Assign customer**. This re-links the order only — it does not re-price the order. ### Order lifecycle POS orders start as a draft. Once paid, they become `processing` and then completed. If stock is oversold, the order goes on `hold` until it can be resolved. # Bundles and options Source: https://docs.marzipan.co/products/bundles-and-options Build bundles, add product options, and link upsell and related products These sections of the product form let you build up what a customer can buy, and what you show them alongside it. Open a product from **Products** in the main navigation menu to find them. ## Bundle items For a **bundle** product, choose the products included in the bundle and the quantity of each. Bundle items only appear on products created with the **Bundle** type. The type can't be changed after a product is created. ## Options Define product **options**, for example size, as a list of choices. You can mark an option as **required** so the customer must pick a choice before adding the product to their cart. ## Upsell and related products * **Upsell products** — alternatives a customer can choose instead of this product, for example a gift box * **Related products** — products shown alongside this one ## Tier exclusivity If you use reward tiers, you can restrict a product to specific membership tiers, so only members of those tiers can buy it. # Creating a product Source: https://docs.marzipan.co/products/create Add a product to your catalogue and set its details, images, and bottle labels To create a product, go to **Products** in the main navigation menu, click **Add product**, and choose a type. To edit an existing product, click it in the list. Both open the same form. The product **type** (**Physical** or **Bundle**) is set at creation and can't be changed afterwards. See [Overview](/products/overview) for what each type is used for. * **Name** — the product name shown to customers * **Slug** — the URL-friendly version of the name, generated automatically and editable * **Type** — Physical or Bundle (set at creation, can't be changed) * **Summary** — a short rich-text introduction * **Description** — the full rich-text product description * **SKU** — your stock-keeping reference * **Barcode / GTIN** — accepts an EAN-13, UPC-A, EAN-8, or ITF-14 code, validated live as you type * **Collections** — the [collections](/collections/overview) this product belongs to * **Availability** — who can buy the product: **Everyone** or **Subscribers only** * **Status** — the product's current status For multi-market stores, **Market visibility** controls which markets show the product. If you don't select any markets, the product is visible everywhere. Product images and bottle labels * **Images** — add multiple product images and drag to reorder them. The first image is used as the main image. * **Bottle labels** — add front and back label images for the product. Assign [attribute](/attributes/overview) values, such as Region, Grape Variety, or Vintage, to describe the product. The **SEO** section controls how the product appears in search results and when its page is shared. * **Meta title** — the title shown in search results * **Meta description** — the description shown in search results * **Share image** — the Open Graph image used when the product is shared The remaining sections of the form are covered on their own pages: * [Pricing](/products/pricing) * [Inventory](/products/inventory) * [Bundles and options](/products/bundles-and-options) * [Reviews and awards](/products/reviews-and-awards) Already selling something similar? Use **Duplicate product** from the products list to create a copy as a starting point. # Inventory Source: https://docs.marzipan.co/products/inventory Manage stock, purchase limits, overselling, and low-stock badges for a product Stock for a product is managed in the **Inventory** section of the product form. Open a product from **Products** in the main navigation menu and scroll to **Inventory**. ## Quantity * **Quantity** — a single stock quantity, or per-location quantities if [location-based inventory](/settings/inventory) is enabled With location-based inventory on, you can also **manage inventory** and **view history** for a product from the products list. ## Purchase rules * **Limit per customer** — cap how many of this product a single customer can buy * **Allow overselling** — let customers buy the product even when it's out of stock ## Low-stock badge The **low-stock badge** tells customers when stock is running low. On the product you can: * Show or hide the badge * Set the **threshold** at which it appears * Set the badge **text** * Or fall back to your global default Set the badge once under [Inventory settings](/settings/inventory) and only override it on the products that need something different. # Overview Source: https://docs.marzipan.co/products/overview Create and manage the products in your catalogue Products are the items you sell in your Marzipan store, typically your wines. This section covers the products list and every setting on the product form. To view your products: 1. Log in to your Marzipan account 2. Click on **Products** in the main navigation menu 3. The list shows all your products, newest first ## Product types You choose a type when you create a product. The type can't be changed afterwards. * **Physical** — a tangible product, for example a bottle of wine * **Bundle** — a grouping of physical products, for example a case Subscriptions and events aren't product types. Create them in their own areas: [Subscriptions](/subscriptions/overview) and [Events](/events/overview). ## Products list Products list The products list gives you an overview of your catalogue. You can: * Switch between **grid** and **list** views using the toggle * Open **Product insights** to review how your products are performing * **Search** for a product by name * **Filter** by Status (Active, Draft, Out of Stock, Archived) and Type (Physical, Bundle) * **Sort** by Name, Price, SKU, or Created ### Statuses Products can have the following statuses: `active`, `draft`, `out of stock`, `archived`, and `unavailable`. ## Actions * **Duplicate product** — create a copy of a product to use as a starting point * When [location-based inventory](/settings/inventory) is on, you can also **manage inventory** and **view history** for a product ## In this section Add a product, set its details, market visibility, images, and bottle labels. Standard, sale, subscriber, and wholesale prices, plus per-market pricing. Stock quantities, purchase limits, overselling, and low-stock badges. Bundle items, options, upsell and related products, and tier exclusivity. Add awards and reviews, and set the product's SEO fields. Describe your products with values such as Region, Grape Variety, or Vintage. # Pricing Source: https://docs.marzipan.co/products/pricing Set standard, sale, subscriber, and wholesale prices, and price per market Prices are set in the **Pricing** section of the product form. Open a product from **Products** in the main navigation menu, or create one, then scroll to **Pricing**. Product pricing fields ## Price fields * **Price** — the standard selling price * **Sale price** — a reduced price; applies when it's lower than the standard price * **Subscriber price** — the price for active subscribers, with quick **−10%**, **−15%**, and **−20%** buttons to set it from the standard price * **Wholesale price** — the price for wholesale customers * **Item cost** — what the product costs you, used for reporting ## The effective price The **effective price** a customer pays depends on who they are: * The **subscriber price** applies to active subscribers * The **sale price** applies whenever it's lower ## Per-market pricing Multi-market stores get **per-market pricing tabs** — a **Default** tab plus one tab per [market](/settings/markets). * Set optional **price overrides** on a market's tab, in that market's currency * Where you don't set an override, prices **convert from the default by exchange rate** Use an override when you want a round, deliberate price in a market rather than a converted one. # Reviews and awards Source: https://docs.marzipan.co/products/reviews-and-awards Add awards and customer reviews to a product Awards and reviews are set on the product form. Open a product from **Products** in the main navigation menu and scroll to the relevant section. ## Awards Add awards to a product, each with: * **Award** — the award itself * **Event** — the competition or event it was given at * **Class** — the class the product was entered in * **Year** — the year it was awarded ## Reviews Add reviews to a product, each with: * **Author** — who wrote the review * **Review** — the review text * **Type** — the kind of review * **Date** — when it was written Each award and review can be set to **published** or **private**. Private entries are kept on the product but aren't shown to customers. # Quickstart Source: https://docs.marzipan.co/quickstart Get your winery up and running with Marzipan. ## The seven steps to get your winery up and running with Marzipan Create your Marzipan account to access the platform: 1. Visit [app.marzipan.co/register](https://app.marzipan.co/register) 2. Complete the registration form 3. Verify your email Configure your essential business information: 1. Navigate to **Settings > General** 2. Ensure your legal business name, address, and contact information are correct 3. Upload your logo and brand assets Detailed guide to winery profile configuration, compliance settings, and shipping rules Set up payment processing to accept orders: 1. Navigate to **Settings > Payments** 2. Connect your Stripe account (required for clubs and subscriptions) for credit card processing 3. Optionally connect PayPal for additional payment options Advanced payment configuration, including currencies, taxes, and fraud prevention Configure your shipping settings: 1. Navigate to **Settings > Shipping** 2. Configure your shipping zones and rates 3. Set up your shipping methods Detailed guide to shipping configuration, including zones, rates, and methods Configure your tax settings: 1. Navigate to **Settings > Tax** 2. Configure your tax rates and tax zones 3. Set up your tax methods Detailed guide to tax configuration, including rates, zones, and methods Create your first wine product in the catalog: 1. Navigate to **Products > Add product** 2. Enter product details (name, price, inventory, etc) 3. Add product images and description 4. Save and publish your product Complete product management, including inventory tracking and pricing strategies Add Marzipan commerce functionality to your website using our web components. Implementation guides for all available web components with examples and customization options ## Launch Checklist Before going live with your Marzipan storefront, verify these essential items: * [ ] Business details are complete with accurate contact information * [ ] Payment processing is configured and tested * [ ] Add at least 3-5 products * [ ] Configure shipping zones and rates * [ ] Configure tax settings * [ ] Customize order confirmation emails ## Next Steps Now that you've completed the basic setup, explore the rest of the documentation to learn more about the features of Marzipan and how to use them. Need help? Contact our support team at [hello@marzipan.co](mailto:hello@marzipan.co). # Earning and Redemption Source: https://docs.marzipan.co/rewards/earning-and-redemption Set how points are earned, what they are worth, and how customers spend them The rules that drive the loyalty programme live in **Settings > Rewards**. This is where you decide how quickly customers earn points, what those points are worth at checkout, and what customers are told along the way. To configure the programme: 1. Log in to your Marzipan account 2. Navigate to **Settings > Rewards** 3. Make sure **Enable Rewards** is turned on ## Earning points Control how customers earn points: * **Points per unit** - how many points a customer earns for each unit of spend * **Minimum spend** - the minimum spend required to earn points Both are set **per currency**, so you can run different rates in each market. You can also choose what counts towards the order total when points are calculated: * **Exclude shipping** * **Exclude discounts** * **Exclude tax** Excluding shipping, discounts and tax means customers earn points only on the value of the products themselves. ## Redeeming points Let customers spend their points for money off at checkout: * **Enable redemption** - allow points to be redeemed at checkout * **Minimum points** - the fewest points a customer can redeem in one go * **Maximum discount %** - an optional cap on how much of an order can be paid with points. Leave it empty for no limit * **Redemption rates** - the value of points, set per currency (for example `100 points = 1 GBP`) Points redeemed on an order appear on the [order details](/orders/details) screen. ## Checkout confirmation Tell customers about their points once the order is placed: * **Show on confirmation** - show the points earned or redeemed on the order confirmation page * **Show for guests** - show it to customers who checked out without an account * **Guest message** - the message shown to guests, inviting them to create an account so they can start earning ## Notifications Keep customers informed as they move between tiers: * **Tier upgrade** - email the customer when they move up a tier * **Tier downgrade** - email the customer when they move down a tier See [Tiers & Perks](/rewards/tiers-and-perks) for how tiers and their thresholds are set up. # Overview Source: https://docs.marzipan.co/rewards/overview Run a points-based loyalty programme to reward your best customers Rewards is a points-based loyalty programme. Customers earn points when they spend, climb through tiers as they earn, and can redeem their points for a discount at checkout. You decide how points are earned, what they are worth, and which perks each tier unlocks. ### Enabling rewards Turn the programme on in **Settings > Rewards**. Once enabled, a Rewards area appears in the main navigation, and rewards information starts to appear on customer profiles. You can optionally make the programme **subscribers only**. When you do, non-subscribers see a message inviting them to join, along with a button whose text you set. ### How it works * Customers **earn points** on every qualifying order, based on the rate you set. You choose the minimum spend needed to earn, and whether shipping, discounts and tax count towards the total. See [Earning & Redemption](/rewards/earning-and-redemption). * As their points build up, customers move through your **tiers**. Each tier has a points threshold and a set of perks. See [Tiers & Perks](/rewards/tiers-and-perks). * Customers can **redeem points** for money off at checkout, at a rate you set per currency. See [Earning & Redemption](/rewards/earning-and-redemption). ### Adjusting a customer You can adjust an individual customer's standing from the **Rewards** tab on their profile: change their points balance or set their tier directly. See [Customer details](/customers/details). ### Rewards Insights The Rewards report helps you measure the programme's impact: * Number of **members** * Points **earned**, **redeemed** and **outstanding** * **Redemption rate** * Member versus non-member **average order value**, and the **AOV lift** between them * **Tier distribution**, and tier **upgrades and downgrades** See [Insights](/insights/overview) for more. ## Next steps Create the levels customers progress through, and the benefits each one unlocks. Set how points are earned, what they are worth, and how customers spend them. # Tiers and Perks Source: https://docs.marzipan.co/rewards/tiers-and-perks Create the levels customers progress through, and the benefits each one unlocks Tiers are the levels customers progress through as they earn points. Perks are the benefits each tier gives its members. Create and manage both in the Rewards area of the main navigation. Reward tiers ## Tiers Each tier has: * **Name** - the tier's name * **Points required** - the points threshold a customer must reach to join the tier * **Badge colour** - the colour used for the tier's badge * **Active** - a toggle to turn the tier on or off * **Description** - a short description of the tier Drag tiers to reorder them by threshold. Customers move between tiers automatically as their points balance changes. You can email them when they do — see [Earning & Redemption](/rewards/earning-and-redemption). ### Tier details Opening a tier shows: * Its current **members** * A **history** of customers joining and leaving the tier ## Perks Perks are the benefits a tier gives its members. Add as many as you like to each tier. Each perk has: * **Name** - what you call the perk * **Type** - `Discount`, `Free Shipping`, `Early Access`, `Events` or `Other` * **Subscription** - optionally restrict the perk to a particular subscription * **Description** - the free-text description you write A perk is simply a name, a type and the description you write. There is no per-type configuration — no percentage field, no product picker. Use the description to explain the benefit to your customers in your own words. You can adjust an individual customer's tier from the **Rewards** tab on their [profile](/customers/details). # Email Source: https://docs.marzipan.co/settings/email Manage your email sending domains and delivery settings. The email settings page lets you register custom sending domains so that emails from your store (order confirmations, shipping notifications, marketing) are sent from your own domain rather than a shared address. This improves deliverability and builds trust with your customers. ## Sending Domains Navigate to **Settings > Email** to manage your sending domains. ### Registering a Domain 1. Click **Add Domain** and enter your domain name (e.g. `yourbrand.com`) 2. Marzipan will display the DNS records you need to add to your domain 3. Add the records with your domain registrar or DNS provider 4. Return to the email settings page to check verification status ### Required DNS Records You'll need to add the following DNS records: | Record | Purpose | | --------- | -------------------------------------------------------------------------------------------------- | | **MX** | Routes bounce notifications and inbound replies back to Marzipan | | **SPF** | Authorises Marzipan's mail servers to send email on behalf of your domain | | **DKIM** | Adds a digital signature to your emails, proving they haven't been tampered with | | **DMARC** | Tells receiving servers how to handle mail that fails SPF or DKIM checks, improving deliverability | DNS changes can take up to 48 hours to propagate, though most updates are visible within a few hours. While records are pending, the page **auto-checks verification roughly every 60 seconds**, so you don't need to refresh manually. ### Verification Status Each DNS record shows one of two states: * **Verified** — The record has been detected and is configured correctly * **Pending** — The record has not yet been detected. Check that it was added correctly with your DNS provider. Once all records are verified, your domain is ready to use for sending. No emails are sent from a domain until it's verified. Add and verify your records before you rely on the domain for order confirmations or marketing. ## Inbound Email Adding the **MX records** for your domain lets customer replies to your emails arrive in your Marzipan [Messages](/messages/overview) inbox, so you can respond to enquiries without leaving the app. Putting MX records on your **root domain** (e.g. `yourdomain.com`) captures **all** email for that domain, including mail sent to your normal mailboxes. To avoid this, use a dedicated subdomain such as `mail.yourdomain.com` for sending and inbound replies. ## Email Suppression Marzipan automatically manages an email suppression list to protect your sender reputation. Email addresses are added to the suppression list when: * An email bounces (the address doesn't exist or the mailbox is full) * A recipient marks your email as spam Suppressed addresses are automatically excluded from future sends. This happens behind the scenes — you don't need to manage the list manually. ## Delivery Marzipan delivers your email through provider **routing rules** with automatic failover. If a provider encounters an issue, mail is routed through an alternative so your transactional emails (order confirmations, shipping updates) are delivered reliably. # Integrations Source: https://docs.marzipan.co/settings/integrations Connect your store to fulfilment, courier, marketing, analytics, and labelling services. Integrations connect your store to third-party services for fulfilment, couriers, marketing, analytics, and labelling. Navigate to **Settings > Integrations**, which shows two lists: **Installed** integrations and **Available** integrations. To install one, click it. Each integration shows whether it's `active` or `inactive`, along with a test-mode badge that follows the global [test mode](/settings/test-mode) toggle. Integrations page showing installed and available integrations ## Available integrations * **London City Bond** — Bonded-warehouse fulfilment. Stock also syncs into a dedicated [inventory](/settings/inventory) location. * **Robert Guy** — Third-party logistics * **Mailchimp** — Sync customers and subscribers to your Mailchimp audience * **ScrubBill** — Third-party logistics and fulfilment * **DPD** — Courier integration * **APC Overnight** — Courier integration * **Fathom Analytics** — View website analytics directly in your Marzipan dashboard * **Labls** — Create compliant electronic wine labels (e-labels). Connect your Labls account, then link a product to generate its e-label — the QR code and ingredient and nutritional information required on your physical label. Product details sync to Labls automatically, and a QR-code icon appears on linked products. ## Managing an integration Each integration has its own settings page once installed, where you configure its options. Open it from the **Installed** list at any time. # Inventory Source: https://docs.marzipan.co/settings/inventory Track stock across locations, with movements, alerts, and low-stock badges. Inventory settings let you track stock across one or more locations, record every change, and warn customers and your team when stock runs low. Navigate to **Settings > Inventory** to manage your inventory. Inventory settings page ## Location-based inventory Location-based inventory is **off by default**. To start tracking stock per location, **initialise** it once. This copies your current stock to your default location, after which stock is managed on each product. Initialising location-based inventory **can't be undone**. Make sure your current stock figures are correct before you start. ### Inventory locations Add the locations you hold stock in, each with a **name** and **address**, and set one as your **default**. ### Inventory rules Once you have more than one location, add **inventory rules** to choose which location fulfils an order based on conditions such as the shipping country. ## Stock movements Every change to stock is recorded as a movement with a reason, so you always have a full history. Reasons include: * **Received** * **Write off** * **Stock take** * **Transfer** (in or out) * **Return** * **Order** * **Initial stock** * **Other** You can add optional notes to any movement. ## Bulk stock adjustment Adjust many products at once rather than editing them one by one. You can also **import a CSV** with one row per SKU per location. ## Low-stock badges Show customers when stock is running low with a storefront badge. * Enable the badge and set a **threshold** * Add **custom text**, which supports a `{count}` placeholder for the remaining quantity * Override the badge per product where needed ## Low-stock alerts Email your team when a product's stock falls to a set level. * Enable alerts and set an **alert threshold** * Choose a delivery style: * **Real-time** — Sent immediately, at most one per product every 24 hours * **Daily digest** — A single email at 8am Only team members who have opted into the low-stock notification receive these alerts. Manage this under **Settings > Team**. ## London City Bond If you use the [London City Bond](/settings/integrations) integration, stock syncs automatically into a dedicated inventory location. This requires location-based inventory to be initialised first. # Markets Source: https://docs.marzipan.co/settings/markets Sell in more than one currency with regional markets and pricing. Markets let you sell in more than one currency and tailor pricing to different regions. Each market defines a currency and the prices customers in that region see. Navigate to **Settings > Markets** to manage your markets. Your **primary market** is created automatically from your store's default currency. It's the market customers fall back to when no other applies, so you always have at least one. Markets list ## Adding or editing a market Click a market to edit it, or add a new one. Each market has the following options. * **Name** — A label for the market, such as `Europe` or `United States` * **Active** — Whether the market is available to customers * **Show in currency switcher** — Lets customers choose this market manually from the storefront currency switcher * **Primary market** — Marks this as your default market. This **cannot be changed once you have orders, subscriptions, or customers** * **Inventory location** — An optional default [inventory location](/settings/inventory) for orders in this market * **Payment provider** — The gateway used for the market (**Stripe** or **PayFast**) * **Currency** — The currency code and symbol, for example `EUR` and `€` * **Exchange rate** — The rate from your base currency, used to convert prices. Fixed at `1.0` for the primary market * **Rounding precision** — How converted prices are rounded: `0` rounds to the nearest whole unit, `1` to the nearest 10 minor units, and `2` applies no rounding * **Countries** — Customers in these countries see this market automatically ## How a customer's market is chosen When a customer visits your store, Marzipan works through the following order and uses the first that applies: A market chosen directly by the customer, through the currency switcher or a link. A signed-in customer's previously saved market. A market matched automatically from the customer's location. If none of the above apply, the customer sees your primary market. ## Per-market pricing On products, events, and subscription packages you can set optional **price**, **sale price**, and **subscriber price** overrides for each market. Where you don't set an override, prices convert automatically from your base price using the market's exchange rate. ## Per-market visibility You can show or hide individual products, events, and packages per market, so each region only sees what's relevant to it. Set **per-market free-shipping messages** under **Web Components > Cart**. ## Archiving and deleting markets * **Archive** a market that has history — orders, subscriptions, or customers — to remove it from use while keeping its records intact * **Delete** a market that's unused and has no history # Settings Source: https://docs.marzipan.co/settings/overview Configure your store, payments, integrations, and web components. The Settings section is where you configure your store's core options, payment providers, integrations, and appearance. Access it from the main navigation sidebar. ## Settings areas Use the links below to jump to each area of your store's settings. Store and business details Users, roles, and permissions Tax rates and rules Payment gateways Currencies and regional pricing Stock and locations Shipping methods and zones Discount codes and automatic offers Third-party services Team notification preferences Loyalty and rewards Cart and checkout behaviour Customise your storefront components Sending domains and delivery Test without real payments Tokens for external systems ## General Navigate to **Settings > General** to manage your store and business details. ### Store details * **Store name** — Your business name, displayed in emails and invoices * **Store URL** — The web address of your storefront * **Store slug** — The short identifier used in your store's Marzipan links * **Subscriptions slug** — The slug used for your subscriptions pages * **Account slug** — The slug used for customer account pages * **Contact email** — Where customer enquiries and contact form submissions are sent * **Contact number** — Your customer-facing phone number * **Logo** — Your store logo, shown in emails and on hosted pages * **Open Graph image** — The default image shown when your links are shared on social media * **Favicon** — The small icon shown in browser tabs ### Business details * **Legal name** — Your registered legal business name * **Trading name** — The name you trade under, if different * **Address** — Your business street address * **City** — Your business city or town * **State/Province** — Your business state, province, or county * **Post code** — Your business postal code * **Country** — The country your business is registered in * **EORI number** — Your Economic Operators Registration and Identification number, used for customs * **AWRS number** — Your Alcohol Wholesaler Registration Scheme number Your store's currency is not set here. Currency is governed by [Markets](/settings/markets), where you can sell in more than one currency. ## Payments Navigate to **Settings > Payments** to configure your payment gateways. Marzipan supports three gateways: * **Stripe** — Card payments and wallets, connected through **Stripe Connect**. You connect your Stripe account directly, and you can have separate **live and test connected accounts**, each with its own connection status. * **PayPal** — PayPal checkout for customers who prefer it. * **PayFast** — Card payments, instant EFT, and local South African payment methods. Each gateway shows a status of `active`, `test mode`, or `inactive`. You can set a different **payment provider per market**, so customers in each region check out with the gateway that suits them. See [Markets](/settings/markets). ## Web Components Customise the appearance and behaviour of your customer-facing web components without writing code. See the [Web Components customisation guide](/web-components/customisation) for full details. ## Integrations Connect your store to third-party services such as **London City Bond**, **Robert Guy**, **Mailchimp**, **ScrubBill**, **DPD**, **APC Overnight**, and **Fathom Analytics**. See [Integrations](/settings/integrations). ## Email Manage your email sending domains and delivery settings. See [Email](/settings/email). ## API Generate API tokens for integrating with external systems or powering your web components. Each token has configurable permission scopes. ## Test Mode Test the full purchase flow without processing real payments. A global toggle switches your payment gateways and integrations to their test/sandbox mode. See [Test Mode](/settings/test-mode). # Roles & Team Source: https://docs.marzipan.co/settings/roles-and-team Manage your team and control what each member can do with roles. Roles let you control exactly what each member of your team can do, and the Team area is where you add people and assign those roles. ## Roles Navigate to **Settings > Roles** to manage roles. Role editor showing permission groups Create roles with **granular permissions** grouped by area. Each group has **select-all** and **deselect-all** controls so you can grant a whole area at once. Permission groups cover: * **Products** * **Collections** * **Attributes** * **Inventory** * **Orders** — including refunds * **Discounts** * **Customers** * **Subscriptions** — including pause and cancel * **Subscription Packages** * **Shipments** * **Events** * **CMS** * **Media** * **Flows** * **Marketing** * **Insights** — per report * **Abandoned Carts** * **Rewards** * **Forms** * **Settings** * **Team** * **Integrations** * **Roles** * **POS / Tap to Pay** **System roles** have every permission and can't be edited. Create your own role when you need a tailored set of permissions. ## Team Navigate to **Settings > Team** to manage your team. The Team page lists your users alongside their assigned role. From here you can **add or invite** new users and give each one a role. Each member also opts into which **notifications** they receive, including [low-stock alerts](/settings/inventory). # Shipping Source: https://docs.marzipan.co/settings/shipping Set up shipping methods, rates, and delivery zones. Shipping methods control how much your customers pay for delivery and where each option is available. Navigate to **Settings > Shipping Methods** to manage your methods. Shipping methods list ## Shipping methods Each shipping method has the following core options. * **Name** — The name customers see at checkout, such as `Standard Delivery` * **Description** — Optional detail about the method * **Enabled** — Whether the method is available at checkout * **Method** — The type of method, which determines how the rate is calculated The **Method** type can be one of: * **Flat rate** — A fixed **Amount** for every order * **Free shipping** — No charge * **Pickup** — Collection in person, with no delivery charge * **Custom rate** — A rate calculated from bands (see below) ### Custom rate bands A **Custom rate** method works out the charge from **bands**. First choose how bands are measured: * **Weight based (kg)** — Bands are based on the order's total weight * **Volume based (number of items)** — Bands are based on the number of items Then add rows of **From** / **To** / **Amount**. Set the last row's **To** to **Unlimited** to cover everything above the previous band. ## Countries and zones Select the **countries** a method applies to, and optionally restrict it to specific **zones**. Rates apply based on the customer's postcode. Marzipan includes the following built-in zones: | Country | Zones | | ---------------- | ----------------------------------------------------------------------------------------- | | **UK** | UK Mainland, Scottish Highlands & Islands, Northern Ireland, Isle of Man, Channel Islands | | **South Africa** | Major Cities, Remote Areas | ## Conditions You can gate when a method is offered. * **Minimum order value** — Require a minimum subtotal (before discounts) for the method to be available * **Cart conditions** — Restrict a method to carts that only contain items from certain collections The currency for a method's amounts is resolved from the destination country's [market](/settings/markets). # Test Mode Source: https://docs.marzipan.co/settings/test-mode Test your store without processing real payments. Test mode lets you test the complete shopping experience — including checkout and payment — without processing real charges. When enabled, all payment gateways automatically switch to their test/sandbox credentials. ## How It Works Navigate to **Settings > Developer Settings** to access the test mode toggle. When test mode is **on**: * All payment gateways use their test/sandbox credentials * All integrations switch to their test/sandbox mode, not just payment gateways * Orders are processed normally but payments go through sandbox environments * You can test the full checkout flow with test card numbers * All other store functionality (inventory, emails, fulfilment) works as normal When test mode is **off**: * All payment gateways automatically switch back to their live credentials * All integrations are set to live mode * Real payments are processed For Stripe, test mode uses a **separate test Connect account** rather than stored test API keys. Connect your test account in **Settings > Payments** alongside your live one. Always turn off test mode before making your store available to real customers. Orders placed in test mode use sandbox payment processing. ## Setting Up Test Credentials Set up test access for each gateway you use: ### Stripe Connect a **separate test Connect account** in **Settings > Payments**. Stripe test mode uses this connected account rather than stored test API keys, so there are no keys to copy across. ### PayPal Enter your PayPal sandbox client ID and secret from the [PayPal Developer Dashboard](https://developer.paypal.com/dashboard/applications/sandbox). ### PayFast Enter your PayFast sandbox merchant ID, merchant key, and passphrase from the [PayFast Sandbox](https://sandbox.payfast.co.za). ## Test Card Numbers When using Stripe in test mode, you can use these test card numbers: | Card | Number | | --------------- | --------------------- | | Visa (success) | `4242 4242 4242 4242` | | Visa (declined) | `4000 0000 0000 0002` | | 3D Secure | `4000 0027 6000 3184` | Use any future expiry date and any 3-digit CVC. ## Clearing Test Data Testing your store creates real records — test-mode orders and customers — that you won't want cluttering your data when you go live. When you're ready to launch, you can **purge test data** to remove them. * **Preview purge** — See what would be removed before you commit to anything * **Purge test data** — Permanently delete test-mode orders and customers Run a purge once you've finished testing and before you open your store to real customers. # Details Source: https://docs.marzipan.co/subscriptions/details View and manage a single customer subscription The subscription detail screen shows one customer's individual instance of a package, and gives you every action you need to manage it. To open a subscription: 1. Log in to your Marzipan account 2. Click on **Subscriptions** in the main navigation menu 3. Click on any subscription in the list ## The subscription detail screen Open a subscription to see its full record: * **Highlights** — lifetime value, next shipment and frequency * **Activity** — the history of actions on the subscription * **Related orders** — orders generated by the subscription * A **details panel** with the subscription's key information ## Actions on a subscription From a subscription you can: * **Manual renewal** — for fixed packages, trigger the next renewal yourself * **Send renewal reminder** — email the customer a reminder * **Transfer** — move the subscription to another customer * **Change package** — switch the customer to a different package * **Change frequency** — move to a different billing frequency * **Edit the next renewal date** * **Edit the preferred shipping date** * **Skip next shipment** * **Add an item** to the upcoming shipment * **Cancel** — optionally on a scheduled date, with a reason * **Reactivate** — restart a cancelled subscription ### Renewals **Manual renewal** is available for fixed packages, letting you trigger the next renewal yourself rather than waiting for the cycle. You can also **send a renewal reminder** to email the customer ahead of their next renewal. Automatic renewal reminders are configured on the package. See [Renewal options](/subscriptions/packages#renewal-options). ### Changing a subscription You can **transfer** a subscription to another customer, **change the package** the customer is on, or **change the frequency** they are billed at. You can also **edit the next renewal date** and the **preferred shipping date**. ### Adjusting the upcoming shipment * **Skip next shipment** — miss one cycle without cancelling the subscription * **Add an item** — add an extra item to the upcoming shipment ### Cancelling and reactivating **Cancel** a subscription with a reason, and optionally on a scheduled date so it runs until the end of the current cycle. A cancelled subscription can be restarted with **Reactivate**. ## Failed renewals If a renewal payment fails, the subscription shows a warning. Marzipan retries the payment up to four times, then cancels the subscription. Once the customer has fixed their card, you may need to trigger a **manual renewal** to get them back on track. # Overview Source: https://docs.marzipan.co/subscriptions/overview Set up wine clubs and plans, and manage your subscribers Subscriptions power your wine clubs, plans and recurring shipments in Marzipan. There are two things to understand: * A **package** (also called a club or plan) is the template a customer subscribes to. * A **subscription** is one customer's individual instance of that package. ### Package types Packages come in three **types**: * **Fixed** — the customer receives the same items each time. * **Variable** — you schedule changing shipments over time. * **Pick & Mix** — the customer chooses their own items each cycle. ### Pricing **Pricing** works one of two ways: a single **fixed** price for the whole package, or **per-item** pricing where each pick-and-mix item is priced individually. ### The Subscriber tag Customers with an active subscription are automatically given a **Subscriber** tag. This tag is used for subscriber pricing and for building customer segments. ## Subscriptions To view your subscriptions: 1. Log in to your Marzipan account 2. Click on **Subscriptions** in the main navigation menu 3. The list displays every customer subscription across all of your packages Subscriptions list The list has the following columns: * **Customer** — the subscriber * **Package** — the package they subscribe to * **Started** — when the subscription began * **Renews** — the next renewal date * **Type** — `fixed`, `variable` or `picknmix` * **Market** — only shown on multi-market stores * **Status** — the current subscription status Click on any subscription in the list to view its [subscription details](/subscriptions/details). ### Filtering and searching You can refine the list with: * Filter by **item** * Filter by **Status** — Active, Cancelled, Expired or Suspended * Filter by **market** * Filter by **start date** * A **Cancelled/Expired date range** * **Search** ### Exporting subscriptions Click **Export** to download the subscriptions in the table as a CSV file. Apply filters *before* clicking the export button to only export the subscriptions you need. ### Subscription Insights For reporting on your clubs and plans, use **Subscription Insights**, where you can review performance and **export** the underlying data. See [Insights](/insights/overview) for more. ## Next steps Create and edit the clubs and plans customers subscribe to Manage a single subscription and the actions available on it Prepare and send batch shipments for variable packages Report on subscription performance # Packages Source: https://docs.marzipan.co/subscriptions/packages Create and edit the clubs and plans customers subscribe to A **package** is the template a customer subscribes to — your club or plan. Create and edit packages to define what customers can subscribe to. To view your packages: 1. Log in to your Marzipan account 2. Click on **Subscriptions** in the main navigation menu 3. Select **Packages** Subscription package detail screen ## Creating and editing a package When you create or edit a package you can set: * **Name** — the package name shown to customers * **Slug** — the URL-friendly identifier * **Type** — `fixed`, `variable` or `picknmix` * **Summary** and **Description** — short and long copy for the storefront * **SKU** — the package's stock-keeping unit * **Minimum items** — for pick & mix packages, the fewest items a customer must choose * **Collections** — the collections the package belongs to * **Availability** — when the package can be subscribed to * **Status** — whether the package is `active` For multi-market stores, **per-market pricing tabs** let you set prices for each market. Choose the billing frequencies you want to allow, each expressed as every N months. If you offer more than one frequency, set a **default** so customers start on your preferred cycle. Renewal options control how and when subscriptions renew. See [Renewal options](#renewal-options) below. Review the package and save it. Set the **Status** to `active` when you are ready for customers to subscribe. ## Renewal options Renewal options control how and when subscriptions renew: * **First-order cut-off window** — how long a customer has before their first renewal is due * **Auto-renew** — renew subscriptions automatically * **Requires shipping** — whether renewals need a shipping address * **Grace period** — extra time allowed after a renewal is due * **Free-renewal rule** — a builder for rules that grant a free renewal * **Renewal reminder emails** — reminders sent 30, 21, 14, 7, 3 and 1 days before renewal If a renewal payment fails, Marzipan retries it before cancelling the subscription. See [Failed renewals](/subscriptions/details#failed-renewals). ## Package metrics and tabs The package detail screen shows key metrics: * Active, paused and cancelled counts * Total revenue * Average lifetime value (LTV) * Monthly recurring revenue (MRR) Depending on the package type, extra tabs are available: * **Variable** packages have a **Shipments** tab for scheduling changing shipments. See [Shipments](/subscriptions/shipments). * **Pick & Mix** packages have an **Available items** tab, where you set the default, minimum and maximum quantities per item. ### Available items For pick & mix packages, the **Available items** tab is where you choose which items customers can pick from. For each item you set: * The **default** quantity * The **minimum** quantity * The **maximum** quantity # Shipments Source: https://docs.marzipan.co/subscriptions/shipments Prepare and send batch shipments for variable packages For **variable** packages, the **Shipments** fulfilment view lets you prepare and send shipments to many subscribers at once. To view your shipments: 1. Log in to your Marzipan account 2. Click on **Subscriptions** in the main navigation menu 3. Select **Shipments** Batch shipments fulfilment view Batch shipments apply to **variable** packages only. Variable packages also have a **Shipments** tab on the package detail screen, where you schedule the changing shipments over time. See [Packages](/subscriptions/packages). ## Shipment statuses Shipments move through status tabs: * **Draft** — not yet scheduled * **Scheduled** — queued to go out * **Processing** — currently being sent * **Completed** — sent ## Recipients Each shipment lists its **recipients**, along with **skipped** and **failed** counts. Skipped and failed subscribers show the reason, so you can see why a shipment did not go out. ## Inventory estimates View **inventory estimates** to see the stock a shipment needs before you send it: * The **required** quantity per location * The **available** quantity per location You can **export** the inventory estimates. Check the inventory estimates before completing a shipment so you know you have the stock to fulfil it. ## Completing a shipment Once a shipment is ready, **complete** it to send it to its recipients. # Support Source: https://docs.marzipan.co/support Helping you get the most out of Marzipan.
Search the documentation for answers to your questions.
Email us at [hello@marzipan.co](mailto:hello@marzipan.co). We'll get back to you as soon as possible.
# Account Source: https://docs.marzipan.co/web-components/account The Account component enables users to log in and manage their account. From their account your customers can manage their subscriptions, view their orders, and update their billing and shipping details. ### Code ```javascript theme={null}
``` ### Props Props should be passed as attributes to the component element. Prevents customers from editing their pick & mix subscription selections from their account. Useful if you manage subscription contents manually. Defaults to `false` ### Features #### Rewards Dashboard If you have a rewards programme enabled, the account component automatically displays a rewards section where customers can view: * Their current reward tier and tier badge * Points balance and points history * Progress towards the next tier * Available perks for their current tier #### Subscription Upsell You can display a product grid within the account page encouraging customers to start or upgrade a subscription. Configure the collection, heading, message, and grid layout from your [web component settings](/web-components/customisation#subscription-upsell). #### Order History Customers can view their complete order history with order details, tracking information, and the ability to reorder previous purchases. #### Subscription Management Customers can manage their active subscriptions including: * Viewing upcoming renewal dates * Updating payment methods * Managing pick & mix selections (unless disabled) * Viewing subscription history ### Styling The following parts are available to style the account component: The primary action buttons displayed in the account component. This is normally when a "submit" button is used. The cancel button displayed in the account component. The navigation links displayed in the account component. The navigation links displayed in the account component when they are active. The containing div around the login and register forms. The login and register forms The h1 heading. The h2 heading. The label. Links The loading spinner displayed when various actions are loading. The primary action button on the login, register and verify account forms. The styling applied to form input fields, including the `