360Learning · Agentic Access

360Learning Agentic Access

x-agentic-access generated

360Learning exposes 164 API operations that an AI agent could call, of which 104 are state-changing ‘acting’ operations. This is a recommended x-agentic-access execution contract — the scope, audience, consequence tier, short-lived token constraints, and escalation each action should carry before it is handed to an autonomous agent.

By consequence: 60 read and 104 safety-critical.

104 operations are classed safety-critical and should require human-in-the-loop approval at runtime.

Contracts are classified heuristically from the provider’s OpenAPI and refresh on every APIs.io network build; audience is bound per deployment. The model follows Curity’s Access Intelligence (apidays Munich 2026). Browse every provider’s agent contracts at agentic-access.apis.io.

CompanyEdtechLearning Management SystemE-LearningTrainingCollaborative LearningHR TechSkillsAPI
Operations: 164 Acting: 104 Human-in-the-loop: 104 Method: generated

By consequence

read 60 safety-critical 104

Highest-consequence actions

The physical and safety-critical operations an agent could invoke — the ones that most warrant scoped tokens, tight TTLs, and escalation. Full per-operation contracts are in the source below.

MethodPathConsequenceHuman-in-loop
DELETE /api/v2/bulk/groups safety-critical required
POST /api/v2/bulk/groups/catalog safety-critical required
DELETE /api/v2/bulk/groups/catalog safety-critical required
POST /api/v2/bulk/groups/library safety-critical required
DELETE /api/v2/bulk/groups/library safety-critical required
POST /api/v2/bulk/groups/memberships safety-critical required
DELETE /api/v2/bulk/groups/memberships safety-critical required
DELETE /api/v2/bulk/integrations/{integrationId}/courses safety-critical required
PUT /api/v2/bulk/integrations/{integrationId}/courses safety-critical required
POST /api/v2/bulk/integrations/{integrationId}/stats safety-critical required
POST /api/v2/bulk/notifications/subscriptions safety-critical required
DELETE /api/v2/bulk/skills safety-critical required
PUT /api/v2/bulk/skills safety-critical required
DELETE /api/v2/bulk/skills/jobs safety-critical required
PUT /api/v2/bulk/skills/jobs safety-critical required
PUT /api/v2/bulk/skills/jobs-skills safety-critical required
DELETE /api/v2/bulk/skills/libraries safety-critical required
PUT /api/v2/bulk/skills/libraries safety-critical required
POST /api/v2/bulk/skills/reviews safety-critical required
PUT /api/v2/bulk/skills/users/jobs safety-critical required
POST /api/v2/certificate-outlines safety-critical required
DELETE /api/v2/certificate-outlines/{certificateOutlineId} safety-critical required
PATCH /api/v2/certificate-outlines/{certificateOutlineId} safety-critical required
POST /api/v2/classroom-slots/{classroomSlotId}/attendance-sheets safety-critical required
DELETE /api/v2/classroom-slots/{classroomSlotId}/attendance-sheets/{attendanceSheetId} safety-critical required

Source

Agentic Access

Raw ↑
generated: '2026-07-17'
method: generated
source: openapi/360learning-bulk-api.json, openapi/360learning-core-api.json, openapi/360learning-plugin-api.json,
  openapi/360learning-user-authorized-api.json, openapi/360learning-webhook-api.json
description: Recommended x-agentic-access execution contracts, classified heuristically from
  the OpenAPI. A governance starting point for exposing this API to AI agents — review and bind
  audience per deployment. See research/curity/agentic-governance/.
summary:
  operations: 164
  by_action_class:
    acting: 104
    connected: 60
  by_consequence:
    safety-critical: 104
    read: 60
  human_in_the_loop_required: 104
