Activities: xAPI Launch Link

Maintained by Picture of Andrew Downes Andrew Downes
Launch externally xAPI (Tin Can) activities from Moodle and track on any LRS. Compatible with Storyline, Captivate and others!
224 sites
11 fans
This plugin lets you launch xAPI activities from a Moodle course and then track them with any LRS. You don't need to upload the activities to Moodle - just host them anywhere on the internet. This is compatible with activities implementing the Rustici launch method as described here: This includes Articulate Storyline and Adobe Captivate content. 
Get the code and give it a go here:
Suggestions, bug reports, code reviews and contributions are very welcome! Watch this space for more xAPI related Moodle plugins in future. 


This plugin is part of set Tin Can.


Picture of Andrew Downes
Andrew Downes (Lead maintainer)
Please login to view contributors details and/or to contact them

Comments RSS

Show comments
  • Picture of edi edi
    Wed, 1 Jul 2015, 6:59 PM
    Hi Andrew,
    you are writing "Tin Can activities from a Moodle course and then track them with any LRS": I understand that you're launching the tin can web-app which is connecting to an LRS - no communication with moodle at all ... right?

    Is it possible to set up moodle as a LRS or to keep track in some way like usage/results/progress ... ?

  • Picture of Andrew Downes
    Wed, 1 Jul 2015, 7:09 PM
    There's not direct communication, but there is indirect communication in that Moodle will query the LRS for in order to calculate completion. Moodle can also query the LRS for other data. See for example the Tin Can Learner Stream plugin.
  • Picture of rob jephcote
    Tue, 7 Jul 2015, 10:08 PM
    I am trying to use this plugin with Learning Locker (which I already use successfully) but when trying to launch TinCan using this plugin to launch my Tin Can I get the following error:

    Warning: fopen( failed to open stream: HTTP request failed! HTTP/1.1 409 Conflict in /var/www/vhosts/ on line 405

    Warning: stream_get_contents() expects parameter 1 to be resource, boolean given in /var/www/vhosts/ on line 408

    Warning: stream_get_meta_data() expects parameter 1 to be resource, boolean given in /var/www/vhosts/ on line 409
    The Learning Record Store is not available. Please contact a system administrator.

    Error attempting to set learner preferences to Agent Profile API.

    array(2) {
    ["contents"]=> bool(false)
    ["metadata"]=> NULL

    Any ideas what I'm doing wrong?
  • Picture of Andrew Downes
    Tue, 7 Jul 2015, 11:07 PM
    Hi Rob,
    This error could be caused by the same user launching the content at exactly the same time. Or it could be a bug in either the plugin or learning locker.
    Are you using the latest code from ? (I need to do another release here) Are you using the latest release of Learning Locker?

    If you answered yes to both questions, can you also test with SCORM Cloud LRS?
  • Picture of John Donaldson
    Thu, 30 Jul 2015, 8:27 PM
    I have this working on a test install of Moodle 2.6, but using tincanlaunch version 2014072300. I installed the latest version of tincanlaunch (version 2015033100) on another test server running Moodle 2.6 and get the following error when trying to launch a tincan session:

    PHP Fatal error: Class 'core\\event\\course_module_viewed' not found in /var/www/moodle/mod/tincanlaunch/classes/event/course_module_viewed.php on line 3

    I looked at that class and it appears to be using something only available in Moodle 2.7 (@since Moodle 2.7). The module instructions indicate all I need is Moodle 2.5, so I'm unsure of how to get this to work with 2.6.
  • Picture of Andrew Downes
    Thu, 30 Jul 2015, 8:49 PM
    Hi John,
    I don't have any plans to make the current version work with older versions of Moodle, but there is an unsupported branch here that should work (missing newer improvements):

    If you do want to get the current version working in older versions of Moodle, I suggest your best bet is to try and undo most of this PR:

    Hope that helps.

  • Picture of John peater
    Thu, 27 Aug 2015, 6:23 PM
    hope your doing good!
    when you will release moodle 2.9 comparability version ....
  • Picture of Andrew Downes
    Thu, 27 Aug 2015, 6:36 PM
    Hi John,
    Have you tried version 1.1 of the plugin? Are there any compatibility problems with Moodle 2.9? Please raise an issue on Github if there are any problems. I would like this plugin to work with the latest versions of Moodle.

    I don't have any immediate plans to work on this plugin, but am happy to facilitate the pull request process if you want to submit an update.

  • Picture of Andrew Downes
    Fri, 27 Nov 2015, 4:02 AM
    New version for Moodle 3.0 including Tin Can zip package upload coming soon!
  • Picture of kk sagar
    Sat, 2 Apr 2016, 8:18 PM
    Hi all,

    I am in problem related to Tincan plugin.
    I want to know that how to get launch URL and activity ID for the moodle course.
    I need this solution quick.
    Please help me out.

  • Picture of Andrew Downes
    Tue, 5 Apr 2016, 4:54 PM
    Hi kk sagar,
    The launch url and activity id relate to the activity you want to launch and not to the Moodle course the plugin sits in.

    If you are trying to launch a Moodle course then this is probably the wrong plugin. Can you let us know what your end goal is here?

    If you are trying to launch an e-learning course created in an authoring tool like captivate or storyline, then the easiest thing to do is upload the published zip package. The launch url and activity id will then be automatically populated from the zip.

  • Picture of Craig Ferguson
    Tue, 16 Aug 2016, 6:19 AM
    This plugin is great, I've got it connected to my LRS (GrassBlade) and everything is working perfectly.

    I wish just wondering about the anatomy of the launch link that gets produced - specifically, what is the "Registration" value and how is it determined? From reading the documentation that Rustici has provided, it seems like this is supposed to provide the xAPI statements with information about the activity's context, is that correct? If so, can it be altered? Is there a formula for determining what the Registration should be?

  • Picture of Andrew Downes
    Tue, 16 Aug 2016, 9:05 PM
    Hi Craig,
    That's not how registration works; it's just a unique id representing a particular attempt/save.

  • Picture of Dwain Beckford
    Tue, 29 Nov 2016, 10:41 PM
    Hi Andrew, thanks for your work on this plugin and making it available to us. I have a small question here. How do I go about adding new fields to the tin Can statements. For example I want to add a field under account for the actor. I found that the actor part of the statement is created by the function tincanlaunch_getactor($tincanlaunch->id). I added a new field but it is not recorded in the statement sent to the LRS. Do I need to add the field in any other areas?
  • Picture of Andrew Downes
    Wed, 30 Nov 2016, 2:37 AM
    Hi Dwain,
    For purposes of interoperbility xAPI statements have a specific defined structure and if you (successfully) add in extra fields that are not supported, then the statements will be rejected by the LRS (if you use a good LRS).

    There's probably a better way to do whatever it is you're trying to do. Can you give the full background of what you're trying to achieve?

1 2
Please login to post comments