Sending OTLP
Pulse speaks OTLP/HTTP, so any OpenTelemetry Collector or SDK can send to it with no plugin.
| Endpoint | Takes |
|---|---|
POST https://pulse.nightroll.app/v1/logs |
ExportLogsServiceRequest |
POST https://pulse.nightroll.app/v1/metrics |
ExportMetricsServiceRequest |
POST https://pulse.nightroll.app/v1/traces |
Nothing yet: answers 404 with {"error":"Pulse doesn't accept traces yet"} |
Set the exporter’s endpoint to https://pulse.nightroll.app and it adds the /v1/... paths itself.
Ingest keys
Send the key as Authorization: Bearer pulse_ik_... (or as X-Pulse-Key: pulse_ik_...). Org owners and admins create and revoke keys under Ingest keys in the app, or with the MCP tools create_ingest_key and revoke_ingest_key. A key is shown once.
Ingest keys only send data. They can’t read anything, and the org’s API keys (nr_pulse_...) can’t send data.
Formats
- Protobuf (
Content-Type: application/x-protobuf), the default for SDKs and the Collector. - JSON (
Content-Type: application/json), the OTLP JSON mapping: camelCase field names, trace and span ids as hex, 64-bit integers as strings or numbers. - Compression: send
Content-Encoding: gzip; the Collector does withcompression: gzip.
A request may be at most 16 MB after decompression. Bigger requests get 413; lower the batch size.
Responses
| Status | Means | Retried by exporters |
|---|---|---|
200 |
Accepted. An empty Export*ServiceResponse, with partial_success when some rows were rejected |
— |
400 |
Malformed body | No |
401, 403 |
Missing, bad or revoked ingest key | No |
413 |
Over 16 MB decompressed | No |
429, 503 |
Pulse can’t keep up right now; Retry-After says when to try again |
Yes |
What you pay for
Ingest is metered on decompressed OTLP bytes, and each request counts as at least 128 KB, because every request costs Pulse the same however small it is. Batch: the Collector’s batch processor (send_batch_size: 8192, timeout: 10s) or OTEL_BLRP_SCHEDULE_DELAY=10000 in SDKs keeps requests large. Prices are on the pricing page.
What Pulse keeps
Every log record and metric data point becomes a row. Resource attributes, scope name and point attributes are all kept; service.name is lifted out as the row’s service. See Logs and Metrics for the fields.
Next: Logs · This page as Markdown