Observability
Two log levels, queryable over the API, retained per plan.
Stacklink records everything at two linked levels:
| Level | Records | Linked by |
|---|---|---|
platform_request_logs | Every /v1/* API call — method, route, status, duration, project, API key, tenant, session, provider, tool, sanitized request, response summary, error summary. | — |
tool_execution_logs | Every model-callable tool execution. | request_log_id → the originating request log |
Headers and known credential fields are redacted before logging. Full provider responses and generated API keys are never copied into request logs — they stay on the proper execution, artifact, or key surfaces.
Query the logs
All under scope logs:read, with limit (1–100, default 50), cursor, from/to filters:
| Route | Extra filters |
|---|---|
GET /v1/logs/summary | — (counts across all log types) |
GET /v1/logs/requests · /:id | tenantId, sessionId, providerKey, toolKey, requestId, apiKeyId, route, status |
GET /v1/logs/tools · /:id | tenantId, sessionId, accountId, requestLogId, toolKey, status |
GET /v1/logs/triggers · /:id | tenantId, accountId, providerKey, eventScope, eventType, externalEventId, status |
GET /v1/logs/webhook-deliveries · /:id | deliveryId, rawEventId, subscriptionId, status, … |
const summary = await stacklink.logs.summary();
const failures = await stacklink.logs.listTools({ status: 'failed', limit: 20 });
const detail = await stacklink.logs.getTool(failures.logs[0].id);The same surface is agent-readable over MCP as PLATFORM_QUERY_LOGS and
PLATFORM_GET_EXECUTION_DETAILS (redacted).
Full observability from day one
Every plan gets the log surface, with retention based on the plan. The trial and Pro plan retain operational logs for 30 days. Reading logs is free.
Retention
Logs are retained per the workspace's plan — 30/60/90/180/365 days — and purged by a background worker across execution events, workbench logs, tool and batch logs, request logs, webhook deliveries, and raw provider events. Webhook deliveries can be replayed or redriven from the dead-letter queue before they age out (see Webhooks).