Use this file to discover all available pages before exploring further.
Event properties allow you to add structured, typed data to your events. Properties must match your dashboard schema exactly, or the event will be rejected.
import com.permutive.android.EventPropertiesval properties = EventProperties.from( "article_id" to 12345, "title" to "Breaking News", "category" to "Technology", "price" to 9.99, "is_premium" to true, "published_at" to Date(), "tags" to listOf("tech", "mobile", "android"))
Use nested EventProperties to represent hierarchical data structures:
val properties = EventProperties.from( "article_id" to 12345, "user" to EventProperties.from( "type" to "premium", // user.type "premium" to true, // user.premium "subscription_tier" to "gold" // user.subscription_tier ), "metadata" to EventProperties.from( "source" to "mobile_app", "version" to "2.1.0" ))
Add location and ISP data to events using these constants:
EventProperties.from( "isp_info" to EventProperties.ISP_INFO, // ISP information "geo_info" to EventProperties.GEO_INFO, // Geographic location "ip_address" to EventProperties.IP_ADDRESS_HASH // Hashed IP address)
Add IBM Watson Natural Language Understanding data:
EventProperties.from( "watson_concepts" to EventProperties.ALCHEMY_CONCEPTS, "watson_entities" to EventProperties.ALCHEMY_ENTITIES, "watson_keywords" to EventProperties.ALCHEMY_KEYWORDS, "watson_taxonomy" to EventProperties.ALCHEMY_TAXONOMY, "watson_emotion" to EventProperties.ALCHEMY_DOCUMENT_EMOTION, "watson_sentiment" to EventProperties.ALCHEMY_DOCUMENT_SENTIMENT, "watson_taxonomy_labels" to EventProperties.ALCHEMY_TAXONOMY_LABELS, "watson_entity_names" to EventProperties.ALCHEMY_ENTITY_NAMES)
val purchaseProperties = EventProperties.from( "order_id" to "ORD-12345", "total_amount" to 149.99, "currency" to "USD", "item_count" to 3, "items" to listOf( EventProperties.from( "product_id" to "PROD-001", "name" to "Widget", "price" to 49.99, "quantity" to 1 ), EventProperties.from( "product_id" to "PROD-002", "name" to "Gadget", "price" to 99.99, "quantity" to 2 ) ), "payment_method" to "credit_card", "shipping_method" to "express")
Content Properties
val contentProperties = EventProperties.from( "article_id" to 12345, "title" to "Article Title", "author" to "John Doe", "category" to "Technology", "subcategories" to listOf("Mobile", "Android"), "word_count" to 1500, "published_at" to Date(), "is_premium" to true, "tags" to listOf("android", "sdk", "mobile"), "isp_info" to EventProperties.ISP_INFO, "geo_info" to EventProperties.GEO_INFO)
User Context Properties
val userContextProperties = EventProperties.from( "user" to EventProperties.from( "id" to "user_12345", "type" to "premium", "subscription_tier" to "gold", "is_logged_in" to true, "account_age_days" to 365 ), "session" to EventProperties.from( "id" to "session_abc123", "duration_seconds" to 120, "page_views" to 5 ))
Match property names and types exactly with your schema
Use enrichment constants when available
Create reusable property builder functions
Use nested properties for related data
Include relevant context properties
Validate against your schema before deploying
Include PII (Personally Identifiable Information) without hashing
Use arbitrary property names not in your schema
Send null for required properties
Mix up property types
Create overly complex nested structures
Never send unhashed PII:
// ❌ WRONG - Sending raw emailEventProperties.from("email" to "user@example.com")// ✅ CORRECT - Hash before sendingEventProperties.from("email_sha256" to hashSHA256("user@example.com"))