generated: '2026-07-15' method: generated source: openapi/microsoft-project-rest-api.yaml 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: 63 by_action_class: connected: 32 acting: 31 by_consequence: read: 32 write: 30 physical: 1 human_in_the_loop_required: 0 operations: - path: /Projects method: get operationId: listProjects x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects method: post operationId: createProject x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}') method: get operationId: getProject x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects('{projectId}') method: delete operationId: deleteProject x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/checkOut() method: post operationId: checkOutProject x-agentic-access: action-class: acting consequence: physical subject: required audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/Draft/checkIn(force={force}) method: post operationId: checkInProject x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/Draft/publish(checkIn={checkIn}) method: post operationId: publishProject x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/submitToWorkflow() method: post operationId: submitProjectToWorkflow x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/Tasks method: get operationId: listProjectTasks x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects('{projectId}')/Tasks('{taskId}') method: get operationId: getProjectTask x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects('{projectId}')/Draft/Tasks method: get operationId: listDraftTasks x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects('{projectId}')/Draft/Tasks method: post operationId: createDraftTask x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/Draft/Tasks('{taskId}') method: delete operationId: deleteDraftTask x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/Draft/Tasks('{taskId}') method: patch operationId: updateDraftTask x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/Draft/TaskLinks method: get operationId: listDraftTaskLinks x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects('{projectId}')/Draft/TaskLinks method: post operationId: createDraftTaskLink x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/Assignments method: get operationId: listProjectAssignments x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects('{projectId}')/Draft/Assignments method: get operationId: listDraftAssignments x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects('{projectId}')/Draft/Assignments method: post operationId: createDraftAssignment x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/Draft/Assignments('{assignmentId}') method: delete operationId: deleteDraftAssignment x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/Draft/ProjectResources method: get operationId: listDraftProjectResources x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects('{projectId}')/Draft/ProjectResources method: post operationId: addDraftProjectResource x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Projects('{projectId}')/ProjectResources method: get operationId: listProjectResources x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /EnterpriseResources method: get operationId: listEnterpriseResources x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /EnterpriseResources method: post operationId: createEnterpriseResource x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /EnterpriseResources('{resourceId}')/Assignments method: get operationId: listEnterpriseResourceAssignments x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Calendars method: get operationId: listCalendars x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Calendars method: post operationId: createCalendar x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Calendars('{calendarId}') method: get operationId: getCalendar x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Calendars('{calendarId}') method: delete operationId: deleteCalendar x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /CustomFields method: get operationId: listCustomFields x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /CustomFields method: post operationId: createCustomField x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /CustomFields('{fieldId}') method: get operationId: getCustomField x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /CustomFields('{fieldId}') method: delete operationId: deleteCustomField x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /LookupTables method: get operationId: listLookupTables x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /LookupTables method: post operationId: createLookupTable x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /LookupTables('{tableId}') method: get operationId: getLookupTable x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /LookupTables('{tableId}') method: delete operationId: deleteLookupTable x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /LookupTables('{tableId}')/Entries method: get operationId: listLookupTableEntries x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /LookupTables('{tableId}')/Entries method: post operationId: createLookupTableEntry x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /TimeSheetPeriods method: get operationId: listTimeSheetPeriods x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /TimeSheetPeriods('{periodId}')/TimeSheet method: get operationId: getTimeSheet x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /TimeSheetPeriods('{periodId}')/TimeSheet/Lines method: get operationId: listTimeSheetLines x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /TimeSheetPeriods('{periodId}')/TimeSheet/Lines method: post operationId: createTimeSheetLine x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /TimeSheetPeriods('{periodId}')/TimeSheet/submitForApproval() method: post operationId: submitTimeSheetForApproval x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Phases method: get operationId: listPhases x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Phases method: post operationId: createPhase x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Phases('{phaseId}') method: get operationId: getPhase x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Phases('{phaseId}') method: delete operationId: deletePhase x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Stages method: get operationId: listStages x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Stages method: post operationId: createStage x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /Stages('{stageId}') method: get operationId: getStage x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Stages('{stageId}') method: delete operationId: deleteStage x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /EnterpriseProjectTypes method: get operationId: listEnterpriseProjectTypes x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /EnterpriseProjectTypes method: post operationId: createEnterpriseProjectType x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /EnterpriseProjectTypes('{projectTypeId}') method: get operationId: getEnterpriseProjectType x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /EnterpriseProjectTypes('{projectTypeId}') method: delete operationId: deleteEnterpriseProjectType x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /EventHandlers method: get operationId: listEventHandlers x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /EventHandlers method: post operationId: createEventHandler x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /EventHandlers('{handlerId}') method: get operationId: getEventHandler x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /EventHandlers('{handlerId}') method: delete operationId: deleteEventHandler x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /WorkflowActivities method: get operationId: listWorkflowActivities x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /Projects('{projectId}')/QueueJobs method: get operationId: listProjectQueueJobs x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none