# Sending telemetry (endpoints, keys, languages, Collector)

Endpoint: https://<address>.powertraces.com on port 443 takes both OTLP gRPC and OTLP HTTP (the standard paths /v1/traces, /v1/logs,
/v1/metrics). Ports 4317 (gRPC) and 4318 (HTTP) also work.
Authentication: one header, X-Otel-Api-Key: <key> (or Authorization: Bearer <key>). Servers and collectors use a server key; web pages
use a browser key. There is no secret.
Standard environment variables (every SDK reads them, no code changes):
  OTEL_SERVICE_NAME=checkout-api
  OTEL_EXPORTER_OTLP_PROTOCOL=grpc            (or http/protobuf)
  OTEL_EXPORTER_OTLP_ENDPOINT=https://<address>.powertraces.com
  OTEL_EXPORTER_OTLP_HEADERS=X-Otel-Api-Key=<server key>
  OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production,service.version=1.4.2
Languages:
- .NET: add OpenTelemetry.Extensions.Hosting, OpenTelemetry.Exporter.OpenTelemetryProtocol and the AspNetCore, Http and Runtime
  instrumentation packages; call AddOpenTelemetry().WithTracing(...).WithMetrics(...).WithLogging().UseOtlpExporter(). ILogger logs go too.
- Node.js: npm install @opentelemetry/api @opentelemetry/auto-instrumentations-node, then start with
  node --require @opentelemetry/auto-instrumentations-node/register app.js. Covers Express, Fastify, NestJS, http, pg, mysql, Redis.
  Node defaults to HTTP; set OTEL_LOGS_EXPORTER=otlp for logs.
- Java: download opentelemetry-javaagent.jar and run java -javaagent:opentelemetry-javaagent.jar -jar app.jar. Instruments Spring,
  JAX-RS, JDBC, Kafka and gRPC, and bridges Logback/Log4j logs.
- Python: pip install opentelemetry-distro opentelemetry-exporter-otlp, run opentelemetry-bootstrap -a install, then start with
  opentelemetry-instrument (for example opentelemetry-instrument gunicorn app:app). Set OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true for logs.
  Covers Django, Flask, FastAPI, requests, SQLAlchemy and psycopg.
- Go: use the OpenTelemetry Go SDK with the otlptracegrpc exporter and wrap HTTP handlers with otelhttp so routes reach API health.
- Browser: @opentelemetry/sdk-trace-web with the OTLP HTTP exporter to https://<address>.powertraces.com/v1/traces, using a browser
  key that lists the allowed websites (browser code is public). Let fetch propagate the trace header to your APIs so a page and its API
  calls land in one trace. Browsers send over HTTP only.
- OpenTelemetry Collector: receive OTLP from services and export with the otlp exporter to <address>.powertraces.com:443 with a server
  key. Recommended: one Collector per cluster, so the key lives in one place and noisy attributes can be dropped.
Any other language with an OpenTelemetry SDK (Ruby, PHP, Rust, Swift, Erlang/Elixir and more) works the same way through OTLP.
