Programmatic access (ingestion API)

ObserveKit's ingestion endpoints are the stable, externally-callable API — authenticated with a source API key (or, for install, a short-lived token). They're what the agent and OTel SDKs use, and you can call them directly.

> There is no public REST API for managing resources (sources, alerts, dashboards, etc.). Those endpoints are the web UI's own backend: they require a browser session (JWT), are CORS-locked to the UI origin, and aren't intended for programmatic use. API keys authorize ingestion only — they can't read data or manage resources.

Endpoints

Method + PathAuthPurpose
POST /v1/tracesAPI keyOTLP traces (HTTP 4318; gRPC 4317)
POST /v1/metricsAPI keyOTLP metrics
POST /v1/logsAPI keyOTLP logs
POST /api/v1/ingestAPI keyAgent log ingest
POST /api/v1/metrics/ingestAPI keyAgent metric ingest
POST /api/v1/heartbeatAPI keyAgent heartbeat / version report
GET /api/v1/agent/configAPI keyFetch the server-pushed config for this agent
POST /api/v1/webhooks/deployAPI keyRecord a deployment marker
GET /install/{token}install tokenRender the agent manifest (24h token)
GET /api/v1/healthnoneLiveness — {"status":"ok"}

Base URL in production: https://observekit-api.expeed.com.

GET /api/v1/agent/config is the one endpoint here that reads rather than writes, and it takes no source id — the source is derived from the API key, so an agent can only ever fetch its own configuration. There is no parameter that would let one key read another source's config.

Auth

Send the source API key as either header:

X-API-Key: <your-key>
Authorization: Bearer <your-key>

See API keys for where to get and how to rotate one. For OTLP specifically (per-language SDK setup, service sources) see Sending data with OpenTelemetry.

Limits

  • Body size: 10 MiB per request (compressed and decompressed). gzip and zstd accepted.
  • Rate: ingestion is limited to 600 requests/minute per source IP. Batch, don't spray single events.
  • Batch size: the agent log-ingest path caps a batch at 10,000 entries — larger batches are rejected.

Recording a deployment marker

POST /api/v1/webhooks/deploy with your API key writes a marker that shows up on charts (see Deployments) so you can correlate a rollout with a metric/error change.

Health check

GET /api/v1/health needs no auth and returns {"status":"ok","service":"observekit-server"} — use it for uptime probes.