JK
JustKalm
Developer Tools

Debugging & Logging

Trace requests, diagnose issues, and profile performance. Every request has a unique ID for end-to-end tracing.

Request IDs
Every request tracked
90-Day Retention
Full request history
Performance Metrics
Latency & throughput

Request Logs

Recent API RequestsView in Dashboard →

Request ID Tracking

Every API request returns a unique X-Request-Id header. Use this to:

  • Trace requests through your system
  • Reference in support tickets for instant lookup
  • Correlate with your application logs
  • Debug webhook deliveries
Response Headers
# Every response includes X-Request-Id
curl -i https://api.justkalm.com/v2/valuate \
  -H "Authorization: Bearer jk_live_xxx"

# Response Headers:
# X-Request-Id: req_K7j9mNpQ
# X-Response-Time: 342ms
# X-RateLimit-Remaining: 997

SDK Debug Mode

Enable Debug Logging
import { JustKalm } from '@justkalm/sdk';

const client = new JustKalm({
  apiKey: 'jk_live_xxx',
  // Enable detailed logging
  debug: true,
  // Custom logger
  logger: {
    debug: (msg, meta) => console.log('[JK Debug]', msg, meta),
    info: (msg, meta) => console.info('[JK Info]', msg, meta),
    warn: (msg, meta) => console.warn('[JK Warn]', msg, meta),
    error: (msg, meta) => console.error('[JK Error]', msg, meta),
  },
});

// All requests now log details
const result = await client.valuate('https://example.com/product');
// [JK Debug] POST /v2/valuate started
// [JK Debug] Response received in 342ms
// [JK Debug] X-Request-Id: req_K7j9mNpQ

Distributed Tracing

🔭
OpenTelemetry
Full OTEL support
🐕
Datadog
APM integration
☁️
AWS X-Ray
Trace propagation
OpenTelemetry Integration
# Using OpenTelemetry
from opentelemetry import trace
from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor
from justkalm import JustKalm

# Instrument HTTP client
HTTPXClientInstrumentor().instrument()

tracer = trace.get_tracer(__name__)

async def valuate_with_tracing(url: str):
    with tracer.start_as_current_span("justkalm.valuate") as span:
        client = JustKalm()
        result = await client.valuate_async(url)
        
        # Add attributes for debugging
        span.set_attribute("justkalm.request_id", result.request_id)
        span.set_attribute("justkalm.duration_ms", result.duration)
        span.set_attribute("justkalm.item_type", result.item_type)
        
        return result

Error Diagnosis

Rich Error Objects
try {
  const result = await client.valuate(url);
} catch (error) {
  if (error instanceof JustKalmError) {
    console.error({
      // Error details
      message: error.message,
      code: error.code,
      
      // Request context
      requestId: error.requestId,  // Always include in support tickets
      
      // Timing info
      duration: error.duration,
      
      // Suggested fix
      suggestion: error.suggestion,
      docs: error.docsUrl,
    });
  }
}

Include Request ID in Tickets

When contacting support, always include the requestIdfor instant context lookup.

Actionable Suggestions

Errors include suggestion field with recommended fixes and relevant docs links.

Timing Breakdown

Error responses include timing data to identify latency issues even in failed requests.

Debug Checklist

1
Check Request ID
Look up in Dashboard → Logs
2
Review Error Code
See /errors for full reference
3
Verify Headers
Auth, Content-Type, Accept
4
Check Rate Limits
X-RateLimit-* headers
5
Test in Sandbox
Reproduce with test keys
6
Enable SDK Debug
Set debug: true for verbose logs

Need Help Debugging?

Can't figure it out? Our team can help trace any issue with a request ID.

© 2025 JustKalm. Debug with confidence.