Telemetry
Structured-event contract catalog

Event schema examples built around outcomes

Choose the service that owns the outcome, emit one durable event at the correct grain, and keep identifiers useful without copying sensitive payloads into analytics.

Reviewed by the Telemetry product team on . Event grain, ownership, required fields, privacy classification, example payloads, and related SQL. Review standards and ownership

8

complete contracts

73

documented fields

No emails, prompts, payloads, tokens, or destination URLs

Example identifiers are synthetic and privacy classifications are starting points for your own review.

Emit at the outcome

Record the event only when the service knows the final status, duration, and business identifier.

Name the grain

One row per request, job, payment attempt, or durable milestone prevents accidental double counting.

Bound cardinality and privacy

Prefer route templates and stable IDs. Exclude raw URLs, emails, prompts, payloads, credentials, and stack traces.

Product lifecycleuser_signed_up

Which signup cohorts activate and retain?

A durable account-entry event with acquisition and plan context. Keep identity pseudonymous and capture marketing attribution only after privacy review.

Grain
One accepted signup per user and account.
Owner
Identity or onboarding service
Emit when
After the account and first user are committed successfully.
FieldTypeRequiredPrivacyMeaning
timestamp_utctimestampyesnon-sensitiveUTC time at the outcome boundary.
event_idstringyesnon-sensitiveStable unique identifier used for deduplication.
account_idstringyespseudonymousStable internal account identifier, never an email or name.
releasestringyesnon-sensitiveApplication or service version that emitted the event.
user_idstringyespseudonymousStable internal user identifier.
planstringyesnon-sensitivePlan selected at signup.
acquisition_channelstringnoreviewLow-cardinality, consent-compatible acquisition source.

Synthetic JSON event

{
  "timestamp_utc": "2026-07-28T14:03:00Z",
  "event_id": "evt_signup_01",
  "account_id": "acct_8f31",
  "release": "2026.07.2",
  "user_id": "user_91ac",
  "plan": "growth",
  "acquisition_channel": "organic"
}
Product analyticsproduct_milestone_completed

Which accounts reach the durable moments that define activation?

A generic milestone envelope for stable product outcomes such as connecting a source, running a first query, or publishing a dashboard.

Grain
One completed milestone per actor, account, and occurrence.
Owner
Product service that commits the milestone
Emit when
Only after the underlying product state has been committed.
FieldTypeRequiredPrivacyMeaning
timestamp_utctimestampyesnon-sensitiveUTC time at the outcome boundary.
event_idstringyesnon-sensitiveStable unique identifier used for deduplication.
account_idstringyespseudonymousStable internal account identifier, never an email or name.
releasestringyesnon-sensitiveApplication or service version that emitted the event.
user_idstringyespseudonymousStable internal actor identifier.
milestone_namestringyesnon-sensitiveVersioned, low-cardinality milestone name.
featurestringyesnon-sensitiveProduct surface that owns the milestone.
statusstringyesnon-sensitiveFinal success or error outcome.

Synthetic JSON event

{
  "timestamp_utc": "2026-07-28T14:12:19Z",
  "event_id": "evt_milestone_01",
  "account_id": "acct_8f31",
  "release": "2026.07.2",
  "user_id": "user_91ac",
  "milestone_name": "dashboard_published",
  "feature": "dashboards",
  "status": "success"
}
API reliabilityapi_request_completed

Where do errors and slow requests affect customers?

A terminal request event with route templates instead of raw URLs, bounded error categories, and latency measured at the service boundary.

Grain
One completed API request.
Owner
HTTP middleware at request completion
Emit when
After the final response status and latency are known.
FieldTypeRequiredPrivacyMeaning
timestamp_utctimestampyesnon-sensitiveUTC time at the outcome boundary.
event_idstringyesnon-sensitiveStable unique identifier used for deduplication.
account_idstringyespseudonymousStable internal account identifier, never an email or name.
releasestringyesnon-sensitiveApplication or service version that emitted the event.
request_idstringyespseudonymousCorrelation identifier; do not expose auth material.
routestringyesnon-sensitiveLow-cardinality route template such as /v1/query/:id.
methodstringyesnon-sensitiveHTTP method.
status_codenumberyesnon-sensitiveFinal HTTP response status.
latency_msnumberyesnon-sensitiveEnd-to-end duration in milliseconds.
error_typestringnonon-sensitiveBounded failure category; omit stack traces and payloads.

