FlexyPe webhooks are triggered at specific points in a user’s journey — browsing, checkout, and account creation. This page explains the exact conditions that fire each event and how they relate to each other.Documentation Index
Fetch the complete documentation index at: https://docs.flexype.io/llms.txt
Use this file to discover all available pages before exploring further.
Quick reference
| Event | Fires when | Timing |
|---|---|---|
PRODUCT_VIEWED | Identified user views a product page | Immediately |
COLLECTION_VIEWED | Identified user views a collection page | Immediately |
ABANDONED_SESSION | Identified user browses without starting checkout, then goes inactive | After 15 min of inactivity |
ABANDONED_CHECKOUT | User opens a checkout session and does not complete the order | 15 minutes after the checkout session opens |
NEW_CUSTOMER | First-time user logs in via FlexyPass and a new store account is created | On account creation |
FlexyPe must be able to identify the user via FlexyPass for any event to fire. Anonymous visitors do not trigger webhooks.
End-to-end flow
Scenario 1 — User browses, does not start checkout
User views a product page
A
PRODUCT_VIEWED event fires immediately.User views a collection page
A
COLLECTION_VIEWED event fires immediately.User goes inactive — no checkout opened
The 15-minute inactivity timer starts from the user’s last recorded activity.
15 minutes pass — ASR fires
An
ABANDONED_SESSION webhook is sent with the user’s last known browsing state.If your endpoint returns a non-200 response, FlexyPe retries using the same event_id. See Retry logic.Scenario 2 — User starts checkout, abandons mid-flow
User visits your store and browses
PRODUCT_VIEWED and COLLECTION_VIEWED events fire as the user browses (same as Scenario 1).User opens checkout
The checkout session is created. ASR will not fire for this user. The 15-minute ACR timer starts from this moment.
15-minute timer starts
The timer starts from the moment the checkout session is opened — not from the user’s last activity. If the order is not completed within 15 minutes, ACR fires.
User progresses through checkout steps
FlexyPe tracks the user’s latest state across steps:
| State | Description |
|---|---|
INITIATED | Checkout session opened |
PHONE_ENTERED | User verified OTP |
ADDRESS_LOADED | Address page loaded |
ADDRESS_SHIPPING_SELECTED | User selected a shipping method |
Only the latest state at the time of inactivity is sent — not one event per step.
15 minutes pass — ACR fires
An
ABANDONED_CHECKOUT webhook is sent with the user’s last recorded checkout state and a unique event_id.User returns to the same session
Once a session is marked abandoned and ACR has fired, returning to that session does not trigger a new event. The session remains abandoned.
User completes the order
No FlexyPe webhook fires on order completion. Use Shopify webhooks to listen for completed orders.To link a Shopify order back to an ACR event, match on session ID — FlexyPe passes the same session ID to Shopify via This value will match
note_attributes:payload.session_id on the corresponding ACR webhook event.Scenario 3 — User opens a new checkout session before the previous one times out
User opens checkout
A checkout session is created (session A). The 15-minute ACR timer starts from this moment.
User closes and opens checkout again before 15 minutes elapse
Before session A’s timer expires, the user opens a new checkout session (session B).
15 minutes pass — ACR fires for session B
If session B is not completed within 15 minutes of opening, an
ABANDONED_CHECKOUT webhook fires for session B with a new event_id and session_id.ACR — how the timer and sessions work
The ACR timer starts from session open, not from the user’s last activity. A session can only be marked abandoned once. Here is a concrete example:| Time | User action | Latest state | Event fired |
|---|---|---|---|
| 10:00 | Opens checkout (session A) | INITIATED | — |
| 10:05 | Verifies OTP | PHONE_ENTERED | — |
| 10:10 | Opens new checkout (session B) | INITIATED | Session A timer cancelled — no ACR for session A |
| 10:25 | 15 min elapsed since session B opened | INITIATED | ABANDONED_CHECKOUT (event_id: abc-123) |
| 10:30 | Returns to session B | — | No new event — session already abandoned |
Retried deliveries reuse the same
event_id. A new session always produces a new event_id and a new session_id.Deduplication
Retries reuse the sameevent_id. If your endpoint receives the same event_id twice, the second delivery is a retry — not a new event. Discard it after recording the first successful processing.
See Idempotency in the overview for a code example.