DebugBundle

Probes

Deliver bounded diagnostic checkpoints already instrumented in your application.

Probes deliver bounded checkpoints that application code already records with the SDK's probe method. Instrument and deploy the label and safe data first. Remote activation can then ship future matching observations independently, subject to capture policy, tier, expiry, sampling and delivery limits.

Use probes when an incident needs a specific technical observation, such as the stage of a media decode, an observed session state, a job dependency result or a cache hit/miss. New checkpoints require an application change and deployment. Activation does not inject code or collect arbitrary local variables or heap dumps.

How Probes Work

API, CLI, or MCP

Activate

Create a probe with a label pattern, service filter, environment filter, and TTL.

Store

DebugBundle stores the activation and returns the current directive state.

Distribute

SDKs receive probe directives through config polling and ingestion responses.

Collect

A future call to an existing matching probe label records the instrumented data.

Bundle

Probe data appears in context.probe_data when related incidents are bundled.

  1. Activate — You create a probe via API, CLI, or MCP with a label pattern, service filter, and TTL.
  2. Distribute — Backend SDKs poll GET /v1/sdk/config with ETags; browser and mobile SDKs use a bounded startup/lifecycle config check plus probe_directives piggybacked on successful POST /v1/events responses.
  3. Collect — When instrumented code executes a matching probe, the SDK may emit a standalone probe_event when policy permits, while retaining its documented always-on buffering and error-flush behaviour.
  4. Enrich — Enriched data arrives with subsequent events and is included in the context.probe_data section of bundles.
  5. Expire — The probe automatically deactivates after its TTL expires.

If a project downgrades to Free, saved remote probe activations remain visible in the management surfaces so owners can see what will resume after upgrading again. They do not continue shipping while the lower tier is active.

Probe Configuration

ParameterDescriptionDefault
label_patternPattern matching instrumented probe labels (e.g., auth.*, payment.checkout)— (required)
serviceScope to a specific service nameAll services
environmentScope to a specific environmentAll environments
ttl_secondsPassive remote activation lifetime, max 3600 seconds— (required)
trigger_ttl_secondsTrigger token validity windowSame as ttl_seconds

Label Pattern Matching

PatternMatches
*All instrumented probe labels
auth.*auth.login, auth.token.expired, etc.
payment.checkoutExactly payment.checkout

Probe Data in Bundles

Probe-collected data appears in the context.probe_data section of the bundle:

{
  "context": {
    "probe_data": {
      "version": 1,
      "items": [
        {
          "label": "auth.session.checkpoint",
          "data": {
            "stage": "refresh",
            "has_session": false,
            "result": "session_missing",
            "attempt": 1
          },
          "timestamp": "2026-03-24T11:05:00Z",
          "activation_id": "11111111-1111-4111-8111-111111111111"
        }
      ]
    }
  }
}

Bounded checkpoint recipes

Choose fixed labels, allowlisted technical states, booleans, counts or coarse buckets. Record observations the application actually checked. Keep names, customer or job identifiers, tokens, cookies, cache keys, media URLs, form values and raw payloads out of checkpoint data.

CheckpointExample safe dataQuestion it can answer
media.preview.checkpointstage: "decode", input_kind: "uploaded", attempt: 1Which instrumented processing stage ran?
auth.session.checkpointstage: "refresh", has_session: false, result: "session_missing"What session condition did the application observe?
job.dependency.checkpointdependency: "media_store", attempt: 2, result: "timeout"Which named dependency step failed?
cache.preview.checkpointresult: "miss", age_bucket: "stale"Did this checkpoint observe a hit, miss or stale result?

A successful HTTP status or a completed attempt alone does not establish semantic recovery. The application must check the required state explicitly.

Built-in evidence and probe instrumentation

Built-in collectors populate ordinary error, runtime or device evidence according to the installed SDK and its settings. Probe activation delivers the data supplied by instrumented checkpoints. Check the exact installed SDK and wrapper versions before relying on a collector.

SDKAvailable built-in evidence to check
Node.jsNode/process facts and retained JavaScript error stacks.
BrowserBrowser/device facts and enabled breadcrumbs or native browser error metadata.
PythonPython/process facts and available native tracebacks.
PHPPHP/runtime facts and available Throwable or shutdown error information.
WordPressEvidence from the exact bundled PHP and Browser SDK versions.
JavaJVM/process facts and retained Java exception traces.
GoGo runtime facts and retained panic/capture stacks; ordinary Go errors do not contain a throw stack.
RubyRuby/process facts and available Ruby backtraces.
.NETManaged runtime/process facts and available managed exception traces.
AndroidApp/device facts and supported, enabled exception, crash or ANR records.
Swift/iOSApp/device facts and supported error/crash records; Swift Error has no universal throw stack or cause accessor.
React NativeJavaScript engine/device facts and supported native-bridge records, preserving the authored JavaScript identity.

When probe data is empty

An empty section means this bundle contains no matching retained checkpoint observation for its selected sample/window. It does not prove that every SDK received an activation, that no matching label exists, or that the checkpoint ran. Verify the deployed instrumentation/version, label and service/environment scope, expiry, capture policy, sampling and delivery receipts before drawing a conclusion. Activation cannot recover measurements that were never retained.

Limits

ConstraintLimit
Max concurrent remote activations per project5
Passive probe activation TTL1 hour max
Probe directive refresh intervalBackend default 60 seconds; browser zero-polling; mobile bounded lifecycle refresh
Trigger token validityConfigurable up to 24 hours

Trigger Token

When you activate a probe, the API returns a trigger_token. This token is shown exactly once at creation time — store it immediately.

The trigger token lets SDKs activate matching probes for a specific request or session without waiting for passive directive refresh. SDKs validate dbundle_probe_... tokens locally with the trigger_token_key from GET /v1/sdk/config, check expiry, and silently ignore invalid tokens.

Managing Probes

InterfaceReference
Web appProject Probes tab
APIProbes API
CLICLI Cloud Workflow
MCPMCP Workflows

Next Steps

On this page