Skip to main content
Hemsy can forward browser-side try-on events to Segment as track calls. Use this when you want try-on behavior in the same pipelines as your storefront (GA4, Mixpanel, Klaviyo, Snowflake, and so on). This is separate from Hemsy Home in the dashboard, which shows aggregated KPIs (sessions, conversion, revenue, and so on). Segment receives individual events with properties; Hemsy Home computes rollups from Hemsy’s internal event store.

Where Segment forwarding applies

Segment forwarding works in both ways shoppers use Hemsy:
ExperienceURL patternHow shoppers arrive
Embedded experiencehttps://hemsy.ai/embed/{subdomain}?embed=1&…Your storefront loads hemsy-embed.js and opens Hemsy in a modal iframe.
Hosted experiencehttps://{subdomain}.hemsy.ai?…Shoppers open your store’s Hemsy subdomain directly (link, QR code, email, and so on).
Both surfaces run the same try-on app and send events through the same browser API (POST /api/events). Segment is not limited to embeds. Segment forwarding does not apply to:
  • The Hemsy dashboard (merchant admin UI).
  • Server-only events (for example attributed orders written at checkout webhooks). Those feed Hemsy Home, not the Segment forwarder.

Setup

  1. In the Hemsy dashboard, open Integrations.
  2. Under Segment, enter your Segment Endpoint URL (for most workspaces: https://api.segment.io).
  3. Optionally enter your Write Key (required for standard Segment endpoints; leave blank only if your proxy authenticates requests another way).
  4. Save. The card shows Connected when an endpoint is configured.
Hemsy sends POST requests to {endpoint}/v1/track with JSON bodies in Segment’s HTTP API shape.

Identity stitching (anonymousId)

To align Hemsy Segment events with your storefront identity graph, pass the same stable ID you use elsewhere (for example Segment’s anonymousId). Hemsy sends this value as Segment’s anonymousId on every forwarded track. If you do not pass one, Hemsy uses its own browser visitor ID (hemsy_visitor_id in localStorage), which will not match your site unless you bridge IDs yourself. There is no automatic cross-domain handoff from your storefront to {subdomain}.hemsy.ai. You must pass the ID explicitly using one of the methods below.

Embedded experience

Set data-hemsy-anonymous-id on the embed script. The embed loader appends it to the iframe URL as anonymous_id:
<script
  src="https://hemsy.ai/hemsy-embed.js"
  data-hemsy-subdomain="your-store-subdomain"
  data-hemsy-selector=".hemsy-launcher"
  data-hemsy-anonymous-id="visitor-42"
  defer
></script>
You can also set anonymousId on window.HemsyEmbedConfig (see Hemsy Embeds).

Hosted experience

Add the anonymous_id query parameter to any link to your Hemsy subdomain:
https://mystore.hemsy.ai?anonymous_id=visitor-42
Works alongside other parameters:
https://mystore.hemsy.ai?anonymous_id=visitor-42&flow=<flowId>
https://mystore.hemsy.ai?anonymous_id=visitor-42&closet=<payload>
Use the same ID you use on your storefront and in Segment. When a shopper lands without anonymous_id, only Hemsy’s generated visitor ID is used.

Checkout metadata

The same anonymous_id is attached to Shopify cart/checkout line-item metadata as attributes[anonymous_id] when the shopper completes checkout from either experience.

How forwarding works

  1. The shopper uses the embedded or hosted try-on experience.
  2. The browser records the event in Hemsy and POSTs to /api/events.
  3. If Segment is configured, Hemsy forwards a track call with a human-readable name prefixed with Hemsy .
Forwarding runs only when:
  • The event has a Segment mapping (see Forwarded events).
  • Your store has a valid Segment endpoint saved in Integrations.
  • The request passes Hemsy’s store context checks (host / origin / referer match your store slug or an allowed Hemsy host such as hemsy.ai, {subdomain}.hemsy.ai, staging, or local dev).

Properties on every track call

In addition to event-specific fields below, each forwarded track includes:
PropertyTypeDescription
productIdsstring[]Shopify product IDs for items in the shopper’s look, when applicable.
variantIdsstring[]Shopify variant IDs for items in the look, when applicable.
sessionIdstring | nullHemsy session ID for this tab visit (sessionStorage).
storeSlugstringYour Hemsy store subdomain slug.
Segment also receives anonymousId and an ISO timestamp.

Forwarded events

Session and engagement

Segment eventWhen it firesEvent properties
Hemsy Session StartedOnce per browser tab session when the try-on experience loads and analytics bootstraps.
Hemsy Session EngagedOnce per session, 10 seconds after load (shopper remained in the experience).

Try-on funnel

Segment eventWhen it firesEvent properties
Hemsy Try On StartedShopper starts try-on generation (photo + at least one item).selectedItemCount
Hemsy Try On CompletedTry-on succeeds and the result screen is shown.selectedItemCount
Hemsy Try On FailedTry-on fails or returns without a generated image.reason — e.g. no_product_images, generation_failed

Look building

Segment eventWhen it firesEvent properties
Hemsy Added Item to LookShopper adds a product variant to their look.productTitle
Hemsy User Photo UploadedShopper uploads a photo from their device.
Hemsy Model Photo SelectedShopper picks a photo from the model library.model_id

Guided flows

When a merchant flow is active (data-hemsy-flow on embed launchers, or flow query param on the hosted experience):
Segment eventWhen it firesEvent properties
Hemsy Flow Step CompletedShopper completes a flow step by adding an item and advancing.flow_name, flow_id, flow_step_name
Hemsy Flow Step SkippedShopper skips a non-required step.flow_name, flow_id, flow_step_name
Hemsy Flow ExitedShopper leaves the guided flow.flow_name, flow_id, flow_step_name
In free-browse mode (no active flow):
Segment eventWhen it firesEvent properties
Hemsy Filter SelectedShopper selects a category in Filter & Sort.filter_name, filter_scope
Hemsy Sort SelectedShopper changes sort (not “Featured”).sort_nameprice-low, price-high, etc.
Hemsy Search SubmittedShopper submits a catalog search (Enter).query, result_count

Result screen

Segment eventWhen it firesEvent properties
Hemsy Try On EditedShopper edits the look from the result screen.actionedit, swap, or remove
Hemsy Checkout ClickedShopper taps checkout (or cart handoff in embed cart mode).selectedItemCount, hasStorefrontToken, fromSharedLook, sharedLookShortId
Hemsy Look SharedShopper shares the result.See Hemsy Look Shared below.

Hemsy Look Shared

This event fires on two different paths depending on whether share links are enabled for your store (sharing_enabled in Hemsy, or always on staging/preview hosts).
typeWhenSegment properties
share_linkShare links are enabled. Hemsy creates a persisted share URL, then surfaces it to the shopper.shortId, shareUrl, storeSlug, selectedItemCount, usedNativeShare
share_imageShare links are disabled. Hemsy shares or downloads the try-on image only (no share URL).storeSlug, selectedItemCount
These answer different questions:
PropertyWhat it tells you
usedNativeShareHow the link was surfaced — true if the browser native share sheet was used (navigator.share with the URL, common on mobile), false if Hemsy fell back to copying the link to the clipboard (typical on desktop when Web Share API is unavailable or fails).
shareUrlWhat link was shared — the URL recipients can open (for example https://yourstore.com/?share=FreyjHz4 when redirecting to the store embed, or your hosted https://{subdomain}.hemsy.ai/?share=… URL).
Hemsy always tries the native share sheet first when navigator.share is available and the share completes without cancellation. If that is not available or fails (other than the user dismissing the sheet), Hemsy copies shareUrl to the clipboard and sets usedNativeShare to false. Cancelling the native sheet does not fire Hemsy Look Shared. share_image does not include usedNativeShare or shareUrl. That path uses the native share sheet with an image file when supported, otherwise a download — it is separate from the share-link pipeline in createShareHandler.

Sharing

Segment eventWhen it firesEvent properties
Hemsy Shared Look OpenedWhen this event is reported through the browser events API.shortId (when present)
Shared look opens are always counted in Hemsy Home (Top Shared Links). Confirm Hemsy Shared Look Opened in your Segment debugger for your traffic; contact Hemsy if you need guaranteed Segment delivery on every open.

Example track payload

{
  "anonymousId": "visitor-42",
  "event": "Hemsy Try On Completed",
  "properties": {
    "selectedItemCount": 3,
    "productIds": ["123", "456"],
    "variantIds": ["789", "101112"],
    "sessionId": "a1b2c3d4-...",
    "storeSlug": "mystore"
  },
  "timestamp": "2026-05-20T15:04:05.123Z"
}

Testing

  1. Save your Segment endpoint (and write key) in Integrations.
  2. Embedded experience: Open Hemsy from your storefront with data-hemsy-anonymous-id set to a test ID (for example segment-test-001).
  3. Hosted experience: Open https://{subdomain}.hemsy.ai?anonymous_id=segment-test-001 and run through upload → add items → try-on → checkout.
  4. In Segment Sources → Debugger, confirm Hemsy * track events with anonymousId: segment-test-001.
If events are missing:
  • Confirm the integration shows Connected.
  • Confirm you are on the correct subdomain or embed slug.
  • Confirm the event is listed under Forwarded events, not Not forwarded.
  • Hemsy Embeds — embedded launch modes, data-hemsy-anonymous-id, cart vs checkout
  • Hemsy dashboard Home — aggregated KPIs and funnels (no Segment required)