API & configuration

Everything the SDKs accept, every environment variable, and the raw ingest contract if you want to send traces without an SDK.

SDK initialization

Python

vorlo_trace.init(
    api_key="vrlo_...",        # or VORLO_API_KEY
    server_url="https://...",  # or VORLO_SERVER_URL (defaults to production)
    agent_name="order-agent",  # shown in the dashboard
    verify_ssl=True,           # VORLO_VERIFY_SSL=false for local proxies
    redact=my_scrubber,        # optional: scrub PII before anything is sent
)

JavaScript / TypeScript

vorlo.init({
  apiKey: 'vrlo_...',          // or VORLO_API_KEY
  serverUrl: 'https://...',    // or VORLO_SERVER_URL (defaults to production)
  agentName: 'order-agent',
  redact: (text) => text,      // optional: scrub PII before anything is sent
});

Environment variables

VariableDescription
VORLO_API_KEYYour API key (create one in Settings → API keys).
VORLO_SERVER_URLOverride the ingest server (self-hosted / staging).
VORLO_DEBUGSet to 1 to log SDK send activity to stderr. Silent by default.
VORLO_VERIFY_SSLPython only. Set to false only for corporate-proxy testing.

Ingest endpoints

The SDKs speak a small JSON contract — you can implement it from any language. Authenticate with Authorization: Bearer vrlo_....

POST /v1/trace — one step

{
  "session_id": "abc123",          // your run id — groups steps
  "agent_name": "order-agent",
  "api_key": "vrlo_...",
  "step": {
    "step_number": 1,              // 1-based, ordered
    "tool_name": "stripe_charge",
    "tool_type": "ACTUATOR",       // or "SENSOR"
    "input": "{\"amount\": 100}",
    "output": "",
    "error": "HTTP 403 Forbidden", // null/empty when status = success
    "status": "failed",            // "success" | "failed"
    "latency_ms": 412,
    "cost_tokens": 123,
    "reasoning": "Agent decided to charge the card because ...",
    "trace_id": "...", "span_id": "...", "parent_span_id": ""
  }
}

POST /v1/session — lifecycle events

{
  "session_id": "abc123",
  "api_key": "vrlo_...",
  "event_type": "session_complete",  // session_start | session_complete | session_error
  "agent_name": "order-agent",
  "status": "success",               // optional; session_error implies failed
  "total_steps": 5,
  "duration_ms": 8214,
  "output": "Refund processed."
}

Send session_start when a run begins and session_complete / session_errorwhen it ends — that's what powers the live Running status and wall-clock duration in the dashboard.

Both endpoints return 200 immediately; storage and diagnosis enrichment happen off the request path. Rate limit: 1,000 requests/minute per API key. Trace data is retained for 90 days.

Failure diagnosis fields

Failed steps may include an error_diagnosisobject from the SDK's local registry; otherwise the server diagnoses server-side:

"error_diagnosis": {
  "code": "stripe_auth_error",
  "title": "Stripe authentication failed",
  "plain_english": "...",
  "root_cause": "...",
  "fix_hint": "...",
  "severity": "critical"        // info | warning | critical
}