Send event attributes
Overview
App event logs consist of required attributes and custom attributes.
Required attributes
These are the attributes that you must include when you send app event logs.
Naming rules for required attributes
You must send required attribute names in camelCase or lowercase. If you send them in snake_case, such as user_id, they are not processed normally and are isolated in the rescue table.
| Attribute name | Description | Data type | Example |
|---|---|---|---|
userId | Account-based user identifier | STRING | 100001 |
deviceId | Device-based user identifier | STRING | 100000 |
identifierProvider | The system that issues user identifiers. Always hive | STRING | hive |
appId | The App ID registered in Hive Console > Project Settings > App ID | STRING | com.com2us.game.ios |
appIdGroup | The Project ID issued by the project in Hive Console > Project Settings. Generated automatically when appId is sent | STRING | com.com2us.game |
eventTime | The time the event occurred. RFC 3339 international standard (including the time zone) | STRING | 2026-07-20T14:01:01+09:00 |
eventName | The event name that classifies the event | STRING | asset_drop |
Note
For deviceId, use the same value as the deviceKey used in login requests. If you do not use the same value, data is not linked on a per-device basis, which can make device-based analyses such as funnel analysis difficult. For how to create a deviceKey, see deviceKey.
appId / appIdGroup sending rules
appIdGroup is generated automatically based on appId, so you do not need to send it.
- If you know the
appId: IncludeappIdin the event attributes and send it. - If you do not know the
appId: TheappIdvalue in the header, which is a required value when you send logs, replacesappIdin the event attributes. For details, see Send event logs.
Cautions when sending required attributes
If any of the following conditions applies, the event log is isolated in the rescue table.
- Both
appIdandappIdGroupare missing - Any of the other required attributes (
userId,identifierProvider,deviceId,eventTime,eventName) is missing or empty - Even if you do not know a value, do not leave it empty. Fill it in with an arbitrary value such as
"0"or"unknown"and send it.
eventName naming rules
We recommend that you write the event names used in eventName according to the following rules.
- Recommended characters: English letters (a–z, A–Z, case-sensitive), numbers (0–9), and the underscore (
_) - Separator: Separate words with an underscore (
_), not a space - Form: The
noun_verbform that clearly describes the event is recommended - Examples:
item_purchase,level_up,tutorial_complete,stage_start
Warning
Event names that do not follow the rules above may be limited in their use for analysis.
eventTime format rules (RFC 3339)
eventTime follows the RFC 3339 format and must include time zone information.
Format:
Allowed examples:
2026-07-20T14:01:01+09:00 (KST, Korea Standard Time)
2026-07-20T05:01:01Z (UTC)
2026-07-20T14:01:01.123+09:00 (including milliseconds)
2026-07-20T23:01:01-05:00 (US Eastern Time)
Examples that are not allowed:
2026-07-20 14:01:01 (no time zone → isolated)
2026-07-20 (no time → isolated)
1719835261 (Unix timestamp → isolated)
14:01:01 (no date → isolated)
eventTime
eventTimeis converted to UTC in the pipeline and stored in thedateTimecolumn of the table. The original value is preserved as is inattributes.eventAttributes.eventTime.
Cautions when sending eventTime
eventTime accepts only values within the range of 10 years in the past to 5 years in the future from the current time. If it is outside this range, the event log is isolated in the rescue table.
Custom attributes
Compose the information you want to send from the app as attribute names and attribute values, and send it yourself together with the required attributes.
Attribute name rules
| Rule | Description | Example |
|---|---|---|
| Starting character | Must start with an English lowercase or uppercase letter | level, Stage |
| Case sensitivity | Custom attributes are case-sensitive | market != Market != MARket |
| Allowed special characters | Only the underscore (_) is allowed as a special character | item_name |
Attribute names you cannot use (reserved words)
Cautions when sending custom attributes
If you use the following reserved words as attribute names, the log is isolated in the rescue table. This applies in the same way regardless of case.
| Reserved word | Remarks |
|---|---|
attributes | Case-insensitive (example: Attributes, ATTRIBUTES) |
eventAttributes | Case-insensitive |
hiveAttributes | Case-insensitive |
Attribute value rules
Cautions on attribute value formats
Attribute values can be sent in only two types: numeric and string. If you send them as a JSON object, a JSON array, or a string in JSON format, the log is isolated in the rescue table.
| Data type | Description | Example |
|---|---|---|
| Numeric | An integer or a decimal. Send it without quotation marks | "level": 10, "exp": 1.5 |
| String | Must be enclosed in double quotation marks ("") when sent | "character_name": "AA" |
If an attribute value is a JSON object, a JSON array, or a string in JSON format, the log is isolated in the rescue table.
// JSON object (not allowed)
"info": {"key": "value"}
// JSON array (not allowed)
"items": [1, 2, 3]
// String in JSON format (not allowed)
"data": "{\"key\": \"value\"}"
Sending the same attribute name more than once
If you send the same attribute name two or more times, one attribute value is selected at random and only one is saved.
Notes & tips
- You must send required attribute names in camelCase or lowercase. If you send them in snake_case (
user_id), they are isolated in the rescue table. - You must include either
appIdorappIdGroup. If both are missing, the log is isolated. eventTimeaccepts only the RFC 3339 format (including the time zone), and values more than 10 years in the past or 5 years in the future from the current time are isolated.- You cannot use
attributes,eventAttributes, orhiveAttributesas custom attribute names (case-insensitive). - Attribute values can only be numeric or string. JSON objects, JSON arrays, and strings in JSON format are isolated.
- For how to check and resend isolated logs, see Data isolation.
Learn more
- Send events — Introduction to event and attribute concepts
- Event template — List of events collected automatically by default for each category
- Send event logs — How to send with Hive Axyl, Fluentd, and HTTP
- Event storage structure — Table structure, attributes details, and data isolation