Developers

REST API

Read and manage your error data programmatically — from CI, scripts, or your own tooling. The API is organization-scoped: a token only ever sees the org it was created in.

https://jentry.app/api/v1Create a token →OpenAPI spec

Quick start

# 1. Create a token at https://jentry.app/settings/api
# 2. Call the API with it:
curl https://jentry.app/api/v1/projects \
  -H "Authorization: Bearer jto_xxxxxxxxxxxxxxxx"

Authentication

Every request must include a personal API token in the Authorization header as a Bearer credential. Tokens are created and revoked under Settings → API (owners & admins). The full token is shown once at creation — only a SHA-256 hash is stored, so copy it then. Tokens are prefixed with jto_.

Authorization: Bearer jto_xxxxxxxxxxxxxxxxxxxxxxxx

A missing or invalid token returns 401; a token without the required scope returns 403.

Scopes

Each token carries a set of scopes; every endpoint requires one. Grant only what you need.

org:readRead the audit log.
project:readList projects and releases.
project:writeRegister releases (commits & deploys).
issue:readList and read issues.
issue:writeUpdate issue status & assignee.
event:readRead an issue’s events.

Conventions

  • Envelope. Successful responses wrap the payload in { "data": ... }. List endpoints return an array; single-resource endpoints return an object.
  • Pagination. List endpoints accept ?limit= (1–100). The issues endpoint additionally supports ?page= and returns page, pageSize and total alongside data.
  • Timestamps. All times are ISO-8601 UTC strings.
  • Content type. Request bodies (POST/PATCH) are JSON; send Content-Type: application/json.

Errors

Errors use standard HTTP status codes with a JSON body of the form { "error": "message" }.

ParameterTypeDescription
400Bad RequestInvalid JSON body or parameter value.
401UnauthorizedMissing or invalid API token.
403ForbiddenToken lacks the required scope.
404Not FoundResource does not exist in the token’s org.

Endpoints

All paths are relative to https://jentry.app/api/v1.

GET/projects

Required scope: project:read

List every project in the token’s organization.

Response

{
  "data": [
    {
      "id": 1,
      "name": "web-app",
      "slug": "web-app",
      "platform": "javascript",
      "publicKey": "a9a0145d24e1b111cfa008befdfbb130",
      "createdAt": "2026-06-21T17:34:09.701Z"
    }
  ]
}
GET/projects/:projectId/issues

Required scope: issue:read

List a project’s issues, with the same filters as the dashboard.

Query parameters

ParameterTypeDescription
statusstringunresolved | resolved | ignored | all (default: unresolved)
levelstringfatal | error | warning | info | debug | all
querystringSubstring match on title / culprit.
periodstring24h | 7d | 14d | all
sortstringlast_seen | first_seen | events | users
limitintegerPage size, 1–100 (default: 25).
pageinteger1-based page number (default: 1).

Response

{
  "data": [
    {
      "id": 42,
      "projectId": 1,
      "title": "TypeError: Cannot read properties of undefined",
      "culprit": "renderList(app/components/List.tsx)",
      "type": "error",
      "level": "error",
      "status": "unresolved",
      "substatus": "ongoing",
      "firstSeen": "2026-06-20T10:00:00.000Z",
      "lastSeen": "2026-06-29T12:30:00.000Z",
      "count": 1284,
      "userCount": 57,
      "assigneeUserId": null,
      "firstRelease": "web@1.4.0",
      "lastRelease": "web@1.4.2",
      "permalink": "https://jentry.app/projects/1/issues/42"
    }
  ],
  "page": 1,
  "pageSize": 25,
  "total": 134
}
GET/issues/:issueId

Required scope: issue:read

Fetch a single issue by id.

Response

{ "data": { "id": 42, "projectId": 1, "title": "...", "status": "unresolved", ... } }
PATCH/issues/:issueId

Required scope: issue:write

Resolve, ignore, re-open, or (re)assign an issue. Send any subset of the fields below.

Body

ParameterTypeDescription
statusstringunresolved | resolved | ignored
assigneeUserIdinteger | nullA user id in the org, or null to unassign.

Example

curl -X PATCH https://jentry.app/api/v1/issues/42 \
  -H "Authorization: Bearer jto_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "status": "resolved" }'
GET/issues/:issueId/events

Required scope: event:read

The most recent events for an issue (full payloads: stacktrace, tags, user, request, contexts).

Query parameters

ParameterTypeDescription
limitintegerNumber of events, 1–100 (default: 25).

Response

{
  "data": [
    {
      "id": "a1b2c3d4e5f6...",
      "issueId": 42,
      "projectId": 1,
      "level": "error",
      "message": "TypeError: Cannot read properties of undefined",
      "platform": "javascript",
      "environment": "production",
      "release": "web@1.4.2",
      "traceId": "9f8e7d...",
      "timestamp": "2026-06-29T12:30:00.000Z",
      "receivedAt": "2026-06-29T12:30:01.200Z",
      "exception": { "values": [ ... ] },
      "tags": { ... },
      "user": { ... },
      "request": { ... },
      "contexts": { ... }
    }
  ]
}
GET/projects/:projectId/releases

Required scope: project:read

Releases seen for a project, newest first, with health (crash-free, adoption).

Response

{
  "data": [
    {
      "release": "web@1.4.2",
      "events": 5821,
      "issues": 12,
      "newIssues": 3,
      "firstSeen": "2026-06-27T09:00:00.000Z",
      "lastSeen": "2026-06-29T12:30:00.000Z",
      "sessions": 24010,
      "crashFreeRate": 99.4,
      "adoption": 38.2
    }
  ]
}
POST/projects/:projectId/releases

Required scope: project:write

Register a release with its commits and deploys (sentry-cli style). Idempotent per version: re-POSTing the same version replaces its commits & deploys.

Body

ParameterTypeDescription
versionstring (required)Unique release identifier, e.g. web@1.4.3.
refstringVCS ref / commit sha for the release.
urlstringLink to the release (e.g. GitHub release).
dateReleasedstringISO-8601 release timestamp.
commitsarray{ sha, author, authorEmail, message, url, files[] }
deploysarray{ environment, name, url, deployedAt }

Example

curl -X POST https://jentry.app/api/v1/projects/1/releases \
  -H "Authorization: Bearer jto_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "web@1.4.3",
    "ref": "a1b2c3d",
    "commits": [{ "sha": "a1b2c3d", "author": "Jane", "message": "Fix crash" }],
    "deploys": [{ "environment": "production" }]
  }'

Response · 201

{ "data": { "id": 7, "version": "web@1.4.3", "commits": 1, "deploys": 1 } }
GET/audit

Required scope: org:read

The organization’s audit log, newest first.

Query parameters

ParameterTypeDescription
limitintegerNumber of entries, 1–100 (default: 50).

Response

{
  "data": [
    {
      "id": 901,
      "action": "issue.resolve",
      "target": "issue:42",
      "userId": 3,
      "meta": { "via": "api" },
      "createdAt": "2026-06-29T12:31:00.000Z"
    }
  ]
}
Need an endpoint that isn’t here yet? Open the app or get in touch — the API is expanding toward full Sentry parity.
REST API Reference — jentry