Skip to main content

Custom ingest

If Tiden does not yet provide an SDK for your runtime, send the envelope format directly to the ingest endpoint.

DSN mapping

A DSN has this shape:

https://<publicKey>@<ingest-host>/<productId>

It maps to:

POST https://<ingest-host>/api/<productId>/envelope/?tiden_key=<publicKey>

Browser clients should pass the key in the query string to avoid CORS preflight. Server clients may also use:

X-Tiden-Auth: Tiden tiden_key=<publicKey>

Envelope body

The body is newline-delimited:

{}
{"type":"event"}
{"event_id":"9b2c1f4e8a7d4c2e9f10ab12cd34ef56","timestamp":"2026-01-01T12:00:00Z","level":"error","platform":"other","message":"Checkout failed"}

Set:

Content-Type: application/x-tiden-envelope

Example request

curl "https://<ingest-host>/api/<productId>/envelope/?tiden_key=<publicKey>" \
-H "Content-Type: application/x-tiden-envelope" \
--data-binary $'{}\n{"type":"event"}\n{"event_id":"9b2c1f4e8a7d4c2e9f10ab12cd34ef56","timestamp":"2026-01-01T12:00:00Z","level":"error","platform":"other","message":"Checkout failed"}'

Event fields

FieldTypeNotes
event_idstringRecommended 32 hex chars for deduplication
timestampstring or numberISO 8601 or epoch seconds
levelstringfatal, error, warning, info, or debug
platformstringRuntime name such as python, javascript, or other
messagestring or objectPlain text or formatted message object
exception.values[]arrayException chain, root cause first
stacktrace.frames[]arrayFunction, filename or path, line, in_app
fingerprintstring arrayOptional grouping override
releasestringVersion context
environmentstringRuntime target

Responses

StatusMeaning
200Accepted
400Bad product or envelope
401Missing or invalid key
429Rate limited

Default limits are 1 MiB request bodies, 50 events per second per key, and burst 200.