I have a working chain/while setup that polls an async job-status endpoint until completion — this part works correctly, and only the final ("finished") response reaches message/event.original, as expected.
The problem: response_split isn't splitting that final response into multiple documents. The entire JSON body — results array and all — lands as a single document instead of one document per array item.
Config (via Fleet package policy API):
PUT kbn:/api/fleet/package_policies/7830640f-15a4-4c94-8614-e4d9d12bed73
{
"package": {
"name": "httpjson",
"version": "1.18.0",
"experimental_data_stream_features": []
},
"name": "Sekoia | Silent Intakes Monitor",
"namespace": "",
"description": "Detects Sekoia intakes with no events in the last 24h, enriched with 7-day average for context",
"policy_ids": [
"2d583987-fb02-4665-8751-771e3106186f"
],
"vars": {},
"inputs": {
"generic-httpjson": {
"enabled": true,
"streams": {
"httpjson.generic": {
"enabled": true,
"vars": {
"data_stream.dataset": "sekoia_silent_intakes",
"pipeline": "sekoia_silent_intakes",
"request_url": "https://api.sekoia.io/v1/notebooks/queries/runs",
"request_interval": "1h",
"request_method": "POST",
"request_body": "...",
"request_transforms": "- set:\n target: header.Authorization\n value: 'Bearer ...'\n- set:\n target: header.Content-Type\n value: application/json",
"response_split": "target: body.results",
"request_redirect_headers_ban_list": [],
"oauth_scopes": [],
"chain": "- while:\n request.method: GET\n request.url: 'https://api.sekoia.io/v1/notebooks/queries/runs/$.uuid'\n replace: $.uuid\n request.transforms:\n - set:\n target: header.Authorization\n value: 'Bearer ...'\n until: '[[ eq .last_response.body.status \"finished\" ]]'\n request.retry.max_attempts: 15\n request.retry.wait_min: 5s\n request.retry.wait_max: 30s",
"tags": [
"forwarded"
]
}
}
}
}
}
}
Example final response body (anonymized, truncated to 3 of 1314 real items):
{
"status": "finished",
"total": 1314,
"results": [
{"name": "Intake-A", "community_context.name": "Community-A", "last24h": 0, "SevenDayAverage": 0},
{"name": "Intake-B", "community_context.name": "Community-B", "last24h": 0, "SevenDayAverage": 0},
{"name": "Intake-C", "community_context.name": "Community-C", "last24h": 0, "SevenDayAverage": 0}
]
}
results is a genuine top-level JSON array, matching response_split: target: body.results exactly — yet no split occurs; the whole body is ingested as one document.
Things I've tried:
- Adding
type: arrayandkeep_parent: falsetoresponse_split - Placing
response_splitat the top level (sibling ofchain) — current state - Confirmed via
GET /api/fleet/agent_policies/{id}/fullthatresponse_splitis present in the compiled config
Question: does response_split apply to the final response of a chain/while sequence the same way it does for a non-chained single request, or is there a different mechanism/placement needed for splitting a chained response? Any pointers on what's misconfigured here would be appreciated.