Skip to main content
The ingest endpoints at 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 an Origin 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/traces
  • POST https://ingest.squasher.ai/v1/logs
  • POST https://ingest.squasher.ai/v1/metrics
These endpoints accept OTLP/HTTP protobuf or JSON payloads with the same 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-key
  • Content-Type: application/json or application/x-ndjson

Accepted body shapes

With application/json, send any of these shapes:
  • One event object
  • A top-level array of event objects
  • An envelope shaped as { "events": [...] }
With 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

  • message
  • type
  • stack or parsed frames
  • level
  • environment
  • release
  • tags, user, request, and extra (a breadcrumbs field 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 a Content-Encoding header. Other encodings return 415.
A request can be at most 16 MiB, before and after decompression. Larger requests return 413.

Levels

A top-level level 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:
Use the same x-squasher-key header. See the OpenRouter direct HTTP example for a worked batch payload.

Agent handoff

Use ingestion endpoints only when an SDK, OpenTelemetry exporter, or managed connector is not the better fit:
Agents should never hardcode real keys. For reusable log sources, create a managed connector through the Log Connectors API, CLI, or MCP Code Mode instead of sharing the project key.