Contact Us Support Forum Get Email Updates

Thanks! Someone will be in touch with you shortly.

Rather just email us? Email us here.
Rather speak with someone in person?
Call any time with Experience API questions:


News to Me: Statement Forwarding

Posted by

Categories: News to Me

Posted 9 December 2014


Since joining Rustici Software at the start of November 2014, I’ve been discovering some interesting products and features within Rustici Software and outside. This “News to Me” series of blogs highlights some of these surprises!

One of the key benefits of xAPI is that data can flow in any direction. I’ve talked and written about this a lot—usually in the context of client applications (activity providers, reports etc.) either pushing data to or pulling data from an LRS. ‘It would be nice though’ I often say ‘if the LRS could be the one pushing the data.’ Sadly there’s no LRS that has this capability yet. Or so I thought…

It turns out I’m behind the times. I was surprised to learn that a few products already offer statement forwarding as a feature! They include SCORM Cloud, SCORM Engine and Watershed LRS.

What is statement forwarding?

Statement forwarding is the process by which a Learning Record Store passes statements it receives to another system. This might be all the statements it receives, or could be only some specific statements. It’s an idea that’s mentioned in the xAPI specification and I expect that in the long run, it’ll become a standard feature of any LRS.

Statement forwarding is particularly important for systems containing multiple LRS to enable them to share data. For example:

  • A corporate LRS forwarding statements to a learner’s personal LRS (or vice versa).
  • Local LRS sharing statements with a central hub.
  • Forwarding from a basic LMS-embedded LRS (like SCORM Engine) on to a more full-eatured reporting LRS like Watershed.

There’s also the potential to use statement forwarding to trigger events as part of a blended learning solution. For example, a communications platform or just-in-time performance support delivery system might implement the xAPI statements endpoint to listen for statements that trigger delivery of emails, mobile push notifications or training and performance support content. I’m not aware of any systems implementing this yet, but I’m open to being surprised again!

How can I try statement forwarding?

Statement forwarding in SCORM Cloud

Scorm Cloud ToolbarStatement forwarding in SCORM Cloud is really easy to set up: simply scroll down to the bottom of the LRS settings panel, click “Add New Forwarding Path”, then complete and save the details. Scorm Cloud Statement Forwarding

You need to select and enter credentials for the source application (where you want to take statements from) and enter the endpoint and credentials for the destination. Statements can be sent from SCORM Cloud to any xAPI conformant LRS, including other applications within your SCORM Cloud account and Watershed. Here are the details of where to find your SCORM Cloud credentials and endpoint, including a screencast.

For security reasons, we recommend creating a special set of credentials on your target LRS just for SCORM Cloud.

You can also filter statements by date: only sending statements that have been stored since that date specified. The default date is today.

Statement forwarding in Watershed

Statement forwarding from Watershed is somehow even easier than Cloud! It’s done from the Data settings page:
Data Settings
From there, scroll down to Outbound Data and add a data source. This time there’s no need to enter your Watershed credentials; you only need the details of the LRS you want to send the data to. Again, we recommend creating a unique set of credentials for Watershed to use for this purpose.
Outbound Data

Watershed goes one step further than Cloud and can actually go and fetch statements from another LRS. This is configured in exactly the same way except you use the Inbound Data settings. This means you can get statements into Watershed from any LRS, even those that don’t support statement forwarding themselves. Isn’t that handy?

Inbound Data

