Getting Started
TracePath Cloud

TracePath Cloud

From an empty account to a trace on screen. Three steps, plus a smoke test you can run before touching your application — and no TracePath-specific dependency at any point.

1. Create an account

Sign up at app.tracepath.dev/register (opens in a new tab).

  1. Register with an email address and a password, or with one of the sign-in providers offered on that page.
  2. If you registered with a password, confirm the verification link we email you, then sign in.
  3. On first sign-in you name your organization. An organization owns your projects, your members and your plan; you are its owner.

Sign-in supports TOTP two-factor authentication, with automatic lockout after repeated failed codes. Self-serve enrolment is not in the dashboard yet — write to [email protected] if you need it on your organization before it lands.

2. Create a project and copy its token

A project is one instrumented system with its own ingest token, its own dashboards and its own issue feed. Most teams run one project per deployable service, plus one per environment that has to stay separate — see Project Structure.

Create one from the dashboard and pick the framework OpenTelemetry for anything that runs on a server. Then open the project's Connection page and copy the project token: a 32-character hex string with no prefix.

⚠️

The project token is the only credential the ingest endpoint accepts, and it is scoped to that one project. It carries no user identity, but anyone holding it can write telemetry into the project, so treat it like any other deployment secret — environment variable, not source control. Organization members with the read-only role never see it.

3. Point an exporter at the ingest endpoint

Every OpenTelemetry SDK and the OpenTelemetry Collector read the standard OTEL_* environment variables. These are the ones that matter here:

export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.tracepath.dev/api/otel"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <project token>"
export OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"
export OTEL_SERVICE_NAME="checkout-api"

The SDK appends /v1/traces, /v1/metrics and /v1/logs to the endpoint itself, so set the base path and nothing else. OTEL_EXPORTER_OTLP_PROTOCOL is not optional in practice: TracePath has no gRPC endpoint, and several SDKs pick gRPC when the variable is unset, which fails without an error message.

A Node.js service wired by hand, with the same two settings:

import { NodeSDK } from '@opentelemetry/sdk-node'
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
 
const sdk = new NodeSDK({
  traceExporter: new OTLPTraceExporter({
    url: 'https://ingest.tracepath.dev/api/otel/v1/traces',
    headers: { Authorization: `Bearer ${process.env.TRACEPATH_TOKEN}` },
  }),
})
sdk.start()

Traces, metrics and logs are three independent signals with three separate exporters. Wiring a trace exporter does not start sending logs. OpenTelemetry Integration has the per-signal and per-language details.

4. Send a first span without touching your app

If you want to prove the token and the endpoint work before you change any code, post one span by hand. This is a complete, runnable request — paste your token in place of <project token>:

TRACEPATH_TOKEN="<project token>"
NOW_NS="$(date +%s)000000000"
END_NS="$(( $(date +%s) + 1 ))000000000"
 
curl -i -X POST https://ingest.tracepath.dev/api/otel/v1/traces \
  -H "Authorization: Bearer ${TRACEPATH_TOKEN}" \
  -H "Content-Type: application/json" \
  -d "{
    \"resourceSpans\": [{
      \"resource\": {
        \"attributes\": [
          {\"key\": \"service.name\", \"value\": {\"stringValue\": \"quickstart\"}}
        ]
      },
      \"scopeSpans\": [{
        \"scope\": {\"name\": \"manual\"},
        \"spans\": [{
          \"traceId\": \"5b8efff798038103d269b633813fc60c\",
          \"spanId\": \"eee19b7ec3c1b174\",
          \"name\": \"GET /hello\",
          \"kind\": \"SPAN_KIND_SERVER\",
          \"startTimeUnixNano\": \"${NOW_NS}\",
          \"endTimeUnixNano\": \"${END_NS}\",
          \"attributes\": [
            {\"key\": \"http.request.method\", \"value\": {\"stringValue\": \"GET\"}},
            {\"key\": \"http.route\", \"value\": {\"stringValue\": \"/hello\"}},
            {\"key\": \"http.response.status_code\", \"value\": {\"intValue\": \"200\"}}
          ]
        }]
      }]
    }]
  }"

A successful export answers 200 OK with the body {}, in the same encoding you sent. Within a few seconds GET /hello appears under Endpoints for the project, attributed to the service quickstart.

The same request with a bad token answers 401 with an empty body. The Authorization header value must literally begin with Bearer .

What you get back

A span carrying HTTP attributes becomes an endpoint. Spans for queue consumers and scheduled work become tasks. Exception events recorded on any span become issues, grouped and ranked. Spans carrying gen_ai.* attributes become AI traces with token counts and cost. Nothing in your code has to know about any of those categories — see Architecture Overview.

Next steps

  • OpenTelemetry Integration — protocol limits, compression, content types and the language guides.
  • Logs and Metrics — the two signals that need wiring beyond the trace exporter.
  • Monitors — synthetic checks against your public endpoints.
  • On-call — schedules, escalation policies and paging.
  • Invite your team from the Settings page, under Team Members. Every member of the organization uses one seat, whatever their role.
  • Billing and plans — watch your ingest against the plan allowance before it surprises you.