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_K7j9mNpQDistributed 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 resultError 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.