Skip to content

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 Project ID registered in Hive Console > Project Settings > App ID STRING com.com2us.game.ios
appIdGroup The Game ID issued in Hive Console > Project Settings > App ID. 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
appId / appIdGroup sending rules

When you send an event, you must include either appId or appIdGroup.

  • If you know the appId: Send only appId. appIdGroup is generated automatically.
  • If you do not know the appId: Send appIdGroup yourself.
  • If you send both values at the same time, appIdGroup is regenerated based on appId, so do not include appIdGroup when you send appId.
Cautions when sending required attributes

If any of the following conditions applies, the event log is isolated in the rescue table.

  • Both appId and appIdGroup are 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_verb form 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:

YYYY-MM-DDTHH:MM:SS[.sss]+HH:MM or YYYY-MM-DDTHH:MM:SSZ

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

  • eventTime is converted to UTC in the pipeline and stored in the dateTime column of the table. The original value is preserved as is in attributes.eventAttributes.eventTime.
Cautions when sending eventTime

eventTime accepts only values within the range of 31 days in the past to 31 days 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 appId or appIdGroup. If both are missing, the log is isolated.
  • eventTime accepts only the RFC 3339 format (including the time zone), and values more than 31 days in the past or future from the current time are isolated.
  • You cannot use attributes, eventAttributes, or hiveAttributes as 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