Overview
Fullstory uses a single "event-centric" schema to model the data that passes through Fullstory's systems.
This schema is designed to be flexible and extensible, allowing for additions to this model without having to perform expensive migrations.
In this model, the *_type
suffixed fields indicate the shape of the *_properties
objects.
Identifiers
The three identifiers that are used to associate events are:
- device_id
- session_id
- view_id
If you are using Fullstory with session replay, you can use these identifiers construct a URL to the session.
For example, if your Organization ID is ORG_ID
and are using Fullstory's North America data center, the URL to a session would be https://app.fullstory.com/ui/ORG_ID/session/<device_id>:<session_id>
.
Viewing the session requires that the session is still within your organization's retention period and that the session was not sampled.
In some cases, session_id and view_id may not be present in the event. This usually indicates that the event was sent using the server API and was not associated with a session.
Source Info
Every event contains contextual information about where that event came from and how the event was passed into Fullstory.
The source_type
indicates where the event came from and the source_properties
field contains additional information about the event source.
Base Event Model
The following table describes the common fields present for events in each destination.
Field | Type | Description |
---|---|---|
device_id | int64 | The device ID indicates a unique recording device for the event. For web recording, the ID corresponds to a unique user cookie. For mobile recording, this corresponds to a single app/device combo. This field is always present. |
session_id | int64 | If present, unique id associating multiple events to the same session. This value combined with the device_id uniquely identifies a session. In other Fullstory APIs, this combined value is the full "session ID", and is constructed like device_id:session_id . |
view_id | int64 | If present, unique id associating multiple events to a single page, screen or tab. This value, combined with device_id and session_id uniquely identifies the view. For web recording, this corresponds to a single page load. For mobile recording, this corresponds to a continuous period of recording. |
event_time | timestamp | The time in UTC that the event occurred. Format is RFC 3339 to millisecond precision (e.g. 2006-01-02T15:04:05.000000Z ). |
event_type | string | The type of the event. |
event_properties | object | An object containing the data for corresponding to the event_type . |
source_type | string | The Source Type of the event. |
source_properties | object | The Source Properties corresponding to the source_type . |
Events
An event is the core data model in Fullstory. Each event can describe one of a few distinct classes of information:
- Direct user interactions: An action that a user took. Examples include
click
,change
, andnavigate
. - System events: An event that was initiated by a browser, an API, or injected by the capture client. Examples include
load
,custom
, andexception
. - Interpreted or aggregate events: An event that was injected after capture by Fullstory's servers. Examples include
form_abandon
andmouse_thrash
.
This section describes the possible event_types
and the associated event_properties
that are present in the event.
Common Event Properties
The following properties may be present in event_properties
for all event types.
Field | Type | Description |
---|---|---|
event_definition_id | string | The ID of the most specific matching user-configured Defined Event. |
additional_event_definition_ids | array of strings | Additional matching event definition IDs. |
background
Indicates that the mobile app was backgrounded.
change
Indicates a change in the value of an input element such as a text input, checkbox, or radio button. Continuous updates are coalesced into a single change event. For example, if "f" -> "fo" -> "foo" is typed into an input element, the change event will only contain "foo".
Property | Type | Description |
---|---|---|
target | EventTarget object | The target of the change event. |
fs_suspicious_kind | array of enums | Indicates any suspicious activity detected in the change event. Possible values: - sql_injection : The activity appears to be a SQL injection attack.- xss : The activity appears to be a cross-site scripting (XSS) attack. |
click
Indicates a primary click (typically left-click) in web, or a tap in mobile. Triggers when a user clicks or taps on an element.
Property | Type | Description |
---|---|---|
target | EventTarget object | The target of the click event. |
fs_rage_count | int64 | If greater than 0, indicates that the click was part of a rage click sequence. Learn more. |
fs_dead_count | int64 | This value will be 1 if the click did not have an effect on the page, thus is considered dead. Learn more. |
fs_error_kind | enum | If present, indicates an error click. Learn more. Possible values: - unknown : The reason for the error click was unknown.- console : The source of the error was a console.error() message.- exception : The source of the error was an exception. |
is_click_long | bool | If true, indicates that the click was a long click. Only available on mobile. |
is_click_unhandled | bool | If true, indicates that the click was unhandled. Only available on mobile. |
consent
Indicates that the user has given or revoked consent for capture. Fires with FS.consent()
or FS('setIdentity', { consent })
or is added based on previous consent state. Learn more.
Property | Type | Description |
---|---|---|
is_consent_given | bool | If true, then a user has consented to capture elements that require consent. |
consent_scope | enum | The scope of the provided consent. Possible values: - document : Document is the only possible value for consent scope. |
consent_action_type | enum | Indicates how this consent event was added during capture. Possible values: - report_consent : Consent was injected based on the current state of the user's consent.- set_consent : Consent was set directly by the user or API. |
console_message
Indicates a logging message. For web, this event is limited to errors via a console.error
call. For mobile, this is a log from the Fullstory SDK.
Property | Type | Description |
---|---|---|
console_message_level | enum | The level that the console message was logged at. Possible values: - error |
message | string | The text of the console message. |
copy
Indicates that the user copied highlighted text on the page.
Property | Type | Description |
---|---|---|
target | EventTarget object | The target of the copy event. The text field indicates the copied text. |
crash
Indicates that a mobile app has crashed.
cumulative_layout_shift
Indicates the CLS score for a page. This is calculated using the LayoutShift API and may not be available in all browsers. The score is calculated in accordance with the CLS definition.
Property | Type | Description |
---|---|---|
cumulative_layout_shift | double | The Cumulative Layout Shift (CLS) score for the page. |
custom
Indicates a user-defined event was fired with FS.event()
or FS('trackEvent', {...})
.
Property | Type | Description |
---|---|---|
event_name | string | The name of the custom event as provided by the API. |
event_properties | object | An object containing the parsed payload of the custom event. |
fs_api_errors | array of FsApiError objects | Any errors that occurred while processing the custom event. |
element_seen
Indicates that a watched element has been rendered or has become visible in the viewport. There are three subtypes of this event: rendered, visible, and end. The visible subtype will be emitted when at least 25% of the element is visible in the viewport. The rendered subtype will be emitted if the element is rendered but not visible. The end subtype will be emitted when the element's lifecycle is complete and will contain the total time the element was rendered and visible.
Property | Type | Description |
---|---|---|
element_type | enum | Possible values: - rendered : Indicates that the watched element was rendered, but not visible in the viewport.- visible : Indicates that the watched element was visible in the viewport.- end : Indicates the end of the watched element's lifecycle. |
element_render_duration_millis | int64 | The amount of time that the element was rendered. |
element_visible_duration_millis | int64 | The amount of time that the element was visible. |
element_start_type | enum | The type of the Watched Element at the element_start_time .Possible values: - rendered : Indicates that the watched element was rendered, but not visible in the viewport.- visible : Indicates that the watched element was visible in the viewport.- end : Indicates the end of the watched element's lifecycle. |
element_start_time | int64 | The time at which the Watched Element was first rendered or made visible. |
target | EventTarget object | The watched element target. |
exception
Indicates that an exception occurred. For web, this is a JavaScript exception. For mobile, this is a native exception.
Property | Type | Description |
---|---|---|
exception_source_file | string | The source file that produced the exception. |
exception_count | int32 | The number of times that this exception fired within a given window (useful for batching bursts of exceptions fired). |
is_exception_handled | bool | Whether the exception is caught or not. |
message | string | The message associated with the exception. |
first_input_delay
Indicates the delay between the first user input and when the browser responds. Triggers when PerformanceEventTiming is reported with type 'first-input' for the first time on a web page
Property | Type | Description |
---|---|---|
first_input_delay_millis | int64 | The time from the first user input event to the browser's response. |
force_restart
Indicates that the user restarted the app. Triggers when the time between the app being backgrounded and then started is short.
Property | Type | Description |
---|---|---|
elapsed_millis | uint64 | The number of milliseconds between when the app was backgrounded and when it was started. |
form_abandon
Indicates that a user started filling out a form but did not submit it.
Property | Type | Description |
---|---|---|
target | EventTarget object | The target indicates the form that was abandoned. |
highlight
Indicates that a user highlighted text on the page.
Property | Type | Description |
---|---|---|
target | EventTarget object | The target of the highlight event. The text field indicates the highlighted text. |
identify
Indicates a user-defined event was fired with FS.identify()
, FS('setIdentity', {...})
, FS.setUserVars()
, or FS('setProperties', { type: 'user', properties })`. Identify events are also injected by Fullstory at the beginning of a capture to provide a snapshot of the user's properties at the time the data was ingested.
Property | Type | Description |
---|---|---|
user_id | string | The unique ID for the user provided through the API. |
user_email | string | If present, the email address for the user. |
user_display_name | string | The display name for the user as provided through the API. If none is provided, this will be generated by the Fullstory backend. |
user_properties | object | An object containing the parsed payload of the user properties provided through the API. |
fs_api_errors | array of FsApiError objects | Any errors that occurred while processing the user properties. |
interaction_to_next_paint
Indicates the longest time between a user interaction and the next paint, ignoring outliers. This can used to assess a page's responsiveness to user input. This value is taken from PerformanceEventTiming when the entryType is event
.
Property | Type | Description |
---|---|---|
interaction_to_next_paint_millis | int64 | The time from the first user input event to the next paint event. |
event_name | string | The name of the event that triggered the first user input as reported by the browser. Examples are: keydown and mouseover . |
keyboard_close
Indicates that the mobile keyboard was closed. Mobile Apps only.
keyboard_open
Indicates that the mobile keyboard was opened. Mobile Apps only.
load
Captures various performance timings of a page load for a web browser. Triggers when the timings have been finalized. Web only.
Property | Type | Description |
---|---|---|
dom_content_time_millis | int64 | The time it took for the document to be parsed and the DOM tree to be constructed. |
first_paint_time_millis | int64 | The time of the First Contentful Paint (FCP). |
load_time_millis | int64 | The time it took for the page to load completely. |
largest_paint_time_millis | int64 | The time of the Largest Contentful Paint (LCP). |
time_to_interactive_millis | int64 | The Time to Interactive (TTI) is the time it takes for the page to become fully interactive. |
total_blocking_time_millis | int64 | The Total Blocking Time (TBT) is the total amount of time that the page was blocked after the FCP. |
time_to_first_byte_millis | int64 | The Time to First Byte (TTFB) is the time it takes for the first byte of the response to be received. |
low_memory
Indicates that capture was stopped due to low device memory. On Android, this is triggered when there is 10% or less RAM available. On iOS, this is triggered on this event.
Property | Type | Description |
---|---|---|
memory_available | int64 | The amount of memory available on the device at the time of the event. |
memory_maximum | int64 | The maximum amount of memory available on the device. |
mouse_thrash
Indicates a series of rapid mouse movements within a short time frame.
navigate
Indicates a change in the URL of the page for web sources, and a change in the screen for mobile sources. Triggers when the URL or screen changes including the initial navigation.
Property | Type | Description |
---|---|---|
navigate_reason | enum | Possible values: - navigate : Navigation started by clicking a link, entering the URL in the browser's address bar, form submission, or initializing through a script operation other than reload and back_forward as listed below.- reload : Navigation is through the browser's reload operation, location.reload() , or a Refresh pragma directive.- back_forward : Navigation is through the browser's history traversal operation.- prerender : Navigation is initiated by a prerender hint. |
fs_suspicious_kind | array of enums | Indicates any suspicious activity detected in the navigate event. Possible values: - sql_injection : The activity appears to be a SQL injection attack.- xss : The activity appears to be a cross-site scripting (XSS) attack. |
page_properties
Indicates that the page properties were set with FS.setPageVars()
or FS('setProperties', { type: 'page', properties })
.
Property | Type | Description |
---|---|---|
page_name | string | The name of the page as provided through the API. |
page_properties | object | An object containing the parsed payload of the page properties provided through the API. |
fs_api_errors | array of FsApiError objects | Any errors that occurred while processing the page properties. |
paste
Indicates that the user pasted text into an input field on the page.
Property | Type | Description |
---|---|---|
target | EventTarget object | The target of the past event. The 'text' field indicates the pasted text. |
pinch_gesture
Indicates that the user performed a pinch gesture with a touch device.
Property | Type | Description |
---|---|---|
pinch_gesture_type | enum | Possible values: - in : Indicates the pinch led to a scale in.- out : Indicates the pinch led to a scale out. |
pinch_visual_scale_change | double | The change in the visual viewport after a finger pinch. If the change > 1.0, it implies scale in. If the change < 1.0, it implies scale out. If the change is exactly 1.0, it means a failed finger pinch. |
pinch_scale | double | Scale determines the overall page scale at the end of the pinch. It is the ratio of the layout viewport dimensions to visual viewport dimensions. When the page is scaled out to max, the scale is 1.0 and greater than 1.0 otherwise. |
request
Indicates a network request that resulted in a 400 or 500 level status code.
Property | Type | Description |
---|---|---|
request_method | string | The HTTP request method (GET, POST, etc). |
request_url | Url object | The request URL. |
request_status | int32 | The HTTP status code of the request. |
request_duration_millis | int64 | The duration of the request. |
Sources
The "source" describes the context of the event.
It includes information about where the event came from and how the event was passed into Fullstory.
This includes information such as URL or of the event (or screen for Mobile Apps), device information, and capture information.
This section describes the possible source_types
and the associated source_properties
that are present in the event.
Common Source Properties
The following properties may be present in source_properties
for all source types.
Field | Type | Description |
---|---|---|
entrypoint | string | If present, indicates how the event was created, including from the Fullstory capture script. Some examples are: web client , setVars , event , and POST /v2/users . Support for this field not guaranteed across all capture clients. |
origin | string | If present, indicates where the event was generated. Some examples are: dom and server . |
integration | string | If present, indicates the integration that generated the event. For Fullstory built capture sources, this value will be fs . Examples include dlo , segment , and zendesk . Support for this field is not guaranteed across all integrations. |
page_definition_id | string | The ID of the Page as defined in the Fullstory app. |
location | Location object | The location associated with the capture of the event. Learn more. |
device | Device object | Information about the device associated with the event. For web events, similar information is available in the user_agent field. |
mobile_app
Indicates that the event was sent to Fullstory through a Fullstory mobile SDK.
Property | Type | Description |
---|---|---|
app_screen_name | string | The name of the mobile app screen on which the event occurred. |
build_variant | string | Android build variant (e.g. debug, release). |
app_id | string | Identifies a run of FSCLI during iOS native mobile builds. |
app_name | string | The name of the mobile app that produced the event. |
app_package_name | string | Code-level package name of a mobile app, e.g. com.fullstory.sampleapp.latest . |
app_version | string | Mobile app version, e.g. 25.0.1 . |
server
Indicates that the event was sent to Fullstory through a server-side API.
Property | Type | Description |
---|---|---|
user_agent | UserAgent object | |
url | Url object | |
initial_referrer | Url object | |
app_screen_name | string | |
build_variant | string | |
app_id | string | |
app_name | string | |
app_package_name | string | |
app_version | string |
web
Indicates that the event was sent to Fullstory through the browser API.
Property | Type | Description |
---|---|---|
user_agent | UserAgent object | The user agent of the browser that generated the event. |
url | Url object | The URL of the page when the event occurred. |
initial_referrer | Url object | The referrer from the the first navigation event in the "view". |
Common Objects
This section describes the common objects that are used in the event_properties
and source_properties
objects.
EventTarget
Property | Type | Description |
---|---|---|
raw_selector | string | The full selector path to the event's target element. |
text | string | The relevant text of the event's target element, such as inner text for click events and values for input change events. |
masked | bool | If true, indicates that the target text is empty because it was masked due to a privacy rule. |
element_definition_id | string | The ID of the most specific, matching user-configured Named Element. |
additional_element_definition_ids | array of strings | Additional matching Named Element IDs. |
element_properties | object | Properties extracted from configured attributes on the target element. Learn more. |
Url
Property | Type | Description |
---|---|---|
full_url | string | A full URL including the protocol, host, path, query, and hash. |
host | string | The host portion of the URL. e.g. www.example.com . |
path | string | The path portion of the URL. e.g. /path/to/page . |
query | object | The query portion of the URL, structured as an object where the key is the query parameter name and the value is a list of values for that parameter. For example, /path/to/page?foo=bar&baz=qux&baz=boop would be represented as { "foo": { "values": ["bar"] }, "baz": { "values": ["qux", "boop"] }} . |
hash_path | string | The hash path of the URL. e.g. #/path/to/page would be represented as /path/to/page . |
hash_query | object | The hash query of the URL, structured as an object where the key is the query parameter name and the value is a list of values for that parameter. For example, #/path/to/page?foo=bar&baz=qux&baz=boop would be represented as { "foo": { "values": ["bar"] }, "baz": { "values": ["qux", "boop"] }} . |
FsApiError
Property | Type | Description |
---|---|---|
reason | enum | The reason for the error. Possible values: - missing_type : Property missing type suffix.- invalid_name : Invalid property name.- id_immutable : Immutable id violation.- id_invalid : Invalid id.- name_too_long : Property name too long.- value_too_big : Property value too big.- too_big_to_parse : JSON too big to parse.- expected_primitive : Property value should have been a primitive type.- invalid_type : Property has invalid type suffix.- invalid_json : Invalid JSON.- invalid_value : Property value doesn't match expected type.- invalid_event_name : Invalid custom event name.- page_prop_max_per_page : Max properties per page- page_name_changed : pageName changed without a change in the PageView- unset_name_mismatch : the page name given in unset did not match the current page- unmatched_unset : an unset was received while not in a page- elem_prop_max_per_event : Max element properties per event |
field | string | If present, the name/key of the field that is invalid. |
value | string | If present, the json representation of the invalid value. |
UserAgent
Property | Type | Description |
---|---|---|
raw_user_agent | string | An unprocessed user agent string. This value is used to derive the following fields. There may be cases where this string is not in a known format, in which case the derived fields will be either Unknown or null. |
device | string | If present, the type of device. Example values include: Tablet , Mobile , Desktop , Robot . |
operating_system | string | If present, the operating system of the device. Example values include: Windows , OS X , iOS , Android , and Linux . |
browser | string | The browser used by the device or Unknown. Example values include: Chrome , Safari , Firefox , Microsoft Edge , and Custom Agent . |
browser_version | string | If present, the version of the browser. This field will only be present if the version is of the format major.minor.build.patch where each subversion is optional (e.g. 10A is a valid version). Otherwise, this field will be null. |
Location
Property | Type | Description |
---|---|---|
ip_address | string | If present, the IP address at the start of the associated capture instance. That is, this will be the same for all events with the same device_id , session_id , and view_id . |
country | string | If present, the country associated with the IP address. |
region | string | If present, the name of the region associated with the IP address. |
city | string | If present, the name of the city associated with the IP address. |
lat_long | string | If present, the latitude and longitude associated with the IP address. The format is "latitude,longitude". |
Device
Property | Type | Description |
---|---|---|
manufacturer | string | If present, the manufacturer of the device. Generally available for Mobile Apps, but may also be provided by the server API. Examples include: Apple , Samsung , Google , and Microsoft . |
model | string | If present, the model of the device. Generally available for Mobile Apps, but may also be provided by the server API. Examples include: iPhone12,5 , Pixel 5 , and Surface Pro 7 and SM-G950F . |
operating_system | string | If present, the operating system of the device. Generally available for Mobile Apps, but may also be provided by the server API. |
os_version | string | If present, the version of the operating system. Generally available for Mobile Apps, but may also be provided by the server API. |
screen_height | int32 | Indicates the screen height of the device in pixels. |
screen_width | int32 | Indicates the screen width of the device in pixels. |
viewport_height | int32 | Indicates the height of the viewport in pixels at the time of the event. Generally available for web sources, but may also be provided by the server API. |
viewport_width | int32 | Indicates the width of the viewport in pixels at the time of the event. Generally available for web sources, but may also be provided by the server API. |