Query content records

Prev Next
Get
/contents

Retrieves multiple (up to 1,000 per page) content records with pagination and filtering options.

Security
HTTP
Type basic

HTTP Basic authentication using your Tenant ID and API secret.

  • Username is the Tenant ID (i.e. eu-west-2_AbcdEfghI)
  • Password is the API secret you would have received.

You can also authenticate using OAuth 2.0 client credentials (oauth2 security scheme) instead of Basic auth.

OAuth

OAuth 2.0 client credentials authentication.

Use the following token endpoints (replace :tenantId with your Tenant ID):

  • Public API access tokens

    • Staging: https://public.api.learnstaging.link/oauth2/token/:tenantId
    • Production: https://public.api.learn.link/oauth2/token/:tenantId
    • Staging MEA: https://public.api.meastaging.learn.tech/oauth2/token/:tenantId
    • Production MEA: https://public.api.mea.learn.tech/oauth2/token/:tenantId
  • Webhooks access tokens

    • Staging: https://user.api.learnstaging.link/oauth2/token/:tenantId
    • Production: https://user.api.learn.link/oauth2/token/:tenantId
    • Staging MEA: https://user.api.meastaging.learn.tech/oauth2/token/:tenantId
    • Production MEA: https://user.api.mea.learn.tech/oauth2/token/:tenantId

All access tokens must be sent using the Authorization: Bearer <access_token> header.

Scopes

For API access (non-webhooks), the following scopes are available:

  • api/all – Full read and write access to the API.
  • api/read – Read-only access to the API.
  • api/write – Write access to the API.

For webhooks, the following scopes are available:

  • api/webhooks – Access to webhook functionality.
  • api/all – Full read and write access to the API, including webhooks.

Tokens must include appropriate scopes for the endpoints you wish to call.

FlowClient Credentials
Token URLhttps://public.api.learn.link/oauth2/token/:tenantId
Query parameters
page
integer

Page number for pagination

Minimum1.0
Default1
Example1
perPage
integer

Number of records per page

Minimum1.0
Maximum1000.0
Default20
Example20
types
string

Only return content whose type is in this list (comma-separated, case-insensitive). Allowed values: article, assessment, broadcast, cmi5, elearning, event, file, pathway, question, quiz, scorm, url, video, mixed. If both types and omitTypes are provided, only types is applied; omitTypes is ignored.

Examplepathway,event
omitTypes
string

Exclude content whose type is in this list (comma-separated, case-insensitive). Allowed values: article, assessment, broadcast, cmi5, elearning, event, file, pathway, question, quiz, scorm, url, video, mixed. Ignored when types is also provided.

Exampleurl,quiz
statuses
string

Only return content whose state is in this list (comma-separated, case-insensitive). Allowed values: created, published, archived, deleted. When used with omitStatuses, results must match an included status and must not match any omitted status. Note: deleted filters on the deletion flag, not on the response status field. A deleted record reports its pre-deletion status (created, published or archived), so the returned status values do not match this filter value.

Examplepublished,archived
omitStatuses
string

Exclude content whose state is in this list (comma-separated, case-insensitive). Allowed values: created, published, archived, deleted. When statuses is not provided, non-omitted lifecycle states keep the default catalogue behaviour (non-archived and non-deleted), unless archived or deleted is listed here. Note: deleted filters on the deletion flag, not on the response status field. A deleted record reports its pre-deletion status (created, published or archived).

Exampledeleted
updatedSince
string (date-time)

Return only items updated on or after this date/time (ISO 8601).

Example2023-01-01T00:00:00Z
Responses
200

Successful response

