As of the 12.4 release, Event Subscriptions are editable through LearningBuilder for LearningBuilder Subscribers. |
RESTful APIs for establishing subscriptions between Programs. |
Subscribers must “subscribe” to a Program in order to pull its data from the Hub. The Publisher’s data are not publicly accessible to prevent it from being scraped, and to give Publishers controls over their data.
Unless otherwise specified, all endpoints on this page require an API Key with SYSTEM permissions. |
SUBSCRIPTION | |||
---|---|---|---|
A Subscription is a relationship from a Subscriber to a Publisher that allows the Subscriber to receive the Publisher’s data. A Subscription is a relationship from a Subscriber to a Publisher that allows the Subscriber to receive the Publisher’s data. | |||
Field | Type | Notes | |
| string (25 char) | The identifier of the Subscriber | |
| string (25 char) | The identifier of the Publisher | |
| UTC date/time | UTC timestamp of the last time the Subscriber pulled data from this Publisher | |
| boolean | Whether or not the subscription supports the nightly sync process. (Applies to LearningBuilder Subscribers only)
| |
| JSON | JSON structure mapping different See below for detailed explanation |
LbApiPayloadTemplate
syntax and purposeThis section applies specifically to Subscribers using LearningBuilder. Other systems will need to implement their own mechanism for processing data from the Hub.
This section applies specifically to Subscribers using LearningBuilder. Other systems will need to implement their own mechanism for processing data from the Hub.
Publishers and Subscribers think about and model their data differently, so the Publisher’s data typically needs modified or converted before it can be imported into LearningBuilder.
Each Event Subscription specifies:
Which PublisherEventCategory
values it cares about
A Handlebars template that specifies how to convert Events
of that category into a JSON format that can be imported through the Subscriber’s API/WorkflowImportQueue/CreateBatch API.
For more information about Handlebars Templates https://handlebarsjs.com/guide/#what-is-handlebars
For more info on the data manipulation Helpers available, please refer https://github.com/Handlebars-Net/Handlebars.Net.Helpers
Those templates are stored as the batchRowTemplate
property in the LbApiPayloadTemplate
f an EventSubsription
:
"LbApiPayloadTemplate": { "{EventCategory1}": { "action": "import (default) | ignore", "label": "human readable note", "importProcessId": {WIQ Process Id}, "batchRowTemplate": "{handlebars template}" }, // ... additional category mappings as needed ... "_default": { "action": "import (default) | ignore", "label": "human readable note", "importProcessId": {WIQ Process Id}, "batchRowTemplate": "{handlebars template}" } } |
Each key within the LbApiPayloadTemplate
should match one of the Publisher’s PublisherEventCategory
values, or the special marker “_default
” which indicates a default template.
There are two reasons to include a PublisherEventCategory
mapping:
To import it into the Subscriber, using the specified batchRowTemplate
To ignore it, because the Subscriber isn’t interested in that category of Publisher data
Example / scenario | Sample | |
---|---|---|
Subscribe to all Publisher event categories, using the same template for everything |
| |
Subscribe to all Publisher event data, with special handling for a specific category |
| |
Subscribe to a specific category only, ignoring everything else |
| |
Ignore a specific category, process everything else using a common template |
|
Omitting the “_default
” mapping has the same result as setting it to "action": "ignore"
, but it is recommended to explicitly include the default mapping to make the configuration easier to understand.
Omitting the “_default
” mapping has the same result as setting it to "action": "ignore"
, but it is recommended to explicitly include the default mapping to make the configuration easier to understand.
It works like this:
When Publishers push data into the Hub, they specify a PublisherEventCategory
value. (For example, this might differentiate between data representing a completed course and data representing work history)
A Subscriber’s EventSubscription
contain contain one or more templates, each one mapped to a specific PublisherEventCategory
value. (This allows the Subscriber to convert those courses and work history entries in different ways)
Each template converts a single PublisherEventData
JSON object into a different JSON schema that can be passed to the Subscriber’s API/WorkflowImportQueue/CreateBatch API endpoint.
When LearningBuilder synchronizes data, it loops through each PublisherEventData
item, converts it using the relevant template, and then makes a single call to API/WorkflowImportQueue/CreateBatch to import the data.
“Event Subscriptions” track which Programs will receive the Events published by other Programs. |
GET /api/programs/{programId}/eventSubs
Returns a list of Event Subscriptions for the specified Program. |
Response Code | Headers and Body | |
---|---|---|
200 (Ok) |
|
GET /api/programs/{programId}/eventSubs/{publisherProgramId}
Returns the details about |
Response Code | Headers and Body | |
---|---|---|
200 (Ok) |
|
POST /api/programs/{programId}/eventSubs
Creates a new Event Subscription. Returns an error if it already exists. Audit fields such as |
{ "PublisherProgramId": "PublisherProgramId", "SyncEnabled": true, "LbApiPayloadTemplate": { "SOME_CATEGORY": { "action": "import", "label": "ACME Course", "importProcessId": {WIQ Process Id}, "batchRowTemplate": "{handlebars template}" } } } |
Response Code | Headers and Body |
---|---|
201 (Created) | A new Event Subscription was created. No body is returned. HTTP headers:
|
PATCH /api/programs/{programId}/eventSubs/{publisherProgramId}
Updates an existing Event Subscription. |
{ "LastSyncUtc": "date", "SyncEnabled": true, "LbApiPayloadTemplate": { see docs above } } |
Response Code | Headers and Body |
---|---|
204 (No Content) | Update was performed successfully. No body is returned. |
DELETE /api/programs/{programId}/eventSubs/{publisherProgramId}
Deletes an existing Event Subscription. |
Response Code | Headers and Body |
---|---|
204 (No Content) | Delete was performed successfully. No body is returned. |