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.
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_xxxxxxxxxxxxxxxxxxxxxxxxA 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:read | Read the audit log. |
project:read | List projects and releases. |
project:write | Register releases (commits & deploys). |
issue:read | List and read issues. |
issue:write | Update issue status & assignee. |
event:read | Read 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 returnspage,pageSizeandtotalalongsidedata. - 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" }.
| Parameter | Type | Description |
|---|---|---|
| 400 | Bad Request | Invalid JSON body or parameter value. |
| 401 | Unauthorized | Missing or invalid API token. |
| 403 | Forbidden | Token lacks the required scope. |
| 404 | Not Found | Resource does not exist in the token’s org. |
Endpoints
All paths are relative to https://jentry.app/api/v1.
/projectsRequired 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"
}
]
}/projects/:projectId/issuesRequired scope: issue:read
List a project’s issues, with the same filters as the dashboard.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| status | string | unresolved | resolved | ignored | all (default: unresolved) |
| level | string | fatal | error | warning | info | debug | all |
| query | string | Substring match on title / culprit. |
| period | string | 24h | 7d | 14d | all |
| sort | string | last_seen | first_seen | events | users |
| limit | integer | Page size, 1–100 (default: 25). |
| page | integer | 1-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
}/issues/:issueIdRequired scope: issue:read
Fetch a single issue by id.
Response
{ "data": { "id": 42, "projectId": 1, "title": "...", "status": "unresolved", ... } }/issues/:issueIdRequired scope: issue:write
Resolve, ignore, re-open, or (re)assign an issue. Send any subset of the fields below.
Body
| Parameter | Type | Description |
|---|---|---|
| status | string | unresolved | resolved | ignored |
| assigneeUserId | integer | null | A 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" }'/issues/:issueId/eventsRequired scope: event:read
The most recent events for an issue (full payloads: stacktrace, tags, user, request, contexts).
Query parameters
| Parameter | Type | Description |
|---|---|---|
| limit | integer | Number 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": { ... }
}
]
}/projects/:projectId/releasesRequired 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
}
]
}/projects/:projectId/releasesRequired 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
| Parameter | Type | Description |
|---|---|---|
| version | string (required) | Unique release identifier, e.g. web@1.4.3. |
| ref | string | VCS ref / commit sha for the release. |
| url | string | Link to the release (e.g. GitHub release). |
| dateReleased | string | ISO-8601 release timestamp. |
| commits | array | { sha, author, authorEmail, message, url, files[] } |
| deploys | array | { 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 } }/auditRequired scope: org:read
The organization’s audit log, newest first.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| limit | integer | Number 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"
}
]
}