Verify
Prove the path: Quickstart (captureException), or the panel below.
What success looks like
Ingest returns 202 Accepted with { "id": "<event-uuid>" }, then an unresolved issue appears for that exception type.
| Check | Expected |
|---|---|
| Ingest HTTP status | 202 Accepted |
| Body | { "id": "<event-uuid>" } |
| Issues list | New unresolved issue for the exception type |
| Event detail | Stack frames; breadcrumbs if the SDK sent them |
| Same error twice | Same issue (count ↑), not two issues |
| Revoked DSN | 403 { "error": "dsn_revoked", "message": "…" } |
Send one test event
Sentry.captureException(new Error("Epure verify test"));Or POST store JSON / a fixture envelope:
Try ingest
Seed defaults. Change host if Epure is not on localhost:8080.
store curl
curl -sS -D - -o /tmp/epure-ingest.json -X POST
"http://localhost:8080/api/550e8400-e29b-41d4-a716-446655440000/store/"
-H "X-Sentry-Auth: Sentry sentry_version=7, sentry_key=a1b2c3d4e5f6g7h8i9j0"
-H "Content-Type: application/json"
-d '{
"platform": "javascript",
"exception": {
"values": [{ "type": "Error", "value": "Epure try-it" }]
}
}'Expected
HTTP/1.1 202 Accepted
{ "id": "<event-uuid>" }
Then open Issues. This panel does not POST from the browser. CORS and your DSN stay on your machine.
Confirm in the UI
- Open http://localhost:8080 (or your
EPURE_PUBLIC_URL). - Select the project that owns the DSN.
- Set the environment filter to match
Sentry.init(local/production/ all). - Open Issues. The exception should be there (e.g.
Error/Epure verify test).
Empty state when nothing is unresolved: 0 UNRESOLVED EXCEPTIONS. If you sent the test and the list stays empty, see Events not showing.
Confirm grouping (optional)
Send the same exception again. Occurrence count on that issue should increase. You should not get a second issue for an identical fingerprint (type + top in-app frame).
Confirm sourcemaps (optional, JS/TS)
- Upload minified assets +
.mapfor a release (Source maps). - Capture an error from the minified bundle with matching
release. - Event detail should show original file / function / line, not only
app.min.js:1:….
Other languages: raw frames only.
When verify fails
Find the symptom below. Response codes in full: API errors.
| Symptom | What happened | What to do |
|---|---|---|
| Connection refused | Nothing listening on EPURE_PORT (default 8080) | docker compose ps; Installation |
401 invalid_dsn | Missing/wrong sentry_key, or binary older than v0.1.5 | Copy the public-key DSN from Settings → SDK connection. Official SDKs do not send a secret — pin v0.1.5+ |
403 dsn_revoked | Key revoked | Create or rotate a key; update dsn |
403 project_mismatch | DSN project id ≠ URL {project_id} | Use the project UUID from the DSN path |
403 ingest_cap_exceeded | Hourly project cap hit | Wait or raise the cap in project settings |
| 202 but no issue | Wrong project, env filter, or worker still flushing | Wait ~1s; filter local; docker compose logs epure. Still empty: Events not showing |
| Browser CORS error | Origin not allowed | Set EPURE_CORS_ORIGINS; Troubleshooting |
| Cookie / login loop on HTTP | Secure cookie on plain HTTP | EPURE_SESSION_SECURE=0 for local HTTP |
Health not ok | Postgres not ready | docker compose ps; retry /health |
Spike valve
Flooding the same fingerprint (~100+/min) still returns 202 and bumps counters, but duplicate bodies may drop. That is the valve, not a failed verify.
FAQ
I got 202 but Issues is empty after a minute
Match the environment chip to the event tag; seed and SDK examples use local. Confirm you opened the project that owns the DSN. Then wait for the worker and read docker compose logs epure. More causes on Troubleshooting.
I need a session API call, not ingest
Login is POST /api/v1/auth/login → 204 plus cookie. Then call the Issues API. DSN headers on /api/v1/* return 401, and a session cookie on envelope or store is ignored. See Authentication.
Why does a flood still return 202?
The spike valve still accepts. Saturated fingerprints increment the counter and may drop bodies, which is expected. Send a slower unique exception, or wait a minute. The hourly project cap is the one that returns 403: API errors.