Cloud Academy Learning Management System API
The Learning Management System API from Cloud Academy — 9 operation(s) for learning management system.
The Learning Management System API from Cloud Academy — 9 operation(s) for learning management system.
swagger: '2.0'
info:
title: QA Learning Management System API
description: "\n## Keys for QA API\n\nQA uses API keys to authenticate calls to its API.\n\nThe Authentication used is OAuth2 with client credential flow; Note that the SSL channel securely encrypts your keys pair.\n\n## How to find or generate Your API Key\n\nFor integrating with the QA API, you need to generate an API key pairs. Enterprise members with Admin permissions can generate and view their own API keys on the settings area of their Company Account [here](https://platform.qa.com/organizations/settings/api/).\n\nNote that each admin comes with his distinct API keys pair.\n\n## Revoking and Regenerating an API keys pair\n\nAt any time, an admin can generate new API keys pairs; by going through this step, the previous keys pair is revoked.\n\n## How to authenticate API calls using the keys pair\n\nIn order to authenticate API calls each request needs to provide a valid access token. \n\nTo generate a token, a dedicated endpoint exists:\n\n__https://platform.qa.com/oauth2/token/__\n\nThe token generation endpoint accepts a POST call and works using Basic Authentication where the user and the password to be provided are the API keys:\n\nusername is the CLIENT_ID\npassword is the CLIENT_SECRET\n\nIn addition to requiring the CLIENT_ID and CLIENT_SECRET for the authorization header, the API also requires the content-type to be set to 'application/x-www-form-urlencoded' and the body must contain 'grant_type=client_credentials'.\n\nThis is an example of the token generation in cURL:\n\n```bash\ncurl 'https://platform.qa.com/oauth2/token/' \n -H 'accept: application/json'\n -H 'authorization: Basic [YOUR_CLIENT_ID:YOUR_CLIENT_SECRET]'\n -H 'content-type: application/x-www-form-urlencoded'\n --data-raw 'grant_type=client_credentials'\n```\n\nThe token has a limited duration of 10 hours, so it could be cached to be reused and renewed when it expires, but it is also perfectly fine to generate a new one before each API call.\n\n## Get Help\nIn case of issues, more info can be found in the following [article](https://support.cloudacademy.com/hc/en-us/articles/360040446031-Cloud-Academy-API)\n"
version: v1
host: platform.qa.com
basePath: /restapi
schemes:
- https
consumes:
- application/json
produces:
- application/json
security:
- oauth2: []
tags:
- name: Learning Management System
paths:
/v1/content/catalog/:
parameters: []
get:
operationId: v1_content_catalog_list
summary: Access the QA Platform content catalog, with pagination [DEPRECATED]
description: '
## Description
This API returns a catalog of the items in the QA Platform library, including the custom content your company created in Content Engine.
This API is deprecated: please use /v2/content/catalog/ instead.
'
parameters:
- name: page[number]
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page[size]
in: query
description: Number of results to return per page.
required: false
type: integer
- name: filter[content_type]
in: query
description: '[Optional] A comma-separated list of content types to limit the returned catalog.
Here the possible values:
- lp
- course
- quiz
- exam
- resource
- lab
- labchallenge
e.g.: https://...&filter[content_type]=course,labchallenge'
type: string
- name: additional_fields
in: query
description: '[Optional] A comma-separated list of additional fields that can be shown in the catalog.
Please note: using these parameters can affect performances.
Here the possible values:
- description: represents the full description of the content
- skills: this will includes information about platforms and skills related to the content
e.g.: https://...&additional_fields=skills,description'
type: string
responses:
'200':
description: ''
schema:
title: body
required:
- data
type: object
properties:
data:
title: data
type: array
items:
required:
- attributes
- type
- id
type: object
properties:
attributes:
title: attributes
required: []
type: object
properties:
items:
title: items
type: array
items:
type: object
properties:
content_type:
title: content_type
type: string
content_type_label:
title: content_type_label
type: string
description:
title: description
type: string
difficulty_level:
title: difficulty_level
type: string
duration:
title: duration
type: number
entity_id:
title: entity_id
type: string
platforms:
title: platforms
type: array
items:
type: object
properties:
id:
title: id
type: number
name:
title: name
type: string
publish_date:
title: publish_date
type: string
format: date-time
short_description:
title: short_description
type: string
skills:
title: skills
type: array
items:
type: object
properties:
id:
title: id
type: number
name:
title: name
type: string
slug:
title: slug
type: string
title:
title: title
type: string
url:
title: url
type: string
id:
title: id
type: string
links:
title: links
type: object
properties:
self:
title: schema
type: string
format: uri
type:
title: type
type: string
example: catalog
links:
title: links
type: object
properties:
first:
title: first
type: string
format: uri
last:
title: last
type: string
format: uri
next:
title: next
type: string
format: uri
prev:
title: prev
type: string
format: uri
meta:
title: meta
type: object
properties:
pagination:
title: pagination
type: object
properties:
count:
title: count
type: integer
format: int32
page:
title: page
type: integer
format: int32
pages:
title: pages
type: integer
format: int32
'401':
description: Executing the request without credentials.
examples:
body:
errors:
- detail: Authentication credentials were not provided.
source:
pointer: /data
status: '401'
'404':
description: Catalog not found
examples:
body:
errors:
- detail: Searched catalog does not exist
source:
pointer: /data
status: '404'
'500':
description: Internal server error.
examples:
body:
errors:
- detail: Internal server error.
source:
pointer: /data
status: '500'
'503':
description: Service unavailable.
examples:
body:
errors:
- detail: The service is temporary unavailable. Please try again later.
source:
pointer: /data
status: '503'
consumes:
- application/vnd.api+json
produces:
- application/vnd.api+json
tags:
- Learning Management System
/v1/content/entity/:
parameters: []
get:
operationId: v1_content_get_entity
summary: Access to a specific QA Platform content [DEPRECATED]
description: '
## Description
This API returns a specific content of the QA Platform library.
This API is deprecated: please use /v2/content/entity/ instead.
'
parameters:
- name: filter[uuid]
in: query
description: uuid of the content
required: true
type: string
- name: filter[content_type]
in: query
description: '[Optional] Limit the search on the given content type.
Here the possible values (you can pick only one):
- lp
- course
- quiz
- exam
- resource
- lab
- labchallenge
e.g.: https://...&filter[content_type]=course,labchallenge'
type: string
responses:
'200':
description: ''
schema:
title: body
required:
- data
type: object
properties:
data:
title: data
required:
- attributes
- type
- id
type: object
properties:
attributes:
title: attributes
required: []
type: object
properties:
content_type:
title: entity_type
type: string
content_type_label:
title: content_type_label
type: string
description:
title: description
type: string
difficulty_level:
title: difficulty_level
type: string
duration:
title: duration
type: number
entity_id:
title: entity_id
type: string
platforms:
title: platforms
type: array
items:
type: object
properties:
id:
title: id
type: number
name:
title: name
type: string
publish_date:
title: publish_date
type: string
format: date-time
short_description:
title: short_description
type: string
skills:
title: skills
type: array
items:
type: object
properties:
id:
title: id
type: number
name:
title: name
type: string
slug:
title: slug
type: string
title:
title: title
type: string
url:
title: url
type: string
id:
title: id
type: string
links:
title: links
type: object
properties:
self:
title: schema
type: string
format: uri
type:
title: type
type: string
example: content
'401':
description: Executing the request without credentials.
examples:
body:
errors:
- detail: Authentication credentials were not provided.
source:
pointer: /data
status: '401'
'404':
description: Content not found
examples:
body:
errors:
- detail: Searched content does not exist
source:
pointer: /data
status: '404'
'500':
description: Internal server error.
examples:
body:
errors:
- detail: Internal server error.
source:
pointer: /data
status: '500'
'503':
description: Service unavailable.
examples:
body:
errors:
- detail: The service is temporary unavailable. Please try again later.
source:
pointer: /data
status: '503'
consumes:
- application/vnd.api+json
produces:
- application/vnd.api+json
tags:
- Learning Management System
/v2/company/progress/:
parameters: []
get:
operationId: v2_company_progress_list
summary: Retrieve content progress for your organization member by member
description: "\n## Description\nThis API will return a list of the members of the company with a link with their own progress.\nThe API does not apply any default pagination. Thus, `links` and `meta` keys in the response are optional and will appear only if a pagination is explicitly applied. \nNote: Please bear in mind that the data retrieved is updated every hour and not in real time.\n"
parameters:
- name: filter[first_name]
in: query
description: ''
required: false
type: string
- name: filter[first_name__in]
in: query
description: Multiple values may be separated by commas.
required: false
type: string
- name: filter[last_name]
in: query
description: ''
required: false
type: string
- name: filter[last_name__in]
in: query
description: Multiple values may be separated by commas.
required: false
type: string
- name: filter[email]
in: query
description: ''
required: false
type: string
- name: filter[email__in]
in: query
description: Multiple values may be separated by commas.
required: false
type: string
- name: sort
in: query
description: Which field to use when ordering the results.
required: false
type: string
- name: page[number]
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page[size]
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
title: body
required:
- data
type: object
properties:
data:
title: data
type: array
items:
required:
- attributes
- type
- id
type: object
properties:
attributes:
title: attributes
required: []
type: object
properties:
email:
title: email
type: string
format: email
first_name:
title: first_name
type: string
last_name:
title: last_name
type: string
id:
title: id
type: string
links:
title: links
type: object
properties:
self:
title: schema
type: string
format: uri
type:
title: type
type: string
example: company_membership_progress
links:
title: links
type: object
properties:
first:
title: first
type: string
format: uri
last:
title: last
type: string
format: uri
next:
title: next
type: string
format: uri
prev:
title: prev
type: string
format: uri
meta:
title: meta
type: object
properties:
pagination:
title: pagination
type: object
properties:
count:
title: count
type: integer
format: int32
page:
title: page
type: integer
format: int32
pages:
title: pages
type: integer
format: int32
'401':
description: Executing the request without credentials.
examples:
body:
errors:
- detail: Authentication credentials were not provided.
source:
pointer: /data
status: '401'
'500':
description: Internal server error.
examples:
body:
errors:
- detail: Internal server error.
source:
pointer: /data
status: '500'
'503':
description: Service unavailable.
examples:
body:
errors:
- detail: The service is temporary unavailable. Please try again later.
source:
pointer: /data
status: '503'
consumes:
- application/vnd.api+json
produces:
- application/vnd.api+json
tags:
- Learning Management System
/v2/content/catalog/:
parameters: []
get:
operationId: v2_content_catalog_list
summary: Access the QA Platform content catalog, with pagination
description: "\n## Description\nThis API returns a catalog of the items in the QA Platform library, including the custom content your company created in Content Engine.\nThis API replaces /v1/content/catalog/ to adhere to the new content terminology. The functionality remains the same. \n"
parameters:
- name: page[number]
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page[size]
in: query
description: Number of results to return per page.
required: false
type: integer
- name: filter[content_type]
in: query
description: '[Optional] A comma-separated list of content types to limit the returned catalog.
Here the possible values:
- course
- lesson
- quiz
- exam
- resource
- lab
- labchallenge
e.g.: https://...&filter[content_type]=lesson,labchallenge'
type: string
- name: filter[content_status]
in: query
description: '[Optional] A comma-separated list of content statuses to limit the returned catalog.
Here the possible values:
- archived
- outdated
- published
- unpublished
- draft
e.g.: https://...&filter[content_status]=published,outdated'
type: string
- name: filter[is_public]
in: query
description: '[Optional] A boolean flag to limit the returned catalog to public or non-public content. If omitted, both are returned.
Here the possible values:
- true
- false
e.g.: https://...&filter[is_public]=true'
type: boolean
- name: additional_fields
in: query
description: '[Optional] A comma-separated list of additional fields that can be shown in the catalog.
Please note: using these parameters can affect performances.
Here the possible values:
- description: represents the full description of the content
- skills: this will includes information about platforms and skills related to the content
- content_status: represents the status of the content
- is_public: tells if content is public or not
e.g.: https://...&additional_fields=skills,description,content_status,is_public'
type: string
- name: filter[publish_date_gte]
in: query
description: '[Optional] Publish date of the content greater than or equal to the given date-time value.
'
type: string
format: date-time
- name: filter[publish_date_lte]
in: query
description: '[Optional] Publish date of the content less than or equal to the given date-time value.
'
type: string
format: date-time
responses:
'200':
description: ''
schema:
title: body
required:
- data
type: object
properties:
data:
title: data
type: array
items:
required:
- attributes
- type
- id
type: object
properties:
attributes:
title: attributes
required: []
type: object
properties:
items:
title: items
type: array
items:
type: object
properties:
content_status:
title: content_status
type: string
content_type:
title: content_type
type: string
content_type_label:
title: content_type_label
type: string
description:
title: description
type: string
difficulty_level:
title: difficulty_level
type: string
duration:
title: duration
type: number
entity_id:
title: entity_id
type: string
image_url:
title: image_url
type: string
is_public:
title: is_public
type: boolean
platforms:
title: platforms
type: array
items:
type: object
properties:
id:
title: id
type: number
name:
title: name
type: string
publish_date:
title: publish_date
type: string
format: date-time
short_description:
title: short_description
type: string
skills:
title: skills
type: array
items:
type: object
properties:
id:
title: id
type: number
name:
title: name
type: string
slug:
title: slug
type: string
title:
title: title
type: string
url:
title: url
type: string
id:
title: id
type: string
links:
title: links
type: object
properties:
self:
title: schema
type: string
format: uri
type:
title: type
type: string
example: catalog
links:
title: links
type: object
properties:
first:
title: first
type: string
format: uri
last:
title: last
type: string
format: uri
next:
title: next
type: string
format: uri
prev:
title: prev
type: string
format: uri
meta:
title: meta
type: object
properties:
pagination:
title: pagination
type: object
properties:
count:
title: count
type: integer
format: int32
page:
title: page
type: integer
format: int32
pages:
title: pages
type: integer
format: int32
'401':
description: Executing the request without credentials.
examples:
body:
errors:
- detail: Authentication credentials were not provided.
source:
pointer: /data
status: '401'
'404':
description: Catalog not found
examples:
body:
errors:
- detail: Searched catalog does not exist
source:
pointer: /data
status: '404'
'500':
description: Internal server error.
examples:
body:
errors:
- detail: Internal server error.
source:
pointer: /data
status: '500'
'503':
description: Service unavailable.
examples:
body:
errors:
- detail: The service is temporary unavailable. Please try again later.
source:
pointer: /data
status: '503'
consumes:
- application/vnd.api+json
produces:
- application/vnd.api+json
tags:
- Learning Management System
/v2/content/entity/:
parameters: []
get:
operationId: v2_content_get_entity
summary: Access to a specific QA Platform content
description: '
## Description
This API returns a specific content of the QA Platform library.
This API replaces /v1/content/entity/ to adhere to the new content terminology. The functionality remains the same.
'
parameters:
- name: filter[uuid]
in: query
description: uuid of the content
required: true
type: string
- name: filter[content_type]
in: query
description: '[Optional] Limit the search on the given content type.
Here the possible values (you can pick only one):
- course
- lesson
- quiz
- exam
- resource
- lab
- labchallenge
e.g.: https://...&filter[content_typ
# --- truncated at 32 KB (63 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cloud-academy/refs/heads/main/openapi/cloud-academy-learning-management-system-api-openapi.yml