BatchCreateEntities to ImportEntities 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 v2 (BatchCreateEntities) to the modern Chronicle API (ImportEntities).
[!IMPORTANT] The modern
ImportEntitiesAPI 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 v2 (BatchCreateEntities) |
Modern Chronicle API (ImportEntities) |
|---|---|---|
| HTTP method | POST |
POST |
| Permissions | Ingestion API key or legacy partner tokens | chronicle.googleapis.com/entities.import |
Request payload field-by-field parity
In the legacy Ingestion API v2, callers sent entity batches using BatchCreateEntitiesRequest, placing customer_id, log_type, and entities directly at the top level of the request body. In the modern Chronicle API, entities are ingested through ImportEntitiesRequest, which scopes the request to the parent instance in the URL path and wraps the entity payload inside an inline_source structure.
Legacy field (BatchCreateEntitiesRequest) |
Modern field (ImportEntitiesRequest) |
Field type | Parity and migration notes |
|---|---|---|---|
customer_id |
parent (in HTTP path) |
string |
Google Cloud scoping hierarchy: In the legacy API v2, customer identification was passed using the customer_id request body field. In the modern API, the parent instance is explicitly specified in the request URL: projects/{project}/locations/{location}/instances/{instance}. |
| — | inline_source |
EntitiesInlineSource (oneof source) |
Encapsulation wrapper: The modern API encapsulates ingested entities inside a oneof source container. Inlined entities are provided within inline_source. |
log_type |
inline_source.log_type |
string |
Parity mapped: The log type identifying the source of the entity telemetry (for example, OKTA, AZURE_AD, or ACTIVE_DIRECTORY). In the modern API, this references a valid chronicle.googleapis.com/LogType resource. |
entities |
inline_source.entities |
repeated Entity |
Parity mapped with canonical resource naming: Repeated list of entities to be ingested. The entity schema preserves full compatibility with the UDM Entity model (metadata, entity noun, relations, additional, risk_score, metric) while adding an optional canonical resource name attribute in the modern schema. |
Entity structure parity (backstory.Entity versus google.cloud.chronicle.v1main.Entity)
The schema of each entity in inline_source.entities retains complete structural alignment with the legacy UDM entity format:
| Entity field | Field type | Parity and migration notes |
|---|---|---|
name |
string |
New field: Canonical resource name of the entity (projects/{project}/locations/{location}/instances/{instance}/entities/{entity}). |
metadata |
EntityMetadata |
Direct mapping: Contains entity metadata including product_entity_id, collected_timestamp, creation_timestamp, interval, vendor_name, product_name, product_version, entity_type, feed, and threat/IOC intelligence metadata. |
entity |
Noun |
Direct mapping: The primary UDM Noun representing the entity (such as user, asset, resource, file, process, domain_name, url, or ip_address). |
relations |
repeated Relation |
Direct mapping: Defines directed or bidirectional relationships between this entity and related entities (for example, OWNS, ADMINISTERS, MEMBER, EXECUTES, DOWNLOADED_FROM, or CONTACTS). |
additional |
google.protobuf.Struct |
Direct mapping: Dynamic structured JSON object for supplemental attributes that cannot be accommodated within standard UDM fields. |
risk_score |
EntityRisk |
Direct mapping: Contextual risk scoring details associated with the entity. |
metric |
Metric |
Direct mapping: Numerical and statistical metrics associated with the entity when entity_type is METRIC. |
Response payload field-by-field parity
Both endpoints return an empty confirmation payload upon successful receipt of the entities.
Legacy field (BatchCreateEntitiesResponse) |
Modern field (ImportEntitiesResponse) |
Field type | Parity and migration notes |
|---|---|---|---|
| — | — | message |
Equivalent: Both APIs return an empty JSON object ({}) upon successful validation and queuing of the entity batch. |
Key differences
- Resource-scoped URL vs. global endpoint:
- Legacy
BatchCreateEntitiessent requests to a global endpoint (/v2/entities:batchCreate), requiring callers to supplycustomer_idin the request body. - Modern
ImportEntitiesadopts Google Cloud resource hierarchy standards, placing instance ownership directly in the URL path (/v1/projects/{project}/locations/{location}/instances/{instance}/entities:import).
- Legacy
- Payload encapsulation (
oneof source):- Legacy
BatchCreateEntitiesRequestacceptedlog_typeandentitiesdirectly at the root level of the payload. - Modern
ImportEntitiesRequestwraps the entity batch in aninline_sourcestructure (EntitiesInlineSource), standardizing the import contract across direct inline uploads and future asynchronous source ingestion.
- Legacy
- Modern IAM authorization:
- Authentication transitions from legacy Ingestion API keys and partner tokens to standard Google Cloud IAM bearer tokens with granular permission enforcement (
chronicle.googleapis.com/entities.import).
- Authentication transitions from legacy Ingestion API keys and partner tokens to standard Google Cloud IAM bearer tokens with granular permission enforcement (
- All-or-nothing batch validation:
- Both legacy v2 and modern APIs enforce atomic validation across the entire batch: all entities in the request must be valid for the call to succeed. A validation error in any single entity causes the entire import request to fail.
- Schema continuity:
- The internal schema of
Entityremains fully consistent with the Universal Data Model (UDM) Entity definition, ensuring existing entity construction pipelines can migrate to the modern API with minimal transformation beyond payload wrapping.
- The internal schema of