Correlating requests, events, and deliveries - request IDs, log fields, metrics to watch, and debugging workflows.
Meridian exposes the identifiers you need to trace a call from your code, through our edge, to the resource and downstream webhook deliveries. This page is the debugging workflow.
Every hop carries the same request_id - one identifier traces cause → effect → delivery.
Every response (success and error) returns Meridian-Request-Id:
Meridian-Request-Id: req_8fK2mPx4vLLog it on every call. It's the single most useful thing when asking support to trace a request - we can pull the full edge-to-handler path by ID.
try {
const project = await client.projects.create(params);
} catch (e) {
if (e instanceof MeridianError) {
logger.error("meridian.create failed", {
code: e.code, status: e.status, requestId: e.requestId,
});
}
}GET /events/:id returns request_id - the API call that created the event (null for system-generated events):
{
"id": "evt_3kR8mPx2vL",
"type": "project.updated",
"request_id": "req_8fK2mPx4vL",
"sequence": 10492
}From a delivery, the chain runs dlv_.event_id → evt_.request_id → the originating request. Useful for "which call triggered this webhook?"
| Field | Why |
|---|---|
request_id | Cross-trace identifier - log always |
error.code | Stable machine code - alert on it, not messages |
status | HTTP status |
latency_ms | Your client's measured round-trip |
event.sequence | Ordering within a project |
code - rate_limited rising means you're over quota; 5xx rising may be us (check status).webhook.endpoint.disabled events.429s aren't followed by a quiet period, your backoff is wrong.From your logs, the response header, or the error body - req_….
GET /events?request_id=req_… for effects it caused; GET /webhooks/:id/deliveries for downstream deliveries.
If the problem is ours, the request_id is what support needs - it maps directly to our internal trace.