{
  "pagination": {
    "totalResults": 745,
    "totalPages": 38,
    "page": 1,
    "perPage": 20
  },
  "results": [
    {
      "id": "507f1f77bcf86cd799439011",
      "title": "Thrive Customer Journey",
      "description": "

This diagram highlights the key things you may experience on your journey as a customer of Thrive's LXP

", "tags": [ "customer journey", "faq", "customer success", "lxp" ], "skills": [ "customer success" ], "topics": [ "customer journey", "faq" ], "type": "file", "createdAt": "2019-02-18T17:42:11.708Z", "updatedAt": "2020-02-19T21:06:02.574Z", "author": "5c69be0e3a38412f022b4719", "isOfficial": true, "status": "published", "duration": { "value": 15, "unit": "minutes" }, "contentHistory": [ { "action": "published", "timestamp": "2020-02-19T21:00:00.000Z", "performedBy": { "type": "user", "value": "5c69be0e3a38412f022b4719" } } ], "lastUpdatedBy": { "id": "5c69be0e3a38412f022b4719", "email": "author@example.com", "reference": null }, "provider": { "id": "thrive", "name": "Thrive" } }, { "id": "507f1f77bcf86cd799439012", "title": "Thrive on-boarding journey", "description": "

This infographic will talk you through the key things you will experience during the Thrive on boarding process

", "tags": [ "customer journey", "faq", "customer success", "lxp" ], "type": "file", "createdAt": "2019-02-19T16:19:24.399Z", "updatedAt": "2020-02-19T21:06:35.384Z", "author": "5c69be0e3a38412f022b4719", "isOfficial": true, "status": "created", "duration": { "value": 15, "unit": "minutes" }, "contentHistory": [ { "action": "created", "timestamp": "2019-02-19T16:19:24.399Z", "performedBy": { "type": "user", "value": "5c69be0e3a38412f022b4719" } } ], "lastUpdatedBy": { "id": "5c69be0e3a38412f022b4719", "email": "author@example.com", "reference": null }, "provider": { "id": "linkedin", "name": "LinkedIn Learning" } } ] }
Expand All
object
pagination
object (Pagination)

Details of the pagination

totalResults
integer

Total number of results matching the query

Example48
totalPages
integer

Total number of pages available

Example3
page
integer

Current page number

Minimum1.0
Default1
Example1
perPage
integer

Number of results per page

Minimum1.0
Maximum1000.0
Default100
Example20
results
Array of object (Content)
object
id
string

Unique identifier for the content

Pattern^[0-9a-fA-F]{24}$
Example5c8936159ec2d00010cdd334
title
string

Title of the content

Max length255
ExampleAn amazing video
description
string

Detailed description of the content, may contain HTML

Max length65536
ExampleThis content looked really interesting and relevant to recent conversations in the development team
tags
Array of string

List of tags associated with this content. Omitted when the tag source cannot be read, so an absent field means "tags unavailable" rather than "no tags".

string
Max length255
Examplelearning
skills
Array of string

The tags entries that the taxonomy marks as a skill. Additive: every name is also in tags. A tag the taxonomy does not hold is in neither skills nor topics. Both fields are absent when the taxonomy cannot be read.

string
Max length255
Exampleleadership
topics
Array of string

The tags entries that the taxonomy marks as a topic. Additive: every name is also in tags. A tag the taxonomy does not hold is in neither topics nor skills. Both fields are absent when the taxonomy cannot be read.

string
Max length255
Exampleonboarding
type
string

The kind of artifact associated with this content record.

Courses are represented as pathway. Pathways will be served by a dedicated Pathways API in a future release and will stop appearing on this endpoint at that point, so treat pathway as temporary here.

Valid values[ "article", "assessment", "broadcast", "cmi5", "elearning", "event", "file", "mixed", "pathway", "question", "quiz", "scorm", "url", "video" ]
Max length24
Examplevideo
createdAt
string (date-time)

Timestamp when the content was created

Example2019-03-13T16:15:24.000Z
updatedAt
string (date-time)

Timestamp when the content was last updated

Example2019-03-13T16:15:24.000Z
author
string | null

User ID who authored this content. Nullable for auto-curated content.

Pattern^[0-9a-fA-F]{24}$
Example5c8936159ec2d00010cdd334
isOfficial
boolean

Whether the content has been recognized for its importance or validity by the customer organization

Exampletrue
cpdCategoryId
string | null

The CPD category the content is recorded against, or null when it has none. Present when a record is read by its id or returned by a v2 create or update, for content held by the content source that carries CPD data. The field is not present in the results of the list endpoint, nor on a record that exists only in the legacy content source.

Pattern^[0-9a-fA-F]{24}$
Example507f1f77bcf86cd799439012
duration
object | null

The expected time to complete the content. Null for Event content types. For SAP-imported content, this value may reflect a system default rather than a precise measured duration.

value
integer | null

Duration in the specified unit. Null when no duration is available (e.g. pathways).

Example15
unit
string

The unit of the duration value. Always 'minutes'.

Valid values[ "minutes" ]
Exampleminutes
contentHistory
Array of object (ContentHistoryEntry)

Chronological history of actions on this content (from content-service). May be empty when there is no recorded history.

object
action
string

Type of change or event recorded for the content.

timestamp
string (date-time)

When the action occurred.

performedBy
object (ContentHistoryPerformedBy)
type
string

Kind of actor (for example user or system).

value
string

Identifier or value associated with the actor.

lastUpdatedBy
object | null

Last actor who updated the content, derived from history (or author fallback). Null when neither history nor author resolves.

id
string | null

User ID or service identifier.

email
string | null

Email from the user view when available.

reference
string | null

External reference (e.g. HR id) when stored on the user view.

provider
object

The content provider. Defaults to Thrive for natively created content.

id
string

Provider identifier key.

Examplethrive
name
string

Human-readable provider display name.

ExampleThrive
status
string

Lifecycle status of the content. A legacy (content-service) record derives the value: archived content reports archived, content with a publish time reports published, and all other content reports created. A content-core record maps its lifecycle status onto the same values, where draft and ready both report created. deleted is a filter value only and is never returned: a legacy record returned by a deleted status filter reports its pre-deletion state, and a deleted content-core record is physically gone.

Valid values[ "created", "published", "archived" ]
Examplepublished
items
Array of object (ContentItemState)

The items that make up a content record, with per-item processing state. Only GET /contents/{id} returns this field, and only for records served from content-core; the GET /contents list never includes it.

object

One item within a content record, with its processing state.

id
string

Unique identifier for the item

Example5c8936159ec2d00010cdd334
type
string

The item type

Exampleelearning
rank
integer

The item's position within the content, lowest first

Example0
summary
string

A short label for the item, shown to learners

ExampleWelcome
status
string

The item's processing state. An item must reach ok before the content can become ready.

Valid values[ "processing", "ok", "error" ]
Exampleprocessing
error
string | null

Why processing failed, when status is error

Exampleopenapi-json-null-sentinel-value-2BF93600-0FE4-4250-987A-E5DDB203E464
401

Unauthorized

object

Unauthorized

status
number
Example401
error
string
ExampleUnauthorized
message
string
404

Not Found

object

Not found

status
number
Example404
error
string
ExampleNot Found
message
string #deprecatedtemplate# #additional-property-template#
OneOf
string
string
object
object