xAPI / LRS API

Updated for version 0.9.80+

The xAPI / LRS module sends learning events to an external Learning Record Store using xAPI 1.0.3. This reference documents the integration class, event mapping, statement structure, filter, and options.

Table of Contents

Checking Module Status

use BaselMedia\BricksMembers\Core\ModuleRegistry;

if ( ModuleRegistry::is_active( 'xapi_lrs' ) ) {
    // xAPI integration is available.
}

XapiLrsIntegration

Namespace: BaselMedia\BricksMembers\Integrations\XapiLrsIntegration

Singleton integration class. Loaded only when the xAPI module is enabled. Listens for brm_event, enqueues matching events to brm_xapi_queue table, and processes the queue via cron.

$integration = \BaselMedia\BricksMembers\Integrations\XapiLrsIntegration::get_instance();

Queue delay: 5 minutes (QUEUE_PROCESS_DELAY_SECONDS = 300)

Batch size: 500 statements per cron run

Retry behavior: Rows are deleted only on successful send (2xx). Failed sends remain in the queue for retry on the next cron run.

Event-to-xAPI Mapping

BRM EventxAPI Verb IRI
progress_completedhttp://adlnet.gov/expapi/verbs/completed
certificate_issuedhttp://adlnet.gov/expapi/verbs/earned
quiz_passedhttp://adlnet.gov/expapi/verbs/passed
quiz_failedhttp://adlnet.gov/expapi/verbs/failed
submission_reviewedhttp://adlnet.gov/expapi/verbs/experienced

Statement Structure

Each statement follows xAPI 1.0.3:

  • actor: mbox (mailto:user@example.com), name from WordPress user
  • verb: Resolved from event type (see mapping above)
  • object: Activity ID {home_url}/activity/{resource_type}/{resource_id}, definition with human-readable name
  • result: For quiz/certificate — success, score.scaled when available
  • context: platform: "BricksMembers", extensions with type, resource_type, resource_id, trigger, correlation_id
  • timestamp: ISO 8601 from event timestamp

Filter: brm_xapi_statement

Modify the statement before sending to the LRS.

add_filter( 'brm_xapi_statement', function( array $statement, \BaselMedia\BricksMembers\Core\Event $event ) {
    $statement['context']['extensions']['https://yoursite.com/custom'] = array(
        'custom_field' => 'value',
    );
    return $statement;
}, 10, 2 );

Parameters:

  • $statement (array) — The xAPI statement array
  • $event (Event) — The source BricksMembers event

Returns: Modified statement array (must remain valid xAPI structure)

Options Reference

OptionTypeDefault
brm_enable_xapi_lrsboolfalse
brm_xapi_endpointstring''
brm_xapi_keystring''
brm_xapi_secretstring''
brm_xapi_eventsarray['progress_completed','certificate_issued','quiz_passed','quiz_failed']

brm_xapi_key and brm_xapi_secret are non-autoload and excluded from settings export/import.

Cron Hook

Hook: brm_xapi_process_queue

Scheduled via wp_schedule_single_event( time() + 300, 'brm_xapi_process_queue' ) when events are enqueued. Processes up to 500 rows per run; remaining rows processed in subsequent cron runs. Failed statements (non-2xx) are not deleted and are retried on the next run.

Reset Enabled Cache

XapiLrsIntegration::reset_enabled_cache() — Call after settings change to clear the in-request cache for endpoint/key/secret checks. Called automatically when settings are saved.

Related

User guide: xAPI / LRS Integration Guide

Early Bird Deal

Start Building Your Membership Site Today

Create, sell, and manage your content without limits. BricksMembers gives you everything you need to build membership and LMS sites with Bricks Builder.

Lifetime updates & bug fixes • Premium support • 0% transaction fees • 60-day money-back guarantee