/
Call Confluence REST API

Call Confluence REST API

  1. Edit Confluence page, add HTML Macro for Confluence or Advanced Macro for Confluence to your page

image-20241202-022703.png
  1. The macro editor will be opened. Copy & paste below code to the macro and adjust it based on your requirement.

<div id="group-audit-container"> <form class="aui" style="margin-top: 20px; margin-left: 10px; margin-right: 10px;" onsubmit="return false;" > <label for="groupName">Select Group: </label> <select id="groupName" class="select"> <option value="1">administrators</option> <option value="2">site-admins</option> <option value="3">confluence-users</option> </select> <button id="fetchGroupDetails" class="aui-button">Fetch Group Details</button> <div id="groupDetails" style="margin-top: 20px; border: 1px solid #ddd; padding: 10px;"></div> </form> </div> <script> fetchGroups(); async function fetchGroups(){ let groups = []; let url = `/rest/api/group`; while(url){ try{ const response = await AP.request({ url: url, type: "GET", contentType: "application/json" }); let data = JSON.parse(response.body); if (!data.results || data.results.length === 0) { break; } groups = groups.concat(data.results); url = data._links.next; } catch (error) { console.error("Error:", error); url = undefined; } } if(groups.length === 0){ return; } const groupSelect = document.getElementById("groupName"); groupSelect.innerHTML = ""; // Clear existing options groups.forEach(group => { const option = document.createElement("option"); option.value = group.id; option.textContent = group.name; groupSelect.appendChild(option); }); } async function fetchGroupMembers(groupId) { const groupDetailsDiv = document.getElementById("groupDetails"); groupDetailsDiv.textContent = "Fetching group details..."; let groupMembers = []; let url = `/rest/api/group/${groupId}/membersByGroupId`; while(url){ try { const response = await AP.request({ url: url, type: "GET", contentType: "application/json" }); if (response.xhr.status !== 200) { throw new Error(`Error fetching group members: ${response.statusText}`); } let data = JSON.parse(response.body); if (!data.results || data.results.length === 0) { break; } groupMembers = groupMembers.concat(data.results); url = data._links.next; } catch (error) { console.error("Error:", error); groupDetailsDiv.textContent = "Failed to fetch group members. Check the console for details."; url = undefined; } } if (groupMembers.length === 0) { groupDetailsDiv.textContent = "No members found for this group."; return; } // Build and display the table let table = ` <table class="aui" border="1" style="width: 100%; border-collapse: collapse;"> <thead> <tr> <th></th> <th>Name</th> <th>Email</th> </tr> </thead> <tbody> `; for (const member of groupMembers) { let img = `https://www.gravatar.com/avatar/${member.emailAddress}?s=32&d=identicon`; img = member.profilePicture?.path; if (!img) { img = `https://www.gravatar.com/avatar/${member.emailAddress}?s=32&d=identicon`; } else{ if(!img.startsWith("http")){ img = `${AP._hostOrigin}/${img}`; } } table += ` <tr> <td><img style="width:32px; hight:32px;" src="${img}" alt="Avatar"></td> <td>${member.displayName}</td> <td>${member.emailAddress || "N/A"}</td> </tr> `; } table += "</tbody></table>"; groupDetailsDiv.innerHTML = table; } document.getElementById("fetchGroupDetails").addEventListener("click", () => { const groupId = document.getElementById("groupName").value.trim(); if (!groupId) { alert("Please select a group."); return; } fetchGroupMembers(groupId); }); </script>

 

  1. Publish your page and see the result:

Related content

Swagger UI for Confluence
Swagger UI for Confluence
More like this
Add customized HTML, CSS & JavaScript
Add customized HTML, CSS & JavaScript
More like this
HTML Macro for Confluence Home
HTML Macro for Confluence Home
More like this
Mermaid
More like this
Getting Started
Getting Started
More like this
Mermaid for Confluence
Mermaid for Confluence
More like this