Documentation

Ingest API

POST /v1/logs — JSON shape, log levels, and response codes.

Send logs to the API with a single JSON endpoint.

Endpoint

POST /v1/logs
Content-Type: application/json

Base URL (local): http://localhost:5080
Base URL (cloud): your deployed API host (e.g. https://api.qiklog.com)

When API keys are required, add authentication — see API keys.

Request body

FieldRequiredTypeDescription
sourceYesstringLogical source name (trimmed). Use stable names per app or environment.
messageYesstringLog line body (plain text).
levelNostring or intDefault info. See levels below.
timestampNoISO 8601Event time (UTC). Defaults to server receipt time.
propertiesNoobjectFlat key/value strings for structured metadata.

Example

{
  "source": "checkout-api",
  "level": "warning",
  "message": "payment retry attempt 2",
  "timestamp": "2026-06-01T12:00:00Z",
  "properties": {
    "orderId": "ord_123",
    "region": "us-east"
  }
}

Log levels

Accepted as case-insensitive strings or integers:

StringIntUse for
trace0Verbose tracing
debug1Debug detail
info2Normal operations
warning or warn3Recoverable issues
error or err4Failures
critical or crit5Severe / page-worthy

curl example

curl -X POST http://localhost:5080/v1/logs \
  -H "Content-Type: application/json" \
  -d '{"source":"demo","level":"info","message":"payment captured"}'

Responses

StatusMeaning
202 AcceptedLog accepted, broadcast to live subscribers, queued for storage
400 Bad RequestMissing source/message, invalid JSON, or unknown level
401 UnauthorizedMissing or invalid API key (when auth is enabled)
429 Too Many RequestsPer-key rate limit exceeded (default 120/minute)

What happens after ingest

  1. The API validates your payload.
  2. If auth is enabled, your API key is verified and rate-limited.
  3. The entry is saved to Postgres (log_entries).
  4. SignalR pushes the line to everyone viewing tail/{source} in the dashboard.

Health check

curl http://localhost:5080/healthz

Returns status and postgres connectivity when a database is configured.

Next steps

  • Live tail — watch lines stream in the browser
  • API keys — secure ingest in production