Open the Traces dashboard
Browse traced conversations and run Reflexes over them.
Instrument your app
Install the SDK with the OpenTelemetry extra, then initialize once at startup. After that, calls to the instrumented SDKs are traced automatically.begin opens an interaction you can enrich — set_input, set_property, and with_tool / with_span to nest tool calls — and finish closes it. The event_id it mints is the join key the Reflex labels attach to.
Configuration
Pass these tomorph_tracing / morphTracing. Every field is optional.
| Field (py / ts) | Type | Default | Description |
|---|---|---|---|
api_key / apiKey | string | MORPH_API_KEY | Sent as Authorization: Bearer <key> to the ingest endpoint. |
base_url / baseUrl | string | MORPH_TRACES_URL → https://api.morphllm.com | Ingest base. Traces POST to {base_url}/v1/traces. |
app_name / appName | string | — | Service name stamped on every span. |
disabled | boolean | false | Turn tracing off without removing the call. |
trace_content / traceContent | boolean | true | Set false to drop prompt/response content (zero data retention). |
instrument_modules / instrumentModules | set | all detected | Limit which SDKs are instrumented. |
disable_batching / disableBatching | boolean | false | Export spans one at a time (useful in serverless). |
use_external_otel / useExternalOtel | boolean | false | Reuse an OpenTelemetry setup you already configured. |
headers | object | — | Extra headers on the export request. |
debug | boolean | false | Log exporter activity. |
Ingest directly
If you already emit OpenTelemetry spans, skip the SDK and POST OTLP/JSON straight to Morph. This is the same endpoint the SDK exports to.| Body | OTLP/JSON (OpenTelemetry traces). |
| Auth | Authorization: Bearer sk-... |
| Max body | 8 MiB (413 over the limit). |
| Success | 202 with an empty body. |
morph.account.* attributes are stripped. For zero-data-retention keys (or when you set trace_content: false), prompt/response content is dropped before storage.
cURL
List traced turns
Browse the turns you’ve ingested — the same data behind the Traces dashboard.| Query param | Type | Description |
|---|---|---|
limit | integer | Rows per page. Default 100, max 1000. |
offset | integer | Pagination offset. |
convo_id | string | Filter to one conversation. |
Reflexes overview
Label every traced turn — jailbreaks, loops, frustration, and more.
Classify a backlog
Run Reflexes over past traces with the async batch API.