Skip to content
Hoody.com

The Proxy Logs endpoints let you query, summarize, and stream the centralized logs that the Hoody proxy collects for every request, response, and event flowing through your services. Use them to audit traffic, debug routing issues, or pipe live activity into dashboards and alerting pipelines.

All endpoints on this page are served from a per-container logs subdomain of the form https://{projectId}-{containerId}-logs-1.{serverName}.containers.hoody.icu.

Search and filter through stored request, response, and event logs.

NameInTypeRequiredDescription
limitqueryintegerNoMaximum number of entries to return. Default: 200
offsetqueryintegerNoNumber of entries to skip. Default: 0
projectIdquerystringNoFilter to a single project
containerIdquerystringNoFilter to a single container
serviceNamequerystringNoFilter to a single service name
levelquerystringNoComma-separated levels (debug,info,warn,error)
includeRequestBodyquerybooleanNoInclude the request body on entries. Default: false
includeResponseBodyquerybooleanNoInclude the response body on entries. Default: false
lastqueryintegerNoReturn only the last N entries
afterIdqueryintegerNoReturn entries with SQLite row ID greater than this (ASC cursor)
cursorquerystringNoPagination cursor (signed opaque base64)
kindquerystringNoOne of request, response, event
methodquerystringNoFilter by HTTP method
sourcequerystringNoOne of backend, edge

This endpoint accepts no request body.

Log query results. Scoped reads (filtered by projectId and/or containerId) return a paginated JSON payload. Unscoped reads can request application/x-ndjson to stream the scan, with one compact entry per line and a final trailer carrying cursor, filesVisited, rowsEmitted, and stoppedReason.

{
"entries": [
{
"id": 18234,
"traceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tsMs": 1719438215432,
"tsIso": "2024-06-26T14:23:35.432Z",
"kind": "request",
"level": "info",
"projectId": "proj_abc123",
"containerId": "cont_xyz789",
"serviceName": "auth-service",
"method": "POST",
"url": "/api/v1/login",
"clientIp": "203.0.113.42",
"status": 200,
"data": {},
"source": "backend"
},
{
"id": 18235,
"traceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tsMs": 1719438215435,
"tsIso": "2024-06-26T14:23:35.435Z",
"kind": "response",
"level": "info",
"projectId": "proj_abc123",
"containerId": "cont_xyz789",
"serviceName": "auth-service",
"method": "POST",
"url": "/api/v1/login",
"clientIp": "203.0.113.42",
"status": 200,
"data": {},
"source": "backend"
}
],
"total": 18432,
"limit": 200,
"offset": 0
}
Terminal window
curl -X GET "https://proj_abc123-cont_xyz789-logs-1.us-east-1.containers.hoody.icu/_logs?limit=50&level=info&kind=request" \
-H "Authorization: Bearer <token>"

Return aggregate counts of stored logs broken down by level, project, container, and service.

This endpoint takes no parameters.

{
"total": 18432,
"byLevel": {
"debug": 8421,
"info": 7102,
"warn": 1923,
"error": 986
},
"byProject": {
"proj_abc123": 12300,
"proj_def456": 6132
},
"byContainer": {
"cont_xyz789": 12300,
"cont_uvw012": 6132
},
"byService": {
"auth-service": 8230,
"billing-service": 5102,
"notification-service": 5100
}
}
Terminal window
curl -X GET "https://proj_abc123-cont_xyz789-logs-1.us-east-1.containers.hoody.icu/_logs/stats" \
-H "Authorization: Bearer <token>"

Opens a persistent Server-Sent Events connection that streams new log entries as they are recorded.

Framing — every frame carries an id: <ringSeq> line followed by data: .

Reconnect resume — clients may send Last-Event-ID: <ringSeq> on reconnect. The server skips any frame whose ringSeq is &le; the supplied value from the ring buffer.

Named events (v8 contract):

  • event: scope-destroyed — the container was destroyed; the stream closes immediately. Clients should exit cleanly.
  • event: reset — the server restarted and the ringSeq counter has been reset with a &ge; 10000 safety margin. Clients MUST discard their lastSeenId and reconnect fresh.
NameInTypeRequiredDescription
projectIdquerystringNoFilter to a single project
containerIdquerystringNoFilter to a single container
kindquerystringNoOne of request, response, event
levelquerystringNoOne of debug, info, warn, error
Last-Event-IDheaderstringNoNumeric ringSeq of the last event received. Server skips entries &le; this value from the ring buffer on reconnect

This endpoint accepts no request body.

Server-Sent Events stream of live log entries. Each data: line carries a JSON-serialized LogEntry.

id: 18235
data: {"id":18235,"traceId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","tsMs":1719438216000,"tsIso":"2024-06-26T14:23:36.000Z","kind":"response","level":"info","projectId":"proj_abc123","containerId":"cont_xyz789","serviceName":"auth-service","method":"POST","url":"/api/v1/login","clientIp":"203.0.113.42","status":200,"data":{},"source":"backend"}
:

The :\n\n line is a comment heartbeat emitted every 15 seconds.

Terminal window
curl -N -X GET "https://proj_abc123-cont_xyz789-logs-1.us-east-1.containers.hoody.icu/_logs/stream?projectId=proj_abc123&level=info" \
-H "Authorization: Bearer <token>"