oven-sh/bun · error · Error
Failed to fetch Sentry issue: ${issueResponse.statusText}
Error message
Failed to fetch Sentry issue: ${issueResponse.statusText} What it means
The follow-up call GET /api/0/issues/<groupId>/ returned non-2xx. The groupId came from the previous event lookup, so failures here usually mean the group was deleted/merged, the token cannot see it, or the id is invalid for this org.
Source
Thrown at scripts/associate-issue-with-sentry.ts:38
Authorization: `Bearer ${SENTRY_AUTH_TOKEN}`,
},
});
if (!response.ok) {
throw new Error(`Failed to fetch Sentry event: ${response.statusText}`);
}
const json = await response.json();
const groupId = json?.groupId;
if (!groupId) {
throw new Error("Missing groupId");
}
const issueResponse = await fetch(`https://sentry.io/api/0/issues/${groupId}/`, {
headers: {
Authorization: `Bearer ${SENTRY_AUTH_TOKEN}`,
},
});
if (!issueResponse.ok) {
throw new Error(`Failed to fetch Sentry issue: ${issueResponse.statusText}`);
}
const { shortId, permalink } = await issueResponse.json();
if (!shortId || !permalink) {
throw new Error("Missing shortId or permalink");
}
console.log(`Sentry ID: ${shortId}`);
console.log(`Sentry permalink: ${permalink}`);
await Bun.write("sentry-id.txt", shortId);
await Bun.write("sentry-link.txt", permalink);
export {};
View on GitHub (pinned to 8c5296ac45)
Solutions
- curl the issue URL with the same token and inspect the status and body
- Widen the token scopes (org:read + project:read / event:read covering issues)
- Handle 404 by skipping association for groups that no longer exist
Example fix
// before
if (!issueResponse.ok) {
throw new Error(`Failed to fetch Sentry issue: ${issueResponse.statusText}`);
}
// after
if (!issueResponse.ok) {
if (issueResponse.status === 404) {
console.log(`Sentry issue ${groupId} gone; skipping`);
process.exit(0);
}
throw new Error(`Failed to fetch Sentry issue: ${issueResponse.status} ${issueResponse.statusText}`);
} Defensive patterns
Strategy: try-catch
Validate before calling
null
Try / catch
try {
await fetchIssue(groupId);
} catch (err) {
if (/Failed to fetch Sentry issue/.test(err.message) && /404/.test(err.message)) {
core.info('group no longer exists; skipping');
return;
}
throw err;
} Prevention
- Treat merged/deleted Sentry groups (404) as expected skip conditions
- Keep token scopes aligned with both endpoints used (events and issues)
When it happens
Trigger: Group resolved by the event endpoint but since deleted or merged in Sentry; token scopes allow event reads but not issue reads; groupId is from a different org.
Common situations: Issues merged in the Sentry dashboard between the two calls; token with narrow scopes; stale groupId from an old event.
Related errors
- Failed to fetch Sentry event: ${response.statusText}
- Missing groupId
- Missing shortId or permalink
- GitHub API request failed: ${response.status} ${response.sta
- [azure] ${method} ${path} failed: ${response.status} ${text}
AI-assisted analysis of oven-sh/bun@8c5296ac45 (2026-08-16).
Data as JSON: /api/errors/67f479bd2786f352.
Report an issue: GitHub.