Get startedVerify

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.

CheckExpected
Ingest HTTP status202 Accepted
Body{ "id": "<event-uuid>" }
Issues listNew unresolved issue for the exception type
Event detailStack frames; breadcrumbs if the SDK sent them
Same error twiceSame issue (count ↑), not two issues
Revoked DSN403 { "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

  1. Open http://localhost:8080 (or your EPURE_PUBLIC_URL).
  2. Select the project that owns the DSN.
  3. Set the environment filter to match Sentry.init (local / production / all).
  4. 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)

  1. Upload minified assets + .map for a release (Source maps).
  2. Capture an error from the minified bundle with matching release.
  3. 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.

SymptomWhat happenedWhat to do
Connection refusedNothing listening on EPURE_PORT (default 8080)docker compose ps; Installation
401 invalid_dsnMissing or wrong public/secretCopy the key from Settings → SDK connection
403 dsn_revokedKey revokedCreate or rotate a key; update dsn
403 project_mismatchDSN project id ≠ URL {project_id}Use the project UUID from the DSN path
403 ingest_cap_exceededHourly project cap hitWait or raise the cap in project settings
202 but no issueWrong project, env filter, or worker still flushingWait ~1s; filter local; docker compose logs epure
Browser CORS errorOrigin not allowedSet EPURE_CORS_ORIGINS; Troubleshooting
Cookie / login loop on HTTPSecure cookie on plain HTTPEPURE_SESSION_SECURE=0 for local HTTP
Health not okPostgres not readydocker 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.

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/login204 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.

Next