---
title: "Ingest Chute Logs"
method: POST
path: "/instances/launch_config/{config_id}/logs"
tags: ["Instances"]
---

# Ingest Chute Logs

`POST /instances/launch_config/{config_id}/logs`

## Request

- Base URL: `https://api.chutes.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.chutes.ai/instances/launch_config/{config_id}/logs`
- Auth: none declared

Ingest chute pod logs streamed by the in-guest log shipper.

mTLS-only, via the cvm proxy: the guest presents its per-boot registry mTLS leaf and the
``resolve_log_context`` dependency binds the shipment to the launch-config owner (cross-miner
injection is rejected there; the auth result is cached per (config_id, cert) so a burst of
batches doesn't re-verify). Identity is derived server-side — the body carries only
``deployment_id`` + the log lines.

Cutoff contract (docs/specs/chute-log-shipper.md): **204** = stop capturing this pod,
**200** = keep sending, **403/404** = terminal reject (unauthorized / unknown config), which
the guest also treats as stop. The lines are ingested BEFORE the cutoff is evaluated so a
final crash batch is always stored.

## Path parameters

- `config_id` string, required

## Request body

- LogShipmentArgs: Request body for POST /instances/launch_config/{config_id}/logs. ``deployment_id`` is the sole top-level metadata field: it is non-security correlation data (Grafana filtering only) that the validator cannot derive from ``config_id`` in the pre-registration window, so the guest supplies it from the ``chutes/deployment-id`` pod label. It is never used for auth.
  - `deployment_id` string: From the chutes/deployment-id pod label; empty if absent. Never used for auth.
  - `logs` LogLine[]
    - `ts` string, required: RFC3339 nanosecond timestamp, e.g. 2026-07-27T00:00:00.123456789Z
    - `stream` string: stdout | stderr
    - `log` string: The log line content

## Response `200`

Successful Response

- string

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-16** `23e8895b217d`: 1 breaking, 2 info
  - the response's body type changed from no type to `string` for status `200`
  - added the optional property `detail/items/ctx` to the response with the `422` status
  - added the optional property `detail/items/input` to the response with the `422` status
- **2026-08-26** `8d909638091e`: 1 info
  - endpoint added
- **2026-08-22** `05d9af05d87e`: 1 breaking
  - api path removed without deprecation
- **2026-08-04** `352418d4e3a2`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/chutes/apis/chutes-api/changes/instances/launch_config/:config_id/logs/post.md)

---

[API](https://skmtc.dev/chutes/apis/chutes-api.md) - [All operations](https://skmtc.dev/chutes/apis/chutes-api/llms.txt) - [OpenAPI document](https://skmtc.dev/chutes/apis/chutes-api/revisions/8add5b0e22da?raw)
