04
Telemetry
Errors in, changes out. ChangeBox groups production errors by what actually broke and files one change when a group repeats — reported by the Telemetry agent, through the same gates as everything else.
Not a log drain
No model reads your logs. Grouping is deterministic: service, environment, error type, normalised message and the top frames. A group that crosses the threshold inside the window becomes one change with a Change Spec, a policy decision and a Slack card that updates in place with the count. One defect, one change — never a card per error, never a refile of something you already fixed or declined.
Any language, one request
POST /api/ingest/events x-changebox-ingest-key: cbi_…
{ "events": [{
"level": "error",
"message": "Segmind 422 on seedance",
"service": "cinema-backend", "env": "production",
"url": "https://api.cinema.test/v1/shots/sh_1",
"error": { "type": "ProviderError", "message": "…", "stack": "…" },
"attributes": { "model": "seedance-2.5", "requestId": "req_1" }
}] }error and fatal only; anything lower is dropped on arrival. The ingest key can only write signals. Create it on the app's Signals page; it is shown once. From TypeScript, @changebox/sdk ships a batching client that never throws and never blocks.
Already on OpenTelemetry?
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://changebox.ai/api/ingest/otlp/v1/logs OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/json OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-changebox-ingest-key=cbi_… OTEL_RESOURCE_ATTRIBUTES=service.name=cinema-backend,deployment.environment=production
Point the OTLP/HTTP JSON logs exporter here and change nothing else. Cloudflare Workers export natively: add a Logs destination with the same URL and header. Traces and metrics are not accepted — ChangeBox is a defect intake, not an APM. Send those to your observability platform; ChangeBox will happily sit beside it.
What gets filed
threshold 3 errors in 15 minutes → file a change max per day 5 changes → the rest stay cards environments production → staging noise stays noise card only changebox: "card" → vendor outage: card in Slack, no change
Tune all of it on the app's Signals page. A service can mark an error changebox: "card" to say “tell the team, do not file” — right for a provider being down. A group whose change was confirmed and then recurs reopens that change with the new evidence instead of starting over.