Forum Discussion
Rise Course xAPI File Structure Change??
I'm having the same trouble. I found there is an indexAPI.html file in the scormdriver folder that works for the basic xAPI stuff. But I used the Mighty plug-in and developed a lot (A LOT) of additional xAPI statements that now are not recognized. This severely hinders the work we were doing. It was working fine yesterday morning and now six courses are stripped of the ability to see what's happening inside the course.
- DanThornton2 months agoCommunity Member
I've raised a Support Ticket for this with Articulate. Don't know how to escalate further it or speak to an actual human.
Our LMS (and SCORM Cloud) is no longer able to track "Progress" of these xAPI files. And they're breaking completely on our Translator Tool.- MarionWaning2 months agoCommunity Member
We have the same problem. Have you received a response from Articulate yet?
- SandraAria-501b2 months agoCommunity Member
I submitted support ticket yesterday. No response jet.
- kennethcrainer2 months agoCommunity Member
I was able to find a work around yesterday evening. It's only a temporary band aid. I hope Articulate sees this and will be more mindful when launching completely altered publishing structures without giving their paying customers advanced notice. Anyways, I put the following directly before my xAPI javascript statements (noting I use the Mighty Power-up to inject javascript into the course prior to publishing). Hope this helps.
/* ========================================= MISSING SETUP SCRIPT (Add this BEFORE your logic) ========================================= */ (function () { // 1. Create the Namespace window.ScormXApi = {}; // 2. Helper to get URL Params (Rise passes actor info in URL for xAPI) function getUrlParam(name) { var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search); return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); } // 3. Configure the Actor (User) // In an xAPI launch, the actor is usually passed in the URL. // If not, we try to grab it from the global SCORM Driver variables if available. var actorJson = getUrlParam('actor'); if (actorJson) { window.ScormXApi.actor = JSON.parse(actorJson); } else { // Fallback: If no actor is found, create a generic one (or handle error) console.warn("xAPI Actor not found in URL. Using Guest."); window.ScormXApi.actor = { "mbox": "mailto:guest@example.com", "name": "Guest User" }; } // 4. Configure the Activity ID // Usually passed as 'activity_id' or we use the current URL window.ScormXApi.activity = { id: getUrlParam('activity_id') || window.location.href.split('?')[0] }; // 5. Define the sendStatement function // We use the ADL wrapper which Rise normally loads, or a direct XHR fetch if needed. // NOTE: This assumes Rise has loaded the XAPIWrapper or TinCanJS. // If Rise uses strictly scormdriver.js, we have to leverage that. window.ScormXApi.sendStatement = function (stmt, callback) { // Try to find the Rise/LMS standard wrapper var lms_api = window.parent ? window.parent : window; // METHOD 1: TinCanJS (Common in Rise) if (typeof lms_api.TinCan !== "undefined") { // We need the instantiated tincan object, not just the library. // This is tricky without the original setup. // Often stored as window.tincan if (lms_api.tincan) { lms_api.tincan.sendStatement(stmt, callback); return; } } // METHOD 2: Direct Post (Fallback if we have endpoint/auth from URL) var endpoint = getUrlParam('endpoint'); var auth = getUrlParam('auth'); if (endpoint && auth) { var xhr = new XMLHttpRequest(); xhr.open("POST", endpoint + "statements", true); xhr.setRequestHeader("Authorization", auth); xhr.setRequestHeader("Content-Type", "application/json"); xhr.setRequestHeader("X-Experience-API-Version", "1.0.0"); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { callback({ err: xhr.status !== 200, xhr: xhr }); } }; xhr.send(JSON.stringify(stmt)); } else { console.error("Could not find xAPI Connection (TinCan or Endpoint URL)"); } }; console.log("ScormXApi Bridge Initialized", window.ScormXApi); })();
- StevenBenassi2 months agoStaff
Hi kennethcrainer!
I'm sorry to hear that the Rise 360 xAPI update impacted compatibility with 3rd party tools!
We understand some adjustments may be required before distributing your LMS package. As I've mentioned to others, we've outlined a process to follow to get your SCORM packages back up and running quickly.
Please let us know if you need anything else!
- BenjiBenjington2 months agoCommunity Member
Hi Kenneth,
You can find everything you need to convert your post-December 2025 release into a format that older/custom LMSes will both accept and track xAPI statements. This also works in SCORM Cloud.
https://github.com/ijnebzor/rise360-xapi-legacy-converter
Feel free to download, fork and use as you see fit.
⚠️ Disclaimer- This is not an official tool.
- It is not supported or endorsed by Articulate.
- It is provided as-is, without guarantee.
- Use at your own discretion and responsibility.
- It was created to solve our organisation's needs and is shared publicly in case it helps others.
If this solves your problem, amazing. If not, feel free to fork, modify, and improve.- ProductDevel9101 month agoCommunity Member
Hi Benji,
Thank you for sharing this converter as a potential solution for the update’s impact.
I’ve tried using it to address the xAPI structure issue, but after replacing the affected module with the converted version, the course enters an endless “Your content is loading” screen. Do you have any insights or suggestions on what might be causing this or how to resolve it?
I appreciate any guidance you can offer.
- kennethcrainer1 month agoCommunity Member
Note I haven't had to use the converter. Ensure that you're learning record store is linking to the indexAPI.html file in the scoredriver folder. To check the module out, if it's on a server, you'll access the index.html file in the scormcontent folder. At least this is how it's working for me.
Related Content
- 1 year ago
- 7 months ago