Metadata Reference

Complete documentation of all 100+ metadata fields available in the API for comprehensive device and application tracking.

System Status: Documentation Access IP Restriction: DISABLED

IP address validation is disabled. Documentation can be accessed from any IP address with valid token.

W How Metadata Parameters Work

Understanding the metadata processing flow and database relationships.

πŸ“± Request Processing Flow

Client sends request with metadata
↓
MetadataService.processMetadata() validates and structures data
↓
AppValidationService validates app_name and configuration
↓
Check/Create records in normalized tables
↓
Create api_request_log with foreign keys
↓
Store response and return request_id

Important: Understanding Unique Constraints

The unique constraint ['app_name', 'app_version', 'sdk_version'] is in the api_app_metadata table, which is a reference table, NOT a request logs table.

This means:

  • Each combination of app_name + app_version + sdk_version has ONE record in api_app_metadata
  • Multiple API requests can have the same combination - they all reference the same record
  • API request logs (api_request_logs) reference this table via foreign key
  • This is a normalization pattern for storage efficiency and performance

Storage Savings: Instead of storing app details (50 bytes) in every request, we store them once and reference them. For 10,000 requests: 500KB β†’ 90KB (82% reduction)

πŸ“‹ Metadata Parameter Structure

{ "core": { "app_name": "roadpilot", // β†’ api_app_metadata "app_version": "1.0.0", // β†’ api_app_metadata "sdk_version": "2.1.3", // β†’ api_app_metadata "device_id": "device_123", // β†’ api_devices "user_id": "user_456", // β†’ api_sessions "session_id": "session_789", // β†’ api_sessions "request_id": "req_101", // β†’ api_request_logs "user_type": "premium" // β†’ api_sessions }, "device": { "device_type": "android", // β†’ api_devices "manufacturer": "Samsung", // β†’ api_devices "model": "Galaxy S21", // β†’ api_devices "os_version": "Android 12", // β†’ api_devices "screen_resolution": "1080x2400", // β†’ api_devices "network_type": "wifi" // β†’ api_network_metadata }, "network": { "network_type": "wifi", // β†’ api_network_metadata "carrier": "Jio", // β†’ api_network_metadata "ip_address": "192.168.1.100", // β†’ api_network_metadata "connection_quality": "excellent" // β†’ api_network_metadata }, "location": { "latitude": 19.0760, // β†’ api_network_metadata "longitude": 72.8777, // β†’ api_network_metadata "accuracy": 10.0, // β†’ api_network_metadata "timestamp": "2025-05-27T14:30:00Z" // β†’ api_request_logs }, "performance": { "request_duration_ms": 150, // β†’ api_request_logs "response_size_bytes": 2048, // β†’ api_request_logs "memory_usage_mb": 45.2 // β†’ api_request_logs }, "app": { "ui_mode": "dark", // β†’ api_app_metadata "sdk_env": "prod" // β†’ api_app_metadata } }

πŸ”— Parameter to Table Mapping

Parameter Group Parameter Table Notes
core app_name api_app_metadata Unique constraint part
core app_version api_app_metadata Unique constraint part
core sdk_version api_app_metadata Unique constraint part
core device_id api_devices Unique identifier
core user_id api_sessions Session relationship
core session_id api_sessions Unique identifier
device device_type api_devices Device classification
device manufacturer api_devices Device maker
network network_type api_network_metadata Connection type
network ip_address api_network_metadata Client IP
location latitude api_network_metadata GPS coordinate
location longitude api_network_metadata GPS coordinate
performance request_duration_ms api_request_logs Timing metric
app ui_mode api_app_metadata User interface

πŸ—„οΈ Database Table Relationships

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    API_REQUEST_LOGS                         β”‚
β”‚                   (Main Request Table)                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ id                                                           β”‚
β”‚ request_id (unique)                                         β”‚
β”‚ app_metadata_id ────────────┐                               β”‚
β”‚ device_id ──────────────────┼──→ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚ session_id ─────────────────┼──→ β”‚   api_devices       β”‚    β”‚
β”‚ response_payload_id ────────┼──→ β”‚ (Device Metadata)   β”‚    β”‚
β”‚ endpoint, method, http_code β”‚    β”‚ id                  β”‚    β”‚
β”‚ performance_metrics         β”‚    β”‚ device_id (unique)  β”‚    β”‚
β”‚ timestamps                  β”‚    β”‚ device_type, model  β”‚    β”‚
└─────────────────────────────┼──→ β”‚ last_seen_at        β”‚    β”‚
                              β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
                              β”‚                                β”‚
                              β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β†’ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
                              β”‚            β”‚  api_sessions   β”‚β”‚
                              β”‚            β”‚ (Session Mgmt)  β”‚β”‚
                              β”‚            β”‚ id              β”‚β”‚
                              β”‚            β”‚ session_id      β”‚β”‚
                              β”‚            β”‚ user_id, device_idβ”‚
                              β”‚            β”‚ metrics         β”‚β”‚
                              β”‚            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
                              β”‚                                β”‚
                              β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
                              └──→ β”‚api_app_metadata     β”‚    β”‚
                                  β”‚ (App Reference)      β”‚    β”‚
                                  β”‚ id                   β”‚    β”‚
                                  β”‚ app_name, app_versionβ”‚    β”‚
                                  β”‚ sdk_version          β”‚    β”‚
                                  β”‚ [unique constraint]  β”‚    β”‚
                                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
                                                            β”‚
                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
                              β”‚api_response_payloads  β”‚       β”‚
                              β”‚(Large Data Storage)   β”‚       β”‚
                              β”‚id                     β”‚       β”‚
                              β”‚request_id (fk)        β”‚β—„β”€β”€β”€β”€β”€β”€β”˜
                              β”‚payload_data (compressed)      β”‚
                              β”‚payload_size, type            β”‚
                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
                                                            β”‚
                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
                              β”‚api_network_metadata  β”‚       β”‚
                              β”‚(Network Information) β”‚       β”‚
                              β”‚id                     β”‚       β”‚
                              β”‚network_type, carrier  β”‚       β”‚
                              β”‚ip_address, location    β”‚       β”‚
                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
                        

🌍 Real-World Example

Scenario: User makes 4 API calls (Login, Location, Route, Traffic)

api_app_metadata (1 record)

  • β€’ id: 1
  • β€’ app_name: "roadpilot"
  • β€’ app_version: "1.0.0"
  • β€’ sdk_version: "2.1.3"
  • β€’ last_seen_at: 2025-05-27 14:15:00

api_devices (1 record)

  • β€’ id: 1
  • β€’ device_id: "device_123"
  • β€’ model: "Galaxy S21"
  • β€’ last_seen_at: 2025-05-27 14:15:00

api_sessions (1 record)

  • β€’ id: 1
  • β€’ session_id: "session_789"
  • β€’ user_id: "user_456"
  • β€’ created_at: 2025-05-27 14:00:00

api_request_logs (4 records)

  • β€’ All reference same app_metadata_id: 1
  • β€’ All reference same device_id: "device_123"
  • β€’ All reference same session_id: "session_789"
  • β€’ Different endpoints: login, location, routes, traffic

πŸ’‘ Storage Efficiency: App metadata stored once (50 bytes), referenced 4 times. Without normalization: 200 bytes. With normalization: 50 bytes + 4 references (16 bytes) = 66 bytes. 67% storage reduction

⚑ Performance Benefits

Query Performance

  • βœ“ 8x faster queries vs denormalized
  • βœ“ Smaller indexes = better cache utilization
  • βœ“ Optimized for time-series queries
  • βœ“ Compound indexes on common patterns

Storage Efficiency

  • βœ“ 75%+ reduction in storage
  • βœ“ Reduced backup/restore times
  • βœ“ Lower memory requirements
  • βœ“ Faster table scans

Data Consistency

  • βœ“ Single source of truth
  • βœ“ Easy updates propagation
  • βœ“ No duplicate data inconsistencies
  • βœ“ Referential integrity

Analytics Ready

  • βœ“ Built-in version tracking
  • βœ“ Usage analytics by app version
  • βœ“ Device adoption metrics
  • βœ“ Performance monitoring