CLItrail Docs

Record schema

Every record in Logs, in exports and in log streams has the same shape, versioned as clitrail.telemetry.v1. New fields may be added within a version; a field is never renamed or given another meaning without a new version.

#Every record

FieldTypeDescription
schemastringclitrail.telemetry.v1, on each line of NDJSON exports and log streams.
seqnumberOnly in the service operator’s own stream: the record’s position in the service-wide log. Your organisation’s streams leave it out; identify records by id.
idstringtl_, the time in base 36, _ and 16 hex characters.
timestringWhen it was recorded, ISO 8601 in UTC.
kindstringinbound, outbound, audit, error or alert; test for a log stream’s test record.
typestringWhat happened within the kind: collection or stripe_webhook for inbound; delivery, destination_test, logstream or request for outbound; the action or alert code otherwise.
orgstring or nullThe organisation ID.
websitestring or nullThe website ID, when the record concerns one.

#Inbound

FieldDescription
route, methodSuch as /v1/events and POST.
status, errorThe response status, and its error code when there was one, such as rate_limited or quota_exceeded.
bodyThe request body as received, as text. Receipts and handoff tokens become labels such as receipt …Ab3dE9 #<keyed hash>; any other credential-like field becomes [redacted].
bodyBytes, truncatedThe body’s size; truncated: true when it was cut at 16 KB or refused as too large.
clientThe browser family, OS and device worked out from the request.
idsWhat the request created, such as { "visit": "…" } or { "event": "…" }.
ipHashA keyed hash of the client address, never the address.

#Outbound

FieldDescription
serviceWho was called: ga4, google_ads, google, meta, tiktok, x, webhook, stripe, firebase, s3 or logstream.
destination, destinationTypeThe destination or log stream ID, and its type.
method, urlThe request line; credentials in the URL, such as an API secret, become [redacted].
headers, responseHeadersWith Authorization kept only as its scheme (OAuth [redacted]), and tokens, signatures and keys as [redacted].
body, bodyBytesThe exact request body, JSON or form fields, credentials redacted, up to 64 KB.
status, responseBody, responseBytesThe response status and body, up to 64 KB, redacted.
truncated{ "request": …, "response": … } when either body was cut at 64 KB.
durationMs, attempt, errorHow long it took, which attempt it was, and what failed.
outboxId, eventIdsThe queued delivery and the install events it carried.
batch, recordsFor log-stream deliveries: the batch name and how many records it held.

#Audit, error, alert and test

KindFields
auditactor (who), action (such as invite_created or limit_reached), target and detail. Never a secret value.
errorwhere it happened and a short message.
alertA code, such as stream_failing or stream_backlog_dropped, and its detail.
testWritten by a log stream’s Send test: type logstream.test, the stream ID and a message.

#Example

{"schema":"clitrail.telemetry.v1","id":"tl_test_20260924T091203Z","time":"2026-09-24T09:12:03.512Z","kind":"test","type":"logstream.test","org":"o_5b1e0c9d2a7f43e8b610","website":null,"stream":"ls_9c2d4e6f8a0b1c3d","message":"CLItrail log stream test record"}

In the Logs list, inbound and outbound records come without their bodies (summary: true); open a record to read them. On Free, attribution fields are left out of every record. CSV exports use the columns id, time, kind, type, org, website, route, method, url, service, destination, status, error, duration_ms, attempt, event_ids, actor, target, detail, body and response_body, with any cell a spreadsheet could read as a formula prefixed with '.