Synthetic JSON event

{
  "timestamp_utc": "2026-07-28T14:15:06Z",
  "event_id": "evt_api_01",
  "account_id": "acct_8f31",
  "release": "2026.07.2",
  "request_id": "req_2f71",
  "route": "/v1/query/:id",
  "method": "POST",
  "status_code": 200,
  "latency_ms": 184
}
AI operationsllm_request_completed

What does each successful AI workflow cost and how well does it perform?

A terminal model-call event with model, tokens, latency, allocation cost, and tool outcome—without prompts or generated content.

Grain
One completed model-provider request.
Owner
Shared model gateway or provider adapter
Emit when
After token usage, outcome, and provider response are final.
FieldTypeRequiredPrivacyMeaning
timestamp_utctimestampyesnon-sensitiveUTC time at the outcome boundary.
event_idstringyesnon-sensitiveStable unique identifier used for deduplication.
account_idstringyespseudonymousStable internal account identifier, never an email or name.
releasestringyesnon-sensitiveApplication or service version that emitted the event.
workflowstringyesnon-sensitiveStable product workflow using the model.
modelstringyesnon-sensitiveProvider model identifier.
input_tokensnumberyesnon-sensitiveProvider-reported input tokens.
output_tokensnumberyesnon-sensitiveProvider-reported output tokens.
cost_usdnumbernonon-sensitiveEstimated allocation cost, reconciled separately.
statusstringyesnon-sensitiveFinal provider or workflow outcome.

Synthetic JSON event

{
  "timestamp_utc": "2026-07-28T14:18:44Z",
  "event_id": "evt_llm_01",
  "account_id": "acct_8f31",
  "release": "2026.07.2",
  "workflow": "query_explanation",
  "model": "model_family_a",
  "input_tokens": 820,
  "output_tokens": 244,
  "cost_usd": 0.0124,
  "status": "success"
}
Async reliabilitybackground_job_completed

Which jobs fail, retry, wait, or run slowly?

A terminal job event that records the final outcome and attempt count once, avoiding the overcounting caused by one row per retry.

Grain
One terminal outcome per logical job.
Owner
Worker after success or permanent failure
Emit when
After the job succeeds or exhausts its retry policy.
FieldTypeRequiredPrivacyMeaning
timestamp_utctimestampyesnon-sensitiveUTC time at the outcome boundary.
event_idstringyesnon-sensitiveStable unique identifier used for deduplication.
account_idstringyespseudonymousStable internal account identifier, never an email or name.
releasestringyesnon-sensitiveApplication or service version that emitted the event.
job_idstringyespseudonymousStable logical job identifier.
job_namestringyesnon-sensitiveLow-cardinality job type.
queue_namestringyesnon-sensitiveQueue that executed the job.
attempt_countnumberyesnon-sensitiveTotal attempts including the terminal attempt.
queue_wait_msnumberyesnon-sensitiveTime from enqueue to first execution.
duration_msnumberyesnon-sensitiveTerminal attempt duration.
statusstringyesnon-sensitiveSuccess or permanent error.

Synthetic JSON event

{
  "timestamp_utc": "2026-07-28T14:22:02Z",
  "event_id": "evt_job_01",
  "account_id": "acct_8f31",
  "release": "2026.07.2",
  "job_id": "job_31be",
  "job_name": "workspace_export",
  "queue_name": "exports",
  "attempt_count": 2,
  "queue_wait_ms": 340,
  "duration_ms": 8420,
  "status": "success"
}
Use the contract:Job dashboardQueue SQL
Revenue operationsinvoice_payment_completed

Which billed amounts succeed, fail, or recover?

A payment outcome event that keeps provider identifiers pseudonymous and separates billed amount from recurring-revenue definitions.

