Verify
Confirm a test event returns 202 and appears as an issue, plus what to do when it does not.
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, sentry_secret=supersecretdevkey"
-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.
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 or wrong public/secret | Copy the key from Settings → SDK connection |
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 |
| 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.