Skip to main content

Listing your We Are Stories in your LMS (Content Discovery API)

Use the We Are API to let your LMS list your published Stories automatically, instead of copy-pasting launch links.

If your LMS is already integrated with We Are, adding a Story today means copying its launch link and pasting it into your LMS. The We Are Content Discovery API removes that manual step: your LMS can fetch a list of your published Stories, with title, thumbnail and launch link, so admins can simply pick a Story from a list.

The API is read-only and only returns content metadata (never user or learner data). It only sees Stories that are published.

Let me show you how to set this up.

Good to know: The API is enabled per account. If you don't see the API keys section described below, reach out to us via the chat and we'll help you get set up.

Step 1: Generate an API key

Your LMS authenticates with an API key, which an admin on your We Are account creates.

1) In the We Are dashboard, go to Settings → Integrations.

2) Under API keys, click Generate key and give the key a name you'll recognise, such as the name of your LMS.

3) Copy the key straight away. For security reasons, it's shown only once. If you lose it, revoke it and generate a new one.

A few things to know about API keys:

  • You can have up to 2 active keys at a time, which makes it easy to rotate to a new key without downtime.

  • You can revoke a key at any time from the same screen, and it stops working immediately.

  • Each key is read-only and only works for your own account.

Step 2: Connect your LMS

Give the API key to your LMS or integration. It uses the key to fetch your published Stories from:

GET https://api.wearelearning.io/api/v1/stories

with the key sent in a header:

X-Api-Key: wal_live_...

Each Story is returned with its title, a thumbnail and a url. You'll find full request and response details in the technical documentation below.


Step 3: Launch Stories from your LMS

The url returned for each Story is exactly the same launch link you get when you copy the Story's link in We Are, so everything in our existing LMS guides still applies:

That's it! Your LMS now always shows an up-to-date list of your published Stories. 🎉

Technical documentation

Hello techie! Here's everything you need to build against the API.

Base URL: https://api.wearelearning.io (HTTPS only; requests over plain HTTP are rejected with 403).

Authentication

Send the API key with every request, using either:

X-Api-Key: wal_live_...

or:

Authorization: Bearer wal_live_...

An invalid, revoked or expired key returns 401 with an empty body.

GET /api/v1/stories

Returns your account's published Stories.

Parameter

Where

Description

pageSize

Query string

Items per page. Default 25, min 1, max 50.

x-continuation-token

Request header

Pagination token from the previous response. Omit it for the first page.

Example request:

CURL_EXAMPLE_HERE

Example response:

{
"data": [
{
"id": "aBc12xYz",
"title": "Fire safety onboarding",
"url": "https://play.wearelearning.io/play/aBc12xYz",
"thumbnail": "https://.../thumbnail.jpg",
"updatedAt": "2026-10-12T09:41:07Z"
}
],
"count": 1,
"pageSize": 25,
"continuationToken": null
}

Field

Description

id

The Story's public id (the same id as in player links).

title

Story title.

url

Launch link. Behaves exactly like a copied Story link.

thumbnail

Cover image URL, or null.

updatedAt

Time of the last change, in UTC.

Pagination

As long as continuationToken in the response isn't null, there are more pages to fetch: repeat the request with that token in the x-continuation-token header. count is the number of items on the current page.

Caching and rate limits

  • Responses can be cached for 60 seconds (Cache-Control: private, max-age=60), so there's no need to poll more often than that.

  • Each key can make 60 requests per minute. Above that, you'll get a 429 with a Retry-After header. Wait that many seconds before retrying.

Errors

Status

Meaning

401

Missing or invalid API key.

403

The request was sent over plain HTTP, or the subscription isn't active.

404

The API isn't enabled for the account. Contact us to enable it.

422

pageSize is out of range, or the continuation token is invalid.

429

Rate limit reached. Honour the Retry-After header.

All errors except 401 use the standard application/problem+json format with a stable code field, for example rate_limit_exceeded.

Questions? Reach out via the chat. We're happy to help you with your integration.

Related Articles

Did this answer your question?