Other platforms & raw HTTP
Any platform with an official Sentry SDK works with Errora. Install it as documented by Sentry and set the DSN to your Errora project — that is the only change.
Common one-liners
// Java / Kotlin (sentry-java)
Sentry.init(options -> {
options.setDsn("https://<public_key>@<host>/<project_id>");
options.setEnvironment("production");
options.setTracesSampleRate(0.2);
});
// .NET
SentrySdk.Init(o => {
o.Dsn = "https://<public_key>@<host>/<project_id>";
o.Environment = "production";
o.TracesSampleRate = 0.2;
});
# Ruby
Sentry.init do |config|
config.dsn = ENV["SENTRY_DSN"]
config.traces_sample_rate = 0.2
end
// Rust
let _guard = sentry::init((std::env::var("SENTRY_DSN")?, sentry::ClientOptions {
release: sentry::release_name!(),
traces_sample_rate: 0.2,
..Default::default()
}));
Mobile SDKs (sentry-android, sentry-cocoa, Flutter, React Native) work the same way —
set the DSN and, for release builds, upload your symbols/source maps per release.
No SDK at all
Every product is reachable over plain HTTP. See Ingestion API for the full reference; the short version:
ERRORA=https://errora.example.com
PROJECT_ID=<project_id>
KEY=<public_key>
# 1. An error event
curl -X POST "$ERRORA/api/$PROJECT_ID/store/" \
-H "Content-Type: application/json" \
-H "X-Sentry-Auth: Sentry sentry_version=7, sentry_key=$KEY" \
-d '{"event_id":"9a1f…","timestamp":"2026-01-01T00:00:00Z","platform":"other",
"level":"error",
"exception":{"values":[{"type":"BackupFailed","value":"disk full"}]}}'
# 2. Anything else (logs, transactions, metrics, feedback…) as an envelope
curl -X POST "$ERRORA/api/$PROJECT_ID/envelope/" \
-H "Content-Type: application/x-sentry-envelope" \
-H "X-Sentry-Auth: Sentry sentry_version=7, sentry_key=$KEY" \
--data-binary @envelope.txt
# 3. A cron check-in from a crontab line
curl -X POST "$ERRORA/api/$PROJECT_ID/cron/nightly-backup/$KEY/?status=ok"
# 4. A statsd metric line
printf 'jobs.processed@none:1|c|#queue:ingest\n' | \
curl -X POST "$ERRORA/api/$PROJECT_ID/envelope/" --data-binary @-
An envelope is newline-delimited JSON: a header line, then one {"type": "..."} item header
plus its payload per item.
{"event_id":"9a1f…","dsn":"https://<key>@<host>/<project_id>"}
{"type":"log","item_count":1,"content_type":"application/vnd.sentry.items.log+json"}
{"items":[{"timestamp":1767225600.0,"level":"info","body":"backup finished","attributes":{"host":{"value":"db-1","type":"string"}}}]}
Choosing a platform value for the project
The project's platform field (python, php, php-laravel, node, javascript, go,
other) only drives the icon and the suggested snippet in the UI. Ingestion, grouping and
every product behave identically regardless — pick other when nothing fits.