Grain
One terminal payment attempt.
Owner
Billing webhook handler after idempotent processing
Emit when
After the provider event is verified and persisted.
FieldTypeRequiredPrivacyMeaning
timestamp_utctimestampyesnon-sensitiveUTC time at the outcome boundary.
event_idstringyesnon-sensitiveStable unique identifier used for deduplication.
account_idstringyespseudonymousStable internal account identifier, never an email or name.
releasestringyesnon-sensitiveApplication or service version that emitted the event.
invoice_idstringyespseudonymousInternal or hashed provider invoice identifier.
amount_usdnumberyesnon-sensitiveNormalized amount with currency rules documented.
attempt_countnumberyesnon-sensitivePayment attempt sequence number.
statusstringyesnon-sensitivePaid, failed, or recovered outcome.
failure_categorystringnoreviewCoarse provider-safe category, never card or bank details.

Synthetic JSON event

{
  "timestamp_utc": "2026-07-28T14:24:51Z",
  "event_id": "evt_payment_01",
  "account_id": "acct_8f31",
  "release": "2026.07.2",
  "invoice_id": "invoice_67ad",
  "amount_usd": 2400,
  "attempt_count": 1,
  "status": "paid"
}
Integration reliabilitywebhook_delivery_completed

Which destinations fail permanently or recover after retries?

A terminal delivery event with destination type and status but no customer URL, authorization header, or payload.

Grain
One terminal outcome per logical webhook delivery.
Owner
Webhook delivery worker
Emit when
After success or permanent retry exhaustion.
FieldTypeRequiredPrivacyMeaning
timestamp_utctimestampyesnon-sensitiveUTC time at the outcome boundary.
event_idstringyesnon-sensitiveStable unique identifier used for deduplication.
account_idstringyespseudonymousStable internal account identifier, never an email or name.
releasestringyesnon-sensitiveApplication or service version that emitted the event.
delivery_idstringyespseudonymousStable logical delivery identifier.
destination_typestringyesnon-sensitiveBounded integration category, not a destination URL.
attempt_countnumberyesnon-sensitiveAttempts through the terminal outcome.
status_codenumbernonon-sensitiveFinal HTTP status when a response exists.
statusstringyesnon-sensitiveDelivered or permanently failed.

Synthetic JSON event

{
  "timestamp_utc": "2026-07-28T14:29:08Z",
  "event_id": "evt_webhook_01",
  "account_id": "acct_8f31",
  "release": "2026.07.2",
  "delivery_id": "delivery_09cc",
  "destination_type": "slack",
  "attempt_count": 1,
  "status_code": 200,
  "status": "delivered"
}
Incident responseincident_impact_observed

Which accounts and workflows were affected during an incident?

A bounded impact observation that connects a declared incident to a customer workflow without copying request payloads into the incident record.

Grain
One affected operation associated with a declared incident.
Owner
Affected service or incident enrichment pipeline
Emit when
When an operation falls inside a confirmed impact rule.
FieldTypeRequiredPrivacyMeaning
timestamp_utctimestampyesnon-sensitiveUTC time at the outcome boundary.
event_idstringyesnon-sensitiveStable unique identifier used for deduplication.
account_idstringyespseudonymousStable internal account identifier, never an email or name.
releasestringyesnon-sensitiveApplication or service version that emitted the event.
incident_idstringyesnon-sensitiveStable declared incident identifier.
servicestringyesnon-sensitiveAffected service.
workflowstringyesnon-sensitiveAffected customer workflow.
regionstringyesnon-sensitiveCoarse region for impact grouping.
impact_typestringyesnon-sensitiveLow-cardinality symptom such as timeout or elevated latency.

Synthetic JSON event

{
  "timestamp_utc": "2026-07-28T14:31:40Z",
  "event_id": "evt_impact_01",
  "account_id": "acct_8f31",
  "release": "2026.07.2",
  "incident_id": "inc_checkout_latency",
  "service": "checkout",
  "workflow": "subscription_upgrade",
  "region": "north_america",
  "impact_type": "upstream_timeout"
}

Treat privacy labels as a review queue

“Pseudonymous” identifiers can still be personal data when they relate to a person. “Review” fields can expose acquisition or provider context. Apply your own retention, access, consent, deletion, residency, and contractual requirements before production instrumentation.