360Learning Integrations API

The Integrations API from 360Learning — 5 operation(s) for integrations.

Operations 8

DELETE /api/v2/bulk/integrations/{integrationId}/courses Archive external courses #
PUT /api/v2/bulk/integrations/{integrationId}/courses Upsert external courses #
POST /api/v2/bulk/integrations/{integrationId}/stats Import integration statistics #
POST /api/v2/integrations Create an integration configuration #
GET /api/v2/integrations List integration configurations #
DELETE /api/v2/integrations/{integrationId} Delete an integration configuration #
PATCH /api/v2/integrations/{integrationId} Edit an integration configuration #
GET /api/v2/integrations/{integrationId}/courses/{externalId} Retrieve an external course #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/360learning-integrations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

360learning-integrations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 360learning Integrations API
  version: 1.0.0
  contact: {}
  description: 'Operations tagged Integrations across 2 of this provider''s published API definitions: 360learning-bulk-api.json, 360learning-core-api.json. Each path carries the servers of the definition it was published in.'
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
    servers:
    - url: https://app.360learning.com
      description: Production EU
    - url: https://app.us.360learning.com
      description: Production US
  /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
    servers:
    - url: https://app.360learning.com
      description: Production EU
    - url: https://app.us.360learning.com
      description: Production US
  /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
  

# --- truncated at 32 KB (76 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/360learning/refs/heads/main/openapi/360learning-integrations-api-openapi.yml