Finalise Step Logs
Uploads the step's JSONL log content (up to 10 MiB) to pipeline-logs/<run_id>/<step_id>/logs.jsonl and records the key and truncation flag on the step run. A final (non-partial) flush is skipped when a log object is already recorded, so the side-car's own flush wins over the coordinator's pod-log fallback; final flushes also drop the live-tail history. NotFound when the step run is missing.
Access: internal only — step-scoped. Requires the per-step JWT in X-Upl-Step-Token (HS256 over PIPELINE_INTERNAL_TOKEN, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared X-Upl-Internal-Token is accepted instead only while PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK is enabled.
JWT access token obtained via OAuth2 flow or service account
In: header
Header Parameters
Define the version of the Connect protocol
Define the timeout, in ms
Request Body
application/json
uuidlength <= 255Full log content as JSONL bytes. Side-car caps at 10MB (matches the design plan) and emits a truncation marker line in-band.
bytelength <= 10485760True when the side-car hit its in-memory cap and dropped lines. validate:skip a bool has no bounds
True when this is a partial flush (step still running). Server writes the same S3 object so a reconnecting UI after an api restart can recover the buffer, but does NOT drop the live-tail history ring (subscribers still need it). False = final flush at step completion (default; preserves existing behaviour). validate:skip a bool has no bounds
Response Body
application/json
application/json
curl -X POST "https://uploads-api.xeonr.io/uplim.api.v1.InternalPipelineRunsService/FinaliseStepLogs" \ -H "Connect-Protocol-Version: 1" \ -H "Connect-Timeout-Ms: 1000" \ -H "Content-Type: application/json" \ -d '{}'{}{
"code": "not_found",
"message": "string",
"details": [
{
"type": "string",
"value": "string",
"debug": {}
}
]
}