Managed OTLP Endpoint
Sematext Cloud has two ways to receive OpenTelemetry telemetry from your applications:
- Managed OTLP endpoint — your app ships OTLP directly to Sematext's hosted receiver. Recommended for new setups: no extra agent infrastructure, simplest configuration, works from any environment with outbound HTTPS.
- Sematext Agent as a local OTLP receiver — your app ships to a local agent which forwards to Sematext. Use this when you also want infrastructure monitoring (eBPF metrics, Network Map, container/host resource collection) — see Sematext Agent OpenTelemetry.
This page documents the managed OTLP endpoint flow.
When to pick which flow¶
| You want | Pick |
|---|---|
| Fastest setup, no extra software to install on your hosts | Managed OTLP endpoint |
| One env-var block per service, works in any deployment environment | Managed OTLP endpoint |
| Also collecting host/container metrics via eBPF, Network Map, infra dashboards | Sematext Agent |
| Telemetry credentials kept off application hosts | Sematext Agent |
| Local buffering and batching across many app instances | Sematext Agent |
The two flows can also be mixed — different services in your stack can use different flows and still produce a single distributed trace, since trace context propagates through W3C headers regardless of how each service ships its spans.
Endpoints¶
| Region | Protocol | OTEL_EXPORTER_OTLP_ENDPOINT |
OTEL_EXPORTER_OTLP_PROTOCOL |
|---|---|---|---|
| US | HTTP (default) | https://otlp-receiver.sematext.com |
http/protobuf |
| US | gRPC | https://otlp-receiver-grpc.sematext.com:443 |
grpc |
| EU | HTTP (default) | https://otlp-receiver.eu.sematext.com |
http/protobuf |
| EU | gRPC | https://otlp-receiver-grpc.eu.sematext.com:443 |
grpc |
Default to HTTP unless you have a specific reason for gRPC (lower per-payload overhead at high volume, etc.). The OpenTelemetry SDKs support both transparently — just pair the right endpoint URL with the matching OTEL_EXPORTER_OTLP_PROTOCOL value.
Region matters
Tokens are region-bound. A US-region token sent to the EU endpoint (or vice versa) silently drops data — no error, no rejection at the SDK level. Pick the endpoint that matches the region of the Sematext Cloud account that owns your Apps.
Authentication¶
Sematext uses a custom header X-API-TOKEN=<token> instead of the standard Authorization: Bearer … shown in many generic OpenTelemetry examples on the web. The OpenTelemetry SDKs let you pass arbitrary headers via the per-signal headers environment variables, which is the recommended path — works uniformly across all language SDKs.
export OTEL_EXPORTER_OTLP_TRACES_HEADERS=X-API-TOKEN=<tracing-app-token>
export OTEL_EXPORTER_OTLP_LOGS_HEADERS=X-API-TOKEN=<logs-app-token>
export OTEL_EXPORTER_OTLP_METRICS_HEADERS=X-API-TOKEN=<monitoring-app-token>
One token per App¶
A Tracing App, a Logs App, and a Monitoring App in Sematext Cloud are three separate Apps, each with its own token. The OpenTelemetry HTTP exporter uses per-signal headers (TRACES_HEADERS, LOGS_HEADERS, METRICS_HEADERS), so you map each signal to the right App's token. Omit the header for a signal you're not shipping — the SDK just won't try to export it.
Full env-var block¶
A complete, ready-to-paste configuration for an EU account shipping all three signals to managed OTLP over HTTP:
# Endpoint + protocol — pick one row from the matrix above
export OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp-receiver.eu.sematext.com
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
# Per-signal token headers. Omit any line for a signal you're not shipping.
export OTEL_EXPORTER_OTLP_TRACES_HEADERS=X-API-TOKEN=<tracing-app-token>
export OTEL_EXPORTER_OTLP_LOGS_HEADERS=X-API-TOKEN=<logs-app-token>
export OTEL_EXPORTER_OTLP_METRICS_HEADERS=X-API-TOKEN=<monitoring-app-token>
# Service identity — service.name is what you'll see in the UI.
export OTEL_SERVICE_NAME=my-service
export OTEL_SERVICE_VERSION=1.0.0
With auto-instrumentation, this env block plus the SDK's auto-instrumentation hook is all you need to start producing traces and metrics. Logs require manual instrumentation in most language SDKs today — see the per-language pages under OpenTelemetry SDKs.
Compression¶
The managed OTLP receiver accepts payloads compressed with gzip or zstd (HTTP path uses the Content-Encoding header; gRPC negotiates per-call). At low telemetry volume the savings don't matter much, but for high-volume shipping compression typically reduces payload size 5–10× — meaningful for both bandwidth and receiver throughput.
Enable via the standard OpenTelemetry env var:
gzip is universally supported across OpenTelemetry SDKs and is the safe default. zstd produces smaller payloads but support varies — currently the Go SDK and recent Java SDK releases support it; other languages either don't support it yet or require extra setup. Check your language SDK's documentation before picking it.
Where to get the token¶
The App creation wizard pre-fills the env vars (with your token already inserted) at the "Send Traces To Sematext" step:

For existing Apps, the token is available in: Sematext Cloud → open the App → Integrations → copy the App token.
Browser-side OpenTelemetry¶
The managed OTLP endpoint doesn't currently accept cross-origin requests from browsers, so browser-side OpenTelemetry can't POST spans to it directly. The standard workaround is to have your backend act as a same-origin proxy — the browser ships to /api/otel-proxy/v1/traces on its own backend, and the backend forwards to the managed endpoint with the X-API-TOKEN header attached.
A complete worked example using React + Express lives in the sematext-otel-onboarding repository, including the CORS handling and a four-span end-to-end trace tree.
Troubleshooting¶
| Symptom | Likely cause |
|---|---|
| No data within ~60 seconds | Token-region mismatch (US token sent to EU endpoint or vice versa), or the wrong endpoint URL paired with the wrong protocol setting |
Connection refused on the endpoint |
OTEL_EXPORTER_OTLP_PROTOCOL=grpc with the HTTP endpoint URL, or the opposite — pair must match |
401 / 403 from the receiver |
Header is being sent as Authorization: Bearer … instead of X-API-TOKEN=…. Use the OTEL_EXPORTER_OTLP_*_HEADERS env vars rather than hand-coding the exporter. |
| Traces ship but metrics don't (or vice versa) | The signal-specific header isn't set, or the SDK's auto-instrumentation doesn't enable that signal by default — many language SDKs require a flag to opt into metrics |
| Browser-side OTel POST blocked by CORS | Expected — see Browser-side OpenTelemetry above |
Related¶
- AI-Powered OTel Onboarding — interactive setup walkthrough
- Sematext Agent OpenTelemetry — the alternative flow
- Setup OpenTelemetry with Sematext Cloud for Metrics and Logs — Logs App + Monitoring App onboarding via the agent
- Creating a Tracing App
- OpenTelemetry SDKs — per-language reference
- sematext-otel-onboarding repository — runnable reference examples per language and an end-to-end multi-service demo