> For the complete documentation index, see [llms.txt](https://help.craftsmanplus.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.craftsmanplus.com/analytics/analytics-api/models.md).

# Models

## The progress object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"progress":{"type":"object","properties":{"event_type":{"type":"string","enum":["progress"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Progress identifier"},"level_name":{"type":"string","description":"Name of the level"},"level_id":{"type":"string","description":"Identifier of the level"}},"required":["id"]},"description":"Progress event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The heartbeat object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"heartbeat":{"type":"object","properties":{"event_type":{"type":"string","enum":["heartbeat"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"x":{"type":"number","minimum":0,"description":"Time elapsed since last heartbeat in seconds"}},"required":["x"]},"description":"Heartbeat event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The finished object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"finished":{"type":"object","properties":{"event_type":{"type":"string","enum":["finished"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Finish identifier"},"level_name":{"type":"string","description":"Name of the level"}},"required":["id"]},"description":"Finish event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The first\_tap object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"first_tap":{"type":"object","properties":{"event_type":{"type":"string","enum":["first_tap"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"x":{"type":"number","description":"X coordinate of the tap"},"y":{"type":"number","description":"Y coordinate of the tap"}},"required":["x","y"]},"description":"First tap event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The cta\_click object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"cta_click":{"type":"object","properties":{"event_type":{"type":"string","enum":["cta_click"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"CTA identifier"},"gesture":{"type":"string","maxLength":64,"description":"Type of gesture that triggered the CTA"},"action":{"anyOf":[{"type":"string"},{"type":"object","properties":{"sceneId":{"type":"string"},"androidUrl":{"type":"string"},"iosUrl":{"type":"string"},"type":{"type":"string"}},"required":["type"]}],"description":"Action performed by the CTA"},"button_name":{"type":"string","description":"Name of the button"},"layer_name":{"type":"string","description":"Name of the layer"},"layer_type":{"type":"string","maxLength":64,"description":"Type of layer"},"x":{"type":"number","description":"X coordinate of the click"},"y":{"type":"number","description":"Y coordinate of the click"},"nx":{"type":"number","minimum":0,"maximum":1,"description":"Horizontal click position as a fraction of the visible artboard width"},"ny":{"type":"number","minimum":0,"maximum":1,"description":"Vertical click position as a fraction of the visible artboard height"},"orientation":{"type":"string","maxLength":64,"description":"Orientation the playable was rendered in when the click happened"},"url":{"type":"string","minLength":1,"format":"uri","description":"URL to navigate to"},"level_id":{"type":"string","minLength":1,"description":"Level identifier"},"level_name":{"type":"string","description":"Name of the level"}},"required":["id","action","layer_type","url","level_id"]},"description":"CTA click event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The button\_click object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"button_click":{"type":"object","properties":{"event_type":{"type":"string","enum":["button_click"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Button identifier"},"gesture":{"type":"string","maxLength":64,"description":"Type of gesture that triggered the button"},"action":{"anyOf":[{"type":"string"},{"type":"object","properties":{"sceneId":{"type":"string"},"androidUrl":{"type":"string"},"iosUrl":{"type":"string"},"type":{"type":"string"}},"required":["type"]}],"description":"Action performed by the button"},"button_name":{"type":"string","description":"Name of the button"},"layer_name":{"type":"string","description":"Name of the layer"},"layer_type":{"type":"string","maxLength":64,"description":"Type of layer"},"x":{"type":"number","description":"X coordinate of the click"},"y":{"type":"number","description":"Y coordinate of the click"},"nx":{"type":"number","minimum":0,"maximum":1,"description":"Horizontal click position as a fraction of the visible artboard width"},"ny":{"type":"number","minimum":0,"maximum":1,"description":"Vertical click position as a fraction of the visible artboard height"},"orientation":{"type":"string","maxLength":64,"description":"Orientation the playable was rendered in when the click happened"},"level_id":{"type":"string","minLength":1,"description":"Level identifier"},"level_name":{"type":"string","description":"Name of the level"},"url":{"type":"string","description":"URL the button navigates to, when it has one"}},"required":["id","action","layer_type","level_id"]},"description":"Button click event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The tracker\_fired object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"tracker_fired":{"type":"object","properties":{"event_type":{"type":"string","enum":["tracker_fired"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Layer identifier of the element that fired the tracker"},"gesture":{"type":"string","maxLength":64,"description":"Type of gesture that fired the tracker"},"action":{"anyOf":[{"type":"string"},{"type":"object","properties":{"sceneId":{"type":"string"},"androidUrl":{"type":"string"},"iosUrl":{"type":"string"},"type":{"type":"string"}},"required":["type"]}],"description":"Action that fired the tracker"},"button_name":{"type":"string","description":"Name of the button"},"layer_name":{"type":"string","description":"Name of the layer"},"layer_type":{"type":"string","maxLength":64,"description":"Type of layer"},"x":{"type":"number","description":"X coordinate where the tracker was fired"},"y":{"type":"number","description":"Y coordinate where the tracker was fired"},"nx":{"type":"number","minimum":0,"maximum":1,"description":"Horizontal click position as a fraction of the visible artboard width"},"ny":{"type":"number","minimum":0,"maximum":1,"description":"Vertical click position as a fraction of the visible artboard height"},"orientation":{"type":"string","maxLength":64,"description":"Orientation the playable was rendered in when the click happened"},"level_id":{"type":"string","minLength":1,"description":"Level identifier"},"level_name":{"type":"string","description":"Name of the level"},"urls":{"type":"array","items":{"type":"string","format":"uri"},"description":"All tracker URLs fired, with query parameters removed"}},"required":["id","action","layer_type","level_id","urls"]},"description":"Tracker fired event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The playable\_closed object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"playable_closed":{"type":"object","properties":{"event_type":{"type":"string","enum":["playable_closed"]},"event_extra":{"type":"array","items":{"type":"object","properties":{}},"description":"Playable closed event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The impression object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"impression":{"type":"object","properties":{"event_type":{"type":"string","enum":["impression"]},"event_extra":{"type":"array","items":{"type":"object","properties":{}},"description":"Impression event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The playable\_loaded object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"playable_loaded":{"type":"object","properties":{"event_type":{"type":"string","enum":["playable_loaded"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"load_start":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when loading started"},"load_end":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when loading completed"},"stepDuration":{"type":"number","minimum":0,"description":"Duration of this loading step in milliseconds"},"totalDuration":{"type":"number","minimum":0,"description":"Total loading duration in milliseconds"}}},"description":"Playable loaded event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The scene\_transition object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"scene_transition":{"type":"object","properties":{"event_type":{"type":"string","enum":["scene_transition"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Transition identifier"},"level_name":{"type":"string","description":"Name of the level"},"action":{"anyOf":[{"type":"string"},{"type":"object","properties":{"sceneId":{"type":"string"},"androidUrl":{"type":"string"},"iosUrl":{"type":"string"},"type":{"type":"string"}},"required":["type"]}],"description":"Action performed during transition"},"method":{"type":"string","maxLength":64,"description":"Method of transition"},"from":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Source scene identifier"},"name":{"type":"string","description":"Source scene name"}},"required":["id"],"description":"Source scene details"},"to":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Target scene identifier"},"name":{"type":"string","description":"Target scene name"}},"required":["id"],"description":"Target scene details"}},"required":["id","action","method","from","to"]},"description":"Scene transition event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The scene\_finish object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"scene_finish":{"type":"object","properties":{"event_type":{"type":"string","enum":["scene_finish"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Scene identifier"},"level_name":{"type":"string","description":"Name of the level"},"level_id":{"type":"string","description":"Level identifier"},"action":{"anyOf":[{"type":"string"},{"type":"object","properties":{"sceneId":{"type":"string"},"androidUrl":{"type":"string"},"iosUrl":{"type":"string"},"type":{"type":"string"}},"required":["type"]}],"description":"Action performed on scene finish"},"url":{"type":"string","format":"uri","description":"URL to navigate to"}},"required":["id","action"]},"description":"Scene finish event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The dom\_loaded object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"dom_loaded":{"type":"object","properties":{"event_type":{"type":"string","enum":["dom_loaded"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"octopus_id":{"type":"string","description":"Octopus identifier"},"octopus_order":{"type":"string","description":"Octopus order identifier"},"octopus_creative_id":{"type":"string","description":"Octopus creative identifier"},"stepDuration":{"type":"number","minimum":0,"description":"Duration of this DOM loading step in milliseconds"},"totalDuration":{"type":"number","minimum":0,"description":"Total DOM loading duration in milliseconds"}}},"description":"DOM loaded event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The tags\_loaded object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"tags_loaded":{"type":"object","properties":{"event_type":{"type":"string","enum":["tags_loaded"]},"event_extra":{"type":"array","items":{"type":"object","properties":{}},"description":"Tags loaded event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The visibility\_changed object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"visibility_changed":{"type":"object","properties":{"event_type":{"type":"string","enum":["visibility_changed"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["visible","hidden"],"description":"Visibility state"},"level_name":{"type":"string","description":"Name of the level"},"level_id":{"type":"string","description":"Level identifier"}},"required":["state"]},"description":"Visibility changed event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The game\_visible object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"game_visible":{"type":"object","properties":{"event_type":{"type":"string","enum":["game_visible"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Game identifier"},"game_session":{"type":"string","format":"uuid","description":"Game session identifier"},"game_type":{"type":"string","minLength":1,"description":"Type of game"},"visible":{"type":"boolean","description":"Is the game visible"},"level_name":{"type":"string","description":"Name of the level"},"level_id":{"type":"string","description":"Level identifier"}},"required":["id","game_session","game_type","visible"]},"description":"Game ended event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The game\_started object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"game_started":{"type":"object","properties":{"event_type":{"type":"string","enum":["game_started"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Game identifier"},"game_session":{"type":"string","format":"uuid","description":"Game session identifier"},"game_type":{"type":"string","minLength":1,"description":"Type of game"},"level_name":{"type":"string","description":"Name of the level"},"level_id":{"type":"string","description":"Level identifier"},"max_score":{"type":"number","description":"Maximum possible score"}},"required":["id","game_session","game_type"]},"description":"Game started event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The game\_ended object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"game_ended":{"type":"object","properties":{"event_type":{"type":"string","enum":["game_ended"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Game identifier"},"game_session":{"type":"string","format":"uuid","description":"Game session identifier"},"game_type":{"type":"string","minLength":1,"description":"Type of game"},"level_name":{"type":"string","description":"Name of the level"},"level_id":{"type":"string","description":"Level identifier"},"max_score":{"type":"number","description":"Maximum possible score"},"user_score":{"type":"number","description":"Score achieved by the user"},"max_moves":{"type":"number","description":"Maximum possible moves"},"user_moves":{"type":"number","description":"Moves achieved by the user"},"max_health":{"type":"number","description":"Maximum possible health"},"user_health":{"type":"number","description":"Health achieved by the user"},"game_result":{"type":"string","enum":["win","lose"],"description":"Result of the game"},"action_triggered":{"type":"boolean","description":"Was this progress triggered by an action"},"action":{"anyOf":[{"type":"string"},{"type":"object","properties":{"sceneId":{"type":"string"},"androidUrl":{"type":"string"},"iosUrl":{"type":"string"},"type":{"type":"string"}},"required":["type"]}],"description":"Action performed by the CTA"}},"required":["id","game_session","game_type"]},"description":"Game ended event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The game\_progress object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"game_progress":{"type":"object","properties":{"event_type":{"type":"string","enum":["game_progress"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Game identifier"},"level_name":{"type":"string","description":"Name of the level"},"level_id":{"type":"string","description":"Level identifier"},"game_session":{"type":"string","format":"uuid","description":"Game session identifier"},"game_type":{"type":"string","minLength":1,"description":"Type of game"},"x":{"type":"number","description":"X coordinate of the progress event"},"y":{"type":"number","description":"Y coordinate of the progress event"},"user_score":{"type":"number","description":"Current score of the user"},"user_moves":{"type":"number","description":"Moves achieved by the user"},"user_health":{"type":"number","description":"Health achieved by the user"}},"required":["id","game_session","game_type"]},"description":"Game progress event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The game\_input object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"game_input":{"type":"object","properties":{"event_type":{"type":"string","enum":["game_input"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Game identifier"},"level_name":{"type":"string","description":"Name of the level"},"level_id":{"type":"string","description":"Level identifier"},"layer_name":{"type":"string","description":"Name of the layer"},"game_session":{"type":"string","format":"uuid","description":"Game session identifier"},"game_type":{"type":"string","minLength":1,"description":"Type of game"},"x":{"type":"number","description":"X coordinate of the input"},"y":{"type":"number","description":"Y coordinate of the input"},"nx":{"type":"number","minimum":0,"maximum":1,"description":"Horizontal click position as a fraction of the visible artboard width"},"ny":{"type":"number","minimum":0,"maximum":1,"description":"Vertical click position as a fraction of the visible artboard height"},"orientation":{"type":"string","maxLength":64,"description":"Orientation the playable was rendered in when the click happened"},"gesture":{"type":"string","maxLength":64,"description":"Type of gesture input"}},"required":["id","game_session","game_type"]},"description":"Game input event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The viewable object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"viewable":{"type":"object","properties":{"event_type":{"type":"string","enum":["viewable"]},"event_extra":{"type":"array","items":{"type":"object","properties":{}},"description":"Ad viewable event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```

## The unexpected\_error object

```json
{"openapi":"3.0.0","info":{"title":"Craftsman+ Analytics Events","version":"1.0.0"},"components":{"schemas":{"unexpected_error":{"type":"object","properties":{"event_type":{"type":"string","enum":["unexpected_error"]},"event_extra":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","description":"Error message"},"stack":{"type":"string","description":"Error stack trace"}},"required":["message"]},"description":"Unexpected error event details"},"analytics_v":{"type":"string","description":"Version of the analytics API being used"},"first_timestamp":{"type":"number","description":"Timestamp of the first event in the session"},"session_id":{"type":"string","format":"uuid","description":"Unique session identifier"},"timestamp":{"type":"number","description":"Unix timestamp of the event"},"device_model":{"type":"string","description":"Model of the device"},"os_ver":{"type":"string","description":"Operating system version"},"os":{"type":"string","description":"Operating system name"},"locale":{"type":"string","description":"Device locale"},"timezone":{"type":"string","minLength":1,"description":"Device timezone"},"partner":{"type":"string","description":"Partner identifier"},"user_id":{"type":"string","format":"uuid","description":"Unique user identifier"},"company_id":{"type":"string","minLength":11,"maxLength":11,"pattern":"^[a-zA-Z0-9]{11}$","description":"Company identifier (11 alphanumeric characters)"},"app_id":{"type":"string","minLength":0,"description":"Application identifier"},"ad_id":{"type":"string","minLength":0,"description":"Advertisement identifier"},"ad_sdk":{"type":"string","description":"Ad SDK name (e.g., AdMob)"},"ad_sdk_version":{"type":"string","description":"Ad SDK version number"},"ad_mraid_version":{"type":"string","description":"MRAID (Mobile Rich Media Ad Interface Definitions) version"},"screen_width":{"type":"number","minimum":0,"description":"Screen width in pixels"},"screen_height":{"type":"number","minimum":0,"description":"Screen height in pixels"},"playable_name":{"type":"string","description":"Name of the playable content"},"playable_id":{"type":"string","description":"Unique identifier for the playable content"},"env":{"type":"string","enum":["development","test","staging","production"],"description":"Environment where the event occurred"},"host":{"type":"string","description":"Host domain of the playable"},"exported_at":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Timestamp when the event was exported"},"version_id":{"type":"number","minimum":0,"description":"Version identifier of the playable"},"browser_name":{"type":"string","description":"Name of the browser"},"browser_ver":{"type":"string","description":"Version of the browser"},"device_type":{"type":"string","description":"Type of device"},"event_id":{"type":"string","description":"Unique identifier for the event"},"country":{"type":"string","description":"Country code"},"ttl":{"type":"string","description":"Time to live for the event"},"ip":{"type":"string","format":"ip","description":"IP address - DEPRECATED: No longer captured for GDPR compliance (API-1240). Field kept for backward compatibility but will always be empty/undefined.","deprecated":true},"referrer":{"type":"string","nullable":true,"description":"Referrer URL"},"average_fps":{"type":"number","minimum":0,"description":"Average frames per second"}},"required":["event_type","event_extra","session_id","timestamp","device_model","os_ver","os","locale","timezone","partner","user_id","company_id","screen_width","screen_height","playable_name","playable_id","env"]}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.craftsmanplus.com/analytics/analytics-api/models.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
