Web apps can’t easily connect to a custom TCP port, so the HTTP source provides an alternative ingestion path with JSONL and binary support. This is what the JavaScript SDK uses.Documentation Index
Fetch the complete documentation index at: https://docs.tell.rs/llms.txt
Use this file to discover all available pages before exploring further.
Endpoints
| Method | Path | Content-Type | Description |
|---|---|---|---|
| POST | /v1/events | application/json | Ingest events (JSONL) |
| POST | /v1/logs | application/json | Ingest logs (JSONL) |
| POST | /v1/ingest | application/x-flatbuffers | Binary FlatBuffer batches |
| GET | /health | — | Returns {"status": "ok"} |
application/octet-stream and application/x-tell are also accepted on the binary endpoint.
Authentication
Three ways to authenticate, in precedence order:Authorization: Bearer <key>headerX-API-Key: <key>header?token=<key>query parameter
Responses
202 Accepted — all items ingested successfully:max_payload_size. 429 Too Many Requests — rate limited after repeated auth failures. 503 Service Unavailable — pipeline backpressure (channel full).
CORS and browser clients
CORS is enabled by default so browser SDKs work without extra setup. The source mirrors the request’sOrigin header and allows Authorization, Content-Type, X-API-Key, and X-Workspace-ID headers.
To restrict allowed origins:
TLS
Tell supports HTTPS natively via rustls. Provide PEM-encoded certificate and key files:Reverse proxy
Running Caddy in front of Tell is the simplest way to get automatic HTTPS with Let’s Encrypt certificates and zero TLS configuration:trust_proxy in Tell so the real client IP is captured from X-Forwarded-For:
X-Forwarded-For. Only enable trust_proxy when the HTTP source is behind a trusted proxy — clients can forge the header otherwise.
Rate limiting
Authentication failures are rate-limited per IP. After 10 failures within 60 seconds, the IP is temporarily blocked with429 Too Many Requests. The rate limiter cleans up expired entries every 5 minutes.
Safety limits
JSONL endpoints enforce two limits to prevent denial-of-service:- 10,000 lines per request — requests with more lines are rejected
- 32 levels of JSON nesting — deeply nested objects are rejected before parsing
Configuration reference
What’s next
- TCP source — higher throughput for native SDKs
- JavaScript SDK — the primary client for the HTTP source
- API keys — create and manage streaming keys
- Routing — control where HTTP data goes after ingestion