360Learning Integrations API

The Integrations API from 360Learning β€” 5 operation(s) for integrations.

OpenAPI Specification

360learning-integrations-api-openapi.yml Raw ↑
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