POST from any runtime that speaks JSON over HTTPS — curl, Python, Go, Rust, browsers, embedded devices. No dependency required.
Endpoint
Authentication
vk_ key at voight.xyz/dashboard/settings.
Minimal payload
agentId (a CUID) — store it locally if you want subsequent events to skip label resolution.
Full payload schema
agentId are optional. The server defaults type: 'decision' if omitted.
Privacy on the HTTP path
The HTTP path does not apply PII scrubbing — that’s a client-side operation that requires the SDK. If you’re calling HTTP directly, you’re responsible for scrubbing sensitive content before it leaves your machine. To have the dashboard render audit chips on HTTP events, includemetadata.privacyLevel: 'minimal' | 'standard' | 'full'. The scrubbing itself is your responsibility on this path.
If you’re already on Node, library mode exposes scrubPii() directly — same patterns, no hook handler required.
Examples
Python
Go
Rust
Browser / fetch
https://voight.xyz and https://www.voight.xyz. For other origins, you’ll need server-side proxying.
Status codes
| Code | Meaning |
|---|---|
202 Accepted | Event received and persisted (returns { id, accepted: true, agentId }) |
400 Bad Request | Payload failed Zod validation (response includes details) |
401 Unauthorized | Missing or invalid API key |
410 Gone | The agent has been soft-deleted, ingestion blocked |
429 Too Many Requests | Rate-limited (honor Retry-After header) |
500 Server Error | Backend issue — retry with exponential backoff |
Rate limits
Per pricing tier:| Tier | Events / month |
|---|---|
| Free | 10,000 |
| Pro | 300,000 |
| Enterprise | Unlimited |
Next
- Library mode — for JS/TS; adds retry, typed errors, and PII scrubbing
POST /v1/eventsreference — full schema with every field documented