REST API

Pull issues into your own dashboards, build CI checks, or back up your data.

The public API is JSON over HTTPS, rooted at https://glitchreplay.com/api/v1/. It is read-only at this time — issue actions (resolve, ignore, assign) live in the dashboard. Every endpoint requires a bearer token from API Tokens in the dashboard.

Machine-readable spec: /api/v1/openapi.json (OpenAPI 3.1). Interactive reference: /api/v1/docs.

Authentication

Tokens are grt_… strings (not DSNs). Generate them in API Tokens in the dashboard. Tokens can be scoped to a single project or to your entire org.

curl https://glitchreplay.com/api/v1/projects \
  -H "Authorization: Bearer grt_…"

If the token is missing or invalid you get a 401 Unauthorized. If the token is valid but doesn't cover the resource you requested (e.g. a project token asking about a different project), you get a 403 Forbidden.

Endpoints

List projects

GET /api/v1/projects

Returns every project the token can see. For org-scoped tokens, that's every project in the org. For project-scoped tokens, just that one.

{
  "data": [
    {
      "id": "prj_…",
      "name": "Acme Web",
      "slug": "acme-web",
      "platform": "nextjs",
      "created_at": "2026-04-10T18:42:00Z"
    }
  ],
  "meta": { "count": 1 }
}

List issues for a project

GET /api/v1/projects/:project_id/issues

Query parameters:

  • statusunresolved | resolved | ignored
  • since — ISO-8601 timestamp; only issues with last_seen after this time
  • q — full-text search over title, stack, and breadcrumbs (FTS5; supports NEAR, prefix, etc.)
  • limit — default 50, max 100
curl "https://glitchreplay.com/api/v1/projects/prj_abc/issues?status=unresolved&limit=20" \
  -H "Authorization: Bearer grt_…"

Without q, results sort by last_seen DESC. With q, results sort by FTS5 BM25 relevance. Each row includes:

{
  "id": "a3b1c9d82e4f5a1b",
  "display_id": "gr_k9f2qab",
  "title": "TypeError: cannot read properties of undefined (reading 'id')",
  "error_type": "TypeError",
  "total_count": 142,
  "first_seen": "2026-04-22T09:14:00Z",
  "last_seen": "2026-04-25T11:02:31Z",
  "status": "unresolved",
  "severity": "error",
  "ai_category": null
}

Get a single issue

GET /api/v1/issues/:id

:id accepts either the human-readable display id (gr_…) or the full canonical fingerprint hash. Returns the full issue record, including counts, fingerprint, environment breakdown, and the latest event ID. Returns 404 if the issue doesn't exist or isn't in the token's org.

Rate limits

Per token: 120 requests per minute. Responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. When you hit the limit you get a 429 Too Many Requests with a Retry-After header in seconds.

Pagination

List endpoints support a limit query parameter (max 100). For very large result sets, filter by since on a rolling window — cursor-based pagination is on the roadmap.

Errors

StatusWhen
400Malformed query (e.g. bad regex in q, invalid since timestamp).
401Missing or invalid Authorization header.
403Token can't see the requested resource.
404Resource not found, or not in this org.
429Rate limit exceeded.
503Database unavailable. Retry after a brief backoff.

Roadmap

The following are planned but not yet shipped:

  • POST /api/v1/issues/:id/resolve, /ignore, /assign
  • GET /api/v1/issues/:id/events — list raw events in an issue
  • Cursor-based pagination on all list endpoints
  • Stable webhook events for issue state changes

Ingest endpoints (POST /api/{project_id}/envelope/, /sourcemaps, /csp/) authenticate with a project DSN and are documented in SDK setup and Source maps.