https://ingest.squasher.ai receive telemetry. Use them when you build a
custom integration or forward data from a provider, and an SDK or OpenTelemetry exporter does not fit.
Browser requests
When your request includes anOrigin header, ingest responses include CORS headers.
This includes authentication errors and HTTP 500 responses, so your browser can read the response status and body.
OTLP ingestion
POST https://ingest.squasher.ai/v1/tracesPOST https://ingest.squasher.ai/v1/logsPOST https://ingest.squasher.ai/v1/metrics
x-squasher-key authentication header.
Successful OTLP responses confirm durable acceptance. During a telemetry-store interruption, accepted batches can enter regional recovery storage and appear after live data. Delivery is at least once, so stable OpenTelemetry event identities remain important. Retry 429 and 5xx responses with bounded exponential backoff.
Error ingestion
Required headers
x-squasher-keyContent-Type: application/jsonorapplication/x-ndjson
Accepted body shapes
Withapplication/json, send any of these shapes:
- One event object
- A top-level array of event objects
- An envelope shaped as
{ "events": [...] }
application/x-ndjson, send one event object per non-empty line. Empty, malformed, and non-object event payloads return 400 and are not forwarded.
Typical fields
messagetypestackor parsedframeslevelenvironmentreleasetags,user,request, andextra(abreadcrumbsfield is accepted but not stored today)
Provider drains
{platform} is a name such as vercel, heroku, flyio, or cloudflare, with lowercase
letters, digits, _, and -. See the drain record format
for the fields that Squasher keeps.
Accepted bodies
- A JSON array of log objects, or one JSON object per line
- Heroku Logplex (
Content-Type: application/logplex-1): octet-counted RFC 5424 syslog messages - Any of these compressed with gzip or
deflate. Squasher also detects gzip without aContent-Encodingheader. Other encodings return415.
413.
Levels
A top-levellevel or severity field is used as sent. Otherwise Squasher uses the platform
level (Fly.io log.level, the syslog severity), then the message: a JSON or level= field, a
leading level word such as ERROR or [WARN], or a stack trace. Lines at error or above
create issues.
Environment
Squasher reads the environment from the entry (environment, deployment.environment.name,
deployment.environment, or Vercel target). If the entry has none, add environment to the
drain URL, for example ?environment=production. Values can contain letters, digits, ., _, and - (at most 64
characters). Automatic AI triage starts only for issues with an enabled environment.
AI workflow ingest
For agent sessions, model generations, and tool calls, prefer the Agent telemetry SDK. Custom senders can post Langfuse-compatible AI batches to:x-squasher-key header. See the OpenRouter direct HTTP example for a worked batch payload.