Segment as a destination
Send flow (survey) events from getuserfeedback.com into Segment so every downstream tool can pick them up.
- Last reviewed
Segment as a destination
Use this when flow responses should land in Segment alongside the rest of your product activity, so any downstream destination — warehouse, BI, CRM — picks them up automatically.
Every flow response and flow lifecycle event arrives in Segment as a
track call against the same identity Segment already has for the user.
1. Get a Segment write key
- In Segment, open Connections → Sources → Add source.
- Choose HTTP API (or reuse an existing source you want flow events to flow through).
- Open the source's API keys tab and copy the Write Key.
2. Create the integration
- Open Integrations and click New integration.
- Under Data out, choose Segment.
- Click Continue.
- On the detail page, paste the Write Key from step 1.
- Pick the Destination endpoint that matches your Segment region:
- Global:
https://api.segment.io - EU:
https://events.eu1.segmentapis.comorhttps://eu1.api.segmentapis.com
- Global:
- Click Save configuration.
Events start arriving in Segment on the next response.
Event payload
We emit four flow events:
| Event name | When it fires |
|---|---|
Flow Viewed | A flow was shown to a user. |
Flow Dismissed | The user dismissed a flow without submitting. |
Flow Completed | The user completed a flow. |
Flow Action Succeeded | A registered action handler returned or resolved successfully, or a supported navigation was accepted. |
You can rename or disable each event in the Events section of the
integration detail page — match your own naming convention (e.g.
flow_completed), or turn off events you don't want forwarded.
Each enabled event arrives in Segment as a track call:
{"event": "Flow Completed","userId": "user_123","anonymousId": "anon_abc","messageId": "gx_flow_completed:v1:flcmp_…","timestamp": "2026-05-13T10:14:00.000Z","context": {"page": { "path": "/checkout" },"locale": "en-US"},"properties": {"gx_event_schema": "gx_flow_completed","gx_event_schema_version": 1,"gx_flow_completion_id": "flcmp_…","gx_flow_id": "flow_…","gx_flow_version_id": "flow_version_…","gx_flow_version_number": 3,"gx_flow_run_id": "flow_run_…","gx_flow_surface": "web_page","traits": { "email": "user@example.com" }}}See Events for more on the event shape and how to send your own.
Properties we send
Top-level fields on the track call:
| Field | Always sent? | Notes |
|---|---|---|
event | Always | Lifecycle event name, after any rename you configured. |
userId | When available | Omitted if the user has no userId yet. |
anonymousId | Always | Stable per user where possible. |
messageId | Always | Stable per event. Use this for dedupe in downstream tools. |
timestamp | Always | When the event occurred, in ISO 8601. |
context.page.path | When available | Page the event happened on. |
context.page.referrer | When available | Referrer at the time of the event. |
context.locale | When available | Browser locale, e.g. en-US. |
Inside properties:
| Property | Always sent? | Notes |
|---|---|---|
gx_event_schema | Always for versioned GX events | Stable machine-readable event name. |
gx_event_schema_version | Always for versioned GX events | Positive integer version of the event contract. |
gx_flow_id | On v1 flow lifecycle events | The flow the event relates to. |
gx_flow_version_id | On v1 flow lifecycle events | The exact flow version that produced the event. |
gx_flow_version_number | On v1 flow lifecycle events | Human-readable flow version number. |
gx_flow_run_id | On v1 flow lifecycle events | Correlates events from the same flow run. |
gx_flow_surface | On v1 flow lifecycle events | widget or web_page. |
gx_flow_completion_id | On Flow Completed v1 | Stable identity for the completed flow. |
traits | When available | Profile traits known at the time, e.g. email. |
identities | Always | The identifiers we resolved against. |
These GX properties describe version 1. A future version keeps the schema name and version but may use a different property shape.
When a successful submission does not include the Flow-run coordinates needed
for version 1, Segment receives the legacy completion shape instead. That
fallback uses response_id and flow_id when available and does not include
the versioned GX envelope.
Identity
Each event carries the userId and anonymousId getuserfeedback.com resolved
during identity stitching. If you also set up
Segment as a source, identities round-trip
cleanly between the two systems.
Delivery and retries
If Segment returns a retryable error (5xx, 429, or a transient network failure), we retry the event with exponential backoff: 1 minute, 2, 4, 8, 16, 32, 64 minutes, then a final attempt up to 6 hours later. After 8 attempts an event stops retrying.
Permanent errors (4xx like an invalid Write Key) fail immediately without
retries. Each event has a stable messageId, so retries are safe even if a
previous attempt was partially delivered.
What can break
- No events show up in Segment. Confirm the Write Key matches the source you're inspecting in Segment. Each source has its own debugger.
- Wrong region. Pick an EU endpoint for EU workspaces. Segment does not forward traffic across regions.
- Integration paused. Paused integrations don't deliver. Resume from Integrations.
- Events look duplicated. We set a stable
messageIdper event so Segment can dedupe — don't strip or rewrite it in a relay.