operations:
- path: /api/v2/bulk/groups/catalog
  method: post
  operationId: v2.bulk.groups.AddContentsToGroupsCatalogController_addContentsToGroupsCatalog
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/groups/catalog
  method: delete
  operationId: v2.bulk.groups.RemoveContentsFromGroupsCatalogController_removeContentsFromGroupsCatalog
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/groups/library
  method: post
  operationId: v2.bulk.groups.AddContentsToGroupsLibraryController_addContentsToGroupsLibrary
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/groups/library
  method: delete
  operationId: v2.bulk.groups.RemoveContentsFromGroupsLibraryController_removeContentsFromGroupsLibrary
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/groups/memberships
  method: post
  operationId: v2.bulk.groups.AddUsersToGroupsController_addUsersToGroups
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/groups/memberships
  method: delete
  operationId: v2.bulk.groups.RemoveUsersFromGroupsController_removeUsersFromGroups
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/groups
  method: delete
  operationId: v2.bulk.groups.DeleteGroupsController_deleteGroups
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/integrations/{integrationId}/courses
  method: delete
  operationId: v2.bulk.integrations.ArchiveExternalCoursesController_archiveExternalCourses
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/integrations/{integrationId}/courses
  method: put
  operationId: v2.bulk.integrations.ImportExternalCoursesController_importExternalCourses
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/integrations/{integrationId}/stats
  method: post
  operationId: v2.bulk.integrations.ImportExternalStatisticsController_importExternalStatistics
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/operations/{bulkOperationId}
  method: get
  operationId: v2.bulk.operations.GetBulkOperationController_getBulkOperation
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/bulk/operations/{bulkOperationId}/results
  method: get
  operationId: v2.bulk.operations.GetBulkOperationResultsController_getBulkOperationResults
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/bulk/operations
  method: get
  operationId: v2.bulk.operations.GetBulkOperationsController_getBulkOperations
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/bulk/skills/reviews
  method: post
  operationId: v2.bulk.skills.AddSkillReviewsController_addSkillReviews
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/skills/jobs
  method: delete
  operationId: v2.bulk.skills.DeleteJobsController_deleteJobs
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/skills/jobs
  method: put
  operationId: v2.bulk.skills.UpsertJobsController_upsertJobs
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/skills/libraries
  method: delete
  operationId: v2.bulk.skills.DeleteLibrariesController_deleteLibraries
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/skills/libraries
  method: put
  operationId: v2.bulk.skills.UpsertLibrariesController_upsertLibraries
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/skills
  method: delete
  operationId: v2.bulk.skills.DeleteSkillsController_deleteSkills
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/skills
  method: put
  operationId: v2.bulk.skills.UpsertSkillsController_upsertSkills
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/skills/jobs-skills
  method: put
  operationId: v2.bulk.skills.ReplaceJobsSkillsController_replaceJobsSkills
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/skills/users/jobs
  method: put
  operationId: v2.bulk.skills.ReplaceUsersJobsController_replaceUsersJobs
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/bulk/notifications/subscriptions
  method: post
  operationId: v2.bulk.subscriptions.CreateSubscriptionEventsController_createSubscriptionEvents
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/certificate-outlines
  method: post
  operationId: v2.certificateOutlines.CreateCertificateOutlineController_createCertificateOutline
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/certificate-outlines
  method: get
  operationId: v2.certificateOutlines.GetCertificateOutlinesController_getCertificateOutlines
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/certificate-outlines/{certificateOutlineId}
  method: delete
  operationId: v2.certificateOutlines.DeleteCertificateOutlineController_deleteCertificateOutline
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/certificate-outlines/{certificateOutlineId}
  method: patch
  operationId: v2.certificateOutlines.UpdateCertificateOutlineController_updateCertificateOutline
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classrooms
  method: post
  operationId: v2.classrooms.CreateClassroomController_createClassroom
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classrooms
  method: get
  operationId: v2.classrooms.GetClassroomsController_getClassrooms
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/classrooms/{classroomId}
  method: get
  operationId: v2.classrooms.GetClassroomController_getClassroom
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/classrooms/{classroomId}
  method: patch
  operationId: v2.classrooms.UpdateClassroomController_updateClassroom
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classrooms/{classroomId}/registrations
  method: get
  operationId: v2.classrooms.GetClassroomRegistrationsController_getClassroomRegistrations
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/classrooms/{classroomId}/slots
  method: post
  operationId: v2.classrooms.CreateClassroomSlotController_createClassroomSlot
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classrooms/{classroomId}/slots
  method: get
  operationId: v2.classrooms.GetClassroomSlotsController_getClassroomSlots
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/classrooms/{classroomId}/slots/{classroomSlotId}
  method: delete
  operationId: v2.classrooms.DeleteClassroomSlotController_deleteClassroomSlot
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classrooms/{classroomId}/slots/{classroomSlotId}
  method: patch
  operationId: v2.classrooms.UpdateClassroomSlotController_updateClassroomSlot
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classroom-slots/{classroomSlotId}/attendance-sheets
  method: post
  operationId: v2.classrooms.CreateAttendanceSheetController_createAttendanceSheet
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classroom-slots/{classroomSlotId}/attendance-sheets
  method: get
  operationId: v2.classrooms.GetAttendanceSheetsController_getAttendanceSheets
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/classroom-slots/{classroomSlotId}/attendance-sheets/{attendanceSheetId}
  method: delete
  operationId: v2.classrooms.DeleteAttendanceSheetController_deleteAttendanceSheet
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classroom-slots/{classroomSlotId}/attendance-sheets/{attendanceSheetId}
  method: put
  operationId: v2.classrooms.UpdateAttendanceSheetController_updateAttendanceSheet
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classroom-slots/{classroomSlotId}/attendance-sheets/{attendanceSheetId}/attendances
  method: get
  operationId: v2.classrooms.GetAttendancesController_getAttendances
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/classroom-slots/{classroomSlotId}/waitlist
  method: get
  operationId: v2.classrooms.GetClassroomSlotWaitlistController_getClassroomSlotWaitlist
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/classroom-slots/{classroomSlotId}/waitlist/{userId}
  method: post
  operationId: v2.classrooms.JoinClassroomSlotWaitlistController_joinClassroomSlotWaitlist
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classroom-slots/{classroomSlotId}/waitlist/{userId}
  method: delete
  operationId: v2.classrooms.LeaveClassroomSlotWaitlistController_leaveClassroomSlotWaitlist
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classroom-slots/{classroomSlotId}/registrations/{userId}
  method: post
  operationId: v2.classrooms.AddSlotRegistrationController_addSlotRegistration
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/classroom-slots/{classroomSlotId}/registrations
  method: get
  operationId: v2.classrooms.GetSlotRegistrationsController_getSlotRegistrations
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/classroom-slots/{classroomSlotId}/registrations/{slotRegistrationId}
  method: patch
  operationId: v2.classrooms.UpdateSlotRegistrationController_updateSlotRegistration
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/courses/{courseId}/archive
  method: put
  operationId: v2.courses.ArchiveOrUnarchiveCourseController_archiveOrUnarchiveCourse
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/courses/elearning-standard
  method: post
  operationId: v2.courses.CreateELearningStandardCourseController_createELearningStandardCourse
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/courses/generate-from-prompt
  method: post
  operationId: v2.courses.GenerateFromPromptController_generateFromPrompt
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/courses/stats
  method: get
  operationId: v2.courses.GetAllCourseStatsController_getAllCourseStats
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/courses/{courseId}
  method: get
  operationId: v2.courses.GetCourseController_getCourse
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/courses/{courseId}/custom-fields/values
  method: get
  operationId: v2.courses.GetCourseCustomFieldValuesController_getCourseCustomFieldValues
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/courses/{courseId}/custom-fields/values
  method: put
  operationId: v2.courses.UpdateCourseCustomFieldValuesController_updateCourseCustomFieldValues
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/courses
  method: get
  operationId: v2.courses.GetCoursesController_getCourses
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/courses/{courseId}/tags
  method: get
  operationId: v2.courses.GetCourseTagsController_getTags
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/courses/{courseId}/tags
  method: put
  operationId: v2.courses.UpdateTagsController_updateTags
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/courses/elearning-standard/{courseId}
  method: patch
  operationId: v2.courses.UpdateELearningStandardCourseController_updateELearningStandardCourse
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/custom-fields
  method: post
  operationId: v2.customFields.CreateCustomFieldController_createCustomField
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/custom-fields
  method: get
  operationId: v2.customFields.GetCustomFieldsController_getCustomFields
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/custom-fields/{customFieldId}
  method: delete
  operationId: v2.customFields.DeleteCustomFieldController_deleteCustomField
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/custom-fields/{customFieldId}
  method: patch
  operationId: v2.customFields.UpdateCustomFieldController_updateCustomField
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/custom-fields/{customFieldId}/authorized-values
  method: get
  operationId: v2.customFields.GetAuthorizedValuesController_getAuthorizedValues
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/custom-fields/{customFieldId}/authorized-values
  method: put
  operationId: v2.customFields.ReplaceAuthorizedValuesController_replaceAuthorizedValues
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/custom-links
  method: post
  operationId: v2.customLinks.CreateCustomLinkController_createCustomLink
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/custom-links
  method: get
  operationId: v2.customLinks.GetCustomLinksByCompanyController_getCustomLinksByCompany
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/custom-links/{customLinkId}
  method: delete
  operationId: v2.customLinks.DeleteCustomLinkController_deleteCustomLink
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/custom-links/{customLinkId}
  method: put
  operationId: v2.customLinks.ReplaceCustomLinkController_replaceCustomLink
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/external-ids
  method: post
  operationId: v2.externalIds.CreateExternalIdController_createExternalId
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/external-ids
  method: get
  operationId: v2.externalIds.GetExternalIdsController_getExternalIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/external-ids/{mappingId}
  method: delete
  operationId: v2.externalIds.DeleteExternalIdController_deleteExternalId
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/external-ids/{mappingId}
  method: put
  operationId: v2.externalIds.UpdateExternalIdController_updateExternalId
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/groups/{groupId}/{role}/{userId}
  method: post
  operationId: v2.groups.AddUserRoleToGroupController_addUserRoleToGroup
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/groups/{groupId}/{role}/{userId}
  method: delete
  operationId: v2.groups.RemoveUserRoleFromGroupController_removeUserRoleFromGroup
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/groups
  method: post
  operationId: v2.groups.CreateGroupController_createGroup
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/groups
  method: get
  operationId: v2.groups.GetGroupsController_getGroups
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/groups/{groupId}
  method: delete
  operationId: v2.groups.DeleteGroupController_deleteGroup
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/groups/{groupId}
  method: get
  operationId: v2.groups.GetGroupController_getGroup
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/groups/{groupId}
  method: patch
  operationId: v2.groups.UpdateGroupController_updateGroup
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /api/v2/groups/{groupId}/roles
  method: get
  operationId: v2.groups.GetGroupMembersController_getGroupMembers
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/groups/{groupId}/catalog/{contentType}-ids
  method: get
  operationId: v2.groups.GetCatalogContentIdsController_getCatalogContentIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/groups/{groupId}/library/{contentType}-ids
  method: get
  operationId: v2.groups.GetLibraryContentIdsController_getLibraryContentIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /api/v2/groups/{groupId}/media
  method: post
  operationId: v2.groups.UploadGroupMediaController_uploadGroupMedia
  x-agentic-access:
    action-class:

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