360Learning Integrations API
The Integrations API from 360Learning β 5 operation(s) for integrations.
The Integrations API from 360Learning β 5 operation(s) for integrations.
openapi: 3.1.0
info:
title: Bulk Authentication Integrations API
description: ''
version: 1.0.0
contact: {}
servers:
- url: https://app.360learning.com
description: Production EU
- url: https://app.us.360learning.com
description: Production US
tags:
- name: Integrations
paths:
/api/v2/bulk/integrations/{integrationId}/courses:
delete:
description: '> π
>
> Required OAuth scope: `integrations:bulk`.
> π
>
> This endpoint processes up to 1,000 objects asynchronously. For more information, see the [Bulk operations guide](doc:bulk-operations-1).
Archives multiple external courses in bulk based on the provided integration ID.
Upon submission, the request is queued. Use the provided URL in the response header to check the status of the bulk operation.'
operationId: v2.bulk.integrations.ArchiveExternalCoursesController_archiveExternalCourses
parameters:
- name: 360-api-version
in: header
description: The version of the API.
required: true
schema:
type: string
enum:
- v2.0
- name: integrationId
required: true
in: path
description: The unique ID of the integration.
schema:
format: ObjectId
pattern: ^[a-fA-F0-9]{24}$
example: 507f1f77bcf86cd799439011
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ArchiveExternalCoursesBody'
responses:
'202':
description: The operation is successfully created.
headers:
Location:
schema:
type: string
description: 'The URL to retrieve the status of the bulk operation using its operation ID.
Example: `https://app.360learning.com/api/v2/bulk/operations/507f1f77bcf86cd799439011`.'
example: https://app.360learning.com/api/v2/bulk/operations/507f1f77bcf86cd799439011
'400':
description: The server cannot or will not process the request due to something that is perceived to be a client error.
content:
application/json:
schema:
oneOf:
- description: The input of a bulk operation must be an array.
title: Invalid Input
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- invalidInput
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
- description: The input array size exceeds the maximum limit of 1,000 objects.
title: Input Too Long
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- inputTooLong
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
- description: The platform is one of the reserved ones.
title: Reserved Platform Name
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- reservedPlatformName
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'401':
description: The given access token is either missing, invalid, has expired, or has been revoked.
content:
application/json:
schema:
type: object
properties:
error:
type: string
enum:
- invalid_token
required:
- error
'403':
description: The given access token does not have the required OAuth scope to execute the request.
content:
application/json:
schema:
title: Invalid Scope
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- invalid_scope
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'404':
description: The given `integrationId` does not correspond to any existing integration.
content:
application/json:
schema:
title: Integration Not Found
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- integrationNotFound
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'429':
description: The maximum number of concurrent operations has been reached.
content:
application/json:
schema:
title: Bulk Operations Concurrency Limit Reached
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- bulkOperationsConcurrencyLimitReached
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'503':
description: The bulk API is temporarily disabled.
content:
application/json:
schema:
title: Bulk API Disabled
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- bulkAPIDisabled
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
security:
- oauth2: []
summary: Archive external courses
tags:
- Integrations
put:
description: '> π
>
> Required OAuth scope: `integrations:bulk`.
> π
>
> This endpoint processes up to 10,000 objects asynchronously. For more information, see the [Bulk operations guide](doc:bulk-operations-1).
Adds or replaces multiple external courses based on the given `integrationId` and the courses''s `externalId`.
- If a provided `externalId` matches an existing external course, the course is replaced with the new data.
- If no match is found, a new course is created and added to the group catalog and library.
Upon submission, the request is queued. Use the provided URL in the response header to check the status of the bulk operation.'
operationId: v2.bulk.integrations.ImportExternalCoursesController_importExternalCourses
parameters:
- name: 360-api-version
in: header
description: The version of the API.
required: true
schema:
type: string
enum:
- v2.0
- name: integrationId
required: true
in: path
description: The unique ID of the integration.
schema:
format: ObjectId
pattern: ^[a-fA-F0-9]{24}$
example: 507f1f77bcf86cd799439011
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportExternalCoursesBody'
responses:
'202':
description: The operation is successfully created.
headers:
Location:
schema:
type: string
description: 'The URL to retrieve the status of the bulk operation using its operation ID.
Example: `https://app.360learning.com/api/v2/bulk/operations/507f1f77bcf86cd799439011`.'
example: https://app.360learning.com/api/v2/bulk/operations/507f1f77bcf86cd799439011
'400':
description: The server cannot or will not process the request due to something that is perceived to be a client error.
content:
application/json:
schema:
oneOf:
- description: The input of a bulk operation must be an array.
title: Invalid Input
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- invalidInput
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
- description: The input array size exceeds the maximum limit of 10,000 objects.
title: Input Too Long
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- inputTooLong
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
- description: The platform is one of the reserved ones.
title: Reserved Platform Name
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- reservedPlatformName
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'401':
description: The given access token is either missing, invalid, has expired, or has been revoked.
content:
application/json:
schema:
type: object
properties:
error:
type: string
enum:
- invalid_token
required:
- error
'403':
description: The given access token does not have the required OAuth scope to execute the request.
content:
application/json:
schema:
title: Invalid Scope
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- invalid_scope
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'404':
description: The given `integrationId` does not correspond to any existing integration.
content:
application/json:
schema:
title: Integration Not Found
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- integrationNotFound
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'429':
description: The maximum number of concurrent operations has been reached.
content:
application/json:
schema:
title: Bulk Operations Concurrency Limit Reached
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- bulkOperationsConcurrencyLimitReached
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'503':
description: The bulk API is temporarily disabled.
content:
application/json:
schema:
title: Bulk API Disabled
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- bulkAPIDisabled
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
security:
- oauth2: []
summary: Upsert external courses
tags:
- Integrations
/api/v2/bulk/integrations/{integrationId}/stats:
post:
description: '> π
>
> Required OAuth scope: `integrations:bulk`.
> π
>
> This endpoint processes up to 10,000 objects asynchronously. For more information, see the [Bulk operations guide](doc:bulk-operations-1).
Imports multiple integration statistics in bulk based on the provided `integrationId`.
This endpoint will:
- Create a new attempt if any of the following is true: `forceNew` is set to `true`; no attempt currently exists for the course and user; or `firstActivityAt` is later than the `lastActivityAt` or `completedAt` of all existing attempts.
- Update existing non-completed attempts if `firstActivityAt` is earlier than the `lastActivityAt` or `completedAt` of those attempts.
Upon submission, the request is queued. Use the provided URL in the response header to check the status of the bulk operation.'
operationId: v2.bulk.integrations.ImportExternalStatisticsController_importExternalStatistics
parameters:
- name: 360-api-version
in: header
description: The version of the API.
required: true
schema:
type: string
enum:
- v2.0
- name: integrationId
required: true
in: path
description: The unique ID of the integration.
schema:
format: ObjectId
pattern: ^[a-fA-F0-9]{24}$
example: 507f1f77bcf86cd799439011
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportExternalStatisticsBody'
responses:
'202':
description: The operation is successfully created.
headers:
Location:
schema:
type: string
description: 'The URL to retrieve the status of the bulk operation using its operation ID.
Example: `https://app.360learning.com/api/v2/bulk/operations/507f1f77bcf86cd799439011`.'
example: https://app.360learning.com/api/v2/bulk/operations/507f1f77bcf86cd799439011
'400':
description: The server cannot or will not process the request due to something that is perceived to be a client error.
content:
application/json:
schema:
oneOf:
- description: The input of a bulk operation must be an array.
title: Invalid Input
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- invalidInput
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
- description: The input array size exceeds the maximum limit of 10,000 objects.
title: Input Too Long
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- inputTooLong
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
- description: The platform is one of the reserved ones.
title: Reserved Platform Name
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- reservedPlatformName
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'401':
description: The given access token is either missing, invalid, has expired, or has been revoked.
content:
application/json:
schema:
type: object
properties:
error:
type: string
enum:
- invalid_token
required:
- error
'403':
description: The given access token does not have the required OAuth scope to execute the request.
content:
application/json:
schema:
title: Invalid Scope
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- invalid_scope
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'404':
description: The given `integrationId` does not correspond to any existing integration.
content:
application/json:
schema:
title: Integration Not Found
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- integrationNotFound
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'429':
description: The maximum number of concurrent operations has been reached.
content:
application/json:
schema:
title: Bulk Operations Concurrency Limit Reached
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- bulkOperationsConcurrencyLimitReached
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'503':
description: The bulk API is temporarily disabled.
content:
application/json:
schema:
title: Bulk API Disabled
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- bulkAPIDisabled
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
security:
- oauth2: []
summary: Import integration statistics
tags:
- Integrations
/api/v2/integrations:
post:
description: '> π
>
> Required OAuth scope: `integrations:write`.
Create an integration configuration.'
operationId: v2.integrations.CreateIntegrationController_createIntegration
parameters:
- name: 360-api-version
in: header
description: The version of the API.
required: true
schema:
type: string
enum:
- v2.0
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BaseIntegrationDTO'
responses:
'201':
description: Returns the created integration configuration.
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationDTO'
'400':
description: The server cannot or will not process the request due to something that is perceived to be a client error.
content:
application/json:
schema:
oneOf:
- description: The given `externalPlatform` already has an integration defined for this group.
title: Duplicate External Platform
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- duplicateExternalPlatform
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
- description: The maximum number of integration configurations has been reached.
title: Integrations Limit Reached
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- integrationsLimitReached
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
- description: The platform is one of the reserved ones.
title: Reserved Platform Name
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- reservedPlatformName
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'401':
description: The given access token is either missing, invalid, has expired, or has been revoked.
content:
application/json:
schema:
type: object
properties:
error:
type: string
enum:
- invalid_token
required:
- error
'403':
description: The given access token does not have the required OAuth scope to execute the request.
content:
application/json:
schema:
title: Invalid Scope
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- invalid_scope
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'404':
description: The server cannot find the requested resource.
content:
application/json:
schema:
oneOf:
- description: The given `groupId` does not correspond to any existing group.
title: Group Not Found
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- groupNotFound
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
- description: The given `authorId` does not correspond to any existing user.
title: User Not Found
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- userNotFound
message:
type: string
example: A human-readable message to help with debugging.
required:
- code
- message
required:
- error
'429':
description: 'The client has sent too many requests in a short amount of time. '
content:
application/json:
schema:
type: object
properties:
error:
type: string
enum:
- tooManyRequests
required:
- error
security:
- oauth2: []
summary: Create an integration configuration
tags:
- Integrations
get:
description: '> π
>
> Required OAuth scope: `integrations:read`.
> π
>
> This endpoint is paginated with a page size of 100 integration configurations. For more information, see the [Pagination guide](doc:pagination).
Lists all integration configurations.'
operationId: v2.integrations.GetIntegrationsController_getIntegrations
parameters:
- name: 360-api-version
in: header
description: The version of the API.
required: true
schema:
type: string
enum:
- v2.0
- name: externalPlatform
required: false
in: query
style: deepObject
explode: true
description: 'Filter on **externalPlatform** property with LHS bracket notation.
Expected value format is a string.'
schema:
properties:
eq:
type: string
description: Filter on values equal to the given one
example: loremIpsum
ne:
type: string
description: Filter on values not equal to the given one
example: l
# --- truncated at 32 KB (75 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/360learning/refs/heads/main/openapi/360learning-integrations-api-openapi.yml