Hello sunnyape
Thank you for your response. I’d like to provide additional context to clarify the issue.
Summary of the Issue
-
App Type: Atlassian Forge frontend app (iframe)
-
Board / Project: EDUCATIONA project, Board ID 752 (also tested 751)
-
Endpoint: GET /rest/agile/1.0/board/{boardId}/epic
-
Observed Behavior:
-
Timeline: This functionality worked 7 days ago, stopped after recent deploys / manifest changes
Steps / Verification Done
- Using the Forge iframe, the following code is called:
export const fetchEpicLinkField = async (
boardId: string | number
): Promise<Array<{ epicName: string; epicKey: string }>> => {
if (!boardId) {
console.error('❌ No boardId provided.');
return [];
}
try {
console.log('➡️ Fetching epics for boardId:', boardId);
const response = await requestJira(`/rest/agile/1.0/board/${boardId}/epic`, {
headers: { Accept: 'application/json' }
});
console.log('⏳ Response status:', response.status);
if (!response.ok) {
console.error('❌ Fetch failed with status:', response.status);
return [];
}
const res = await response.json();
console.log('📄 Raw response body:', res);
if (res?.values && Array.isArray(res.values) && res.values.length > 0) {
const epicNames = res.values.map((value: any) => ({
epicName: value.summary,
epicKey: value.key
}));
console.log('✅ Epics fetched successfully:', epicNames);
return epicNames;
}
console.warn('⚠️ Agile API returned empty epics array for boardId:', boardId);
return [];
} catch (error) {
console.error('❌ Error fetching Board and epic List:', error);
return [];
}
};
- Console logs from the Forge iframe show:
Boards: [{id: 752, name: 'EDUCATIONA board', type: 'simple'}]
Fetching epics for boardId: 752
Response status: 200
Raw response body: { values: [] }
- Browser verification: Accessing the endpoint directly in browser:
https://laks-1985.atlassian.net/rest/agile/1.0/board/752/epic
Response:
{
"maxResults":50,
"startAt":0,
"isLast":true,
"values":[
{"id":14800,"key":"EDUCATIONA-1","summary":"AI Infrastructure Setup"},
{"id":14801,"key":"EDUCATIONA-2","summary":"AI Data Pipeline & Labeling"},
{"id":14802,"key":"EDUCATIONA-3","summary":"AI Build"},
{"id":14803,"key":"EDUCATIONA-4","summary":"AI Validation & Testing"},
{"id":14804,"key":"EDUCATIONA-5","summary":"AI Deployment"},
{"id":14805,"key":"EDUCATIONA-6","summary":"AI Monitoring"},
{"id":14806,"key":"EDUCATIONA-7","summary":"AI Enterprise Governance"}
]
}
Key Observations
-
Frontend-only issue: Backend is not involved. The FE iframe fetch returns empty, while direct browser access succeeds.
-
Scope / Permissions: Manifest includes:
- read:epic:jira-software
- write:epic:jira-software
- read:board-scope:jira-software
-
Manifest and CSP: Properly configured, including https://laks-1985.atlassian.net/.
-
Timeline: Worked 7 days ago; no changes to board or epics occurred on Jira side.
Questions / Assistance Needed
-
Why is the Agile API returning empty epics only when called from a Forge iframe?
-
Did anything change recently in Forge / Jira Cloud that could impact iframe FE fetches?
-
Are additional manifest permissions or configuration changes required to restore iframe access to board epics?
Conclusion
This appears to be a Forge app iframe-specific issue, unrelated to the REST API itself or user permissions. The same endpoint works correctly in the browser (https://laks-1985.atlassian.net/rest/agile/1.0/board/752/epic) using the same user credentials.
We’d greatly appreciate guidance on why the iframe FE context fetch stopped returning epics and what changes are needed to resolve this.