PutEvent to ImportEvents APIs request and response mapping
This guide details the request and response mapping specifications and property parity analysis for migrating from the legacy Ingestion API (PutEvent) to the modern Chronicle API (ImportEvents).
[!IMPORTANT] The modern
ImportEventsAPI does not accept legacy Ingestion API keys or partner tokens. Callers must authenticate using standard Google Cloud IAM credentials authorized for the target instance resource.
Protocol and mapping overview
| Feature | Legacy API (PutEvent) |
Modern Chronicle API (ImportEvents) |
|---|---|---|
| HTTP method | POST |
POST |
| Permissions | Ingestion API key or legacy partner tokens | chronicle.googleapis.com/events.import |
Request payload field-by-field parity
In the legacy API, PutEvent accepted a low-level pipeline container (PutEventRequest.batch) containing internal malachite.Event objects with disparate protocol-specific payloads (oneof payload). In the modern Chronicle API, all event ingestion is unified through ImportEventsRequest, which scopes the request to the parent instance in the URL path and wraps the event batch inside an inline_source structure containing Universal Data Model (UDM) events.
Legacy field (PutEventRequest.batch) |
Modern field (ImportEventsRequest) |
Field type | Parity and migration notes |
|---|---|---|---|
source.customer_id |
parent (in HTTP path) |
string |
Google Cloud scoping hierarchy: In the legacy API, the target customer was identified within the source.customer_id field or inferred from the API key. In the modern API, the parent instance is explicitly specified in the request URL: projects/{project}/locations/{location}/instances/{instance}. |
| — | inline_source |
EventsInlineSource (oneof source) |
Encapsulation wrapper: The modern API encapsulates ingested events inside a oneof source container. Inlined event batches are provided within inline_source. |
events |
inline_source.events |
repeated Event |
Parity mapped to canonical UDM events: List of events to ingest. While the legacy API carried internal malachite.Event objects with typed payloads, the modern API standardizes on canonical Event resources embedding the backstory.UDM schema. |
id |
— | bytes |
Internal batch identifier: Unique batch deduplication key used in legacy backend pipelines; not exposed in the modern REST API contract. |
source.collector_id |
— | bytes |
Forwarder binding: In the legacy API, collector identification was passed in the source struct. In modern Chronicle, forwarder and collector attribution is managed using Chronicle Forwarder resource bindings. |
source.namespace |
inline_source.events[].udm |
string |
Shifted to UDM noun namespace: Legacy environment namespace is mapped to respective UDM entity/noun namespaces or managed using instance configurations. |
source.labels |
inline_source.events[].udm |
repeated backstory.Label |
Shifted to UDM labels: Custom labels are represented in UDM metadata or entity definitions. |
type |
inline_source.events[].udm.metadata.event_type |
EventType enum |
Mapped to UDM event taxonomy: Legacy event type classifications (such as DNS, DHCP, ALERT, USER, EDR) map to standard Universal Data Model event_type enumerations. |
start_time / is_replay / replay_time |
— | google.protobuf.Timestamp / bool |
Internal pipeline metadata: Legacy collector session and replay markers; telemetry replay and ordering in modern Chronicle is governed by event and collection timestamps. |
Event structure parity (malachite.Event versus google.cloud.chronicle.v1main.Event)
Each item in inline_source.events is an Event resource container whose internal udm field unifies the disparate legacy payload types into the Universal Data Model:
Legacy field (malachite.Event) |
Modern field (Event) |
Field type | Parity and migration notes |
|---|---|---|---|
| — | name |
string |
New field: Optional canonical resource name of the event (projects/{project}/locations/{location}/instances/{instance}/events/{event_id}). |
payload (oneof payload) / idm |
udm |
backstory.UDM |
Unified UDM payload: The legacy API utilized a polymorphic oneof payload containing separate message schemas (DnsEvent, DhcpEvent, AlertEvent, WebProxyEvent, EdrEvent, StatsEvent) or wrapped idm. Modern ImportEvents consolidates all telemetry into the Universal Data Model schema (backstory.UDM). |
timestamp |
udm.metadata.event_timestamp |
google.protobuf.Timestamp |
Direct mapping: Time at which the event occurred. |
collection_time |
udm.metadata.collected_timestamp |
google.protobuf.Timestamp |
Direct mapping: Time at which the event was collected by the collector or agent. |
raw_log_index / disambiguation_key |
udm.metadata.id |
int32 / bytes |
Event identity: Event tracking and deduplication in the modern schema is represented by the unique UDM identifier. |
Response payload field-by-field parity
Both endpoints return an empty confirmation payload upon successful receipt of the events.
Legacy field (PutEventResponse) |
Modern field (ImportEventsResponse) |
Field type | Parity and migration notes |
|---|---|---|---|
| — | — | message |
Equivalent: Both APIs return an empty JSON object ({}) upon successful validation and queuing of the event batch. |
Key differences
- Internal pipeline format vs. Universal Data Model (UDM) standardization:
- Legacy
PutEventtransmitted events using internalmalachite.EventBatchstructures with fragmented, protocol-specific payloads (DnsEvent,DhcpEvent,StatsEvent,WebProxyEvent,AlertEvent). - Modern
ImportEventsstandardizes all incoming telemetry on the Universal Data Model (backstory.UDM), providing consistent entity, network, and security semantics across all data sources.
- Legacy
- Specialized forwarder heartbeat telemetry:
- In legacy production environments,
PutEventwas primarily restricted to forwarder heartbeat events (type: STATS). - For forwarder-specific collector telemetry and health statistics in modern Chronicle, callers can also leverage the dedicated
ImportStatsEventsAPI (chronicle.googleapis.com/forwarders.importStatsEvents).
- In legacy production environments,
- Resource-scoped URL vs. global endpoint:
- Legacy
PutEventposted to/v1/event:put, embedding tenant information withinsource.customer_idor resolving it from API credentials. - Modern
ImportEventsadheres to Google Cloud resource hierarchy conventions, placing instance ownership directly in the URL path (projects/{project}/locations/{location}/instances/{instance}).
- Legacy
- Atomic all-or-nothing batch validation:
- Modern
ImportEventsenforces atomic validation: all events in the batch must conform to valid UDM structures. Any validation error in a single event causes the entire import request to fail.
- Modern
- Modern IAM authorization:
- Authentication shifts from legacy Ingestion API keys and partner tokens to standard Google Cloud IAM OAuth 2.0 bearer tokens with permission check
chronicle.googleapis.com/events.import.
- Authentication shifts from legacy Ingestion API keys and partner tokens to standard Google Cloud IAM OAuth 2.0 bearer tokens with permission check