Why don’t you have a go at forwarding statements from SCORM Cloud on to another LRS or a different endpoint within your SCORM Cloud account? Let us know how you get on!

  • Aaron Shumaker

    So am I correct in understanding that statement forwarding is an optional LRS feature, and not part of the spec, and therefore there is no guarantee that an arbitrary LRS implements it? Does the spec indicate a method of notifying the LMS of events received by the LRS? I.e. LMS launches learner into content, content sends statements to remote LRS, and LMS needs to be notified of those statements so it can determine when the content is completed. Currently with SCORM/AICC the LMS launching the content is also the system that receives commit/PutParams and therefore can check the status that the package reports, and act on that by unlocking additional activities. With TinCan, this is no longer the case as its repeated many times that 1) the LMS and the LRS can be separate systems and 2) the LRS implements no business logic, and just records statements. This makes sense, and the LMS can still implement business logic to act on completion data to do things like unlock the next activity. So if someone is using a remote cloud hosted LRS, how does the LMS access this information? As best I can determine is it can connect as a client and poll repeatedly for the data. This seems pretty inefficient, especially multiplied by all the ongoing sessions that might be out there. Perhaps someone moved to a native app and statements are queued offline for a couple days. The LMS system shouldn’t have to poll every 5 minutes for 2 days just to try and determine when that learner has completed the content. So my questions are: Does the spec define a callback/notification that would allow the LMS to be aware of particular LRS statements received? and/or If the LRS does implement statement forwarding, does that mean the LMS that is the target of the statement forwarding must implement the full TinCan API for an LRS so that it can receive these forwarded statements?

  • Andrew Downes

    Hi Aaron!

    Great question. You’re absolutely right – there’s no requirement for the LRS to implement statement forwarding. I’d like to think that most LRS will, but there are other options. It’d be possible, for example, for somebody to create a product or service that sits between LRSs to sync statements.

    Bear in mind that the purpose of the xAPI specification is to help to solve the problem of interoperability, ensuring that different learning technologies can communicate with one another. It’s like USB which means you can plug any device into any computer. USB does nothing to say what the device must do, or even that it must be useful (see… ), it just ensures that the device and computer can connect. In the same way, xAPI does not specify that an LRS must have useful features, just that it can communicate with other conformant learning technologies.

    I often see people asking whether or not a product is xAPI conformant (or compliant, compatible, enabled etc.). This is a fine question to ask, but certainly shouldn’t be the only question asked in relation to xAPI. When I buy a computer I assume it’s USB conformant; my questions in that area are around how many USB ports it has, where they are positioned, how sturdy they are (I once spent a lot of money diagnosing a dead PC that turned out to be a toddler-damaged USB port). I might even ask one or two questions about the computer that aren’t related to USB! It’s the same when choosing an LRS: do ask the vendor about conformance testing (… but don’t stop there; ask them about features (some of which will be entirely unrelated to xAPI) too.

    In answer to your questions at the end of your comment, 1. Statement forwarding is one mechanism an LRS could use to notify an LMS of incoming statements. Depending on how the LRS and LMS are integrated (maybe they are able to access one another’s databases) there are other possible mechanisms. 2. Yes the LMS would be the target of those statements; it might only implement the POST method of the Statement API rather than the full LRS specification in order to support this. This would fail an LRS conformance test, but it’s not trying to be an LRS. In the same way, a cable designed only for charging a mobile device might only follow the USB specification in regards to power requirements and not the requirements in relation to data transfer and that’s ok so long as the person using the cable knows what it is and isn’t designed to do.

    Hope that helps,

  • Pingback: How to share statements - Experience API()

  • Grant Bailey

    Hi Andrew,
    Many thanks for your explanation. A couple of follow-up questions if you don’t mind – forgive me if the questions are basic, I am new to the xAPI field and trying to come to a better understanding of it.
    – Do SCORM packaging solutions such as Rustici’s SCORM Driver and ADL’s
    xAPI Wrapper permit the LMS to accept statements forwarded to it from an
    external LRS?
    – Where SCORM is not being used, is it the case that an LMS can only accept statements forwarded to it by an external LRS if (i) the LMS supports the xAPI / xAPI standard, or (ii) a plugin is installed in the LMS (I assume this what your Moodle plugin does)?
    Many thanks and regards,
    Grant Bailey

  • Andrew Downes

    Hi Grant,
    No, that’s not what those applications/wrappers/plugins do. 🙂 Rustici’s SCORM Engine can enable an LMS to receive xAPI statements from an external LRS, but then what do you want to do with the data once it’s there?

    Why don’t you drop me an email to and let me know what is it you’re trying to achieve and I should be able to give you some suggestions on the technical components that might be needed to achieve that?



  • Grant Bailey

    Many thanks Andrew, I shall do so. Grant

  • Yash Mohanty

    We need your help on How to forward my course report(LRS based) from SCORM Cloud to Grassblade LRS.
    We have inserted the endpoint/username/password of our SCORM could and also the destination endpoint/username/password on
    SCORM Cloud Statement Forwarding field but its not sending any update or statement to our grassblade LRS.
    Please guide us with some example or let us know where we are going wrong.
    It will be a great help.

  • Grant Bailey

    Hi Yash,
    As Andrew is an expert (and I am not) could you please direct your question to him. I’m afraid I do not know why you are having that issue. Good luck.