---
title: "Ingest Event"
method: POST
path: "/telemetry/events"
tags: ["telemetry"]
---

# Ingest Event

`POST /telemetry/events`

Store one anonymous telemetry event.

Unauthenticated and rate-limited per IP. The hot fields are denormalized
from ``properties`` into columns for cheap aggregation. Persist failures are
logged and swallowed — the CLI sends fire-and-forget, so we always return
200 rather than provoking a retry storm.

## Request body

- TelemetryEventIn — The anonymous wire envelope sent by the CLI. All fields optional except the event name; unknown extras are ignored.
  - `event` string, required
  - `anon_id` string, nullable
  - `session_id` string, nullable
  - `cli_version` string, nullable
  - `os` string, nullable
  - `arch` string, nullable
  - `python_version` string, nullable
  - `is_ci` boolean, nullable
  - `properties` object, nullable

## Response `200`

Successful Response

- AppRoutersTelemetryIngestResponse
  - `ok` boolean, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/repowise/apis/repowise-hosted-api.md) · [All operations](https://skmtc.dev/repowise/apis/repowise-hosted-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/repowise/repowise-hosted-api/revisions/1e57283a9737/schema)
