https://ingest.squasher.ai. This page is
the contract for request paths, media types, responses, limits, and intentional non-goals. For
setup and SDK examples, see OpenTelemetry.
Paths and authentication
Use
https://ingest.squasher.ai as the base URL. The Setup page also shows a Collector
URL. Send OTLP to https://ingest.squasher.ai instead: the rate limit and region routing on this
page apply to that endpoint.
Authenticate with one of:
x-squasher-key: <key>Authorization: Bearer <key>
Request media types
A request without
Content-Type is read as JSON. Other media types, and protobuf on /v1/ai,
return 415.
Matching is case-insensitive. A value such as Application/X-Protobuf; charset=binary is treated
as protobuf.
Compression and body size
A gzip body can expand to at most 16 MiB. A larger decompressed body returns
413. An invalid
gzip body returns 400.
Success responses
Squasher does not report a rejected subset in
partial_success. A 200 means the full request was
accepted for storage or for durable replay. Delivery is at least once, so a retry can store a
duplicate. Keep stable trace and span IDs.
Error responses
Retry
429 and 5xx with backoff. Do not retry other 4xx responses before you fix the request.
A 503 can follow a partial write, so a retry can store some records twice.
Data region
Each project stores its data in one data region.ingest.squasher.ai sends each request to the
region of the project that owns the key. Squasher does not store a project’s data in another region.
If a request reaches the wrong region, Squasher returns a retryable 503 and stores nothing.
Rate limits
Each project can send 10,000 records per minute by default. Squasher counts each span, log record, and metric point in the request. Above the limit, Squasher returns429 with Retry-After and
X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset.
What Squasher does with each signal
For attribute rename rules and issue grouping detail, see
OpenTelemetry.
Sampling and fidelity
Squasher stores the spantraceState value when the exporter sends it. It does not parse W3C
tracestate sampling keys such as ot=th, and service request and error counts use the spans
Squasher accepted, not adjusted counts. If you sample in your OpenTelemetry Collector, follow
Tail sampling so error and slow traces still reach Squasher.
Intentional non-goals
Squasher does not:- Accept OTLP over gRPC (port 4317). Use
http/protobuforhttp/json. - Host an OpenTelemetry Collector with processors for customer pipelines. Bring your own Collector when you need processors, then export OTLP/HTTP to Squasher.
- Offer a customer-facing OTLP export API. Read data through the product UI, REST API, CLI, or MCP.
- Accept protobuf on
/v1/ai. Send JSON to that path, or send AI spans on/v1/traceswith the usual GenAI attributes.
Next steps
OpenTelemetry setup
Set exporter variables and connect an SDK or Collector.
Tail sampling
Keep error and slow traces and drop routine ones.
HTTP ingest API
Send events and drain logs without OTLP.
Infrastructure monitoring
Run Squasher Collector for host and Docker metrics.